annotate tests/test_signal.py @ 359:63871bac77f6

Rename functions
author Amine Sehili <amine.sehili@gmail.com>
date Thu, 02 Apr 2020 22:29:43 +0200
parents 379e36e4fe88
children d653e3f58f3c
rev   line source
amine@315 1 import unittest
amine@257 2 from unittest import TestCase
amine@257 3 from array import array as array_
amine@257 4 from genty import genty, genty_dataset
amine@257 5 import numpy as np
amine@257 6 from auditok import signal as signal_
amine@257 7 from auditok import signal_numpy
amine@257 8
amine@257 9
amine@257 10 @genty
amine@257 11 class TestSignal(TestCase):
amine@257 12 def setUp(self):
amine@257 13 self.data = b"012345679ABC"
amine@257 14 self.numpy_fmt = {"b": np.int8, "h": np.int16, "i": np.int32}
amine@257 15
amine@257 16 @genty_dataset(
amine@315 17 int8_mono=(1, [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]),
amine@315 18 int16_mono=(2, [12592, 13106, 13620, 14134, 16697, 17218]),
amine@315 19 int32_mono=(4, [858927408, 926299444, 1128415545]),
amine@331 20 int8_stereo=(1, [[48, 50, 52, 54, 57, 66], [49, 51, 53, 55, 65, 67]]),
amine@315 21 int16_stereo=(2, [[12592, 13620, 16697], [13106, 14134, 17218]]),
amine@315 22 int32_3channel=(4, [[858927408], [926299444], [1128415545]]),
amine@257 23 )
amine@315 24 def test_to_array(self, sample_width, expected):
amine@315 25 if isinstance(expected[0], list):
amine@315 26 channels = len(expected)
amine@331 27 expected = [
amine@331 28 array_(signal_.FORMAT[sample_width], xi) for xi in expected
amine@331 29 ]
amine@315 30 else:
amine@315 31 channels = 1
amine@315 32 expected = array_(signal_.FORMAT[sample_width], expected)
amine@358 33 result = signal_.to_array(self.data, sample_width, channels)
amine@358 34 result_numpy = signal_numpy.to_array(self.data, sample_width, channels)
amine@358 35 self.assertEqual(result, expected)
amine@358 36 self.assertTrue((result_numpy == np.asarray(expected)).all())
amine@358 37 self.assertEqual(result_numpy.dtype, np.float64)
amine@257 38
amine@257 39 @genty_dataset(
amine@257 40 int8_1channel_select_0=(
amine@257 41 "b",
amine@257 42 1,
amine@257 43 0,
amine@257 44 [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67],
amine@257 45 ),
amine@257 46 int8_2channel_select_0=("b", 2, 0, [48, 50, 52, 54, 57, 66]),
amine@257 47 int8_3channel_select_0=("b", 3, 0, [48, 51, 54, 65]),
amine@257 48 int8_3channel_select_1=("b", 3, 1, [49, 52, 55, 66]),
amine@257 49 int8_3channel_select_2=("b", 3, 2, [50, 53, 57, 67]),
amine@257 50 int8_4channel_select_0=("b", 4, 0, [48, 52, 57]),
amine@257 51 int16_1channel_select_0=(
amine@257 52 "h",
amine@257 53 1,
amine@257 54 0,
amine@257 55 [12592, 13106, 13620, 14134, 16697, 17218],
amine@257 56 ),
amine@257 57 int16_2channel_select_0=("h", 2, 0, [12592, 13620, 16697]),
amine@257 58 int16_2channel_select_1=("h", 2, 1, [13106, 14134, 17218]),
amine@257 59 int16_3channel_select_0=("h", 3, 0, [12592, 14134]),
amine@257 60 int16_3channel_select_1=("h", 3, 1, [13106, 16697]),
amine@257 61 int16_3channel_select_2=("h", 3, 2, [13620, 17218]),
amine@257 62 int32_1channel_select_0=(
amine@257 63 "i",
amine@257 64 1,
amine@257 65 0,
amine@257 66 [858927408, 926299444, 1128415545],
amine@257 67 ),
amine@257 68 int32_3channel_select_0=("i", 3, 0, [858927408]),
amine@257 69 int32_3channel_select_1=("i", 3, 1, [926299444]),
amine@257 70 int32_3channel_select_2=("i", 3, 2, [1128415545]),
amine@257 71 )
amine@257 72 def test_extract_single_channel(self, fmt, channels, selected, expected):
amine@358 73 result = signal_.extract_single_channel(
amine@257 74 self.data, fmt, channels, selected
amine@257 75 )
amine@257 76 expected = array_(fmt, expected)
amine@315 77 expected_numpy_fmt = self.numpy_fmt[fmt]
amine@358 78 self.assertEqual(result, expected)
amine@358 79 result_numpy = signal_numpy.extract_single_channel(
amine@257 80 self.data, self.numpy_fmt[fmt], channels, selected
amine@257 81 )
amine@358 82 self.assertTrue(all(result_numpy == expected))
amine@358 83 self.assertEqual(result_numpy.dtype, expected_numpy_fmt)
amine@257 84
amine@257 85 @genty_dataset(
amine@257 86 int8_2channel=("b", 2, [48, 50, 52, 54, 61, 66]),
amine@257 87 int8_4channel=("b", 4, [50, 54, 64]),
amine@257 88 int16_1channel=("h", 1, [12592, 13106, 13620, 14134, 16697, 17218]),
amine@257 89 int16_2channel=("h", 2, [12849, 13877, 16958]),
amine@257 90 int32_3channel=("i", 3, [971214132]),
amine@257 91 )
amine@359 92 def test_compute_average_channel(self, fmt, channels, expected):
amine@359 93 result = signal_.compute_average_channel(self.data, fmt, channels)
amine@257 94 expected = array_(fmt, expected)
amine@315 95 expected_numpy_fmt = self.numpy_fmt[fmt]
amine@358 96 self.assertEqual(result, expected)
amine@359 97 result_numpy = signal_numpy.compute_average_channel(
amine@257 98 self.data, self.numpy_fmt[fmt], channels
amine@257 99 )
amine@358 100 self.assertTrue(all(result_numpy == expected))
amine@358 101 self.assertEqual(result_numpy.dtype, expected_numpy_fmt)
amine@358 102
amine@358 103 @genty_dataset(
amine@358 104 int8_2channel=(1, [48, 50, 52, 54, 61, 66]),
amine@358 105 int16_2channel=(2, [12849, 13877, 16957]),
amine@358 106 )
amine@359 107 def test_compute_average_channel_stereo(self, sample_width, expected):
amine@359 108 result = signal_.compute_average_channel_stereo(
amine@359 109 self.data, sample_width
amine@359 110 )
amine@358 111 fmt = signal_.FORMAT[sample_width]
amine@358 112 expected = array_(fmt, expected)
amine@358 113 self.assertEqual(result, expected)
amine@257 114
amine@257 115 @genty_dataset(
amine@257 116 int8_1channel=(
amine@257 117 "b",
amine@257 118 1,
amine@257 119 [[48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]],
amine@257 120 ),
amine@257 121 int8_2channel=(
amine@257 122 "b",
amine@257 123 2,
amine@257 124 [[48, 50, 52, 54, 57, 66], [49, 51, 53, 55, 65, 67]],
amine@257 125 ),
amine@257 126 int8_4channel=(
amine@257 127 "b",
amine@257 128 4,
amine@257 129 [[48, 52, 57], [49, 53, 65], [50, 54, 66], [51, 55, 67]],
amine@257 130 ),
amine@257 131 int16_2channel=(
amine@257 132 "h",
amine@257 133 2,
amine@257 134 [[12592, 13620, 16697], [13106, 14134, 17218]],
amine@257 135 ),
amine@257 136 int32_3channel=("i", 3, [[858927408], [926299444], [1128415545]]),
amine@257 137 )
amine@257 138 def test_separate_channels(self, fmt, channels, expected):
amine@358 139 result = signal_.separate_channels(self.data, fmt, channels)
amine@257 140 expected = [array_(fmt, exp) for exp in expected]
amine@315 141 expected_numpy_fmt = self.numpy_fmt[fmt]
amine@358 142 self.assertEqual(result, expected)
amine@257 143
amine@358 144 result_numpy = signal_numpy.separate_channels(
amine@257 145 self.data, self.numpy_fmt[fmt], channels
amine@257 146 )
amine@358 147 self.assertTrue((result_numpy == expected).all())
amine@358 148 self.assertEqual(result_numpy.dtype, expected_numpy_fmt)
amine@257 149
amine@257 150 @genty_dataset(
amine@315 151 simple=([300, 320, 400, 600], 2, 52.50624901923348),
amine@315 152 zero=([0], 2, -200),
amine@315 153 zeros=([0, 0, 0], 2, -200),
amine@257 154 )
amine@315 155 def test_calculate_energy_single_channel(self, x, sample_width, expected):
amine@315 156 x = array_(signal_.FORMAT[sample_width], x)
amine@315 157 energy = signal_.calculate_energy_single_channel(x, sample_width)
amine@257 158 self.assertEqual(energy, expected)
amine@315 159 energy = signal_numpy.calculate_energy_single_channel(x, sample_width)
amine@257 160 self.assertEqual(energy, expected)
amine@257 161
amine@257 162 @genty_dataset(
amine@257 163 min_=(
amine@257 164 [[300, 320, 400, 600], [150, 160, 200, 300]],
amine@315 165 2,
amine@257 166 min,
amine@315 167 46.485649105953854,
amine@257 168 ),
amine@257 169 max_=(
amine@257 170 [[300, 320, 400, 600], [150, 160, 200, 300]],
amine@315 171 2,
amine@257 172 max,
amine@315 173 52.50624901923348,
amine@257 174 ),
amine@257 175 )
amine@331 176 def test_calculate_energy_multichannel(
amine@331 177 self, x, sample_width, aggregation_fn, expected
amine@331 178 ):
amine@315 179 x = [array_(signal_.FORMAT[sample_width], xi) for xi in x]
amine@331 180 energy = signal_.calculate_energy_multichannel(
amine@331 181 x, sample_width, aggregation_fn
amine@331 182 )
amine@257 183 self.assertEqual(energy, expected)
amine@257 184
amine@331 185 energy = signal_numpy.calculate_energy_multichannel(
amine@331 186 x, sample_width, aggregation_fn
amine@331 187 )
amine@257 188 self.assertEqual(energy, expected)
amine@315 189
amine@331 190
amine@315 191 if __name__ == "__main__":
amine@331 192 unittest.main()