[Scipy-svn] r3256 - in trunk/scipy/sandbox: . multigrid
scipy-svn at scipy.org
scipy-svn at scipy.org
Wed Aug 22 15:10:32 EDT 2007
Author: wnbell
Date: 2007-08-22 14:10:26 -0500 (Wed, 22 Aug 2007)
New Revision: 3256
Added:
trunk/scipy/sandbox/multigrid/info.py
trunk/scipy/sandbox/multigrid/setup.py
trunk/scipy/sandbox/multigrid/utils.py
Modified:
trunk/scipy/sandbox/multigrid/coarsen.py
trunk/scipy/sandbox/setup.py
Log:
added config for multigrid subpackage
Modified: trunk/scipy/sandbox/multigrid/coarsen.py
===================================================================
--- trunk/scipy/sandbox/multigrid/coarsen.py 2007-08-22 18:35:07 UTC (rev 3255)
+++ trunk/scipy/sandbox/multigrid/coarsen.py 2007-08-22 19:10:26 UTC (rev 3256)
@@ -4,7 +4,7 @@
import scipy
import numpy
-from pydec import diag_sparse,inf_norm
+from utils import diag_sparse,inf_norm
def rs_strong_connections(A,theta):
Added: trunk/scipy/sandbox/multigrid/info.py
===================================================================
--- trunk/scipy/sandbox/multigrid/info.py 2007-08-22 18:35:07 UTC (rev 3255)
+++ trunk/scipy/sandbox/multigrid/info.py 2007-08-22 19:10:26 UTC (rev 3256)
@@ -0,0 +1,5 @@
+"""
+TODO Describe AMG solvers
+"""
+
+postpone_import = 1
Added: trunk/scipy/sandbox/multigrid/setup.py
===================================================================
--- trunk/scipy/sandbox/multigrid/setup.py 2007-08-22 18:35:07 UTC (rev 3255)
+++ trunk/scipy/sandbox/multigrid/setup.py 2007-08-22 19:10:26 UTC (rev 3256)
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+
+from os.path import join
+import sys
+
+def configuration(parent_package='',top_path=None):
+ import numpy
+ from numpy.distutils.misc_util import Configuration
+
+ config = Configuration('multigrid',parent_package,top_path)
+
+ config.add_data_dir('tests')
+
+ # Adding a Python file as a "source" file for an extension is something of
+ # a hack, but it works to put it in the right place.
+ sources = [join('multigridtools', x) for x in ['multigridtools.py', 'multigridtools_wrap.cxx']]
+ config.add_extension('_multigridtools',
+ sources=sources,
+ include_dirs=['multigridtools'])
+ return config
+
+if __name__ == '__main__':
+ from numpy.distutils.core import setup
+ setup(**configuration(top_path='').todict())
Property changes on: trunk/scipy/sandbox/multigrid/setup.py
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/scipy/sandbox/multigrid/utils.py
===================================================================
--- trunk/scipy/sandbox/multigrid/utils.py 2007-08-22 18:35:07 UTC (rev 3255)
+++ trunk/scipy/sandbox/multigrid/utils.py 2007-08-22 19:10:26 UTC (rev 3256)
@@ -0,0 +1,57 @@
+__all__ =['inf_norm','diag_sparse']
+
+import numpy,scipy,scipy.sparse,scipy.weave
+from numpy import ravel,arange
+from scipy.sparse import isspmatrix,isspmatrix_csr,isspmatrix_csc, \
+ csr_matrix,csc_matrix
+
+def inf_norm(A):
+ """
+ Infinity norm of a sparse matrix (maximum absolute row sum). This serves
+ as an upper bound on spectral radius.
+ """
+
+ if not isspmatrix_csr(A):
+ return ValueError,'expected csr_matrix'
+
+ abs_A = csr_matrix((abs(A.data),A.indices,A.indptr),dims=A.shape,check=False)
+ return (abs_A * numpy.ones(A.shape[1],dtype=A.dtype)).max()
+
+def diag_sparse(A):
+ """
+ If A is a sparse matrix (e.g. csr_matrix or csc_matrix)
+ - return the diagonal of A as an array
+
+ Otherwise
+ - return a csr_matrix with A on the diagonal
+ """
+
+ if isspmatrix_csr(A) or isspmatrix_csc(A):
+ n_row = len(A.indptr) - 1
+ data,indices,indptr = A.data,A.indices,A.indptr
+
+ diag = numpy.zeros(n_row,dtype=A.dtype)
+
+ code = """
+ #line 33 "sparse.py"
+
+ for(int i = 0; i < n_row; i++){
+ for(int jj = indptr(i); jj < indptr(i+1); jj++){
+ if(indices(jj) == i){
+ diag(i) = data(jj);
+ }
+ }
+ }
+ """
+
+ err = scipy.weave.inline(code,
+ ['data', 'indices', 'indptr', 'n_row', 'diag'],
+ type_converters = scipy.weave.converters.blitz,
+ compiler = 'gcc')
+ return diag
+ elif isspmatrix(A):
+ return ravel(array([float(A[i,i]) for i in range(min(A.shape))]))
+ else:
+ return csr_matrix((A,arange(len(A)),arange(len(A)+1)),(len(A),len(A)))
+
+
Modified: trunk/scipy/sandbox/setup.py
===================================================================
--- trunk/scipy/sandbox/setup.py 2007-08-22 18:35:07 UTC (rev 3255)
+++ trunk/scipy/sandbox/setup.py 2007-08-22 19:10:26 UTC (rev 3256)
@@ -84,6 +84,10 @@
# Radial basis functions package
#config.add_subpackage('rbf')
+ # Multigrid Solvers
+ #config.add_subpackage('multigrid')
+
+
return config
if __name__ == '__main__':
More information about the Scipy-svn
mailing list