--- /srv/reproducible-results/rbuild-debian/r-b-build.0tBWoDsH/b1/python-xarray_2024.09.0-1_arm64.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.0tBWoDsH/b2/python-xarray_2024.09.0-1_arm64.changes ├── Files │ @@ -1,3 +1,3 @@ │ │ - c0a202ea994368771e0a78ddc81dde8d 4545356 doc optional python-xarray-doc_2024.09.0-1_all.deb │ + 136c3e167846ba08723ee4314218f986 4545992 doc optional python-xarray-doc_2024.09.0-1_all.deb │ de00d082634b77cf3c3015d1230edd8b 769008 python optional python3-xarray_2024.09.0-1_all.deb ├── python-xarray-doc_2024.09.0-1_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2024-09-13 05:35:29.000000 debian-binary │ │ --rw-r--r-- 0 0 0 7016 2024-09-13 05:35:29.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 4538148 2024-09-13 05:35:29.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 7012 2024-09-13 05:35:29.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 4538788 2024-09-13 05:35:29.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./control │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ Package: python-xarray-doc │ │ │ │ Source: python-xarray │ │ │ │ Version: 2024.09.0-1 │ │ │ │ Architecture: all │ │ │ │ Maintainer: Debian Science Maintainers │ │ │ │ -Installed-Size: 13522 │ │ │ │ +Installed-Size: 13525 │ │ │ │ Depends: libjs-sphinxdoc (>= 7.4), libjs-mathjax, libjs-requirejs │ │ │ │ Built-Using: sphinx (= 7.4.7-3) │ │ │ │ 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 │ │ │ │ @@ -194,32 +194,32 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 121619 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/contributing.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 461 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/dask.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 494 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/data-structures.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 20751 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/developers-meeting.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 479 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/duckarrays.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 35432 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/ecosystem.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ │ │ │ │ --rw-r--r-- 0 root (0) root (0) 163064 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10306 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.ipynb.gz │ │ │ │ --rw-r--r-- 0 root (0) root (0) 64161 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24982 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.ipynb.gz │ │ │ │ --rw-r--r-- 0 root (0) root (0) 148190 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10487 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.ipynb.gz │ │ │ │ --rw-r--r-- 0 root (0) root (0) 55119 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22684 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.ipynb.gz │ │ │ │ --rw-r--r-- 0 root (0) root (0) 40075 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/blank_template.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 163079 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 10307 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 64162 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24993 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 148191 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 10486 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 55120 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22678 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 40076 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/blank_template.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2581 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/blank_template.ipynb.gz │ │ │ │ --rw-r--r-- 0 root (0) root (0) 63801 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4547 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.ipynb.gz │ │ │ │ --rw-r--r-- 0 root (0) root (0) 56471 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12237 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.ipynb.gz │ │ │ │ --rw-r--r-- 0 root (0) root (0) 63958 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4402 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 63802 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4560 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 56472 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12249 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 63959 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4399 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 101478 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/weather-data.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 367887 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/weather-data.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 367876 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/examples/weather-data.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 491 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/faq.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 27713 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/gallery.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 25541 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/genindex.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/getting-started-guide/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 64335 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/getting-started-guide/faq.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19680 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/getting-started-guide/index.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 37203 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/getting-started-guide/installing.html │ │ │ │ @@ -234,49 +234,49 @@ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 97269 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/chunked-arrays.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 31762 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/duck-arrays-integration.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 34636 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/extending-xarray.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 67009 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/how-to-add-new-backend.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 43386 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/how-to-create-custom-index.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 20391 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/index.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 73202 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/internal-design.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 73204 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/internal-design.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 24902 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/interoperability.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 38346 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/zarr-encoding-spec.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 38347 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/internals/zarr-encoding-spec.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 488 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/interpolation.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 455 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/io.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 20493 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/objects.inv │ │ │ │ -rw-r--r-- 0 root (0) root (0) 467 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/pandas.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 473 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/plotting.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 16673 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/py-modindex.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 524 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/quick-overview.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 443 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/related-projects.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 476 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/reshaping.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 38109 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/roadmap.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 16945 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/search.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 243047 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/searchindex.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 243805 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/searchindex.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 482 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/terminology.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 482 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/time-series.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 26038 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/tutorials-and-videos.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 70196 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/combining.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 152581 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/computation.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 90565 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/dask.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 116222 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/data-structures.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 57328 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/duckarrays.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 57749 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/groupby.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19329 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/index.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 321645 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/indexing.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 110422 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/interpolation.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 198070 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/io.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 321648 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/indexing.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 110423 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/interpolation.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 198071 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/io.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 21960 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/options.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 54839 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/pandas.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 242427 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/plotting.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 88831 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/reshaping.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 242429 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/plotting.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 88832 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/reshaping.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 54490 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/terminology.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 89798 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/testing.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 91741 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/testing.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 56835 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/time-series.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 56156 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/weather-climate.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 494 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/weather-climate.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1036611 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/whats-new.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 512 2024-09-13 05:35:29.000000 ./usr/share/doc/python-xarray-doc/html/why-xarray.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2024-09-13 05:35:29.000000 ./usr/share/doc-base/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 290 2024-09-13 05:35:29.000000 ./usr/share/doc-base/python-xarray-doc.python-xarray-doc │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.html │ │ │ │ @@ -622,15 +622,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ │ │

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

│ │ │ │
│ │ │ │
[3]:
│ │ │ │  
│ │ │ │
│ │ │ │ @@ -690,90 +690,90 @@ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -Error in callback <function _draw_all_if_interactive at 0xffff3c3579c0> (for post_execute), with arguments args (),kwargs {}:
│ │ │ │ +Error in callback <function _draw_all_if_interactive at 0xffff696b79c0> (for post_execute), with arguments args (),kwargs {}:
│ │ │ │  
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │  ---------------------------------------------------------------------------
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles/natural_earth/physical'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles/natural_earth/physical'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles/natural_earth'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles/natural_earth'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  PermissionError                           Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3/dist-packages/matplotlib/pyplot.py:197, in _draw_all_if_interactive()
│ │ │ │      195 def _draw_all_if_interactive() -> None:
│ │ │ │      196     if matplotlib.is_interactive():
│ │ │ │ @@ -982,75 +982,75 @@
│ │ │ │  ---------------------------------------------------------------------------
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles/natural_earth/physical'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles/natural_earth/physical'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles/natural_earth'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles/natural_earth'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build/.local'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build/.local'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents, exist_ok)
│ │ │ │     1312 try:
│ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │     1314 except FileNotFoundError:
│ │ │ │  
│ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-build'
│ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-build'
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  PermissionError                           Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3/dist-packages/IPython/core/formatters.py:340, in BaseFormatter.__call__(self, obj)
│ │ │ │      338     pass
│ │ │ │      339 else:
│ │ │ │ ├── html2text {}
│ │ │ │ │ @@ -164,15 +164,15 @@
│ │ │ │ │      273     message.append(
│ │ │ │ │      274         f"Use environment variable '{env}' to specify a different
│ │ │ │ │  location."
│ │ │ │ │      275     )
│ │ │ │ │  --> 276 raise PermissionError(" ".join(message)) from error
│ │ │ │ │  
│ │ │ │ │  PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not
│ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/
│ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/
│ │ │ │ │  xarray_tutorial_data'. Will not be able to download data files.
│ │ │ │ │  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)
│ │ │ │ │ @@ -203,97 +203,97 @@
│ │ │ │ │  ----> 7 plot = ds.t2m[0].plot(
│ │ │ │ │        8     cmap=plt.cm.coolwarm, transform=ccrs.PlateCarree(), cbar_kwargs=
│ │ │ │ │  {"shrink": 0.6}
│ │ │ │ │        9 )
│ │ │ │ │       10 plt.title("ERA5 - 2m temperature British Isles March 2019")
│ │ │ │ │  
│ │ │ │ │  NameError: name 'ds' is not defined
│ │ │ │ │ -Error in callback  (for
│ │ │ │ │ +Error in callback  (for
│ │ │ │ │  post_execute), with arguments args (),kwargs {}:
│ │ │ │ │  ---------------------------------------------------------------------------
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share/cartopy/shapefiles/natural_earth/physical'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share/cartopy/shapefiles/natural_earth'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share/cartopy/shapefiles'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share/cartopy'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  PermissionError                           Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3/dist-packages/matplotlib/pyplot.py:197, in
│ │ │ │ │  _draw_all_if_interactive()
│ │ │ │ │ @@ -523,87 +523,87 @@
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share/cartopy/shapefiles/natural_earth/physical'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share/cartopy/shapefiles/natural_earth'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share/cartopy/shapefiles'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share/cartopy'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local/share'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build/.local'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  FileNotFoundError                         Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.12/pathlib.py:1313, in Path.mkdir(self, mode, parents,
│ │ │ │ │  exist_ok)
│ │ │ │ │     1312 try:
│ │ │ │ │  -> 1313     os.mkdir(self, mode)
│ │ │ │ │     1314 except FileNotFoundError:
│ │ │ │ │  
│ │ │ │ │ -FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/first-
│ │ │ │ │ +FileNotFoundError: [Errno 2] No such file or directory: '/nonexistent/second-
│ │ │ │ │  build'
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  PermissionError                           Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3/dist-packages/IPython/core/formatters.py:340, in
│ │ │ │ │  BaseFormatter.__call__(self, obj)
│ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.ipynb.gz
│ │ │ │ ├── ERA5-GRIB-example.ipynb
│ │ │ │ │ ├── Pretty-printed
│ │ │ │ │ │┄ Similarity: 0.9983703823622252%
│ │ │ │ │ │┄ Differences: {"'cells'": "{2: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:46:14.672173Z', "
│ │ │ │ │ │┄             "'iopub.status.busy': '2024-09-18T05:46:14.671877Z', 'iopub.status.idle': "
│ │ │ │ │ │┄             "'2024-09-18T05:46:18.123978Z', 'shell.execute_reply': "
│ │ │ │ │ │┄             "'2024-09-18T05:46:18.123221Z'}}}, 4: {'metadata': {'execution': "
│ │ │ │ │ │┄             "{'iopub.execute_input': '2024-09-18T05:46:18.132461Z', 'iopub.status.busy': "
│ │ │ │ │ │┄             "'2024-09-18T05:46:18.131972Z', 'iopub.status.idle': '2024-09-18T05:46:1 […]
│ │ │ │ │ │ @@ -15,18 +15,18 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 1,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2024-09-18T05:36:03.859288Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2024-09-18T05:36:03.858977Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2024-09-18T05:36:05.423025Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2024-09-18T05:36:05.422325Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2024-09-18T05:46:14.672173Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2024-09-18T05:46:14.671877Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2024-09-18T05:46:18.123978Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2024-09-18T05:46:18.123221Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "name": "stderr",
│ │ │ │ │ │                      "output_type": "stream",
│ │ │ │ │ │                      "text": [
│ │ │ │ │ │ @@ -47,24 +47,24 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 2,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2024-09-18T05:36:05.447628Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2024-09-18T05:36:05.447109Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2024-09-18T05:36:06.039157Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2024-09-18T05:36:06.038334Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2024-09-18T05:46:18.132461Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2024-09-18T05:46:18.131972Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2024-09-18T05:46:19.088047Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2024-09-18T05:46:19.087205Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "PermissionError",
│ │ │ │ │ │ -                    "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.",
│ │ │ │ │ │ +                    "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │                      "traceback": [
│ │ │ │ │ │                          "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
│ │ │ │ │ │                          "\u001b[0;31mPermissionError\u001b[0m                           Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:262\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m    258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreate\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m    259\u001b[0m     \u001b[38;5;66;03m# When running in parallel, it's possible that multiple jobs will\u001b[39;00m\n\u001b[1;32m    260\u001b[0m     \u001b[38;5;66;03m# try to create the path at the same time. Use exist_ok to avoid\u001b[39;00m\n\u001b[1;32m    261\u001b[0m     \u001b[38;5;66;03m# raising an error.\u001b[39;00m\n\u001b[0;32m--> 262\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m    263\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m    214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m     \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m    217\u001b[0m     \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m    214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m     \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m    217\u001b[0m     \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n",
│ │ │ │ │ │ @@ -74,15 +74,15 @@
│ │ │ │ │ │                          "\nThe above exception was the direct cause of the following exception:\n",
│ │ │ │ │ │                          "\u001b[0;31mPermissionError\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:207\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    170\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    171\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    172\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    173\u001b[0m \u001b[38;5;124;03m    (requires internet).\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    205\u001b[0m \u001b[38;5;124;03m    load_dataset\u001b[39;00m\n\u001b[1;32m    206\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m--> 207\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    208\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:161\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m    158\u001b[0m     url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/raw/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mversion\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    160\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 161\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\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\n\u001b[1;32m    162\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    163\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:227\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m    222\u001b[0m action, verb \u001b[38;5;241m=\u001b[39m download_action(full_path, known_hash)\n\u001b[1;32m    224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdownload\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupdate\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m    225\u001b[0m     \u001b[38;5;66;03m# We need to write data, so create the local data directory if it\u001b[39;00m\n\u001b[1;32m    226\u001b[0m     \u001b[38;5;66;03m# doesn't already exist.\u001b[39;00m\n\u001b[0;32m--> 227\u001b[0m     \u001b[43mmake_local_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    229\u001b[0m     get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m    230\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m data from \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 to file \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;124m\"\u001b[39m,\n\u001b[1;32m    231\u001b[0m         verb,\n\u001b[1;32m    232\u001b[0m         url,\n\u001b[1;32m    233\u001b[0m         \u001b[38;5;28mstr\u001b[39m(full_path),\n\u001b[1;32m    234\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",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:276\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m    272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m env \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    273\u001b[0m     message\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m    274\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse environment variable \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00menv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to specify a different location.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    275\u001b[0m     )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mPermissionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(message)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merror\u001b[39;00m\n",
│ │ │ │ │ │ -                        "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files."
│ │ │ │ │ │ +                        "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files."
│ │ │ │ │ │                      ]
│ │ │ │ │ │                  }
│ │ │ │ │ │              ],
│ │ │ │ │ │              "source": [
│ │ │ │ │ │                  "ds = xr.tutorial.load_dataset(\"era5-2mt-2019-03-uk.grib\", engine=\"cfgrib\")"
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │ @@ -94,18 +94,18 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 3,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2024-09-18T05:36:06.055532Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2024-09-18T05:36:06.055182Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2024-09-18T05:36:06.087116Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2024-09-18T05:36:06.086339Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2024-09-18T05:46:19.096241Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2024-09-18T05:46:19.095947Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2024-09-18T05:46:19.179274Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2024-09-18T05:46:19.163196Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "NameError",
│ │ │ │ │ │                      "evalue": "name 'ds' is not defined",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │ @@ -130,18 +130,18 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 4,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2024-09-18T05:36:06.103430Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2024-09-18T05:36:06.103101Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2024-09-18T05:36:08.746347Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2024-09-18T05:36:08.730326Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2024-09-18T05:46:19.188244Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2024-09-18T05:46:19.187938Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2024-09-18T05:46:21.800264Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2024-09-18T05:46:21.799228Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "NameError",
│ │ │ │ │ │                      "evalue": "name 'ds' is not defined",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │ @@ -152,50 +152,50 @@
│ │ │ │ │ │                          "\u001b[0;31mNameError\u001b[0m: name 'ds' is not defined"
│ │ │ │ │ │                      ]
│ │ │ │ │ │                  },
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "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": "PermissionError",
│ │ │ │ │ │                      "evalue": "[Errno 13] Permission denied: '/nonexistent'",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │                      "traceback": [
│ │ │ │ │ │                          "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles/natural_earth/physical'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles/natural_earth/physical'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles/natural_earth'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles/natural_earth'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mPermissionError\u001b[0m                           Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/matplotlib/pyplot.py:197\u001b[0m, in \u001b[0;36m_draw_all_if_interactive\u001b[0;34m()\u001b[0m\n\u001b[1;32m    195\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_draw_all_if_interactive\u001b[39m() \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    196\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m matplotlib\u001b[38;5;241m.\u001b[39mis_interactive():\n\u001b[0;32m--> 197\u001b[0m         \u001b[43mdraw_all\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/matplotlib/_pylab_helpers.py:132\u001b[0m, in \u001b[0;36mGcf.draw_all\u001b[0;34m(cls, force)\u001b[0m\n\u001b[1;32m    130\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m manager \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mget_all_fig_managers():\n\u001b[1;32m    131\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m force \u001b[38;5;129;01mor\u001b[39;00m manager\u001b[38;5;241m.\u001b[39mcanvas\u001b[38;5;241m.\u001b[39mfigure\u001b[38;5;241m.\u001b[39mstale:\n\u001b[0;32m--> 132\u001b[0m         \u001b[43mmanager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcanvas\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw_idle\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/matplotlib/backend_bases.py:1893\u001b[0m, in \u001b[0;36mFigureCanvasBase.draw_idle\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m   1891\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_is_idle_drawing:\n\u001b[1;32m   1892\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_idle_draw_cntx():\n\u001b[0;32m-> 1893\u001b[0m         \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\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\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py:388\u001b[0m, in \u001b[0;36mFigureCanvasAgg.draw\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    385\u001b[0m \u001b[38;5;66;03m# Acquire a lock on the shared font cache.\u001b[39;00m\n\u001b[1;32m    386\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\u001b[38;5;241m.\u001b[39m_wait_cursor_for_draw_cm() \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\n\u001b[1;32m    387\u001b[0m       \u001b[38;5;28;01melse\u001b[39;00m nullcontext()):\n\u001b[0;32m--> 388\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    389\u001b[0m     \u001b[38;5;66;03m# A GUI class may be need to update a window using this draw, so\u001b[39;00m\n\u001b[1;32m    390\u001b[0m     \u001b[38;5;66;03m# don't forget to call the superclass.\u001b[39;00m\n\u001b[1;32m    391\u001b[0m     \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mdraw()\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/matplotlib/artist.py:95\u001b[0m, in \u001b[0;36m_finalize_rasterization..draw_wrapper\u001b[0;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m     93\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(draw)\n\u001b[1;32m     94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdraw_wrapper\u001b[39m(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m---> 95\u001b[0m     result \u001b[38;5;241m=\u001b[39m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\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\n\u001b[1;32m     96\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_rasterizing:\n\u001b[1;32m     97\u001b[0m         renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n",
│ │ │ │ │ │ @@ -227,39 +227,39 @@
│ │ │ │ │ │                      "ename": "PermissionError",
│ │ │ │ │ │                      "evalue": "[Errno 13] Permission denied: '/nonexistent'",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │                      "traceback": [
│ │ │ │ │ │                          "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles/natural_earth/physical'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles/natural_earth/physical'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles/natural_earth'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles/natural_earth'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy/shapefiles'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy/shapefiles'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share/cartopy'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share/cartopy'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local/share'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local/share'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build/.local'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build/.local'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/pathlib.py:1313\u001b[0m, in \u001b[0;36mPath.mkdir\u001b[0;34m(self, mode, parents, exist_ok)\u001b[0m\n\u001b[1;32m   1312\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1313\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1314\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/first-build'",
│ │ │ │ │ │ +                        "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/nonexistent/second-build'",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mPermissionError\u001b[0m                           Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/IPython/core/formatters.py:340\u001b[0m, in \u001b[0;36mBaseFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m    338\u001b[0m     \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[1;32m    339\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 340\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mprinter\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    341\u001b[0m \u001b[38;5;66;03m# Finally look for special method names\u001b[39;00m\n\u001b[1;32m    342\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/IPython/core/pylabtools.py:152\u001b[0m, in \u001b[0;36mprint_figure\u001b[0;34m(fig, fmt, bbox_inches, base64, **kwargs)\u001b[0m\n\u001b[1;32m    149\u001b[0m     \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend_bases\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m FigureCanvasBase\n\u001b[1;32m    150\u001b[0m     FigureCanvasBase(fig)\n\u001b[0;32m--> 152\u001b[0m \u001b[43mfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcanvas\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprint_figure\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbytes_io\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[43mkw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    153\u001b[0m data \u001b[38;5;241m=\u001b[39m bytes_io\u001b[38;5;241m.\u001b[39mgetvalue()\n\u001b[1;32m    154\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fmt \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msvg\u001b[39m\u001b[38;5;124m'\u001b[39m:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/matplotlib/backend_bases.py:2164\u001b[0m, in \u001b[0;36mFigureCanvasBase.print_figure\u001b[0;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)\u001b[0m\n\u001b[1;32m   2161\u001b[0m     \u001b[38;5;66;03m# we do this instead of `self.figure.draw_without_rendering`\u001b[39;00m\n\u001b[1;32m   2162\u001b[0m     \u001b[38;5;66;03m# so that we can inject the orientation\u001b[39;00m\n\u001b[1;32m   2163\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(renderer, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_draw_disabled\u001b[39m\u001b[38;5;124m\"\u001b[39m, nullcontext)():\n\u001b[0;32m-> 2164\u001b[0m         \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   2165\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m bbox_inches:\n\u001b[1;32m   2166\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m bbox_inches \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtight\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/matplotlib/artist.py:95\u001b[0m, in \u001b[0;36m_finalize_rasterization..draw_wrapper\u001b[0;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m     93\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(draw)\n\u001b[1;32m     94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdraw_wrapper\u001b[39m(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m---> 95\u001b[0m     result \u001b[38;5;241m=\u001b[39m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\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\n\u001b[1;32m     96\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_rasterizing:\n\u001b[1;32m     97\u001b[0m         renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/matplotlib/artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[0;34m(artist, renderer)\u001b[0m\n\u001b[1;32m     69\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m     70\u001b[0m         renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[0;32m---> 72\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m     74\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n",
│ │ │ │ │ │ @@ -317,18 +317,18 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 5,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2024-09-18T05:36:08.756972Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2024-09-18T05:36:08.756683Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2024-09-18T05:36:08.830373Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2024-09-18T05:36:08.814322Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2024-09-18T05:46:21.804173Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2024-09-18T05:46:21.803867Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2024-09-18T05:46:21.839947Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2024-09-18T05:46:21.839197Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "NameError",
│ │ │ │ │ │                      "evalue": "name 'ds' is not defined",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.html
│ │ │ │ @@ -671,15 +671,15 @@
│ │ │ │  File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env)
│ │ │ │      272 if env is not None:
│ │ │ │      273     message.append(
│ │ │ │      274         f"Use environment variable '{env}' to specify a different location."
│ │ │ │      275     )
│ │ │ │  --> 276 raise PermissionError(" ".join(message)) from error
│ │ │ │  
│ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.
│ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.
│ │ │ │  
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │

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 {} │ │ │ │ │ @@ -201,15 +201,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ ********** 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.9987017463235294% │ │ │ │ │ │┄ Differences: {"'cells'": "{2: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:46:28.224281Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2024-09-18T05:46:28.223975Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2024-09-18T05:46:30.395930Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2024-09-18T05:46:30.395197Z'}}}, 5: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2024-09-18T05:46:30.412455Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2024-09-18T05:46:30.411960Z', 'iopub.status.idle': '2024-09-18T05:46:3 […] │ │ │ │ │ │ @@ -17,18 +17,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:13.684027Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:13.683758Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:14.607115Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:14.606412Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:28.224281Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:28.223975Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:30.395930Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:30.395197Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "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": "2024-09-18T05:36:14.615565Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:14.615063Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:15.143158Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:15.142333Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:30.412455Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:30.411960Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:31.435265Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:31.419210Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "PermissionError", │ │ │ │ │ │ - "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ + "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:262\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreate\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 259\u001b[0m \u001b[38;5;66;03m# When running in parallel, it's possible that multiple jobs will\u001b[39;00m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;66;03m# try to create the path at the same time. Use exist_ok to avoid\u001b[39;00m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;66;03m# raising an error.\u001b[39;00m\n\u001b[0;32m--> 262\u001b[0m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ @@ -101,15 +101,15 @@ │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent'", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mPermissionError\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:161\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 158\u001b[0m url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/raw/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mversion\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 161\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\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\n\u001b[1;32m 162\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 163\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:227\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 222\u001b[0m action, verb \u001b[38;5;241m=\u001b[39m download_action(full_path, known_hash)\n\u001b[1;32m 224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdownload\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupdate\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 225\u001b[0m \u001b[38;5;66;03m# We need to write data, so create the local data directory if it\u001b[39;00m\n\u001b[1;32m 226\u001b[0m \u001b[38;5;66;03m# doesn't already exist.\u001b[39;00m\n\u001b[0;32m--> 227\u001b[0m \u001b[43mmake_local_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 230\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m data from \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 to file \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;124m\"\u001b[39m,\n\u001b[1;32m 231\u001b[0m verb,\n\u001b[1;32m 232\u001b[0m url,\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28mstr\u001b[39m(full_path),\n\u001b[1;32m 234\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", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:276\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m env \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 273\u001b[0m message\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse environment variable \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00menv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to specify a different location.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 275\u001b[0m )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mPermissionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(message)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merror\u001b[39;00m\n", │ │ │ │ │ │ - "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ + "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "# load in the file\n", │ │ │ │ │ │ "ds = xr.tutorial.open_dataset(\"ROMS_example.nc\", chunks={\"ocean_time\": 1})\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ @@ -136,18 +136,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:15.146998Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:15.146722Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:15.187043Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:15.186324Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:31.444295Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:31.443986Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:31.539249Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:31.523218Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -181,18 +181,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:15.190765Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:15.190478Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:15.211041Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:15.210323Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:31.548259Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:31.547952Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:31.627238Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:31.611203Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "scrolled": false │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ @@ -217,18 +217,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:15.214821Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:15.214522Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:15.247067Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:15.246339Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:31.636272Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:31.635959Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:31.719225Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:31.703207Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -256,18 +256,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:15.250990Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:15.250700Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:15.322361Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:15.306326Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:31.736284Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:31.735946Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:31.815266Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:31.799203Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -291,18 +291,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 7, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:15.339503Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:15.339166Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:15.566377Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:15.550326Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:31.832284Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:31.831983Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:32.123236Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:32.107202Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "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 │ │ │ │ @@ -698,15 +698,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ │ │

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 {} │ │ │ │ │ @@ -197,15 +197,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ 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.9993857604017217% │ │ │ │ │ │┄ Differences: {"'cells'": "{2: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:46:38.454635Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2024-09-18T05:46:38.454359Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2024-09-18T05:46:40.287226Z', 'shell.execute_reply': " │ │ │ │ │ │┄ '\'2024-09-18T05:46:40.271204Z\'}}, \'outputs\': {0: {\'evalue\': "[Errno 13] ' │ │ │ │ │ │┄ "Permission denied: '/nonexistent' | Pooch could not create data cache folder " │ │ │ │ │ │┄ "'/nonexistent/second-build/.cache/xarray_tutorial_data'. […] │ │ │ │ │ │ @@ -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": "2024-09-18T05:36:19.835283Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:19.834971Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:20.651180Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:20.650333Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:38.454635Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:38.454359Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:40.287226Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:40.271204Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "PermissionError", │ │ │ │ │ │ - "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ + "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:262\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreate\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 259\u001b[0m \u001b[38;5;66;03m# When running in parallel, it's possible that multiple jobs will\u001b[39;00m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;66;03m# try to create the path at the same time. Use exist_ok to avoid\u001b[39;00m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;66;03m# raising an error.\u001b[39;00m\n\u001b[0;32m--> 262\u001b[0m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ @@ -63,15 +63,15 @@ │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mPermissionError\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:207\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 170\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 171\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 172\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 173\u001b[0m \u001b[38;5;124;03m (requires internet).\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[38;5;124;03m load_dataset\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 207\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 208\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:161\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 158\u001b[0m url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/raw/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mversion\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 161\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\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\n\u001b[1;32m 162\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 163\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:227\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 222\u001b[0m action, verb \u001b[38;5;241m=\u001b[39m download_action(full_path, known_hash)\n\u001b[1;32m 224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdownload\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupdate\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 225\u001b[0m \u001b[38;5;66;03m# We need to write data, so create the local data directory if it\u001b[39;00m\n\u001b[1;32m 226\u001b[0m \u001b[38;5;66;03m# doesn't already exist.\u001b[39;00m\n\u001b[0;32m--> 227\u001b[0m \u001b[43mmake_local_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 230\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m data from \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 to file \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;124m\"\u001b[39m,\n\u001b[1;32m 231\u001b[0m verb,\n\u001b[1;32m 232\u001b[0m url,\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28mstr\u001b[39m(full_path),\n\u001b[1;32m 234\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", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:276\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m env \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 273\u001b[0m message\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse environment variable \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00menv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to specify a different location.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 275\u001b[0m )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mPermissionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(message)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merror\u001b[39;00m\n", │ │ │ │ │ │ - "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ + "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "import xarray as xr\n", │ │ │ │ │ │ "import numpy as np\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ @@ -97,18 +97,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": "2024-09-18T05:36:20.659347Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:20.659035Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:20.742346Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:20.726347Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:40.296256Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:40.295958Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:40.383224Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:40.367202Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -137,18 +137,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": "2024-09-18T05:36:20.763464Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:20.763117Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:20.838347Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:20.822322Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:40.393739Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:40.393455Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:40.479225Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:40.463201Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -196,18 +196,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": "2024-09-18T05:36:20.867346Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:20.867036Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:20.938341Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:20.922322Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:40.489795Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:40.489503Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:40.575221Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:40.559200Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -262,18 +262,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": "2024-09-18T05:36:20.947322Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:20.947015Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.026347Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.010317Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:40.585761Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:40.585473Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:40.667229Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:40.651204Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -340,18 +340,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": "2024-09-18T05:36:21.035338Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.035015Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.114345Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.098324Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:40.677735Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:40.677458Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:40.759226Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:40.743202Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -386,18 +386,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": "2024-09-18T05:36:21.123300Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.123002Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.202343Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.186319Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:40.769658Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:40.769375Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:40.851233Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:40.835201Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -434,18 +434,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": "2024-09-18T05:36:21.211307Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.211008Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.290342Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.274324Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:40.861975Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:40.861694Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:40.955235Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:40.939215Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -498,18 +498,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": "2024-09-18T05:36:21.299328Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.299018Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.378341Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.362323Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:40.972263Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:40.971979Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:41.059226Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:41.043197Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -571,18 +571,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": "2024-09-18T05:36:21.388910Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.388636Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.470353Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.454321Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:41.076268Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:41.075979Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:41.167228Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:41.151197Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -628,18 +628,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": "2024-09-18T05:36:21.480860Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.480570Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.558358Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.542318Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:41.188261Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:41.187963Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:41.283236Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:41.267204Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -716,18 +716,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": "2024-09-18T05:36:21.575351Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.575040Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.658346Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.642336Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:41.293873Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:41.293567Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:41.391233Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:41.375195Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -802,18 +802,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": "2024-09-18T05:36:21.672927Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.672655Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.754343Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.738318Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:41.401828Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:41.401543Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:41.491226Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:41.475204Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ModuleNotFoundError", │ │ │ │ │ │ "evalue": "No module named 'numba'", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -854,18 +854,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": "2024-09-18T05:36:21.764838Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.764558Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.787070Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.786327Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:41.501774Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:41.501490Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:41.591226Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:41.575196Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'interp1d_np_gufunc' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -908,18 +908,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": "2024-09-18T05:36:21.790752Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:21.790486Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:21.866346Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:21.850445Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:41.604256Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:41.603963Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:41.653836Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:41.651197Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ModuleNotFoundError", │ │ │ │ │ │ "evalue": "No module named 'numba'", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.html │ │ │ │ @@ -666,15 +666,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │
│ │ │ │ │ │ │ │

Plot the first timestep:

│ │ │ │
│ │ │ │
[3]:
│ │ │ │  
│ │ │ │
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -191,15 +191,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ 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.999094012605042% │ │ │ │ │ │┄ Differences: {"'cells'": "{2: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:46:51.074456Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2024-09-18T05:46:51.074153Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2024-09-18T05:46:52.099995Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2024-09-18T05:46:52.099230Z'}}}, 4: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2024-09-18T05:46:52.108446Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2024-09-18T05:46:52.107985Z', 'iopub.status.idle': '2024-09-18T05:46:5 […] │ │ │ │ │ │ @@ -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": "2024-09-18T05:36:29.543281Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:29.542988Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:30.670352Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:30.654330Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:51.074456Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:51.074153Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:52.099995Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:52.099230Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "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": "2024-09-18T05:36:30.687545Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:30.687055Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:31.183106Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:31.182328Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:52.108446Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:52.107985Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:52.684152Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:52.683383Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "PermissionError", │ │ │ │ │ │ - "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ + "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:262\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreate\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 259\u001b[0m \u001b[38;5;66;03m# When running in parallel, it's possible that multiple jobs will\u001b[39;00m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;66;03m# try to create the path at the same time. Use exist_ok to avoid\u001b[39;00m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;66;03m# raising an error.\u001b[39;00m\n\u001b[0;32m--> 262\u001b[0m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ @@ -90,15 +90,15 @@ │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mPermissionError\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:207\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 170\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 171\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 172\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 173\u001b[0m \u001b[38;5;124;03m (requires internet).\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[38;5;124;03m load_dataset\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 207\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 208\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:161\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 158\u001b[0m url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/raw/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mversion\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 161\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\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\n\u001b[1;32m 162\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 163\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:227\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 222\u001b[0m action, verb \u001b[38;5;241m=\u001b[39m download_action(full_path, known_hash)\n\u001b[1;32m 224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdownload\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupdate\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 225\u001b[0m \u001b[38;5;66;03m# We need to write data, so create the local data directory if it\u001b[39;00m\n\u001b[1;32m 226\u001b[0m \u001b[38;5;66;03m# doesn't already exist.\u001b[39;00m\n\u001b[0;32m--> 227\u001b[0m \u001b[43mmake_local_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 230\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m data from \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 to file \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;124m\"\u001b[39m,\n\u001b[1;32m 231\u001b[0m verb,\n\u001b[1;32m 232\u001b[0m url,\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28mstr\u001b[39m(full_path),\n\u001b[1;32m 234\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", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:276\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m env \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 273\u001b[0m message\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse environment variable \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00menv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to specify a different location.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 275\u001b[0m )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mPermissionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(message)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merror\u001b[39;00m\n", │ │ │ │ │ │ - "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ + "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "ds = xr.tutorial.load_dataset(\"air_temperature\")\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "# to celsius\n", │ │ │ │ │ │ @@ -122,18 +122,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": "2024-09-18T05:36:31.195352Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:31.195041Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:31.367018Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:31.366317Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:52.687717Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:52.687424Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:52.880018Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:52.879297Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -178,18 +178,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": "2024-09-18T05:36:31.375339Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:31.375043Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:31.399039Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:31.398318Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:52.883843Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:52.883557Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:52.927931Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:52.927222Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -219,18 +219,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": "2024-09-18T05:36:31.402625Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:31.402355Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:31.427025Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:31.426323Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:52.931587Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:52.931301Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:52.955944Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:52.955200Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -252,18 +252,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": "2024-09-18T05:36:31.435310Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:31.434999Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:31.471007Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:31.470315Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:52.959580Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:52.959286Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:52.995856Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:52.995167Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air_weighted' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -294,18 +294,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": "2024-09-18T05:36:31.479319Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:31.479017Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:31.511018Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:31.510318Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:46:52.999529Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:46:52.999231Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:46:53.031898Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:46:53.031182Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'weighted_mean' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/blank_template.html │ │ │ │ @@ -612,15 +612,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
[ ]:
│ │ │ │  
│ │ │ │
│ │ │ │

│ │ │ │ ├── html2text {}
│ │ │ │ │ @@ -164,15 +164,15 @@
│ │ │ │ │      273     message.append(
│ │ │ │ │      274         f"Use environment variable '{env}' to specify a different
│ │ │ │ │  location."
│ │ │ │ │      275     )
│ │ │ │ │  --> 276 raise PermissionError(" ".join(message)) from error
│ │ │ │ │  
│ │ │ │ │  PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not
│ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/
│ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/
│ │ │ │ │  xarray_tutorial_data'. Will not be able to download data files.
│ │ │ │ │  [ ]:
│ │ │ │ │  _p_r_e_v_i_o_u_s
│ │ │ │ │  _A_p_p_l_y_i_n_g_ _u_n_v_e_c_t_o_r_i_z_e_d_ _f_u_n_c_t_i_o_n_s_ _w_i_t_h_ _a_p_p_l_y___u_f_u_n_c
│ │ │ │ │  _n_e_x_t
│ │ │ │ │  _T_u_t_o_r_i_a_l_s_ _a_n_d_ _V_i_d_e_o_s
│ │ │ │ │  By Author name not set
│ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/blank_template.ipynb.gz
│ │ │ │ ├── blank_template.ipynb
│ │ │ │ │ ├── Pretty-printed
│ │ │ │ │ │┄ Similarity: 0.9986468545751634%
│ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:46:59.716302Z', "
│ │ │ │ │ │┄             "'iopub.status.busy': '2024-09-18T05:46:59.715980Z', 'iopub.status.idle': "
│ │ │ │ │ │┄             "'2024-09-18T05:47:01.608075Z', 'shell.execute_reply': "
│ │ │ │ │ │┄             '\'2024-09-18T05:47:01.607213Z\'}}, \'outputs\': {0: {\'evalue\': "[Errno 13] '
│ │ │ │ │ │┄             "Permission denied: '/nonexistent' | Pooch could not create data cache folder "
│ │ │ │ │ │┄             "'/nonexistent/second-build/.cache/xarray_tutorial_data'.  […]
│ │ │ │ │ │ @@ -12,24 +12,24 @@
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 1,
│ │ │ │ │ │              "id": "41b90ede",
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2024-09-18T05:36:35.630106Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2024-09-18T05:36:35.629821Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2024-09-18T05:36:36.437590Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2024-09-18T05:36:36.436869Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2024-09-18T05:46:59.716302Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2024-09-18T05:46:59.715980Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2024-09-18T05:47:01.608075Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2024-09-18T05:47:01.607213Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "PermissionError",
│ │ │ │ │ │ -                    "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.",
│ │ │ │ │ │ +                    "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │                      "traceback": [
│ │ │ │ │ │                          "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
│ │ │ │ │ │                          "\u001b[0;31mPermissionError\u001b[0m                           Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:262\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m    258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreate\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m    259\u001b[0m     \u001b[38;5;66;03m# When running in parallel, it's possible that multiple jobs will\u001b[39;00m\n\u001b[1;32m    260\u001b[0m     \u001b[38;5;66;03m# try to create the path at the same time. Use exist_ok to avoid\u001b[39;00m\n\u001b[1;32m    261\u001b[0m     \u001b[38;5;66;03m# raising an error.\u001b[39;00m\n\u001b[0;32m--> 262\u001b[0m     \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m    263\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m    214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m     \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m    217\u001b[0m     \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m    214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m     \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m    217\u001b[0m     \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n",
│ │ │ │ │ │ @@ -39,15 +39,15 @@
│ │ │ │ │ │                          "\nThe above exception was the direct cause of the following exception:\n",
│ │ │ │ │ │                          "\u001b[0;31mPermissionError\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:207\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    170\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    171\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    172\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    173\u001b[0m \u001b[38;5;124;03m    (requires internet).\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    205\u001b[0m \u001b[38;5;124;03m    load_dataset\u001b[39;00m\n\u001b[1;32m    206\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m--> 207\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    208\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:161\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m    158\u001b[0m     url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/raw/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mversion\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    160\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 161\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\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\n\u001b[1;32m    162\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    163\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:227\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m    222\u001b[0m action, verb \u001b[38;5;241m=\u001b[39m download_action(full_path, known_hash)\n\u001b[1;32m    224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdownload\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupdate\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m    225\u001b[0m     \u001b[38;5;66;03m# We need to write data, so create the local data directory if it\u001b[39;00m\n\u001b[1;32m    226\u001b[0m     \u001b[38;5;66;03m# doesn't already exist.\u001b[39;00m\n\u001b[0;32m--> 227\u001b[0m     \u001b[43mmake_local_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    229\u001b[0m     get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m    230\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m data from \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 to file \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;124m\"\u001b[39m,\n\u001b[1;32m    231\u001b[0m         verb,\n\u001b[1;32m    232\u001b[0m         url,\n\u001b[1;32m    233\u001b[0m         \u001b[38;5;28mstr\u001b[39m(full_path),\n\u001b[1;32m    234\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",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:276\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m    272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m env \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    273\u001b[0m     message\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m    274\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse environment variable \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00menv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to specify a different location.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    275\u001b[0m     )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mPermissionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(message)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merror\u001b[39;00m\n",
│ │ │ │ │ │ -                        "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files."
│ │ │ │ │ │ +                        "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files."
│ │ │ │ │ │                      ]
│ │ │ │ │ │                  }
│ │ │ │ │ │              ],
│ │ │ │ │ │              "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
│ │ │ │ @@ -634,15 +634,15 @@
│ │ │ │  File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env)
│ │ │ │      272 if env is not None:
│ │ │ │      273     message.append(
│ │ │ │      274         f"Use environment variable '{env}' to specify a different location."
│ │ │ │      275     )
│ │ │ │  --> 276 raise PermissionError(" ".join(message)) from error
│ │ │ │  
│ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.
│ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.
│ │ │ │  
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │

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 {} │ │ │ │ │ @@ -160,15 +160,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ ********** 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.9985617897727272% │ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:47:07.256203Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2024-09-18T05:47:07.255898Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2024-09-18T05:47:08.813929Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2024-09-18T05:47:08.813186Z'}}}, 3: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2024-09-18T05:47:08.820474Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2024-09-18T05:47:08.819989Z', 'iopub.status.idle': '2024-09-18T05:47:0 […] │ │ │ │ │ │ @@ -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": "2024-09-18T05:36:39.035282Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:39.034993Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:39.963120Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:39.962388Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:07.256203Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:07.255898Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:08.813929Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:08.813186Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "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": "2024-09-18T05:36:39.971553Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:39.971045Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:40.383095Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:40.382331Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:08.820474Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:08.819989Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:09.836032Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:09.835198Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "PermissionError", │ │ │ │ │ │ - "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ + "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:262\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreate\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 259\u001b[0m \u001b[38;5;66;03m# When running in parallel, it's possible that multiple jobs will\u001b[39;00m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;66;03m# try to create the path at the same time. Use exist_ok to avoid\u001b[39;00m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;66;03m# raising an error.\u001b[39;00m\n\u001b[0;32m--> 262\u001b[0m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent'", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mPermissionError\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:161\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 158\u001b[0m url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/raw/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mversion\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 161\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\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\n\u001b[1;32m 162\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 163\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:227\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 222\u001b[0m action, verb \u001b[38;5;241m=\u001b[39m download_action(full_path, known_hash)\n\u001b[1;32m 224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdownload\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupdate\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 225\u001b[0m \u001b[38;5;66;03m# We need to write data, so create the local data directory if it\u001b[39;00m\n\u001b[1;32m 226\u001b[0m \u001b[38;5;66;03m# doesn't already exist.\u001b[39;00m\n\u001b[0;32m--> 227\u001b[0m \u001b[43mmake_local_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 230\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m data from \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 to file \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;124m\"\u001b[39m,\n\u001b[1;32m 231\u001b[0m verb,\n\u001b[1;32m 232\u001b[0m url,\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28mstr\u001b[39m(full_path),\n\u001b[1;32m 234\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", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:276\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m env \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 273\u001b[0m message\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse environment variable \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00menv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to specify a different location.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 275\u001b[0m )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mPermissionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(message)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merror\u001b[39;00m\n", │ │ │ │ │ │ - "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ + "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "ds = xr.tutorial.open_dataset(\"rasm\").load()\n", │ │ │ │ │ │ "ds" │ │ │ │ │ │ ] │ │ │ │ │ │ @@ -102,18 +102,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:40.391346Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:40.391040Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:40.419021Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:40.418319Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:09.844254Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:09.843955Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:09.887956Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:09.887203Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -135,18 +135,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": "2024-09-18T05:36:40.427303Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:40.427005Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:40.514345Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:40.498321Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:09.896241Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:09.895945Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:09.979230Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:09.963199Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'month_length' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -176,18 +176,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": "2024-09-18T05:36:40.524761Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:40.524480Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:40.606348Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:40.590318Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:09.988221Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:09.987915Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:10.059918Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:10.047239Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds_weighted' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -208,18 +208,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": "2024-09-18T05:36:40.616724Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:40.616455Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:40.698344Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:40.682323Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:10.068251Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:10.067938Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:10.135223Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:10.123236Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -242,18 +242,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": "2024-09-18T05:36:40.715304Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:40.715005Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:40.806354Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:40.790318Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:10.144222Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:10.143935Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:10.211963Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:10.211214Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds_unweighted' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -322,18 +322,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": "2024-09-18T05:36:40.827284Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:40.826997Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:40.866343Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:40.850319Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:10.220224Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:10.219935Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:10.227932Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:10.227197Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "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 │ │ │ │ @@ -628,15 +628,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ │ │

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 {} │ │ │ │ │ @@ -158,15 +158,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ 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.9991536458333333% │ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:47:16.076176Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2024-09-18T05:47:16.075899Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2024-09-18T05:47:18.255998Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2024-09-18T05:47:18.255221Z'}}}, 3: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2024-09-18T05:47:18.264443Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2024-09-18T05:47:18.263966Z', 'iopub.status.idle': '2024-09-18T05:47:1 […] │ │ │ │ │ │ @@ -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": "2024-09-18T05:36:44.539361Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:44.539031Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:45.590397Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:45.574336Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:16.076176Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:16.075899Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:18.255998Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:18.255221Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "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": "2024-09-18T05:36:45.607540Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:45.607053Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:46.168728Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:46.168031Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:18.264443Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:18.263966Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:19.248059Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:19.247213Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "PermissionError", │ │ │ │ │ │ - "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ + "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:262\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreate\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 259\u001b[0m \u001b[38;5;66;03m# When running in parallel, it's possible that multiple jobs will\u001b[39;00m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;66;03m# try to create the path at the same time. Use exist_ok to avoid\u001b[39;00m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;66;03m# raising an error.\u001b[39;00m\n\u001b[0;32m--> 262\u001b[0m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ @@ -74,15 +74,15 @@ │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent'", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mPermissionError\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:161\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 158\u001b[0m url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/raw/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mversion\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 161\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\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\n\u001b[1;32m 162\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 163\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:227\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 222\u001b[0m action, verb \u001b[38;5;241m=\u001b[39m download_action(full_path, known_hash)\n\u001b[1;32m 224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdownload\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupdate\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 225\u001b[0m \u001b[38;5;66;03m# We need to write data, so create the local data directory if it\u001b[39;00m\n\u001b[1;32m 226\u001b[0m \u001b[38;5;66;03m# doesn't already exist.\u001b[39;00m\n\u001b[0;32m--> 227\u001b[0m \u001b[43mmake_local_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 230\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m data from \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 to file \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;124m\"\u001b[39m,\n\u001b[1;32m 231\u001b[0m verb,\n\u001b[1;32m 232\u001b[0m url,\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28mstr\u001b[39m(full_path),\n\u001b[1;32m 234\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", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:276\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m env \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 273\u001b[0m message\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse environment variable \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00menv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to specify a different location.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 275\u001b[0m )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mPermissionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(message)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merror\u001b[39;00m\n", │ │ │ │ │ │ - "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ + "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "ds = xr.tutorial.open_dataset(\"rasm\").load()\n", │ │ │ │ │ │ "ds" │ │ │ │ │ │ ] │ │ │ │ │ │ @@ -99,18 +99,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": "2024-09-18T05:36:46.172103Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:46.171838Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:46.195038Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:46.194328Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:19.260345Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:19.260036Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:19.339222Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:19.323200Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -141,18 +141,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": "2024-09-18T05:36:46.198396Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:46.198110Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:46.686686Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:46.670335Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:19.348214Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:19.347934Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:19.983218Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:19.967196Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -194,18 +194,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": "2024-09-18T05:36:46.703466Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:46.703126Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:46.782355Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:46.766328Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:19.993836Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:19.993531Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:20.075228Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:20.059204Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -233,18 +233,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": "2024-09-18T05:36:46.789414Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:46.789140Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:46.875019Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:46.874325Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:20.085738Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:20.085454Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:20.319233Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:20.303206Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -291,18 +291,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": "2024-09-18T05:36:46.878612Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:46.878340Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:46.911011Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:46.910320Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:20.329714Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:20.329422Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:20.411234Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:20.395196Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.html │ │ │ │ @@ -645,15 +645,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │

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 {} │ │ │ │ │ @@ -168,15 +168,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ ********** 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.9982919730392157% │ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:47:26.564208Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2024-09-18T05:47:26.563921Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2024-09-18T05:47:28.436000Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2024-09-18T05:47:28.435212Z'}}}, 3: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2024-09-18T05:47:28.448764Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2024-09-18T05:47:28.448001Z', 'iopub.status.idle': '2024-09-18T05:47:2 […] │ │ │ │ │ │ @@ -10,18 +10,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:51.279281Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:51.278972Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:52.359068Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:52.358335Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:26.564208Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:26.563921Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:28.436000Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:28.435212Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "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": "2024-09-18T05:36:52.375892Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:52.375111Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:52.850344Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:52.834325Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:28.448764Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:28.448001Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:29.440102Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:29.439235Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "PermissionError", │ │ │ │ │ │ - "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ + "evalue": "[Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mPermissionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:262\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreate\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 259\u001b[0m \u001b[38;5;66;03m# When running in parallel, it's possible that multiple jobs will\u001b[39;00m\n\u001b[1;32m 260\u001b[0m \u001b[38;5;66;03m# try to create the path at the same time. Use exist_ok to avoid\u001b[39;00m\n\u001b[1;32m 261\u001b[0m \u001b[38;5;66;03m# raising an error.\u001b[39;00m\n\u001b[0;32m--> 262\u001b[0m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.12/os.py:215\u001b[0m, in \u001b[0;36mmakedirs\u001b[0;34m(name, mode, exist_ok)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 215\u001b[0m \u001b[43mmakedirs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhead\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexist_ok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexist_ok\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileExistsError\u001b[39;00m:\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# Defeats race condition when another thread created the path\u001b[39;00m\n", │ │ │ │ │ │ @@ -64,15 +64,15 @@ │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mPermissionError\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:207\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 170\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 171\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 172\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 173\u001b[0m \u001b[38;5;124;03m (requires internet).\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[38;5;124;03m load_dataset\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 207\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 208\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:161\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 158\u001b[0m url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/raw/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mversion\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 161\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\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\n\u001b[1;32m 162\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 163\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:227\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 222\u001b[0m action, verb \u001b[38;5;241m=\u001b[39m download_action(full_path, known_hash)\n\u001b[1;32m 224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m action \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdownload\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupdate\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 225\u001b[0m \u001b[38;5;66;03m# We need to write data, so create the local data directory if it\u001b[39;00m\n\u001b[1;32m 226\u001b[0m \u001b[38;5;66;03m# doesn't already exist.\u001b[39;00m\n\u001b[0;32m--> 227\u001b[0m \u001b[43mmake_local_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 230\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m data from \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 to file \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;124m\"\u001b[39m,\n\u001b[1;32m 231\u001b[0m verb,\n\u001b[1;32m 232\u001b[0m url,\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28mstr\u001b[39m(full_path),\n\u001b[1;32m 234\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", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/utils.py:276\u001b[0m, in \u001b[0;36mmake_local_storage\u001b[0;34m(path, env)\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m env \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 273\u001b[0m message\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m 274\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse environment variable \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00menv\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to specify a different location.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 275\u001b[0m )\n\u001b[0;32m--> 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mPermissionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(message)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merror\u001b[39;00m\n", │ │ │ │ │ │ - "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ + "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files." │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "ds = xr.tutorial.load_dataset(\"air_temperature\")" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ @@ -91,18 +91,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:52.867362Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:52.867054Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:52.946348Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:52.930317Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:29.448315Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:29.448018Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:29.531226Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:29.515201Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -144,18 +144,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:52.963385Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:52.963058Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:53.050343Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:53.034320Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:29.540250Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:29.539956Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:29.623235Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:29.611201Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -208,18 +208,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:53.067307Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:53.067002Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:53.134341Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:53.121565Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:29.632307Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:29.631992Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:29.723232Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:29.707207Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -264,18 +264,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2024-09-18T05:36:53.151388Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:53.151059Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:53.231750Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:53.218322Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:29.732323Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:29.732003Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:29.823230Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:29.807212Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/weather-data.html │ │ │ │ @@ -978,37 +978,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]:
    │ │ │ │ @@ -1205,15 +1205,15 @@
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    [5]:
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │ -<seaborn.axisgrid.PairGrid at 0xffff31652570>
    │ │ │ │ +<seaborn.axisgrid.PairGrid at 0xffff3884c680>
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │ ../_images/examples_weather-data_9_1.png │ │ │ │ @@ -1617,26 +1617,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()
    │ │ │ │  
    │ │ │ │ @@ -2148,18 +2148,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 {}
    │ │ │ │ │ @@ -219,15 +219,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.9992323248183435%
    │ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2024-09-18T05:47:35.502614Z', "
    │ │ │ │ │ │┄             "'iopub.status.busy': '2024-09-18T05:47:35.502339Z', 'iopub.status.idle': "
    │ │ │ │ │ │┄             "'2024-09-18T05:47:37.128130Z', 'shell.execute_reply': "
    │ │ │ │ │ │┄             "'2024-09-18T05:47:37.127347Z'}}, 'outputs': {0: {'data': {'text/html': {insert: "
    │ │ │ │ │ │┄             '[(376, "    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", │ │ │ │ │ │ @@ -593,18 +593,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": "2024-09-18T05:36:58.662517Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:58.662244Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:58.691213Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:58.690506Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:37.187835Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:37.187535Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:37.227959Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:37.227211Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/html": [ │ │ │ │ │ │ "
    \n", │ │ │ │ │ │ @@ -707,18 +707,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": "2024-09-18T05:36:58.694753Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:58.694486Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:36:59.231076Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:36:59.230326Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:37.231847Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:37.231547Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:38.135923Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:38.135200Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -755,25 +755,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": "2024-09-18T05:36:59.239355Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:36:59.239043Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:37:00.122349Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:37:00.114324Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:38.144210Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:38.143913Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:40.187526Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:40.179195Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ - "" │ │ │ │ │ │ + "" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "output_type": "execute_result" │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ @@ -803,18 +803,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": "2024-09-18T05:37:00.131371Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:37:00.131068Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:37:00.167055Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:37:00.166321Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:40.196319Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:40.196038Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:40.235901Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:40.235203Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/html": [ │ │ │ │ │ │ "
    \n", │ │ │ │ │ │ @@ -1197,26 +1197,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", │ │ │ │ │ │ @@ -1248,18 +1248,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": "2024-09-18T05:37:00.175314Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:37:00.175012Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:37:00.464317Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:37:00.463778Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:40.244185Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:40.243893Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:40.675924Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:40.675209Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -1296,18 +1296,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": "2024-09-18T05:37:00.467317Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:37:00.467032Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:37:00.711027Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:37:00.710318Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:40.684183Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:40.683904Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:41.559891Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:41.559193Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -1361,18 +1361,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": "2024-09-18T05:37:00.719367Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:37:00.719048Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:37:01.419013Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:37:01.418311Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:41.568203Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:41.567918Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:42.483889Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:42.483197Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -1420,18 +1420,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": "2024-09-18T05:37:01.427359Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:37:01.427045Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:37:02.211022Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:37:02.210314Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:42.492219Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:42.491928Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:43.535897Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:43.535197Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -1489,18 +1489,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": "2024-09-18T05:37:02.219342Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:37:02.219040Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:37:02.298960Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:37:02.298305Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:43.544207Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:43.543917Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:43.651876Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:43.651192Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/html": [ │ │ │ │ │ │ "
    \n", │ │ │ │ │ │ @@ -1876,18 +1876,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", │ │ │ │ │ │ @@ -2070,18 +2070,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": "2024-09-18T05:37:02.339464Z", │ │ │ │ │ │ - "iopub.status.busy": "2024-09-18T05:37:02.339149Z", │ │ │ │ │ │ - "iopub.status.idle": "2024-09-18T05:37:03.083022Z", │ │ │ │ │ │ - "shell.execute_reply": "2024-09-18T05:37:03.082320Z" │ │ │ │ │ │ + "iopub.execute_input": "2024-09-18T05:47:43.696184Z", │ │ │ │ │ │ + "iopub.status.busy": "2024-09-18T05:47:43.695902Z", │ │ │ │ │ │ + "iopub.status.idle": "2024-09-18T05:47:44.667909Z", │ │ │ │ │ │ + "shell.execute_reply": "2024-09-18T05:47:44.667192Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/getting-started-guide/quick-overview.html │ │ │ │ @@ -831,15 +831,15 @@ │ │ │ │
    │ │ │ │ │ │ │ │
    │ │ │ │
    │ │ │ │

    Plotting

    │ │ │ │

    Visualizing your datasets is quick and convenient:

    │ │ │ │
    In [37]: data.plot()
    │ │ │ │ -Out[37]: <matplotlib.collections.QuadMesh at 0xffff8f3a4920>
    │ │ │ │ +Out[37]: <matplotlib.collections.QuadMesh at 0xffff7fc805f0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 {} │ │ │ │ │ @@ -330,15 +330,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]: │ │ │ │ │ [_build/html/_static/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 │ │ │ │ @@ -715,15 +715,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ In [2]: var = da.variable │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ Cell In[2], line 1 │ │ │ │ ----> 1 var = da.variable │ │ │ │ │ │ │ │ @@ -815,15 +815,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ In [8]: var = da.variable │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ Cell In[8], line 1 │ │ │ │ ----> 1 var = da.variable │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -234,15 +234,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ In [2]: var = da.variable │ │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ │ Cell In[2], line 1 │ │ │ │ │ ----> 1 var = da.variable │ │ │ │ │ @@ -333,15 +333,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ 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 │ │ │ │ @@ -615,18 +615,18 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ In [5]: ds.to_zarr("rasm.zarr", mode="w") │ │ │ │ -Out[5]: <xarray.backends.zarr.ZarrStore at 0xffff6620a2c0> │ │ │ │ +Out[5]: <xarray.backends.zarr.ZarrStore at 0xffff67eca340> │ │ │ │ │ │ │ │ In [6]: zgroup = zarr.open("rasm.zarr") │ │ │ │ │ │ │ │ In [7]: print(os.listdir("rasm.zarr")) │ │ │ │ ['.zmetadata', 'longitude', 'latitude', '.zattrs', '.zgroup'] │ │ │ │ │ │ │ │ In [8]: print(zgroup.tree()) │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -176,19 +176,19 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ 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")) │ │ │ │ │ ['.zmetadata', 'longitude', 'latitude', '.zattrs', '.zgroup'] │ │ │ │ │ │ │ │ │ │ In [8]: print(zgroup.tree()) │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/searchindex.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -2156,44 +2156,43 @@ │ │ │ │ │ "3": "py:property", │ │ │ │ │ "4": "py:attribute", │ │ │ │ │ "5": "py:function" │ │ │ │ │ }, │ │ │ │ │ "terms": { │ │ │ │ │ "": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51], │ │ │ │ │ "0": [3, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 32, 33, 35, 36, 37, 38, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ - "00": [14, 36, 37, 38, 44, 46, 51, 52, 53], │ │ │ │ │ + "00": [14, 36, 37, 38, 44, 46, 50, 51, 52, 53], │ │ │ │ │ + "000": 50, │ │ │ │ │ "000000": [14, 16], │ │ │ │ │ "000000000": [14, 37, 38, 51], │ │ │ │ │ "0001": [52, 53], │ │ │ │ │ "00010101": 52, │ │ │ │ │ "00010201": 52, │ │ │ │ │ "00010301": 52, │ │ │ │ │ "0002": 52, │ │ │ │ │ "00021001": 52, │ │ │ │ │ "00021101": 52, │ │ │ │ │ "00021201": 52, │ │ │ │ │ "000e": [47, 50], │ │ │ │ │ + "000j": 50, │ │ │ │ │ "001e": 37, │ │ │ │ │ "00494555e": 36, │ │ │ │ │ "005036": 40, │ │ │ │ │ "005e": 37, │ │ │ │ │ + "005j": 50, │ │ │ │ │ "00688889": 36, │ │ │ │ │ "006e": 37, │ │ │ │ │ - "007e": 50, │ │ │ │ │ - "008j": 50, │ │ │ │ │ "00914929": 36, │ │ │ │ │ "00941742": 36, │ │ │ │ │ "00968205": 36, │ │ │ │ │ "00973567": 36, │ │ │ │ │ - "009j": 50, │ │ │ │ │ - "01": [14, 16, 20, 37, 38, 42, 43, 44, 46, 47, 51, 52], │ │ │ │ │ + "01": [14, 16, 20, 37, 38, 42, 43, 44, 46, 47, 50, 51, 52], │ │ │ │ │ "010569": 14, │ │ │ │ │ "01082401": 36, │ │ │ │ │ "01183847": 36, │ │ │ │ │ - "014j": 50, │ │ │ │ │ "01612903": 14, │ │ │ │ │ "01636376": 36, │ │ │ │ │ "0165891": 36, │ │ │ │ │ "01670071": 36, │ │ │ │ │ "01670121": 36, │ │ │ │ │ "01671269": 36, │ │ │ │ │ "01671847": 36, │ │ │ │ │ @@ -2232,15 +2231,15 @@ │ │ │ │ │ "03642301": 36, │ │ │ │ │ "036e": 47, │ │ │ │ │ "037": 14, │ │ │ │ │ "037369": 14, │ │ │ │ │ "03736932": 14, │ │ │ │ │ "0379266750948": 44, │ │ │ │ │ "037e": 37, │ │ │ │ │ - "038": 42, │ │ │ │ │ + "038": [42, 50], │ │ │ │ │ "03t00": [14, 37, 38], │ │ │ │ │ "04": [14, 37, 38, 42, 46, 51], │ │ │ │ │ "040347": 14, │ │ │ │ │ "040e": 47, │ │ │ │ │ "0417827": 44, │ │ │ │ │ "042e": 37, │ │ │ │ │ "044": [35, 46], │ │ │ │ │ @@ -2259,15 +2258,14 @@ │ │ │ │ │ "05405954": 36, │ │ │ │ │ "05556": 43, │ │ │ │ │ "055e": 37, │ │ │ │ │ "056": 43, │ │ │ │ │ "056e": 37, │ │ │ │ │ "057e": 37, │ │ │ │ │ "058e": 37, │ │ │ │ │ - "058j": 50, │ │ │ │ │ "05912615": 36, │ │ │ │ │ "05t00": 37, │ │ │ │ │ "06": [14, 28, 36, 38, 44, 51], │ │ │ │ │ "060403": 14, │ │ │ │ │ "061": 42, │ │ │ │ │ "06187252": 14, │ │ │ │ │ "063": [14, 38], │ │ │ │ │ @@ -2278,15 +2276,15 @@ │ │ │ │ │ "06683976": 36, │ │ │ │ │ "06689": 36, │ │ │ │ │ "066e": [37, 47], │ │ │ │ │ "067e": 47, │ │ │ │ │ "069": 43, │ │ │ │ │ "06957": 40, │ │ │ │ │ "06t00": 37, │ │ │ │ │ - "07": [14, 38, 50, 51, 52], │ │ │ │ │ + "07": [14, 38, 51, 52], │ │ │ │ │ "070e": 37, │ │ │ │ │ "071": 46, │ │ │ │ │ "07104": 46, │ │ │ │ │ "07180381": 19, │ │ │ │ │ "071804": 46, │ │ │ │ │ "072": 46, │ │ │ │ │ "072e": 47, │ │ │ │ │ @@ -2327,71 +2325,71 @@ │ │ │ │ │ "09t00": 37, │ │ │ │ │ "0alpha10": 53, │ │ │ │ │ "0d": 53, │ │ │ │ │ "0dev": 53, │ │ │ │ │ "0j": 44, │ │ │ │ │ "0th": [37, 42], │ │ │ │ │ "0x0l": 53, │ │ │ │ │ - "0xffff31652570": 14, │ │ │ │ │ - "0xffff3c3579c0": 6, │ │ │ │ │ - "0xffff5f0c9160": 53, │ │ │ │ │ - "0xffff613773c0": 44, │ │ │ │ │ - "0xffff6139d8c0": 44, │ │ │ │ │ - "0xffff6139fe40": 44, │ │ │ │ │ - "0xffff613c90c0": 44, │ │ │ │ │ - "0xffff613cb140": 44, │ │ │ │ │ - "0xffff614fed40": 44, │ │ │ │ │ - "0xffff632be5d0": 47, │ │ │ │ │ - "0xffff64c0b3e0": 38, │ │ │ │ │ - "0xffff64c7ecc0": 38, │ │ │ │ │ - "0xffff64dcfec0": 44, │ │ │ │ │ - "0xffff6620a2c0": 32, │ │ │ │ │ - "0xffff67d565c0": 44, │ │ │ │ │ - "0xffff8f316f00": 43, │ │ │ │ │ - "0xffff8f317650": 43, │ │ │ │ │ - "0xffff8f3a4920": 19, │ │ │ │ │ - "0xffff8f3ffb90": 43, │ │ │ │ │ - "0xffff90088bf0": 43, │ │ │ │ │ - "0xffff9edbfc50": 47, │ │ │ │ │ - "0xffff9edbfdd0": 47, │ │ │ │ │ - "0xffff9ee9c5c0": 47, │ │ │ │ │ - "0xffffa0076ab0": 47, │ │ │ │ │ - "0xffffa0077a10": 47, │ │ │ │ │ - "0xffffa0221ca0": 47, │ │ │ │ │ - "0xffffa02223c0": 47, │ │ │ │ │ - "0xffffa0222b70": 47, │ │ │ │ │ - "0xffffa0241e80": 47, │ │ │ │ │ - "0xffffa0243b30": 47, │ │ │ │ │ - "0xffffa0259700": 47, │ │ │ │ │ - "0xffffa02598b0": 47, │ │ │ │ │ - "0xffffa0a1c6e0": 47, │ │ │ │ │ - "0xffffa0a8ab40": 47, │ │ │ │ │ - "0xffffa0a8b3e0": 47, │ │ │ │ │ - "0xffffa0b8ce60": 47, │ │ │ │ │ - "0xffffa0bb55b0": 47, │ │ │ │ │ - "0xffffa0de5190": 47, │ │ │ │ │ - "0xffffa0de52b0": 47, │ │ │ │ │ - "0xffffa0e01430": 47, │ │ │ │ │ - "0xffffa0e172c0": 47, │ │ │ │ │ - "0xffffa0f596a0": 47, │ │ │ │ │ - "0xffffa0fc2450": 47, │ │ │ │ │ - "0xffffa1029370": 47, │ │ │ │ │ - "0xffffa10320c0": 47, │ │ │ │ │ - "0xffffa1077fb0": 47, │ │ │ │ │ - "0xffffa1296780": 47, │ │ │ │ │ - "0xffffa154a3f0": 47, │ │ │ │ │ - "0xffffa154a6f0": 47, │ │ │ │ │ - "0xffffa1588bf0": 47, │ │ │ │ │ - "0xffffa15c3860": 47, │ │ │ │ │ - "0xffffa1613d40": 47, │ │ │ │ │ - "0xffffa16ee0c0": 47, │ │ │ │ │ - "0xffffa1739430": 47, │ │ │ │ │ - "0xffffa1745e80": 47, │ │ │ │ │ - "0xffffa1747e90": 47, │ │ │ │ │ - "0xffffa18df080": 47, │ │ │ │ │ + "0xffff3884c680": 14, │ │ │ │ │ + "0xffff62e04860": 53, │ │ │ │ │ + "0xffff62efd840": 44, │ │ │ │ │ + "0xffff62effec0": 44, │ │ │ │ │ + "0xffff62f2d140": 44, │ │ │ │ │ + "0xffff62f2f040": 44, │ │ │ │ │ + "0xffff63817440": 44, │ │ │ │ │ + "0xffff63ea6bc0": 44, │ │ │ │ │ + "0xffff654f4d40": 47, │ │ │ │ │ + "0xffff65b84050": 47, │ │ │ │ │ + "0xffff65ce1340": 44, │ │ │ │ │ + "0xffff65d27410": 38, │ │ │ │ │ + "0xffff65d2c470": 38, │ │ │ │ │ + "0xffff67eca340": 32, │ │ │ │ │ + "0xffff695e25c0": 44, │ │ │ │ │ + "0xffff696b79c0": 6, │ │ │ │ │ + "0xffff7e3423f0": 43, │ │ │ │ │ + "0xffff7fc805f0": 19, │ │ │ │ │ + "0xffff7fcb0440": 43, │ │ │ │ │ + "0xffff7fcedca0": 43, │ │ │ │ │ + "0xffff8e4392b0": 43, │ │ │ │ │ + "0xffff9ca10620": 47, │ │ │ │ │ + "0xffff9dab4950": 47, │ │ │ │ │ + "0xffff9dbaede0": 47, │ │ │ │ │ + "0xffff9dbaf050": 47, │ │ │ │ │ + "0xffff9dbc4350": 47, │ │ │ │ │ + "0xffff9dbc70b0": 47, │ │ │ │ │ + "0xffff9dbc7470": 47, │ │ │ │ │ + "0xffff9dbc7680": 47, │ │ │ │ │ + "0xffff9dbe1580": 47, │ │ │ │ │ + "0xffff9dbe1c10": 47, │ │ │ │ │ + "0xffff9dbe30b0": 47, │ │ │ │ │ + "0xffff9dbfd5e0": 47, │ │ │ │ │ + "0xffff9dd8c440": 47, │ │ │ │ │ + "0xffff9dde38f0": 47, │ │ │ │ │ + "0xffff9de80fe0": 47, │ │ │ │ │ + "0xffff9e50b470": 47, │ │ │ │ │ + "0xffff9e5d8bf0": 47, │ │ │ │ │ + "0xffff9e5da180": 47, │ │ │ │ │ + "0xffff9e609550": 47, │ │ │ │ │ + "0xffff9e7901a0": 47, │ │ │ │ │ + "0xffff9e9eb650": 47, │ │ │ │ │ + "0xffff9ea0d490": 47, │ │ │ │ │ + "0xffff9eb4e6f0": 47, │ │ │ │ │ + "0xffff9ed102f0": 47, │ │ │ │ │ + "0xffff9eed7d10": 47, │ │ │ │ │ + "0xffff9f0422d0": 47, │ │ │ │ │ + "0xffff9f043a70": 47, │ │ │ │ │ + "0xffff9f0c12e0": 47, │ │ │ │ │ + "0xffff9f0c17f0": 47, │ │ │ │ │ + "0xffff9f0ce840": 47, │ │ │ │ │ + "0xffff9f0cf4d0": 47, │ │ │ │ │ + "0xffff9f1b9100": 47, │ │ │ │ │ + "0xffff9f1cb080": 47, │ │ │ │ │ + "0xffff9f27f8f0": 47, │ │ │ │ │ + "0xffff9f4512e0": 47, │ │ │ │ │ + "0xffff9f465700": 47, │ │ │ │ │ "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, 42, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "10": [3, 6, 7, 8, 12, 13, 14, 16, 18, 19, 24, 25, 26, 27, 28, 30, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "100": [3, 7, 8, 27, 28, 35, 36, 37, 42, 43, 44, 47, 48, 49, 50, 53], │ │ │ │ │ "1000": [27, 37, 53], │ │ │ │ │ "10000": 36, │ │ │ │ │ "100000": 37, │ │ │ │ │ "1000x1000": [6, 37], │ │ │ │ │ @@ -2412,14 +2410,15 @@ │ │ │ │ │ "1035": [30, 42], │ │ │ │ │ "1037": [30, 42], │ │ │ │ │ "1038": 30, │ │ │ │ │ "104": [36, 42, 47, 53], │ │ │ │ │ "104569": 46, │ │ │ │ │ "10456922": 19, │ │ │ │ │ "104b": [35, 38], │ │ │ │ │ + "104e": 50, │ │ │ │ │ "105": [35, 36, 42, 46, 47], │ │ │ │ │ "105e": 37, │ │ │ │ │ "106": [36, 42, 47], │ │ │ │ │ "10614938": 36, │ │ │ │ │ "106eb727d497": 42, │ │ │ │ │ "107": [36, 42, 47], │ │ │ │ │ "107e": 47, │ │ │ │ │ @@ -2435,47 +2434,46 @@ │ │ │ │ │ "10x180x180": 37, │ │ │ │ │ "11": [3, 7, 8, 14, 19, 27, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "110": [6, 36, 42, 47], │ │ │ │ │ "111": [6, 36, 42, 47], │ │ │ │ │ "11111111": 36, │ │ │ │ │ "112": [6, 36, 38, 42, 47], │ │ │ │ │ "113": [6, 36, 42, 47], │ │ │ │ │ - "114": [6, 36, 37, 42, 47], │ │ │ │ │ + "114": [6, 36, 42, 47], │ │ │ │ │ "115": [6, 36, 42, 47], │ │ │ │ │ "11567869": 14, │ │ │ │ │ "116": [36, 42, 47], │ │ │ │ │ "116e": 37, │ │ │ │ │ "117": [36, 42, 47, 51], │ │ │ │ │ - "118": [36, 42, 47, 51], │ │ │ │ │ + "118": [36, 37, 42, 47, 51], │ │ │ │ │ "119": [36, 42, 43, 47, 51], │ │ │ │ │ "1192": [35, 46], │ │ │ │ │ "11920871": 19, │ │ │ │ │ "119209": 46, │ │ │ │ │ "119e": 37, │ │ │ │ │ "11t00": 37, │ │ │ │ │ "12": [6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 19, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "120": [36, 42, 44, 47, 49, 51], │ │ │ │ │ "1209": 36, │ │ │ │ │ "120b": [35, 36, 46], │ │ │ │ │ "121": [36, 42, 47, 51], │ │ │ │ │ - "12117": 50, │ │ │ │ │ "1212": 36, │ │ │ │ │ "122": [36, 42, 47, 51], │ │ │ │ │ "123": [14, 19, 36, 38, 42, 46, 47, 48, 51, 53], │ │ │ │ │ "1231": 40, │ │ │ │ │ "12310214428849964": 53, │ │ │ │ │ "1234": 3, │ │ │ │ │ "124": [36, 42, 44, 47, 51], │ │ │ │ │ "12428": 52, │ │ │ │ │ "125": [36, 42, 44, 47], │ │ │ │ │ "126": [36, 42, 47, 53], │ │ │ │ │ "12696983303810094": 53, │ │ │ │ │ "127": [36, 38, 40, 42, 47, 53], │ │ │ │ │ "128": [36, 42, 47, 53], │ │ │ │ │ - "128b": [35, 40, 42], │ │ │ │ │ + "128b": [35, 40, 42, 50], │ │ │ │ │ "129": [36, 42, 47, 53], │ │ │ │ │ "12903226": 14, │ │ │ │ │ "1294": 42, │ │ │ │ │ "12944067971751294": 53, │ │ │ │ │ "12arrai": 14, │ │ │ │ │ "12b": [19, 35, 42, 46, 48, 50, 53], │ │ │ │ │ "12kb": 51, │ │ │ │ │ @@ -2504,14 +2502,15 @@ │ │ │ │ │ "132e": 37, │ │ │ │ │ "133": [6, 36, 47], │ │ │ │ │ "134": [6, 36, 42, 47], │ │ │ │ │ "135": [6, 36, 47], │ │ │ │ │ "135632": [19, 46], │ │ │ │ │ "13563237": [19, 35], │ │ │ │ │ "136": [19, 35, 36, 46, 47, 48], │ │ │ │ │ + "13693": 50, │ │ │ │ │ "136b": 42, │ │ │ │ │ "137": [36, 47], │ │ │ │ │ "1375315200": 44, │ │ │ │ │ "1375535565632705": 53, │ │ │ │ │ "137e": 37, │ │ │ │ │ "138": [36, 47, 53], │ │ │ │ │ "1388": 44, │ │ │ │ │ @@ -2548,36 +2547,35 @@ │ │ │ │ │ "148": [16, 36, 42, 47], │ │ │ │ │ "1482": [42, 44], │ │ │ │ │ "1483": [42, 44], │ │ │ │ │ "1484": [42, 44], │ │ │ │ │ "1485": [42, 44], │ │ │ │ │ "14874584": 36, │ │ │ │ │ "14880519": 19, │ │ │ │ │ - "149": [6, 42, 47], │ │ │ │ │ + "149": [6, 42, 47, 50], │ │ │ │ │ "14974655": 36, │ │ │ │ │ "14975103": 36, │ │ │ │ │ "14985403": 36, │ │ │ │ │ "14990579": 36, │ │ │ │ │ - "14j": 50, │ │ │ │ │ "14kb": 36, │ │ │ │ │ "14t00": 37, │ │ │ │ │ "15": [6, 7, 8, 9, 13, 14, 19, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "150": [6, 36, 42, 47], │ │ │ │ │ "1505": 36, │ │ │ │ │ "150e": 47, │ │ │ │ │ - "151": [42, 47], │ │ │ │ │ + "151": [42, 47, 50], │ │ │ │ │ "152": [6, 38, 42, 47], │ │ │ │ │ "152b": [38, 49], │ │ │ │ │ "153": [6, 42, 47], │ │ │ │ │ "1532": 42, │ │ │ │ │ "1533": 42, │ │ │ │ │ "1535": 42, │ │ │ │ │ "1536": 42, │ │ │ │ │ "153e": 37, │ │ │ │ │ - "154": [6, 42], │ │ │ │ │ + "154": [6, 42, 50], │ │ │ │ │ "154e": 37, │ │ │ │ │ "158": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "1583": [42, 44], │ │ │ │ │ "1584": [42, 44], │ │ │ │ │ "1585": [42, 44], │ │ │ │ │ "1586": [42, 44], │ │ │ │ │ "1587": [42, 44], │ │ │ │ │ @@ -2587,49 +2585,49 @@ │ │ │ │ │ "1590": [42, 44], │ │ │ │ │ "15b": 36, │ │ │ │ │ "15t00": 37, │ │ │ │ │ "15th": 49, │ │ │ │ │ "16": [8, 11, 19, 33, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "160": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "160b": [25, 44, 53], │ │ │ │ │ - "161": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ + "161": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48, 50], │ │ │ │ │ "16129032": 14, │ │ │ │ │ "1614": 42, │ │ │ │ │ "1615": 42, │ │ │ │ │ "1616": 42, │ │ │ │ │ "1617": 42, │ │ │ │ │ "1618": 42, │ │ │ │ │ "1619": 42, │ │ │ │ │ "162": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "1620": 42, │ │ │ │ │ "1621": 42, │ │ │ │ │ "16274935": 14, │ │ │ │ │ "162e": 47, │ │ │ │ │ "163": [6, 7, 8, 9, 10, 11, 12, 13, 14, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "163e": 37, │ │ │ │ │ + "166": 50, │ │ │ │ │ "1667": 43, │ │ │ │ │ "167": [7, 38], │ │ │ │ │ "1678": [18, 51, 52], │ │ │ │ │ "168b": [35, 36], │ │ │ │ │ "1693": 42, │ │ │ │ │ "1694": 42, │ │ │ │ │ "1695": 42, │ │ │ │ │ "16959064": 36, │ │ │ │ │ "1696": 42, │ │ │ │ │ "1697": 42, │ │ │ │ │ "1698": 42, │ │ │ │ │ "1699": 42, │ │ │ │ │ "16b": [19, 35, 36, 38, 40, 42, 43, 44, 46, 48, 49, 52, 53], │ │ │ │ │ - "16j": 50, │ │ │ │ │ "16t00": 37, │ │ │ │ │ "17": [8, 19, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "170": [6, 8, 9, 10, 13, 32], │ │ │ │ │ "1700": 42, │ │ │ │ │ "1703814": 44, │ │ │ │ │ - "171": [6, 8, 9, 10, 13, 32, 42], │ │ │ │ │ + "171": [6, 8, 9, 10, 13, 32, 42, 50], │ │ │ │ │ "171e": [37, 47], │ │ │ │ │ "172": [6, 8, 9, 10, 13, 32], │ │ │ │ │ "17234978": 19, │ │ │ │ │ "173": [6, 8, 9, 10, 13, 32, 46, 48], │ │ │ │ │ "1732": [19, 35, 46], │ │ │ │ │ "17321465": [19, 35], │ │ │ │ │ "173215": [19, 46], │ │ │ │ │ @@ -2656,15 +2654,14 @@ │ │ │ │ │ "18072141": 14, │ │ │ │ │ "181": 6, │ │ │ │ │ "182": [6, 36, 38, 42], │ │ │ │ │ "183": 6, │ │ │ │ │ "184": [6, 42], │ │ │ │ │ "184b": 46, │ │ │ │ │ "185": [6, 42], │ │ │ │ │ - "186": 50, │ │ │ │ │ "187": [6, 42], │ │ │ │ │ "188": [6, 42], │ │ │ │ │ "188e": 37, │ │ │ │ │ "189": [6, 43], │ │ │ │ │ "1891": 6, │ │ │ │ │ "1892": 6, │ │ │ │ │ "1893": 6, │ │ │ │ │ @@ -2680,15 +2677,15 @@ │ │ │ │ │ "192b": [36, 38, 46, 52], │ │ │ │ │ "192e": 37, │ │ │ │ │ "193": 44, │ │ │ │ │ "194": 44, │ │ │ │ │ "195": [6, 44], │ │ │ │ │ "196": [6, 44], │ │ │ │ │ "197": [6, 44], │ │ │ │ │ - "1970": [27, 53], │ │ │ │ │ + "1970": [27, 50, 53], │ │ │ │ │ "198": 44, │ │ │ │ │ "199": 44, │ │ │ │ │ "1991": 53, │ │ │ │ │ "1999": 36, │ │ │ │ │ "19t00": 37, │ │ │ │ │ "1d": [8, 24, 36, 38, 43, 46, 47, 48, 49, 53], │ │ │ │ │ "1e": 53, │ │ │ │ │ @@ -2713,30 +2710,30 @@ │ │ │ │ │ "202": [6, 42, 44], │ │ │ │ │ "2020": 34, │ │ │ │ │ "2021": [33, 34], │ │ │ │ │ "2022": 34, │ │ │ │ │ "2024": [26, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "202e": 37, │ │ │ │ │ "203": 6, │ │ │ │ │ - "205": [6, 8, 9, 10, 13, 32, 42], │ │ │ │ │ + "205": [6, 8, 9, 10, 13, 32, 42, 50], │ │ │ │ │ "206": [6, 8, 9, 10, 13, 32], │ │ │ │ │ "206e": 37, │ │ │ │ │ "207": [6, 8, 9, 10, 13, 32, 44], │ │ │ │ │ "208": [6, 8, 9, 10, 13, 32], │ │ │ │ │ "208e": 37, │ │ │ │ │ "20995484": 19, │ │ │ │ │ + "20b": 50, │ │ │ │ │ "20t00": 37, │ │ │ │ │ "21": [8, 19, 35, 36, 37, 38, 40, 42, 43, 44, 46, 47, 48, 50, 51, 52], │ │ │ │ │ "210e": 37, │ │ │ │ │ "212": [19, 35, 46, 48], │ │ │ │ │ "212112": [19, 46], │ │ │ │ │ "21211203": [19, 35], │ │ │ │ │ "214": [6, 7, 8, 9, 10, 11, 12, 13, 40, 47], │ │ │ │ │ "215": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ - "215j": 50, │ │ │ │ │ "216": [6, 7, 8, 9, 10, 11, 12, 13, 14, 42, 44, 47], │ │ │ │ │ "2161": 6, │ │ │ │ │ "21616663": 14, │ │ │ │ │ "2162": 6, │ │ │ │ │ "2163": 6, │ │ │ │ │ "2164": 6, │ │ │ │ │ "2165": 6, │ │ │ │ │ @@ -2757,28 +2754,30 @@ │ │ │ │ │ "225": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "22546326": 36, │ │ │ │ │ "226": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "2262": [18, 51, 52], │ │ │ │ │ "226e": 47, │ │ │ │ │ "227": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "228": [6, 7, 8, 9, 10, 11, 12, 13], │ │ │ │ │ + "22867": 50, │ │ │ │ │ "2288873043216132": 53, │ │ │ │ │ "228e": 37, │ │ │ │ │ "229": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "22t00": 37, │ │ │ │ │ "23": [14, 18, 19, 35, 36, 37, 38, 40, 42, 43, 44, 46, 47, 48, 50, 51, 52], │ │ │ │ │ "230": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "231": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "232": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "23207067": 36, │ │ │ │ │ "233": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "2333": 14, │ │ │ │ │ "23333333": 14, │ │ │ │ │ - "234": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ + "234": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48, 50], │ │ │ │ │ "234e": 37, │ │ │ │ │ + "235": 50, │ │ │ │ │ "2355": 42, │ │ │ │ │ "23594765": 36, │ │ │ │ │ "236": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "236b": 46, │ │ │ │ │ "2380": 53, │ │ │ │ │ "23859177": 36, │ │ │ │ │ "23991312": 36, │ │ │ │ │ @@ -2801,71 +2800,74 @@ │ │ │ │ │ "245e": 47, │ │ │ │ │ "2467": 37, │ │ │ │ │ "248": 36, │ │ │ │ │ "2483": 36, │ │ │ │ │ "248b": 44, │ │ │ │ │ "248e": 37, │ │ │ │ │ "2493": 44, │ │ │ │ │ - "24b": [14, 19, 35, 36, 38, 40, 42, 43, 46, 47, 48, 49, 53], │ │ │ │ │ + "24b": [14, 19, 35, 36, 38, 40, 42, 43, 46, 47, 48, 49, 50, 53], │ │ │ │ │ "24h": 53, │ │ │ │ │ "24t00": 37, │ │ │ │ │ "25": [7, 8, 14, 19, 35, 36, 37, 38, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "250": [13, 47], │ │ │ │ │ "2509": 36, │ │ │ │ │ "251": 36, │ │ │ │ │ "2515": 36, │ │ │ │ │ "25176289": 14, │ │ │ │ │ + "252": 50, │ │ │ │ │ "253": 38, │ │ │ │ │ "255": [13, 42, 44], │ │ │ │ │ "2554": 40, │ │ │ │ │ "2558": 44, │ │ │ │ │ "2559": 44, │ │ │ │ │ "2560": 44, │ │ │ │ │ "2562": 44, │ │ │ │ │ "2563": 44, │ │ │ │ │ "2564": 44, │ │ │ │ │ "2565": 44, │ │ │ │ │ "2566": 44, │ │ │ │ │ "2567": 44, │ │ │ │ │ "2568": 44, │ │ │ │ │ "2569": 44, │ │ │ │ │ - "256b": 50, │ │ │ │ │ "2570": 44, │ │ │ │ │ "2571": 44, │ │ │ │ │ "2572": 44, │ │ │ │ │ "2573": 44, │ │ │ │ │ "2574": 44, │ │ │ │ │ "2575": 44, │ │ │ │ │ "2576": 44, │ │ │ │ │ "2577": 44, │ │ │ │ │ "2578": 44, │ │ │ │ │ "2579": 44, │ │ │ │ │ "258": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "25828142": 36, │ │ │ │ │ "259": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ + "25b": 50, │ │ │ │ │ "25t00": 37, │ │ │ │ │ "26": [14, 19, 35, 36, 37, 38, 40, 42, 43, 44, 46, 47, 48, 50, 51, 52], │ │ │ │ │ "260": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "26047600586578334": 53, │ │ │ │ │ "2605": [38, 40], │ │ │ │ │ "261": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "261e": 47, │ │ │ │ │ "262": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "26297658": 36, │ │ │ │ │ "263": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ + "26380": 50, │ │ │ │ │ "263e": 47, │ │ │ │ │ "264": 43, │ │ │ │ │ "26410385": 36, │ │ │ │ │ "264b": 38, │ │ │ │ │ "265": 13, │ │ │ │ │ "26522911": 36, │ │ │ │ │ "26585059": 36, │ │ │ │ │ "266": 48, │ │ │ │ │ "26673283": 36, │ │ │ │ │ "26771520e": 36, │ │ │ │ │ + "26895": 50, │ │ │ │ │ "26t00": 37, │ │ │ │ │ "27": [3, 14, 19, 35, 36, 37, 38, 40, 42, 43, 44, 47, 48, 50, 51, 52], │ │ │ │ │ "270": [13, 43], │ │ │ │ │ "271148": 14, │ │ │ │ │ "272": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "273": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "2733209": 36, │ │ │ │ │ @@ -2900,28 +2902,25 @@ │ │ │ │ │ "2853": 43, │ │ │ │ │ "2854": 43, │ │ │ │ │ "2855": 43, │ │ │ │ │ "2856": 43, │ │ │ │ │ "2857": 43, │ │ │ │ │ "2858": 43, │ │ │ │ │ "286e": 36, │ │ │ │ │ - "287e": 50, │ │ │ │ │ - "28838": 50, │ │ │ │ │ "288b": [14, 36, 52], │ │ │ │ │ "289": 6, │ │ │ │ │ "2899444": 36, │ │ │ │ │ "28t00": 37, │ │ │ │ │ "29": [7, 14, 18, 19, 35, 36, 37, 38, 40, 42, 43, 44, 47, 48, 50, 51, 52], │ │ │ │ │ "290": [6, 13], │ │ │ │ │ "291": 6, │ │ │ │ │ "2917": 44, │ │ │ │ │ "29173175": 36, │ │ │ │ │ "292": [6, 53], │ │ │ │ │ "2920": 47, │ │ │ │ │ - "29277": 50, │ │ │ │ │ "293": 6, │ │ │ │ │ "2931": 40, │ │ │ │ │ "29393586": 36, │ │ │ │ │ "294": 6, │ │ │ │ │ "295": 6, │ │ │ │ │ "29519584": 36, │ │ │ │ │ "29645358": 36, │ │ │ │ │ @@ -2958,16 +2957,17 @@ │ │ │ │ │ "306e": 37, │ │ │ │ │ "307": 6, │ │ │ │ │ "3070": 6, │ │ │ │ │ "3071": 6, │ │ │ │ │ "3073": 6, │ │ │ │ │ "3074": 6, │ │ │ │ │ "307e": 37, │ │ │ │ │ - "308": [6, 50], │ │ │ │ │ + "308": 6, │ │ │ │ │ "30852683": 36, │ │ │ │ │ + "308j": 50, │ │ │ │ │ "309": [6, 43], │ │ │ │ │ "30t00": [14, 37, 51], │ │ │ │ │ "30t1": 51, │ │ │ │ │ "30t12": 51, │ │ │ │ │ "30t18": 51, │ │ │ │ │ "30t21": 51, │ │ │ │ │ "31": [14, 19, 35, 36, 37, 38, 40, 42, 43, 44, 47, 48, 50, 51, 52], │ │ │ │ │ @@ -2980,31 +2980,33 @@ │ │ │ │ │ "3155": 6, │ │ │ │ │ "3157": 6, │ │ │ │ │ "3158": 6, │ │ │ │ │ "315e": 37, │ │ │ │ │ "316": 43, │ │ │ │ │ "31695352": 14, │ │ │ │ │ "316e": 37, │ │ │ │ │ + "31889": 50, │ │ │ │ │ "319e": 37, │ │ │ │ │ "31arrai": 14, │ │ │ │ │ "31t00": 14, │ │ │ │ │ "31t18": 51, │ │ │ │ │ "31t23": 51, │ │ │ │ │ "32": [19, 35, 36, 37, 38, 42, 43, 44, 47, 48, 50, 51, 52, 53], │ │ │ │ │ "320b": 44, │ │ │ │ │ "320e": 37, │ │ │ │ │ "321": 43, │ │ │ │ │ "3226808": 19, │ │ │ │ │ "32269851": 14, │ │ │ │ │ "322e": 37, │ │ │ │ │ + "324": 50, │ │ │ │ │ "324000": 37, │ │ │ │ │ "3261": 40, │ │ │ │ │ "32618": 44, │ │ │ │ │ "326e": 37, │ │ │ │ │ - "32b": [19, 35, 36, 38, 40, 42, 43, 44, 46, 47, 48, 49, 51, 53], │ │ │ │ │ + "32b": [19, 35, 36, 38, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 53], │ │ │ │ │ "33": [14, 19, 35, 36, 37, 38, 42, 43, 44, 47, 48, 50, 51, 53], │ │ │ │ │ "331e": 37, │ │ │ │ │ "332": 50, │ │ │ │ │ "333": 48, │ │ │ │ │ "33326004": 19, │ │ │ │ │ "33333333": 14, │ │ │ │ │ "333e": 37, │ │ │ │ │ @@ -3046,14 +3048,15 @@ │ │ │ │ │ "352": [6, 53], │ │ │ │ │ "35205353914802473": 53, │ │ │ │ │ "3521": 42, │ │ │ │ │ "354": [6, 40], │ │ │ │ │ "355": 6, │ │ │ │ │ "355e": 37, │ │ │ │ │ "35677824": 19, │ │ │ │ │ + "3568654294": 50, │ │ │ │ │ "357": [6, 51], │ │ │ │ │ "357e": 37, │ │ │ │ │ "358": [36, 51], │ │ │ │ │ "358e": 37, │ │ │ │ │ "359": [6, 38, 51], │ │ │ │ │ "36": [3, 19, 35, 36, 37, 38, 42, 43, 44, 47, 48, 50, 51, 53], │ │ │ │ │ "360": [44, 51], │ │ │ │ │ @@ -3066,28 +3069,26 @@ │ │ │ │ │ "364": [36, 51], │ │ │ │ │ "3648": 51, │ │ │ │ │ "3649": 51, │ │ │ │ │ "365": [14, 47, 51, 53], │ │ │ │ │ "3650": 51, │ │ │ │ │ "3651": 51, │ │ │ │ │ "3652": 51, │ │ │ │ │ - "365808426882986985": 50, │ │ │ │ │ "365_dai": 44, │ │ │ │ │ "3667": 43, │ │ │ │ │ "366_dai": 44, │ │ │ │ │ "366e": 37, │ │ │ │ │ "3684": 40, │ │ │ │ │ "368e": 37, │ │ │ │ │ "369": 47, │ │ │ │ │ "36b": 53, │ │ │ │ │ "37": [19, 35, 36, 37, 38, 40, 42, 43, 44, 47, 48, 50, 53], │ │ │ │ │ "371": 36, │ │ │ │ │ "37271154": 14, │ │ │ │ │ "372712": 14, │ │ │ │ │ - "372e": 50, │ │ │ │ │ "373": [38, 40, 42, 48, 53], │ │ │ │ │ "37301222522143085": 53, │ │ │ │ │ "37342613": 19, │ │ │ │ │ "373e": 47, │ │ │ │ │ "37459826": 14, │ │ │ │ │ "375": 44, │ │ │ │ │ "37516528": 36, │ │ │ │ │ @@ -3097,29 +3098,30 @@ │ │ │ │ │ "3767": 40, │ │ │ │ │ "37674971618967135": 53, │ │ │ │ │ "377": [38, 42, 53], │ │ │ │ │ "378e": 47, │ │ │ │ │ "38": [19, 35, 36, 37, 38, 42, 43, 44, 47, 48, 50, 53], │ │ │ │ │ "381": 43, │ │ │ │ │ "381e": 47, │ │ │ │ │ + "38205": 50, │ │ │ │ │ + "38275db69ad8": 44, │ │ │ │ │ "383": [46, 50], │ │ │ │ │ "384b": [50, 52], │ │ │ │ │ "384e": 37, │ │ │ │ │ "385": 6, │ │ │ │ │ "386": 6, │ │ │ │ │ "387": 6, │ │ │ │ │ "388": 6, │ │ │ │ │ "3884": [36, 51], │ │ │ │ │ "3885": 51, │ │ │ │ │ "3886": 51, │ │ │ │ │ "3887": 51, │ │ │ │ │ "389": 6, │ │ │ │ │ "38956314": 36, │ │ │ │ │ "389e": 44, │ │ │ │ │ - "38j": 50, │ │ │ │ │ "39": [6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 35, 36, 37, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "390": 6, │ │ │ │ │ "391": 6, │ │ │ │ │ "391e": 37, │ │ │ │ │ "392e": 44, │ │ │ │ │ "395": 42, │ │ │ │ │ "395763": 14, │ │ │ │ │ @@ -3147,18 +3149,21 @@ │ │ │ │ │ "4022": 43, │ │ │ │ │ "4023": 43, │ │ │ │ │ "4024": 43, │ │ │ │ │ "4025": 43, │ │ │ │ │ "4026": 43, │ │ │ │ │ "4027": 43, │ │ │ │ │ "40324704": 36, │ │ │ │ │ + "403e": 50, │ │ │ │ │ "404": 42, │ │ │ │ │ + "40406": 50, │ │ │ │ │ "405": 42, │ │ │ │ │ "406e": 47, │ │ │ │ │ "407e": 37, │ │ │ │ │ + "408212621": 50, │ │ │ │ │ "40824829": 36, │ │ │ │ │ "40880017": 36, │ │ │ │ │ "408b": 44, │ │ │ │ │ "40b": [35, 36, 38, 42, 43, 44, 53], │ │ │ │ │ "41": [19, 35, 36, 37, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "410e": 47, │ │ │ │ │ "41155042": 36, │ │ │ │ │ @@ -3176,20 +3181,22 @@ │ │ │ │ │ "41kb": 14, │ │ │ │ │ "42": [19, 35, 36, 37, 38, 40, 42, 43, 44, 47, 48, 49, 53], │ │ │ │ │ "423": 47, │ │ │ │ │ "424": [38, 46], │ │ │ │ │ "427": 43, │ │ │ │ │ "428": 47, │ │ │ │ │ "4281": 36, │ │ │ │ │ + "4294967294": 50, │ │ │ │ │ "42b": 36, │ │ │ │ │ "43": [14, 19, 35, 36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "431e": 37, │ │ │ │ │ "4326": 44, │ │ │ │ │ "4333": 43, │ │ │ │ │ "438": 46, │ │ │ │ │ + "4390": 44, │ │ │ │ │ "439e": 37, │ │ │ │ │ "44": [19, 35, 36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "440e": 47, │ │ │ │ │ "441e": 37, │ │ │ │ │ "445e": [37, 47], │ │ │ │ │ "44785582": 14, │ │ │ │ │ "447856": 14, │ │ │ │ │ @@ -3226,55 +3233,54 @@ │ │ │ │ │ "466": [38, 43], │ │ │ │ │ "467e": [36, 37], │ │ │ │ │ "46830462": 36, │ │ │ │ │ "469": [44, 46, 48], │ │ │ │ │ "4691": [19, 35, 37, 46], │ │ │ │ │ "469112": [19, 46], │ │ │ │ │ "4691123": [19, 35], │ │ │ │ │ - "47": [7, 19, 36, 37, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ + "47": [7, 19, 36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "471": 42, │ │ │ │ │ "47145519": 36, │ │ │ │ │ "47146929": 36, │ │ │ │ │ "4715": 44, │ │ │ │ │ "47179359": 36, │ │ │ │ │ "47195655": 36, │ │ │ │ │ "472e": 37, │ │ │ │ │ "476e": 47, │ │ │ │ │ "47kb": 14, │ │ │ │ │ "48": [19, 36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ - "48003": 50, │ │ │ │ │ "4809": 53, │ │ │ │ │ "480b": 44, │ │ │ │ │ "481": 42, │ │ │ │ │ "481e": 37, │ │ │ │ │ "48541500": 44, │ │ │ │ │ "485e": 37, │ │ │ │ │ "4867138": 36, │ │ │ │ │ "48671934": 36, │ │ │ │ │ "48672119": 36, │ │ │ │ │ "4875": 36, │ │ │ │ │ "487e": 37, │ │ │ │ │ - "48b": [19, 35, 36, 40, 42, 43, 44, 46, 48, 50, 53], │ │ │ │ │ - "49": [36, 37, 38, 42, 43, 44, 47, 48, 50, 53], │ │ │ │ │ + "48b": [19, 35, 36, 40, 42, 43, 44, 46, 48, 53], │ │ │ │ │ + "49": [36, 38, 42, 43, 44, 47, 48, 50, 53], │ │ │ │ │ "4909415": 19, │ │ │ │ │ "494929": 46, │ │ │ │ │ "49492927": 19, │ │ │ │ │ "49497537": 19, │ │ │ │ │ "495": 46, │ │ │ │ │ "495e": [37, 47], │ │ │ │ │ "497": [42, 43], │ │ │ │ │ "499e": 37, │ │ │ │ │ "4b": [35, 42, 48, 53], │ │ │ │ │ - "4c7a": 44, │ │ │ │ │ "4d": 47, │ │ │ │ │ "4e6a2933d208": 42, │ │ │ │ │ "4kb": [47, 51], │ │ │ │ │ "5": [6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 25, 27, 30, 32, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "50": [7, 14, 28, 32, 35, 36, 38, 40, 42, 43, 44, 47, 48, 50, 53], │ │ │ │ │ "500": [13, 44, 47, 53], │ │ │ │ │ + "500e": 50, │ │ │ │ │ "502": 43, │ │ │ │ │ "504": 40, │ │ │ │ │ "505": 38, │ │ │ │ │ "505e": 47, │ │ │ │ │ "506234": 14, │ │ │ │ │ "508": 43, │ │ │ │ │ "5081": 30, │ │ │ │ │ @@ -3304,14 +3310,15 @@ │ │ │ │ │ "519e": 37, │ │ │ │ │ "52": [36, 38, 42, 43, 44, 47, 48, 50, 53], │ │ │ │ │ "520": 6, │ │ │ │ │ "521": 6, │ │ │ │ │ "522": 6, │ │ │ │ │ "522e": 36, │ │ │ │ │ "523": 6, │ │ │ │ │ + "5245": 50, │ │ │ │ │ "524e": [37, 47], │ │ │ │ │ "525": 6, │ │ │ │ │ "52571455": 36, │ │ │ │ │ "5281": 16, │ │ │ │ │ "5289": 46, │ │ │ │ │ "528e": 47, │ │ │ │ │ "529": 46, │ │ │ │ │ @@ -3325,14 +3332,15 @@ │ │ │ │ │ "5334": 16, │ │ │ │ │ "534e": 37, │ │ │ │ │ "538": 43, │ │ │ │ │ "538e": 37, │ │ │ │ │ "53916524": 19, │ │ │ │ │ "54": [3, 36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "540e": 47, │ │ │ │ │ + "5410f0ea": 44, │ │ │ │ │ "5417": 44, │ │ │ │ │ "541e": 47, │ │ │ │ │ "543": [38, 40, 42, 48], │ │ │ │ │ "54392729": 14, │ │ │ │ │ "543e": 47, │ │ │ │ │ "544": 14, │ │ │ │ │ "54401285": 36, │ │ │ │ │ @@ -3348,38 +3356,41 @@ │ │ │ │ │ "549": 46, │ │ │ │ │ "55": [36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "550e": 37, │ │ │ │ │ "551": 38, │ │ │ │ │ "552b": 38, │ │ │ │ │ "552e": 37, │ │ │ │ │ "556": 43, │ │ │ │ │ - "556e": [36, 37, 47], │ │ │ │ │ + "556e": [36, 37, 47, 50], │ │ │ │ │ "55799171": 14, │ │ │ │ │ "558073": 14, │ │ │ │ │ "55807323": 14, │ │ │ │ │ "558e": 37, │ │ │ │ │ "56": [3, 36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "5607": 44, │ │ │ │ │ "561": 42, │ │ │ │ │ "562": 38, │ │ │ │ │ + "56254": 50, │ │ │ │ │ + "5630": 50, │ │ │ │ │ "568": 46, │ │ │ │ │ + "56897": 50, │ │ │ │ │ "568e": 37, │ │ │ │ │ "56b": [42, 53], │ │ │ │ │ "57": [36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "572e": 37, │ │ │ │ │ "574": 42, │ │ │ │ │ "5741": 53, │ │ │ │ │ "574e": 37, │ │ │ │ │ "577e": 37, │ │ │ │ │ "58": [36, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "58479532": 36, │ │ │ │ │ "584e": 37, │ │ │ │ │ "585e": 37, │ │ │ │ │ "5881": 53, │ │ │ │ │ - "589e": 37, │ │ │ │ │ + "589e": [37, 50], │ │ │ │ │ "59": [36, 37, 38, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "594": 44, │ │ │ │ │ "5948": 42, │ │ │ │ │ "59499": 16, │ │ │ │ │ "595": 44, │ │ │ │ │ "595e": 37, │ │ │ │ │ "596": 42, │ │ │ │ │ @@ -3402,15 +3413,14 @@ │ │ │ │ │ "604": 43, │ │ │ │ │ "607": [40, 43, 44], │ │ │ │ │ "608": 44, │ │ │ │ │ "609": 40, │ │ │ │ │ "61": [36, 38, 42, 43, 44, 47, 53], │ │ │ │ │ "610": 44, │ │ │ │ │ "611": 42, │ │ │ │ │ - "61102": 50, │ │ │ │ │ "611e": [37, 47], │ │ │ │ │ "612e": 44, │ │ │ │ │ "613": [38, 42], │ │ │ │ │ "616e": 37, │ │ │ │ │ "617e": 47, │ │ │ │ │ "619e": 47, │ │ │ │ │ "62": [36, 38, 42, 43, 44, 47, 53], │ │ │ │ │ @@ -3424,45 +3434,44 @@ │ │ │ │ │ "63": [3, 36, 38, 42, 43, 44, 47, 53], │ │ │ │ │ "634": 38, │ │ │ │ │ "634e": 37, │ │ │ │ │ "635": 43, │ │ │ │ │ "63593435": 14, │ │ │ │ │ "638e": 47, │ │ │ │ │ "64": [36, 38, 42, 43, 44, 47, 53], │ │ │ │ │ - "641e": 50, │ │ │ │ │ "642": 42, │ │ │ │ │ "645e": 37, │ │ │ │ │ "646": 46, │ │ │ │ │ "648000": 37, │ │ │ │ │ "648b": 38, │ │ │ │ │ - "64b": [35, 36, 40, 42, 48, 49, 51], │ │ │ │ │ + "64b": [35, 36, 40, 42, 48, 49, 50, 51], │ │ │ │ │ "65": [36, 38, 42, 44, 47, 53], │ │ │ │ │ "650e": 37, │ │ │ │ │ "651e": 37, │ │ │ │ │ "6525": 36, │ │ │ │ │ "652e": 37, │ │ │ │ │ "653": 38, │ │ │ │ │ "65442351": 19, │ │ │ │ │ "6573": 44, │ │ │ │ │ "66": [36, 38, 42, 43, 44, 47, 53], │ │ │ │ │ + "6652": 50, │ │ │ │ │ "6667": 44, │ │ │ │ │ "667e": 47, │ │ │ │ │ "669": 38, │ │ │ │ │ "67": [36, 38, 40, 42, 44, 47, 53], │ │ │ │ │ "67283594": 14, │ │ │ │ │ "674": 40, │ │ │ │ │ "675": 43, │ │ │ │ │ "68": [36, 38, 42, 44, 47, 53], │ │ │ │ │ "6807": 24, │ │ │ │ │ "680b": 38, │ │ │ │ │ "68137385": 14, │ │ │ │ │ "683e": 37, │ │ │ │ │ "684": 38, │ │ │ │ │ "686763": 14, │ │ │ │ │ - "689e": 50, │ │ │ │ │ "69": [6, 36, 38, 42, 44, 47, 53], │ │ │ │ │ "691e": [37, 47], │ │ │ │ │ "693e": 37, │ │ │ │ │ "69438174": 36, │ │ │ │ │ "6b": 35, │ │ │ │ │ "6c196f9d0b7d": 42, │ │ │ │ │ "6h": [51, 53], │ │ │ │ │ @@ -3476,14 +3485,15 @@ │ │ │ │ │ "705e": 37, │ │ │ │ │ "706771": 46, │ │ │ │ │ "707": 46, │ │ │ │ │ "707e": 47, │ │ │ │ │ "7083": 44, │ │ │ │ │ "70kb": 51, │ │ │ │ │ "71": [36, 38, 42, 44, 47, 53], │ │ │ │ │ + "711475185": 50, │ │ │ │ │ "714e": [37, 47], │ │ │ │ │ "715": 46, │ │ │ │ │ "7152": 46, │ │ │ │ │ "71713666": [19, 35], │ │ │ │ │ "7172": 53, │ │ │ │ │ "718": [43, 44], │ │ │ │ │ "71929825": 14, │ │ │ │ │ @@ -3533,37 +3543,35 @@ │ │ │ │ │ "754e": [37, 47], │ │ │ │ │ "7553": 53, │ │ │ │ │ "755e": [37, 47], │ │ │ │ │ "758e": 37, │ │ │ │ │ "759": 42, │ │ │ │ │ "7591068": 36, │ │ │ │ │ "76": [36, 38, 42, 44, 47, 53], │ │ │ │ │ - "762e": [37, 50], │ │ │ │ │ + "762e": 37, │ │ │ │ │ "76405235": 36, │ │ │ │ │ "765e": 37, │ │ │ │ │ "766e": 37, │ │ │ │ │ "767e": 37, │ │ │ │ │ "769e": 37, │ │ │ │ │ "76b": 48, │ │ │ │ │ "77": [36, 38, 42, 44, 47, 53], │ │ │ │ │ "771": 44, │ │ │ │ │ "77192982": 14, │ │ │ │ │ "772": 44, │ │ │ │ │ "773": [43, 44], │ │ │ │ │ "7733": 36, │ │ │ │ │ "774": 44, │ │ │ │ │ "775": 44, │ │ │ │ │ - "775e": 50, │ │ │ │ │ "776": 44, │ │ │ │ │ "776e": 37, │ │ │ │ │ "777": 44, │ │ │ │ │ "778": [44, 46], │ │ │ │ │ "77855382": 14, │ │ │ │ │ "778554": 14, │ │ │ │ │ - "778e": 50, │ │ │ │ │ "779": [14, 44], │ │ │ │ │ "78": [36, 38, 42, 44, 47, 53], │ │ │ │ │ "7805": 46, │ │ │ │ │ "781": 46, │ │ │ │ │ "782": 53, │ │ │ │ │ "782e": 37, │ │ │ │ │ "78376151": 36, │ │ │ │ │ @@ -3581,14 +3589,15 @@ │ │ │ │ │ "795": [30, 43], │ │ │ │ │ "796": [30, 42, 43], │ │ │ │ │ "797": [30, 42, 43], │ │ │ │ │ "797e": 52, │ │ │ │ │ "798": [30, 42, 43], │ │ │ │ │ "798e": [37, 50], │ │ │ │ │ "799": [30, 42, 43, 46], │ │ │ │ │ + "7\u017a\u017c\u0171\u00fa": 50, │ │ │ │ │ "8": [3, 6, 7, 8, 11, 12, 13, 14, 16, 19, 25, 27, 30, 32, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "80": [36, 37, 38, 42, 44, 47, 48, 53], │ │ │ │ │ "800b": [25, 36], │ │ │ │ │ "800e": 37, │ │ │ │ │ "800mb": 37, │ │ │ │ │ "801": [30, 42, 43], │ │ │ │ │ "803": [30, 43], │ │ │ │ │ @@ -3659,15 +3668,15 @@ │ │ │ │ │ "86436763": 19, │ │ │ │ │ "8652": 51, │ │ │ │ │ "867": 43, │ │ │ │ │ "86755799": 36, │ │ │ │ │ "8676": 51, │ │ │ │ │ "867e": 37, │ │ │ │ │ "868e": 37, │ │ │ │ │ - "869e": [37, 50], │ │ │ │ │ + "869e": 37, │ │ │ │ │ "87": [36, 37, 42, 44, 46, 47, 53], │ │ │ │ │ "8700": 51, │ │ │ │ │ "870e": 37, │ │ │ │ │ "871": 42, │ │ │ │ │ "871e": 37, │ │ │ │ │ "8724": 51, │ │ │ │ │ "874": 37, │ │ │ │ │ @@ -3675,15 +3684,15 @@ │ │ │ │ │ "874kb": 36, │ │ │ │ │ "875": 44, │ │ │ │ │ "8755": 51, │ │ │ │ │ "8789": 53, │ │ │ │ │ "878e": 37, │ │ │ │ │ "879": 36, │ │ │ │ │ "8790": 53, │ │ │ │ │ - "88": [36, 37, 42, 47, 53], │ │ │ │ │ + "88": [36, 37, 42, 47, 50, 53], │ │ │ │ │ "880e": 37, │ │ │ │ │ "884": 36, │ │ │ │ │ "886": 47, │ │ │ │ │ "886e": 37, │ │ │ │ │ "887": [47, 50], │ │ │ │ │ "88709677": 14, │ │ │ │ │ "8871": 14, │ │ │ │ │ @@ -3702,15 +3711,15 @@ │ │ │ │ │ "895": 50, │ │ │ │ │ "896": 50, │ │ │ │ │ "897": [38, 42, 50], │ │ │ │ │ "8972": 40, │ │ │ │ │ "897e": 47, │ │ │ │ │ "898": [42, 50], │ │ │ │ │ "899": [42, 50], │ │ │ │ │ - "8b": [16, 19, 35, 36, 38, 40, 42, 43, 46, 48, 50, 51, 53], │ │ │ │ │ + "8b": [16, 19, 35, 36, 38, 40, 42, 43, 46, 48, 51, 53], │ │ │ │ │ "8kb": 53, │ │ │ │ │ "8mb": 37, │ │ │ │ │ "8x": 53, │ │ │ │ │ "9": [3, 6, 7, 8, 12, 14, 19, 25, 27, 30, 32, 33, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "90": [3, 12, 35, 36, 42, 47, 48, 53], │ │ │ │ │ "900": 50, │ │ │ │ │ "900e": 47, │ │ │ │ │ @@ -3721,14 +3730,15 @@ │ │ │ │ │ "904": 50, │ │ │ │ │ "904e": 47, │ │ │ │ │ "905": 50, │ │ │ │ │ "905e": 47, │ │ │ │ │ "906": 50, │ │ │ │ │ "90680094": 19, │ │ │ │ │ "906e": 47, │ │ │ │ │ + "909897287": 50, │ │ │ │ │ "91": [12, 36, 42, 47, 53], │ │ │ │ │ "911": 43, │ │ │ │ │ "912": 43, │ │ │ │ │ "912e": 37, │ │ │ │ │ "913e": 37, │ │ │ │ │ "915": 38, │ │ │ │ │ "915e": 47, │ │ │ │ │ @@ -3738,27 +3748,28 @@ │ │ │ │ │ "92": [7, 36, 42, 47, 53], │ │ │ │ │ "921e": 37, │ │ │ │ │ "9256": 46, │ │ │ │ │ "925e": 37, │ │ │ │ │ "926": 46, │ │ │ │ │ "927": [38, 47], │ │ │ │ │ "928": 47, │ │ │ │ │ - "929e": [37, 50], │ │ │ │ │ + "929e": 37, │ │ │ │ │ "93": [6, 36, 42, 43, 47, 53], │ │ │ │ │ "931542": 14, │ │ │ │ │ "93154201": 14, │ │ │ │ │ "93221199": 14, │ │ │ │ │ "933": 36, │ │ │ │ │ "933e": 47, │ │ │ │ │ "93548387": 14, │ │ │ │ │ "9355": 14, │ │ │ │ │ "9363595": 19, │ │ │ │ │ "937": 40, │ │ │ │ │ "9399": 36, │ │ │ │ │ "94": [6, 36, 38, 42, 47, 53], │ │ │ │ │ + "941e": 50, │ │ │ │ │ "942": 42, │ │ │ │ │ "944e": [47, 52], │ │ │ │ │ "947726688477": 44, │ │ │ │ │ "95": [6, 9, 13, 36, 42, 47, 53], │ │ │ │ │ "9516": 14, │ │ │ │ │ "9516129": 14, │ │ │ │ │ "953": 38, │ │ │ │ │ @@ -3775,23 +3786,22 @@ │ │ │ │ │ "96641818": 19, │ │ │ │ │ "9667": [38, 40], │ │ │ │ │ "966e": 37, │ │ │ │ │ "967": [36, 38, 42], │ │ │ │ │ "967409": 14, │ │ │ │ │ "967e": 37, │ │ │ │ │ "968e": 37, │ │ │ │ │ - "96b": [14, 19, 35, 36, 38, 40, 42, 46, 47, 49, 50, 52, 53], │ │ │ │ │ + "96b": [14, 19, 35, 36, 38, 40, 42, 46, 47, 49, 52, 53], │ │ │ │ │ "97": [6, 36, 42, 47, 53], │ │ │ │ │ "971999": 37, │ │ │ │ │ "971e": 47, │ │ │ │ │ "973": 38, │ │ │ │ │ "974": 43, │ │ │ │ │ "975426": 14, │ │ │ │ │ "97727788": 36, │ │ │ │ │ - "977e": 50, │ │ │ │ │ "9781708": 19, │ │ │ │ │ "97873798": 36, │ │ │ │ │ "978e": 37, │ │ │ │ │ "979": 46, │ │ │ │ │ "98": [14, 36, 42, 47, 53], │ │ │ │ │ "98033045": 14, │ │ │ │ │ "98054898": 14, │ │ │ │ │ @@ -3934,14 +3944,15 @@ │ │ │ │ │ "_validate_index": 43, │ │ │ │ │ "_validate_interp_index": 43, │ │ │ │ │ "_variabl": [42, 44, 53], │ │ │ │ │ "_wait_cursor_for_draw_cm": 6, │ │ │ │ │ "_xy_index": 28, │ │ │ │ │ "a0": [36, 47], │ │ │ │ │ "a2": [36, 53], │ │ │ │ │ + "a603": 44, │ │ │ │ │ "aaron": 53, │ │ │ │ │ "ab": [36, 42, 46], │ │ │ │ │ "abandon": 53, │ │ │ │ │ "abba": 40, │ │ │ │ │ "abbrevi": 19, │ │ │ │ │ "abc": [19, 38, 42, 53], │ │ │ │ │ "abcd": [35, 44], │ │ │ │ │ @@ -4278,17 +4289,17 @@ │ │ │ │ │ "axi": [11, 16, 18, 19, 20, 22, 24, 30, 36, 37, 38, 39, 40, 44, 46, 49, 50, 53], │ │ │ │ │ "axisarrai": 5, │ │ │ │ │ "axisgrid": 14, │ │ │ │ │ "ayrton": 53, │ │ │ │ │ "azur": 53, │ │ │ │ │ "b": [3, 19, 25, 35, 36, 37, 38, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 53], │ │ │ │ │ "b0e609ec01c0": 42, │ │ │ │ │ + "b1ea": 44, │ │ │ │ │ "b2": [36, 53], │ │ │ │ │ "b7e217cfb9a9": 44, │ │ │ │ │ - "b970": 44, │ │ │ │ │ "ba": 53, │ │ │ │ │ "back": [1, 8, 16, 19, 20, 26, 30, 31, 36, 37, 38, 39, 40, 42, 44, 47, 48, 50, 53], │ │ │ │ │ "backend": [1, 5, 6, 16, 24, 29, 30, 31, 32, 33, 37, 42, 44, 52, 53], │ │ │ │ │ "backend_agg": 6, │ │ │ │ │ "backend_arrai": 27, │ │ │ │ │ "backend_bas": 6, │ │ │ │ │ "backend_kwarg": [27, 44, 53], │ │ │ │ │ @@ -4476,15 +4487,14 @@ │ │ │ │ │ "button": 3, │ │ │ │ │ "by_coord": [35, 53], │ │ │ │ │ "byte": [24, 44, 53], │ │ │ │ │ "bytes_": 53, │ │ │ │ │ "bytes_io": 6, │ │ │ │ │ "bytestr": 53, │ │ │ │ │ "bzip2": 44, │ │ │ │ │ - "b\u0117": 50, │ │ │ │ │ "c": [3, 5, 7, 13, 16, 18, 19, 24, 29, 35, 36, 42, 43, 44, 46, 47, 48, 49, 52, 53], │ │ │ │ │ "ca": [42, 44], │ │ │ │ │ "ca9ab8433617": 47, │ │ │ │ │ "cabl": 53, │ │ │ │ │ "cach": [6, 7, 8, 9, 10, 11, 12, 13, 26, 27, 30, 32, 33, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "cache_dir": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "cachedir": 3, │ │ │ │ │ @@ -4881,16 +4891,15 @@ │ │ │ │ │ "customari": 19, │ │ │ │ │ "customis": 50, │ │ │ │ │ "customiz": 19, │ │ │ │ │ "cut": [40, 53], │ │ │ │ │ "cycl": [3, 14, 53], │ │ │ │ │ "cyordereddict": 53, │ │ │ │ │ "cython": 29, │ │ │ │ │ - "d": [3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 26, 27, 28, 30, 32, 33, 35, 36, 37, 38, 40, 42, 43, 44, 46, 47, 48, 51, 52, 53], │ │ │ │ │ - "d0d1": 44, │ │ │ │ │ + "d": [3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 26, 27, 28, 30, 32, 33, 35, 36, 37, 38, 40, 42, 43, 44, 46, 47, 48, 50, 51, 52, 53], │ │ │ │ │ "d14047e0385": 42, │ │ │ │ │ "d2": 7, │ │ │ │ │ "d8990": 53, │ │ │ │ │ "d_ylog": 47, │ │ │ │ │ "da": [10, 25, 28, 30, 35, 36, 37, 40, 42, 43, 44, 47, 48, 49, 52, 53], │ │ │ │ │ "da_cub": 44, │ │ │ │ │ "da_dt64": 43, │ │ │ │ │ @@ -4973,15 +4982,14 @@ │ │ │ │ │ "days_in_month": [11, 52, 53], │ │ │ │ │ "days_in_year": 53, │ │ │ │ │ "dcherian": 53, │ │ │ │ │ "dd": [52, 53], │ │ │ │ │ "ddof": 53, │ │ │ │ │ "ddthh": 52, │ │ │ │ │ "de": 53, │ │ │ │ │ - "de36da9807f8": 44, │ │ │ │ │ "deactiv": [3, 27], │ │ │ │ │ "deadlin": 50, │ │ │ │ │ "deal": [20, 24, 27, 35, 44, 53], │ │ │ │ │ "dealloc": 53, │ │ │ │ │ "dean": 53, │ │ │ │ │ "debug": [37, 53], │ │ │ │ │ "dec": [51, 52], │ │ │ │ │ @@ -5233,15 +5241,14 @@ │ │ │ │ │ "dussin": 53, │ │ │ │ │ "dwesl": 53, │ │ │ │ │ "dynam": [47, 50, 53], │ │ │ │ │ "d\u00edez": 53, │ │ │ │ │ "e": [3, 5, 6, 8, 16, 19, 20, 22, 24, 25, 26, 28, 29, 30, 31, 33, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53], │ │ │ │ │ "e245530f6ed9": 42, │ │ │ │ │ "e74c3c": 47, │ │ │ │ │ - "e98b7ab4": 44, │ │ │ │ │ "eacc": [6, 7, 8, 9, 10, 11, 12, 13], │ │ │ │ │ "each": [3, 8, 11, 12, 16, 21, 24, 27, 30, 32, 33, 35, 36, 37, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 53], │ │ │ │ │ "eager": [24, 37], │ │ │ │ │ "eagerli": 53, │ │ │ │ │ "earli": [33, 37], │ │ │ │ │ "earlier": [19, 39, 51, 53], │ │ │ │ │ "earth": [5, 6, 33], │ │ │ │ │ @@ -5510,15 +5517,15 @@ │ │ │ │ │ "find": [0, 3, 4, 16, 22, 24, 30, 33, 37, 39, 41, 42, 46, 47, 49, 50, 53], │ │ │ │ │ "findal": 53, │ │ │ │ │ "fine": [3, 44, 50], │ │ │ │ │ "finer": 53, │ │ │ │ │ "finish": [3, 53], │ │ │ │ │ "finit": [5, 12, 36, 53], │ │ │ │ │ "firm": 16, │ │ │ │ │ - "first": [3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 19, 24, 28, 30, 32, 33, 35, 36, 37, 38, 42, 43, 44, 47, 48, 51, 53], │ │ │ │ │ + "first": [3, 8, 9, 11, 13, 14, 18, 19, 24, 28, 32, 33, 35, 36, 37, 38, 42, 43, 44, 47, 51, 53], │ │ │ │ │ "fiscal": [33, 53], │ │ │ │ │ "fischer": 53, │ │ │ │ │ "fit": [16, 33, 37, 44, 47, 53], │ │ │ │ │ "fitzgerald": [16, 53], │ │ │ │ │ "five": [36, 47, 53], │ │ │ │ │ "fix": [3, 8, 16, 37, 38, 44, 47, 49, 52], │ │ │ │ │ "fixed_dictionari": 50, │ │ │ │ │ @@ -6971,21 +6978,20 @@ │ │ │ │ │ "indexvari": [28, 33, 53], │ │ │ │ │ "indic": [5, 8, 13, 24, 28, 30, 36, 38, 40, 42, 44, 46, 47, 51, 53], │ │ │ │ │ "individu": [3, 18, 24, 32, 37, 38, 42, 44, 48, 53], │ │ │ │ │ "ineffect": 37, │ │ │ │ │ "ineffici": 36, │ │ │ │ │ "inevit": 26, │ │ │ │ │ "inexact": 42, │ │ │ │ │ - "inf": [50, 53], │ │ │ │ │ + "inf": 53, │ │ │ │ │ "infeas": 44, │ │ │ │ │ "infer": [8, 24, 35, 37, 47, 50, 52, 53], │ │ │ │ │ "infer_freq": [52, 53], │ │ │ │ │ "infer_interv": [47, 53], │ │ │ │ │ "infinit": 5, │ │ │ │ │ - "infj": 50, │ │ │ │ │ "info": [3, 6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "inform": [0, 3, 7, 8, 16, 20, 23, 24, 25, 27, 30, 39, 42, 43, 44, 47, 49, 51, 52, 53], │ │ │ │ │ "infrastructur": 53, │ │ │ │ │ "infrequ": 33, │ │ │ │ │ "ingg": 53, │ │ │ │ │ "inherit": [27, 28, 30, 31, 33, 53], │ │ │ │ │ "initi": [3, 44, 53], │ │ │ │ │ @@ -7350,15 +7356,16 @@ │ │ │ │ │ "lt": [6, 14], │ │ │ │ │ "luka": 53, │ │ │ │ │ "luke": 53, │ │ │ │ │ "lurcock": 53, │ │ │ │ │ "lusewel": 53, │ │ │ │ │ "lxml": 53, │ │ │ │ │ "lzf": 53, │ │ │ │ │ - "m": [3, 6, 8, 14, 18, 24, 37, 46, 51, 52, 53], │ │ │ │ │ + "m": [3, 6, 8, 14, 18, 24, 37, 46, 50, 51, 52, 53], │ │ │ │ │ + "m8": 50, │ │ │ │ │ "ma": 53, │ │ │ │ │ "maahn": 53, │ │ │ │ │ "machin": [3, 18, 37, 48, 53], │ │ │ │ │ "machineri": [32, 51, 53], │ │ │ │ │ "maciek": 53, │ │ │ │ │ "maco": [3, 53], │ │ │ │ │ "madadi": 53, │ │ │ │ │ @@ -7631,35 +7638,33 @@ │ │ │ │ │ "mybackendarrai": 27, │ │ │ │ │ "mybackendentrypoint": 27, │ │ │ │ │ "mybind": 33, │ │ │ │ │ "myduckarrai": 25, │ │ │ │ │ "mypi": [3, 18, 53], │ │ │ │ │ "myrom": 7, │ │ │ │ │ "m\u00fchlbauer": 53, │ │ │ │ │ - "m\u0117\u0175\u00b2\u0109": 50, │ │ │ │ │ "n": [3, 8, 14, 16, 18, 20, 28, 30, 33, 35, 36, 37, 38, 42, 43, 44, 46, 50, 51, 52, 53], │ │ │ │ │ "n_peak": 36, │ │ │ │ │ "name": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 25, 26, 27, 28, 30, 32, 33, 35, 37, 38, 39, 40, 43, 44, 46, 47, 48, 49, 50, 51, 52], │ │ │ │ │ "name_dict": 47, │ │ │ │ │ "namedarrai": [5, 18, 24, 53], │ │ │ │ │ "nameerror": [6, 7, 8, 9, 11, 12, 13, 25, 39, 42, 43, 44, 47, 48, 50], │ │ │ │ │ "namespac": [16, 24, 26, 50, 53], │ │ │ │ │ "nan": [14, 16, 18, 22, 35, 36, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53], │ │ │ │ │ "nanfirst": 24, │ │ │ │ │ - "nanj": 50, │ │ │ │ │ "nanmean": [50, 53], │ │ │ │ │ "nanmedian": 53, │ │ │ │ │ "nanosecond": [43, 51, 53], │ │ │ │ │ "nanquantil": 53, │ │ │ │ │ "nansum": 36, │ │ │ │ │ "narr": 53, │ │ │ │ │ "narrai": 16, │ │ │ │ │ "nasa": 44, │ │ │ │ │ "nascent": [48, 53], │ │ │ │ │ - "nat": 53, │ │ │ │ │ + "nat": [50, 53], │ │ │ │ │ "nathan": 53, │ │ │ │ │ "nativ": [16, 26, 36, 44, 47, 51, 53], │ │ │ │ │ "nattino": 53, │ │ │ │ │ "natur": [6, 16, 20, 24, 30, 37, 38, 42, 48, 53], │ │ │ │ │ "natural_earth": 6, │ │ │ │ │ "naturalearthfeatur": [6, 7], │ │ │ │ │ "navig": [3, 21, 53], │ │ │ │ │ @@ -8919,14 +8924,15 @@ │ │ │ │ │ "python3": [3, 6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48, 50], │ │ │ │ │ "python_vers": 18, │ │ │ │ │ "pythonpath": 3, │ │ │ │ │ "pytorch": 33, │ │ │ │ │ "pyupgrad": 53, │ │ │ │ │ "pyvista": 5, │ │ │ │ │ "pyxpcm": 5, │ │ │ │ │ + "p\u017cqe\u0129": 50, │ │ │ │ │ "q": [36, 53], │ │ │ │ │ "qe": 53, │ │ │ │ │ "quack": 39, │ │ │ │ │ "quadmesh": [19, 47, 53], │ │ │ │ │ "quadrat": [43, 53], │ │ │ │ │ "qualiti": 3, │ │ │ │ │ "quantil": [36, 53], │ │ │ │ │ @@ -9212,16 +9218,15 @@ │ │ │ │ │ "runtim": [24, 53], │ │ │ │ │ "runtimewarn": [44, 53], │ │ │ │ │ "russel": 53, │ │ │ │ │ "russotto": 53, │ │ │ │ │ "rutger": 53, │ │ │ │ │ "ryan": [12, 34, 53], │ │ │ │ │ "s1": [44, 53], │ │ │ │ │ - "s11": 50, │ │ │ │ │ - "s2": 39, │ │ │ │ │ + "s2": [39, 50], │ │ │ │ │ "s3": [44, 53], │ │ │ │ │ "s_da": 39, │ │ │ │ │ "s_rho": 7, │ │ │ │ │ "saboo": 53, │ │ │ │ │ "safe": [27, 43, 44, 53], │ │ │ │ │ "safe_chunk": [44, 53], │ │ │ │ │ "safer": 53, │ │ │ │ │ @@ -9297,15 +9302,15 @@ │ │ │ │ │ "seamlessli": [3, 39], │ │ │ │ │ "search": [3, 44, 51], │ │ │ │ │ "searchstrategi": 50, │ │ │ │ │ "season": [14, 15, 40, 51, 52, 53], │ │ │ │ │ "season_mean": 11, │ │ │ │ │ "sebastian": 53, │ │ │ │ │ "sec": 19, │ │ │ │ │ - "second": [3, 8, 13, 19, 27, 32, 35, 38, 39, 42, 44, 46, 51, 52, 53], │ │ │ │ │ + "second": [3, 6, 7, 8, 9, 10, 11, 12, 13, 19, 27, 30, 32, 35, 38, 39, 42, 43, 44, 46, 47, 48, 51, 52, 53], │ │ │ │ │ "section": [5, 7, 16, 18, 29, 30, 33, 40, 44, 46, 47, 50, 51, 52, 53], │ │ │ │ │ "see": [1, 3, 5, 7, 8, 13, 16, 18, 19, 20, 22, 24, 25, 26, 27, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53], │ │ │ │ │ "seed": [14, 38, 47], │ │ │ │ │ "seek": 27, │ │ │ │ │ "seem": [7, 8, 47, 53], │ │ │ │ │ "seen": [36, 40, 50], │ │ │ │ │ "segment": 53, │ │ │ │ │ @@ -9934,23 +9939,24 @@ │ │ │ │ │ "typehint": 53, │ │ │ │ │ "typic": [3, 7, 14, 16, 30, 33, 37, 44, 49], │ │ │ │ │ "typing_extens": 53, │ │ │ │ │ "typo": [3, 23, 53], │ │ │ │ │ "tyre": 53, │ │ │ │ │ "u": [3, 8, 12, 19, 21, 24, 26, 31, 33, 42, 43, 44, 47, 48, 53], │ │ │ │ │ "u1": [19, 35, 36, 40, 42, 43, 44, 46, 48, 53], │ │ │ │ │ - "u2": [14, 36, 38, 42], │ │ │ │ │ + "u2": [14, 36, 38, 42, 50], │ │ │ │ │ "u3": [51, 52, 53], │ │ │ │ │ "u4": 53, │ │ │ │ │ "u5": 47, │ │ │ │ │ "u7": 36, │ │ │ │ │ "u8": [36, 38], │ │ │ │ │ "ubiqu": 16, │ │ │ │ │ "ufunc": [8, 24, 36, 37, 39, 53], │ │ │ │ │ - "uint8": [39, 44], │ │ │ │ │ + "uint32": 50, │ │ │ │ │ + "uint8": [39, 44, 50], │ │ │ │ │ "uk": [6, 16, 44], │ │ │ │ │ "ulrich": 53, │ │ │ │ │ "ultim": 24, │ │ │ │ │ "unabl": 16, │ │ │ │ │ "unaddress": 53, │ │ │ │ │ "unalign": 53, │ │ │ │ │ "unambigu": [38, 53], │ │ │ │ │ @@ -10262,61 +10268,58 @@ │ │ │ │ │ "write_empty_chunk": [44, 53], │ │ │ │ │ "writer": 44, │ │ │ │ │ "written": [3, 18, 24, 29, 36, 37, 38, 44, 50, 53], │ │ │ │ │ "wrong": [3, 53], │ │ │ │ │ "wrongli": 53, │ │ │ │ │ "wrote": 35, │ │ │ │ │ "www": [7, 18], │ │ │ │ │ - "w\u017c\u00ec": 50, │ │ │ │ │ "x": [3, 5, 7, 8, 12, 13, 14, 18, 19, 20, 24, 25, 27, 28, 30, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 48, 49, 50, 52, 53], │ │ │ │ │ - "x01n": 50, │ │ │ │ │ - "x0f": 50, │ │ │ │ │ "x0pahjgysxk": 18, │ │ │ │ │ "x1": 35, │ │ │ │ │ - "x1f": 50, │ │ │ │ │ "x2": [35, 39], │ │ │ │ │ "x27": 14, │ │ │ │ │ "x64": 53, │ │ │ │ │ - "x8akp": 50, │ │ │ │ │ - "x8d": 50, │ │ │ │ │ + "x82": 50, │ │ │ │ │ "x_and_i": 36, │ │ │ │ │ "x_bin": 40, │ │ │ │ │ "x_bin_label": 40, │ │ │ │ │ "x_chunk": 24, │ │ │ │ │ "x_coars": 48, │ │ │ │ │ "x_fine": 48, │ │ │ │ │ "x_matrix_rank": 36, │ │ │ │ │ "x_onli": 36, │ │ │ │ │ "x_rank": 37, │ │ │ │ │ "x_singular_valu": 36, │ │ │ │ │ "x_win": 36, │ │ │ │ │ + "xa9i": 50, │ │ │ │ │ "xalpha": 36, │ │ │ │ │ "xalpha1": 36, │ │ │ │ │ "xarrai": [1, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 21, 22, 24, 25, 27, 28, 30, 32, 33, 34, 35, 36, 38, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 52, 53], │ │ │ │ │ "xarray_einstat": 5, │ │ │ │ │ "xarray_extra": [5, 44], │ │ │ │ │ "xarray_obj": 26, │ │ │ │ │ "xarray_object": 8, │ │ │ │ │ "xarray_tutorial_data": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 42, 43, 44, 47, 48], │ │ │ │ │ "xarray_v0_8_0": 16, │ │ │ │ │ "xbatcher": 5, │ │ │ │ │ - "xbe": 50, │ │ │ │ │ "xbpch": 5, │ │ │ │ │ "xc": [12, 36, 44], │ │ │ │ │ "xc0": 36, │ │ │ │ │ "xc4": 50, │ │ │ │ │ - "xca": 50, │ │ │ │ │ "xcdat": [5, 53], │ │ │ │ │ + "xcf": 50, │ │ │ │ │ "xclim": 5, │ │ │ │ │ "xdev": 34, │ │ │ │ │ "xdist": [3, 18, 53], │ │ │ │ │ + "xe4": 50, │ │ │ │ │ "xeof": 5, │ │ │ │ │ "xesmf": [5, 12], │ │ │ │ │ - "xf5": 50, │ │ │ │ │ "xfail": [3, 53], │ │ │ │ │ + "xfb": 50, │ │ │ │ │ + "xfcco": 50, │ │ │ │ │ "xframe": 5, │ │ │ │ │ "xgcm": [5, 7], │ │ │ │ │ "xi": 8, │ │ │ │ │ "xi_rho": 7, │ │ │ │ │ "xianxiang": 53, │ │ │ │ │ "xin": 53, │ │ │ │ │ "xincreas": [47, 53], │ │ │ │ │ @@ -10415,22 +10418,49 @@ │ │ │ │ │ "zo_rho": 7, │ │ │ │ │ "zonal": [5, 47], │ │ │ │ │ "zoom": 4, │ │ │ │ │ "zstd": 44, │ │ │ │ │ "zstore": 44, │ │ │ │ │ "zuckerberg": 53, │ │ │ │ │ "z\u00fchlke": 53, │ │ │ │ │ - "\u00f1\u0144\u0125p\u0125": 50, │ │ │ │ │ - "\u00f8": 50, │ │ │ │ │ - "\u010d\u00e4\u0105\u00f1\u00f5": 50, │ │ │ │ │ - "\u010d\u0135\u010d\u00fc\u00e1": 50, │ │ │ │ │ - "\u0125\u017c\u017e\u00f2\u015b": 50, │ │ │ │ │ - "\u017a": 50, │ │ │ │ │ + "\u00b3\u0169": 50, │ │ │ │ │ + "\u00b9\u017e\u017c\u017f\u00b5": 50, │ │ │ │ │ + "\u00bc": 50, │ │ │ │ │ + "\u00bd\u00fba\u00e3": 50, │ │ │ │ │ + "\u00bext\u017c\u0138": 50, │ │ │ │ │ + "\u00e0\u016f\u00ee\u0105z": 50, │ │ │ │ │ + "\u00e2\u0146\u00b3\u0111\u0159": 50, │ │ │ │ │ + "\u00e5o": 50, │ │ │ │ │ + "\u00f1l": 50, │ │ │ │ │ + "\u00f6\u00f6\u017e\u0138\u017f": 50, │ │ │ │ │ + "\u00f8\u017f\u00fd": 50, │ │ │ │ │ + "\u00f9": 50, │ │ │ │ │ + "\u00fc\u00f5\u00fb\u015d\u0171": 50, │ │ │ │ │ + "\u01035\u014de": 50, │ │ │ │ │ + "\u0123\u017f": 50, │ │ │ │ │ + "\u0127": 50, │ │ │ │ │ + "\u0127\u017e\u0133": 50, │ │ │ │ │ + "\u012d\u00f5\u017e\u0137": 50, │ │ │ │ │ + "\u0137": 50, │ │ │ │ │ + "\u013c": 50, │ │ │ │ │ + "\u0140\u0165\u00fa\u017c4": 50, │ │ │ │ │ + "\u0142": 50, │ │ │ │ │ + "\u0148": 50, │ │ │ │ │ + "\u0148\u0103\u00e8\u00e1": 50, │ │ │ │ │ + "\u014ba\u0105": 50, │ │ │ │ │ + "\u015b\u0177\u017f": 50, │ │ │ │ │ + "\u015f\u00e7": 50, │ │ │ │ │ + "\u016bv\u0165\u017c": 50, │ │ │ │ │ + "\u016d": 50, │ │ │ │ │ + "\u017c7\u0137\u016b\u00f5": 50, │ │ │ │ │ + "\u017c\u017c\u00df\u011d\u013c": 50, │ │ │ │ │ + "\u017c\u017e": 50, │ │ │ │ │ "\u017e": 50, │ │ │ │ │ - "\u017f0\u00b9\u0163d": 50 │ │ │ │ │ + "\u017e\u0121\u00eav\u017c": 50, │ │ │ │ │ + "\u017e\u015d\u012f\u00eft": 50 │ │ │ │ │ }, │ │ │ │ │ "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", "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", "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, 53], │ │ │ │ │ "0": 53, │ │ │ │ │ "01": 53, │ │ │ │ │ "02": 53, │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/dask.html │ │ │ │ @@ -676,16 +676,16 @@ │ │ │ │ # or distributed.progress when using the distributed scheduler │ │ │ │ In [6]: delayed_obj = ds.to_netcdf("manipulated-example-data.nc", compute=False) │ │ │ │ │ │ │ │ In [7]: with ProgressBar(): │ │ │ │ ...: results = delayed_obj.compute() │ │ │ │ ...: │ │ │ │ │ │ │ │ -[ ] | 0% Completed | 10.47 ms │ │ │ │ -[########################################] | 100% Completed | 114.49 ms │ │ │ │ +[ ] | 0% Completed | 10.40 ms │ │ │ │ +[########################################] | 100% Completed | 118.29 ms │ │ │ │ │ │ │ │ │ │ │ │
    │ │ │ │

    Note

    │ │ │ │

    When using Dask’s distributed scheduler to write NETCDF4 files, │ │ │ │ it may be necessary to set the environment variable HDF5_USE_FILE_LOCKING=FALSE │ │ │ │ to avoid competing locks within the HDF5 SWMR file locking scheme. Note that │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -163,16 +163,16 @@ │ │ │ │ │ In [6]: delayed_obj = ds.to_netcdf("manipulated-example-data.nc", │ │ │ │ │ compute=False) │ │ │ │ │ │ │ │ │ │ In [7]: with ProgressBar(): │ │ │ │ │ ...: results = delayed_obj.compute() │ │ │ │ │ ...: │ │ │ │ │ │ │ │ │ │ -[ ] | 0% Completed | 10.47 ms │ │ │ │ │ -[########################################] | 100% Completed | 114.49 ms │ │ │ │ │ +[ ] | 0% Completed | 10.40 ms │ │ │ │ │ +[########################################] | 100% Completed | 118.29 ms │ │ │ │ │ Note │ │ │ │ │ When using Dask’s distributed scheduler to write NETCDF4 files, it may be │ │ │ │ │ necessary to set the environment variableHDF5_USE_FILE_LOCKING=FALSEto avoid │ │ │ │ │ competing locks within the HDF5 SWMR file locking scheme. Note that writing │ │ │ │ │ netCDF files with Dask’s distributed scheduler is only supported for │ │ │ │ │ thenetcdf4backend. │ │ │ │ │ A dataset can also be converted to a Dask DataFrame using to_dask_dataframe(). │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/data-structures.html │ │ │ │ @@ -1273,18 +1273,18 @@ │ │ │ │ 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]: [<matplotlib.lines.Line2D at 0xffff64c0b3e0>]
    │ │ │ │ +Out[64]: [<matplotlib.lines.Line2D at 0xffff65d27410>]
    │ │ │ │  
    │ │ │ │  In [65]: (ds.temperature.sel(loc=0).pipe(lambda x: 2 * x).mean("instrument").pipe(plt.plot))
    │ │ │ │ -Out[65]: [<matplotlib.lines.Line2D at 0xffff64c7ecc0>]
    │ │ │ │ +Out[65]: [<matplotlib.lines.Line2D at 0xffff65d2c470>]
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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 {} │ │ │ │ │ @@ -666,19 +666,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/indexing.html │ │ │ │ @@ -1264,15 +1264,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ # 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") │ │ │ │ │ │ │ │ # Retrieve data at the grid cells nearest to the target latitudes and longitudes │ │ │ │ @@ -1409,15 +1409,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ # add an empty 2D dataarray │ │ │ │ In [58]: ds["empty"] = xr.full_like(ds.air.mean("time"), fill_value=0) │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ Cell In[58], line 1 │ │ │ │ ----> 1 ds["empty"] = xr.full_like(ds.air.mean("time"), fill_value=0) │ │ │ │ @@ -1973,15 +1973,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ # set all values to 0 │ │ │ │ In [84]: ds = xr.zeros_like(ds_org) │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ NameError Traceback (most recent call last) │ │ │ │ Cell In[84], line 1 │ │ │ │ ----> 1 ds = xr.zeros_like(ds_org) │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -618,15 +618,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ # 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") │ │ │ │ │ │ │ │ │ │ @@ -774,15 +774,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ # add an empty 2D dataarray │ │ │ │ │ In [58]: ds["empty"] = xr.full_like(ds.air.mean("time"), fill_value=0) │ │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ │ Cell In[58], line 1 │ │ │ │ │ @@ -1404,15 +1404,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ # set all values to 0 │ │ │ │ │ In [84]: ds = xr.zeros_like(ds_org) │ │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ │ NameError Traceback (most recent call last) │ │ │ │ │ Cell In[84], line 1 │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/interpolation.html │ │ │ │ @@ -728,24 +728,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 0xffff90088bf0>] │ │ │ │ +Out[17]: [<matplotlib.lines.Line2D at 0xffff8e4392b0>] │ │ │ │ │ │ │ │ In [18]: da.interp(x=np.linspace(0, 1, 100)).plot.line(label="linear (default)") │ │ │ │ -Out[18]: [<matplotlib.lines.Line2D at 0xffff8f317650>] │ │ │ │ +Out[18]: [<matplotlib.lines.Line2D at 0xffff7fcb0440>] │ │ │ │ │ │ │ │ In [19]: da.interp(x=np.linspace(0, 1, 100), method="cubic").plot.line(label="cubic") │ │ │ │ -Out[19]: [<matplotlib.lines.Line2D at 0xffff8f3ffb90>] │ │ │ │ +Out[19]: [<matplotlib.lines.Line2D at 0xffff7fcedca0>] │ │ │ │ │ │ │ │ In [20]: plt.legend() │ │ │ │ -Out[20]: <matplotlib.legend.Legend at 0xffff8f316f00> │ │ │ │ +Out[20]: <matplotlib.legend.Legend at 0xffff7e3423f0> │ │ │ │

    │ │ │ │ │ │ │ │ _build/html/_static/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})
    │ │ │ │ @@ -984,15 +984,15 @@
    │ │ │ │  File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env)
    │ │ │ │      272 if env is not None:
    │ │ │ │      273     message.append(
    │ │ │ │      274         f"Use environment variable '{env}' to specify a different location."
    │ │ │ │      275     )
    │ │ │ │  --> 276 raise PermissionError(" ".join(message)) from error
    │ │ │ │  
    │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.
    │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.
    │ │ │ │  
    │ │ │ │  In [45]: fig, axes = plt.subplots(ncols=2, figsize=(10, 4))
    │ │ │ │  
    │ │ │ │  In [46]: ds.air.plot(ax=axes[0])
    │ │ │ │  ---------------------------------------------------------------------------
    │ │ │ │  AttributeError                            Traceback (most recent call last)
    │ │ │ │  Cell In[46], line 1
    │ │ │ │ @@ -1152,15 +1152,15 @@
    │ │ │ │  --> 797         raise ValueError(
    │ │ │ │      798             f"Dimensions {invalid} do not exist. Expected one or more of {dims}"
    │ │ │ │      799         )
    │ │ │ │      801     return indexers
    │ │ │ │      803 elif missing_dims == "warn":
    │ │ │ │      804     # don't modify input
    │ │ │ │  
    │ │ │ │ -ValueError: Dimensions {'lat', 'lon'} do not exist. Expected one or more of FrozenMappingWarningOnValuesAccess({'x': 3, 'y': 4})
    │ │ │ │ +ValueError: Dimensions {'lon', 'lat'} do not exist. Expected one or more of FrozenMappingWarningOnValuesAccess({'x': 3, 'y': 4})
    │ │ │ │  
    │ │ │ │  In [63]: dsi.air.plot(ax=axes[1])
    │ │ │ │  ---------------------------------------------------------------------------
    │ │ │ │  NameError                                 Traceback (most recent call last)
    │ │ │ │  Cell In[63], line 1
    │ │ │ │  ----> 1 dsi.air.plot(ax=axes[1])
    │ │ │ │ ├── html2text {}
    │ │ │ │ │ @@ -227,26 +227,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]: 
    │ │ │ │ │  _[___b_u_i_l_d_/_h_t_m_l_/___s_t_a_t_i_c_/_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.   ,
    │ │ │ │ │ @@ -469,15 +469,15 @@
    │ │ │ │ │      273     message.append(
    │ │ │ │ │      274         f"Use environment variable '{env}' to specify a different
    │ │ │ │ │  location."
    │ │ │ │ │      275     )
    │ │ │ │ │  --> 276 raise PermissionError(" ".join(message)) from error
    │ │ │ │ │  
    │ │ │ │ │  PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not
    │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/
    │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/
    │ │ │ │ │  xarray_tutorial_data'. Will not be able to download data files.
    │ │ │ │ │  
    │ │ │ │ │  In [45]: fig, axes = plt.subplots(ncols=2, figsize=(10, 4))
    │ │ │ │ │  
    │ │ │ │ │  In [46]: ds.air.plot(ax=axes[0])
    │ │ │ │ │  ---------------------------------------------------------------------------
    │ │ │ │ │  AttributeError                            Traceback (most recent call last)
    │ │ │ │ │ @@ -650,15 +650,15 @@
    │ │ │ │ │      798             f"Dimensions {invalid} do not exist. Expected one or more
    │ │ │ │ │  of {dims}"
    │ │ │ │ │      799         )
    │ │ │ │ │      801     return indexers
    │ │ │ │ │      803 elif missing_dims == "warn":
    │ │ │ │ │      804     # don't modify input
    │ │ │ │ │  
    │ │ │ │ │ -ValueError: Dimensions {'lat', 'lon'} do not exist. Expected one or more of
    │ │ │ │ │ +ValueError: Dimensions {'lon', 'lat'} do not exist. Expected one or more of
    │ │ │ │ │  FrozenMappingWarningOnValuesAccess({'x': 3, 'y': 4})
    │ │ │ │ │  
    │ │ │ │ │  In [63]: dsi.air.plot(ax=axes[1])
    │ │ │ │ │  ---------------------------------------------------------------------------
    │ │ │ │ │  NameError                                 Traceback (most recent call last)
    │ │ │ │ │  Cell In[63], line 1
    │ │ │ │ │  ----> 1 dsi.air.plot(ax=axes[1])
    │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/io.html
    │ │ │ │ @@ -1296,15 +1296,15 @@
    │ │ │ │     ....:         "y": pd.date_range("2000-01-01", periods=5),
    │ │ │ │     ....:         "z": ("x", list("abcd")),
    │ │ │ │     ....:     },
    │ │ │ │     ....: )
    │ │ │ │     ....: 
    │ │ │ │  
    │ │ │ │  In [25]: ds.to_zarr("path/to/directory.zarr")
    │ │ │ │ -Out[25]: <xarray.backends.zarr.ZarrStore at 0xffff613773c0>
    │ │ │ │ +Out[25]: <xarray.backends.zarr.ZarrStore at 0xffff63817440>
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    (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().

    │ │ │ │ @@ -1390,36 +1390,36 @@ │ │ │ │ │ │ │ │ In [30]: ds = xr.Dataset({"foo": ("x", dummies)}, coords={"x": np.arange(30)}) │ │ │ │ │ │ │ │ In [31]: path = "path/to/directory.zarr" │ │ │ │ │ │ │ │ # Now we write the metadata without computing any array values │ │ │ │ In [32]: ds.to_zarr(path, compute=False) │ │ │ │ -Out[32]: Delayed('_finalize_store-e98b7ab4-d0d1-4c7a-b970-de36da9807f8') │ │ │ │ +Out[32]: Delayed('_finalize_store-5410f0ea-a603-4390-b1ea-38275db69ad8') │ │ │ │ │ │ │ │ │ │ │ │

    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 [33]: ds = xr.Dataset({"foo": ("x", np.arange(30))}, coords={"x": np.arange(30)})
    │ │ │ │  
    │ │ │ │  # Any of the following region specifications are valid
    │ │ │ │  In [34]: ds.isel(x=slice(0, 10)).to_zarr(path, region="auto")
    │ │ │ │ -Out[34]: <xarray.backends.zarr.ZarrStore at 0xffff613c90c0>
    │ │ │ │ +Out[34]: <xarray.backends.zarr.ZarrStore at 0xffff62f2d140>
    │ │ │ │  
    │ │ │ │  In [35]: ds.isel(x=slice(10, 20)).to_zarr(path, region={"x": "auto"})
    │ │ │ │ -Out[35]: <xarray.backends.zarr.ZarrStore at 0xffff6139fe40>
    │ │ │ │ +Out[35]: <xarray.backends.zarr.ZarrStore at 0xffff62effec0>
    │ │ │ │  
    │ │ │ │  In [36]: ds.isel(x=slice(20, 30)).to_zarr(path, region={"x": slice(20, 30)})
    │ │ │ │ -Out[36]: <xarray.backends.zarr.ZarrStore at 0xffff6139d8c0>
    │ │ │ │ +Out[36]: <xarray.backends.zarr.ZarrStore at 0xffff62efd840>
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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) │ │ │ │ @@ -1433,15 +1433,15 @@ │ │ │ │

    These options can be passed to the to_zarr method as variable encoding. │ │ │ │ For example:

    │ │ │ │
    In [37]: import zarr
    │ │ │ │  
    │ │ │ │  In [38]: compressor = zarr.Blosc(cname="zstd", clevel=3, shuffle=2)
    │ │ │ │  
    │ │ │ │  In [39]: ds.to_zarr("foo.zarr", encoding={"foo": {"compressor": compressor}})
    │ │ │ │ -Out[39]: <xarray.backends.zarr.ZarrStore at 0xffff613cb140>
    │ │ │ │ +Out[39]: <xarray.backends.zarr.ZarrStore at 0xffff62f2f040>
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    │ │ │ │

    Note

    │ │ │ │

    Not all native zarr compression and filtering options have been tested with │ │ │ │ xarray.

    │ │ │ │
    │ │ │ │ @@ -1480,28 +1480,28 @@ │ │ │ │ ....: "y": [1, 2, 3, 4, 5], │ │ │ │ ....: "t": pd.date_range("2001-01-01", periods=2), │ │ │ │ ....: }, │ │ │ │ ....: ) │ │ │ │ ....: │ │ │ │ │ │ │ │ In [41]: ds1.to_zarr("path/to/directory.zarr") │ │ │ │ -Out[41]: <xarray.backends.zarr.ZarrStore at 0xffff67d565c0> │ │ │ │ +Out[41]: <xarray.backends.zarr.ZarrStore at 0xffff695e25c0> │ │ │ │ │ │ │ │ In [42]: 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 [43]: ds2.to_zarr("path/to/directory.zarr", append_dim="t") │ │ │ │ -Out[43]: <xarray.backends.zarr.ZarrStore at 0xffff64dcfec0> │ │ │ │ +Out[43]: <xarray.backends.zarr.ZarrStore at 0xffff65ce1340> │ │ │ │ │ │ │ │ │ │ │ │
    │ │ │ │
    │ │ │ │

    Specifying chunks in a zarr store

    │ │ │ │

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

    │ │ │ │
      │ │ │ │ @@ -1579,15 +1579,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ In [45]: ds["Tair"] = ds["Tair"].chunk({"x": 100, "y": 100}) │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ KeyError Traceback (most recent call last) │ │ │ │ /build/reproducible-path/python-xarray-2024.09.0/xarray/core/dataset.py in ?(self, name) │ │ │ │ 1482 variable = self._variables[name] │ │ │ │ 1483 except KeyError: │ │ │ │ @@ -1647,15 +1647,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 [47]: ds.to_zarr("path/to/directory.zarr", mode="w")
      │ │ │ │ -Out[47]: <xarray.backends.zarr.ZarrStore at 0xffff614fed40>
      │ │ │ │ +Out[47]: <xarray.backends.zarr.ZarrStore at 0xffff63ea6bc0>
      │ │ │ │  
      │ │ │ │  In [48]: ! ls -R path/to/directory.zarr
      │ │ │ │  path/to/directory.zarr:
      │ │ │ │  foo  x
      │ │ │ │  
      │ │ │ │  path/to/directory.zarr/foo:
      │ │ │ │  0
      │ │ │ │ ├── html2text {}
      │ │ │ │ │ @@ -604,15 +604,15 @@
      │ │ │ │ │     ....:         "y": pd.date_range("2000-01-01", periods=5),
      │ │ │ │ │     ....:         "z": ("x", list("abcd")),
      │ │ │ │ │     ....:     },
      │ │ │ │ │     ....: )
      │ │ │ │ │     ....:
      │ │ │ │ │  
      │ │ │ │ │  In [25]: ds.to_zarr("path/to/directory.zarr")
      │ │ │ │ │ -Out[25]: 
      │ │ │ │ │ +Out[25]: 
      │ │ │ │ │  (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 withengine=’zarr’. Similar
      │ │ │ │ │ @@ -684,35 +684,35 @@
      │ │ │ │ │  
      │ │ │ │ │  In [30]: ds = xr.Dataset({"foo": ("x", dummies)}, coords={"x": np.arange(30)})
      │ │ │ │ │  
      │ │ │ │ │  In [31]: path = "path/to/directory.zarr"
      │ │ │ │ │  
      │ │ │ │ │  # Now we write the metadata without computing any array values
      │ │ │ │ │  In [32]: ds.to_zarr(path, compute=False)
      │ │ │ │ │ -Out[32]: Delayed('_finalize_store-e98b7ab4-d0d1-4c7a-b970-de36da9807f8')
      │ │ │ │ │ +Out[32]: Delayed('_finalize_store-5410f0ea-a603-4390-b1ea-38275db69ad8')
      │ │ │ │ │  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 [33]: ds = xr.Dataset({"foo": ("x", np.arange(30))}, coords={"x": np.arange
      │ │ │ │ │  (30)})
      │ │ │ │ │  
      │ │ │ │ │  # Any of the following region specifications are valid
      │ │ │ │ │  In [34]: ds.isel(x=slice(0, 10)).to_zarr(path, region="auto")
      │ │ │ │ │ -Out[34]: 
      │ │ │ │ │ +Out[34]: 
      │ │ │ │ │  
      │ │ │ │ │  In [35]: ds.isel(x=slice(10, 20)).to_zarr(path, region={"x": "auto"})
      │ │ │ │ │ -Out[35]: 
      │ │ │ │ │ +Out[35]: 
      │ │ │ │ │  
      │ │ │ │ │  In [36]: ds.isel(x=slice(20, 30)).to_zarr(path, region={"x": slice(20, 30)})
      │ │ │ │ │ -Out[36]: 
      │ │ │ │ │ +Out[36]: 
      │ │ │ │ │  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_?¶ ********
      │ │ │ │ │ @@ -721,15 +721,15 @@
      │ │ │ │ │  These options can be passed to the to_zarr method as variable encoding. For
      │ │ │ │ │  example:
      │ │ │ │ │  In [37]: import zarr
      │ │ │ │ │  
      │ │ │ │ │  In [38]: compressor = zarr.Blosc(cname="zstd", clevel=3, shuffle=2)
      │ │ │ │ │  
      │ │ │ │ │  In [39]: ds.to_zarr("foo.zarr", encoding={"foo": {"compressor": compressor}})
      │ │ │ │ │ -Out[39]: 
      │ │ │ │ │ +Out[39]: 
      │ │ │ │ │  Note
      │ │ │ │ │  Not all native zarr compression and filtering options have been tested with
      │ │ │ │ │  xarray.
      │ │ │ │ │  ******** MMooddiiffyyiinngg eexxiissttiinngg ZZaarrrr ssttoorreess_?¶ ********
      │ │ │ │ │  Xarray supports several ways of incrementally writing variables to a Zarr
      │ │ │ │ │  store. These options are useful for scenarios when it is infeasible or
      │ │ │ │ │  undesirable to write your entire dataset at once.
      │ │ │ │ │ @@ -755,28 +755,28 @@
      │ │ │ │ │     ....:         "y": [1, 2, 3, 4, 5],
      │ │ │ │ │     ....:         "t": pd.date_range("2001-01-01", periods=2),
      │ │ │ │ │     ....:     },
      │ │ │ │ │     ....: )
      │ │ │ │ │     ....:
      │ │ │ │ │  
      │ │ │ │ │  In [41]: ds1.to_zarr("path/to/directory.zarr")
      │ │ │ │ │ -Out[41]: 
      │ │ │ │ │ +Out[41]: 
      │ │ │ │ │  
      │ │ │ │ │  In [42]: 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 [43]: ds2.to_zarr("path/to/directory.zarr", append_dim="t")
      │ │ │ │ │ -Out[43]: 
      │ │ │ │ │ +Out[43]: 
      │ │ │ │ │  ******** 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;
      │ │ │ │ │ @@ -854,15 +854,15 @@
      │ │ │ │ │      273     message.append(
      │ │ │ │ │      274         f"Use environment variable '{env}' to specify a different
      │ │ │ │ │  location."
      │ │ │ │ │      275     )
      │ │ │ │ │  --> 276 raise PermissionError(" ".join(message)) from error
      │ │ │ │ │  
      │ │ │ │ │  PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not
      │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/
      │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/
      │ │ │ │ │  xarray_tutorial_data'. Will not be able to download data files.
      │ │ │ │ │  
      │ │ │ │ │  In [45]: ds["Tair"] = ds["Tair"].chunk({"x": 100, "y": 100})
      │ │ │ │ │  ---------------------------------------------------------------------------
      │ │ │ │ │  KeyError                                  Traceback (most recent call last)
      │ │ │ │ │  /build/reproducible-path/python-xarray-2024.09.0/xarray/core/dataset.py in ?
      │ │ │ │ │  (self, name)
      │ │ │ │ │ @@ -933,15 +933,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 [47]: ds.to_zarr("path/to/directory.zarr", mode="w")
      │ │ │ │ │ -Out[47]: 
      │ │ │ │ │ +Out[47]: 
      │ │ │ │ │  
      │ │ │ │ │  In [48]: ! ls -R path/to/directory.zarr
      │ │ │ │ │  path/to/directory.zarr:
      │ │ │ │ │  foo  x
      │ │ │ │ │  
      │ │ │ │ │  path/to/directory.zarr/foo:
      │ │ │ │ │  0
      │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/plotting.html
      │ │ │ │ @@ -810,15 +810,15 @@
      │ │ │ │  File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env)
      │ │ │ │      272 if env is not None:
      │ │ │ │      273     message.append(
      │ │ │ │      274         f"Use environment variable '{env}' to specify a different location."
      │ │ │ │      275     )
      │ │ │ │  --> 276 raise PermissionError(" ".join(message)) from error
      │ │ │ │  
      │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files.
      │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files.
      │ │ │ │  
      │ │ │ │  In [6]: airtemps
      │ │ │ │  ---------------------------------------------------------------------------
      │ │ │ │  NameError                                 Traceback (most recent call last)
      │ │ │ │  Cell In[6], line 1
      │ │ │ │  ----> 1 airtemps
      │ │ │ │  
      │ │ │ │ @@ -1357,15 +1357,15 @@
      │ │ │ │      219 
      │ │ │ │      220     ref_name, var_name = split_key
      │ │ │ │      221     ref_var = variables[ref_name]
      │ │ │ │  
      │ │ │ │  KeyError: 'lat'
      │ │ │ │  
      │ │ │ │  In [51]: b.plot()
      │ │ │ │ -Out[51]: [<matplotlib.lines.Line2D at 0xffffa18df080>]
      │ │ │ │ +Out[51]: [<matplotlib.lines.Line2D at 0xffff65b84050>]
      │ │ │ │  
      │ │ │ │
      │ │ │ │ _build/html/_static/plotting_nonuniform_coords.png │ │ │ │ │ │ │ │
    │ │ │ │
    │ │ │ │

    Other types of plot

    │ │ │ │ @@ -1932,104 +1932,104 @@ │ │ │ │ * 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 0xffffa16ee0c0> │ │ │ │ +Out[99]: <matplotlib.collections.PathCollection at 0xffff9f1cb080> │ │ │ │ │ │ │ │ │ │ │ │ _build/html/_static/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 0xffffa1745e80>
    │ │ │ │ +Out[100]: <matplotlib.collections.PathCollection at 0xffff9f0c12e0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa1739430>
    │ │ │ │ +Out[101]: <matplotlib.collections.PathCollection at 0xffff9f0ce840>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa1747e90>
    │ │ │ │ +Out[102]: <matplotlib.collections.PathCollection at 0xffff9f27f8f0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa15c3860>
    │ │ │ │ +Out[103]: <matplotlib.collections.PathCollection at 0xffff9f0c17f0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa1588bf0>
    │ │ │ │ +Out[104]: <matplotlib.collections.PathCollection at 0xffff9f0cf4d0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa1613d40>
    │ │ │ │ +Out[105]: <matplotlib.collections.PathCollection at 0xffff9f465700>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa154a3f0>
    │ │ │ │ +Out[106]: <mpl_toolkits.mplot3d.art3d.Path3DCollection at 0xffff9f043a70>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa154a6f0>
    │ │ │ │ +Out[107]: <xarray.plot.facetgrid.FacetGrid at 0xffff9eed7d10>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa10320c0>
    │ │ │ │ +Out[108]: <xarray.plot.facetgrid.FacetGrid at 0xffff9f0422d0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa1296780>
    │ │ │ │ +Out[109]: <matplotlib.quiver.Quiver at 0xffff9f4512e0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffff632be5d0>
    │ │ │ │ +Out[110]: <xarray.plot.facetgrid.FacetGrid at 0xffff654f4d40>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa0de52b0>
    │ │ │ │ +Out[111]: <matplotlib.collections.LineCollection at 0xffff9ea0d490>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/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 0xffffa0bb55b0>
    │ │ │ │ +Out[112]: <xarray.plot.facetgrid.FacetGrid at 0xffff9ed102f0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/ds_facet_streamplot.png │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │

    Maps

    │ │ │ │ @@ -2088,15 +2088,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ In [115]: p = air.isel(time=0).plot( │ │ │ │ .....: subplot_kws=dict(projection=ccrs.Orthographic(-80, 35), facecolor="gray"), │ │ │ │ .....: transform=ccrs.PlateCarree(), │ │ │ │ .....: ) │ │ │ │ .....: │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ @@ -2182,24 +2182,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 0xffffa1077fb0>]
    │ │ │ │ +Out[124]: [<matplotlib.lines.Line2D at 0xffff9eb4e6f0>]
    │ │ │ │  
    │ │ │ │  In [125]: da.plot.line(ax=axs[0, 1])
    │ │ │ │ -Out[125]: [<matplotlib.lines.Line2D at 0xffffa1029370>]
    │ │ │ │ +Out[125]: [<matplotlib.lines.Line2D at 0xffff9e609550>]
    │ │ │ │  
    │ │ │ │  In [126]: xplt.plot(da, ax=axs[1, 0])
    │ │ │ │ -Out[126]: [<matplotlib.lines.Line2D at 0xffffa0a8ab40>]
    │ │ │ │ +Out[126]: [<matplotlib.lines.Line2D at 0xffff9e5da180>]
    │ │ │ │  
    │ │ │ │  In [127]: xplt.line(da, ax=axs[1, 1])
    │ │ │ │ -Out[127]: [<matplotlib.lines.Line2D at 0xffffa0a8b3e0>]
    │ │ │ │ +Out[127]: [<matplotlib.lines.Line2D at 0xffff9e5d8bf0>]
    │ │ │ │  
    │ │ │ │  In [128]: plt.tight_layout()
    │ │ │ │  
    │ │ │ │  In [129]: plt.draw()
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/plotting_ways_to_use.png │ │ │ │ @@ -2249,15 +2249,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 0xffffa0fc2450>
    │ │ │ │ +Out[134]: <matplotlib.collections.QuadMesh at 0xffff9dde38f0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    _build/html/_static/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 │ │ │ │ @@ -2280,57 +2280,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 0xffffa0de5190> │ │ │ │ +Out[139]: <matplotlib.collections.QuadMesh at 0xffff9dd8c440> │ │ │ │ │ │ │ │ │ │ │ │ _build/html/_static/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 0xffffa0f596a0>
    │ │ │ │ +Out[142]: <cartopy.mpl.geocollection.GeoQuadMesh at 0xffff9e7901a0>
    │ │ │ │  
    │ │ │ │  In [143]: ax.scatter(lon, lat, transform=ccrs.PlateCarree())
    │ │ │ │ -Out[143]: <matplotlib.collections.PathCollection at 0xffffa0e01430>
    │ │ │ │ +Out[143]: <matplotlib.collections.PathCollection at 0xffff9dbc7470>
    │ │ │ │  
    │ │ │ │  In [144]: ax.coastlines()
    │ │ │ │ -Out[144]: <cartopy.mpl.feature_artist.FeatureArtist at 0xffffa0a1c6e0>
    │ │ │ │ +Out[144]: <cartopy.mpl.feature_artist.FeatureArtist at 0xffff9e9eb650>
    │ │ │ │  
    │ │ │ │  In [145]: ax.gridlines(draw_labels=True)
    │ │ │ │ -Out[145]: <cartopy.mpl.gridliner.Gridliner at 0xffffa02223c0>
    │ │ │ │ +Out[145]: <cartopy.mpl.gridliner.Gridliner at 0xffff9dbfd5e0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _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 0xffffa0e172c0>
    │ │ │ │ +Out[147]: <cartopy.mpl.geocollection.GeoQuadMesh at 0xffff9e50b470>
    │ │ │ │  
    │ │ │ │  In [148]: ax.scatter(lon, lat, transform=ccrs.PlateCarree())
    │ │ │ │ -Out[148]: <matplotlib.collections.PathCollection at 0xffff9edbfc50>
    │ │ │ │ +Out[148]: <matplotlib.collections.PathCollection at 0xffff9ca10620>
    │ │ │ │  
    │ │ │ │  In [149]: ax.coastlines()
    │ │ │ │ -Out[149]: <cartopy.mpl.feature_artist.FeatureArtist at 0xffff9ee9c5c0>
    │ │ │ │ +Out[149]: <cartopy.mpl.feature_artist.FeatureArtist at 0xffff9dab4950>
    │ │ │ │  
    │ │ │ │  In [150]: ax.gridlines(draw_labels=True)
    │ │ │ │ -Out[150]: <cartopy.mpl.gridliner.Gridliner at 0xffff9edbfdd0>
    │ │ │ │ +Out[150]: <cartopy.mpl.gridliner.Gridliner at 0xffff9dbaede0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/plotting_example_2d_irreg_map_infer.png │ │ │ │ │ │ │ │
    │ │ │ │

    Note

    │ │ │ │

    The data model of xarray does not support datasets with cell boundaries │ │ │ │ @@ -2338,26 +2338,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 0xffffa0243b30>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0xffffa0241e80>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0xffffa0077a10>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0xffffa0076ab0>]
    │ │ │ │ +[<matplotlib.lines.Line2D at 0xffff9dbc7680>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0xffff9dbc70b0>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0xffff9dbc4350>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0xffff9de80fe0>]
    │ │ │ │  
    │ │ │ │  In [153]: da.plot.line(x="lon", hue="x", ax=ax[1])
    │ │ │ │  Out[153]: 
    │ │ │ │ -[<matplotlib.lines.Line2D at 0xffffa0259700>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0xffffa02598b0>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0xffffa0b8ce60>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0xffffa0221ca0>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0xffffa0222b70>]
    │ │ │ │ +[<matplotlib.lines.Line2D at 0xffff9dbe1580>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0xffff9dbe30b0>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0xffff9dbe1c10>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0xffff9f1b9100>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0xffff9dbaf050>]
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/plotting_example_2d_hue_xy.png │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -193,15 +193,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ In [6]: airtemps │ │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ │ NameError Traceback (most recent call last) │ │ │ │ │ Cell In[6], line 1 │ │ │ │ │ ----> 1 airtemps │ │ │ │ │ @@ -664,15 +664,15 @@ │ │ │ │ │ 219 │ │ │ │ │ 220 ref_name, var_name = split_key │ │ │ │ │ 221 ref_var = variables[ref_name] │ │ │ │ │ │ │ │ │ │ KeyError: 'lat' │ │ │ │ │ │ │ │ │ │ In [51]: b.plot() │ │ │ │ │ -Out[51]: [] │ │ │ │ │ +Out[51]: [] │ │ │ │ │ _[___b_u_i_l_d_/_h_t_m_l_/___s_t_a_t_i_c_/_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 Traceback (most recent call last) │ │ │ │ │ @@ -1149,83 +1149,83 @@ │ │ │ │ │ * 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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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]: │ │ │ │ │ [_build/html/_static/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 │ │ │ │ │ @@ -1285,15 +1285,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ In [115]: p = air.isel(time=0).plot( │ │ │ │ │ .....: subplot_kws=dict(projection=ccrs.Orthographic(-80, 35), │ │ │ │ │ facecolor="gray"), │ │ │ │ │ .....: transform=ccrs.PlateCarree(), │ │ │ │ │ .....: ) │ │ │ │ │ @@ -1370,24 +1370,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() │ │ │ │ │ _[___b_u_i_l_d_/_h_t_m_l_/___s_t_a_t_i_c_/_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. │ │ │ │ │ @@ -1418,15 +1418,15 @@ │ │ │ │ │ [0., 0., 0.]]) │ │ │ │ │ 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]: │ │ │ │ │ _[___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___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 │ │ │ │ │ @@ -1443,74 +1443,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]: │ │ │ │ │ _[___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_._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]: │ │ │ │ │ -[, │ │ │ │ │ - , │ │ │ │ │ - , │ │ │ │ │ - , │ │ │ │ │ - ] │ │ │ │ │ +[, │ │ │ │ │ + , │ │ │ │ │ + , │ │ │ │ │ + , │ │ │ │ │ + ] │ │ │ │ │ [_build/html/_static/plotting_example_2d_hue_xy.png] │ │ │ │ │ _p_r_e_v_i_o_u_s │ │ │ │ │ _P_a_r_a_l_l_e_l_ _c_o_m_p_u_t_i_n_g_ _w_i_t_h_ _D_a_s_k │ │ │ │ │ _n_e_x_t │ │ │ │ │ _C_o_n_f_i_g_u_r_a_t_i_o_n │ │ │ │ │ By Author name not set │ │ │ │ │ © Copyright 2014-2024, xarray Developers. │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/reshaping.html │ │ │ │ @@ -1122,15 +1122,15 @@ │ │ │ │ File /usr/lib/python3/dist-packages/pooch/utils.py:276, in make_local_storage(path, env) │ │ │ │ 272 if env is not None: │ │ │ │ 273 message.append( │ │ │ │ 274 f"Use environment variable '{env}' to specify a different location." │ │ │ │ 275 ) │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ -PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/first-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ +PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not create data cache folder '/nonexistent/second-build/.cache/xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ In [57]: air.isel(time=0).plot(x="lon", y="lat") │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ NameError Traceback (most recent call last) │ │ │ │ Cell In[57], line 1 │ │ │ │ ----> 1 air.isel(time=0).plot(x="lon", y="lat") │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -577,15 +577,15 @@ │ │ │ │ │ 273 message.append( │ │ │ │ │ 274 f"Use environment variable '{env}' to specify a different │ │ │ │ │ location." │ │ │ │ │ 275 ) │ │ │ │ │ --> 276 raise PermissionError(" ".join(message)) from error │ │ │ │ │ │ │ │ │ │ PermissionError: [Errno 13] Permission denied: '/nonexistent' | Pooch could not │ │ │ │ │ -create data cache folder '/nonexistent/first-build/.cache/ │ │ │ │ │ +create data cache folder '/nonexistent/second-build/.cache/ │ │ │ │ │ xarray_tutorial_data'. Will not be able to download data files. │ │ │ │ │ │ │ │ │ │ In [57]: air.isel(time=0).plot(x="lon", y="lat") │ │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ │ NameError Traceback (most recent call last) │ │ │ │ │ Cell In[57], line 1 │ │ │ │ │ ----> 1 air.isel(time=0).plot(x="lon", y="lat") │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/testing.html │ │ │ │ @@ -588,44 +588,54 @@ │ │ │ │

    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 (ñńĥpĤ: 6)> Size: 48B
    │ │ │ │ -array([3.929e+16      +nanj, 1.175e-38-1.175e-38j, 9.007e+15-9.977e+14j,      -inf+3.929e+16j,
    │ │ │ │ -             nan      -infj, 1.000e+07      +infj], dtype=complex64)
    │ │ │ │ +<xarray.Variable (½Ûaã: 5, żŽ: 5)> Size: 25B
    │ │ │ │ +array([[26, 26, 26, 26, 26],
    │ │ │ │ +       [26, 26, 26, 26, 26],
    │ │ │ │ +       [26, 26, 26, 26, 26],
    │ │ │ │ +       [26, 26, 26, 26, 26],
    │ │ │ │ +       [26, 26, 26, 26, 26]], dtype=uint8)
    │ │ │ │  Attributes:
    │ │ │ │ -    ſ0¹ŢD:    [['0']\n ['s;']]
    │ │ │ │ -    0:        False
    │ │ │ │ -    :         True
    │ │ │ │ -    ČĴčüá:    [['ø']]
    │ │ │ │ +    :         {'Ķ': array([['', ''],\n       ['0\x82', 'åo']], dtype='<U2'), ...
    │ │ │ │  
    │ │ │ │  In [4]: xrst.variables().example()
    │ │ │ │  Out[4]: 
    │ │ │ │ -<xarray.Variable (bė: 2)> Size: 8B
    │ │ │ │ -array([0, 0], dtype=int32)
    │ │ │ │ +<xarray.Variable (ħ: 5, ööŽĸſ: 1)> Size: 20B
    │ │ │ │ +array([[909897287],
    │ │ │ │ +       [     -161],
    │ │ │ │ +       [      149],
    │ │ │ │ +       [408212621],
    │ │ │ │ +       [    22867]], dtype=int32)
    │ │ │ │ +Attributes: (12/14)
    │ │ │ │ +    ł:        None
    │ │ │ │ +    ¾XTżĸ:    [b'\xa9Y' b'\xc4\xfccO%']
    │ │ │ │ +    :         [b'\xfb\xe4\xcf%)-']
    │ │ │ │ +    ňĂèá:     True
    │ │ │ │ +    ¹ŽŻſµ:    7źŻűÚ
    │ │ │ │ +    ŊaĄ:      True
    │ │ │ │ +    ...       ...
    │ │ │ │ +    Ħ:        
    │ │ │ │ +    Ģſ:       None
    │ │ │ │ +    pŻQeĨ:    None
    │ │ │ │ +    Ň:        None
    │ │ │ │ +    øſÝ:      None
    │ │ │ │ +    ¼:        5
    │ │ │ │  
    │ │ │ │  In [5]: xrst.variables().example()
    │ │ │ │  Out[5]: 
    │ │ │ │ -<xarray.Variable (čäąÑõ: 6, ž: 1, 0: 4)> Size: 384B
    │ │ │ │ -array([[[       inf +0.j, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ -
    │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ -
    │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ -
    │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ -
    │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ -
    │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]]])
    │ │ │ │ +<xarray.Variable (ŽŜĮïT: 2, ÜõûŝŰ: 3)> Size: 24B
    │ │ │ │ +array([[ 711475185,          0,        151],
    │ │ │ │ +       [       154, 3568654294,       5630]], dtype=uint32)
    │ │ │ │  Attributes:
    │ │ │ │ -    0:        None
    │ │ │ │ +    :         {}
    │ │ │ │ +    Ñl:       {'Ŭ': None, '': ''}
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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
    │ │ │ │ @@ -643,98 +653,116 @@
    │ │ │ │  

    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 (0: 6)> Size: 48B
    │ │ │ │ -array([0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j], dtype=complex64)
    │ │ │ │ +<xarray.Variable (ż7ĶŪõ: 1, ħžIJ: 4, śŷſ: 6)> Size: 384B
    │ │ │ │ +array([[[-3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j,
    │ │ │ │ +         -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j],
    │ │ │ │ +        [-3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j,
    │ │ │ │ +          1.175e-038-0.000e+000j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j],
    │ │ │ │ +        [-3.589e-234-6.104e-005j,  1.000e+000+1.798e+308j, -3.589e-234-6.104e-005j,
    │ │ │ │ +         -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -4.941e-324-1.500e+000j],
    │ │ │ │ +        [-3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j,
    │ │ │ │ +         -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j]]])
    │ │ │ │ +Attributes:
    │ │ │ │ +    ŀťÚż4:    None
    │ │ │ │ +    :         
    │ │ │ │ +    ù:        ŽĠÊvŻ
    │ │ │ │ +    şç:       None
    │ │ │ │ +    ļ:        None
    │ │ │ │ +    żżßĜļ:    ž
    │ │ │ │ +    ă5ōE:     True
    │ │ │ │ +    ³ũ:       [ 40406 -56897]
    │ │ │ │ +    ĭõŽĶ:     ūVťŻs
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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: 1, y: 1)> Size: 2B
    │ │ │ │ -array([[0.]], dtype=float16)
    │ │ │ │ +<xarray.Variable (x: 2, y: 2)> Size: 32B
    │ │ │ │ +array([[-3.403e+38+0.j, -3.403e+38+0.j],
    │ │ │ │ +       [-3.403e+38+0.j, -3.403e+38+0.j]], dtype=complex64)
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    (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: 12B
    │ │ │ │ -array([[2, 0, 0],
    │ │ │ │ -       [0, 0, 0]], dtype=int16)
    │ │ │ │ +array([[   0,   27,    3],
    │ │ │ │ +       [   3,    3, 6652]], dtype=int16)
    │ │ │ │  Attributes:
    │ │ │ │ -    0:        False
    │ │ │ │ +    0:        {'0': array([[b'', b''],\n       [b'', b'']], dtype='|S2'), '':...
    │ │ │ │ +    :         {'': array([[b'D', b'D'],\n       [b'D', b'D']], dtype='|S2')}
    │ │ │ │ +    Âņ³ĐŘ:    {'0': False}
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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: 2B
    │ │ │ │ -array([0.], dtype=float16)
    │ │ │ │ +array([0], dtype=int16)
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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, 'z': 2}
    │ │ │ │ +Out[15]: {'x': 2, 'y': 4, '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: 4, z: 2)> Size: 256B
    │ │ │ │ -array([[[0.+3.778e+009j, 0.+1.287e+014j],
    │ │ │ │ -        [0.+1.287e+014j, 0.-6.372e-058j],
    │ │ │ │ -        [0.+1.287e+014j, 0.+2.869e+009j],
    │ │ │ │ -        [0.+1.689e+009j, 0.+3.775e+008j]],
    │ │ │ │ -
    │ │ │ │ -       [[0.+1.287e+014j, 0.+1.287e+014j],
    │ │ │ │ -        [0.+1.287e+014j, 0.+1.287e+014j],
    │ │ │ │ -        [0.+1.762e+009j, 0.+1.287e+014j],
    │ │ │ │ -        [0.-4.641e-215j, 0.+1.287e+014j]]])
    │ │ │ │ +<xarray.Variable (x: 2, y: 4, z: 2)> Size: 64B
    │ │ │ │ +array([[[     26895,        205],
    │ │ │ │ +        [       252,      38205],
    │ │ │ │ +        [       234, 4294967294],
    │ │ │ │ +        [      5245,      56254]],
    │ │ │ │ +
    │ │ │ │ +       [[     13693,         88],
    │ │ │ │ +        [     31889,        235],
    │ │ │ │ +        [       171,        166],
    │ │ │ │ +        [     26380,          1]]], dtype=uint32)
    │ │ │ │  Attributes:
    │ │ │ │ -    ź:        {'mĖŴ²Ĉ': {'': array([b''], dtype='|S11'), '0': False}}
    │ │ │ │ -    0:        {}
    │ │ │ │ -    :         {}
    │ │ │ │ +    S:        {'àůîĄZ': array([    'NaT', '1970-01'], dtype='>M8[M]')}
    │ │ │ │ +    :         {'0': {}, '': {}}
    │ │ │ │  
    │ │ │ │  In [18]: special_variables.example()
    │ │ │ │  Out[18]: 
    │ │ │ │ -<xarray.Variable (x: 2, y: 3, z: 2)> Size: 96B
    │ │ │ │ -array([[[              48003, -365808426882986985],
    │ │ │ │ -        [              29277,                  20],
    │ │ │ │ -        [              12117, -365808426882986985]],
    │ │ │ │ -
    │ │ │ │ -       [[             -61102,                -186],
    │ │ │ │ -        [-365808426882986985,                   6],
    │ │ │ │ -        [              28838, -365808426882986985]]])
    │ │ │ │ -Attributes:
    │ │ │ │ -    :         wżì
    │ │ │ │ -    ĥżžòś:    [[b'\x01N\x0f\xbe\xc4' b'\x8aKp\xca\x1f\xf5\x8d']]
    │ │ │ │ +<xarray.Variable (x: 2, y: 4, z: 2)> Size: 128B
    │ │ │ │ +array([[[0.000e+00, 0.000e+00],
    │ │ │ │ +        [0.000e+00, 0.000e+00],
    │ │ │ │ +        [0.000e+00, 0.000e+00],
    │ │ │ │ +        [0.000e+00, 0.000e+00]],
    │ │ │ │ +
    │ │ │ │ +       [[0.000e+00, 0.000e+00],
    │ │ │ │ +        [0.000e+00, 0.000e+00],
    │ │ │ │ +        [0.000e+00, 0.000e+00],
    │ │ │ │ +        [3.556e+16, 0.000e+00]]])
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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, │ │ │ │ @@ -1005,28 +1033,28 @@ │ │ │ │

    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]: ['z', 'x']
    │ │ │ │ +Out[34]: ['x']
    │ │ │ │  
    │ │ │ │  In [35]: xrst.unique_subset_of(dims).example()
    │ │ │ │ -Out[35]: ['x']
    │ │ │ │ +Out[35]: ['x', 'y', 'z']
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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, 'x': 2, 'y': 3}
    │ │ │ │ +Out[37]: {'z': 4, 'x': 2}
    │ │ │ │  
    │ │ │ │  In [38]: xrst.unique_subset_of(dim_sizes).example()
    │ │ │ │ -Out[38]: {'x': 2, 'z': 4, 'y': 3}
    │ │ │ │ +Out[38]: {'z': 4, 'y': 3, 'x': 2}
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    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 {}
    │ │ │ │ │ @@ -104,45 +104,55 @@
    │ │ │ │ │  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: 48B
    │ │ │ │ │ -array([3.929e+16      +nanj, 1.175e-38-1.175e-38j, 9.007e+15-9.977e+14j,      -
    │ │ │ │ │ -inf+3.929e+16j,
    │ │ │ │ │ -             nan      -infj, 1.000e+07      +infj], dtype=complex64)
    │ │ │ │ │ + Size: 25B
    │ │ │ │ │ +array([[26, 26, 26, 26, 26],
    │ │ │ │ │ +       [26, 26, 26, 26, 26],
    │ │ │ │ │ +       [26, 26, 26, 26, 26],
    │ │ │ │ │ +       [26, 26, 26, 26, 26],
    │ │ │ │ │ +       [26, 26, 26, 26, 26]], dtype=uint8)
    │ │ │ │ │  Attributes:
    │ │ │ │ │ -    ſ0¹ŢD:    [['0']\n ['s;']]
    │ │ │ │ │ -    0:        False
    │ │ │ │ │ -    :         True
    │ │ │ │ │ -    ČĴčüá:    [['ø']]
    │ │ │ │ │ +    :         {'Ķ': array([['', ''],\n       ['0\x82', 'åo']], dtype=' Size: 8B
    │ │ │ │ │ -array([0, 0], dtype=int32)
    │ │ │ │ │ + Size: 20B
    │ │ │ │ │ +array([[909897287],
    │ │ │ │ │ +       [     -161],
    │ │ │ │ │ +       [      149],
    │ │ │ │ │ +       [408212621],
    │ │ │ │ │ +       [    22867]], dtype=int32)
    │ │ │ │ │ +Attributes: (12/14)
    │ │ │ │ │ +    ł:        None
    │ │ │ │ │ +    ¾XTżĸ:    [b'\xa9Y' b'\xc4\xfccO%']
    │ │ │ │ │ +    :         [b'\xfb\xe4\xcf%)-']
    │ │ │ │ │ +    ňĂèá:     True
    │ │ │ │ │ +    ¹ŽŻſµ:    7źŻűÚ
    │ │ │ │ │ +    ŊaĄ:      True
    │ │ │ │ │ +    ...       ...
    │ │ │ │ │ +    Ħ:
    │ │ │ │ │ +    Ģſ:       None
    │ │ │ │ │ +    pŻQeĨ:    None
    │ │ │ │ │ +    Ň:        None
    │ │ │ │ │ +    øſÝ:      None
    │ │ │ │ │ +    ¼:        5
    │ │ │ │ │  
    │ │ │ │ │  In [5]: xrst.variables().example()
    │ │ │ │ │  Out[5]:
    │ │ │ │ │ - Size: 384B
    │ │ │ │ │ -array([[[       inf +0.j, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj, 1.798e+308+nanj]]])
    │ │ │ │ │ + Size: 24B
    │ │ │ │ │ +array([[ 711475185,          0,        151],
    │ │ │ │ │ +       [       154, 3568654294,       5630]], dtype=uint32)
    │ │ │ │ │  Attributes:
    │ │ │ │ │ -    0:        None
    │ │ │ │ │ +    :         {}
    │ │ │ │ │ +    Ñl:       {'Ŭ': None, '': ''}
    │ │ │ │ │  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 _h_y_p_o_t_h_e_s_i_s_._g_i_v_e_n_(_) decorator:
    │ │ │ │ │  In [6]: from hypothesis import given
    │ │ │ │ │  In [7]: @given(xrst.variables())
    │ │ │ │ │ @@ -154,96 +164,123 @@
    │ │ │ │ │  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: 48B
    │ │ │ │ │ -array([0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j], dtype=complex64)
    │ │ │ │ │ + Size: 384B
    │ │ │ │ │ +array([[[-3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-
    │ │ │ │ │ +005j,
    │ │ │ │ │ +         -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-
    │ │ │ │ │ +005j],
    │ │ │ │ │ +        [-3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-
    │ │ │ │ │ +005j,
    │ │ │ │ │ +          1.175e-038-0.000e+000j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-
    │ │ │ │ │ +005j],
    │ │ │ │ │ +        [-3.589e-234-6.104e-005j,  1.000e+000+1.798e+308j, -3.589e-234-6.104e-
    │ │ │ │ │ +005j,
    │ │ │ │ │ +         -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -4.941e-324-
    │ │ │ │ │ +1.500e+000j],
    │ │ │ │ │ +        [-3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-
    │ │ │ │ │ +005j,
    │ │ │ │ │ +         -3.589e-234-6.104e-005j, -3.589e-234-6.104e-005j, -3.589e-234-6.104e-
    │ │ │ │ │ +005j]]])
    │ │ │ │ │ +Attributes:
    │ │ │ │ │ +    ŀťÚż4:    None
    │ │ │ │ │ +    :
    │ │ │ │ │ +    ù:        ŽĠÊvŻ
    │ │ │ │ │ +    şç:       None
    │ │ │ │ │ +    ļ:        None
    │ │ │ │ │ +    żżßĜļ:    ž
    │ │ │ │ │ +    ă5ōE:     True
    │ │ │ │ │ +    ³ũ:       [ 40406 -56897]
    │ │ │ │ │ +    ĭõŽĶ:     ūVťŻs
    │ │ │ │ │  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
    │ │ │ │ │  _h_y_p_o_t_h_e_s_i_s_._s_t_r_a_t_e_g_i_e_s_._j_u_s_t_(_).
    │ │ │ │ │  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: 2B
    │ │ │ │ │ -array([[0.]], dtype=float16)
    │ │ │ │ │ + Size: 32B
    │ │ │ │ │ +array([[-3.403e+38+0.j, -3.403e+38+0.j],
    │ │ │ │ │ +       [-3.403e+38+0.j, -3.403e+38+0.j]], dtype=complex64)
    │ │ │ │ │  (This is technically another example of chaining strategies -
    │ │ │ │ │  _h_y_p_o_t_h_e_s_i_s_._s_t_r_a_t_e_g_i_e_s_._j_u_s_t_(_) 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: 12B
    │ │ │ │ │ -array([[2, 0, 0],
    │ │ │ │ │ -       [0, 0, 0]], dtype=int16)
    │ │ │ │ │ +array([[   0,   27,    3],
    │ │ │ │ │ +       [   3,    3, 6652]], dtype=int16)
    │ │ │ │ │  Attributes:
    │ │ │ │ │ -    0:        False
    │ │ │ │ │ +    0:        {'0': array([[b'', b''],\n       [b'', b'']], dtype='|S2'),
    │ │ │ │ │ +'':...
    │ │ │ │ │ +    :         {'': array([[b'D', b'D'],\n       [b'D', b'D']], dtype='|S2')}
    │ │ │ │ │ +    Âņ³ĐŘ:    {'0': False}
    │ │ │ │ │  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: 2B
    │ │ │ │ │ -array([0.], dtype=float16)
    │ │ │ │ │ +array([0], dtype=int16)
    │ │ │ │ │  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, 'z': 2}
    │ │ │ │ │ +Out[15]: {'x': 2, 'y': 4, 'z': 2}
    │ │ │ │ │  
    │ │ │ │ │  In [16]: special_variables = xrst.variables(dims=fixed_x_variable_y_maybe_z)
    │ │ │ │ │  
    │ │ │ │ │  In [17]: special_variables.example()
    │ │ │ │ │  Out[17]:
    │ │ │ │ │ - Size: 256B
    │ │ │ │ │ -array([[[0.+3.778e+009j, 0.+1.287e+014j],
    │ │ │ │ │ -        [0.+1.287e+014j, 0.-6.372e-058j],
    │ │ │ │ │ -        [0.+1.287e+014j, 0.+2.869e+009j],
    │ │ │ │ │ -        [0.+1.689e+009j, 0.+3.775e+008j]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[0.+1.287e+014j, 0.+1.287e+014j],
    │ │ │ │ │ -        [0.+1.287e+014j, 0.+1.287e+014j],
    │ │ │ │ │ -        [0.+1.762e+009j, 0.+1.287e+014j],
    │ │ │ │ │ -        [0.-4.641e-215j, 0.+1.287e+014j]]])
    │ │ │ │ │ + Size: 64B
    │ │ │ │ │ +array([[[     26895,        205],
    │ │ │ │ │ +        [       252,      38205],
    │ │ │ │ │ +        [       234, 4294967294],
    │ │ │ │ │ +        [      5245,      56254]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[     13693,         88],
    │ │ │ │ │ +        [     31889,        235],
    │ │ │ │ │ +        [       171,        166],
    │ │ │ │ │ +        [     26380,          1]]], dtype=uint32)
    │ │ │ │ │  Attributes:
    │ │ │ │ │ -    ź:        {'mĖŴ²Ĉ': {'': array([b''], dtype='|S11'), '0': False}}
    │ │ │ │ │ -    0:        {}
    │ │ │ │ │ -    :         {}
    │ │ │ │ │ +    S:        {'àůîĄZ': array([    'NaT', '1970-01'], dtype='>M8[M]')}
    │ │ │ │ │ +    :         {'0': {}, '': {}}
    │ │ │ │ │  
    │ │ │ │ │  In [18]: special_variables.example()
    │ │ │ │ │  Out[18]:
    │ │ │ │ │ - Size: 96B
    │ │ │ │ │ -array([[[              48003, -365808426882986985],
    │ │ │ │ │ -        [              29277,                  20],
    │ │ │ │ │ -        [              12117, -365808426882986985]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[             -61102,                -186],
    │ │ │ │ │ -        [-365808426882986985,                   6],
    │ │ │ │ │ -        [              28838, -365808426882986985]]])
    │ │ │ │ │ -Attributes:
    │ │ │ │ │ -    :         wżì
    │ │ │ │ │ -    ĥżžòś:    [[b'\x01N\x0f\xbe\xc4' b'\x8aKp\xca\x1f\xf5\x8d']]
    │ │ │ │ │ + Size: 128B
    │ │ │ │ │ +array([[[0.000e+00, 0.000e+00],
    │ │ │ │ │ +        [0.000e+00, 0.000e+00],
    │ │ │ │ │ +        [0.000e+00, 0.000e+00],
    │ │ │ │ │ +        [0.000e+00, 0.000e+00]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[0.000e+00, 0.000e+00],
    │ │ │ │ │ +        [0.000e+00, 0.000e+00],
    │ │ │ │ │ +        [0.000e+00, 0.000e+00],
    │ │ │ │ │ +        [3.556e+16, 0.000e+00]]])
    │ │ │ │ │  Here we have used one of hypothesis’ built-in strategies
    │ │ │ │ │  _h_y_p_o_t_h_e_s_i_s_._s_t_r_a_t_e_g_i_e_s_._f_i_x_e_d___d_i_c_t_i_o_n_a_r_i_e_s_(_) 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
    │ │ │ │ │ @@ -519,26 +556,26 @@
    │ │ │ │ │  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]: ['z', 'x']
    │ │ │ │ │ +Out[34]: ['x']
    │ │ │ │ │  
    │ │ │ │ │  In [35]: xrst.unique_subset_of(dims).example()
    │ │ │ │ │ -Out[35]: ['x']
    │ │ │ │ │ +Out[35]: ['x', 'y', 'z']
    │ │ │ │ │  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, 'x': 2, 'y': 3}
    │ │ │ │ │ +Out[37]: {'z': 4, 'x': 2}
    │ │ │ │ │  
    │ │ │ │ │  In [38]: xrst.unique_subset_of(dim_sizes).example()
    │ │ │ │ │ -Out[38]: {'x': 2, 'z': 4, 'y': 3}
    │ │ │ │ │ +Out[38]: {'z': 4, 'y': 3, 'x': 2}
    │ │ │ │ │  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
    │ │ │ │ @@ -10336,15 +10336,15 @@
    │ │ │ │  
  • New xray.Dataset.where method for masking xray objects according │ │ │ │ to some criteria. This works particularly well with multi-dimensional data:

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

  • │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -5386,15 +5386,15 @@ │ │ │ │ │ * New xray.Dataset.where method for masking xray objects according to some │ │ │ │ │ criteria. This works particularly well with multi-dimensional data: │ │ │ │ │ In [44]: ds = xray.Dataset(coords={"x": range(100), "y": range(100)}) │ │ │ │ │ │ │ │ │ │ In [45]: ds["distance"] = np.sqrt(ds.x**2 + ds.y**2) │ │ │ │ │ │ │ │ │ │ In [46]: ds.distance.where(ds.distance < 100).plot() │ │ │ │ │ - Out[46]: │ │ │ │ │ + Out[46]: │ │ │ │ │ _[___b_u_i_l_d_/_h_t_m_l_/___s_t_a_t_i_c_/_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 [47]: da = xray.DataArray(np.random.random_sample(size=(5, 4)))