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)
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
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
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]
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)
def ug(): return PyGrid.from_netCDF(ug_data()[0], ug_data()[1], grid_topology=ug_topology())
def sg(): return PyGrid.from_netCDF(sg_data()[0], sg_data()[1], grid_topology=sg_topology())
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)
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)