Showing the changes to python/tests (31 of 101 files). Show all
Unified · Split
| @@ -1 +0,0 @@ | |||
| 1 | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | """ | ||
| 2 | This file imports test methods from different testing modules, in this | ||
| 3 | order: | ||
| 4 | |||
| 5 | - try importing 'pytest' | ||
| 6 | - if it fails, fallback to 'numpy.testing' | ||
| 7 | |||
| 8 | Nose2 support was removed because of lacking assertWarns on py2.7. | ||
| 9 | |||
| 10 | """ | ||
| 11 | |||
| 12 | import sys | ||
| 13 | |||
| 14 | _has_pytest = False | ||
| 15 | |||
| 16 | # check if we have pytest | ||
| 17 | try: | ||
| 18 | import pytest | ||
| 19 | parametrize = pytest.mark.parametrize | ||
| 20 | assert_raises = pytest.raises | ||
| 21 | assert_warns = pytest.warns | ||
| 22 | skipTest = pytest.skip | ||
| 23 | _has_pytest = True | ||
| 24 | def run_module_suite(): | ||
| 25 | import sys, pytest | ||
| 26 | pytest.main(sys.argv) | ||
| 27 | except: | ||
| 28 | pass | ||
| 29 | |||
| 30 | # otherwise fallback on numpy.testing | ||
| 31 | if not _has_pytest: | ||
| 32 | from numpy.testing import dec, assert_raises, assert_warns | ||
| 33 | from numpy.testing import SkipTest | ||
| 34 | parametrize = dec.parametrize | ||
| 35 | def skipTest(msg): | ||
| 36 | raise SkipTest(msg) | ||
| 37 | from numpy.testing import run_module_suite | ||
| 38 | |||
| 39 | # always use numpy's assert_equal | ||
| 40 | import numpy | ||
| 41 | assert_equal = numpy.testing.assert_equal | ||
| @@ -1,5 +0,0 @@ | |||
| 1 | #! /usr/bin/env python | ||
| 2 | |||
| 3 | if __name__ == '__main__': | ||
| 4 | import nose2.main | ||
| 5 | nose2.discover() | ||
| @@ -1,6 +1,5 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase | 3 | from numpy.testing import TestCase |
| 5 | 4 | ||
| 6 | class aubiomodule_test_case(TestCase): | 5 | class aubiomodule_test_case(TestCase): |
| @@ -15,5 +14,5 @@ class aubiomodule_test_case(TestCase): · 8 unmodified lines | |||
| 15 | self.assertEqual('0', aubio.version[0]) | 14 | self.assertEqual('0', aubio.version[0]) |
| 16 | 15 | ||
| 17 | if __name__ == '__main__': | 16 | if __name__ == '__main__': |
| 17 | from unittest import main | ||
| 18 | main() | 18 | main() |
| 19 | |||
| @@ -1,8 +1,7 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | import aubio.cmd | ||
| 4 | from nose2 import main | ||
| 5 | from numpy.testing import TestCase | 3 | from numpy.testing import TestCase |
| 4 | import aubio.cmd | ||
| 6 | 5 | ||
| 7 | class aubio_cmd(TestCase): | 6 | class aubio_cmd(TestCase): |
| 8 | 7 | ||
| @@ -31,4 +30,5 @@ class aubio_cmd_utils(TestCase): · 22 unmodified lines | |||
| 31 | "3200\t") | 30 | "3200\t") |
| 32 | 31 | ||
| 33 | if __name__ == '__main__': | 32 | if __name__ == '__main__': |
| 33 | from unittest import main | ||
| 34 | main() | 34 | main() |
| @@ -1,7 +1,6 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | import aubio.cut | 3 | import aubio.cut |
| 4 | from nose2 import main | ||
| 5 | from numpy.testing import TestCase | 4 | from numpy.testing import TestCase |
| 6 | 5 | ||
| 7 | class aubio_cut(TestCase): | 6 | class aubio_cut(TestCase): |
| @@ -13,4 +12,5 @@ class aubio_cut(TestCase): · 5 unmodified lines | |||
| 13 | assert self.a_parser.parse_args(['-v']).verbose | 12 | assert self.a_parser.parse_args(['-v']).verbose |
| 14 | 13 | ||
| 15 | if __name__ == '__main__': | 14 | if __name__ == '__main__': |
| 15 | from unittest import main | ||
| 16 | main() | 16 | main() |
| @@ -1,6 +1,5 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | import numpy as np | 3 | import numpy as np |
| 5 | from numpy.testing import TestCase, assert_equal | 4 | from numpy.testing import TestCase, assert_equal |
| 6 | from aubio import cvec, fvec, float_type | 5 | from aubio import cvec, fvec, float_type |
| @@ -141,4 +140,5 @@ class aubio_cvec_wrong_norm_input(TestCase): · 134 unmodified lines | |||
| 141 | a.norm = np.zeros((512//2+1, 2), dtype = float_type) | 140 | a.norm = np.zeros((512//2+1, 2), dtype = float_type) |
| 142 | 141 | ||
| 143 | if __name__ == '__main__': | 142 | if __name__ == '__main__': |
| 143 | from unittest import main | ||
| 144 | main() | 144 | main() |
| @@ -66,3 +66,7 @@ class aubio_dct(TestCase): · 65 unmodified lines | |||
| 66 | aubio.dct(size) | 66 | aubio.dct(size) |
| 67 | except AssertionError: | 67 | except AssertionError: |
| 68 | self.skipTest('creating aubio.dct with size %d did not fail' % size) | 68 | self.skipTest('creating aubio.dct with size %d did not fail' % size) |
| 69 | |||
| 70 | if __name__ == '__main__': | ||
| 71 | from unittest import main | ||
| 72 | main() | ||
| @@ -1,6 +1,5 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase | 3 | from numpy.testing import TestCase |
| 5 | from numpy.testing import assert_equal, assert_almost_equal | 4 | from numpy.testing import assert_equal, assert_almost_equal |
| 6 | import numpy as np | 5 | import numpy as np |
| @@ -212,4 +211,5 @@ class aubio_fft_wrong_params(TestCase): · 205 unmodified lines | |||
| 212 | fft(win_s) | 211 | fft(win_s) |
| 213 | 212 | ||
| 214 | if __name__ == '__main__': | 213 | if __name__ == '__main__': |
| 214 | from unittest import main | ||
| 215 | main() | 215 | main() |
| @@ -1,9 +1,8 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal | 3 | from numpy.testing import TestCase, assert_equal, assert_almost_equal |
| 5 | from aubio import fvec, digital_filter | 4 | from aubio import fvec, digital_filter |
| 6 | from .utils import array_from_text_file | 5 | from utils import array_from_text_file |
| 7 | 6 | ||
| 8 | class aubio_filter_test_case(TestCase): | 7 | class aubio_filter_test_case(TestCase): |
| 9 | 8 | ||
| @@ -94,4 +93,5 @@ class aubio_filter_wrong_params(TestCase): · 84 unmodified lines | |||
| 94 | digital_filter(-1) | 93 | digital_filter(-1) |
| 95 | 94 | ||
| 96 | if __name__ == '__main__': | 95 | if __name__ == '__main__': |
| 96 | from unittest import main | ||
| 97 | main() | 97 | main() |
| @@ -4,7 +4,7 @@ import numpy as np · 3 unmodified lines | |||
| 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal | 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal |
| 5 | 5 | ||
| 6 | from aubio import cvec, filterbank, float_type | 6 | from aubio import cvec, filterbank, float_type |
| 7 | from .utils import array_from_text_file | 7 | from utils import array_from_text_file |
| 8 | 8 | ||
| 9 | class aubio_filterbank_test_case(TestCase): | 9 | class aubio_filterbank_test_case(TestCase): |
| 10 | 10 | ||
| @@ -87,5 +87,5 @@ class aubio_filterbank_wrong_values(TestCase): · 76 unmodified lines | |||
| 87 | f(cvec(256)) | 87 | f(cvec(256)) |
| 88 | 88 | ||
| 89 | if __name__ == '__main__': | 89 | if __name__ == '__main__': |
| 90 | import nose2 | 90 | from unittest import main |
| 91 | nose2.main() | 91 | main() |
| @@ -2,12 +2,10 @@ · 1 unmodified line | |||
| 2 | 2 | ||
| 3 | import numpy as np | 3 | import numpy as np |
| 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal | 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal |
| 5 | from _tools import assert_warns | ||
| 5 | 6 | ||
| 6 | from aubio import fvec, cvec, filterbank, float_type | 7 | from aubio import fvec, cvec, filterbank, float_type |
| 7 | 8 | ||
| 8 | import warnings | ||
| 9 | warnings.filterwarnings('ignore', category=UserWarning, append=True) | ||
| 10 | |||
| 11 | class aubio_filterbank_mel_test_case(TestCase): | 9 | class aubio_filterbank_mel_test_case(TestCase): |
| 12 | 10 | ||
| 13 | def test_slaney(self): | 11 | def test_slaney(self): |
| @@ -75,40 +73,41 @@ class aubio_filterbank_mel_test_case(TestCase): · 61 unmodified lines | |||
| 75 | samplerate = 22050 | 73 | samplerate = 22050 |
| 76 | freq_list = [0, samplerate//4, samplerate // 2 + 1] | 74 | freq_list = [0, samplerate//4, samplerate // 2 + 1] |
| 77 | f = filterbank(len(freq_list)-2, 1024) | 75 | f = filterbank(len(freq_list)-2, 1024) |
| 78 | # TODO add assert_warns | 76 | with assert_warns(UserWarning): |
| 79 | f.set_triangle_bands(fvec(freq_list), samplerate) | 77 | f.set_triangle_bands(fvec(freq_list), samplerate) |
| 80 | 78 | ||
| 81 | def test_triangle_freqs_with_not_enough_filters(self): | 79 | def test_triangle_freqs_with_not_enough_filters(self): |
| 82 | """make sure set_triangle_bands warns when not enough filters""" | 80 | """make sure set_triangle_bands warns when not enough filters""" |
| 83 | samplerate = 22050 | 81 | samplerate = 22050 |
| 84 | freq_list = [0, 100, 1000, 4000, 8000, 10000] | 82 | freq_list = [0, 100, 1000, 4000, 8000, 10000] |
| 85 | f = filterbank(len(freq_list)-3, 1024) | 83 | f = filterbank(len(freq_list)-3, 1024) |
| 86 | # TODO add assert_warns | 84 | with assert_warns(UserWarning): |
| 87 | f.set_triangle_bands(fvec(freq_list), samplerate) | 85 | f.set_triangle_bands(fvec(freq_list), samplerate) |
| 88 | 86 | ||
| 89 | def test_triangle_freqs_with_too_many_filters(self): | 87 | def test_triangle_freqs_with_too_many_filters(self): |
| 90 | """make sure set_triangle_bands warns when too many filters""" | 88 | """make sure set_triangle_bands warns when too many filters""" |
| 91 | samplerate = 22050 | 89 | samplerate = 22050 |
| 92 | freq_list = [0, 100, 1000, 4000, 8000, 10000] | 90 | freq_list = [0, 100, 1000, 4000, 8000, 10000] |
| 93 | f = filterbank(len(freq_list)-1, 1024) | 91 | f = filterbank(len(freq_list)-1, 1024) |
| 94 | # TODO add assert_warns | 92 | with assert_warns(UserWarning): |
| 95 | f.set_triangle_bands(fvec(freq_list), samplerate) | 93 | f.set_triangle_bands(fvec(freq_list), samplerate) |
| 96 | 94 | ||
| 97 | def test_triangle_freqs_with_double_value(self): | 95 | def test_triangle_freqs_with_double_value(self): |
| 98 | """make sure set_triangle_bands works with 2 duplicate freqs""" | 96 | """make sure set_triangle_bands works with 2 duplicate freqs""" |
| 99 | samplerate = 22050 | 97 | samplerate = 22050 |
| 100 | freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000] | 98 | freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000] |
| 101 | f = filterbank(len(freq_list)-2, 1024) | 99 | f = filterbank(len(freq_list)-2, 1024) |
| 102 | # TODO add assert_warns | 100 | with assert_warns(UserWarning): |
| 103 | f.set_triangle_bands(fvec(freq_list), samplerate) | 101 | f.set_triangle_bands(fvec(freq_list), samplerate) |
| 104 | 102 | ||
| 105 | def test_triangle_freqs_with_triple(self): | 103 | def test_triangle_freqs_with_triple(self): |
| 106 | """make sure set_triangle_bands works with 3 duplicate freqs""" | 104 | """make sure set_triangle_bands works with 3 duplicate freqs""" |
| 107 | samplerate = 22050 | 105 | samplerate = 22050 |
| 108 | freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000] | 106 | freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000] |
| 109 | f = filterbank(len(freq_list)-2, 1024) | 107 | f = filterbank(len(freq_list)-2, 1024) |
| 110 | # TODO add assert_warns | 108 | with assert_warns(UserWarning): |
| 111 | f.set_triangle_bands(fvec(freq_list), samplerate) | 109 | f.set_triangle_bands(fvec(freq_list), samplerate) |
| 110 | |||
| 112 | 111 | ||
| 113 | def test_triangle_freqs_without_norm(self): | 112 | def test_triangle_freqs_without_norm(self): |
| 114 | """make sure set_triangle_bands works without """ | 113 | """make sure set_triangle_bands works without """ |
| @@ -168,5 +167,5 @@ class aubio_filterbank_mel_test_case(TestCase): · 53 unmodified lines | |||
| 168 | 167 | ||
| 169 | 168 | ||
| 170 | if __name__ == '__main__': | 169 | if __name__ == '__main__': |
| 171 | import nose2 | 170 | from unittest import main |
| 172 | nose2.main() | 171 | main() |
| @@ -1,6 +1,5 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | import numpy as np | 3 | import numpy as np |
| 5 | from numpy.testing import TestCase, assert_equal, assert_almost_equal | 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal |
| 6 | from aubio import fvec, zero_crossing_rate, alpha_norm, min_removal | 5 | from aubio import fvec, zero_crossing_rate, alpha_norm, min_removal |
| @@ -148,4 +147,5 @@ class aubio_fvec_test_memory(TestCase): · 141 unmodified lines | |||
| 148 | del c | 147 | del c |
| 149 | 148 | ||
| 150 | if __name__ == '__main__': | 149 | if __name__ == '__main__': |
| 150 | from unittest import main | ||
| 151 | main() | 151 | main() |
| @@ -30,6 +30,6 @@ class aubio_shift_test_case(TestCase): · 29 unmodified lines | |||
| 30 | def test_can_shift_fvec_odd(self): | 30 | def test_can_shift_fvec_odd(self): |
| 31 | self.run_shift_ishift(7) | 31 | self.run_shift_ishift(7) |
| 32 | 32 | ||
| 33 | from unittest import main | ||
| 34 | if __name__ == '__main__': | 33 | if __name__ == '__main__': |
| 34 | from unittest import main | ||
| 35 | main() | 35 | main() |
| @@ -3,6 +3,7 @@ · 2 unmodified lines | |||
| 3 | from unittest import main | 3 | from unittest import main |
| 4 | from numpy.testing import TestCase | 4 | from numpy.testing import TestCase |
| 5 | from numpy.testing import assert_equal, assert_almost_equal | 5 | from numpy.testing import assert_equal, assert_almost_equal |
| 6 | from _tools import assert_warns | ||
| 6 | import numpy as np | 7 | import numpy as np |
| 7 | import aubio | 8 | import aubio |
| 8 | 9 | ||
| @@ -37,12 +38,12 @@ class aubio_hztomel_test_case(TestCase): · 28 unmodified lines | |||
| 37 | assert_almost_equal(meltohz(hztomel(f)) - f, 0, decimal=1) | 38 | assert_almost_equal(meltohz(hztomel(f)) - f, 0, decimal=1) |
| 38 | 39 | ||
| 39 | def test_meltohz_negative(self): | 40 | def test_meltohz_negative(self): |
| 40 | # TODO add assert_warns | 41 | with assert_warns(UserWarning): |
| 41 | assert_equal(meltohz(-1), 0) | 42 | assert_equal(meltohz(-1), 0) |
| 42 | 43 | ||
| 43 | def test_hztomel_negative(self): | 44 | def test_hztomel_negative(self): |
| 44 | # TODO add assert_warns | 45 | with assert_warns(UserWarning): |
| 45 | assert_equal(hztomel(-1), 0) | 46 | assert_equal(hztomel(-1), 0) |
| 46 | 47 | ||
| 47 | 48 | ||
| 48 | class aubio_hztomel_htk_test_case(TestCase): | 49 | class aubio_hztomel_htk_test_case(TestCase): |
| @@ -57,14 +58,16 @@ class aubio_hztomel_htk_test_case(TestCase): · 8 unmodified lines | |||
| 57 | assert_almost_equal(hztomel(6300, htk=True), 2595., decimal=1) | 58 | assert_almost_equal(hztomel(6300, htk=True), 2595., decimal=1) |
| 58 | 59 | ||
| 59 | def test_meltohz_negative(self): | 60 | def test_meltohz_negative(self): |
| 60 | # TODO add assert_warns | 61 | with assert_warns(UserWarning): |
| 61 | assert_equal(meltohz(-1, htk=True), 0) | 62 | assert_equal(meltohz(-1, htk=True), 0) |
| 62 | assert_almost_equal(meltohz(2000, htk=True), 3428.7, decimal=1) | 63 | assert_almost_equal(meltohz(2000, htk=True), 3428.7, decimal=1) |
| 63 | assert_almost_equal(meltohz(1000, htk=True), 1000., decimal=1) | 64 | assert_almost_equal(meltohz(1000, htk=True), 1000., decimal=1) |
| 64 | 65 | ||
| 65 | def test_hztomel_negative(self): | 66 | def test_hztomel_negative(self): |
| 66 | # TODO add assert_warns | 67 | with assert_warns(UserWarning): |
| 67 | assert_equal(hztomel(-1, htk=True), 0) | 68 | assert_equal(meltohz(-1, htk=True), 0) |
| 69 | with assert_warns(UserWarning): | ||
| 70 | assert_equal(hztomel(-1, htk=True), 0) | ||
| 68 | assert_almost_equal(hztomel(1000, htk=True), 1000., decimal=1) | 71 | assert_almost_equal(hztomel(1000, htk=True), 1000., decimal=1) |
| 69 | 72 | ||
| 70 | def test_hztomel_htk(self): | 73 | def test_hztomel_htk(self): |
| @@ -1,6 +1,5 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase, assert_equal | 3 | from numpy.testing import TestCase, assert_equal |
| 5 | from numpy import array, arange, isnan, isinf | 4 | from numpy import array, arange, isnan, isinf |
| 6 | from aubio import bintomidi, miditobin, freqtobin, bintofreq, freqtomidi, miditofreq | 5 | from aubio import bintomidi, miditobin, freqtobin, bintofreq, freqtomidi, miditofreq |
| @@ -101,4 +100,5 @@ class aubio_mathutils(TestCase): · 94 unmodified lines | |||
| 101 | assert_equal ( array(b) < 0, False ) | 100 | assert_equal ( array(b) < 0, False ) |
| 102 | 101 | ||
| 103 | if __name__ == '__main__': | 102 | if __name__ == '__main__': |
| 103 | from unittest import main | ||
| 104 | main() | 104 | main() |
| @@ -1,7 +1,6 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from nose2 import main | 3 | from _tools import parametrize, assert_raises |
| 4 | from nose2.tools import params | ||
| 5 | from numpy import random, count_nonzero | 4 | from numpy import random, count_nonzero |
| 6 | from numpy.testing import TestCase | 5 | from numpy.testing import TestCase |
| 7 | from aubio import mfcc, cvec, float_type | 6 | from aubio import mfcc, cvec, float_type |
| @@ -15,28 +14,21 @@ samplerate = 44100 · 7 unmodified lines | |||
| 15 | new_params = ['buf_size', 'n_filters', 'n_coeffs', 'samplerate'] | 14 | new_params = ['buf_size', 'n_filters', 'n_coeffs', 'samplerate'] |
| 16 | new_deflts = [1024, 40, 13, 44100] | 15 | new_deflts = [1024, 40, 13, 44100] |
| 17 | 16 | ||
| 18 | class aubio_mfcc(TestCase): | 17 | class Test_aubio_mfcc(object): |
| 19 | 18 | ||
| 20 | def setUp(self): | 19 | members_args = 'name' |
| 21 | self.o = mfcc() | ||
| 22 | 20 | ||
| 23 | def test_default_creation(self): | 21 | @parametrize(members_args, new_params) |
| 24 | pass | ||
| 25 | |||
| 26 | def test_delete(self): | ||
| 27 | del self.o | ||
| 28 | |||
| 29 | @params(*new_params) | ||
| 30 | def test_read_only_member(self, name): | 22 | def test_read_only_member(self, name): |
| 31 | o = self.o | 23 | o = mfcc() |
| 32 | with self.assertRaises((TypeError, AttributeError)): | 24 | with assert_raises((TypeError, AttributeError)): |
| 33 | setattr(o, name, 0) | 25 | setattr(o, name, 0) |
| 34 | 26 | ||
| 35 | @params(*zip(new_params, new_deflts)) | 27 | @parametrize('name, expected', zip(new_params, new_deflts)) |
| 36 | def test_default_param(self, name, expected): | 28 | def test_default_param(self, name, expected): |
| 37 | """ test mfcc.{:s} = {:d} """.format(name, expected) | 29 | """ test mfcc.{:s} = {:d} """.format(name, expected) |
| 38 | o = self.o | 30 | o = mfcc() |
| 39 | self.assertEqual( getattr(o, name), expected) | 31 | assert getattr(o, name) == expected |
| 40 | 32 | ||
| 41 | class aubio_mfcc_wrong_params(TestCase): | 33 | class aubio_mfcc_wrong_params(TestCase): |
| 42 | 34 | ||
| @@ -82,9 +74,9 @@ class aubio_mfcc_compute(TestCase): · 39 unmodified lines | |||
| 82 | #print coeffs | 74 | #print coeffs |
| 83 | 75 | ||
| 84 | 76 | ||
| 85 | class aubio_mfcc_all_parameters(TestCase): | 77 | class Test_aubio_mfcc_all_parameters(object): |
| 86 | 78 | ||
| 87 | @params( | 79 | run_values = [ |
| 88 | (2048, 40, 13, 44100), | 80 | (2048, 40, 13, 44100), |
| 89 | (1024, 40, 13, 44100), | 81 | (1024, 40, 13, 44100), |
| 90 | (512, 40, 13, 44100), | 82 | (512, 40, 13, 44100), |
| @@ -100,7 +92,10 @@ class aubio_mfcc_all_parameters(TestCase): · 9 unmodified lines | |||
| 100 | #(1024, 30, 20, 44100), | 92 | #(1024, 30, 20, 44100), |
| 101 | (1024, 40, 40, 44100), | 93 | (1024, 40, 40, 44100), |
| 102 | (1024, 40, 3, 44100), | 94 | (1024, 40, 3, 44100), |
| 103 | ) | 95 | ] |
| 96 | run_args = ['buf_size', 'n_filters', 'n_coeffs', 'samplerate'] | ||
| 97 | |||
| 98 | @parametrize(run_args, run_values) | ||
| 104 | def test_run_with_params(self, buf_size, n_filters, n_coeffs, samplerate): | 99 | def test_run_with_params(self, buf_size, n_filters, n_coeffs, samplerate): |
| 105 | " check mfcc can run with reasonable parameters " | 100 | " check mfcc can run with reasonable parameters " |
| 106 | o = mfcc(buf_size, n_filters, n_coeffs, samplerate) | 101 | o = mfcc(buf_size, n_filters, n_coeffs, samplerate) |
| @@ -148,4 +143,5 @@ class aubio_mfcc_fb_params(TestCase): · 41 unmodified lines | |||
| 148 | assert m.get_scale() == 1 | 143 | assert m.get_scale() == 1 |
| 149 | 144 | ||
| 150 | if __name__ == '__main__': | 145 | if __name__ == '__main__': |
| 151 | main() | 146 | from _tools import run_module_suite |
| 147 | run_module_suite() | ||
| @@ -2,8 +2,7 @@ · 1 unmodified line | |||
| 2 | # -*- coding: utf-8 -*- | 2 | # -*- coding: utf-8 -*- |
| 3 | 3 | ||
| 4 | from aubio import midi2note | 4 | from aubio import midi2note |
| 5 | from nose2.tools import params | 5 | from _tools import parametrize, assert_raises |
| 6 | import unittest | ||
| 7 | 6 | ||
| 8 | list_of_known_midis = ( | 7 | list_of_known_midis = ( |
| 9 | ( 0, 'C-1' ), | 8 | ( 0, 'C-1' ), |
| @@ -15,31 +14,31 @@ list_of_known_midis = ( · 5 unmodified lines | |||
| 15 | ( 127, 'G9' ), | 14 | ( 127, 'G9' ), |
| 16 | ) | 15 | ) |
| 17 | 16 | ||
| 18 | class midi2note_good_values(unittest.TestCase): | 17 | class Test_midi2note_good_values(object): |
| 19 | 18 | ||
| 20 | @params(*list_of_known_midis) | 19 | @parametrize('midi, note', list_of_known_midis) |
| 21 | def test_midi2note_known_values(self, midi, note): | 20 | def test_midi2note_known_values(self, midi, note): |
| 22 | " known values are correctly converted " | 21 | " known values are correctly converted " |
| 23 | self.assertEqual ( midi2note(midi), note ) | 22 | assert midi2note(midi) == (note) |
| 24 | 23 | ||
| 25 | class midi2note_wrong_values(unittest.TestCase): | 24 | class Test_midi2note_wrong_values(object): |
| 26 | 25 | ||
| 27 | def test_midi2note_negative_value(self): | 26 | def test_midi2note_negative_value(self): |
| 28 | " fails when passed a negative value " | 27 | " fails when passed a negative value " |
| 29 | self.assertRaises(ValueError, midi2note, -2) | 28 | assert_raises(ValueError, midi2note, -2) |
| 30 | 29 | ||
| 31 | def test_midi2note_large(self): | 30 | def test_midi2note_large(self): |
| 32 | " fails when passed a value greater than 127 " | 31 | " fails when passed a value greater than 127 " |
| 33 | self.assertRaises(ValueError, midi2note, 128) | 32 | assert_raises(ValueError, midi2note, 128) |
| 34 | 33 | ||
| 35 | def test_midi2note_floating_value(self): | 34 | def test_midi2note_floating_value(self): |
| 36 | " fails when passed a floating point " | 35 | " fails when passed a floating point " |
| 37 | self.assertRaises(TypeError, midi2note, 69.2) | 36 | assert_raises(TypeError, midi2note, 69.2) |
| 38 | 37 | ||
| 39 | def test_midi2note_character_value(self): | 38 | def test_midi2note_character_value(self): |
| 40 | " fails when passed a value that can not be transformed to integer " | 39 | " fails when passed a value that can not be transformed to integer " |
| 41 | self.assertRaises(TypeError, midi2note, "a") | 40 | assert_raises(TypeError, midi2note, "a") |
| 42 | 41 | ||
| 43 | if __name__ == '__main__': | 42 | if __name__ == '__main__': |
| 44 | import nose2 | 43 | from _tools import run_module_suite |
| 45 | nose2.main() | 44 | run_module_suite() |
| @@ -1,9 +1,8 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | import numpy as np | 3 | import numpy as np |
| 5 | from numpy.testing import TestCase | 4 | from numpy.testing import TestCase |
| 6 | from numpy.testing.utils import assert_equal, assert_almost_equal | 5 | from numpy.testing import assert_equal, assert_almost_equal |
| 7 | from aubio import window, level_lin, db_spl, silence_detection, level_detection | 6 | from aubio import window, level_lin, db_spl, silence_detection, level_detection |
| 8 | from aubio import fvec, float_type | 7 | from aubio import fvec, float_type |
| 9 | 8 | ||
| @@ -85,4 +84,5 @@ class aubio_level_detection(TestCase): · 75 unmodified lines | |||
| 85 | assert level_detection(ones(1024, dtype = float_type), -70) == 0 | 84 | assert level_detection(ones(1024, dtype = float_type), -70) == 0 |
| 86 | 85 | ||
| 87 | if __name__ == '__main__': | 86 | if __name__ == '__main__': |
| 87 | from unittest import main | ||
| 88 | main() | 88 | main() |
| @@ -4,8 +4,8 @@ · 3 unmodified lines | |||
| 4 | from __future__ import unicode_literals | 4 | from __future__ import unicode_literals |
| 5 | 5 | ||
| 6 | from aubio import note2midi, freq2note, note2freq, float_type | 6 | from aubio import note2midi, freq2note, note2freq, float_type |
| 7 | from nose2.tools import params | 7 | from numpy.testing import TestCase |
| 8 | import unittest | 8 | from _tools import parametrize, assert_raises, skipTest |
| 9 | 9 | ||
| 10 | list_of_known_notes = ( | 10 | list_of_known_notes = ( |
| 11 | ( 'C-1', 0 ), | 11 | ( 'C-1', 0 ), |
| @@ -44,29 +44,32 @@ list_of_unknown_notes = ( · 32 unmodified lines | |||
| 44 | ( '2' ), | 44 | ( '2' ), |
| 45 | ) | 45 | ) |
| 46 | 46 | ||
| 47 | class note2midi_good_values(unittest.TestCase): | 47 | class Test_note2midi_good_values(object): |
| 48 | 48 | ||
| 49 | @params(*list_of_known_notes) | 49 | @parametrize('note, midi', list_of_known_notes) |
| 50 | def test_note2midi_known_values(self, note, midi): | 50 | def test_note2midi_known_values(self, note, midi): |
| 51 | " known values are correctly converted " | 51 | " known values are correctly converted " |
| 52 | self.assertEqual ( note2midi(note), midi ) | 52 | assert note2midi(note) == midi |
| 53 | 53 | ||
| 54 | @params(*list_of_known_notes_with_unicode_issues) | 54 | @parametrize('note, midi', list_of_known_notes_with_unicode_issues) |
| 55 | def test_note2midi_known_values_with_unicode_issues(self, note, midi): | 55 | def test_note2midi_known_values_with_unicode_issues(self, note, midi): |
| 56 | " known values are correctly converted, unless decoding is expected to fail" | 56 | " difficult values are correctly converted unless expected failure " |
| 57 | try: | 57 | try: |
| 58 | self.assertEqual ( note2midi(note), midi ) | 58 | assert note2midi(note) == midi |
| 59 | except UnicodeEncodeError as e: | 59 | except UnicodeEncodeError as e: |
| 60 | # platforms with decoding failures include: | ||
| 61 | # - osx: python <= 2.7.10 | ||
| 62 | # - win: python <= 2.7.12 | ||
| 60 | import sys | 63 | import sys |
| 61 | strfmt = "len(u'\\U0001D12A') != 1, excpected decoding failure | {:s} | {:s} {:s}" | 64 | strmsg = "len(u'\\U0001D12A') != 1, expected decoding failure" |
| 62 | strres = strfmt.format(e, sys.platform, sys.version) | 65 | strmsg += " | upgrade to Python 3 to fix" |
| 63 | # happens with: darwin 2.7.10, windows 2.7.12 | 66 | strmsg += " | {:s} | {:s} {:s}" |
| 64 | if len('\U0001D12A') != 1 and sys.version[0] == '2': | 67 | if len('\U0001D12A') != 1 and sys.version[0] == '2': |
| 65 | self.skipTest(strres + " | upgrade to Python 3 to fix") | 68 | skipTest(strmsg.format(repr(e), sys.platform, sys.version)) |
| 66 | else: | 69 | else: |
| 67 | raise | 70 | raise |
| 68 | 71 | ||
| 69 | class note2midi_wrong_values(unittest.TestCase): | 72 | class note2midi_wrong_values(TestCase): |
| 70 | 73 | ||
| 71 | def test_note2midi_missing_octave(self): | 74 | def test_note2midi_missing_octave(self): |
| 72 | " fails when passed only one character" | 75 | " fails when passed only one character" |
| @@ -104,12 +107,14 @@ class note2midi_wrong_values(unittest.TestCase): · 31 unmodified lines | |||
| 104 | " fails when passed a note with a note name longer than expected" | 107 | " fails when passed a note with a note name longer than expected" |
| 105 | self.assertRaises(ValueError, note2midi, 'CB+-3') | 108 | self.assertRaises(ValueError, note2midi, 'CB+-3') |
| 106 | 109 | ||
| 107 | @params(*list_of_unknown_notes) | 110 | class Test_note2midi_unknown_values(object): |
| 111 | |||
| 112 | @parametrize('note', list_of_unknown_notes) | ||
| 108 | def test_note2midi_unknown_values(self, note): | 113 | def test_note2midi_unknown_values(self, note): |
| 109 | " unknown values throw out an error " | 114 | " unknown values throw out an error " |
| 110 | self.assertRaises(ValueError, note2midi, note) | 115 | assert_raises(ValueError, note2midi, note) |
| 111 | 116 | ||
| 112 | class freq2note_simple_test(unittest.TestCase): | 117 | class freq2note_simple_test(TestCase): |
| 113 | 118 | ||
| 114 | def test_freq2note_above(self): | 119 | def test_freq2note_above(self): |
| 115 | " make sure freq2note(441) == A4 " | 120 | " make sure freq2note(441) == A4 " |
| @@ -119,7 +124,7 @@ class freq2note_simple_test(unittest.TestCase): · 3 unmodified lines | |||
| 119 | " make sure freq2note(439) == A4 " | 124 | " make sure freq2note(439) == A4 " |
| 120 | self.assertEqual("A4", freq2note(439)) | 125 | self.assertEqual("A4", freq2note(439)) |
| 121 | 126 | ||
| 122 | class note2freq_simple_test(unittest.TestCase): | 127 | class note2freq_simple_test(TestCase): |
| 123 | 128 | ||
| 124 | def test_note2freq(self): | 129 | def test_note2freq(self): |
| 125 | " make sure note2freq('A3') == 220" | 130 | " make sure note2freq('A3') == 220" |
| @@ -133,5 +138,5 @@ class note2freq_simple_test(unittest.TestCase): · 7 unmodified lines | |||
| 133 | self.assertLess(abs(note2freq("A4")-440), 1.e-12) | 138 | self.assertLess(abs(note2freq("A4")-440), 1.e-12) |
| 134 | 139 | ||
| 135 | if __name__ == '__main__': | 140 | if __name__ == '__main__': |
| 136 | import nose2 | 141 | from _tools import run_module_suite |
| 137 | nose2.main() | 142 | run_module_suite() |
| @@ -1,8 +1,11 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal | 3 | from numpy.testing import TestCase, assert_equal, assert_almost_equal |
| 5 | from aubio import notes | 4 | from aubio import notes, source |
| 5 | import numpy as np | ||
| 6 | from utils import list_all_sounds | ||
| 7 | |||
| 8 | list_of_sounds = list_all_sounds('sounds') | ||
| 6 | 9 | ||
| 7 | AUBIO_DEFAULT_NOTES_SILENCE = -70. | 10 | AUBIO_DEFAULT_NOTES_SILENCE = -70. |
| 8 | AUBIO_DEFAULT_NOTES_RELEASE_DROP = 10. | 11 | AUBIO_DEFAULT_NOTES_RELEASE_DROP = 10. |
| @@ -52,14 +55,9 @@ class aubio_notes_params(TestCase): · 43 unmodified lines | |||
| 52 | with self.assertRaises(ValueError): | 55 | with self.assertRaises(ValueError): |
| 53 | self.o.set_release_drop(val) | 56 | self.o.set_release_drop(val) |
| 54 | 57 | ||
| 55 | from .utils import list_all_sounds | ||
| 56 | list_of_sounds = list_all_sounds('sounds') | ||
| 57 | |||
| 58 | class aubio_notes_sinewave(TestCase): | 58 | class aubio_notes_sinewave(TestCase): |
| 59 | 59 | ||
| 60 | def analyze_file(self, filepath, samplerate=0): | 60 | def analyze_file(self, filepath, samplerate=0): |
| 61 | from aubio import source | ||
| 62 | import numpy as np | ||
| 63 | win_s = 512 # fft size | 61 | win_s = 512 # fft size |
| 64 | hop_s = 256 # hop size | 62 | hop_s = 256 # hop size |
| 65 | 63 | ||
| @@ -92,4 +90,5 @@ class aubio_notes_sinewave(TestCase): · 26 unmodified lines | |||
| 92 | assert_equal (results[0][1], [69, 123, -1]) | 90 | assert_equal (results[0][1], [69, 123, -1]) |
| 93 | 91 | ||
| 94 | if __name__ == '__main__': | 92 | if __name__ == '__main__': |
| 93 | from unittest import main | ||
| 95 | main() | 94 | main() |
| @@ -1,6 +1,5 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal | 3 | from numpy.testing import TestCase, assert_equal, assert_almost_equal |
| 5 | from aubio import onset, fvec | 4 | from aubio import onset, fvec |
| 6 | 5 | ||
| @@ -116,4 +115,5 @@ class aubio_onset_coverate(TestCase): · 109 unmodified lines | |||
| 116 | 115 | ||
| 117 | 116 | ||
| 118 | if __name__ == '__main__': | 117 | if __name__ == '__main__': |
| 118 | from unittest import main | ||
| 119 | main() | 119 | main() |
| @@ -1,9 +1,8 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from numpy.testing import TestCase, assert_equal, assert_array_less | 3 | from numpy.testing import TestCase, assert_equal, assert_array_less |
| 4 | from _tools import parametrize | ||
| 4 | from aubio import fvec, cvec, pvoc, float_type | 5 | from aubio import fvec, cvec, pvoc, float_type |
| 5 | from nose2 import main | ||
| 6 | from nose2.tools import params | ||
| 7 | import numpy as np | 6 | import numpy as np |
| 8 | 7 | ||
| 9 | if float_type == 'float32': | 8 | if float_type == 'float32': |
| @@ -18,7 +17,7 @@ def create_sine(hop_s, freq, samplerate): · 8 unmodified lines | |||
| 18 | def create_noise(hop_s): | 17 | def create_noise(hop_s): |
| 19 | return np.random.rand(hop_s).astype(float_type) * 2. - 1. | 18 | return np.random.rand(hop_s).astype(float_type) * 2. - 1. |
| 20 | 19 | ||
| 21 | class aubio_pvoc_test_case(TestCase): | 20 | class Test_aubio_pvoc_test_case(object): |
| 22 | """ pvoc object test case """ | 21 | """ pvoc object test case """ |
| 23 | 22 | ||
| 24 | def test_members_automatic_sizes_default(self): | 23 | def test_members_automatic_sizes_default(self): |
| @@ -65,7 +64,8 @@ class aubio_pvoc_test_case(TestCase): · 40 unmodified lines | |||
| 65 | r = f.rdo(s) | 64 | r = f.rdo(s) |
| 66 | assert_equal ( t, 0.) | 65 | assert_equal ( t, 0.) |
| 67 | 66 | ||
| 68 | @params( | 67 | resynth_noise_args = "hop_s, ratio" |
| 68 | resynth_noise_values = [ | ||
| 69 | ( 256, 8), | 69 | ( 256, 8), |
| 70 | ( 256, 4), | 70 | ( 256, 4), |
| 71 | ( 256, 2), | 71 | ( 256, 2), |
| @@ -87,13 +87,16 @@ class aubio_pvoc_test_case(TestCase): · 15 unmodified lines | |||
| 87 | (8192, 8), | 87 | (8192, 8), |
| 88 | (8192, 4), | 88 | (8192, 4), |
| 89 | (8192, 2), | 89 | (8192, 2), |
| 90 | ) | 90 | ] |
| 91 | |||
| 92 | @parametrize(resynth_noise_args, resynth_noise_values) | ||
| 91 | def test_resynth_steps_noise(self, hop_s, ratio): | 93 | def test_resynth_steps_noise(self, hop_s, ratio): |
| 92 | """ check the resynthesis of a random signal is correct """ | 94 | """ check the resynthesis of a random signal is correct """ |
| 93 | sigin = create_noise(hop_s) | 95 | sigin = create_noise(hop_s) |
| 94 | self.reconstruction(sigin, hop_s, ratio) | 96 | self.reconstruction(sigin, hop_s, ratio) |
| 95 | 97 | ||
| 96 | @params( | 98 | resynth_sine_args = "samplerate, hop_s, ratio, freq" |
| 99 | resynth_sine_values = [ | ||
| 97 | (44100, 256, 8, 441), | 100 | (44100, 256, 8, 441), |
| 98 | (44100, 256, 4, 1203), | 101 | (44100, 256, 4, 1203), |
| 99 | (44100, 256, 2, 3045), | 102 | (44100, 256, 2, 3045), |
| @@ -108,7 +111,9 @@ class aubio_pvoc_test_case(TestCase): · 8 unmodified lines | |||
| 108 | (22050, 256, 8, 445), | 111 | (22050, 256, 8, 445), |
| 109 | (96000, 1024, 8, 47000), | 112 | (96000, 1024, 8, 47000), |
| 110 | (96000, 1024, 8, 20), | 113 | (96000, 1024, 8, 20), |
| 111 | ) | 114 | ] |
| 115 | |||
| 116 | @parametrize(resynth_sine_args, resynth_sine_values) | ||
| 112 | def test_resynth_steps_sine(self, samplerate, hop_s, ratio, freq): | 117 | def test_resynth_steps_sine(self, samplerate, hop_s, ratio, freq): |
| 113 | """ check the resynthesis of a sine is correct """ | 118 | """ check the resynthesis of a sine is correct """ |
| 114 | sigin = create_sine(hop_s, freq, samplerate) | 119 | sigin = create_sine(hop_s, freq, samplerate) |
| @@ -199,5 +204,5 @@ class aubio_pvoc_wrong_params(TestCase): · 84 unmodified lines | |||
| 199 | self.skipTest('creating aubio.pvoc with size %d did not fail' % win_s) | 204 | self.skipTest('creating aubio.pvoc with size %d did not fail' % win_s) |
| 200 | 205 | ||
| 201 | if __name__ == '__main__': | 206 | if __name__ == '__main__': |
| 207 | from unittest import main | ||
| 202 | main() | 208 | main() |
| 203 | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import TestCase, main | 3 | from numpy.testing import TestCase, assert_equal |
| 4 | from numpy.testing import assert_equal | ||
| 5 | from numpy import sin, arange, mean, median, isnan, pi | 4 | from numpy import sin, arange, mean, median, isnan, pi |
| 6 | from aubio import fvec, pitch, freqtomidi, float_type | 5 | from aubio import fvec, pitch, freqtomidi, float_type |
| 7 | 6 | ||
| @@ -116,10 +115,11 @@ def create_test (algo, mode): · 108 unmodified lines | |||
| 116 | 115 | ||
| 117 | for algo in pitch_algorithms: | 116 | for algo in pitch_algorithms: |
| 118 | for mode in signal_modes: | 117 | for mode in signal_modes: |
| 119 | test_method = create_test (algo, mode) | 118 | _test_method = create_test (algo, mode) |
| 120 | test_method.__name__ = 'test_pitch_%s_%d_%d_%dHz_sin_%.0f' % ( algo, | 119 | _test_method.__name__ = 'test_pitch_%s_%d_%d_%dHz_sin_%.0f' % ( algo, |
| 121 | mode[0], mode[1], mode[2], mode[3] ) | 120 | mode[0], mode[1], mode[2], mode[3] ) |
| 122 | setattr (aubio_pitch_Sinusoid, test_method.__name__, test_method) | 121 | setattr (aubio_pitch_Sinusoid, _test_method.__name__, _test_method) |
| 123 | 122 | ||
| 124 | if __name__ == '__main__': | 123 | if __name__ == '__main__': |
| 124 | from unittest import main | ||
| 125 | main() | 125 | main() |
| @@ -1,13 +1,9 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from nose2 import main | ||
| 4 | from nose2.tools import params | ||
| 5 | from numpy.testing import TestCase | 3 | from numpy.testing import TestCase |
| 6 | from aubio import fvec, source, sink | 4 | from aubio import fvec, source, sink |
| 7 | from .utils import list_all_sounds, get_tmp_sink_path, del_tmp_sink_path | 5 | from utils import list_all_sounds, get_tmp_sink_path, del_tmp_sink_path |
| 8 | 6 | from _tools import parametrize, skipTest, assert_raises | |
| 9 | import warnings | ||
| 10 | warnings.filterwarnings('ignore', category=UserWarning, append=True) | ||
| 11 | 7 | ||
| 12 | list_of_sounds = list_all_sounds('sounds') | 8 | list_of_sounds = list_all_sounds('sounds') |
| 13 | samplerates = [0, 44100, 8000, 32000] | 9 | samplerates = [0, 44100, 8000, 32000] |
| @@ -23,30 +19,26 @@ for soundfile in list_of_sounds: · 9 unmodified lines | |||
| 23 | for samplerate in samplerates: | 19 | for samplerate in samplerates: |
| 24 | all_params.append((hop_size, samplerate, soundfile)) | 20 | all_params.append((hop_size, samplerate, soundfile)) |
| 25 | 21 | ||
| 26 | class aubio_sink_test_case(TestCase): | 22 | class Test_aubio_sink(object): |
| 27 | |||
| 28 | def setUp(self): | ||
| 29 | if not len(list_of_sounds): | ||
| 30 | self.skipTest('add some sound files in \'python/tests/sounds\'') | ||
| 31 | 23 | ||
| 32 | def test_wrong_filename(self): | 24 | def test_wrong_filename(self): |
| 33 | with self.assertRaises(RuntimeError): | 25 | with assert_raises(RuntimeError): |
| 34 | sink('') | 26 | sink('') |
| 35 | 27 | ||
| 36 | def test_wrong_samplerate(self): | 28 | def test_wrong_samplerate(self): |
| 37 | with self.assertRaises(RuntimeError): | 29 | with assert_raises(RuntimeError): |
| 38 | sink(get_tmp_sink_path(), -1) | 30 | sink(get_tmp_sink_path(), -1) |
| 39 | 31 | ||
| 40 | def test_wrong_samplerate_too_large(self): | 32 | def test_wrong_samplerate_too_large(self): |
| 41 | with self.assertRaises(RuntimeError): | 33 | with assert_raises(RuntimeError): |
| 42 | sink(get_tmp_sink_path(), 1536001, 2) | 34 | sink(get_tmp_sink_path(), 1536001, 2) |
| 43 | 35 | ||
| 44 | def test_wrong_channels(self): | 36 | def test_wrong_channels(self): |
| 45 | with self.assertRaises(RuntimeError): | 37 | with assert_raises(RuntimeError): |
| 46 | sink(get_tmp_sink_path(), 44100, -1) | 38 | sink(get_tmp_sink_path(), 44100, -1) |
| 47 | 39 | ||
| 48 | def test_wrong_channels_too_large(self): | 40 | def test_wrong_channels_too_large(self): |
| 49 | with self.assertRaises(RuntimeError): | 41 | with assert_raises(RuntimeError): |
| 50 | sink(get_tmp_sink_path(), 44100, 202020) | 42 | sink(get_tmp_sink_path(), 44100, 202020) |
| 51 | 43 | ||
| 52 | def test_many_sinks(self): | 44 | def test_many_sinks(self): |
| @@ -66,13 +58,13 @@ class aubio_sink_test_case(TestCase): · 13 unmodified lines | |||
| 66 | g.close() | 58 | g.close() |
| 67 | shutil.rmtree(tmpdir) | 59 | shutil.rmtree(tmpdir) |
| 68 | 60 | ||
| 69 | @params(*all_params) | 61 | @parametrize('hop_size, samplerate, path', all_params) |
| 70 | def test_read_and_write(self, hop_size, samplerate, path): | 62 | def test_read_and_write(self, hop_size, samplerate, path): |
| 71 | |||
| 72 | try: | 63 | try: |
| 73 | f = source(path, samplerate, hop_size) | 64 | f = source(path, samplerate, hop_size) |
| 74 | except RuntimeError as e: | 65 | except RuntimeError as e: |
| 75 | self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e))) | 66 | err_msg = '{:s} (hop_s = {:d}, samplerate = {:d})' |
| 67 | skipTest(err_msg.format(str(e), hop_size, samplerate)) | ||
| 76 | if samplerate == 0: samplerate = f.samplerate | 68 | if samplerate == 0: samplerate = f.samplerate |
| 77 | sink_path = get_tmp_sink_path() | 69 | sink_path = get_tmp_sink_path() |
| 78 | g = sink(sink_path, samplerate) | 70 | g = sink(sink_path, samplerate) |
| @@ -84,12 +76,13 @@ class aubio_sink_test_case(TestCase): · 5 unmodified lines | |||
| 84 | if read < f.hop_size: break | 76 | if read < f.hop_size: break |
| 85 | del_tmp_sink_path(sink_path) | 77 | del_tmp_sink_path(sink_path) |
| 86 | 78 | ||
| 87 | @params(*all_params) | 79 | @parametrize('hop_size, samplerate, path', all_params) |
| 88 | def test_read_and_write_multi(self, hop_size, samplerate, path): | 80 | def test_read_and_write_multi(self, hop_size, samplerate, path): |
| 89 | try: | 81 | try: |
| 90 | f = source(path, samplerate, hop_size) | 82 | f = source(path, samplerate, hop_size) |
| 91 | except RuntimeError as e: | 83 | except RuntimeError as e: |
| 92 | self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e))) | 84 | err_msg = '{:s} (hop_s = {:d}, samplerate = {:d})' |
| 85 | skipTest(err_msg.format(str(e), hop_size, samplerate)) | ||
| 93 | if samplerate == 0: samplerate = f.samplerate | 86 | if samplerate == 0: samplerate = f.samplerate |
| 94 | sink_path = get_tmp_sink_path() | 87 | sink_path = get_tmp_sink_path() |
| 95 | g = sink(sink_path, samplerate, channels = f.channels) | 88 | g = sink(sink_path, samplerate, channels = f.channels) |
| @@ -125,4 +118,5 @@ class aubio_sink_test_case(TestCase): · 29 unmodified lines | |||
| 125 | g(vec, 128) | 118 | g(vec, 128) |
| 126 | 119 | ||
| 127 | if __name__ == '__main__': | 120 | if __name__ == '__main__': |
| 128 | main() | 121 | from _tools import run_module_suite |
| 122 | run_module_suite() | ||
| @@ -1,10 +1,9 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase, assert_equal | 3 | from numpy.testing import TestCase, assert_equal |
| 5 | from aubio import slice_source_at_stamps | 4 | from aubio import slice_source_at_stamps |
| 6 | from .utils import count_files_in_directory, get_default_test_sound | 5 | from utils import count_files_in_directory, get_default_test_sound |
| 7 | from .utils import count_samples_in_directory, count_samples_in_file | 6 | from utils import count_samples_in_directory, count_samples_in_file |
| 8 | 7 | ||
| 9 | import tempfile | 8 | import tempfile |
| 10 | import shutil | 9 | import shutil |
| @@ -167,4 +166,5 @@ class aubio_slicing_wrong_ends_test_case(TestCase): · 156 unmodified lines | |||
| 167 | shutil.rmtree(self.output_dir) | 166 | shutil.rmtree(self.output_dir) |
| 168 | 167 | ||
| 169 | if __name__ == '__main__': | 168 | if __name__ == '__main__': |
| 169 | from unittest import main | ||
| 170 | main() | 170 | main() |
| @@ -1,19 +1,17 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from nose2 import main | 3 | |
| 4 | from nose2.tools import params | ||
| 5 | from numpy.testing import TestCase, assert_equal | 4 | from numpy.testing import TestCase, assert_equal |
| 6 | from aubio import source | 5 | from aubio import source |
| 7 | from .utils import list_all_sounds | 6 | from utils import list_all_sounds |
| 8 | 7 | import unittest | |
| 9 | import warnings | 8 | from _tools import parametrize, assert_raises, assert_equal, skipTest |
| 10 | warnings.filterwarnings('ignore', category=UserWarning, append=True) | ||
| 11 | 9 | ||
| 12 | list_of_sounds = list_all_sounds('sounds') | 10 | list_of_sounds = list_all_sounds('sounds') |
| 13 | samplerates = [0, 44100, 8000, 32000] | 11 | samplerates = [0, 44100, 8000, 32000] |
| 14 | hop_sizes = [512, 1024, 64] | 12 | hop_sizes = [512, 1024, 64] |
| 15 | 13 | ||
| 16 | path = None | 14 | default_test_sound = len(list_of_sounds) and list_of_sounds[0] or None |
| 17 | 15 | ||
| 18 | all_params = [] | 16 | all_params = [] |
| 19 | for soundfile in list_of_sounds: | 17 | for soundfile in list_of_sounds: |
| @@ -21,24 +19,20 @@ for soundfile in list_of_sounds: · 1 unmodified line | |||
| 21 | for samplerate in samplerates: | 19 | for samplerate in samplerates: |
| 22 | all_params.append((hop_size, samplerate, soundfile)) | 20 | all_params.append((hop_size, samplerate, soundfile)) |
| 23 | 21 | ||
| 22 | no_sounds_msg = "no test sounds, add some in 'python/tests/sounds/'!" | ||
| 24 | 23 | ||
| 25 | class aubio_source_test_case_base(TestCase): | 24 | _debug = False |
| 26 | |||
| 27 | def setUp(self): | ||
| 28 | if not len(list_of_sounds): | ||
| 29 | self.skipTest('add some sound files in \'python/tests/sounds\'') | ||
| 30 | self.default_test_sound = list_of_sounds[0] | ||
| 31 | 25 | ||
| 32 | class aubio_source_test_case(aubio_source_test_case_base): | 26 | class Test_aubio_source_test_case(object): |
| 33 | 27 | ||
| 34 | @params(*list_of_sounds) | 28 | @parametrize('filename', list_of_sounds) |
| 35 | def test_close_file(self, filename): | 29 | def test_close_file(self, filename): |
| 36 | samplerate = 0 # use native samplerate | 30 | samplerate = 0 # use native samplerate |
| 37 | hop_size = 256 | 31 | hop_size = 256 |
| 38 | f = source(filename, samplerate, hop_size) | 32 | f = source(filename, samplerate, hop_size) |
| 39 | f.close() | 33 | f.close() |
| 40 | 34 | ||
| 41 | @params(*list_of_sounds) | 35 | @parametrize('filename', list_of_sounds) |
| 42 | def test_close_file_twice(self, filename): | 36 | def test_close_file_twice(self, filename): |
| 43 | samplerate = 0 # use native samplerate | 37 | samplerate = 0 # use native samplerate |
| 44 | hop_size = 256 | 38 | hop_size = 256 |
| @@ -46,7 +40,7 @@ class aubio_source_test_case(aubio_source_test_case_base): · 1 unmodified line | |||
| 46 | f.close() | 40 | f.close() |
| 47 | f.close() | 41 | f.close() |
| 48 | 42 | ||
| 49 | class aubio_source_read_test_case(aubio_source_test_case_base): | 43 | class Test_aubio_source_read(object): |
| 50 | 44 | ||
| 51 | def read_from_source(self, f): | 45 | def read_from_source(self, f): |
| 52 | total_frames = 0 | 46 | total_frames = 0 |
| @@ -56,47 +50,51 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 3 unmodified lines | |||
| 56 | if read < f.hop_size: | 50 | if read < f.hop_size: |
| 57 | assert_equal(samples[read:], 0) | 51 | assert_equal(samples[read:], 0) |
| 58 | break | 52 | break |
| 59 | #result_str = "read {:.2f}s ({:d} frames in {:d} blocks at {:d}Hz) from {:s}" | 53 | if _debug: |
| 60 | #result_params = total_frames / float(f.samplerate), total_frames, total_frames//f.hop_size, f.samplerate, f.uri | 54 | result_str = "read {:.2f}s ({:d} frames" |
| 61 | #print (result_str.format(*result_params)) | 55 | result_str += " in {:d} blocks at {:d}Hz) from {:s}" |
| 56 | result_params = total_frames / float(f.samplerate), total_frames, \ | ||
| 57 | total_frames//f.hop_size, f.samplerate, f.uri | ||
| 58 | print (result_str.format(*result_params)) | ||
| 62 | return total_frames | 59 | return total_frames |
| 63 | 60 | ||
| 64 | @params(*all_params) | 61 | @parametrize('hop_size, samplerate, soundfile', all_params) |
| 65 | def test_samplerate_hopsize(self, hop_size, samplerate, soundfile): | 62 | def test_samplerate_hopsize(self, hop_size, samplerate, soundfile): |
| 66 | try: | 63 | try: |
| 67 | f = source(soundfile, samplerate, hop_size) | 64 | f = source(soundfile, samplerate, hop_size) |
| 68 | except RuntimeError as e: | 65 | except RuntimeError as e: |
| 69 | self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e))) | 66 | err_msg = 'failed opening with hop_s={:d}, samplerate={:d} ({:s})' |
| 67 | skipTest(err_msg.format(hop_size, samplerate, str(e))) | ||
| 70 | assert f.samplerate != 0 | 68 | assert f.samplerate != 0 |
| 71 | read_frames = self.read_from_source(f) | 69 | read_frames = self.read_from_source(f) |
| 72 | if 'f_' in soundfile and samplerate == 0: | 70 | if 'f_' in soundfile and samplerate == 0: |
| 73 | import re | 71 | import re |
| 74 | f = re.compile('.*_\([0:9]*f\)_.*') | 72 | f = re.compile(r'.*_\([0:9]*f\)_.*') |
| 75 | match_f = re.findall('([0-9]*)f_', soundfile) | 73 | match_f = re.findall('([0-9]*)f_', soundfile) |
| 76 | if len(match_f) == 1: | 74 | if len(match_f) == 1: |
| 77 | expected_frames = int(match_f[0]) | 75 | expected_frames = int(match_f[0]) |
| 78 | self.assertEqual(expected_frames, read_frames) | 76 | assert_equal(expected_frames, read_frames) |
| 79 | 77 | ||
| 80 | @params(*list_of_sounds) | 78 | @parametrize('p', list_of_sounds) |
| 81 | def test_samplerate_none(self, p): | 79 | def test_samplerate_none(self, p): |
| 82 | f = source(p) | 80 | f = source(p) |
| 83 | assert f.samplerate != 0 | 81 | assert f.samplerate != 0 |
| 84 | self.read_from_source(f) | 82 | self.read_from_source(f) |
| 85 | 83 | ||
| 86 | @params(*list_of_sounds) | 84 | @parametrize('p', list_of_sounds) |
| 87 | def test_samplerate_0(self, p): | 85 | def test_samplerate_0(self, p): |
| 88 | f = source(p, 0) | 86 | f = source(p, 0) |
| 89 | assert f.samplerate != 0 | 87 | assert f.samplerate != 0 |
| 90 | self.read_from_source(f) | 88 | self.read_from_source(f) |
| 91 | 89 | ||
| 92 | @params(*list_of_sounds) | 90 | @parametrize('p', list_of_sounds) |
| 93 | def test_zero_hop_size(self, p): | 91 | def test_zero_hop_size(self, p): |
| 94 | f = source(p, 0, 0) | 92 | f = source(p, 0, 0) |
| 95 | assert f.samplerate != 0 | 93 | assert f.samplerate != 0 |
| 96 | assert f.hop_size != 0 | 94 | assert f.hop_size != 0 |
| 97 | self.read_from_source(f) | 95 | self.read_from_source(f) |
| 98 | 96 | ||
| 99 | @params(*list_of_sounds) | 97 | @parametrize('p', list_of_sounds) |
| 100 | def test_seek_to_half(self, p): | 98 | def test_seek_to_half(self, p): |
| 101 | from random import randint | 99 | from random import randint |
| 102 | f = source(p, 0, 0) | 100 | f = source(p, 0, 0) |
| @@ -108,7 +106,7 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 5 unmodified lines | |||
| 108 | b = self.read_from_source(f) | 106 | b = self.read_from_source(f) |
| 109 | assert a == b + c | 107 | assert a == b + c |
| 110 | 108 | ||
| 111 | @params(*list_of_sounds) | 109 | @parametrize('p', list_of_sounds) |
| 112 | def test_duration(self, p): | 110 | def test_duration(self, p): |
| 113 | total_frames = 0 | 111 | total_frames = 0 |
| 114 | f = source(p) | 112 | f = source(p) |
| @@ -117,43 +115,44 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 2 unmodified lines | |||
| 117 | _, read = f() | 115 | _, read = f() |
| 118 | total_frames += read | 116 | total_frames += read |
| 119 | if read < f.hop_size: break | 117 | if read < f.hop_size: break |
| 120 | self.assertEqual(duration, total_frames) | 118 | assert_equal (duration, total_frames) |
| 121 | 119 | ||
| 122 | 120 | ||
| 123 | class aubio_source_test_wrong_params(TestCase): | 121 | class Test_aubio_source_wrong_params(object): |
| 124 | 122 | ||
| 125 | def test_wrong_file(self): | 123 | def test_wrong_file(self): |
| 126 | with self.assertRaises(RuntimeError): | 124 | with assert_raises(RuntimeError): |
| 127 | source('path_to/unexisting file.mp3') | 125 | source('path_to/unexisting file.mp3') |
| 128 | 126 | ||
| 129 | class aubio_source_test_wrong_params_with_file(aubio_source_test_case_base): | 127 | @unittest.skipIf(default_test_sound is None, no_sounds_msg) |
| 128 | class Test_aubio_source_wrong_params_with_file(TestCase): | ||
| 130 | 129 | ||
| 131 | def test_wrong_samplerate(self): | 130 | def test_wrong_samplerate(self): |
| 132 | with self.assertRaises(ValueError): | 131 | with assert_raises(ValueError): |
| 133 | source(self.default_test_sound, -1) | 132 | source(default_test_sound, -1) |
| 134 | 133 | ||
| 135 | def test_wrong_hop_size(self): | 134 | def test_wrong_hop_size(self): |
| 136 | with self.assertRaises(ValueError): | 135 | with assert_raises(ValueError): |
| 137 | source(self.default_test_sound, 0, -1) | 136 | source(default_test_sound, 0, -1) |
| 138 | 137 | ||
| 139 | def test_wrong_channels(self): | 138 | def test_wrong_channels(self): |
| 140 | with self.assertRaises(ValueError): | 139 | with assert_raises(ValueError): |
| 141 | source(self.default_test_sound, 0, 0, -1) | 140 | source(default_test_sound, 0, 0, -1) |
| 142 | 141 | ||
| 143 | def test_wrong_seek(self): | 142 | def test_wrong_seek(self): |
| 144 | f = source(self.default_test_sound) | 143 | f = source(default_test_sound) |
| 145 | with self.assertRaises(ValueError): | 144 | with assert_raises(ValueError): |
| 146 | f.seek(-1) | 145 | f.seek(-1) |
| 147 | 146 | ||
| 148 | def test_wrong_seek_too_large(self): | 147 | def test_wrong_seek_too_large(self): |
| 149 | f = source(self.default_test_sound) | 148 | f = source(default_test_sound) |
| 150 | try: | 149 | try: |
| 151 | with self.assertRaises(ValueError): | 150 | with assert_raises(ValueError): |
| 152 | f.seek(f.duration + f.samplerate * 10) | 151 | f.seek(f.duration + f.samplerate * 10) |
| 153 | except AssertionError: | 152 | except: |
| 154 | self.skipTest('seeking after end of stream failed raising ValueError') | 153 | skipTest('seeking after end of stream failed raising ValueError') |
| 155 | 154 | ||
| 156 | class aubio_source_readmulti_test_case(aubio_source_read_test_case): | 155 | class Test_aubio_source_readmulti(Test_aubio_source_read): |
| 157 | 156 | ||
| 158 | def read_from_source(self, f): | 157 | def read_from_source(self, f): |
| 159 | total_frames = 0 | 158 | total_frames = 0 |
| @@ -163,15 +162,18 @@ class aubio_source_readmulti_test_case(aubio_source_read_test_case): · 3 unmodified lines | |||
| 163 | if read < f.hop_size: | 162 | if read < f.hop_size: |
| 164 | assert_equal(samples[:,read:], 0) | 163 | assert_equal(samples[:,read:], 0) |
| 165 | break | 164 | break |
| 166 | #result_str = "read {:.2f}s ({:d} frames in {:d} channels and {:d} blocks at {:d}Hz) from {:s}" | 165 | if _debug: |
| 167 | #result_params = total_frames / float(f.samplerate), total_frames, f.channels, int(total_frames/f.hop_size), f.samplerate, f.uri | 166 | result_str = "read {:.2f}s ({:d} frames in {:d} channels" |
| 168 | #print (result_str.format(*result_params)) | 167 | result_str += " and {:d} blocks at {:d}Hz) from {:s}" |
| 168 | result_params = total_frames / float(f.samplerate), total_frames, \ | ||
| 169 | f.channels, int(total_frames/f.hop_size), \ | ||
| 170 | f.samplerate, f.uri | ||
| 171 | print (result_str.format(*result_params)) | ||
| 169 | return total_frames | 172 | return total_frames |
| 170 | 173 | ||
| 171 | class aubio_source_with(aubio_source_test_case_base): | 174 | class Test_aubio_source_with(object): |
| 172 | 175 | ||
| 173 | #@params(*list_of_sounds) | 176 | @parametrize('filename', list_of_sounds) |
| 174 | @params(*list_of_sounds) | ||
| 175 | def test_read_from_mono(self, filename): | 177 | def test_read_from_mono(self, filename): |
| 176 | total_frames = 0 | 178 | total_frames = 0 |
| 177 | hop_size = 2048 | 179 | hop_size = 2048 |
| @@ -185,4 +187,5 @@ class aubio_source_with(aubio_source_test_case_base): · 7 unmodified lines | |||
| 185 | assert_equal(total_frames, input_source.duration) | 187 | assert_equal(total_frames, input_source.duration) |
| 186 | 188 | ||
| 187 | if __name__ == '__main__': | 189 | if __name__ == '__main__': |
| 188 | main() | 190 | from _tools import run_module_suite |
| 191 | run_module_suite() | ||
| @@ -8,7 +8,7 @@ import unittest · 7 unmodified lines | |||
| 8 | import aubio | 8 | import aubio |
| 9 | import numpy as np | 9 | import numpy as np |
| 10 | from numpy.testing import assert_equal | 10 | from numpy.testing import assert_equal |
| 11 | from .utils import get_tmp_sink_path | 11 | from utils import get_tmp_sink_path |
| 12 | 12 | ||
| 13 | class aubio_source_test_case(unittest.TestCase): | 13 | class aubio_source_test_case(unittest.TestCase): |
| 14 | 14 | ||
| @@ -1,6 +1,5 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase, assert_equal, assert_almost_equal | 3 | from numpy.testing import TestCase, assert_equal, assert_almost_equal |
| 5 | from numpy import random, arange, log, zeros | 4 | from numpy import random, arange, log, zeros |
| 6 | from aubio import specdesc, cvec, float_type | 5 | from aubio import specdesc, cvec, float_type |
| @@ -229,4 +228,5 @@ class aubio_specdesc_wrong(TestCase): · 222 unmodified lines | |||
| 229 | specdesc("unknown", 512) | 228 | specdesc("unknown", 512) |
| 230 | 229 | ||
| 231 | if __name__ == '__main__': | 230 | if __name__ == '__main__': |
| 231 | from unittest import main | ||
| 232 | main() | 232 | main() |
| @@ -1,6 +1,5 @@ | |||
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | 2 | ||
| 3 | from unittest import main | ||
| 4 | from numpy.testing import TestCase | 3 | from numpy.testing import TestCase |
| 5 | from aubio import fvec, zero_crossing_rate | 4 | from aubio import fvec, zero_crossing_rate |
| 6 | 5 | ||
| @@ -43,4 +42,5 @@ class zero_crossing_rate_test_case(TestCase): · 36 unmodified lines | |||
| 43 | self.assertEqual(2./buf_size, zero_crossing_rate(self.vector)) | 42 | self.assertEqual(2./buf_size, zero_crossing_rate(self.vector)) |
| 44 | 43 | ||
| 45 | if __name__ == '__main__': | 44 | if __name__ == '__main__': |
| 45 | from unittest import main | ||
| 46 | main() | 46 | main() |
| @@ -8,11 +8,8 @@ from tempfile import mkstemp · 7 unmodified lines | |||
| 8 | DEFAULT_SOUND = '22050Hz_5s_brownnoise.wav' | 8 | DEFAULT_SOUND = '22050Hz_5s_brownnoise.wav' |
| 9 | 9 | ||
| 10 | def array_from_text_file(filename, dtype = 'float'): | 10 | def array_from_text_file(filename, dtype = 'float'): |
| 11 | filename = os.path.join(os.path.dirname(__file__), filename) | 11 | realpathname = os.path.join(os.path.dirname(__file__), filename) |
| 12 | with open(filename) as f: | 12 | return np.loadtxt(realpathname, dtype = dtype) |
| 13 | lines = f.readlines() | ||
| 14 | return np.array([line.split() for line in lines], | ||
| 15 | dtype = dtype) | ||
| 16 | 13 | ||
| 17 | def list_all_sounds(rel_dir): | 14 | def list_all_sounds(rel_dir): |
| 18 | datadir = os.path.join(os.path.dirname(__file__), rel_dir) | 15 | datadir = os.path.join(os.path.dirname(__file__), rel_dir) |
| @@ -38,13 +35,10 @@ def del_tmp_sink_path(path): · 19 unmodified lines | |||
| 38 | try: | 35 | try: |
| 39 | os.unlink(path) | 36 | os.unlink(path) |
| 40 | except WindowsError as e: | 37 | except WindowsError as e: |
| 41 | print("deleting {:s} failed ({:s}), reopening".format(path, repr(e))) | 38 | # removing the temporary directory sometimes fails on windows |
| 42 | with open(path, 'wb') as f: | 39 | import warnings |
| 43 | f.close() | 40 | errmsg = "failed deleting temporary file {:s} ({:s})" |
| 44 | try: | 41 | warnings.warn(UserWarning(errmsg.format(path, repr(e)))) |
| 45 | os.unlink(path) | ||
| 46 | except WindowsError as f: | ||
| 47 | print("deleting {:s} failed ({:s}), aborting".format(path, repr(e))) | ||
| 48 | 42 | ||
| 49 | def array_from_yaml_file(filename): | 43 | def array_from_yaml_file(filename): |
| 50 | import yaml | 44 | import yaml |