def __init__(self, **kwargs): # get the inputs electrodes, description, times, features = popargs( 'electrodes', 'description', 'times', 'features', kwargs) # Validate the shape of the inputs # Validate event times compared to features shape_validators = [] shape_validators.append( assertEqualShape(data1=features, data2=times, axes1=0, axes2=0, name1='feature_shape', name2='times', ignore_undetermined=True)) # Validate electrodes compared to features shape_validators.append( assertEqualShape(data1=features, data2=electrodes, axes1=1, axes2=0, name1='feature_shape', name2='electrodes', ignore_undetermined=True)) # Valided description compared to features shape_validators.append( assertEqualShape(data1=features, data2=description, axes1=2, axes2=0, name1='feature_shape', name2='description', ignore_undetermined=True)) # Raise an error if any of the shapes do not match raise_error = False error_msg = "" for sv in shape_validators: raise_error |= not sv.result if not sv.result: error_msg += sv.message + "\n" if raise_error: raise ValueError(error_msg) # Initialize the object super(FeatureExtraction, self).__init__(**kwargs) self.electrodes = electrodes self.description = description self.times = list(times) self.features = features
def test_DynamicTableRegion_shape_validation(self): # Create a test DynamicTable dt_spec = [ { 'name': 'foo', 'description': 'foo column' }, { 'name': 'bar', 'description': 'bar column' }, { 'name': 'baz', 'description': 'baz column' }, ] dt_data = [[1, 2, 3, 4, 5], [10.0, 20.0, 30.0, 40.0, 50.0], ['cat', 'dog', 'bird', 'fish', 'lizard']] columns = [ VectorData(name=s['name'], description=s['description'], data=d) for s, d in zip(dt_spec, dt_data) ] dt = DynamicTable("with_columns_and_data", "a test table", columns=columns) # Create test DynamicTableRegion dtr = DynamicTableRegion('dtr', [1, 2, 2], 'desc', table=dt) # Confirm that the shapes match res = assertEqualShape(dtr, np.arange(9).reshape(3, 3)) self.assertTrue(res.result)
def test_array_axis_index_out_of_bounds_single_axis(self): # Test too large frist axis d1 = np.arange(10).reshape(2, 5) d2 = np.arange(20).reshape(5, 2, 2) res = assertEqualShape(d1, d2, 4, 1) self.assertFalse(res.result) self.assertEqual(res.error, 'AXIS_OUT_OF_BOUNDS') self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (5, 2, 2)) self.assertTupleEqual(res.axes1, (4,)) self.assertTupleEqual(res.axes2, (1,))
def test_array_unequal_number_of_axes_for_comparison(self): # Test unequal num axes for comparison d1 = np.arange(10).reshape(2, 5) d2 = np.arange(20).reshape(5, 2, 2) res = assertEqualShape(d1, d2, [0, 1], 1) self.assertFalse(res.result) self.assertEqual(res.error, "NUM_AXES_ERROR") self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (5, 2, 2)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (1,))
def test_array_unequal_number_of_dimensions_check_multiple_axesy(self): # Test unequal num dims compare multiple axes d1 = np.arange(10).reshape(2, 5) d2 = np.arange(20).reshape(5, 2, 2) res = assertEqualShape(d1, d2, [0, 1], [1, 0]) self.assertTrue(res.result) self.assertIsNone(res.error) self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (5, 2, 2)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (1, 0))
def test_array_unequal_number_of_dimensions_check_one_axis_only(self): # Test unequal num dims compare one axis d1 = np.arange(10).reshape(2, 5) d2 = np.arange(20).reshape(2, 5, 2) res = assertEqualShape(d1, d2, 0, 0) self.assertTrue(res.result) self.assertIsNone(res.error) self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (2, 5, 2)) self.assertTupleEqual(res.axes1, (0,)) self.assertTupleEqual(res.axes2, (0,))
def test_array_unequal_number_of_dimensions(self): # Test unequal num dims d1 = np.arange(10).reshape(2, 5) d2 = np.arange(20).reshape(5, 2, 2) res = assertEqualShape(d1, d2) self.assertFalse(res.result) self.assertEqual(res.error, 'NUM_AXES_ERROR') self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (5, 2, 2)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (0, 1, 2))
def test_array_dimensions_mismatch(self): # Test unmatched d1 = np.arange(10).reshape(2, 5) d2 = np.arange(10).reshape(5, 2) res = assertEqualShape(d1, d2) self.assertFalse(res.result) self.assertEqual(res.error, 'AXIS_LEN_ERROR') self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ((0, 0), (1, 1))) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (5, 2)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (0, 1))
def test_DataChunkIterator_error_on_undetermined_axis(self): # Compare data chunk iterators with undetermined axis (error on undetermined axis) d1 = DataChunkIterator(data=np.arange(10).reshape(2, 5), maxshape=(None, 5)) d2 = DataChunkIterator(data=np.arange(10).reshape(2, 5)) res = assertEqualShape(d1, d2, ignore_undetermined=False) self.assertFalse(res.result) self.assertEqual(res.error, 'AXIS_LEN_ERROR') self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ((0, 0),)) self.assertTupleEqual(res.shape1, (None, 5)) self.assertTupleEqual(res.shape2, (2, 5)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (0, 1))
def test_DataChunkIterator_ignore_undetermined_axis(self): # Compare data chunk iterators with undetermined axis (ignore axis) d1 = DataChunkIterator(data=np.arange(10).reshape(2, 5), maxshape=(None, 5)) d2 = DataChunkIterator(data=np.arange(10).reshape(2, 5)) res = assertEqualShape(d1, d2, ignore_undetermined=True) self.assertTrue(res.result) self.assertIsNone(res.error) self.assertTupleEqual(res.ignored, ((0, 0),)) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (None, 5)) self.assertTupleEqual(res.shape2, (2, 5)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (0, 1))
def test_array_all_dimensions_match(self): # Test match d1 = np.arange(10).reshape(2, 5) d2 = np.arange(10).reshape(2, 5) res = assertEqualShape(d1, d2) self.assertTrue(res.result) self.assertIsNone(res.error) self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (2, 5)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (0, 1))
def test_DataChunkIterators_match(self): # Compare data chunk iterators d1 = DataChunkIterator(data=np.arange(10).reshape(2, 5)) d2 = DataChunkIterator(data=np.arange(10).reshape(2, 5)) res = assertEqualShape(d1, d2) self.assertTrue(res.result) self.assertIsNone(res.error) self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (2, 5)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (0, 1))
def test_array_axis_index_out_of_bounds_mutilple_axis(self): # Test too large second axis d1 = np.arange(10).reshape(2, 5) d2 = np.arange(20).reshape(5, 2, 2) res = assertEqualShape(d1, d2, [0, 1], [5, 0]) self.assertFalse(res.result) self.assertEqual(res.error, 'AXIS_OUT_OF_BOUNDS') self.assertTupleEqual(res.ignored, ()) self.assertTupleEqual(res.unmatched, ()) self.assertTupleEqual(res.shape1, (2, 5)) self.assertTupleEqual(res.shape2, (5, 2, 2)) self.assertTupleEqual(res.axes1, (0, 1)) self.assertTupleEqual(res.axes2, (5, 0))