shithub: aubio

Download patch

ref: 1a6ef2cc59efef576596a70614b44f301bf649f9
parent: 84e0606b011337625ca664ea1a26162a884b6009
author: Paul Brossier <piem@piem.org>
date: Thu Dec 24 23:57:49 EST 2009

test_*.py: switch to mono, add tests for cvec

--- /dev/null
+++ b/interfaces/python/test_cvec.py
@@ -1,0 +1,50 @@
+from numpy.testing import TestCase, run_module_suite
+from numpy.testing import assert_equal, assert_almost_equal
+from _aubio import cvec
+from numpy import array, shape, pi
+
+class aubio_cvec_test_case(TestCase):
+
+    def test_vector_created_with_zeroes(self):
+        a = cvec(10)
+        a
+        shape(a.norm)
+        shape(a.phas)
+        a.norm[0]
+        assert_equal(a.norm, 0.)
+        assert_equal(a.phas, 0.)
+
+    def test_vector_assign_element(self):
+        a = cvec()
+        a.norm[0] = 1
+        assert_equal(a.norm[0], 1)
+        a.phas[0] = 1
+        assert_equal(a.phas[0], 1)
+
+    def test_vector_assign_element_end(self):
+        a = cvec()
+        a.norm[-1] = 1
+        assert_equal(a.norm[-1], 1)
+        assert_equal(a.norm[len(a.norm)-1], 1)
+        a.phas[-1] = 1
+        assert_equal(a.phas[-1], 1)
+        assert_equal(a.phas[len(a.phas)-1], 1)
+
+    def test_assign_cvec_norm_slice(self):
+        spec = cvec(1024)
+        spec.norm[40:100] = 100
+        assert_equal (spec.norm[0:40], 0)
+        assert_equal (spec.norm[40:100], 100)
+        assert_equal (spec.norm[100:-1], 0)
+        assert_equal (spec.phas, 0)
+
+    def test_assign_cvec_phas_slice(self):
+        spec = cvec(1024)
+        spec.phas[39:-1] = -pi
+        assert_equal (spec.phas[0:39], 0)
+        assert_equal (spec.phas[39:-1], -pi)
+        assert_equal (spec.norm, 0)
+
+if __name__ == '__main__':
+    from unittest import main
+    main()
--- a/interfaces/python/test_fft.py
+++ b/interfaces/python/test_fft.py
@@ -1,7 +1,8 @@
 from numpy.testing import TestCase, run_module_suite
 from numpy.testing import assert_equal, assert_almost_equal
 # WARNING: numpy also has an fft object
-from _aubio import fft, fvec, cvec
+from _aubio import fft, cvec
+from aubio import fvec
 from numpy import array, shape
 from math import pi
 
@@ -9,28 +10,24 @@
 
   def test_members(self):
     f = fft()
-    assert_equal ([f.win_s, f.channels], [1024, 1])
-    f = fft(2048, 4)
-    assert_equal ([f.win_s, f.channels], [2048, 4])
+    assert_equal (f.win_s, 1024)
 
   def test_output_dimensions(self):
     """ check the dimensions of output """
-    win_s, chan = 1024, 3
-    timegrain = fvec(win_s, chan)
-    f = fft(win_s, chan)
+    win_s = 1024
+    timegrain = fvec(win_s)
+    f = fft(win_s)
     fftgrain = f (timegrain)
-    assert_equal (array(fftgrain), 0)
-    assert_equal (shape(fftgrain), (chan * 2, win_s/2+1))
     assert_equal (fftgrain.norm, 0)
-    assert_equal (shape(fftgrain.norm), (chan, win_s/2+1))
+    assert_equal (shape(fftgrain.norm), (win_s/2+1,))
     assert_equal (fftgrain.phas, 0)
-    assert_equal (shape(fftgrain.phas), (chan, win_s/2+1))
+    assert_equal (shape(fftgrain.phas), (win_s/2+1,))
 
   def test_zeros(self):
     """ check the transform of zeros """
-    win_s, chan = 512, 3
-    timegrain = fvec(win_s, chan)
-    f = fft(win_s, chan)
+    win_s = 512
+    timegrain = fvec(win_s)
+    f = fft(win_s)
     fftgrain = f(timegrain)
     assert_equal ( fftgrain.norm == 0, True )
     assert_equal ( fftgrain.phas == 0, True )
@@ -39,14 +36,14 @@
     """ check the transform of one impulse at a random place """
     from random import random
     from math import floor
-    win_s, chan = 256, 1
+    win_s = 256
     i = floor(random()*win_s)
     impulse = pi * random() 
-    f = fft(win_s, chan)
-    timegrain = fvec(win_s, chan)
-    timegrain[0][i] = impulse 
+    f = fft(win_s)
+    timegrain = fvec(win_s)
+    timegrain[i] = impulse 
     fftgrain = f ( timegrain )
-    #self.plot_this ( fftgrain.phas[0] )
+    #self.plot_this ( fftgrain.phas )
     assert_almost_equal ( fftgrain.norm, impulse, decimal = 6 )
     assert_equal ( fftgrain.phas <= pi, True)
     assert_equal ( fftgrain.phas >= -pi, True)
@@ -55,24 +52,24 @@
     """ check the transform of one impulse at a random place """
     from random import random
     from math import floor
-    win_s, chan = 256, 1
+    win_s = 256
     i = 0 
     impulse = -10. 
-    f = fft(win_s, chan)
-    timegrain = fvec(win_s, chan)
-    timegrain[0][i] = impulse 
+    f = fft(win_s)
+    timegrain = fvec(win_s)
+    timegrain[i] = impulse 
     fftgrain = f ( timegrain )
-    #self.plot_this ( fftgrain.phas[0] )
+    #self.plot_this ( fftgrain.phas )
     assert_almost_equal ( fftgrain.norm, abs(impulse), decimal = 6 )
     if impulse < 0:
       # phase can be pi or -pi, as it is not unwrapped
-      assert_almost_equal ( abs(fftgrain.phas[0][1:-1]) , pi, decimal = 6 )
-      assert_almost_equal ( fftgrain.phas[0][0], pi, decimal = 6)
-      assert_almost_equal ( fftgrain.phas[0][-1], pi, decimal = 6)
+      assert_almost_equal ( abs(fftgrain.phas[1:-1]) , pi, decimal = 6 )
+      assert_almost_equal ( fftgrain.phas[0], pi, decimal = 6)
+      assert_almost_equal ( fftgrain.phas[-1], pi, decimal = 6)
     else:
-      assert_equal ( fftgrain.phas[0][1:-1] == 0, True)
-      assert_equal ( fftgrain.phas[0][0] == 0, True)
-      assert_equal ( fftgrain.phas[0][-1] == 0, True)
+      assert_equal ( fftgrain.phas[1:-1] == 0, True)
+      assert_equal ( fftgrain.phas[0] == 0, True)
+      assert_equal ( fftgrain.phas[-1] == 0, True)
     # now check the resynthesis
     synthgrain = f.rdo ( fftgrain )
     #self.plot_this ( fftgrain.phas.T )
@@ -82,25 +79,24 @@
     assert_almost_equal ( synthgrain, timegrain, decimal = 6 )
 
   def test_impulse_at_zero(self):
-    """ check the transform of one impulse at a index 0 in one channel """
-    win_s, chan = 1024, 2
+    """ check the transform of one impulse at a index 0 """
+    win_s = 1024
     impulse = pi
-    f = fft(win_s, chan)
-    timegrain = fvec(win_s, chan)
-    timegrain[0][0] = impulse 
+    f = fft(win_s)
+    timegrain = fvec(win_s)
+    timegrain[0] = impulse 
     fftgrain = f ( timegrain )
     #self.plot_this ( fftgrain.phas )
     assert_equal ( fftgrain.phas[0], 0)
     assert_equal ( fftgrain.phas[1], 0)
-    assert_almost_equal ( fftgrain.norm[0], impulse, decimal = 6 )
-    assert_equal ( fftgrain.norm[0], impulse)
+    assert_almost_equal (fftgrain.norm[0], impulse, decimal = 6 )
 
   def test_rdo_before_do(self):
     """ check running fft.rdo before fft.do works """
-    win_s, chan = 1024, 2
+    win_s = 1024
     impulse = pi
-    f = fft(win_s, chan)
-    fftgrain = cvec(win_s, chan)
+    f = fft(win_s)
+    fftgrain = cvec(win_s)
     t = f.rdo( fftgrain )
     assert_equal ( t, 0 )
 
--- a/interfaces/python/test_filter.py
+++ b/interfaces/python/test_filter.py
@@ -1,6 +1,7 @@
 from numpy.testing import TestCase, run_module_suite
 from numpy.testing import assert_equal, assert_almost_equal
 from _aubio import *
+from aubio import fvec
 from numpy import array
 
 def array_from_text_file(filename, dtype = 'float'):
@@ -11,49 +12,49 @@
 
   def test_members(self):
     f = digital_filter()
-    assert_equal ([f.channels, f.order], [1, 7])
-    f = digital_filter(5, 2)
-    assert_equal ([f.channels, f.order], [2, 5])
+    assert_equal (f.order, 7)
+    f = digital_filter(5)
+    assert_equal (f.order, 5)
     f(fvec())
   
   def test_cweighting_error(self):
-    f = digital_filter (2, 1)
+    f = digital_filter (2)
     self.assertRaises ( ValueError, f.set_c_weighting, 44100 )
-    f = digital_filter (8, 1)
+    f = digital_filter (8)
     self.assertRaises ( ValueError, f.set_c_weighting, 44100 )
-    f = digital_filter (5, 1)
+    f = digital_filter (5)
     self.assertRaises ( ValueError, f.set_c_weighting, 4000 )
-    f = digital_filter (5, 1)
+    f = digital_filter (5)
     self.assertRaises ( ValueError, f.set_c_weighting, 193000 )
-    f = digital_filter (7, 1)
+    f = digital_filter (7)
     self.assertRaises ( ValueError, f.set_a_weighting, 193000 )
-    f = digital_filter (5, 1)
+    f = digital_filter (5)
     self.assertRaises ( ValueError, f.set_a_weighting, 192000 )
 
   def test_c_weighting(self):
     expected = array_from_text_file('c_weighting_test_simple.expected')
-    f = digital_filter(5, 1)
+    f = digital_filter(5)
     f.set_c_weighting(44100)
     v = fvec(32)
-    v[0][12] = .5
+    v[12] = .5
     u = f(v)
     assert_almost_equal (expected[1], u)
 
   def test_a_weighting(self):
     expected = array_from_text_file('a_weighting_test_simple.expected')
-    f = digital_filter(7, 1)
+    f = digital_filter(7)
     f.set_a_weighting(44100)
     v = fvec(32)
-    v[0][12] = .5
+    v[12] = .5
     u = f(v)
     assert_almost_equal (expected[1], u)
 
   def test_a_weighting_parted(self):
     expected = array_from_text_file('a_weighting_test_simple.expected')
-    f = digital_filter(7, 1)
+    f = digital_filter(7)
     f.set_a_weighting(44100)
     v = fvec(16)
-    v[0][12] = .5
+    v[12] = .5
     u = f(v)
     assert_almost_equal (expected[1][:16], u)
     # one more time
--- a/interfaces/python/test_filterbank.py
+++ b/interfaces/python/test_filterbank.py
@@ -2,6 +2,7 @@
 from numpy.testing import assert_equal, assert_almost_equal
 from numpy import array, shape
 from _aubio import *
+#from aubio import cvec
 
 class aubio_filter_test_case(TestCase):
 
@@ -10,6 +11,7 @@
     f.set_mel_coeffs_slaney(16000)
     a = f.get_coeffs()
     a.T
+    assert_equal(shape (a), (40, 512/2 + 1) )
 
   def test_other_slaney(self):
     f = filterbank(40, 512*2)
@@ -22,16 +24,25 @@
       a = f.get_coeffs()
       #print "sum is", sum(sum(a))
 
-  def test_triangle_freqs(self):
+  def test_triangle_freqs_zeros(self):
     f = filterbank(9, 1024)
     freq_list = [40, 80, 200, 400, 800, 1600, 3200, 6400, 12800, 15000, 24000]
     freqs = array(freq_list, dtype = 'float32')
     f.set_triangle_bands(freqs, 48000)
     f.get_coeffs().T
-    assert_equal ( f(cvec(1024)), [0] * 9)
+    assert_equal ( f(cvec(1024)), 0)
+
+  def test_triangle_freqs_ones(self):
+    f = filterbank(9, 1024)
+    freq_list = [40, 80, 200, 400, 800, 1600, 3200, 6400, 12800, 15000, 24000]
+    freqs = array(freq_list, dtype = 'float32')
+    f.set_triangle_bands(freqs, 48000)
+    f.get_coeffs().T
     spec = cvec(1024)
-    spec[0][40:100] = 100
-    #print f(spec)
+    spec.norm[:] = 1
+    assert_almost_equal ( f(spec),
+            [ 0.02070313,  0.02138672,  0.02127604,  0.02135417, 
+        0.02133301, 0.02133301,  0.02133311,  0.02133334,  0.02133345])
 
 if __name__ == '__main__':
   from unittest import main
--- a/interfaces/python/test_fvec.py
+++ b/interfaces/python/test_fvec.py
@@ -1,13 +1,17 @@
 from numpy.testing import TestCase, run_module_suite
 from numpy.testing import assert_equal, assert_almost_equal
 from _aubio import *
-from numpy import array
+from aubio import fvec
+from numpy import array, shape
 
 class aubio_fvec_test_case(TestCase):
 
-
     def test_vector_created_with_zeroes(self):
-        a = fvec()
+        a = fvec(10)
+        a
+        shape(a)
+        a[0]
+        #del a
         assert_equal(array(a), 0.)
 
     def test_vector_assign_element(self):
@@ -19,17 +23,18 @@
         a = fvec()
         a[-1] = 1
         assert_equal(a[-1], 1)
-        assert_equal(a[a.length-1], 1)
+        assert_equal(a[len(a)-1], 1)
 
     def test_vector(self):
         a = fvec()
-        a, a.length
+        a, len(a) #a.length
         a[0]
         array(a)
         a = fvec(10)
         a = fvec(1)
+        a.T
         array(a).T
-        a[0] = range(a.length)
+        a = range(len(a))
 
     def test_wrong_values(self):
         self.assertRaises (ValueError, fvec, -10)
--- a/interfaces/python/test_onsetdetection.py
+++ b/interfaces/python/test_onsetdetection.py
@@ -1,7 +1,7 @@
 from numpy.testing import TestCase, run_module_suite
 from numpy.testing import assert_equal, assert_almost_equal
 # WARNING: numpy also has an fft object
-from _aubio import cvec, specdesc
+from _aubio import specdesc, cvec
 from numpy import array, shape, arange, zeros, log
 from math import pi
 
@@ -9,11 +9,8 @@
 
     def test_members(self):
         o = specdesc()
-        assert_equal ([o.buf_size, o.channels, o.method],
-            [1024, 1, "default"])
-        o = specdesc("complex", 512, 2)
-        assert_equal ([o.buf_size, o.channels, o.method],
-            [512, 2, "complex"])
+        assert_equal ([o.buf_size, o.method],
+            [1024, "default"])
 
     def test_hfc(self):
         o = specdesc("hfc")
@@ -21,7 +18,7 @@
         assert_equal( 0., o(c))
         a = arange(c.length, dtype='float32')
         c.norm = a
-        assert_equal (a, c.norm[0])
+        assert_equal (a, c.norm)
         assert_equal ( sum(a*(a+1)), o(c))
 
     def test_complex(self):
@@ -30,7 +27,7 @@
         assert_equal( 0., o(c))
         a = arange(c.length, dtype='float32')
         c.norm = a
-        assert_equal (a, c.norm[0])
+        assert_equal (a, c.norm)
         # the previous run was on zeros, so previous frames are still 0
         # so we have sqrt ( abs ( r2 ^ 2) ) == r2
         assert_equal ( sum(a), o(c))
--- a/interfaces/python/test_phasevoc.py
+++ b/interfaces/python/test_phasevoc.py
@@ -1,5 +1,6 @@
 from numpy.testing import TestCase, run_module_suite
 from numpy.testing import assert_equal, assert_almost_equal
+from aubio import fvec
 from _aubio import *
 from numpy import array, shape
 
@@ -25,13 +26,13 @@
 
   def test_steps_two_channels(self):
     """ check the resynthesis of steps is correct """
-    f = pvoc(1024, 512, 2)
-    t1 = fvec(512, 2)
-    t2 = fvec(512, 2)
+    f = pvoc(1024, 512)
+    t1 = fvec(512)
+    t2 = fvec(512)
     # positive step in first channel
-    t1[0][100:200] = .1
+    t1[100:200] = .1
     # positive step in second channel
-    t1[1][20:50] = -.1
+    t1[20:50] = -.1
     s1 = f(t1)
     r1 = f.rdo(s1)
     s2 = f(t2)
@@ -41,12 +42,11 @@
     
   def test_steps_three_random_channels(self):
     from random import random
-    f = pvoc(64, 16, 3)
-    t0 = fvec(16, 3)
-    t1 = fvec(16, 3)
-    for i in xrange(3):
-      for j in xrange(16):
-        t1[i][j] = random() * 2. - 1.
+    f = pvoc(64, 16)
+    t0 = fvec(16)
+    t1 = fvec(16)
+    for i in xrange(16):
+        t1[i] = random() * 2. - 1.
     t2 = f.rdo(f(t1))
     t2 = f.rdo(f(t0))
     t2 = f.rdo(f(t0))