Ejemplo n.º 1
0
    def from_netCDF(cls,
                    filename=None,
                    dataset=None,
                    grid_topology=None,
                    units=None,
                    time=None,
                    ice_concentration=None,
                    grid=None,
                    grid_file=None,
                    data_file=None,
                    **kwargs):
        if filename is not None:
            data_file = filename
            grid_file = filename

        if grid is None:
            grid = PyGrid.from_netCDF(grid_file, grid_topology=grid_topology)

        if ice_concentration is None:
            ice_concentration = (IceConcentration.from_netCDF(
                filename=filename,
                dataset=dataset,
                data_file=data_file,
                grid_file=grid_file,
                time=time,
                grid=grid,
                **kwargs))

        return cls(ice_concentration=ice_concentration, **kwargs)
Ejemplo n.º 2
0
    def test_construction(self, sg_data, sg_topology):
        filename = sg_data[0]
        dataset = sg_data[1]
        grid_topology = sg_topology
        sg = PyGrid_S.from_netCDF(filename,
                                  dataset,
                                  grid_topology=grid_topology)
        assert sg.filename == filename

        sg2 = PyGrid_S.from_netCDF(filename)
        assert sg2.filename == filename

        sg3 = PyGrid.from_netCDF(filename,
                                 dataset,
                                 grid_topology=grid_topology)
        sg4 = PyGrid.from_netCDF(filename)
        print sg3.shape
        print sg4.shape
        assert sg == sg3
        assert sg2 == sg4
Ejemplo n.º 3
0
    def test_construction(self, ug_data, ug_topology):
        filename = ug_data[0]
        dataset = ug_data[1]
        grid_topology = ug_topology
        ug = PyGrid_U.from_netCDF(filename,
                                  dataset,
                                  grid_topology=grid_topology)
        #         assert ug.filename == filename
        #         assert isinstance(ug.node_lon, nc.Variable)
        #         assert ug.node_lon.name == 'lonc'

        ug2 = PyGrid_U.from_netCDF(filename)
        assert ug2.filename == filename
        #         assert isinstance(ug2.node_lon, nc.Variable)
        #         assert ug2.node_lon.name == 'lon'

        ug3 = PyGrid.from_netCDF(filename,
                                 dataset,
                                 grid_topology=grid_topology)
        ug4 = PyGrid.from_netCDF(filename)
        print ug3.shape
        print ug4.shape
        assert ug == ug3
        assert ug2 == ug4
Ejemplo n.º 4
0
    def test_construction(self):

        data = sinusoid['u'][:]
        grid = PyGrid.from_netCDF(dataset=sinusoid)
        time = None

        u = GriddedProp(name='u',
                        units='m/s',
                        data=data,
                        grid=grid,
                        time=time,
                        data_file='staggered_sine_channel.nc',
                        grid_file='staggered_sine_channel.nc')

        curr_file = os.path.join(s_data, 'staggered_sine_channel.nc')
        k = GriddedProp.from_netCDF(filename=curr_file, varname='u', name='u')
        assert k.name == u.name
        assert k.units == 'm/s'
        # fixme: this was failing
        # assert k.time == u.time
        assert k.data[0, 0] == u.data[0, 0]
Ejemplo n.º 5
0
            def wrapper(*args, **kws):
                def _mod(n):
                    k = kws
                    s = shared
                    return (n in s) and ((n not in k) or
                                         (n in k and k[n] is None))

                if 'filename' in kws and kws['filename'] is not None:
                    kws['data_file'] = kws['grid_file'] = kws['filename']
                if _mod('dataset'):
                    if 'grid_file' in kws and 'data_file' in kws:
                        if kws['grid_file'] == kws['data_file']:
                            ds = dg = _get_dataset(kws['grid_file'])
                        else:
                            ds = _get_dataset(kws['data_file'])
                            dg = _get_dataset(kws['grid_file'])
                    kws['dataset'] = ds
                else:
                    if 'grid_file' in kws and kws['grid_file'] is not None:
                        dg = _get_dataset(kws['grid_file'])
                    else:
                        dg = kws['dataset']
                    ds = kws['dataset']
                if _mod('grid'):
                    gt = kws.get('grid_topology', None)
                    kws['grid'] = PyGrid.from_netCDF(kws['grid_file'],
                                                     dataset=dg,
                                                     grid_topology=gt)
#                 if kws.get('varnames', None) is None:
#                     varnames = cls._gen_varnames(kws['data_file'],
#                                                  dataset=ds)
#                 if _mod('time'):
#                     time = Time.from_netCDF(filename=kws['data_file'],
#                                             dataset=ds,
#                                             varname=data)
#                     kws['time'] = time
                return func(*args, **kws)
Ejemplo n.º 6
0
def ug():
    return PyGrid.from_netCDF(ug_data()[0],
                              ug_data()[1],
                              grid_topology=ug_topology())
Ejemplo n.º 7
0
def sg():
    return PyGrid.from_netCDF(sg_data()[0],
                              sg_data()[1],
                              grid_topology=sg_topology())
Ejemplo n.º 8
0
    def from_netCDF(cls,
                    filename=None,
                    varnames=None,
                    grid_topology=None,
                    name=None,
                    units=None,
                    time=None,
                    grid=None,
                    depth=None,
                    data_file=None,
                    grid_file=None,
                    dataset=None,
                    load_all=False,
                    **kwargs):
        '''
        Allows one-function creation of a GridVectorProp from a file.

        :param filename: Default data source. Parameters below take precedence
        :param varnames: Names of the variables in the data source file
        :param grid_topology: Description of the relationship between grid attributes and variable names.
        :param name: Name of property
        :param units: Units
        :param time: Time axis of the data
        :param data: Underlying data source
        :param grid: Grid that the data corresponds with
        :param dataset: Instance of open Dataset
        :param data_file: Name of data source file
        :param grid_file: Name of grid source file
        :type filename: string
        :type varnames: [] of string
        :type grid_topology: {string : string, ...}
        :type name: string
        :type units: string
        :type time: [] of datetime.datetime, netCDF4 Variable, or Time object
        :type data: netCDF4.Variable or numpy.array
        :type grid: pysgrid or pyugrid
        :type dataset: netCDF4.Dataset
        :type data_file: string
        :type grid_file: string
        '''
        if filename is not None:
            data_file = filename
            grid_file = filename

        ds = None
        dg = None
        if dataset is None:
            if grid_file == data_file:
                ds = dg = _get_dataset(grid_file)
            else:
                ds = _get_dataset(data_file)
                dg = _get_dataset(grid_file)
        else:
            if grid_file is not None:
                dg = _get_dataset(grid_file)
            else:
                dg = dataset
            ds = dataset

        if grid is None:
            grid = PyGrid.from_netCDF(grid_file,
                                      dataset=dg,
                                      grid_topology=grid_topology)
        if varnames is None:
            varnames = cls._gen_varnames(data_file, dataset=ds)
        if name is None:
            name = cls.__name__ + str(cls._def_count)
            cls._def_count += 1
        data = ds[varnames[0]]
        if time is None:
            time = Time.from_netCDF(filename=data_file,
                                    dataset=ds,
                                    datavar=data)
        if depth is None:
            if (isinstance(grid, PyGrid_S) and len(data.shape) == 4
                    or (len(data.shape) == 3 and time is None)
                    or (isinstance(grid, PyGrid_U) and len(data.shape) == 3 or
                        (len(data.shape) == 2 and time is None))):
                from gnome.environment.environment_objects import Depth
                depth = Depth(surface_index=-1)
#             if len(data.shape) == 4 or (len(data.shape) == 3 and time is None):
#                 from gnome.environment.environment_objects import S_Depth
#                 depth = S_Depth.from_netCDF(grid=grid,
#                                             depth=1,
#                                             data_file=data_file,
#                                             grid_file=grid_file,
#                                             **kwargs)
        variables = OrderedCollection(dtype=EnvProp)
        for vn in varnames:
            if vn is not None:
                variables.append(
                    GriddedProp.from_netCDF(filename=filename,
                                            varname=vn,
                                            grid_topology=grid_topology,
                                            units=units,
                                            time=time,
                                            grid=grid,
                                            depth=depth,
                                            data_file=data_file,
                                            grid_file=grid_file,
                                            dataset=ds,
                                            load_all=load_all,
                                            **kwargs))
        if units is None:
            units = [v.units for v in variables]
            if all(u == units[0] for u in units):
                units = units[0]
        return cls(name=name,
                   filename=filename,
                   varnames=varnames,
                   grid_topology=grid_topology,
                   units=units,
                   time=time,
                   grid=grid,
                   depth=depth,
                   variables=variables,
                   data_file=data_file,
                   grid_file=grid_file,
                   dataset=ds,
                   load_all=load_all,
                   **kwargs)
Ejemplo n.º 9
0
    def from_netCDF(cls,
                    filename=None,
                    varname=None,
                    grid_topology=None,
                    name=None,
                    units=None,
                    time=None,
                    grid=None,
                    depth=None,
                    dataset=None,
                    data_file=None,
                    grid_file=None,
                    load_all=False,
                    fill_value=0,
                    **kwargs):
        '''
        Allows one-function creation of a GriddedProp from a file.

        :param filename: Default data source. Parameters below take precedence
        :param varname: Name of the variable in the data source file
        :param grid_topology: Description of the relationship between grid attributes and variable names.
        :param name: Name of property
        :param units: Units
        :param time: Time axis of the data
        :param data: Underlying data source
        :param grid: Grid that the data corresponds with
        :param depth: Depth axis object
        :param dataset: Instance of open Dataset
        :param data_file: Name of data source file
        :param grid_file: Name of grid source file
        :type filename: string
        :type varname: string
        :type grid_topology: {string : string, ...}
        :type name: string
        :type units: string
        :type time: [] of datetime.datetime, netCDF4 Variable, or Time object
        :type data: netCDF4.Variable or numpy.array
        :type grid: pysgrid or pyugrid
        :type depth: Depth, S_Depth or L_Depth
        :type dataset: netCDF4.Dataset
        :type data_file: string
        :type grid_file: string
        '''
        if filename is not None:
            data_file = filename
            grid_file = filename

        ds = None
        dg = None
        if dataset is None:
            if grid_file == data_file:
                ds = dg = _get_dataset(grid_file)
            else:
                ds = _get_dataset(data_file)
                dg = _get_dataset(grid_file)
        else:
            if grid_file is not None:
                dg = _get_dataset(grid_file)
            else:
                dg = dataset
            ds = dataset

        if grid is None:
            grid = PyGrid.from_netCDF(grid_file,
                                      dataset=dg,
                                      grid_topology=grid_topology)
        if varname is None:
            varname = cls._gen_varname(data_file, dataset=ds)
            if varname is None:
                raise NameError(
                    'Default current names are not in the data file, must supply variable name'
                )
        data = ds[varname]
        if name is None:
            name = cls.__name__ + str(cls._def_count)
            cls._def_count += 1
        if units is None:
            try:
                units = data.units
            except AttributeError:
                units = None
        if time is None:
            time = Time.from_netCDF(filename=data_file,
                                    dataset=ds,
                                    datavar=data)
        if depth is None:
            if (isinstance(grid, PyGrid_S) and len(data.shape) == 4
                    or isinstance(grid, PyGrid_U) and len(data.shape) == 3):
                from gnome.environment.environment_objects import Depth
                depth = Depth(surface_index=-1)
#             if len(data.shape) == 4 or (len(data.shape) == 3 and time is None):
#                 from gnome.environment.environment_objects import S_Depth
#                 depth = S_Depth.from_netCDF(grid=grid,
#                                             depth=1,
#                                             data_file=data_file,
#                                             grid_file=grid_file,
#                                             **kwargs)
        if load_all:
            data = data[:]
        return cls(name=name,
                   units=units,
                   time=time,
                   data=data,
                   grid=grid,
                   depth=depth,
                   grid_file=grid_file,
                   data_file=data_file,
                   fill_value=fill_value,
                   varname=varname,
                   **kwargs)