Beispiel #1
0
    def test_multivariate_iteration(self):
        field = self.get_field(with_value=True, month_count=1)
        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'

        div = Divide(field=field, parms={'arr1': 'tmin', 'arr2': 'tmax'}, alias='some_division',
                     dtype=np.float64)
        ret = div.execute()

        cfield = DerivedMultivariateField(variables=ret, realization=field.realization, temporal=field.temporal,
                                          level=field.level,
                                          spatial=field.spatial, meta=field.meta, uid=field.uid)
        cfield.spatial.name_uid = 'gid'

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

        for ii, row in enumerate(sp.get_iter_dict(melted=True)):
            if ii == 0:
                self.assertDictEqual(row[1], {'lid': 1, 'ugid': 1, 'cid': 1, 'did': None, 'year': 2000,
                                              'time': datetime.datetime(2000, 1, 1, 12, 0),
                                              'calc_alias': 'some_division', 'value': 12.989774984574424, 'month': 1,
                                              'gid': 1, 'calc_key': 'divide', 'tid': 1, 'level': 50, 'day': 1})
        self.assertEqual(ii + 1, 2 * 31 * 2 * 3 * 4 * 51)
Beispiel #2
0
    def test_execute(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))
        dv = Divide(field=field, parms={'arr1': 'tmax', 'arr2': 'tmin'})
        ret = dv.execute()
        self.assertNumpyAllClose(ret['divide'].get_value(), field['tmax'].get_value() / field['tmin'].get_value())

        with self.assertRaises(SampleSizeNotImplemented):
            Divide(field=field, parms={'arr1': 'tmax', 'arr2': 'tmin'}, calc_sample_size=True)
Beispiel #3
0
 def test_Divide_grouped(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)
     dv = Divide(field=field,parms={'arr1':'tmax','arr2':'tmin'},tgd=tgd)
     ret = dv.execute()
     self.assertEqual(ret['divide'].value.shape,(2,2,2,3,4))
     self.assertNumpyAllClose(ret['divide'].value[0,1,1,:,2],
                              np.ma.array([0.0833001563436,0.0940192653632,0.0916398919876],
                                          mask=False,fill_value=1e20))
Beispiel #4
0
 def test_Divide_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']
     
     ur = [
           True,
           False
           ]
     agg = [
            True,
            False
            ]
     with_tgd = [
                 True,
                 False
                 ]
     
     for u,a,w in itertools.product(ur,agg,with_tgd):
         if w:
             tgd = field.temporal.get_grouping(grouping)
         else:
             tgd = None
         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))
         div = Divide(dtype=np.float32,field=cfield,parms={'arr1':'tmax','arr2':'tmin'},tgd=tgd,use_raw_values=u)
         ret = div.execute()
         if a:
             if w:
                 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, 60, 2, 1, 1)]))
         else:
             if w:
                 self.assertEqual(set([r.value.shape for r in ret.values()]),set([(2, 2, 2, 3, 4)]))
             else:
                 self.assertEqual(set([r.value.shape for r in ret.values()]),set([(2, 60, 2, 3, 4)]))
Beispiel #5
0
    def test_execute(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))
        dv = Divide(field=field, parms={'arr1': 'tmax', 'arr2': 'tmin'})
        ret = dv.execute()
        self.assertNumpyAllClose(
            ret['divide'].get_value(),
            field['tmax'].get_value() / field['tmin'].get_value())

        with self.assertRaises(SampleSizeNotImplemented):
            Divide(field=field,
                   parms={
                       'arr1': 'tmax',
                       'arr2': 'tmin'
                   },
                   calc_sample_size=True)
Beispiel #6
0
 def test_execute_temporal_grouping(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))
     grouping = ['month']
     tgd = field.temporal.get_grouping(grouping)
     dv = Divide(field=field,
                 parms={
                     'arr1': 'tmax',
                     'arr2': 'tmin'
                 },
                 tgd=tgd)
     ret = dv.execute()
     self.assertEqual(ret['divide'].get_value().shape, (2, 2, 2, 3, 4))
     self.assertNumpyAllClose(
         ret['divide'].get_masked_value()[0, 1, 1, :, 2],
         np.ma.array([0.0833001563436, 0.0940192653632, 0.0916398919876],
                     mask=False,
                     fill_value=1e20))