def test_calculate(self): ma = MovingWindow() np.random.seed(1) values = np.ma.array(np.random.rand(10), dtype=float).reshape(1, -1, 1, 1, 1) k = 5 ret = ma.calculate(values, k=k, mode='same', operation='mean') self.assertEqual(ret.shape, values.shape) desired = [[[[[0.37915362432069233]]], [[[0.3599483613984792]]], [[[0.317309867282206]]], [[[0.2523731852954507]]], [[[0.14556032888255327]]], [[[0.21464959932769387]]], [[[0.23353657964745986]]], [[[0.31194874828470864]]], [[[0.3668512866636864]]], [[[0.4270483117590249]]]]] desired = np.array(desired) self.assertNumpyAllClose(ret, desired) ret = ret.squeeze() values = values.squeeze() self.assertEqual(ret[4], np.mean(values[2:7]))
def test_execute(self): field = self.get_field(month_count=1, with_value=True) field = field.get_field_slice({'time': slice(0, 4)}) field['tmax'].get_value()[:] = 1 mask = field['tmax'].get_mask(create=True) mask[:, :, :, 1, 1] = True field['tmax'].set_mask(mask) for mode in ['same', 'valid']: for operation in ('mean', 'min', 'max', 'median', 'var', 'std'): parms = {'k': 3, 'mode': mode, 'operation': operation} ma = MovingWindow(field=field, parms=parms) vc = ma.execute() if mode == 'same': self.assertEqual(vc['moving_window'].get_value().shape, field['tmax'].shape) else: actual_mask = vc['moving_window'].get_mask() self.assertTrue(np.all(actual_mask[:, 0, :, :, :])) self.assertTrue(np.all(actual_mask[:, -1, :, :, :])) self.assertEqual(vc['moving_window'].get_value().shape, (2, 4, 2, 3, 4))