def bench_random(self,level=5):
     print
     print 'Differentiation of periodic functions'
     print '====================================='
     print ' size  |  convolve |    naive'
     print '-------------------------------------'
     for size,repeat in [(100,1500),(1000,300),
                         (256,1500),
                         (512,1000),
                         (1024,500),
                         (2048,200),
                         (2048*2,100),
                         (2048*4,50),
                         ]:
         print '%6s' % size,
         sys.stdout.flush()
         x = arange (size)*2*pi/size
         if size<2000:
             f = sin(x)*cos(4*x)+exp(sin(3*x))
         else:
             f = sin(x)*cos(4*x)
         assert_array_almost_equal(diff(f,1),direct_diff(f,1))
         assert_array_almost_equal(diff(f,2),direct_diff(f,2))
         print '| %9.2f' % self.measure('diff(f,3)',repeat),
         sys.stdout.flush()
         print '| %9.2f' % self.measure('direct_diff(f,3)',repeat),
         sys.stdout.flush()
         print ' (secs for %s calls)' % (repeat)
 def check_int(self):
     n = 64
     x = arange(n)*2*pi/n
     assert_array_almost_equal(diff(sin(x),-1),-cos(x))
     assert_array_almost_equal(diff(sin(x),-2),-sin(x))
     assert_array_almost_equal(diff(sin(x),-4),sin(x))
     assert_array_almost_equal(diff(2*cos(2*x),-1),sin(2*x))
 def check_period(self):
     for n in [17,64]:
         x = arange(n)/float(n)
         assert_array_almost_equal(diff(sin(2*pi*x),period=1),
                                   2*pi*cos(2*pi*x))
         assert_array_almost_equal(diff(sin(2*pi*x),3,period=1),
                                   -(2*pi)**3*cos(2*pi*x))
 def check_random_odd(self):
     for k in [0,1,2,3,4,5,6]:
         for n in [33,65,55]:
             f=random ((n,))
             af=sum(f,axis=0)/n
             f=f-af
             assert_almost_equal(sum(f,axis=0),0.0)
             assert_array_almost_equal(diff(diff(f,k),-k),f)
             assert_array_almost_equal(diff(diff(f,-k),k),f)
 def check_random_even(self):
     for n in [32,64,56]:
         f=random ((n,))
         af=sum(f,axis=0)/n
         f=f-af
         # zeroing Nyquist mode:
         f = diff(diff(f,1),-1)
         assert_almost_equal(sum(f,axis=0),0.0)
         assert_array_almost_equal(direct_hilbert(direct_ihilbert(f)),f)
         assert_array_almost_equal(hilbert(ihilbert(f)),f)
 def check_expr_large(self):
     for n in [2048,4096]:
         x = arange(n)*2*pi/n
         f=sin(x)*cos(4*x)+exp(sin(3*x))
         df=cos(x)*cos(4*x)-4*sin(x)*sin(4*x)+3*cos(3*x)*exp(sin(3*x))
         ddf=-17*sin(x)*cos(4*x)-8*cos(x)*sin(4*x)\
              -9*sin(3*x)*exp(sin(3*x))+9*cos(3*x)**2*exp(sin(3*x))
         assert_array_almost_equal(diff(f),df)
         assert_array_almost_equal(diff(df),ddf)
         assert_array_almost_equal(diff(ddf,-1),df)
         assert_array_almost_equal(diff(f,2),ddf)
 def check_expr(self):
     for n in [64,77,100,128,256,512,1024,2048,4096,8192][:5]:
         x = arange(n)*2*pi/n
         f=sin(x)*cos(4*x)+exp(sin(3*x))
         df=cos(x)*cos(4*x)-4*sin(x)*sin(4*x)+3*cos(3*x)*exp(sin(3*x))
         ddf=-17*sin(x)*cos(4*x)-8*cos(x)*sin(4*x)\
              -9*sin(3*x)*exp(sin(3*x))+9*cos(3*x)**2*exp(sin(3*x))
         d1 = diff(f)
         assert_array_almost_equal(d1,df)
         assert_array_almost_equal(diff(df),ddf)
         assert_array_almost_equal(diff(f,2),ddf)
         assert_array_almost_equal(diff(ddf,-1),df)
 def check_sin(self):
     for n in [32,64,77]:
         x = arange(n)*2*pi/n
         assert_array_almost_equal(diff(sin(x)),cos(x))
         assert_array_almost_equal(diff(cos(x)),-sin(x))
         assert_array_almost_equal(diff(sin(x),2),-sin(x))
         assert_array_almost_equal(diff(sin(x),4),sin(x))
         assert_array_almost_equal(diff(sin(4*x)),4*cos(4*x))
         assert_array_almost_equal(diff(sin(sin(x))),cos(x)*cos(sin(x)))
 def check_zero_nyquist (self):
     for k in [0,1,2,3,4,5,6]:
         for n in [32,33,64,56,55]:
             f=random ((n,))
             af=sum(f,axis=0)/n
             f=f-af
             # zeroing Nyquist mode:
             f = diff(diff(f,1),-1)
             assert_almost_equal(sum(f,axis=0),0.0)
             assert_array_almost_equal(diff(diff(f,k),-k),f)
             assert_array_almost_equal(diff(diff(f,-k),k),f)
 def check_definition(self):
     for n in [16,17,64,127,32]:
         x = arange(n)*2*pi/n
         assert_array_almost_equal(diff(sin(x)),direct_diff(sin(x)))
         assert_array_almost_equal(diff(sin(x),2),direct_diff(sin(x),2))
         assert_array_almost_equal(diff(sin(x),3),direct_diff(sin(x),3))
         assert_array_almost_equal(diff(sin(x),4),direct_diff(sin(x),4))
         assert_array_almost_equal(diff(sin(x),5),direct_diff(sin(x),5))
         assert_array_almost_equal(diff(sin(2*x),3),direct_diff(sin(2*x),3))
         assert_array_almost_equal(diff(sin(2*x),4),direct_diff(sin(2*x),4))
         assert_array_almost_equal(diff(cos(x)),direct_diff(cos(x)))
         assert_array_almost_equal(diff(cos(x),2),direct_diff(cos(x),2))
         assert_array_almost_equal(diff(cos(x),3),direct_diff(cos(x),3))
         assert_array_almost_equal(diff(cos(x),4),direct_diff(cos(x),4))
         assert_array_almost_equal(diff(cos(2*x)),direct_diff(cos(2*x)))
         assert_array_almost_equal(diff(sin(x*n/8)),direct_diff(sin(x*n/8)))
         assert_array_almost_equal(diff(cos(x*n/8)),direct_diff(cos(x*n/8)))
         for k in range(5):
             assert_array_almost_equal(diff(sin(4*x),k),direct_diff(sin(4*x),k))
             assert_array_almost_equal(diff(cos(4*x),k),direct_diff(cos(4*x),k))