Showing the changes to python (10 of 13 files). Show all
Unified · Split
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | #define PYAUBIO_dct_doc \ |
| 2 | 2 | "dct(size=1024)\n"\ |
| 3 | 3 | "\n"\ |
| 4 | − "Compute Discrete Fourier Transorms of Type-II.\n"\ | |
| 4 | + "Compute Discrete Fourier Transforms of Type-II.\n"\ | |
| 5 | 5 | "\n"\ |
| 6 | 6 | "Parameters\n"\ |
| 7 | 7 | "----------\n"\ |
| @@ -3,7 +3,7 @@ · 2 unmodified lines | ||
| 3 | 3 | static char Py_fft_doc[] = "" |
| 4 | 4 | "fft(size=1024)\n" |
| 5 | 5 | "\n" |
| 6 | −"Compute Fast Fourier Transorms.\n" | |
| 6 | +"Compute Fast Fourier Transforms.\n" | |
| 7 | 7 | "\n" |
| 8 | 8 | "Parameters\n" |
| 9 | 9 | "----------\n" |
| @@ -156,8 +156,18 @@ Py_filter_set_c_weighting (Py_filter * self, PyObject *args) · 155 unmodified lines | ||
| 156 | 156 | |
| 157 | 157 | err = aubio_filter_set_c_weighting (self->o, samplerate); |
| 158 | 158 | if (err > 0) { |
| 159 | − PyErr_SetString (PyExc_ValueError, | |
| 160 | − "error when setting filter to C-weighting"); | |
| 159 | + if (PyErr_Occurred() == NULL) { | |
| 160 | + PyErr_SetString (PyExc_ValueError, | |
| 161 | + "error when setting filter to C-weighting"); | |
| 162 | + } else { | |
| 163 | + // change the RuntimeError into ValueError | |
| 164 | + PyObject *type, *value, *traceback; | |
| 165 | + PyErr_Fetch(&type, &value, &traceback); | |
| 166 | + Py_XDECREF(type); | |
| 167 | + type = PyExc_ValueError; | |
| 168 | + Py_XINCREF(type); | |
| 169 | + PyErr_Restore(type, value, traceback); | |
| 170 | + } | |
| 161 | 171 | return NULL; |
| 162 | 172 | } |
| 163 | 173 | Py_RETURN_NONE; |
| @@ -174,8 +184,18 @@ Py_filter_set_a_weighting (Py_filter * self, PyObject *args) · 10 unmodified lines | ||
| 174 | 184 | |
| 175 | 185 | err = aubio_filter_set_a_weighting (self->o, samplerate); |
| 176 | 186 | if (err > 0) { |
| 177 | − PyErr_SetString (PyExc_ValueError, | |
| 178 | − "error when setting filter to A-weighting"); | |
| 187 | + if (PyErr_Occurred() == NULL) { | |
| 188 | + PyErr_SetString (PyExc_ValueError, | |
| 189 | + "error when setting filter to A-weighting"); | |
| 190 | + } else { | |
| 191 | + // change the RuntimeError into ValueError | |
| 192 | + PyObject *type, *value, *traceback; | |
| 193 | + PyErr_Fetch(&type, &value, &traceback); | |
| 194 | + Py_XDECREF(type); | |
| 195 | + type = PyExc_ValueError; | |
| 196 | + Py_XINCREF(type); | |
| 197 | + PyErr_Restore(type, value, traceback); | |
| 198 | + } | |
| 179 | 199 | return NULL; |
| 180 | 200 | } |
| 181 | 201 | Py_RETURN_NONE; |
| @@ -192,8 +212,18 @@ Py_filter_set_biquad(Py_filter * self, PyObject *args) · 10 unmodified lines | ||
| 192 | 212 | |
| 193 | 213 | err = aubio_filter_set_biquad (self->o, b0, b1, b2, a1, a2); |
| 194 | 214 | if (err > 0) { |
| 195 | − PyErr_SetString (PyExc_ValueError, | |
| 196 | − "error when setting filter with biquad coefficients"); | |
| 215 | + if (PyErr_Occurred() == NULL) { | |
| 216 | + PyErr_SetString (PyExc_ValueError, | |
| 217 | + "error when setting filter with biquad coefficients"); | |
| 218 | + } else { | |
| 219 | + // change the RuntimeError into ValueError | |
| 220 | + PyObject *type, *value, *traceback; | |
| 221 | + PyErr_Fetch(&type, &value, &traceback); | |
| 222 | + Py_XDECREF(type); | |
| 223 | + type = PyExc_ValueError; | |
| 224 | + Py_XINCREF(type); | |
| 225 | + PyErr_Restore(type, value, traceback); | |
| 226 | + } | |
| 197 | 227 | return NULL; |
| 198 | 228 | } |
| 199 | 229 | Py_RETURN_NONE; |
| @@ -326,7 +326,10 @@ Py_filterbank_set_triangle_bands (Py_filterbank * self, PyObject *args) · 325 unmodified lines | ||
| 326 | 326 | // change the RuntimeError into ValueError |
| 327 | 327 | PyObject *type, *value, *traceback; |
| 328 | 328 | PyErr_Fetch(&type, &value, &traceback); |
| 329 | − PyErr_Restore(PyExc_ValueError, value, traceback); | |
| 329 | + Py_XDECREF(type); | |
| 330 | + type = PyExc_ValueError; | |
| 331 | + Py_XINCREF(type); | |
| 332 | + PyErr_Restore(type, value, traceback); | |
| 330 | 333 | } |
| 331 | 334 | return NULL; |
| 332 | 335 | } |
| @@ -351,7 +354,10 @@ Py_filterbank_set_mel_coeffs_slaney (Py_filterbank * self, PyObject *args) · 18 unmodified lines | ||
| 351 | 354 | // change the RuntimeError into ValueError |
| 352 | 355 | PyObject *type, *value, *traceback; |
| 353 | 356 | PyErr_Fetch(&type, &value, &traceback); |
| 354 | − PyErr_Restore(PyExc_ValueError, value, traceback); | |
| 357 | + Py_XDECREF(type); | |
| 358 | + type = PyExc_ValueError; | |
| 359 | + Py_XINCREF(type); | |
| 360 | + PyErr_Restore(type, value, traceback); | |
| 355 | 361 | } |
| 356 | 362 | return NULL; |
| 357 | 363 | } |
| @@ -380,7 +386,10 @@ Py_filterbank_set_mel_coeffs (Py_filterbank * self, PyObject *args) · 22 unmodified lines | ||
| 380 | 386 | // change the RuntimeError into ValueError |
| 381 | 387 | PyObject *type, *value, *traceback; |
| 382 | 388 | PyErr_Fetch(&type, &value, &traceback); |
| 383 | − PyErr_Restore(PyExc_ValueError, value, traceback); | |
| 389 | + Py_XDECREF(type); | |
| 390 | + type = PyExc_ValueError; | |
| 391 | + Py_XINCREF(type); | |
| 392 | + PyErr_Restore(type, value, traceback); | |
| 384 | 393 | } |
| 385 | 394 | return NULL; |
| 386 | 395 | } |
| @@ -409,7 +418,10 @@ Py_filterbank_set_mel_coeffs_htk (Py_filterbank * self, PyObject *args) · 22 unmodified lines | ||
| 409 | 418 | // change the RuntimeError into ValueError |
| 410 | 419 | PyObject *type, *value, *traceback; |
| 411 | 420 | PyErr_Fetch(&type, &value, &traceback); |
| 412 | − PyErr_Restore(PyExc_ValueError, value, traceback); | |
| 421 | + Py_XDECREF(type); | |
| 422 | + type = PyExc_ValueError; | |
| 423 | + Py_XINCREF(type); | |
| 424 | + PyErr_Restore(type, value, traceback); | |
| 413 | 425 | } |
| 414 | 426 | return NULL; |
| 415 | 427 | } |
| @@ -463,7 +475,10 @@ Py_filterbank_set_power(Py_filterbank *self, PyObject *args) · 47 unmodified lines | ||
| 463 | 475 | // change the RuntimeError into ValueError |
| 464 | 476 | PyObject *type, *value, *traceback; |
| 465 | 477 | PyErr_Fetch(&type, &value, &traceback); |
| 466 | − PyErr_Restore(PyExc_ValueError, value, traceback); | |
| 478 | + Py_XDECREF(type); | |
| 479 | + type = PyExc_ValueError; | |
| 480 | + Py_XINCREF(type); | |
| 481 | + PyErr_Restore(type, value, traceback); | |
| 467 | 482 | } |
| 468 | 483 | return NULL; |
| 469 | 484 | } |
| @@ -493,7 +508,10 @@ Py_filterbank_set_norm(Py_filterbank *self, PyObject *args) · 23 unmodified lines | ||
| 493 | 508 | // change the RuntimeError into ValueError |
| 494 | 509 | PyObject *type, *value, *traceback; |
| 495 | 510 | PyErr_Fetch(&type, &value, &traceback); |
| 496 | − PyErr_Restore(PyExc_ValueError, value, traceback); | |
| 511 | + Py_XDECREF(type); | |
| 512 | + type = PyExc_ValueError; | |
| 513 | + Py_XINCREF(type); | |
| 514 | + PyErr_Restore(type, value, traceback); | |
| 497 | 515 | } |
| 498 | 516 | return NULL; |
| 499 | 517 | } |
| @@ -81,7 +81,7 @@ static char Py_sink_close_doc[] = "" · 80 unmodified lines | ||
| 81 | 81 | "Close this sink now.\n" |
| 82 | 82 | "\n" |
| 83 | 83 | "By default, the sink will be closed before being deleted.\n" |
| 84 | −"Explicitely closing a sink can be useful to control the number\n" | |
| 84 | +"Explicitly closing a sink can be useful to control the number\n" | |
| 85 | 85 | "of files simultaneously opened.\n" |
| 86 | 86 | ""; |
| 87 | 87 | |
| @@ -523,7 +523,10 @@ Pyaubio_{shortname}_set_{param} (Py_{shortname} *self, PyObject *args) · 522 unmodified lines | ||
| 523 | 523 | // change the RuntimeError into ValueError |
| 524 | 524 | PyObject *type, *value, *traceback; |
| 525 | 525 | PyErr_Fetch(&type, &value, &traceback); |
| 526 | − PyErr_Restore(PyExc_ValueError, value, traceback); | |
| 526 | + Py_XDECREF(type); | |
| 527 | + type = PyExc_ValueError; | |
| 528 | + Py_XINCREF(type); | |
| 529 | + PyErr_Restore(type, value, traceback); | |
| 527 | 530 | }} |
| 528 | 531 | return NULL; |
| 529 | 532 | }} |
| @@ -121,23 +121,24 @@ def get_cpp_output(header=header, usedouble=False): · 120 unmodified lines | ||
| 121 | 121 | print("Running command: {:s}".format(" ".join(cpp_cmd))) |
| 122 | 122 | proc = subprocess.Popen(cpp_cmd, |
| 123 | 123 | stderr=subprocess.PIPE, |
| 124 | − stdout=subprocess.PIPE) | |
| 124 | + stdout=subprocess.PIPE, | |
| 125 | + universal_newlines=True) | |
| 125 | 126 | assert proc, 'Proc was none' |
| 126 | 127 | cpp_output = proc.stdout.read() |
| 127 | 128 | err_output = proc.stderr.read() |
| 128 | 129 | if err_output: |
| 129 | 130 | print("Warning: preprocessor produced errors or warnings:\n%s" \ |
| 130 | − % err_output.decode('utf8')) | |
| 131 | + % err_output) | |
| 131 | 132 | if not cpp_output: |
| 132 | 133 | raise_msg = "preprocessor output is empty! Running command " \ |
| 133 | 134 | + "\"%s\" failed" % " ".join(cpp_cmd) |
| 134 | 135 | if err_output: |
| 135 | − raise_msg += " with stderr: \"%s\"" % err_output.decode('utf8') | |
| 136 | + raise_msg += " with stderr: \"%s\"" % err_output | |
| 136 | 137 | else: |
| 137 | 138 | raise_msg += " with no stdout or stderr" |
| 138 | 139 | raise Exception(raise_msg) |
| 139 | 140 | if not isinstance(cpp_output, list): |
| 140 | − cpp_output = [l.strip() for l in cpp_output.decode('utf8').split('\n')] | |
| 141 | + cpp_output = [l.strip() for l in cpp_output.split('\n')] | |
| 141 | 142 | |
| 142 | 143 | return cpp_output |
| 143 | 144 | |
| @@ -4,23 +4,28 @@ from unittest import main · 3 unmodified lines | ||
| 4 | 4 | from numpy.testing import TestCase |
| 5 | 5 | from numpy.testing import assert_equal, assert_almost_equal |
| 6 | 6 | from _tools import assert_warns |
| 7 | +from utils import is32bit | |
| 7 | 8 | import numpy as np |
| 8 | 9 | import aubio |
| 9 | 10 | |
| 10 | 11 | from aubio import hztomel, meltohz |
| 11 | 12 | from aubio import hztomel_htk, meltohz_htk |
| 12 | 13 | |
| 13 | − | |
| 14 | 14 | class aubio_hztomel_test_case(TestCase): |
| 15 | 15 | |
| 16 | 16 | def test_hztomel(self): |
| 17 | 17 | assert_equal(hztomel(0.), 0.) |
| 18 | 18 | assert_almost_equal(hztomel(400. / 3.), 2., decimal=5) |
| 19 | 19 | assert_almost_equal(hztomel(1000. / 3), 5.) |
| 20 | − assert_equal(hztomel(200.), 3.) | |
| 20 | + # on 32bit, some of these tests fails unless compiling with -ffloat-store | |
| 21 | + try: | |
| 22 | + assert_equal(hztomel(200.), 3.) | |
| 23 | + except AssertionError: | |
| 24 | + if not is32bit(): raise | |
| 25 | + assert_almost_equal(hztomel(200.), 3., decimal=5) | |
| 21 | 26 | assert_almost_equal(hztomel(1000.), 15) |
| 22 | − assert_almost_equal(hztomel(6400), 42) | |
| 23 | − assert_almost_equal(hztomel(40960), 69) | |
| 27 | + assert_almost_equal(hztomel(6400), 42, decimal=5) | |
| 28 | + assert_almost_equal(hztomel(40960), 69, decimal=5) | |
| 24 | 29 | |
| 25 | 30 | for m in np.linspace(0, 1000, 100): |
| 26 | 31 | assert_almost_equal(hztomel(meltohz(m)) - m, 0, decimal=3) |
| @@ -28,7 +33,11 @@ class aubio_hztomel_test_case(TestCase): · 1 unmodified line | ||
| 28 | 33 | def test_meltohz(self): |
| 29 | 34 | assert_equal(meltohz(0.), 0.) |
| 30 | 35 | assert_almost_equal(meltohz(2), 400. / 3., decimal=4) |
| 31 | − assert_equal(meltohz(3.), 200.) | |
| 36 | + try: | |
| 37 | + assert_equal(meltohz(3.), 200.) | |
| 38 | + except AssertionError: | |
| 39 | + if not is32bit(): raise | |
| 40 | + assert_almost_equal(meltohz(3.), 200., decimal=5) | |
| 32 | 41 | assert_almost_equal(meltohz(5), 1000. / 3., decimal=4) |
| 33 | 42 | assert_almost_equal(meltohz(15), 1000., decimal=4) |
| 34 | 43 | assert_almost_equal(meltohz(42), 6400., decimal=2) |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | #! /usr/bin/env python |
| 2 | 2 | |
| 3 | 3 | from numpy.testing import TestCase, assert_equal, assert_array_less |
| 4 | −from _tools import parametrize | |
| 4 | +from _tools import parametrize, skipTest | |
| 5 | 5 | from aubio import fvec, cvec, pvoc, float_type |
| 6 | 6 | import numpy as np |
| 7 | 7 | |
| @@ -51,7 +51,7 @@ class Test_aubio_pvoc_test_case(object): · 43 unmodified lines | ||
| 51 | 51 | assert_equal (s.phas[s.phas > 0], +np.pi) |
| 52 | 52 | assert_equal (s.phas[s.phas < 0], -np.pi) |
| 53 | 53 | assert_equal (np.abs(s.phas[np.abs(s.phas) != np.pi]), 0) |
| 54 | − self.skipTest('pvoc(fvec(%d)).phas != +0, ' % win_s \ | |
| 54 | + skipTest('pvoc(fvec(%d)).phas != +0, ' % win_s \ | |
| 55 | 55 | + 'This is expected when using fftw3 on powerpc.') |
| 56 | 56 | assert_equal ( r, 0.) |
| 57 | 57 | |
| @@ -3,11 +3,15 @@ · 2 unmodified lines | ||
| 3 | 3 | import os |
| 4 | 4 | import re |
| 5 | 5 | import glob |
| 6 | +import struct | |
| 6 | 7 | import numpy as np |
| 7 | 8 | from tempfile import mkstemp |
| 8 | 9 | |
| 9 | 10 | DEFAULT_SOUND = '22050Hz_5s_brownnoise.wav' |
| 10 | 11 | |
| 12 | +def is32bit(): | |
| 13 | + return struct.calcsize("P") * 8 == 32 | |
| 14 | + | |
| 11 | 15 | def array_from_text_file(filename, dtype = 'float'): |
| 12 | 16 | realpathname = os.path.join(os.path.dirname(__file__), filename) |
| 13 | 17 | return np.loadtxt(realpathname, dtype = dtype) |