Exemple #1
0
    def __init__(self):
        from .base import AbstractFunction

        self.Children = []
        for sc in itersubclasses(AbstractFunction):
            if sc.Group == self.__class__:
                self.Children.append(sc)
Exemple #2
0
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
Exemple #3
0
    def __init__(self):
        from .base import AbstractFunction

        self.Children = []
        for sc in itersubclasses(AbstractFunction):
            if sc.Group == self.__class__:
                self.Children.append(sc)
Exemple #4
0
    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)
Exemple #5
0
 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
Exemple #6
0
    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)
Exemple #7
0
 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)
Exemple #8
0
 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)
Exemple #9
0
 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)
Exemple #10
0
    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)
Exemple #11
0
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)
Exemple #12
0
 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)
Exemple #13
0
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)
Exemple #14
0
    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)
Exemple #15
0
 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)
Exemple #16
0
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)
Exemple #17
0
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)
Exemple #18
0
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)
Exemple #20
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
Exemple #21
0
    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
Exemple #22
0
Fichier : nc.py Projet : NCPP/ocgis
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
Exemple #23
0
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)
Exemple #24
0
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)
Exemple #25
0
    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'))))
Exemple #26
0
    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
Exemple #27
0
def get_parameters():
    ret = []
    for sc in itersubclasses(AbstractParameter):
        if not sc.__name__.startswith('Abstract'):
            ret.append(sc)
    return (ret)
Exemple #28
0
def get_parameter_class(name):
    for sc in itersubclasses(AbstractParameter):
        if not sc.__name__.startswith('Abstract'):
            if sc.name == name:
                return(sc)
Exemple #29
0
def get_parameters():
    ret = []
    for sc in itersubclasses(AbstractParameter):
        if not sc.__name__.startswith('Abstract'):
            ret.append(sc)
    return(ret)
Exemple #30
0
def get_parameter_class(name):
    for sc in itersubclasses(AbstractParameter):
        if not sc.__name__.startswith('Abstract'):
            if sc.name == name:
                return (sc)
Exemple #31
0
 def get_parameters(self):
     ret = []
     for sc in itersubclasses(parms.AbstractParameter):
         if sc != parms.AbstractBooleanParameter:
             ret.append(sc)
     return(ret)
Exemple #32
0
 def get_parameters(self):
     ret = []
     for sc in itersubclasses(parms.AbstractParameter):
         if sc != parms.AbstractBooleanParameter:
             ret.append(sc)
     return (ret)