From 038c0e6f35f36b6f65de1fbc2529b3d40557edcf Mon Sep 17 00:00:00 2001 From: Johannes Wagner Date: Tue, 28 Mar 2023 14:32:32 +0200 Subject: [PATCH 1/3] fix feature extraction when return value is a string --- audinterface/core/feature.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/audinterface/core/feature.py b/audinterface/core/feature.py index 0db0b9d..33de451 100644 --- a/audinterface/core/feature.py +++ b/audinterface/core/feature.py @@ -825,17 +825,14 @@ def _series_to_frame( index = utils.signal_index(starts, ends) - data = np.concatenate(data) - else: index = y.index dtype = self._values_to_frame(y[0]).dtype shape = (num, len(self.column_names)) - data = np.empty(shape, dtype) + data = [self._values_to_frame(values) for values in y] - for idx, values in enumerate(y): - data[idx, :] = self._values_to_frame(values) + data = np.concatenate(data) df = pd.DataFrame( data, From c6a49ce0da45ba0dc036327e784a289b2bf67e3f Mon Sep 17 00:00:00 2001 From: Johannes Wagner Date: Tue, 28 Mar 2023 14:34:33 +0200 Subject: [PATCH 2/3] fix flake --- audinterface/core/feature.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/audinterface/core/feature.py b/audinterface/core/feature.py index 33de451..02fc8cc 100644 --- a/audinterface/core/feature.py +++ b/audinterface/core/feature.py @@ -767,8 +767,6 @@ def _series_to_frame( dtype=object, ) - num = len(y) - if ( self.win_dur is not None and self.process_func_applies_sliding_window @@ -828,8 +826,6 @@ def _series_to_frame( else: index = y.index - dtype = self._values_to_frame(y[0]).dtype - shape = (num, len(self.column_names)) data = [self._values_to_frame(values) for values in y] data = np.concatenate(data) From 4a338e549a3b590abfe481937ee30e99e6be254b Mon Sep 17 00:00:00 2001 From: Johannes Wagner Date: Tue, 28 Mar 2023 14:55:18 +0200 Subject: [PATCH 3/3] TST: add test --- tests/test_feature.py | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/tests/test_feature.py b/tests/test_feature.py index 60c5da9..ba3b32a 100644 --- a/tests/test_feature.py +++ b/tests/test_feature.py @@ -937,29 +937,45 @@ def test_process_signal( @pytest.mark.parametrize( - 'index,expected_features', + 'feature, signal, sampling_rate, index, expected', [ ( + audinterface.Feature( + feature_names=('o1', 'o2', 'o3'), + process_func=feature_extractor, + channels=range(NUM_CHANNELS), + ), + SIGNAL_2D, + SAMPLING_RATE, audinterface.utils.signal_index( [pd.to_timedelta('0s'), pd.to_timedelta('1s')], [pd.to_timedelta('2s'), pd.to_timedelta('3s')], ), np.ones((2, NUM_CHANNELS * NUM_FEATURES)), ), + ( + audinterface.Feature( + feature_names=('string'), + process_func=lambda x, sr, idx: ['a', 'abc'][idx], + ), + SIGNAL_1D, + SAMPLING_RATE, + audinterface.utils.signal_index( + [pd.to_timedelta('0s'), pd.to_timedelta('1s')], + [pd.to_timedelta('2s'), pd.to_timedelta('3s')], + ), + np.array([['a'], ['abc']]), + ), ], ) -def test_process_signal_from_index(index, expected_features): - extractor = audinterface.Feature( - feature_names=('o1', 'o2', 'o3'), - process_func=feature_extractor, - channels=range(NUM_CHANNELS), - ) - features = extractor.process_signal_from_index( - SIGNAL_2D, - SAMPLING_RATE, +def test_process_signal_from_index(feature, signal, sampling_rate, index, + expected): + df = feature.process_signal_from_index( + signal, + sampling_rate, index, ) - np.testing.assert_array_equal(features.values, expected_features) + np.testing.assert_array_equal(df.values, expected) @pytest.mark.parametrize(