annotate tests/test_signal.py @ 297:7259b1eb9329

Refactor StreamTokenizer - Remove unused code - accept a callable validator - update doc
author Amine Sehili <amine.sehili@gmail.com>
date Tue, 08 Oct 2019 19:48:13 +0100
parents b3095d23d0c3
children 5f1859160fd7
rev   line source
amine@257 1 from unittest import TestCase
amine@257 2 from array import array as array_
amine@257 3 from genty import genty, genty_dataset
amine@257 4 import numpy as np
amine@257 5 from auditok import signal as signal_
amine@257 6 from auditok import signal_numpy
amine@257 7
amine@257 8
amine@257 9 @genty
amine@257 10 class TestSignal(TestCase):
amine@257 11 def setUp(self):
amine@257 12 self.data = b"012345679ABC"
amine@257 13 self.numpy_fmt = {"b": np.int8, "h": np.int16, "i": np.int32}
amine@257 14
amine@257 15 @genty_dataset(
amine@257 16 int8=("b", [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]),
amine@257 17 int16=("h", [12592, 13106, 13620, 14134, 16697, 17218]),
amine@257 18 int32=("i", [858927408, 926299444, 1128415545]),
amine@257 19 )
amine@257 20 def test_to_array(self, fmt, expected):
amine@257 21 resutl = signal_.to_array(self.data, fmt)
amine@257 22 expected = array_(fmt, expected)
amine@257 23 self.assertEqual(resutl, expected)
amine@257 24 resutl_numpy = signal_numpy.to_array(self.data, self.numpy_fmt[fmt])
amine@257 25 self.assertTrue(all(resutl_numpy == expected))
amine@257 26 self.assertEqual(resutl_numpy.dtype, np.float64)
amine@257 27
amine@257 28 @genty_dataset(
amine@257 29 int8_1channel_select_0=(
amine@257 30 "b",
amine@257 31 1,
amine@257 32 0,
amine@257 33 [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67],
amine@257 34 ),
amine@257 35 int8_2channel_select_0=("b", 2, 0, [48, 50, 52, 54, 57, 66]),
amine@257 36 int8_3channel_select_0=("b", 3, 0, [48, 51, 54, 65]),
amine@257 37 int8_3channel_select_1=("b", 3, 1, [49, 52, 55, 66]),
amine@257 38 int8_3channel_select_2=("b", 3, 2, [50, 53, 57, 67]),
amine@257 39 int8_4channel_select_0=("b", 4, 0, [48, 52, 57]),
amine@257 40 int16_1channel_select_0=(
amine@257 41 "h",
amine@257 42 1,
amine@257 43 0,
amine@257 44 [12592, 13106, 13620, 14134, 16697, 17218],
amine@257 45 ),
amine@257 46 int16_2channel_select_0=("h", 2, 0, [12592, 13620, 16697]),
amine@257 47 int16_2channel_select_1=("h", 2, 1, [13106, 14134, 17218]),
amine@257 48 int16_3channel_select_0=("h", 3, 0, [12592, 14134]),
amine@257 49 int16_3channel_select_1=("h", 3, 1, [13106, 16697]),
amine@257 50 int16_3channel_select_2=("h", 3, 2, [13620, 17218]),
amine@257 51 int32_1channel_select_0=(
amine@257 52 "i",
amine@257 53 1,
amine@257 54 0,
amine@257 55 [858927408, 926299444, 1128415545],
amine@257 56 ),
amine@257 57 int32_3channel_select_0=("i", 3, 0, [858927408]),
amine@257 58 int32_3channel_select_1=("i", 3, 1, [926299444]),
amine@257 59 int32_3channel_select_2=("i", 3, 2, [1128415545]),
amine@257 60 )
amine@257 61 def test_extract_single_channel(self, fmt, channels, selected, expected):
amine@257 62 resutl = signal_.extract_single_channel(
amine@257 63 self.data, fmt, channels, selected
amine@257 64 )
amine@257 65 expected = array_(fmt, expected)
amine@257 66 self.assertEqual(resutl, expected)
amine@257 67 resutl_numpy = signal_numpy.extract_single_channel(
amine@257 68 self.data, self.numpy_fmt[fmt], channels, selected
amine@257 69 )
amine@257 70 self.assertTrue(all(resutl_numpy == expected))
amine@257 71 self.assertEqual(resutl_numpy.dtype, np.float64)
amine@257 72
amine@257 73 @genty_dataset(
amine@257 74 int8_2channel=("b", 2, [48, 50, 52, 54, 61, 66]),
amine@257 75 int8_4channel=("b", 4, [50, 54, 64]),
amine@257 76 int16_1channel=("h", 1, [12592, 13106, 13620, 14134, 16697, 17218]),
amine@257 77 int16_2channel=("h", 2, [12849, 13877, 16958]),
amine@257 78 int32_3channel=("i", 3, [971214132]),
amine@257 79 )
amine@257 80 def test_average_channels(self, fmt, channels, expected):
amine@257 81 resutl = signal_.average_channels(self.data, fmt, channels)
amine@257 82 expected = array_(fmt, expected)
amine@257 83 self.assertEqual(resutl, expected)
amine@257 84 resutl_numpy = signal_numpy.average_channels(
amine@257 85 self.data, self.numpy_fmt[fmt], channels
amine@257 86 )
amine@257 87 self.assertTrue(all(resutl_numpy == expected))
amine@257 88 self.assertEqual(resutl_numpy.dtype, np.float64)
amine@257 89
amine@257 90 @genty_dataset(
amine@257 91 int8_1channel=(
amine@257 92 "b",
amine@257 93 1,
amine@257 94 [[48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]],
amine@257 95 ),
amine@257 96 int8_2channel=(
amine@257 97 "b",
amine@257 98 2,
amine@257 99 [[48, 50, 52, 54, 57, 66], [49, 51, 53, 55, 65, 67]],
amine@257 100 ),
amine@257 101 int8_4channel=(
amine@257 102 "b",
amine@257 103 4,
amine@257 104 [[48, 52, 57], [49, 53, 65], [50, 54, 66], [51, 55, 67]],
amine@257 105 ),
amine@257 106 int16_2channel=(
amine@257 107 "h",
amine@257 108 2,
amine@257 109 [[12592, 13620, 16697], [13106, 14134, 17218]],
amine@257 110 ),
amine@257 111 int32_3channel=("i", 3, [[858927408], [926299444], [1128415545]]),
amine@257 112 )
amine@257 113 def test_separate_channels(self, fmt, channels, expected):
amine@257 114 resutl = signal_.separate_channels(self.data, fmt, channels)
amine@257 115 expected = [array_(fmt, exp) for exp in expected]
amine@257 116 self.assertEqual(resutl, expected)
amine@257 117
amine@257 118 resutl_numpy = signal_numpy.separate_channels(
amine@257 119 self.data, self.numpy_fmt[fmt], channels
amine@257 120 )
amine@257 121 self.assertTrue((resutl_numpy == expected).all())
amine@257 122 self.assertEqual(resutl_numpy.dtype, np.float64)
amine@257 123
amine@257 124 @genty_dataset(
amine@257 125 simple=([300, 320, 400, 600], 52.506639194632434),
amine@257 126 zero=([0], -200),
amine@257 127 zeros=([0, 0, 0], -200),
amine@257 128 )
amine@257 129 def test_calculate_energy_single_channel(self, x, expected):
amine@257 130 energy = signal_.calculate_energy_single_channel(x)
amine@257 131 self.assertEqual(energy, expected)
amine@257 132 energy = signal_numpy.calculate_energy_single_channel(x)
amine@257 133 self.assertEqual(energy, expected)
amine@257 134
amine@257 135 @genty_dataset(
amine@257 136 min_=(
amine@257 137 [[300, 320, 400, 600], [150, 160, 200, 300]],
amine@257 138 min,
amine@257 139 46.48603928135281,
amine@257 140 ),
amine@257 141 max_=(
amine@257 142 [[300, 320, 400, 600], [150, 160, 200, 300]],
amine@257 143 max,
amine@257 144 52.506639194632434,
amine@257 145 ),
amine@257 146 )
amine@257 147 def test_calculate_energy_multichannel(self, x, aggregation_fn, expected):
amine@257 148 energy = signal_.calculate_energy_multichannel(x, aggregation_fn)
amine@257 149 self.assertEqual(energy, expected)
amine@257 150
amine@257 151 energy = signal_numpy.calculate_energy_multichannel(x, aggregation_fn)
amine@257 152 self.assertEqual(energy, expected)