[Scipy-svn] r4229 - in branches/refactor_fft: . scipy/fftpack scipy/linalg scipy/optimize scipy/sandbox/exmplpackage scipy/sandbox/exmplpackage/benchmarks scipy/sandbox/exmplpackage/tests scipy/sandbox/exmplpackage/yyy scipy/sandbox/exmplpackage/yyy/tests scipy/sparse scipy/sparse/benchmarks scipy/sparse/tests

scipy-svn at scipy.org scipy-svn at scipy.org
Mon May 5 07:03:36 EDT 2008


Author: cdavid
Date: 2008-05-05 06:03:00 -0500 (Mon, 05 May 2008)
New Revision: 4229

Added:
   branches/refactor_fft/scipy/sandbox/exmplpackage/benchmarks/
   branches/refactor_fft/scipy/sandbox/exmplpackage/benchmarks/bench_foo.py
   branches/refactor_fft/scipy/sparse/benchmarks/
   branches/refactor_fft/scipy/sparse/benchmarks/bench_sparse.py
Removed:
   branches/refactor_fft/scipy/sandbox/exmplpackage/benchmarks/bench_foo.py
   branches/refactor_fft/scipy/sparse/benchmarks/bench_sparse.py
   branches/refactor_fft/scipy/sparse/tests/bench_sparse.py
Modified:
   branches/refactor_fft/
   branches/refactor_fft/scipy/fftpack/setup.py
   branches/refactor_fft/scipy/linalg/setup.py
   branches/refactor_fft/scipy/optimize/setup.py
   branches/refactor_fft/scipy/sandbox/exmplpackage/__init__.py
   branches/refactor_fft/scipy/sandbox/exmplpackage/setup.py
   branches/refactor_fft/scipy/sandbox/exmplpackage/tests/test_foo.py
   branches/refactor_fft/scipy/sandbox/exmplpackage/yyy/__init__.py
   branches/refactor_fft/scipy/sandbox/exmplpackage/yyy/tests/test_yyy.py
   branches/refactor_fft/scipy/sparse/setup.py
Log:
Merged revisions 4212-4228 via svnmerge from 
http://svn.scipy.org/svn/scipy/trunk

........
  r4221 | matthew.brett at gmail.com | 2008-05-05 19:21:51 +0900 (Mon, 05 May 2008) | 1 line
  
  Added benchmark directories to setup.py
........
  r4222 | matthew.brett at gmail.com | 2008-05-05 19:32:31 +0900 (Mon, 05 May 2008) | 1 line
  
  Moved sparse benchmarks to benchmarks directory
........
  r4226 | matthew.brett at gmail.com | 2008-05-05 19:49:32 +0900 (Mon, 05 May 2008) | 1 line
  
  Updated exmplpackage to nose tests framework
........



Property changes on: branches/refactor_fft
___________________________________________________________________
Name: svnmerge-integrated
   - /branches/build_with_scons:1-3868 /branches/scipy.scons:1-3533 /branches/sparse_build_reduce_mem:1-4005 /branches/testing_cleanup:1-3662 /trunk:1-4211
   + /branches/build_with_scons:1-3868 /branches/scipy.scons:1-3533 /branches/sparse_build_reduce_mem:1-4005 /branches/testing_cleanup:1-3662 /trunk:1-4228

Modified: branches/refactor_fft/scipy/fftpack/setup.py
===================================================================
--- branches/refactor_fft/scipy/fftpack/setup.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/fftpack/setup.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -19,6 +19,7 @@
         djbfft_info = get_info('djbfft')
 
     config.add_data_dir('tests')
+    config.add_data_dir('benchmarks')
 
     config.add_library('dfftpack',
                        sources=[join('dfftpack','*.f')])

Modified: branches/refactor_fft/scipy/linalg/setup.py
===================================================================
--- branches/refactor_fft/scipy/linalg/setup.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/linalg/setup.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -184,7 +184,7 @@
                          )
 
     config.add_data_dir('tests')
-
+    config.add_data_dir('benchmarks')
     return config
 
 if __name__ == '__main__':

Modified: branches/refactor_fft/scipy/optimize/setup.py
===================================================================
--- branches/refactor_fft/scipy/optimize/setup.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/optimize/setup.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -42,6 +42,7 @@
     config.add_extension('_slsqp', sources=[join('slsqp', x) for x in sources])
 
     config.add_data_dir('tests')
+    config.add_data_dir('benchmarks')
     return config
 
 if __name__ == '__main__':

Modified: branches/refactor_fft/scipy/sandbox/exmplpackage/__init__.py
===================================================================
--- branches/refactor_fft/scipy/sandbox/exmplpackage/__init__.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/sandbox/exmplpackage/__init__.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -5,6 +5,10 @@
 # Get documentation string:
 from info_exmplpackage import __doc__
 
+# Import testing rig, allowing scipy.examplpackage.test()
+from scipy.testing.pkgtester import Tester
+test = Tester().test
+
 # Import symbols from sub-module:
 from foo import *
 

Copied: branches/refactor_fft/scipy/sandbox/exmplpackage/benchmarks (from rev 4226, trunk/scipy/sandbox/exmplpackage/benchmarks)

Deleted: branches/refactor_fft/scipy/sandbox/exmplpackage/benchmarks/bench_foo.py
===================================================================
--- trunk/scipy/sandbox/exmplpackage/benchmarks/bench_foo.py	2008-05-05 10:49:32 UTC (rev 4226)
+++ branches/refactor_fft/scipy/sandbox/exmplpackage/benchmarks/bench_foo.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-#
-__usage__ = """
-First ensure that scipy core modules are installed.
-
-Run benchmarks if scipy is installed:
-  python -c 'import scipy;scipy.exmplpackage.bench(label=<str>,verbose=<int>)'
-"""
-
-import sys
-from scipy.testing import *
-
-from scipy.sandbox.exmplpackage.foo import *
-
-class BenchFooBar(TestCase):
-
-    def bench_simple(self):
-        print 'A long timed benchmark here'
-

Copied: branches/refactor_fft/scipy/sandbox/exmplpackage/benchmarks/bench_foo.py (from rev 4226, trunk/scipy/sandbox/exmplpackage/benchmarks/bench_foo.py)

Modified: branches/refactor_fft/scipy/sandbox/exmplpackage/setup.py
===================================================================
--- branches/refactor_fft/scipy/sandbox/exmplpackage/setup.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/sandbox/exmplpackage/setup.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -9,8 +9,9 @@
     from numpy.distutils.misc_util import Configuration
     config = Configuration('exmplpackage',parent_package,top_path)
 
-    # include test scripts from tests
+    # include test scripts from tests, and any benchmarks
     config.add_data_dir('tests')
+    config.add_data_dir('benchmarks')
 
     # exmplpackage contains Python sub-package yyy
     config.add_subpackage('yyy')

Modified: branches/refactor_fft/scipy/sandbox/exmplpackage/tests/test_foo.py
===================================================================
--- branches/refactor_fft/scipy/sandbox/exmplpackage/tests/test_foo.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/sandbox/exmplpackage/tests/test_foo.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -9,10 +9,10 @@
 Build exmplpackage:
   python setup.py build
 Run tests locally:
-  python tests/test_foo.py [-l<int>] [-v<int>]
+  python tests/test_foo.py
 
 Run tests if scipy is installed:
-  python -c 'import scipy;scipy.exmplpackage.test(level=<int>,verbosity=<int>)'
+  python -c 'import scipy;scipy.exmplpackage.test(label=<str>,verbose=<int>)'
 """
 
 import sys
@@ -22,12 +22,12 @@
 
 class TestFooBar(TestCase):
 
-    def check_simple(self, level=1):
+    def test_simple(self):
         assert exmplpackage_foo_bar()=='Hello from exmplpackage_foo_bar'
 
 class TestFooGun(TestCase):
 
-    def check_simple(self, level=1):
+    def test_simple(self):
         assert foo_gun()=='Hello from foo_gun'
 
 if __name__ == "__main__":

Modified: branches/refactor_fft/scipy/sandbox/exmplpackage/yyy/__init__.py
===================================================================
--- branches/refactor_fft/scipy/sandbox/exmplpackage/yyy/__init__.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/sandbox/exmplpackage/yyy/__init__.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -2,7 +2,11 @@
 yyy - Subpackage of Scipy module exmplpackage
 """
 
-__all__ = ['fun']
+__all__ = ['fun', 'test']
 
+# Import testing rig, allowing scipy.examplpackage.yyy.test()
+from scipy.testing.pkgtester import Tester
+test = Tester().test
+
 def fun():
     return 'Hello from yyy.fun'

Modified: branches/refactor_fft/scipy/sandbox/exmplpackage/yyy/tests/test_yyy.py
===================================================================
--- branches/refactor_fft/scipy/sandbox/exmplpackage/yyy/tests/test_yyy.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/sandbox/exmplpackage/yyy/tests/test_yyy.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -1,16 +1,12 @@
 
-import sys
-from numpy.test.testing import *
+from scipy.testing import *
 
-set_package_path()
-# make sure that all yyy symbols are imported before the del statement:
 from yyy import fun
-del sys.path[0]
 
-class TestFun(NumpyTestCase):
-    def check_simple(self, level=1):
+class TestFun(TestCase):
+    def test_simple(self):
         assert fun()=='Hello from yyy.fun'
     #...
 
 if __name__ == "__main__":
-    NumpyTest().run()
+    nose.run(argv=['', __file__])

Copied: branches/refactor_fft/scipy/sparse/benchmarks (from rev 4226, trunk/scipy/sparse/benchmarks)

Deleted: branches/refactor_fft/scipy/sparse/benchmarks/bench_sparse.py
===================================================================
--- trunk/scipy/sparse/benchmarks/bench_sparse.py	2008-05-05 10:49:32 UTC (rev 4226)
+++ branches/refactor_fft/scipy/sparse/benchmarks/bench_sparse.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -1,280 +0,0 @@
-"""general tests and simple benchmarks for the sparse module"""
-
-import time
-
-import numpy
-from numpy import ones, array, asarray, empty
-
-from scipy.testing import *
-
-from scipy import sparse
-from scipy.sparse import csc_matrix, csr_matrix, dok_matrix, \
-        coo_matrix, lil_matrix, dia_matrix, spdiags
-
-
-def random_sparse(m,n,nnz_per_row):
-    rows = numpy.arange(m).repeat(nnz_per_row)
-    cols = numpy.random.random_integers(low=0,high=n-1,size=nnz_per_row*m)
-    vals = numpy.random.random_sample(m*nnz_per_row)
-    return coo_matrix((vals,(rows,cols)),(m,n)).tocsr()
-
-
-#TODO move this to a matrix gallery and add unittests
-def poisson2d(N,dtype='d',format=None):
-    """
-    Return a sparse matrix for the 2d poisson problem
-    with standard 5-point finite difference stencil on a
-    square N-by-N grid.
-    """
-    if N == 1:
-        diags   = asarray( [[4]],dtype=dtype)
-        return dia_matrix((diags,[0]), shape=(1,1)).asformat(format)
-
-    offsets = array([0,-N,N,-1,1])
-
-    diags = empty((5,N**2),dtype=dtype)
-
-    diags[0]  =  4 #main diagonal
-    diags[1:] = -1 #all offdiagonals
-
-    diags[3,N-1::N] = 0  #first lower diagonal
-    diags[4,N::N]   = 0  #first upper diagonal
-
-    return dia_matrix((diags,offsets),shape=(N**2,N**2)).asformat(format)
-
-class BenchmarkSparse(TestCase):
-    """Simple benchmarks for sparse matrix module"""
-
-    def bench_arithmetic(self):
-        matrices = []
-        #matrices.append( ('A','Identity', sparse.identity(500**2,format='csr')) )
-        matrices.append( ('A','Poisson5pt', poisson2d(500,format='csr'))  )
-        matrices.append( ('B','Poisson5pt^2', poisson2d(500,format='csr')**2)  )
-
-        print
-        print '                 Sparse Matrix Arithmetic'
-        print '===================================================================='
-        print ' var |     name       |         shape        |   dtype   |    nnz   '
-        print '--------------------------------------------------------------------'
-        fmt = '  %1s  | %14s | %20s | %9s | %8d '
-
-        for var,name,mat in matrices:
-            name  = name.center(14)
-            shape = ("%s" % (mat.shape,)).center(20)
-            dtype = mat.dtype.name.center(9)
-            print fmt % (var,name,shape,dtype,mat.nnz)
-
-        space = ' ' * 10
-        print
-        print space+'              Timings'
-        print space+'=========================================='
-        print space+' format |     operation     | time (msec) '
-        print space+'------------------------------------------'
-        fmt = space+'   %3s  | %17s |  %7.1f  '
-
-        for format in ['csr']:
-            vars = dict( [(var,mat.asformat(format)) for (var,name,mat) in matrices ] )
-            for X,Y in [ ('A','A'),('A','B'),('B','A'),('B','B') ]:
-                x,y = vars[X],vars[Y]
-                for op in ['__add__','__sub__','multiply','__div__','__mul__']:
-                    fn = getattr(x,op)
-                    fn(y) #warmup
-
-                    start = time.clock()
-                    iter = 0
-                    while iter < 5 or time.clock() < start + 1:
-                        fn(y)
-                        iter += 1
-                    end = time.clock()
-
-                    msec_per_it = 1000*(end - start)/float(iter)
-                    operation = (X + '.' + op + '(' + Y + ')').center(17)
-                    print fmt % (format,operation,msec_per_it)
-
-
-    def bench_sort(self):
-        """sort CSR column indices"""
-        matrices = []
-        matrices.append( ('Rand10',  1e4,  10) )
-        matrices.append( ('Rand25',  1e4,  25) )
-        matrices.append( ('Rand50',  1e4,  50) )
-        matrices.append( ('Rand100', 1e4, 100) )
-        matrices.append( ('Rand200', 1e4, 200) )
-
-        print
-        print '                    Sparse Matrix Index Sorting'
-        print '====================================================================='
-        print ' type |    name      |         shape        |    nnz   | time (msec) '
-        print '---------------------------------------------------------------------'
-        fmt = '  %3s | %12s | %20s | %8d |   %6.2f  '
-
-        for name,N,K in matrices:
-            N = int(N)
-            A = random_sparse(N,N,K)
-
-            start = time.clock()
-            iter = 0
-            while iter < 5 and time.clock() - start < 1:
-                A.has_sorted_indices = False
-                A.sort_indices()
-                iter += 1
-            end = time.clock()
-
-            name = name.center(12)
-            shape = ("%s" % (A.shape,)).center(20)
-
-            print fmt % (A.format,name,shape,A.nnz,1e3*(end-start)/float(iter) )
-
-    def bench_matvec(self):
-        matrices = []
-        matrices.append(('Identity',   sparse.identity(10**4,format='dia')))
-        matrices.append(('Identity',   sparse.identity(10**4,format='csr')))
-        matrices.append(('Poisson5pt', poisson2d(300,format='dia')))
-        matrices.append(('Poisson5pt', poisson2d(300,format='csr')))
-        matrices.append(('Poisson5pt', poisson2d(300,format='bsr')))
-
-        A = sparse.kron(poisson2d(150),ones((2,2))).tobsr(blocksize=(2,2))
-        matrices.append( ('Block2x2', A.tocsr()) )
-        matrices.append( ('Block2x2', A) )
-
-        A = sparse.kron(poisson2d(100),ones((3,3))).tobsr(blocksize=(3,3))
-        matrices.append( ('Block3x3', A.tocsr()) )
-        matrices.append( ('Block3x3', A) )
-
-        print
-        print '                 Sparse Matrix Vector Product'
-        print '=================================================================='
-        print ' type |    name      |         shape        |    nnz   |  MFLOPs  '
-        print '------------------------------------------------------------------'
-        fmt = '  %3s | %12s | %20s | %8d |  %6.1f '
-
-        for name,A in matrices:
-            x = ones(A.shape[1],dtype=A.dtype)
-
-            y = A*x  #warmup
-
-            start = time.clock()
-            iter = 0
-            while iter < 5 or time.clock() < start + 1:
-                y = A*x
-                #try:
-                #    #avoid creating y if possible
-                #    A.matvec(x,y)
-                #except:
-                #    y = A*x
-                iter += 1
-            end = time.clock()
-
-            del y
-
-            name = name.center(12)
-            shape = ("%s" % (A.shape,)).center(20)
-            MFLOPs = (2*A.nnz*iter/(end-start))/float(1e6)
-
-            print fmt % (A.format,name,shape,A.nnz,MFLOPs)
-
-    def bench_construction(self):
-        """build matrices by inserting single values"""
-        matrices = []
-        matrices.append( ('Empty',csr_matrix((10000,10000))) )
-        matrices.append( ('Identity',sparse.identity(10000)) )
-        matrices.append( ('Poisson5pt', poisson2d(100)) )
-
-        print
-        print '                    Sparse Matrix Construction'
-        print '===================================================================='
-        print ' type |    name      |         shape        |    nnz   | time (sec) '
-        print '--------------------------------------------------------------------'
-        fmt = '  %3s | %12s | %20s | %8d |   %6.4f '
-
-        for name,A in matrices:
-            A = A.tocoo()
-
-            for format in ['lil','dok']:
-
-                start = time.clock()
-
-                iter = 0
-                while time.clock() < start + 0.5:
-                    T = eval(format + '_matrix')(A.shape)
-                    for i,j,v in zip(A.row,A.col,A.data):
-                        T[i,j] = v
-                    iter += 1
-                end = time.clock()
-
-                del T
-                name = name.center(12)
-                shape = ("%s" % (A.shape,)).center(20)
-
-                print fmt % (format,name,shape,A.nnz,(end-start)/float(iter))
-
-    def bench_conversion(self):
-        A = poisson2d(100)
-
-        formats = ['csr','csc','coo','lil','dok']
-
-        print
-        print '                Sparse Matrix Conversion'
-        print '=========================================================='
-        print ' format | tocsr() | tocsc() | tocoo() | tolil() | todok() '
-        print '----------------------------------------------------------'
-
-        for fromfmt in formats:
-            base = getattr(A,'to' + fromfmt)()
-
-            times = []
-
-            for tofmt in formats:
-                try:
-                    fn = getattr(base,'to' + tofmt)
-                except:
-                    times.append(None)
-                else:
-                    x = fn() #warmup
-                    start = time.clock()
-                    iter = 0
-                    while time.clock() < start + 0.2:
-                        x = fn()
-                        iter += 1
-                    end = time.clock()
-                    del x
-                    times.append( (end - start)/float(iter))
-
-            output = "  %3s   " % fromfmt
-            for t in times:
-                if t is None:
-                    output += '|    n/a    '
-                else:
-                    output += '| %5.1fms ' % (1000*t)
-            print output
-
-
-#class TestLarge(TestCase):
-#    def bench_large(self):
-#        # Create a 100x100 matrix with 100 non-zero elements
-#        # and play around with it
-#        #TODO move this out of Common since it doesn't use spmatrix
-#        random.seed(0)
-#        A = dok_matrix((100,100))
-#        for k in range(100):
-#            i = random.randrange(100)
-#            j = random.randrange(100)
-#            A[i,j] = 1.
-#        csr = A.tocsr()
-#        csc = A.tocsc()
-#        csc2 = csr.tocsc()
-#        coo = A.tocoo()
-#        csr2 = coo.tocsr()
-#        assert_array_equal(A.transpose().todense(), csr.transpose().todense())
-#        assert_array_equal(csc.todense(), csr.todense())
-#        assert_array_equal(csr.todense(), csr2.todense())
-#        assert_array_equal(csr2.todense().transpose(), coo.transpose().todense())
-#        assert_array_equal(csr2.todense(), csc2.todense())
-#        csr_plus_csc = csr + csc
-#        csc_plus_csr = csc + csr
-#        assert_array_equal(csr_plus_csc.todense(), (2*A).todense())
-#        assert_array_equal(csr_plus_csc.todense(), csc_plus_csr.todense())
-
-
-if __name__ == "__main__":
-    nose.run(argv=['', __file__])

Copied: branches/refactor_fft/scipy/sparse/benchmarks/bench_sparse.py (from rev 4226, trunk/scipy/sparse/benchmarks/bench_sparse.py)

Modified: branches/refactor_fft/scipy/sparse/setup.py
===================================================================
--- branches/refactor_fft/scipy/sparse/setup.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/sparse/setup.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -7,8 +7,9 @@
     config = Configuration('sparse',parent_package,top_path)
 
     config.add_data_dir('tests')
+    config.add_data_dir('benchmarks')
+
     config.add_subpackage('linalg')
-
     config.add_subpackage('sparsetools')
 
     return config

Deleted: branches/refactor_fft/scipy/sparse/tests/bench_sparse.py
===================================================================
--- branches/refactor_fft/scipy/sparse/tests/bench_sparse.py	2008-05-05 10:54:32 UTC (rev 4228)
+++ branches/refactor_fft/scipy/sparse/tests/bench_sparse.py	2008-05-05 11:03:00 UTC (rev 4229)
@@ -1,280 +0,0 @@
-"""general tests and simple benchmarks for the sparse module"""
-
-import time
-
-import numpy
-from numpy import ones, array, asarray, empty
-
-from scipy.testing import *
-
-from scipy import sparse
-from scipy.sparse import csc_matrix, csr_matrix, dok_matrix, \
-        coo_matrix, lil_matrix, dia_matrix, spdiags
-
-
-def random_sparse(m,n,nnz_per_row):
-    rows = numpy.arange(m).repeat(nnz_per_row)
-    cols = numpy.random.random_integers(low=0,high=n-1,size=nnz_per_row*m)
-    vals = numpy.random.random_sample(m*nnz_per_row)
-    return coo_matrix((vals,(rows,cols)),(m,n)).tocsr()
-
-
-#TODO move this to a matrix gallery and add unittests
-def poisson2d(N,dtype='d',format=None):
-    """
-    Return a sparse matrix for the 2d poisson problem
-    with standard 5-point finite difference stencil on a
-    square N-by-N grid.
-    """
-    if N == 1:
-        diags   = asarray( [[4]],dtype=dtype)
-        return dia_matrix((diags,[0]), shape=(1,1)).asformat(format)
-
-    offsets = array([0,-N,N,-1,1])
-
-    diags = empty((5,N**2),dtype=dtype)
-
-    diags[0]  =  4 #main diagonal
-    diags[1:] = -1 #all offdiagonals
-
-    diags[3,N-1::N] = 0  #first lower diagonal
-    diags[4,N::N]   = 0  #first upper diagonal
-
-    return dia_matrix((diags,offsets),shape=(N**2,N**2)).asformat(format)
-
-class BenchmarkSparse(TestCase):
-    """Simple benchmarks for sparse matrix module"""
-
-    def bench_arithmetic(self):
-        matrices = []
-        #matrices.append( ('A','Identity', sparse.identity(500**2,format='csr')) )
-        matrices.append( ('A','Poisson5pt', poisson2d(500,format='csr'))  )
-        matrices.append( ('B','Poisson5pt^2', poisson2d(500,format='csr')**2)  )
-
-        print
-        print '                 Sparse Matrix Arithmetic'
-        print '===================================================================='
-        print ' var |     name       |         shape        |   dtype   |    nnz   '
-        print '--------------------------------------------------------------------'
-        fmt = '  %1s  | %14s | %20s | %9s | %8d '
-
-        for var,name,mat in matrices:
-            name  = name.center(14)
-            shape = ("%s" % (mat.shape,)).center(20)
-            dtype = mat.dtype.name.center(9)
-            print fmt % (var,name,shape,dtype,mat.nnz)
-
-        space = ' ' * 10
-        print
-        print space+'              Timings'
-        print space+'=========================================='
-        print space+' format |     operation     | time (msec) '
-        print space+'------------------------------------------'
-        fmt = space+'   %3s  | %17s |  %7.1f  '
-
-        for format in ['csr']:
-            vars = dict( [(var,mat.asformat(format)) for (var,name,mat) in matrices ] )
-            for X,Y in [ ('A','A'),('A','B'),('B','A'),('B','B') ]:
-                x,y = vars[X],vars[Y]
-                for op in ['__add__','__sub__','multiply','__div__','__mul__']:
-                    fn = getattr(x,op)
-                    fn(y) #warmup
-
-                    start = time.clock()
-                    iter = 0
-                    while iter < 5 or time.clock() < start + 1:
-                        fn(y)
-                        iter += 1
-                    end = time.clock()
-
-                    msec_per_it = 1000*(end - start)/float(iter)
-                    operation = (X + '.' + op + '(' + Y + ')').center(17)
-                    print fmt % (format,operation,msec_per_it)
-
-
-    def bench_sort(self):
-        """sort CSR column indices"""
-        matrices = []
-        matrices.append( ('Rand10',  1e4,  10) )
-        matrices.append( ('Rand25',  1e4,  25) )
-        matrices.append( ('Rand50',  1e4,  50) )
-        matrices.append( ('Rand100', 1e4, 100) )
-        matrices.append( ('Rand200', 1e4, 200) )
-
-        print
-        print '                    Sparse Matrix Index Sorting'
-        print '====================================================================='
-        print ' type |    name      |         shape        |    nnz   | time (msec) '
-        print '---------------------------------------------------------------------'
-        fmt = '  %3s | %12s | %20s | %8d |   %6.2f  '
-
-        for name,N,K in matrices:
-            N = int(N)
-            A = random_sparse(N,N,K)
-
-            start = time.clock()
-            iter = 0
-            while iter < 5 and time.clock() - start < 1:
-                A.has_sorted_indices = False
-                A.sort_indices()
-                iter += 1
-            end = time.clock()
-
-            name = name.center(12)
-            shape = ("%s" % (A.shape,)).center(20)
-
-            print fmt % (A.format,name,shape,A.nnz,1e3*(end-start)/float(iter) )
-
-    def bench_matvec(self):
-        matrices = []
-        matrices.append(('Identity',   sparse.identity(10**4,format='dia')))
-        matrices.append(('Identity',   sparse.identity(10**4,format='csr')))
-        matrices.append(('Poisson5pt', poisson2d(300,format='dia')))
-        matrices.append(('Poisson5pt', poisson2d(300,format='csr')))
-        matrices.append(('Poisson5pt', poisson2d(300,format='bsr')))
-
-        A = sparse.kron(poisson2d(150),ones((2,2))).tobsr(blocksize=(2,2))
-        matrices.append( ('Block2x2', A.tocsr()) )
-        matrices.append( ('Block2x2', A) )
-
-        A = sparse.kron(poisson2d(100),ones((3,3))).tobsr(blocksize=(3,3))
-        matrices.append( ('Block3x3', A.tocsr()) )
-        matrices.append( ('Block3x3', A) )
-
-        print
-        print '                 Sparse Matrix Vector Product'
-        print '=================================================================='
-        print ' type |    name      |         shape        |    nnz   |  MFLOPs  '
-        print '------------------------------------------------------------------'
-        fmt = '  %3s | %12s | %20s | %8d |  %6.1f '
-
-        for name,A in matrices:
-            x = ones(A.shape[1],dtype=A.dtype)
-
-            y = A*x  #warmup
-
-            start = time.clock()
-            iter = 0
-            while iter < 5 or time.clock() < start + 1:
-                y = A*x
-                #try:
-                #    #avoid creating y if possible
-                #    A.matvec(x,y)
-                #except:
-                #    y = A*x
-                iter += 1
-            end = time.clock()
-
-            del y
-
-            name = name.center(12)
-            shape = ("%s" % (A.shape,)).center(20)
-            MFLOPs = (2*A.nnz*iter/(end-start))/float(1e6)
-
-            print fmt % (A.format,name,shape,A.nnz,MFLOPs)
-
-    def bench_construction(self):
-        """build matrices by inserting single values"""
-        matrices = []
-        matrices.append( ('Empty',csr_matrix((10000,10000))) )
-        matrices.append( ('Identity',sparse.identity(10000)) )
-        matrices.append( ('Poisson5pt', poisson2d(100)) )
-
-        print
-        print '                    Sparse Matrix Construction'
-        print '===================================================================='
-        print ' type |    name      |         shape        |    nnz   | time (sec) '
-        print '--------------------------------------------------------------------'
-        fmt = '  %3s | %12s | %20s | %8d |   %6.4f '
-
-        for name,A in matrices:
-            A = A.tocoo()
-
-            for format in ['lil','dok']:
-
-                start = time.clock()
-
-                iter = 0
-                while time.clock() < start + 0.5:
-                    T = eval(format + '_matrix')(A.shape)
-                    for i,j,v in zip(A.row,A.col,A.data):
-                        T[i,j] = v
-                    iter += 1
-                end = time.clock()
-
-                del T
-                name = name.center(12)
-                shape = ("%s" % (A.shape,)).center(20)
-
-                print fmt % (format,name,shape,A.nnz,(end-start)/float(iter))
-
-    def bench_conversion(self):
-        A = poisson2d(100)
-
-        formats = ['csr','csc','coo','lil','dok']
-
-        print
-        print '                Sparse Matrix Conversion'
-        print '=========================================================='
-        print ' format | tocsr() | tocsc() | tocoo() | tolil() | todok() '
-        print '----------------------------------------------------------'
-
-        for fromfmt in formats:
-            base = getattr(A,'to' + fromfmt)()
-
-            times = []
-
-            for tofmt in formats:
-                try:
-                    fn = getattr(base,'to' + tofmt)
-                except:
-                    times.append(None)
-                else:
-                    x = fn() #warmup
-                    start = time.clock()
-                    iter = 0
-                    while time.clock() < start + 0.2:
-                        x = fn()
-                        iter += 1
-                    end = time.clock()
-                    del x
-                    times.append( (end - start)/float(iter))
-
-            output = "  %3s   " % fromfmt
-            for t in times:
-                if t is None:
-                    output += '|    n/a    '
-                else:
-                    output += '| %5.1fms ' % (1000*t)
-            print output
-
-
-#class TestLarge(TestCase):
-#    def bench_large(self):
-#        # Create a 100x100 matrix with 100 non-zero elements
-#        # and play around with it
-#        #TODO move this out of Common since it doesn't use spmatrix
-#        random.seed(0)
-#        A = dok_matrix((100,100))
-#        for k in range(100):
-#            i = random.randrange(100)
-#            j = random.randrange(100)
-#            A[i,j] = 1.
-#        csr = A.tocsr()
-#        csc = A.tocsc()
-#        csc2 = csr.tocsc()
-#        coo = A.tocoo()
-#        csr2 = coo.tocsr()
-#        assert_array_equal(A.transpose().todense(), csr.transpose().todense())
-#        assert_array_equal(csc.todense(), csr.todense())
-#        assert_array_equal(csr.todense(), csr2.todense())
-#        assert_array_equal(csr2.todense().transpose(), coo.transpose().todense())
-#        assert_array_equal(csr2.todense(), csc2.todense())
-#        csr_plus_csc = csr + csc
-#        csc_plus_csr = csc + csr
-#        assert_array_equal(csr_plus_csc.todense(), (2*A).todense())
-#        assert_array_equal(csr_plus_csc.todense(), csc_plus_csr.todense())
-
-
-if __name__ == "__main__":
-    nose.run(argv=['', __file__])




More information about the Scipy-svn mailing list