def test_traverse_invalidating(self): data = np.arange(5 * 3, dtype="f8").reshape(5, 3) original_data = data.copy() adjustments = {2: [Float64Multiply(0, 4, 0, 2, 2.0)]} adjusted_array = AdjustedArray(data, adjustments, float("nan")) for _ in adjusted_array.traverse(1, copy=False): pass assert_equal(data, original_data * 2) err_msg = "cannot traverse invalidated AdjustedArray" with pytest.raises(ValueError, match=err_msg): adjusted_array.traverse(1)
def test_copy(self): data = arange(5 * 3, dtype='f8').reshape(5, 3) original_data = data.copy() adjustments = {2: [Float64Multiply(0, 4, 0, 2, 2.0)]} adjusted_array = AdjustedArray(data, adjustments, float('nan')) traverse_copy = adjusted_array.copy() clean_copy = adjusted_array.copy() a_it = adjusted_array.traverse(2, copy=False) b_it = traverse_copy.traverse(2, copy=False) for a, b in zip(a_it, b_it): assert_equal(a, b) with self.assertRaises(ValueError) as e: adjusted_array.copy() assert_equal( str(e.exception), 'cannot copy invalidated AdjustedArray', ) # the clean copy should have the original data even though the # original adjusted array has it's data mutated in place assert_equal(clean_copy.data, original_data) assert_equal(adjusted_array.data, original_data * 2)
def test_array_views_arent_writable(self): data = arange(30, dtype=float).reshape(6, 5) adj_array = AdjustedArray(data, {}, float('nan')) for frame in adj_array.traverse(3): with self.assertRaises(ValueError): frame[0, 0] = 5.0
def test_array_views_arent_writable(self): data = arange(30, dtype=float).reshape(6, 5) adj_array = AdjustedArray(data, NOMASK, {}, float('nan')) for frame in adj_array.traverse(3): with self.assertRaises(ValueError): frame[0, 0] = 5.0
def test_traverse_invalidating(self): data = arange(5 * 3, dtype='f8').reshape(5, 3) original_data = data.copy() adjustments = {2: [Float64Multiply(0, 4, 0, 2, 2.0)]} adjusted_array = AdjustedArray(data, adjustments, float('nan')) for _ in adjusted_array.traverse(1, copy=False): pass assert_equal(data, original_data * 2) with self.assertRaises(ValueError) as e: adjusted_array.traverse(1) assert_equal( str(e.exception), 'cannot traverse invalidated AdjustedArray', )
def test_no_adjustments( self, name, data, lookback, adjustments, missing_value, perspective_offset, expected_output, ): array = AdjustedArray(data, adjustments, missing_value) for _ in range(2): # Iterate 2x ensure adjusted_arrays are re-usable. in_out = zip(array.traverse(lookback), expected_output) for yielded, expected_yield in in_out: check_arrays(yielded, expected_yield)
def test_invalid_lookback(self): data = arange(30, dtype=float).reshape(6, 5) adj_array = AdjustedArray(data, {}, float('nan')) with self.assertRaises(WindowLengthTooLong): adj_array.traverse(7) with self.assertRaises(WindowLengthNotPositive): adj_array.traverse(0) with self.assertRaises(WindowLengthNotPositive): adj_array.traverse(-1)
def test_invalid_lookback(self): data = arange(30, dtype=float).reshape(6, 5) adj_array = AdjustedArray(data, NOMASK, {}, float('nan')) with self.assertRaises(WindowLengthTooLong): adj_array.traverse(7) with self.assertRaises(WindowLengthNotPositive): adj_array.traverse(0) with self.assertRaises(WindowLengthNotPositive): adj_array.traverse(-1)
def test_overwrite_adjustment_cases( self, name, baseline, lookback, adjustments, missing_value, perspective_offset, expected, ): array = AdjustedArray(baseline, adjustments, missing_value) for _ in range(2): # Iterate 2x ensure adjusted_arrays are re-usable. window_iter = array.traverse( lookback, perspective_offset=perspective_offset, ) for yielded, expected_yield in zip_longest(window_iter, expected): check_arrays(yielded, expected_yield)
def test_copy(self): data = np.arange(5 * 3, dtype="f8").reshape(5, 3) original_data = data.copy() adjustments = {2: [Float64Multiply(0, 4, 0, 2, 2.0)]} adjusted_array = AdjustedArray(data, adjustments, float("nan")) traverse_copy = adjusted_array.copy() clean_copy = adjusted_array.copy() a_it = adjusted_array.traverse(2, copy=False) b_it = traverse_copy.traverse(2, copy=False) for a, b in zip(a_it, b_it): assert_equal(a, b) err_msg = "cannot copy invalidated AdjustedArray" with pytest.raises(ValueError, match=err_msg): adjusted_array.copy() # the clean copy should have the original data even though the # original adjusted array has it's data mutated in place assert_equal(clean_copy.data, original_data) assert_equal(adjusted_array.data, original_data * 2)