HOME


sh-3ll 1.0
DIR:/opt/cloudlinux/venv/lib64/python3.11/site-packages/xarray/backends/
Upload File :
Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/xarray/backends/pynio_.py
import numpy as np

from .. import Variable
from ..core.utils import FrozenOrderedDict, Frozen, NDArrayMixin
from ..core import indexing

from .common import AbstractDataStore


class NioArrayWrapper(NDArrayMixin):
    def __init__(self, array, ds):
        self.array = array
        self._ds = ds  # make an explicit reference because pynio uses weakrefs

    @property
    def dtype(self):
        return np.dtype(self.array.typecode())

    def __getitem__(self, key):
        if key == () and self.ndim == 0:
            return self.array.get_value()
        return self.array[key]


class NioDataStore(AbstractDataStore):
    """Store for accessing datasets via PyNIO
    """
    def __init__(self, filename, mode='r'):
        import Nio
        self.ds = Nio.open_file(filename, mode=mode)

    def open_store_variable(self, var):
        data = indexing.LazilyIndexedArray(NioArrayWrapper(var, self.ds))
        return Variable(var.dimensions, data, var.attributes)

    def get_variables(self):
        return FrozenOrderedDict((k, self.open_store_variable(v))
                                 for k, v in self.ds.variables.iteritems())

    def get_attrs(self):
        return Frozen(self.ds.attributes)

    def get_dimensions(self):
        return Frozen(self.ds.dimensions)

    def close(self):
        self.ds.close()