[Scipy-svn] r3297 - in branches/0.6.x/scipy/linalg: . src tests

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Aug 30 19:19:31 EDT 2007


Author: chris.burns
Date: 2007-08-30 18:19:19 -0500 (Thu, 30 Aug 2007)
New Revision: 3297

Added:
   branches/0.6.x/scipy/linalg/src/fblaswrap_veclib_c.c
Modified:
   branches/0.6.x/scipy/linalg/setup.py
   branches/0.6.x/scipy/linalg/tests/test_blas.py
Log:
Applied veclib.patch from cdavid re ticket238

Modified: branches/0.6.x/scipy/linalg/setup.py
===================================================================
--- branches/0.6.x/scipy/linalg/setup.py	2007-08-30 21:15:48 UTC (rev 3296)
+++ branches/0.6.x/scipy/linalg/setup.py	2007-08-30 23:19:19 UTC (rev 3297)
@@ -23,6 +23,23 @@
 
 #--------------------
 
+def needs_cblas_wrapper(info):
+    """Returns true if needs c wrapper around cblas for calling from
+    fortran."""
+    import re
+    r_accel = re.compile("Accelerate")
+    r_vec = re.compile("vecLib")
+    res = False
+    try:
+        tmpstr = info['extra_link_args']
+        for i in tmpstr:
+            if r_accel.search(i) or r_vec.search(i):
+                res = True
+    except KeyError:
+        pass
+
+    return res
+    
 def configuration(parent_package='',top_path=None):
     from numpy.distutils.system_info import get_info, NotFoundError
 
@@ -98,16 +115,28 @@
         return target
 
     # fblas:
-    config.add_extension('fblas',
-                         sources = [generate_pyf,
-                                    join('src','fblaswrap.f')],
-                         depends = ['generic_fblas.pyf',
-                                    'generic_fblas1.pyf',
-                                    'generic_fblas2.pyf',
-                                    'generic_fblas3.pyf',
-                                    'interface_gen.py'],
-                         extra_info = lapack_opt
-                         )
+    if needs_cblas_wrapper(lapack_opt):
+        config.add_extension('fblas',
+                             sources = [generate_pyf,
+                                        join('src','fblaswrap_veclib_c.c')],
+                             depends = ['generic_fblas.pyf',
+                                        'generic_fblas1.pyf',
+                                        'generic_fblas2.pyf',
+                                        'generic_fblas3.pyf',
+                                        'interface_gen.py'],
+                             extra_info = lapack_opt
+                             )
+    else:
+        config.add_extension('fblas',
+                             sources = [generate_pyf,
+                                        join('src','fblaswrap.f')],
+                             depends = ['generic_fblas.pyf',
+                                        'generic_fblas1.pyf',
+                                        'generic_fblas2.pyf',
+                                        'generic_fblas3.pyf',
+                                        'interface_gen.py'],
+                             extra_info = lapack_opt
+                             )
 
     # cblas:
     config.add_extension('cblas',

Added: branches/0.6.x/scipy/linalg/src/fblaswrap_veclib_c.c
===================================================================
--- branches/0.6.x/scipy/linalg/src/fblaswrap_veclib_c.c	2007-08-30 21:15:48 UTC (rev 3296)
+++ branches/0.6.x/scipy/linalg/src/fblaswrap_veclib_c.c	2007-08-30 23:19:19 UTC (rev 3297)
@@ -0,0 +1,22 @@
+#include <vecLib/vecLib.h>
+
+//#define WRAP_F77(a) wcblas_##a##_
+#define WRAP_F77(a) w##a##_
+void WRAP_F77(cdotc)(complex *dotc, const int *N, const complex *X, const int *incX, const complex *Y, const int *incY)
+{
+    cblas_cdotc_sub(*N, X, *incX, Y, *incY, dotc);
+}
+
+void WRAP_F77(cdotu)(complex* dotu, const int *N, const complex *X, const int *incX, const complex *Y, const int *incY)
+{
+    cblas_cdotu_sub(*N, X, *incX, Y, *incY, dotu);
+}
+
+void WRAP_F77(zdotc)(double complex *dotu, const int *N, const double complex *X, const int *incX, const double complex *Y, const int *incY)
+{
+    cblas_zdotc_sub(*N, X, *incX, Y, *incY, dotu);
+}
+void WRAP_F77(zdotu)(double complex *dotu, const int *N, const double complex *X, const int *incX, const double complex *Y, const int *incY)
+{
+    cblas_zdotu_sub(*N, X, *incX, Y, *incY, dotu);
+}


Property changes on: branches/0.6.x/scipy/linalg/src/fblaswrap_veclib_c.c
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Modified: branches/0.6.x/scipy/linalg/tests/test_blas.py
===================================================================
--- branches/0.6.x/scipy/linalg/tests/test_blas.py	2007-08-30 21:15:48 UTC (rev 3296)
+++ branches/0.6.x/scipy/linalg/tests/test_blas.py	2007-08-30 23:19:19 UTC (rev 3297)
@@ -20,6 +20,7 @@
 from numpy.testing import *
 set_package_path()
 from linalg import fblas
+print fblas
 from linalg import cblas
 restore_path()
 
@@ -69,12 +70,18 @@
             f = getattr(fblas,p+'dot',None)
             if f is None: continue
             assert_almost_equal(f([3,-4,5],[2,5,1]),-9)
+    def check_complex_dotu(self):
         for p in 'cz':
             f = getattr(fblas,p+'dotu',None)
             if f is None: continue
             assert_almost_equal(f([3j,-4,3-4j],[2,3,1]),-9+2j)
-            f = getattr(fblas,p+'dotc')
+
+    def check_complex_dotc(self):
+        for p in 'cz':
+            f = getattr(fblas,p+'dotc',None)
+            if f is None: continue
             assert_almost_equal(f([3j,-4,3-4j],[2,3j,1]),3-14j)
+
     def check_nrm2(self):
         for p in 'sd':
             f = getattr(fblas,p+'nrm2',None)




More information about the Scipy-svn mailing list