amine@403: from array import array as array_ amine@403: amine@403: import numpy as np amine@400: import pytest amine@403: amine@405: from auditok import signal amine@405: amine@405: # from auditok import signal as signal_ amine@405: # from auditok import signal amine@257: amine@257: amine@400: @pytest.fixture amine@400: def setup_data(): amine@400: return b"012345679ABC" amine@257: amine@257: amine@400: @pytest.mark.parametrize( amine@400: "sample_width, expected", amine@400: [ amine@405: ( amine@405: 1, amine@405: [[48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]], amine@405: ), # int8_1channel amine@400: ( amine@400: 1, amine@400: [[48, 50, 52, 54, 57, 66], [49, 51, 53, 55, 65, 67]], amine@405: ), # int8_2channel amine@405: ( amine@405: 1, amine@405: [[48, 52, 57], [49, 53, 65], [50, 54, 66], [51, 55, 67]], amine@405: ), # int8_4channel amine@405: (2, [[12592, 13106, 13620, 14134, 16697, 17218]]), # int16_1channel amine@405: (2, [[12592, 13620, 16697], [13106, 14134, 17218]]), # int16_2channel amine@405: (4, [[858927408, 926299444, 1128415545]]), # int32_1channel amine@400: (4, [[858927408], [926299444], [1128415545]]), # int32_3channel amine@400: ], amine@400: ids=[ amine@405: "int8_1channel", amine@405: "int8_2channel", amine@405: "int8_4channel", amine@405: "int16_1channel", amine@405: "int16_2channel", amine@405: "int32_1channel", amine@400: "int32_3channel", amine@400: ], amine@400: ) amine@400: def test_to_array(setup_data, sample_width, expected): amine@400: data = setup_data amine@400: channels = len(expected) amine@405: expected = np.array(expected) amine@405: result = signal.to_array(data, sample_width, channels) amine@405: assert (result == expected).all() amine@405: assert result.dtype == np.float64 amine@405: assert result.shape == expected.shape amine@400: amine@400: amine@400: @pytest.mark.parametrize( amine@405: "x, aggregation_fn, expected", amine@400: [ amine@405: ([300, 320, 400, 600], None, 52.506639194632434), # mono_simple amine@405: ([0, 0, 0], None, -200), # mono_zeros amine@400: ( amine@405: [[300, 320, 400, 600], [150, 160, 200, 300]], amine@405: None, amine@405: [52.506639194632434, 46.48603928135281], amine@405: ), # stereo_no_agg amine@400: ( amine@405: [[300, 320, 400, 600], [150, 160, 200, 300]], amine@405: np.mean, amine@405: 49.49633923799262, amine@405: ), # stereo_mean_agg amine@400: ( amine@405: [[300, 320, 400, 600], [150, 160, 200, 300]], amine@405: min, amine@405: 46.48603928135281, amine@405: ), # stereo_min_agg amine@405: ( amine@405: [[300, 320, 400, 600], [150, 160, 200, 300]], amine@405: max, amine@405: 52.506639194632434, amine@405: ), # stereo_max_agg amine@400: ], amine@400: ids=[ amine@405: "mono_simple", amine@405: "mono_zeros", amine@405: "stereo_no_agg", amine@405: "mean_agg", amine@405: "stereo_min_agg", amine@405: "stereo_max_agg", amine@400: ], amine@400: ) amine@405: def test_calculate_energy(x, aggregation_fn, expected): amine@405: energy = signal.calculate_energy(x, aggregation_fn) amine@405: assert (energy == expected).all()