Example #1
0
 def test_calculation_iteration(self):
     field = self.get_field(with_value=True,month_count=2)
     field.variables.add_variable(Variable(value=field.variables['tmax'].value+5,
                                           name='tmin',alias='tmin'))
     field.temporal.name_uid = 'tid'
     field.level.name_uid = 'lid'
     field.spatial.geom.name_uid = 'gid'
     
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field,tgd=tgd,alias='my_mean')
     ret = mu.execute()
     
     kwds = copy(field.__dict__)
     kwds.pop('_raw')
     kwds.pop('_variables')
     kwds['temporal'] = tgd
     kwds['variables'] = ret
     cfield = DerivedField(**kwds)
     cfield.temporal.name_uid = 'tid'
     cfield.temporal.name_value = 'time'
     cfield.spatial.name_uid = 'gid'
                     
     sc = ShpCabinet()
     meta = sc.get_meta('state_boundaries')
     sp = SpatialCollection(meta=meta,key='state_boundaries',headers=constants.calc_headers)
     for row in sc.iter_geoms('state_boundaries'):
         sp.add_field(row['properties']['UGID'],row['geom'],cfield.variables.keys()[0],
                      cfield,properties=row['properties'])
     for ii,row in enumerate(sp.get_iter_dict()):
         if ii == 0:
             self.assertEqual(row[0].bounds,(-100.5, 39.5, -99.5, 40.5))
             self.assertDictEqual(row[1],{'lid': 1, 'ugid': 1, 'vid': 1, 'cid': 1, 'did': 1, 'year': 2000, 'time': datetime.datetime(2000, 1, 16, 0, 0), 'calc_alias': 'my_mean_tmax', 'value': 0.44808476666433006, 'month': 1, 'alias': 'tmax', 'variable': 'tmax', 'gid': 1, 'calc_key': 'mean', 'tid': 1, 'level': 50, 'day': 16})
         self.assertEqual(len(row),2)
         self.assertEqual(len(row[1]),len(constants.calc_headers))
Example #2
0
    def test_use_raw_values(self):
        field = self.get_field(with_value=True, month_count=2)
        field.variables.add_variable(Variable(value=field.variables['tmax'].value + 5,
                                              name='tmin', alias='tmin'))
        grouping = ['month']
        tgd = field.temporal.get_grouping(grouping)

        ur = [True, False]
        agg = [
            True,
            False
        ]

        for u, a in itertools.product(ur, agg):
            if a:
                cfield = field.get_spatially_aggregated()
                self.assertNotEqual(cfield.shape, cfield._raw.shape)
                self.assertEqual(set([r.value.shape for r in cfield.variables.values()]), set([(2, 60, 2, 1, 1)]))
                self.assertEqual(cfield.shape, (2, 60, 2, 1, 1))
            else:
                cfield = field
                self.assertEqual(set([r.value.shape for r in cfield.variables.values()]), set([(2, 60, 2, 3, 4)]))
                self.assertEqual(cfield.shape, (2, 60, 2, 3, 4))
            mu = Mean(field=cfield, tgd=tgd, alias='my_mean', use_raw_values=u)
            ret = mu.execute()
            if a:
                self.assertEqual(set([r.value.shape for r in ret.values()]), set([(2, 2, 2, 1, 1)]))
            else:
                self.assertEqual(set([r.value.shape for r in ret.values()]), set([(2, 2, 2, 3, 4)]))
Example #3
0
    def test_sample_size(self):
        field = self.get_field(with_value=True, month_count=2)
        grouping = ['month']
        tgd = field.temporal.get_grouping(grouping)
        mu = Mean(field=field, tgd=tgd, alias='my_mean', calc_sample_size=True,
                  dtype=np.float64)
        dvc = mu.execute()
        dv = dvc['my_mean']
        self.assertEqual(dv.name, 'mean')
        self.assertEqual(dv.alias, 'my_mean')
        self.assertIsInstance(dv, DerivedVariable)
        self.assertEqual(dv.value.shape, (2, 2, 2, 3, 4))
        self.assertNumpyAll(np.ma.mean(field.variables['tmax'].value[1, tgd.dgroups[1], 0, :, :], axis=0),
                            dv.value[1, 1, 0, :, :])

        ret = dvc['n_my_mean']
        self.assertNumpyAll(ret.value[0, 0, 0],
                            np.ma.array(data=[[31, 31, 31, 31], [31, 31, 31, 31], [31, 31, 31, 31]],
                                        mask=[[False, False, False, False], [False, False, False, False],
                                              [False, False, False, False]],
                                        fill_value=999999,
                                        dtype=ret.dtype))

        mu = Mean(field=field, tgd=tgd, alias='my_mean', calc_sample_size=False)
        dvc = mu.execute()
        self.assertNotIn('n_my_mean', dvc.keys())
Example #4
0
 def test_execute_units_are_maintained(self):
     field = self.get_field(with_value=True, month_count=2)
     units_kelvin = get_units_object('kelvin')
     self.assertEqual(field['tmax'].cfunits, units_kelvin)
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field, tgd=tgd, alias='my_mean', calc_sample_size=False, dtype=np.float64)
     dvc = mu.execute()
     self.assertEqual(dvc['my_mean'].cfunits, units_kelvin)
Example #5
0
 def test_two_variables(self):
     field = self.get_field(with_value=True, month_count=2)
     field.variables.add_variable(Variable(value=field.variables['tmax'].value + 5,
                                           name='tmin', alias='tmin'))
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field, tgd=tgd, alias='my_mean', dtype=np.float64)
     ret = mu.execute()
     self.assertEqual(len(ret), 2)
     self.assertAlmostEqual(5.0, abs(ret['my_mean_tmax'].value.mean() - ret['my_mean_tmin'].value.mean()))
Example #6
0
 def test_execute(self):
     field = self.get_field(with_value=True, month_count=2)
     self.assertIsInstance(field, Field)
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field, tgd=tgd, alias='my_mean', dtype=np.float64)
     dvc = mu.execute()
     dv = dvc['my_mean']
     self.assertEqual(dv.name, 'my_mean')
     self.assertEqual(dv.get_value().shape, (2, 2, 2, 3, 4))
     self.assertNumpyAll(np.mean(field['tmax'].get_value()[1, tgd.dgroups[1], 0, :, :], axis=0),
                         dv.get_value()[1, 1, 0, :, :])
Example #7
0
 def test_calculate(self):
     rd = self.test_data.get_rd('cancm4_tas')
     field = rd.get()
     field = field.get_field_slice({'y': slice(0, 10), 'x': slice(0, 10)})
     klasses = [IcclimTG, IcclimTN, IcclimTX]
     for klass in klasses:
         for calc_grouping in [['month'], ['month', 'year']]:
             tgd = field.temporal.get_grouping(calc_grouping)
             itg = klass(field=field, tgd=tgd)
             ret_icclim = itg.execute()
             mean = Mean(field=field, tgd=tgd)
             ret_ocgis = mean.execute()
             self.assertNumpyAll(ret_icclim[klass.key].get_value(), ret_ocgis['mean'].get_value())
Example #8
0
 def test_execute_units_are_maintained(self):
     field = self.get_field(with_value=True, month_count=2)
     units_kelvin = get_units_object('kelvin')
     self.assertEqual(field['tmax'].cfunits, units_kelvin)
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field,
               tgd=tgd,
               alias='my_mean',
               calc_sample_size=False,
               dtype=np.float64)
     dvc = mu.execute()
     self.assertEqual(dvc['my_mean'].cfunits, units_kelvin)
Example #9
0
 def test_Mean(self):
     field = self.get_field(with_value=True,month_count=2)
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field,tgd=tgd,alias='my_mean')
     dvc = mu.execute()
     dv = dvc['my_mean_tmax']
     self.assertEqual(dv.name,'mean')
     self.assertEqual(dv.alias,'my_mean_tmax')
     self.assertIsInstance(dv,DerivedVariable)
     self.assertEqual(dv.value.shape,(2,2,2,3,4))
     self.assertNumpyAll(np.ma.mean(field.variables['tmax'].value[1,tgd.dgroups[1],0,:,:],axis=0),
                         dv.value[1,1,0,:,:])
Example #10
0
    def test_execute_two_variables(self):
        """Test running a field with two variables through the mean calculation."""

        field = self.get_field(with_value=True, month_count=2)
        field.add_variable(
            Variable(value=field['tmax'].get_value() + 5, name='tmin', dimensions=field['tmax'].dimensions),
            is_data=True)
        grouping = ['month']
        tgd = field.temporal.get_grouping(grouping)
        mu = Mean(field=field, tgd=tgd, alias='my_mean', dtype=np.float64)
        ret = mu.execute()
        self.assertEqual(len(ret), 2)
        self.assertAlmostEqual(5.0,
                               abs(ret['my_mean_tmax'].get_value().mean() - ret['my_mean_tmin'].get_value().mean()))
Example #11
0
 def test_execute_file_only(self):
     rd = self.test_data.get_rd('cancm4_tas')
     field = rd.get()
     field = field.get_field_slice({'time': slice(10, 20), 'y': slice(20, 30), 'x': slice(40, 50)})
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     # Value should not be loaded at this point.
     self.assertEqual(field['tas']._value, None)
     mu = Mean(field=field, tgd=tgd, alias='my_mean', file_only=True)
     ret = mu.execute()
     # Value should still not be loaded.
     self.assertIsNone(field['tas']._value)
     # No value should be calculated for the calculation.
     self.assertIsNone(ret['my_mean']._value)
Example #12
0
 def test_execute(self):
     field = self.get_field(with_value=True, month_count=2)
     self.assertIsInstance(field, Field)
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field, tgd=tgd, alias='my_mean', dtype=np.float64)
     dvc = mu.execute()
     dv = dvc['my_mean']
     self.assertEqual(dv.name, 'my_mean')
     self.assertEqual(dv.get_value().shape, (2, 2, 2, 3, 4))
     self.assertNumpyAll(
         np.mean(field['tmax'].get_value()[1, tgd.dgroups[1], 0, :, :],
                 axis=0),
         dv.get_value()[1, 1, 0, :, :])
Example #13
0
 def test_execute_two_variables_sample_size(self):
     field = self.get_field(with_value=True, month_count=2)
     field.add_variable(
         Variable(value=field['tmax'].get_value() + 5, name='tmin', dimensions=field['tmax'].dimensions),
         is_data=True)
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field, tgd=tgd, alias='my_mean', dtype=np.float64, calc_sample_size=True)
     ret = mu.execute()
     self.assertEqual(len(ret), 4)
     self.assertAlmostEqual(5.0,
                            abs(ret['my_mean_tmax'].get_value().mean() - ret['my_mean_tmin'].get_value().mean()))
     self.assertEqual({'my_mean_tmax', 'n_my_mean_tmax', 'my_mean_tmin', 'n_my_mean_tmin'},
                      set(ret.keys()))
Example #14
0
    def test_calculation_iteration_two_calculations(self):
        field = self.get_field(with_value=True, month_count=2)
        field.variables.add_variable(Variable(value=field.variables['tmax'].value + 5, name='tmin', alias='tmin'))
        field.temporal.name_uid = 'tid'
        field.level.name_uid = 'lid'
        field.spatial.geom.name_uid = 'gid'

        grouping = ['month']
        tgd = field.temporal.get_grouping(grouping)
        mu = Mean(field=field, tgd=tgd, alias='my_mean', dtype=np.float64, add_parents=True)
        ret = mu.execute()
        thresh = Threshold(field=field, vc=ret, tgd=tgd, alias='a_treshold', add_parents=True,
                           parms={'operation': 'gte', 'threshold': 0.5})
        ret = thresh.execute()

        kwds = copy(field.__dict__)
        kwds.pop('_raw')
        kwds.pop('_variables')
        kwds.pop('_should_regrid')
        kwds.pop('_has_assigned_coordinate_system')
        kwds.pop('_attrs')
        kwds['name'] = kwds.pop('_name')
        kwds['temporal'] = tgd
        kwds['variables'] = ret
        cfield = DerivedField(**kwds)
        cfield.temporal.name_uid = 'tid'
        cfield.temporal.name_value = 'time'
        cfield.spatial.name_uid = 'gid'

        sc = ShpCabinet()
        meta = sc.get_meta('state_boundaries')
        sp = SpatialCollection(meta=meta, key='state_boundaries', headers=constants.HEADERS_CALC)
        for row in sc.iter_geoms('state_boundaries', as_spatial_dimension=True):
            sp.add_field(cfield, ugeom=row)

        cids = set()
        for ii, row in enumerate(sp.get_iter_dict(melted=True)):
            cids.update([row[1]['cid']])
            if ii == 0:
                self.assertEqual(row[0].bounds, (-100.5, 39.5, -99.5, 40.5))
                self.assertDictEqual(row[1], {'lid': 1, 'ugid': 1, 'vid': 1, 'cid': 1, 'did': 1, 'year': 2000,
                                              'time': datetime.datetime(2000, 1, 16, 0, 0),
                                              'calc_alias': 'my_mean_tmax', 'value': 0.44808476666433006, 'month': 1,
                                              'alias': 'tmax', 'variable': 'tmax', 'gid': 1, 'calc_key': 'mean',
                                              'tid': 1, 'level': 50, 'day': 16})
            self.assertEqual(len(row), 2)
            self.assertEqual(len(row[1]), len(constants.HEADERS_CALC))
        self.assertEqual(ii + 1, 2 * 2 * 2 * 3 * 4 * 51 * 4)
        self.assertEqual(len(cids), 4)
Example #15
0
 def test_file_only(self):
     rd = self.test_data.get_rd('cancm4_tas')
     field = rd.get()
     field = field[:, 10:20, :, 20:30, 40:50]
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     ## value should not be loaded at this point
     self.assertEqual(field.variables['tas']._value, None)
     mu = Mean(field=field, tgd=tgd, alias='my_mean', file_only=True)
     ret = mu.execute()
     ## value should still not be loaded
     self.assertEqual(field.variables['tas']._value, None)
     ## there should be no value in the variable present and attempts to load
     ## it should fail.
     with self.assertRaises(Exception):
         ret['my_mean_tas'].value
Example #16
0
    def test_execute_two_variables(self):
        """Test running a field with two variables through the mean calculation."""

        field = self.get_field(with_value=True, month_count=2)
        field.add_variable(Variable(value=field['tmax'].get_value() + 5,
                                    name='tmin',
                                    dimensions=field['tmax'].dimensions),
                           is_data=True)
        grouping = ['month']
        tgd = field.temporal.get_grouping(grouping)
        mu = Mean(field=field, tgd=tgd, alias='my_mean', dtype=np.float64)
        ret = mu.execute()
        self.assertEqual(len(ret), 2)
        self.assertAlmostEqual(
            5.0,
            abs(ret['my_mean_tmax'].get_value().mean() -
                ret['my_mean_tmin'].get_value().mean()))
Example #17
0
 def test_execute_file_only(self):
     rd = self.test_data.get_rd('cancm4_tas')
     field = rd.get()
     field = field.get_field_slice({
         'time': slice(10, 20),
         'y': slice(20, 30),
         'x': slice(40, 50)
     })
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     # Value should not be loaded at this point.
     self.assertEqual(field['tas']._value, None)
     mu = Mean(field=field, tgd=tgd, alias='my_mean', file_only=True)
     ret = mu.execute()
     # Value should still not be loaded.
     self.assertIsNone(field['tas']._value)
     # No value should be calculated for the calculation.
     self.assertIsNone(ret['my_mean']._value)
Example #18
0
    def test_execute_sample_size(self):
        field = self.get_field(with_value=True, month_count=2)
        grouping = ['month']
        tgd = field.temporal.get_grouping(grouping)
        mu = Mean(field=field,
                  tgd=tgd,
                  alias='my_mean',
                  calc_sample_size=True,
                  dtype=np.float64)
        dvc = mu.execute()
        dv = dvc['my_mean']
        self.assertEqual(dv.name, 'my_mean')
        self.assertEqual(dv.get_value().shape, (2, 2, 2, 3, 4))
        self.assertNumpyAll(
            np.mean(field['tmax'].get_value()[1, tgd.dgroups[1], 0, :, :],
                    axis=0),
            dv.get_value()[1, 1, 0, :, :])

        ret = dvc['n_my_mean']
        self.assertNumpyAll(
            ret.get_masked_value()[0, 0, 0],
            np.ma.array(data=[[31, 31, 31, 31], [31, 31, 31, 31],
                              [31, 31, 31, 31]],
                        mask=[[False, False, False, False],
                              [False, False, False, False],
                              [False, False, False, False]],
                        fill_value=999999,
                        dtype=ret.dtype))

        mu = Mean(field=field,
                  tgd=tgd,
                  alias='my_mean',
                  calc_sample_size=False)
        dvc = mu.execute()
        self.assertNotIn('n_my_mean', list(dvc.keys()))
Example #19
0
 def test_execute_two_variables_sample_size(self):
     field = self.get_field(with_value=True, month_count=2)
     field.add_variable(Variable(value=field['tmax'].get_value() + 5,
                                 name='tmin',
                                 dimensions=field['tmax'].dimensions),
                        is_data=True)
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     mu = Mean(field=field,
               tgd=tgd,
               alias='my_mean',
               dtype=np.float64,
               calc_sample_size=True)
     ret = mu.execute()
     self.assertEqual(len(ret), 4)
     self.assertAlmostEqual(
         5.0,
         abs(ret['my_mean_tmax'].get_value().mean() -
             ret['my_mean_tmin'].get_value().mean()))
     self.assertEqual(
         {
             'my_mean_tmax', 'n_my_mean_tmax', 'my_mean_tmin',
             'n_my_mean_tmin'
         }, set(ret.keys()))