def __init__(self): from .base import AbstractFunction self.Children = [] for sc in itersubclasses(AbstractFunction): if sc.Group == self.__class__: self.Children.append(sc)
def get_crs_variable(metadata, to_search=None): found = [] variables = metadata['variables'] for vname, var in list(variables.items()): if to_search is not None: if vname not in to_search: continue for potential in itersubclasses(CFCoordinateReferenceSystem): try: crs = potential.load_from_metadata(vname, metadata) found.append(crs) break except ProjectionDoesNotMatch: continue fset = set([f.name for f in found]) if len(fset) > 1: msg = 'Multiple coordinate systems found. There should be only one.' raise ValueError(msg) elif len(fset) == 0: crs = None else: crs = found[0] return crs
def get_parameters(self): ret = [] for sc in itersubclasses(parms.AbstractParameter): if sc not in [parms.AbstractBooleanParameter,parms.AbstractEnvironmentalParameter]: # if issubclass(sc,parms.AbstractEnvironmentalParameter): # ret_env.append(sc) # else: ret.append(sc) return(ret)
def get_crs(self): crs = None for potential in itersubclasses(CFCoordinateReferenceSystem): try: crs = potential.load_from_metadata(get_tuple(self.rd.variable)[0], self.rd.source_metadata) break except ProjectionDoesNotMatch: continue return crs
def get_potentials(): import library potentials = [] for Sc in itersubclasses(OcgFunction): if Sc not in [OcgArgFunction, OcgCvArgFunction]: sc = Sc() potentials.append((sc.name, sc.text)) return (potentials)
def get_potentials(): import library potentials = [] for Sc in itersubclasses(OcgFunction): if Sc not in [OcgArgFunction,OcgCvArgFunction]: sc = Sc() potentials.append((sc.name,sc.text)) return(potentials)
def _get_crs_(self): crs = None for potential in itersubclasses(CFCoordinateReferenceSystem): try: crs = potential.load_from_metadata(self.variable,self._source_metadata) break except ProjectionDoesNotMatch: continue return(crs)
def get_potentials(): """Left in to support HTML query page. Does not support argumented functions.""" import library potentials = [] for Sc in itersubclasses(OcgFunction): if Sc not in [OcgArgFunction,OcgCvArgFunction]: sc = Sc() potentials.append((sc.name,sc.text)) return(potentials)
def get_potentials(): """Left in to support HTML query page. Does not support argumented functions.""" import library potentials = [] for Sc in itersubclasses(OcgFunction): if Sc not in [OcgArgFunction, OcgCvArgFunction]: sc = Sc() potentials.append((sc.name, sc.text)) return (potentials)
def register_icclim(function_registry): """ Register ICCLIM indices. :param function_registry: The target :class:`FunctionRegistry` object to hold ICCLIM index references. :type function_registry: :class:`FunctionRegistery` """ from ocgis.contrib import library_icclim for subclass in itersubclasses(library_icclim.AbstractIcclimFunction): function_registry.add_function(subclass)
def __init__(self): from base import OcgFunction assert(self.name) import library self.Children = [] for sc in itersubclasses(OcgFunction): if sc.Group == self.__class__: self.Children.append(sc)
def __init__(self): from base import OcgFunction assert (self.name) import library self.Children = [] for sc in itersubclasses(OcgFunction): if sc.Group == self.__class__: self.Children.append(sc)
def get_parameters(self): ret = [] for sc in itersubclasses(parms.AbstractParameter): if sc not in [ parms.AbstractBooleanParameter, parms.AbstractEnvironmentalParameter ]: # if issubclass(sc,parms.AbstractEnvironmentalParameter): # ret_env.append(sc) # else: ret.append(sc) return (ret)
def get_projection(dataset): projs = [] for r in itersubclasses(DatasetSpatialReference): try: projs.append(r(dataset)) except NoProjectionFound: continue if len(projs) == 1: ret = projs[0] elif len(projs) == 0: ret = WGS84() else: raise(MultipleProjectionsFound) return(ret)
def get_projection(dataset): projs = [] for r in itersubclasses(DatasetSpatialReference): try: projs.append(r.init_from_dataset(dataset)) except NoProjectionFound: continue if len(projs) == 1: ret = projs[0] elif len(projs) == 0: warn('no projection information found assuming WGS84') ret = WGS84() else: raise (MultipleProjectionsFound) return (ret)
def get_projection(dataset): projs = [] for r in itersubclasses(DatasetSpatialReference): try: projs.append(r.init_from_dataset(dataset)) except NoProjectionFound: continue if len(projs) == 1: ret = projs[0] elif len(projs) == 0: warn('no projection information found assuming WGS84') ret = WGS84() else: raise(MultipleProjectionsFound) return(ret)
def test_standard_AbstractIcclimFunction(self): shapes = ([('month',), 12],[('month', 'year'), 24],[('year',),2]) ocgis.env.OVERWRITE = True keys = set(library_icclim._icclim_function_map.keys()) for klass in [ AbstractIcclimUnivariateSetFunction, AbstractIcclimMultivariateFunction]: for subclass in itersubclasses(klass): keys.remove(subclass.key) self.assertEqual([('month',),('month','year'),('year',)],subclass._allowed_temporal_groupings) for cg in CalcGrouping.iter_possible(): calc = [{'func':subclass.key,'name':subclass.key.split('_')[1]}] if klass == AbstractIcclimUnivariateSetFunction: rd = self.test_data.get_rd('cancm4_tas') rd.time_region = {'year':[2001,2002]} calc = [{'func':subclass.key,'name':subclass.key.split('_')[1]}] else: tasmin = self.test_data.get_rd('cancm4_tasmin_2001') tasmax = self.test_data.get_rd('cancm4_tasmax_2001') rd = [tasmin,tasmax] for r in rd: r.time_region = {'year':[2001,2002]} calc[0].update({'kwds':{'tasmin':'tasmin','tasmax':'tasmax'}}) try: ops = ocgis.OcgOperations(dataset=rd, output_format='nc', calc=calc, calc_grouping=cg, geom=[3.39,40.62,10.54,52.30]) ret = ops.execute() to_test = None for shape in shapes: if shape[0] == cg: to_test = shape[1] with nc_scope(ret) as ds: var = ds.variables[calc[0]['name']] self.assertEqual(var.dtype,subclass.dtype) self.assertEqual(var.shape,(to_test,5,4)) except DefinitionValidationError as e: if e.message.startswith('''OcgOperations validation raised an exception on the argument/operation "calc_grouping" with the message: The following temporal groupings are supported for ICCLIM: [('month',), ('month', 'year'), ('year',)]. The requested temporal group is:'''): pass else: raise(e) self.assertEqual(len(keys),0)
def get_crs_variable(metadata, rotated_pole_priority, to_search=None): found = [] variables = metadata['variables'] for vname, var in list(variables.items()): if to_search is not None: if vname not in to_search: continue for potential in itersubclasses(CFCoordinateReferenceSystem): try: crs = potential.load_from_metadata(vname, metadata, strict=False) found.append(crs) break except ProjectionDoesNotMatch: continue fset = set([f.name for f in found]) if len(fset) > 1: msg = 'Multiple coordinate systems found. There should be only one.' raise ValueError(msg) elif len(fset) == 0: crs = None else: crs = found[0] # Allow spherical coordinate systems to overload rotated pole if they are present in the metadata. if not rotated_pole_priority and isinstance(crs, CFRotatedPole): try: crs = CFSpherical.load_from_metadata(None, metadata, depth=2) except ProjectionDoesNotMatch: # No spherical coordinate system data available. Fall back on previous crs. pass # If there is no CRS, check for OCGIS coordinate systems. if crs is None: try: crs = AbstractProj4CRS.load_from_metadata(metadata) except ProjectionDoesNotMatch: pass return crs
def get_operations(self): """ :returns: An operations objects created by parsing the query string. :rtype: :class:`ocgis.api.operations.OcgOperations` """ pmap = {klass.name: klass for klass in itersubclasses(AbstractParameter)} kwds = {} kwds[Dataset.name] = Dataset.from_query(self) for k, v in self.query_dict.iteritems(): try: kwds[k] = pmap[k].from_query(self) except KeyError: # Some parameters require arguments different from the parameter name. if k not in self._expected_missing_keys: raise ops = OcgOperations(**kwds) return ops
def get_projection(dataset): projs = [] for r in itersubclasses(DatasetSpatialReference): try: projs.append(r.init_from_dataset(dataset)) except NoProjectionFound: continue if len(projs) == 1: ret = projs[0] elif len(projs) == 0: try: files = dataset._files except AttributeError: files = 'NA' ocgis_lh('No projection information found assuming WGS84: {0}'.format(files), 'projection', logging.WARN) ret = WGS84() else: raise(MultipleProjectionsFound) return(ret)
def get_projection(dataset): projs = [] for r in itersubclasses(DatasetSpatialReference): try: projs.append(r.init_from_dataset(dataset)) except NoProjectionFound: continue if len(projs) == 1: ret = projs[0] elif len(projs) == 0: try: files = dataset._files except AttributeError: files = 'NA' ocgis_lh( 'No projection information found assuming WGS84: {0}'.format( files), 'projection', logging.WARN) ret = WGS84() else: raise (MultipleProjectionsFound) return (ret)
def test_calculate(self): klasses = list(itersubclasses(AbstractIcclimPercentileArrayIndice)) # There are six classes to test. self.assertEqual(len(klasses), 6) for mod in (1, 2): field = self.get_field(ntime=365) # Values less than 1 mm/day will be masked inside icclim. # var = field.variables.first() var = field.get_by_tag(TagName.DATA_VARIABLES)[0] var.get_value()[:] = var.get_value() * mod tgd = field.temporal.get_grouping(['month']) for klass in klasses: c = klass(field=field, tgd=tgd) res = c.execute() self.assertIsInstance(res, VariableCollection) dv = res.first() # Output units are always mm/day. if isinstance(c, IcclimR75pTOT): self.assertTrue(get_are_units_equivalent((dv.cfunits, get_units_object('mm/day'))))
def get_operations(self): """ :returns: An operations objects created by parsing the query string. :rtype: :class:`ocgis.driver.operations.OcgOperations` """ pmap = { klass.name: klass for klass in itersubclasses(AbstractParameter) } kwds = {} kwds[Dataset.name] = Dataset.from_query(self) for k, v in self.query_dict.items(): try: kwds[k] = pmap[k].from_query(self) except KeyError: # Some parameters require arguments different from the parameter name. if k not in self._expected_missing_keys: raise ops = OcgOperations(**kwds) return ops
def get_parameters(): ret = [] for sc in itersubclasses(AbstractParameter): if not sc.__name__.startswith('Abstract'): ret.append(sc) return (ret)
def get_parameter_class(name): for sc in itersubclasses(AbstractParameter): if not sc.__name__.startswith('Abstract'): if sc.name == name: return(sc)
def get_parameters(): ret = [] for sc in itersubclasses(AbstractParameter): if not sc.__name__.startswith('Abstract'): ret.append(sc) return(ret)
def get_parameter_class(name): for sc in itersubclasses(AbstractParameter): if not sc.__name__.startswith('Abstract'): if sc.name == name: return (sc)
def get_parameters(self): ret = [] for sc in itersubclasses(parms.AbstractParameter): if sc != parms.AbstractBooleanParameter: ret.append(sc) return(ret)
def get_parameters(self): ret = [] for sc in itersubclasses(parms.AbstractParameter): if sc != parms.AbstractBooleanParameter: ret.append(sc) return (ret)