Source code for dantro.data_loaders.load_xarray

"""Defines a loader mixin to load xarray objects"""

import xarray as xr

from ..containers import XrDataContainer, PassthroughContainer
from ._tools import add_loader

# -----------------------------------------------------------------------------

[docs]class XarrayLoaderMixin: """Supplies functionality to load xarray objects""" @add_loader(TargetCls=XrDataContainer) def _load_xr_dataarray(filepath: str, *, TargetCls: type, load_completely: bool=False, **load_kwargs ) -> XrDataContainer: """Loads an xr.DataArray from a netcdf file into an XrDataContainer. Args: filepath (str): Where the xarray-dumped netcdf file is located TargetCls (type): The class constructor load_completely (bool, optional): If true, will call .load() on the loaded DataArray to load it completely into memory **load_kwargs: Passed on to xr.load_dataarray, see there for kwargs Returns: XrDataContainer: The reconstructed XrDataContainer """ da = xr.load_dataarray(filepath, **load_kwargs) if load_completely: da = da.load() # Create the XrDataContainer, carrying over attributes return TargetCls(data=da, attrs=da.attrs) @add_loader(TargetCls=PassthroughContainer) def _load_xr_dataset(filepath: str, *, TargetCls: type, load_completely: bool=False, **load_kwargs ) -> PassthroughContainer: """Loads an xr.Dataset from a netcdf file into a PassthroughContainer. .. note:: As there is no proper equivalent of a dataset in dantro (yet), and unpacking the dataset into a dantro group would reduce functionality, the PassthroughContainer is used here. It should behave almost the same as an xr.Dataset. Args: filepath (str): Where the xarray-dumped netcdf file is located TargetCls (type): The class constructor load_completely (bool, optional): If true, will call .load() on the loaded xr.Dataset to load it completely into memory. **load_kwargs: Passed on to xr.load_dataarray, see there for kwargs Returns: PassthroughContainer: The reconstructed XrDataset, stored in a passthrough container. """ ds = xr.load_dataset(filepath, **load_kwargs) if load_completely: ds = ds.load() # Create the PassthroughContainer, carrying over dataset attributes return TargetCls(data=ds, attrs=ds.attrs)