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)
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)
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))
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)]))
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)
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))