Subsetting
The subset operation makes use of clisops.core.subset
to process the datasets and to set the output type and the output file names.
[1]:
from clisops.utils.testing import stratus, XCLIM_TEST_DATA_VERSION, XCLIM_TEST_DATA_REPO_URL,XCLIM_TEST_DATA_CACHE_DIR
Stratus = stratus(repo=XCLIM_TEST_DATA_REPO_URL, branch=XCLIM_TEST_DATA_VERSION, cache_dir=XCLIM_TEST_DATA_CACHE_DIR)
# fetch files locally or from GitHub
tas_files = [
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_203012-205511.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_205512-208011.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_208012-209912.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_209912-212411.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_212412-214911.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_214912-217411.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_217412-219911.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_219912-222411.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_222412-224911.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_224912-227411.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_227412-229911.nc",
"cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_229912-229912.nc"
]
for i, name in enumerate(tas_files):
tas_files[i] = Stratus.fetch(name)
o3_file = Stratus.fetch("cmip6/o3_Amon_GFDL-ESM4_historical_r1i1p1f1_gr1_185001-194912.nc")
# remove previously created example file
import os
if os.path.exists("./output_001.nc"):
os.remove("./output_001.nc")
Downloading file 'cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc' from 'https://raw.githubusercontent.com/Ouranosinc/xclim-testdata/v2024.8.23/data/cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc' to '/home/docs/.cache/xclim-testdata/v2024.8.23'.
---------------------------------------------------------------------------
HTTPError Traceback (most recent call last)
Cell In[1], line 22
6 tas_files = [
7 "cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc",
8 "cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_203012-205511.nc",
(...)
19 "cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_229912-229912.nc"
20 ]
21 for i, name in enumerate(tas_files):
---> 22 tas_files[i] = Stratus.fetch(name)
24 o3_file = Stratus.fetch("cmip6/o3_Amon_GFDL-ESM4_historical_r1i1p1f1_gr1_185001-194912.nc")
26 # remove previously created example file
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/pooch/core.py:589, in Pooch.fetch(self, fname, processor, downloader, progressbar)
586 if downloader is None:
587 downloader = choose_downloader(url, progressbar=progressbar)
--> 589 stream_download(
590 url,
591 full_path,
592 known_hash,
593 downloader,
594 pooch=self,
595 retry_if_failed=self.retry_if_failed,
596 )
598 if processor is not None:
599 return processor(str(full_path), action, self)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/pooch/core.py:807, in stream_download(url, fname, known_hash, downloader, pooch, retry_if_failed)
803 try:
804 # Stream the file to a temporary so that we can safely check its
805 # hash before overwriting the original.
806 with temporary_file(path=str(fname.parent)) as tmp:
--> 807 downloader(url, tmp, pooch)
808 hash_matches(tmp, known_hash, strict=True, source=str(fname.name))
809 shutil.move(tmp, str(fname))
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/pooch/downloaders.py:221, in HTTPDownloader.__call__(self, url, output_file, pooch, check_only)
219 try:
220 response = requests.get(url, timeout=timeout, **kwargs)
--> 221 response.raise_for_status()
222 content = response.iter_content(chunk_size=self.chunk_size)
223 total = int(response.headers.get("content-length", 0))
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/requests/models.py:1024, in Response.raise_for_status(self)
1019 http_error_msg = (
1020 f"{self.status_code} Server Error: {reason} for url: {self.url}"
1021 )
1023 if http_error_msg:
-> 1024 raise HTTPError(http_error_msg, response=self)
HTTPError: 403 Client Error: Forbidden for url: https://raw.githubusercontent.com/Ouranosinc/xclim-testdata/v2024.8.23/data/cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc
[2]:
from clisops.ops.subset import subset
import xarray as xr
The subset
process takes several parameters:
Subsetting Parameters
ds: Union[xr.Dataset, str, Path]
time: Optional[Union[str, TimeParameter]]
area: Optional[
Union[
str,
Tuple[
Union[int, float, str],
Union[int, float, str],
Union[int, float, str],
Union[int, float, str],
],
AreaParameter,
]
]
level: Optional[
Union[
str, LevelParameter
]
]
time_components: Optional[Union[str, Dict, TimeComponentsParameter]]
output_dir: Optional[Union[str, Path]]
output_type: {"netcdf", "nc", "zarr", "xarray"}
split_method: {"time:auto"}
file_namer: {"standard"}
The output is a list containing the outputs in the format selected.
[3]:
ds = xr.open_mfdataset(tas_files, use_cftime=True, combine="by_coords")
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:210, in CachingFileManager._acquire_with_cache_info(self, needs_lock)
209 try:
--> 210 file = self._cache[self._key]
211 except KeyError:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/lru_cache.py:56, in LRUCache.__getitem__(self, key)
55 with self._lock:
---> 56 value = self._cache[key]
57 self._cache.move_to_end(key)
KeyError: [<class 'netCDF4._netCDF4.Dataset'>, ('/home/docs/checkouts/readthedocs.org/user_builds/clisops/checkouts/stable/docs/notebooks/cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc',), 'r', (('clobber', True), ('diskless', False), ('format', 'NETCDF4'), ('persist', False)), '4e8cd65e-e85d-4108-a976-91b369cce2c0']
During handling of the above exception, another exception occurred:
FileNotFoundError Traceback (most recent call last)
Cell In[3], line 1
----> 1 ds = xr.open_mfdataset(tas_files, use_cftime=True, combine="by_coords")
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:983, in open_mfdataset(paths, chunks, concat_dim, compat, preprocess, engine, data_vars, coords, combine, parallel, join, attrs_file, combine_attrs, **kwargs)
980 open_ = open_dataset
981 getattr_ = getattr
--> 983 datasets = [open_(p, **open_kwargs) for p in paths]
984 closers = [getattr_(ds, "_close") for ds in datasets]
985 if preprocess is not None:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:983, in <listcomp>(.0)
980 open_ = open_dataset
981 getattr_ = getattr
--> 983 datasets = [open_(p, **open_kwargs) for p in paths]
984 closers = [getattr_(ds, "_close") for ds in datasets]
985 if preprocess is not None:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:526, in open_dataset(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, inline_array, backend_kwargs, **kwargs)
514 decoders = _resolve_decoders_kwargs(
515 decode_cf,
516 open_backend_dataset_parameters=backend.open_dataset_parameters,
(...)
522 decode_coords=decode_coords,
523 )
525 overwrite_encoded_chunks = kwargs.pop("overwrite_encoded_chunks", None)
--> 526 backend_ds = backend.open_dataset(
527 filename_or_obj,
528 drop_variables=drop_variables,
529 **decoders,
530 **kwargs,
531 )
532 ds = _dataset_from_backend_dataset(
533 backend_ds,
534 filename_or_obj,
(...)
542 **kwargs,
543 )
544 return ds
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:577, in NetCDF4BackendEntrypoint.open_dataset(self, filename_or_obj, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, use_cftime, decode_timedelta, group, mode, format, clobber, diskless, persist, lock, autoclose)
557 def open_dataset(
558 self,
559 filename_or_obj,
(...)
574 autoclose=False,
575 ):
576 filename_or_obj = _normalize_path(filename_or_obj)
--> 577 store = NetCDF4DataStore.open(
578 filename_or_obj,
579 mode=mode,
580 format=format,
581 group=group,
582 clobber=clobber,
583 diskless=diskless,
584 persist=persist,
585 lock=lock,
586 autoclose=autoclose,
587 )
589 store_entrypoint = StoreBackendEntrypoint()
590 with close_on_error(store):
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:382, in NetCDF4DataStore.open(cls, filename, mode, format, group, clobber, diskless, persist, lock, lock_maker, autoclose)
376 kwargs = dict(
377 clobber=clobber, diskless=diskless, persist=persist, format=format
378 )
379 manager = CachingFileManager(
380 netCDF4.Dataset, filename, mode=mode, kwargs=kwargs
381 )
--> 382 return cls(manager, group=group, mode=mode, lock=lock, autoclose=autoclose)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:329, in NetCDF4DataStore.__init__(self, manager, group, mode, lock, autoclose)
327 self._group = group
328 self._mode = mode
--> 329 self.format = self.ds.data_model
330 self._filename = self.ds.filepath()
331 self.is_remote = is_remote_uri(self._filename)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:391, in NetCDF4DataStore.ds(self)
389 @property
390 def ds(self):
--> 391 return self._acquire()
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:385, in NetCDF4DataStore._acquire(self, needs_lock)
384 def _acquire(self, needs_lock=True):
--> 385 with self._manager.acquire_context(needs_lock) as root:
386 ds = _nc4_require_group(root, self._group, self._mode)
387 return ds
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/contextlib.py:137, in _GeneratorContextManager.__enter__(self)
135 del self.args, self.kwds, self.func
136 try:
--> 137 return next(self.gen)
138 except StopIteration:
139 raise RuntimeError("generator didn't yield") from None
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:198, in CachingFileManager.acquire_context(self, needs_lock)
195 @contextlib.contextmanager
196 def acquire_context(self, needs_lock=True):
197 """Context manager for acquiring a file."""
--> 198 file, cached = self._acquire_with_cache_info(needs_lock)
199 try:
200 yield file
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:216, in CachingFileManager._acquire_with_cache_info(self, needs_lock)
214 kwargs = kwargs.copy()
215 kwargs["mode"] = self._mode
--> 216 file = self._opener(*self._args, **kwargs)
217 if self._mode == "w":
218 # ensure file doesn't get overridden when opened again
219 self._mode = "a"
File src/netCDF4/_netCDF4.pyx:2521, in netCDF4._netCDF4.Dataset.__init__()
File src/netCDF4/_netCDF4.pyx:2158, in netCDF4._netCDF4._ensure_nc_success()
FileNotFoundError: [Errno 2] No such file or directory: '/home/docs/checkouts/readthedocs.org/user_builds/clisops/checkouts/stable/docs/notebooks/cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc'
Output to xarray
There will only be one output for this example.
[4]:
outputs = subset(
ds=ds,
time="2007-01-01T00:00:00/2200-12-30T00:00:00",
area=(0.0, 10.0, 175.0, 90.0),
output_type="xarray",
)
print(f"There is only {len(outputs)} output.")
outputs[0]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 2
1 outputs = subset(
----> 2 ds=ds,
3 time="2007-01-01T00:00:00/2200-12-30T00:00:00",
4 area=(0.0, 10.0, 175.0, 90.0),
5 output_type="xarray",
6 )
8 print(f"There is only {len(outputs)} output.")
9 outputs[0]
NameError: name 'ds' is not defined
Output to netCDF with simple namer
There is only one output as the file size is under the memory limit so does not need to be split. This example uses the simple namer which numbers output files.
[5]:
outputs = subset(
ds=ds,
time="2007-01-01T00:00:00/2200-12-30T00:00:00",
area=(0.0, 10.0, 175.0, 90.0),
output_type="nc",
output_dir=".",
split_method="time:auto",
file_namer="simple"
)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[5], line 2
1 outputs = subset(
----> 2 ds=ds,
3 time="2007-01-01T00:00:00/2200-12-30T00:00:00",
4 area=(0.0, 10.0, 175.0, 90.0),
5 output_type="nc",
6 output_dir=".",
7 split_method="time:auto",
8 file_namer="simple"
9 )
NameError: name 'ds' is not defined
[6]:
# To open the file
subset_ds = xr.open_mfdataset("./output_001.nc", use_cftime=True, combine="by_coords")
subset_ds
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
Cell In[6], line 3
1 # To open the file
----> 3 subset_ds = xr.open_mfdataset("./output_001.nc", use_cftime=True, combine="by_coords")
4 subset_ds
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:948, in open_mfdataset(paths, chunks, concat_dim, compat, preprocess, engine, data_vars, coords, combine, parallel, join, attrs_file, combine_attrs, **kwargs)
945 paths = [os.fspath(p) if isinstance(p, os.PathLike) else p for p in paths]
947 if not paths:
--> 948 raise OSError("no files to open")
950 if combine == "nested":
951 if isinstance(concat_dim, (str, DataArray)) or concat_dim is None:
OSError: no files to open
Output to netCDF with standard namer
There is only one output as the file size is under the memory limit so does not need to be split. This example uses the standard namer which names output filesa ccording the the input file and how it has been subsetted.
[7]:
outputs = subset(
ds=ds,
time="2007-01-01T00:00:00/2200-12-30T00:00:00",
area=(0.0, 10.0, 175.0, 90.0),
output_type="nc",
output_dir=".",
split_method="time:auto",
file_namer="standard"
)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[7], line 2
1 outputs = subset(
----> 2 ds=ds,
3 time="2007-01-01T00:00:00/2200-12-30T00:00:00",
4 area=(0.0, 10.0, 175.0, 90.0),
5 output_type="nc",
6 output_dir=".",
7 split_method="time:auto",
8 file_namer="standard"
9 )
NameError: name 'ds' is not defined
Subsetting by level
[8]:
ds = xr.open_dataset(o3_file, use_cftime=True)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[8], line 1
----> 1 ds = xr.open_dataset(o3_file, use_cftime=True)
NameError: name 'o3_file' is not defined
No subsetting applied
[9]:
result = subset(ds=ds,
output_type="xarray")
result[0].coords
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[9], line 1
----> 1 result = subset(ds=ds,
2 output_type="xarray")
4 result[0].coords
NameError: name 'ds' is not defined
Subsetting over level
[10]:
# subsetting over pressure level (plev)
result = subset(ds=ds,
level="600/100",
output_type="xarray")
print(result[0].coords)
print(f"\nplev has been subsetted and now only has {len(result[0].coords)} values.")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[10], line 3
1 # subsetting over pressure level (plev)
----> 3 result = subset(ds=ds,
4 level="600/100",
5 output_type="xarray")
7 print(result[0].coords)
8 print(f"\nplev has been subsetted and now only has {len(result[0].coords)} values.")
NameError: name 'ds' is not defined
Use time components
[11]:
ds = xr.open_mfdataset(tas_files, use_cftime=True, combine="by_coords")
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:210, in CachingFileManager._acquire_with_cache_info(self, needs_lock)
209 try:
--> 210 file = self._cache[self._key]
211 except KeyError:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/lru_cache.py:56, in LRUCache.__getitem__(self, key)
55 with self._lock:
---> 56 value = self._cache[key]
57 self._cache.move_to_end(key)
KeyError: [<class 'netCDF4._netCDF4.Dataset'>, ('/home/docs/checkouts/readthedocs.org/user_builds/clisops/checkouts/stable/docs/notebooks/cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc',), 'r', (('clobber', True), ('diskless', False), ('format', 'NETCDF4'), ('persist', False)), '656e99f0-214e-4155-914d-de9081275ea9']
During handling of the above exception, another exception occurred:
FileNotFoundError Traceback (most recent call last)
Cell In[11], line 1
----> 1 ds = xr.open_mfdataset(tas_files, use_cftime=True, combine="by_coords")
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:983, in open_mfdataset(paths, chunks, concat_dim, compat, preprocess, engine, data_vars, coords, combine, parallel, join, attrs_file, combine_attrs, **kwargs)
980 open_ = open_dataset
981 getattr_ = getattr
--> 983 datasets = [open_(p, **open_kwargs) for p in paths]
984 closers = [getattr_(ds, "_close") for ds in datasets]
985 if preprocess is not None:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:983, in <listcomp>(.0)
980 open_ = open_dataset
981 getattr_ = getattr
--> 983 datasets = [open_(p, **open_kwargs) for p in paths]
984 closers = [getattr_(ds, "_close") for ds in datasets]
985 if preprocess is not None:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:526, in open_dataset(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, inline_array, backend_kwargs, **kwargs)
514 decoders = _resolve_decoders_kwargs(
515 decode_cf,
516 open_backend_dataset_parameters=backend.open_dataset_parameters,
(...)
522 decode_coords=decode_coords,
523 )
525 overwrite_encoded_chunks = kwargs.pop("overwrite_encoded_chunks", None)
--> 526 backend_ds = backend.open_dataset(
527 filename_or_obj,
528 drop_variables=drop_variables,
529 **decoders,
530 **kwargs,
531 )
532 ds = _dataset_from_backend_dataset(
533 backend_ds,
534 filename_or_obj,
(...)
542 **kwargs,
543 )
544 return ds
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:577, in NetCDF4BackendEntrypoint.open_dataset(self, filename_or_obj, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, use_cftime, decode_timedelta, group, mode, format, clobber, diskless, persist, lock, autoclose)
557 def open_dataset(
558 self,
559 filename_or_obj,
(...)
574 autoclose=False,
575 ):
576 filename_or_obj = _normalize_path(filename_or_obj)
--> 577 store = NetCDF4DataStore.open(
578 filename_or_obj,
579 mode=mode,
580 format=format,
581 group=group,
582 clobber=clobber,
583 diskless=diskless,
584 persist=persist,
585 lock=lock,
586 autoclose=autoclose,
587 )
589 store_entrypoint = StoreBackendEntrypoint()
590 with close_on_error(store):
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:382, in NetCDF4DataStore.open(cls, filename, mode, format, group, clobber, diskless, persist, lock, lock_maker, autoclose)
376 kwargs = dict(
377 clobber=clobber, diskless=diskless, persist=persist, format=format
378 )
379 manager = CachingFileManager(
380 netCDF4.Dataset, filename, mode=mode, kwargs=kwargs
381 )
--> 382 return cls(manager, group=group, mode=mode, lock=lock, autoclose=autoclose)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:329, in NetCDF4DataStore.__init__(self, manager, group, mode, lock, autoclose)
327 self._group = group
328 self._mode = mode
--> 329 self.format = self.ds.data_model
330 self._filename = self.ds.filepath()
331 self.is_remote = is_remote_uri(self._filename)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:391, in NetCDF4DataStore.ds(self)
389 @property
390 def ds(self):
--> 391 return self._acquire()
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:385, in NetCDF4DataStore._acquire(self, needs_lock)
384 def _acquire(self, needs_lock=True):
--> 385 with self._manager.acquire_context(needs_lock) as root:
386 ds = _nc4_require_group(root, self._group, self._mode)
387 return ds
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/contextlib.py:137, in _GeneratorContextManager.__enter__(self)
135 del self.args, self.kwds, self.func
136 try:
--> 137 return next(self.gen)
138 except StopIteration:
139 raise RuntimeError("generator didn't yield") from None
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:198, in CachingFileManager.acquire_context(self, needs_lock)
195 @contextlib.contextmanager
196 def acquire_context(self, needs_lock=True):
197 """Context manager for acquiring a file."""
--> 198 file, cached = self._acquire_with_cache_info(needs_lock)
199 try:
200 yield file
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:216, in CachingFileManager._acquire_with_cache_info(self, needs_lock)
214 kwargs = kwargs.copy()
215 kwargs["mode"] = self._mode
--> 216 file = self._opener(*self._args, **kwargs)
217 if self._mode == "w":
218 # ensure file doesn't get overridden when opened again
219 self._mode = "a"
File src/netCDF4/_netCDF4.pyx:2521, in netCDF4._netCDF4.Dataset.__init__()
File src/netCDF4/_netCDF4.pyx:2158, in netCDF4._netCDF4._ensure_nc_success()
FileNotFoundError: [Errno 2] No such file or directory: '/home/docs/checkouts/readthedocs.org/user_builds/clisops/checkouts/stable/docs/notebooks/cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc'
[12]:
outputs = subset(
ds=ds,
time_components="year: 2010, 2020, 2030|month: 12, 1, 2",
output_type="xarray",
)
print(f"There is only {len(outputs)} output.")
outputs[0]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[12], line 2
1 outputs = subset(
----> 2 ds=ds,
3 time_components="year: 2010, 2020, 2030|month: 12, 1, 2",
4 output_type="xarray",
5 )
7 print(f"There is only {len(outputs)} output.")
8 outputs[0]
NameError: name 'ds' is not defined
Using parameter classes
[13]:
from clisops.parameter import (
level_interval,
level_series,
time_components,
time_interval,
time_series,
)
[14]:
ds = xr.open_mfdataset(tas_files, use_cftime=True, combine="by_coords")
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:210, in CachingFileManager._acquire_with_cache_info(self, needs_lock)
209 try:
--> 210 file = self._cache[self._key]
211 except KeyError:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/lru_cache.py:56, in LRUCache.__getitem__(self, key)
55 with self._lock:
---> 56 value = self._cache[key]
57 self._cache.move_to_end(key)
KeyError: [<class 'netCDF4._netCDF4.Dataset'>, ('/home/docs/checkouts/readthedocs.org/user_builds/clisops/checkouts/stable/docs/notebooks/cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc',), 'r', (('clobber', True), ('diskless', False), ('format', 'NETCDF4'), ('persist', False)), '60ca1b04-d054-44d9-a14b-f9371f802564']
During handling of the above exception, another exception occurred:
FileNotFoundError Traceback (most recent call last)
Cell In[14], line 1
----> 1 ds = xr.open_mfdataset(tas_files, use_cftime=True, combine="by_coords")
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:983, in open_mfdataset(paths, chunks, concat_dim, compat, preprocess, engine, data_vars, coords, combine, parallel, join, attrs_file, combine_attrs, **kwargs)
980 open_ = open_dataset
981 getattr_ = getattr
--> 983 datasets = [open_(p, **open_kwargs) for p in paths]
984 closers = [getattr_(ds, "_close") for ds in datasets]
985 if preprocess is not None:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:983, in <listcomp>(.0)
980 open_ = open_dataset
981 getattr_ = getattr
--> 983 datasets = [open_(p, **open_kwargs) for p in paths]
984 closers = [getattr_(ds, "_close") for ds in datasets]
985 if preprocess is not None:
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/api.py:526, in open_dataset(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, inline_array, backend_kwargs, **kwargs)
514 decoders = _resolve_decoders_kwargs(
515 decode_cf,
516 open_backend_dataset_parameters=backend.open_dataset_parameters,
(...)
522 decode_coords=decode_coords,
523 )
525 overwrite_encoded_chunks = kwargs.pop("overwrite_encoded_chunks", None)
--> 526 backend_ds = backend.open_dataset(
527 filename_or_obj,
528 drop_variables=drop_variables,
529 **decoders,
530 **kwargs,
531 )
532 ds = _dataset_from_backend_dataset(
533 backend_ds,
534 filename_or_obj,
(...)
542 **kwargs,
543 )
544 return ds
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:577, in NetCDF4BackendEntrypoint.open_dataset(self, filename_or_obj, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, use_cftime, decode_timedelta, group, mode, format, clobber, diskless, persist, lock, autoclose)
557 def open_dataset(
558 self,
559 filename_or_obj,
(...)
574 autoclose=False,
575 ):
576 filename_or_obj = _normalize_path(filename_or_obj)
--> 577 store = NetCDF4DataStore.open(
578 filename_or_obj,
579 mode=mode,
580 format=format,
581 group=group,
582 clobber=clobber,
583 diskless=diskless,
584 persist=persist,
585 lock=lock,
586 autoclose=autoclose,
587 )
589 store_entrypoint = StoreBackendEntrypoint()
590 with close_on_error(store):
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:382, in NetCDF4DataStore.open(cls, filename, mode, format, group, clobber, diskless, persist, lock, lock_maker, autoclose)
376 kwargs = dict(
377 clobber=clobber, diskless=diskless, persist=persist, format=format
378 )
379 manager = CachingFileManager(
380 netCDF4.Dataset, filename, mode=mode, kwargs=kwargs
381 )
--> 382 return cls(manager, group=group, mode=mode, lock=lock, autoclose=autoclose)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:329, in NetCDF4DataStore.__init__(self, manager, group, mode, lock, autoclose)
327 self._group = group
328 self._mode = mode
--> 329 self.format = self.ds.data_model
330 self._filename = self.ds.filepath()
331 self.is_remote = is_remote_uri(self._filename)
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:391, in NetCDF4DataStore.ds(self)
389 @property
390 def ds(self):
--> 391 return self._acquire()
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/netCDF4_.py:385, in NetCDF4DataStore._acquire(self, needs_lock)
384 def _acquire(self, needs_lock=True):
--> 385 with self._manager.acquire_context(needs_lock) as root:
386 ds = _nc4_require_group(root, self._group, self._mode)
387 return ds
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/contextlib.py:137, in _GeneratorContextManager.__enter__(self)
135 del self.args, self.kwds, self.func
136 try:
--> 137 return next(self.gen)
138 except StopIteration:
139 raise RuntimeError("generator didn't yield") from None
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:198, in CachingFileManager.acquire_context(self, needs_lock)
195 @contextlib.contextmanager
196 def acquire_context(self, needs_lock=True):
197 """Context manager for acquiring a file."""
--> 198 file, cached = self._acquire_with_cache_info(needs_lock)
199 try:
200 yield file
File ~/checkouts/readthedocs.org/user_builds/clisops/conda/stable/lib/python3.11/site-packages/xarray/backends/file_manager.py:216, in CachingFileManager._acquire_with_cache_info(self, needs_lock)
214 kwargs = kwargs.copy()
215 kwargs["mode"] = self._mode
--> 216 file = self._opener(*self._args, **kwargs)
217 if self._mode == "w":
218 # ensure file doesn't get overridden when opened again
219 self._mode = "a"
File src/netCDF4/_netCDF4.pyx:2521, in netCDF4._netCDF4.Dataset.__init__()
File src/netCDF4/_netCDF4.pyx:2158, in netCDF4._netCDF4._ensure_nc_success()
FileNotFoundError: [Errno 2] No such file or directory: '/home/docs/checkouts/readthedocs.org/user_builds/clisops/checkouts/stable/docs/notebooks/cmip5/tas_Amon_HadGEM2-ES_rcp85_r1i1p1_200512-203011.nc'
[15]:
outputs = subset(
ds=ds,
time=time_interval("2007-01-01T00:00:00", "2200-12-30T00:00:00"),
time_components=time_components(month=["dec", "jan", "feb"]),
output_type="xarray",
)
print(f"There is only {len(outputs)} output.")
outputs[0]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[15], line 2
1 outputs = subset(
----> 2 ds=ds,
3 time=time_interval("2007-01-01T00:00:00", "2200-12-30T00:00:00"),
4 time_components=time_components(month=["dec", "jan", "feb"]),
5 output_type="xarray",
6 )
8 print(f"There is only {len(outputs)} output.")
9 outputs[0]
NameError: name 'ds' is not defined