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()))
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)
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())
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, :, :])
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()))
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)
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()))