Source code for IceAdvect.io

"""
Input/output functions for reading velocity data
"""

import os
import pathlib
import xarray as xr
from . import dataset
from . import netcdf
from . import geotiff

# set environmental variable for anonymous s3 access
os.environ["AWS_NO_SIGN_REQUEST"] = "YES"


[docs] def open_dataset( filename: str, mapping: dict | None = None, chunks: int | dict | str | None = None, format: str | None = None, **kwargs, ) -> xr.Dataset: """Open a file as an xarray Dataset Parameters ---------- filename: str Path to file mapping: dict or None, default None Dictionary mapping standard variable names to those in the file chunks: int, dict, str, or None, default None variable chunk sizes for dask (see ``xarray.open_dataset``) format: str or None, default None File format for xarray to use when opening the dataset - ``'netCDF4'``: netCDF4 file - ``'geotiff'``: geoTIFF file - ``None``: infer from file extension kwargs: dict additional keyword arguments for opening files Returns ------- ds: xr.Dataset xarray Dataset """ nc = ( ".nc", ".nc4", ".h5", ".hdf5", ) tiff = ( ".tif", ".tiff", ".geotiff", ".cog", ) if format == "netCDF4" and isinstance(filename, list): return netcdf.open_mfdataset( filename, mapping=mapping, chunks=chunks, **kwargs, ) elif format == "netCDF4" or pathlib.Path(filename).suffix in nc: return netcdf.open_dataset( filename, mapping=mapping, chunks=chunks, **kwargs, ) elif format == "geotiff" and isinstance(filename, list): return geotiff.open_mfdataset( filename, mapping=mapping, chunks=chunks, **kwargs, ) elif format == "geotiff" or pathlib.Path(filename).suffix in tiff: return geotiff.open_dataset( filename, chunks=chunks, **kwargs, ) elif isinstance(filename, list): return xr.open_mfdataset(filename, chunks=chunks, **kwargs) else: return xr.open_dataset(filename, chunks=chunks, **kwargs)