[Scipy-svn] r4532 - in trunk/scipy/sparse: . benchmarks sparsetools tests

scipy-svn@scip... scipy-svn@scip...
Tue Jul 8 04:49:01 CDT 2008


Author: wnbell
Date: 2008-07-08 04:47:43 -0500 (Tue, 08 Jul 2008)
New Revision: 4532

Modified:
   trunk/scipy/sparse/base.py
   trunk/scipy/sparse/benchmarks/bench_sparse.py
   trunk/scipy/sparse/bsr.py
   trunk/scipy/sparse/compressed.py
   trunk/scipy/sparse/coo.py
   trunk/scipy/sparse/data.py
   trunk/scipy/sparse/dia.py
   trunk/scipy/sparse/dok.py
   trunk/scipy/sparse/lil.py
   trunk/scipy/sparse/sparsetools/bsr.h
   trunk/scipy/sparse/sparsetools/bsr_wrap.cxx
   trunk/scipy/sparse/sparsetools/coo.i
   trunk/scipy/sparse/sparsetools/coo.py
   trunk/scipy/sparse/sparsetools/coo_wrap.cxx
   trunk/scipy/sparse/sparsetools/csc_wrap.cxx
   trunk/scipy/sparse/sparsetools/csr.h
   trunk/scipy/sparse/sparsetools/csr_wrap.cxx
   trunk/scipy/sparse/sparsetools/dia_wrap.cxx
   trunk/scipy/sparse/tests/test_base.py
Log:
refactored sparse matrix multiplication handlers
added coo.matvec


Modified: trunk/scipy/sparse/base.py
===================================================================
--- trunk/scipy/sparse/base.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/base.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -6,7 +6,8 @@
 from warnings import warn
 
 import numpy
-from numpy import asarray, asmatrix, asanyarray, ones, deprecate
+from numpy import asarray, asmatrix, asanyarray, ones, deprecate, ravel, \
+        matrix
 
 from sputils import isdense, isscalarlike, isintlike
 
@@ -66,10 +67,10 @@
         try:
             shape = int(shape[0]),int(shape[1]) #floats, other weirdness
         except:
-            raise TypeError,'invalid shape'
+            raise TypeError('invalid shape')
 
         if not (shape[0] >= 1 and shape[1] >= 1):
-            raise TypeError,'invalid shape'
+            raise TypeError('invalid shape')
 
         if (self._shape != shape) and (self._shape is not None):
             try:
@@ -215,6 +216,11 @@
     #   and operations return in csr format
     #  thus, a new sparse matrix format just needs to define
     #  a tocsr method
+    
+    def multiply(self, other):
+        """Point-wise multiplication by another matrix
+        """
+        return self.tocsr().multiply(other)
 
     def __abs__(self):
         return abs(self.tocsr())
@@ -231,15 +237,85 @@
 
     def __rsub__(self, other):  # other - self
         return self.tocsr().__rsub__(other)
+    
+    # old __mul__ interfaces
+    def matvec(self, other):
+        return self * other
+    def matmat(self, other):
+        return self * other
+    def dot(self, other):
+        return self * other
 
-    def multiply(self, other):
-        """Point-wise multiplication by another matrix
+    def __mul__(self, other):
+        """interpret other and call one of the following
+
+        self._mul_scalar()
+        self._mul_vector()
+        self._mul_sparse_matrix()
+        self._mul_dense_matrix()
         """
-        return self.tocsr().multiply(other)
 
-    def __mul__(self, other):
-        return self.tocsr().__mul__(other)
+        M,N = self.shape
+        
+        if isscalarlike(other):
+            # scalar value
+            return self._mul_scalar(other)
+       
+        if issparse(other):
+            return self._mul_sparse_matrix(other)
 
+        try:
+            other.shape
+        except AttributeError:
+            # If it's a list or whatever, treat it like a matrix
+            other = asanyarray(other)
+
+        if isdense(other) and asarray(other).squeeze().ndim <= 1:
+            ##
+            # dense row or column vector
+            if other.shape != (N,) and other.shape != (N,1):
+                raise ValueError('dimension mismatch')
+
+            result = self._mul_vector(ravel(other))
+
+            if isinstance(other, matrix):
+                result = asmatrix(result)
+
+            if other.ndim == 2 and other.shape[1] == 1:
+                # If 'other' was an (nx1) column vector, reshape the result
+                result = result.reshape(-1,1)
+            
+            return result
+
+        elif len(other.shape) == 2:
+            ##
+            # dense 2D array or matrix
+
+            if other.shape[0] != self.shape[1]:
+                raise ValueError('dimension mismatch')
+        
+            result = self._mul_dense_matrix(asarray(other))
+
+            if isinstance(other, matrix):
+                result = asmatrix(result)
+
+            return result
+        else:
+            raise ValueError('could not interpret dimensions')
+
+    # by default, use CSR for __mul__ handlers
+    def _mul_scalar(self, other):
+        return self.tocsr()._mul_scalar(other)
+
+    def _mul_vector(self, other):
+        return self.tocsr()._mul_vector(other)
+
+    def _mul_dense_matrix(self, other):
+        return self.tocsr()._mul_dense_matrix(other)
+
+    def _mul_sparse_matrix(self, other):
+        return self.tocsr()._mul_sparse_matrix(other)
+
     def __rmul__(self, other):
         return self.tocsr().__rmul__(other)
 
@@ -384,36 +460,7 @@
         a[0, i] = 1
         return a * self
 
-    def dot(self, other):
-        """ A generic interface for matrix-matrix or matrix-vector
-        multiplication.
-        """
 
-        try:
-            other.shape
-        except AttributeError:
-            # If it's a list or whatever, treat it like a matrix
-            other = asanyarray(other)
-
-        if isdense(other) and asarray(other).squeeze().ndim <= 1:
-            # it's a dense row or column vector
-            return self.matvec(other)
-        elif len(other.shape) == 2:
-            # it's a 2d dense array, dense matrix, or sparse matrix
-            return self.matmat(other)
-        else:
-            raise ValueError, "could not interpret dimensions"
-
-
-    def matmat(self, other):
-        return self.tocsr().matmat(other)
-
-    def matvec(self, other):
-        """Multiplies the sparse matrix by the vector 'other', returning a
-        dense vector as a result.
-        """
-        return self.tocsr().matvec(other)
-
     def rmatvec(self, other, conjugate=True):
         """Multiplies the vector 'other' by the sparse matrix, returning a
         dense vector as a result.
@@ -442,7 +489,7 @@
         return asmatrix(self.toarray())
 
     def toarray(self):
-        return self.tocsr().toarray()
+        return self.tocoo().toarray()
 
     def todok(self):
         return self.tocoo().todok()

Modified: trunk/scipy/sparse/benchmarks/bench_sparse.py
===================================================================
--- trunk/scipy/sparse/benchmarks/bench_sparse.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/benchmarks/bench_sparse.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -116,6 +116,7 @@
             iter = 0
             while iter < 5 and time.clock() - start < 1:
                 A.has_sorted_indices = False
+                A.indices[:2] = 2,1
                 A.sort_indices()
                 iter += 1
             end = time.clock()
@@ -130,6 +131,7 @@
         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='coo')))
         matrices.append(('Poisson5pt', poisson2d(300,format='csr')))
         matrices.append(('Poisson5pt', poisson2d(300,format='bsr')))
 

Modified: trunk/scipy/sparse/bsr.py
===================================================================
--- trunk/scipy/sparse/bsr.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/bsr.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -283,114 +283,72 @@
     # Arithmetic methods #
     ######################
 
-    def matvec(self, other, output=None):
-        """Sparse matrix vector product (self * other)
+    def matvec(self, other):
+        return self * other
 
-        'other' may be a rank 1 array of length N or a rank 2 array
-        or matrix with shape (N,1).
+    def matmat(self, other):
+        return self * other
 
-        If the optional 'output' parameter is defined, it will
-        be used to store the result.  Otherwise, a new vector
-        will be allocated.
+    def _mul_vector(self, other):
+        M,N = self.shape
+        R,C = self.blocksize
 
-        """
-        if isdense(other):
-            M,N = self.shape
-            R,C = self.blocksize
+        result = zeros( self.shape[0], dtype=upcast(self.dtype, other.dtype) )
 
-            if other.shape != (N,) and other.shape != (N,1):
-                raise ValueError, "dimension mismatch"
+        bsr_matvec(M/R, N/C, R, C, \
+            self.indptr, self.indices, ravel(self.data), other, result)
 
-            #output array
-            if output is None:
-                y = zeros( self.shape[0], dtype=upcast(self.dtype,other.dtype) )
-            else:
-                if output.shape != (M,) and output.shape != (M,1):
-                    raise ValueError, "output array has improper dimensions"
-                if not output.flags.c_contiguous:
-                    raise ValueError, "output array must be contiguous"
-                if output.dtype != upcast(self.dtype,other.dtype):
-                    raise ValueError, "output array has dtype=%s "\
-                            "dtype=%s is required" % \
-                            (output.dtype,upcast(self.dtype,other.dtype))
-                y = output
+        return result
 
+    def _mul_dense_matrix(self, other):
+        # TODO make sparse * dense matrix multiplication more efficient
+        # matvec each column of other
+        result = hstack( [ self * col.reshape(-1,1) for col in asarray(other).T ] )
+        return result                
 
-            bsr_matvec(M/R, N/C, R, C, \
-                self.indptr, self.indices, ravel(self.data), ravel(other), y)
+    def _mul_sparse_matrix(self, other):
+        M, K1 = self.shape
+        K2, N = other.shape
 
-            if isinstance(other, matrix):
-                y = asmatrix(y)
+        indptr = empty_like( self.indptr )
 
-            if other.ndim == 2 and other.shape[1] == 1:
-                # If 'other' was an (nx1) column vector, reshape the result
-                y = y.reshape(-1,1)
+        R,n = self.blocksize
 
-            return y
+        #convert to this format
+        if isspmatrix_bsr(other):
+            C = other.blocksize[1]
+        else:
+            C = 1
 
-        elif isspmatrix(other):
-            raise TypeError, "use matmat() for sparse * sparse"
+        from csr import isspmatrix_csr
 
+        if isspmatrix_csr(other) and n == 1:
+            other = other.tobsr(blocksize=(n,C),copy=False) #convert to this format
         else:
-            raise TypeError, "need a dense vector"
+            other = other.tobsr(blocksize=(n,C))
 
+        csr_matmat_pass1( M/R, N/C, \
+                self.indptr,  self.indices, \
+                other.indptr, other.indices, \
+                indptr)
 
-    def matmat(self, other):
-        if isspmatrix(other):
-            M, K1 = self.shape
-            K2, N = other.shape
-            if (K1 != K2):
-                raise ValueError, "shape mismatch error"
+        bnnz = indptr[-1]
+        indices = empty( bnnz, dtype=intc)
+        data    = empty( R*C*bnnz, dtype=upcast(self.dtype,other.dtype))
 
-            indptr = empty_like( self.indptr )
+        bsr_matmat_pass2( M/R, N/C, R, C, n, \
+                self.indptr,  self.indices,  ravel(self.data), \
+                other.indptr, other.indices, ravel(other.data), \
+                indptr,       indices,       data)
 
-            R,n = self.blocksize
+        data = data.reshape(-1,R,C)
+        #TODO eliminate zeros
 
-            #convert to this format
-            if isspmatrix_bsr(other):
-                C = other.blocksize[1]
-            else:
-                C = 1
+        return bsr_matrix((data,indices,indptr),shape=(M,N),blocksize=(R,C))
 
-            from csr import isspmatrix_csr
 
-            if isspmatrix_csr(other) and n == 1:
-                other = other.tobsr(blocksize=(n,C),copy=False) #convert to this format
-            else:
-                other = other.tobsr(blocksize=(n,C))
 
 
-            csr_matmat_pass1( M/R, N/C, \
-                    self.indptr,  self.indices, \
-                    other.indptr, other.indices, \
-                    indptr)
-
-            bnnz = indptr[-1]
-            indices = empty( bnnz, dtype=intc)
-            data    = empty( R*C*bnnz, dtype=upcast(self.dtype,other.dtype))
-
-            bsr_matmat_pass2( M/R, N/C, R, C, n, \
-                    self.indptr,  self.indices,  ravel(self.data), \
-                    other.indptr, other.indices, ravel(other.data), \
-                    indptr,       indices,       data)
-
-            data = data.reshape(-1,R,C)
-            #TODO eliminate zeros
-
-            return bsr_matrix((data,indices,indptr),shape=(M,N),blocksize=(R,C))
-        elif isdense(other):
-            # TODO make sparse * dense matrix multiplication more efficient
-            
-            # matvec each column of other
-            result = hstack( [ self * col.reshape(-1,1) for col in asarray(other).T ] )
-            if isinstance(other, matrix):
-                result = asmatrix(result)
-            return result                
-
-        else:
-            raise TypeError, "need a dense or sparse matrix"
-
-
     ######################
     # Conversion methods #
     ######################

Modified: trunk/scipy/sparse/compressed.py
===================================================================
--- trunk/scipy/sparse/compressed.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/compressed.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -227,15 +227,6 @@
             raise NotImplementedError
 
 
-    def __mul__(self, other): # self * other
-        """ Scalar, vector, or matrix multiplication
-        """
-        if isscalarlike(other):
-            return self._with_data(self.data * other)
-        else:
-            return self.dot(other)
-
-
     def __rmul__(self, other): # other * self
         if isscalarlike(other):
             return self.__mul__(other)
@@ -245,7 +236,7 @@
                 tr = other.transpose()
             except AttributeError:
                 tr = asarray(other).transpose()
-            return self.transpose().dot(tr).transpose()
+            return (self.transpose() * tr).transpose()
 
 
     def __truediv__(self,other):
@@ -274,102 +265,157 @@
             other = self.__class__(other)
             return self._binopt(other,'_elmul_')
 
-    def matmat(self, other):
-        if isspmatrix(other):
-            M, K1 = self.shape
-            K2, N = other.shape
-            if (K1 != K2):
-                raise ValueError, "shape mismatch error"
 
-            #return self._binopt(other,'mu',in_shape=(M,N),out_shape=(M,N))
+    ###########################
+    # Multiplication handlers #
+    ###########################
 
-            major_axis = self._swap((M,N))[0]
-            indptr = empty( major_axis + 1, dtype=intc )
+    def _mul_vector(self, other):
+        M,N = self.shape
 
-            other = self.__class__(other) #convert to this format
-            fn = getattr(sparsetools, self.format + '_matmat_pass1')
-            fn( M, N, self.indptr, self.indices, \
-                      other.indptr, other.indices, \
-                      indptr)
+        #output array
+        result = zeros( self.shape[0], dtype=upcast(self.dtype,other.dtype) )
+ 
+        # csrmux, cscmux
+        fn = getattr(sparsetools,self.format + '_matvec')
+        fn(M, N, self.indptr, self.indices, self.data, other, result)
+ 
+        return result
 
-            nnz = indptr[-1]
-            indices = empty( nnz, dtype=intc)
-            data    = empty( nnz, dtype=upcast(self.dtype,other.dtype))
 
-            fn = getattr(sparsetools, self.format + '_matmat_pass2')
-            fn( M, N, self.indptr, self.indices, self.data, \
-                      other.indptr, other.indices, other.data, \
-                      indptr, indices, data)
+    def _mul_dense_matrix(self,other):
+        # TODO make sparse * dense matrix multiplication more efficient
+        # matvec each column of other
+        return hstack( [ self * col.reshape(-1,1) for col in asarray(other).T ] )
 
-            return self.__class__((data,indices,indptr),shape=(M,N))
+    
+    def _mul_sparse_matrix(self, other):
+        M, K1 = self.shape
+        K2, N = other.shape
 
+        major_axis = self._swap((M,N))[0]
+        indptr = empty( major_axis + 1, dtype=intc )
 
-        elif isdense(other):
-            # TODO make sparse * dense matrix multiplication more efficient
-            
-            # matvec each column of other
-            result = hstack( [ self * col.reshape(-1,1) for col in asarray(other).T ] )
-            if isinstance(other, matrix):
-                result = asmatrix(result)
-            return result                
+        other = self.__class__(other) #convert to this format
+        fn = getattr(sparsetools, self.format + '_matmat_pass1')
+        fn( M, N, self.indptr, self.indices, \
+                  other.indptr, other.indices, \
+                  indptr)
 
-        else:
-            raise TypeError, "need a dense or sparse matrix"
+        nnz = indptr[-1]
+        indices = empty( nnz, dtype=intc)
+        data    = empty( nnz, dtype=upcast(self.dtype,other.dtype))
 
-    def matvec(self, other, output=None):
-        """Sparse matrix vector product (self * other)
+        fn = getattr(sparsetools, self.format + '_matmat_pass2')
+        fn( M, N, self.indptr, self.indices, self.data, \
+                  other.indptr, other.indices, other.data, \
+                  indptr, indices, data)
 
-        'other' may be a rank 1 array of length N or a rank 2 array
-        or matrix with shape (N,1).
+        return self.__class__((data,indices,indptr),shape=(M,N))
+    
+    def matvec(self,other):
+        return self * other
+    
+    def matmat(self,other):
+        return self * other
 
-        """
-        #If the optional 'output' parameter is defined, it will
-        #be used to store the result.  Otherwise, a new vector
-        #will be allocated.
+    #def matmat(self, other):
+    #    if isspmatrix(other):
+    #        M, K1 = self.shape
+    #        K2, N = other.shape
+    #        if (K1 != K2):
+    #            raise ValueError, "shape mismatch error"
 
-        if isdense(other):
-            M,N = self.shape
+    #        #return self._binopt(other,'mu',in_shape=(M,N),out_shape=(M,N))
 
-            if other.shape != (N,) and other.shape != (N,1):
-                raise ValueError, "dimension mismatch"
+    #        major_axis = self._swap((M,N))[0]
+    #        indptr = empty( major_axis + 1, dtype=intc )
 
-            # csrmux, cscmux
-            fn = getattr(sparsetools,self.format + '_matvec')
+    #        other = self.__class__(other) #convert to this format
+    #        fn = getattr(sparsetools, self.format + '_matmat_pass1')
+    #        fn( M, N, self.indptr, self.indices, \
+    #                  other.indptr, other.indices, \
+    #                  indptr)
 
-            #output array
-            y = zeros( self.shape[0], dtype=upcast(self.dtype,other.dtype) )
+    #        nnz = indptr[-1]
+    #        indices = empty( nnz, dtype=intc)
+    #        data    = empty( nnz, dtype=upcast(self.dtype,other.dtype))
 
-            #if output is None:
-            #    y = empty( self.shape[0], dtype=upcast(self.dtype,other.dtype) )
-            #else:
-            #    if output.shape != (M,) and output.shape != (M,1):
-            #        raise ValueError, "output array has improper dimensions"
-            #    if not output.flags.c_contiguous:
-            #        raise ValueError, "output array must be contiguous"
-            #    if output.dtype != upcast(self.dtype,other.dtype):
-            #        raise ValueError, "output array has dtype=%s "\
-            #                "dtype=%s is required" % \
-            #                (output.dtype,upcast(self.dtype,other.dtype))
-            #    y = output
+    #        fn = getattr(sparsetools, self.format + '_matmat_pass2')
+    #        fn( M, N, self.indptr, self.indices, self.data, \
+    #                  other.indptr, other.indices, other.data, \
+    #                  indptr, indices, data)
 
-            fn(self.shape[0], self.shape[1], \
-                self.indptr, self.indices, self.data, numpy.ravel(other), y)
+    #        return self.__class__((data,indices,indptr),shape=(M,N))
 
-            if isinstance(other, matrix):
-                y = asmatrix(y)
 
-            if other.ndim == 2 and other.shape[1] == 1:
-                # If 'other' was an (nx1) column vector, reshape the result
-                y = y.reshape(-1,1)
+    #    elif isdense(other):
+    #        # TODO make sparse * dense matrix multiplication more efficient
+    #        
+    #        # matvec each column of other
+    #        result = hstack( [ self * col.reshape(-1,1) for col in asarray(other).T ] )
+    #        if isinstance(other, matrix):
+    #            result = asmatrix(result)
+    #        return result                
 
-            return y
+    #    else:
+    #        raise TypeError, "need a dense or sparse matrix"
 
-        elif isspmatrix(other):
-            raise TypeError, "use matmat() for sparse * sparse"
 
-        else:
-            raise TypeError, "need a dense vector"
+    #def matvec(self, other):
+    #    """Sparse matrix vector product (self * other)
 
+    #    'other' may be a rank 1 array of length N or a rank 2 array
+    #    or matrix with shape (N,1).
+
+    #    """
+    #    #If the optional 'output' parameter is defined, it will
+    #    #be used to store the result.  Otherwise, a new vector
+    #    #will be allocated.
+
+    #    if isdense(other):
+    #        M,N = self.shape
+
+    #        if other.shape != (N,) and other.shape != (N,1):
+    #            raise ValueError, "dimension mismatch"
+
+    #        # csrmux, cscmux
+    #        fn = getattr(sparsetools,self.format + '_matvec')
+
+    #        #output array
+    #        y = zeros( self.shape[0], dtype=upcast(self.dtype,other.dtype) )
+
+    #        #if output is None:
+    #        #    y = empty( self.shape[0], dtype=upcast(self.dtype,other.dtype) )
+    #        #else:
+    #        #    if output.shape != (M,) and output.shape != (M,1):
+    #        #        raise ValueError, "output array has improper dimensions"
+    #        #    if not output.flags.c_contiguous:
+    #        #        raise ValueError, "output array must be contiguous"
+    #        #    if output.dtype != upcast(self.dtype,other.dtype):
+    #        #        raise ValueError, "output array has dtype=%s "\
+    #        #                "dtype=%s is required" % \
+    #        #                (output.dtype,upcast(self.dtype,other.dtype))
+    #        #    y = output
+
+    #        fn(self.shape[0], self.shape[1], \
+    #            self.indptr, self.indices, self.data, numpy.ravel(other), y)
+
+    #        if isinstance(other, matrix):
+    #            y = asmatrix(y)
+
+    #        if other.ndim == 2 and other.shape[1] == 1:
+    #            # If 'other' was an (nx1) column vector, reshape the result
+    #            y = y.reshape(-1,1)
+
+    #        return y
+
+    #    elif isspmatrix(other):
+    #        raise TypeError, "use matmat() for sparse * sparse"
+
+    #    else:
+    #        raise TypeError, "need a dense vector"
+
     def rmatvec(self, other, conjugate=True):
         """Multiplies the vector 'other' by the sparse matrix, returning a
         dense vector as a result.
@@ -629,10 +675,7 @@
         return coo_matrix((data,(row,col)), self.shape)
 
     def toarray(self):
-        A = self.tocoo(copy=False)
-        M = zeros(self.shape, dtype=self.dtype)
-        M[A.row, A.col] = A.data
-        return M
+        return self.tocoo(copy=False).toarray()
 
     ##############################################################
     # methods that examine or modify the internal data structure #
@@ -679,7 +722,7 @@
                     fn( len(self.indptr) - 1, self.indptr, self.indices)
         return self.__has_sorted_indices
 
-    def __set_sorted(self,val):
+    def __set_sorted(self, val):
         self.__has_sorted_indices = bool(val)
 
     has_sorted_indices = property(fget=__get_sorted, fset=__set_sorted)
@@ -704,6 +747,7 @@
             fn( len(self.indptr) - 1, self.indptr, self.indices, self.data)
             self.has_sorted_indices = True
 
+    #TODO remove after 0.7
     def ensure_sorted_indices(self, inplace=False):
         """Return a copy of this matrix where the column indices are sorted
         """
@@ -717,16 +761,16 @@
             return self.sorted_indices()
 
     def prune(self):
-        """ Remove empty space after all non-zero elements.
+        """Remove empty space after all non-zero elements.
         """
         major_dim = self._swap(self.shape)[0]
 
         if len(self.indptr) != major_dim + 1:
-            raise ValueError, "index pointer has invalid length"
+            raise ValueError('index pointer has invalid length')
         if len(self.indices) < self.nnz:
-            raise ValueError, "indices array has fewer than nnz elements"
+            raise ValueError('indices array has fewer than nnz elements')
         if len(self.data) < self.nnz:
-            raise ValueError, "data array has fewer than nnz elements"
+            raise ValueError('data array has fewer than nnz elements')
 
         self.data    = self.data[:self.nnz]
         self.indices = self.indices[:self.nnz]

Modified: trunk/scipy/sparse/coo.py
===================================================================
--- trunk/scipy/sparse/coo.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/coo.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -7,11 +7,10 @@
 from itertools import izip
 from warnings import warn
 
-from numpy import array, asarray, empty, intc, zeros,  \
-        unique, searchsorted, atleast_2d, empty_like, rank, \
-        deprecate
+from numpy import array, asarray, empty, intc, zeros, \
+        unique, searchsorted, atleast_2d, rank, deprecate
 
-from sparsetools import coo_tocsr, coo_tocsc, coo_todense
+from sparsetools import coo_tocsr, coo_tocsc, coo_todense, coo_matvec
 from base import isspmatrix
 from data import _data_matrix
 from sputils import upcast, to_native, isshape, getdtype
@@ -55,7 +54,6 @@
         - does not directly support:
             + arithmetic operations
             + slicing
-            + matrix vector products
 
 
     Intended Usage
@@ -118,21 +116,21 @@
                 try:
                     obj, ij = arg1
                 except:
-                    raise TypeError, "invalid input format"
+                    raise TypeError('invalid input format')
 
                 try:
                     if len(ij) != 2:
                         raise TypeError
                 except TypeError:
-                    raise TypeError, "invalid input format"
+                    raise TypeError('invalid input format')
 
-                self.row = array(ij[0],copy=copy,dtype=intc)
-                self.col = array(ij[1],copy=copy,dtype=intc)
-                self.data = array(obj,copy=copy)
+                self.row  = array(ij[0], copy=copy, dtype=intc)
+                self.col  = array(ij[1], copy=copy, dtype=intc)
+                self.data = array(  obj, copy=copy)
 
                 if shape is None:
                     if len(self.row) == 0 or len(self.col) == 0:
-                        raise ValueError, "cannot infer dimensions from zero sized index arrays"
+                        raise ValueError('cannot infer dimensions from zero sized index arrays')
                     M = self.row.max() + 1
                     N = self.col.max() + 1
                     self.shape = (M, N)
@@ -144,13 +142,13 @@
         elif arg1 is None:
             # Initialize an empty matrix.
             if not isinstance(shape, tuple) or not isintlike(shape[0]):
-                raise TypeError, "dimensions not understood"
+                raise TypeError('dimensions not understood')
             warn('coo_matrix(None, shape=(M,N)) is deprecated, ' \
                     'use coo_matrix( (M,N) ) instead', DeprecationWarning)
             self.shape = shape
-            self.data = array([],getdtype(dtype, default=float))
-            self.row = array([],dtype=intc)
-            self.col = array([],dtype=intc)
+            self.data = array([], getdtype(dtype, default=float))
+            self.row = array([], dtype=intc)
+            self.col = array([], dtype=intc)
         else:
             if isspmatrix(arg1):
                 if isspmatrix_coo(arg1) and copy:
@@ -169,10 +167,10 @@
                 try:
                     M = atleast_2d(asarray(arg1))
                 except:
-                    raise TypeError, "invalid input format"
+                    raise TypeError('invalid input format')
 
                 if len(M.shape) != 2:
-                    raise TypeError, "expected rank <= 2 array or matrix"
+                    raise TypeError('expected rank <= 2 array or matrix')
                 self.shape = M.shape
                 self.row,self.col = (M != 0).nonzero()
                 self.data  = M[self.row,self.col]
@@ -182,11 +180,10 @@
     def getnnz(self):
         nnz = len(self.data)
         if (nnz != len(self.row)) or (nnz != len(self.col)):
-            raise ValueError, "row, column, and data array must all be "\
-                  "the same length"
+            raise ValueError('row, column, and data array must all be the same length')
 
         if rank(self.data) != 1 or rank(self.row) != 1 or rank(self.col) != 1:
-            raise ValueError, "row, column, and data arrays must have rank 1"
+            raise ValueError('row, column, and data arrays must have rank 1')
 
         return nnz
     nnz = property(fget=getnnz)
@@ -204,22 +201,20 @@
                     % self.col.dtype.name )
 
         # only support 32-bit ints for now
-        self.row  = asarray(self.row,dtype=intc)
-        self.col  = asarray(self.col,dtype=intc)
+        self.row  = asarray(self.row, dtype=intc)
+        self.col  = asarray(self.col, dtype=intc)
         self.data = to_native(self.data)
 
         if nnz > 0:
-            if(self.row.max() >= self.shape[0]):
-                raise ValueError, "row index exceedes matrix dimensions"
-            if(self.col.max() >= self.shape[1]):
-                raise ValueError, "column index exceedes matrix dimensions"
-            if(self.row.min() < 0):
-                raise ValueError, "negative row index found"
-            if(self.col.min() < 0):
-                raise ValueError, "negative column index found"
+            if self.row.max() >= self.shape[0]:
+                raise ValueError('row index exceedes matrix dimensions')
+            if self.col.max() >= self.shape[1]:
+                raise ValueError('column index exceedes matrix dimensions')
+            if self.row.min() < 0:
+                raise ValueError('negative row index found')
+            if self.col.min() < 0:
+                raise ValueError('negative column index found')
 
-        # some functions pass floats
-        self.shape = tuple([int(x) for x in self.shape])
 
     @deprecate
     def rowcol(self, num):
@@ -334,7 +329,16 @@
             return coo_matrix( (data, (self.row, self.col) ), \
                                    shape=self.shape, dtype=data.dtype)
 
+    ###########################
+    # Multiplication handlers #
+    ###########################
 
+    def _mul_vector(self, other):
+        #output array
+        result = zeros( self.shape[0], dtype=upcast(self.dtype,other.dtype) )
+        coo_matvec(self.nnz, self.row, self.col, self.data, other, result)
+        return result
+
 from sputils import _isinstance
 
 def isspmatrix_coo( x ):

Modified: trunk/scipy/sparse/data.py
===================================================================
--- trunk/scipy/sparse/data.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/data.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -58,3 +58,12 @@
 
     def copy(self):
         return self._with_data(self.data.copy(),copy=True)
+
+
+    ###########################
+    # Multiplication handlers #
+    ###########################
+
+    def _mul_scalar(self, other):
+        return self._with_data(self.data * other)
+

Modified: trunk/scipy/sparse/dia.py
===================================================================
--- trunk/scipy/sparse/dia.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/dia.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -142,54 +142,20 @@
 
     nnz = property(fget=getnnz)
 
+    def _mul_vector(self, other):
+        x = other
 
-    def __mul__(self, other): # self * other
-        """ Scalar, vector, or matrix multiplication
-        """
-        if isscalarlike(other):
-            return dia_matrix((other * self.data, self.diags),self.shape)
-        else:
-            return self.dot(other)
+        y = zeros( self.shape[0], dtype=upcast(self.dtype,x.dtype))
 
-    def matmat(self, other):
-        if isspmatrix(other):
-            M, K1 = self.shape
-            K2, N = other.shape
-            if (K1 != K2):
-                raise ValueError, "shape mismatch error"
-
-            return self.tocsr() * other
-            #TODO handle sparse/sparse matmat here
-        else:
-            return self.tocsr() * other
-            #TODO handle sparse/dense matmat here
-
-
-    def matvec(self,other):
-        x = asarray(other)
-
-        if x.ndim == 1:
-            x = x.reshape(-1,1)
-        if self.shape[1] != x.shape[0]:
-            raise ValueError, "dimension mismatch"
-
-        y = zeros((self.shape[0],x.shape[1]), dtype=upcast(self.dtype,x.dtype))
-        temp = empty_like( y )
-
         L = self.data.shape[1]
+
         M,N = self.shape
 
         dia_matvec(M,N, len(self.diags), L, self.diags, self.data, x.ravel(), y.ravel())
 
-        if isinstance(other, matrix):
-            y = asmatrix(y)
-
-        if other.ndim == 1:
-            # If 'other' was a 1d array, reshape the result
-            y = y.reshape(-1)
-
         return y
 
+    
     def todia(self,copy=False):
         if copy:
             return self.copy()

Modified: trunk/scipy/sparse/dok.py
===================================================================
--- trunk/scipy/sparse/dok.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/dok.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -349,18 +349,15 @@
             new[key] = -self[key]
         return new
 
-    def __mul__(self, other):           # self * other
-        if isscalarlike(other):
-            new = dok_matrix(self.shape, dtype=self.dtype)
-            # Multiply this scalar by every element.
-            for (key, val) in self.iteritems():
-                new[key] = val * other
-            #new.dtype.char = self.dtype.char
-            return new
-        else:
-            return self.dot(other)
+    def _mul_scalar(self, other):
+        new = dok_matrix(self.shape, dtype=self.dtype)
+        # Multiply this scalar by every element.
+        for (key, val) in self.iteritems():
+            new[key] = val * other
+        #new.dtype.char = self.dtype.char
+        return new
 
-    def __imul__(self, other):           # self * other
+    def __imul__(self, other):
         if isscalarlike(other):
             # Multiply this scalar by every element.
             for (key, val) in self.iteritems():
@@ -370,23 +367,8 @@
         else:
             return NotImplementedError
 
-    def __rmul__(self, other):          # other * self
-        if isscalarlike(other):
-            new = dok_matrix(self.shape, dtype=self.dtype)
-            # Multiply this scalar by every element.
-            for (key, val) in self.iteritems():
-                new[key] = other * val
-            #new.dtype.char = self.dtype.char
-            return new
-        else:
-            # Don't use asarray unless we have to
-            try:
-                tr = other.transpose()
-            except AttributeError:
-                tr = asarray(other).transpose()
-            return self.transpose().dot(tr).transpose()
 
-    def __truediv__(self, other):           # self * other
+    def __truediv__(self, other):
         if isscalarlike(other):
             new = dok_matrix(self.shape, dtype=self.dtype)
             # Multiply this scalar by every element.
@@ -398,7 +380,7 @@
             return self.tocsr() / other
 
 
-    def __itruediv__(self, other):           # self * other
+    def __itruediv__(self, other):
         if isscalarlike(other):
             # Multiply this scalar by every element.
             for (key, val) in self.iteritems():

Modified: trunk/scipy/sparse/lil.py
===================================================================
--- trunk/scipy/sparse/lil.py	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/lil.py	2008-07-08 09:47:43 UTC (rev 4532)
@@ -43,7 +43,7 @@
     Disadvantages of the LIL format
         - arithmetic operations LIL + LIL are slow (consider CSR or CSC)
         - slow column slicing (consider CSC)
-        - matrix vector products are slower than CSR/CSC
+        - slow matrix vector products (consider CSR or CSC)
 
     Intended Usage
         - LIL is a convenient format for constructing sparse matrices
@@ -322,20 +322,17 @@
         else:
             raise ValueError, "invalid index value: %s" % str((i, j))
 
-    def __mul__(self, other):           # self * other
-        if isscalarlike(other):
-            if other == 0:
-                # Multiply by zero: return the zero matrix
-                new = lil_matrix(shape=self.shape, dtype=self.dtype)
-            else:
-                new = self.copy()
-                # Multiply this scalar by every element.
-                new.data = numpy.array([[val*other for val in rowvals] for
-                                        rowvals in new.data], dtype=object)
-            return new
+    def _mul_scalar(self, other):
+        if other == 0:
+            # Multiply by zero: return the zero matrix
+            new = lil_matrix(shape=self.shape, dtype=self.dtype)
         else:
-            return self.dot(other)
-
+            new = self.copy()
+            # Multiply this scalar by every element.
+            new.data = numpy.array([[val*other for val in rowvals] for
+                                    rowvals in new.data], dtype=object)
+        return new
+    
     def __truediv__(self, other):           # self / other
         if isscalarlike(other):
             new = self.copy()

Modified: trunk/scipy/sparse/sparsetools/bsr.h
===================================================================
--- trunk/scipy/sparse/sparsetools/bsr.h	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/sparsetools/bsr.h	2008-07-08 09:47:43 UTC (rev 4532)
@@ -618,14 +618,11 @@
 	                  const T Xx[],
 	                        T Yx[])
 {
-    for(I i = 0; i < R*n_brow; i++){
-        Yx[i] = 0;
-    }
-
+    const int RC = R*C;
     for(I i = 0; i < n_brow; i++) {
         for(I jj = Ap[i]; jj < Ap[i+1]; jj++) {
             I j = Aj[jj];
-            matvec<R,C,1,1>(Ax + jj*R*C, Xx + j*C, Yx + i*R);
+            matvec<R,C,1,1>(Ax + jj*RC, Xx + j*C, Yx + i*R);
         }
     }
 }
@@ -686,11 +683,6 @@
 #endif
 
     //otherwise use general method
-
-    for(I i = 0; i < R*n_brow; i++){
-        Yx[i] = 0;
-    }
-
     for(I i = 0; i < n_brow; i++){
         const T * A = Ax + R * C * Ap[i];
               T * y = Yx + R * i;

Modified: trunk/scipy/sparse/sparsetools/bsr_wrap.cxx
===================================================================
--- trunk/scipy/sparse/sparsetools/bsr_wrap.cxx	2008-07-06 16:40:48 UTC (rev 4531)
+++ trunk/scipy/sparse/sparsetools/bsr_wrap.cxx	2008-07-08 09:47:43 UTC (rev 4532)
@@ -3185,24 +3185,36 @@
   bsr_diagonal< int,signed char >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(signed char const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -3301,24 +3313,36 @@
   bsr_diagonal< int,unsigned char >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(unsigned char const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -3417,24 +3441,36 @@
   bsr_diagonal< int,short >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(short const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -3533,24 +3569,36 @@
   bsr_diagonal< int,unsigned short >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(unsigned short const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -3649,24 +3697,36 @@
   bsr_diagonal< int,int >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(int const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -3765,24 +3825,36 @@
   bsr_diagonal< int,unsigned int >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(unsigned int const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -3881,24 +3953,36 @@
   bsr_diagonal< int,long long >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(long long const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -3997,24 +4081,36 @@
   bsr_diagonal< int,unsigned long long >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(unsigned long long const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -4113,24 +4209,36 @@
   bsr_diagonal< int,float >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(float const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -4229,24 +4337,36 @@
   bsr_diagonal< int,double >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(double const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -4345,24 +4465,36 @@
   bsr_diagonal< int,long double >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(long double const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -4461,24 +4593,36 @@
   bsr_diagonal< int,npy_cfloat_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(npy_cfloat_wrapper const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -4577,24 +4721,36 @@
   bsr_diagonal< int,npy_cdouble_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(npy_cdouble_wrapper const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -4693,24 +4849,36 @@
   bsr_diagonal< int,npy_clongdouble_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(npy_clongdouble_wrapper const (*))arg7,arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -5513,24 +5681,36 @@
   bsr_scale_rows< int,signed char >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(signed char const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -5629,24 +5809,36 @@
   bsr_scale_rows< int,unsigned char >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(unsigned char const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -5745,24 +5937,36 @@
   bsr_scale_rows< int,short >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(short const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -5861,24 +6065,36 @@
   bsr_scale_rows< int,unsigned short >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(unsigned short const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -5977,24 +6193,36 @@
   bsr_scale_rows< int,int >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(int const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -6093,24 +6321,36 @@
   bsr_scale_rows< int,unsigned int >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(unsigned int const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -6209,24 +6449,36 @@
   bsr_scale_rows< int,long long >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(long long const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -6325,24 +6577,36 @@
   bsr_scale_rows< int,unsigned long long >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(unsigned long long const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -6441,24 +6705,36 @@
   bsr_scale_rows< int,float >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(float const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -6557,24 +6833,36 @@
   bsr_scale_rows< int,double >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(double const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -6673,24 +6961,36 @@
   bsr_scale_rows< int,long double >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(long double const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -6789,24 +7089,36 @@
   bsr_scale_rows< int,npy_cfloat_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(npy_cfloat_wrapper const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -6905,24 +7217,36 @@
   bsr_scale_rows< int,npy_cdouble_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(npy_cdouble_wrapper const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -7021,24 +7345,36 @@
   bsr_scale_rows< int,npy_clongdouble_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(npy_clongdouble_wrapper const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -7841,24 +8177,36 @@
   bsr_scale_columns< int,signed char >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(signed char const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -7957,24 +8305,36 @@
   bsr_scale_columns< int,unsigned char >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(unsigned char const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -8073,24 +8433,36 @@
   bsr_scale_columns< int,short >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(short const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -8189,24 +8561,36 @@
   bsr_scale_columns< int,unsigned short >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(unsigned short const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -8305,24 +8689,36 @@
   bsr_scale_columns< int,int >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(int const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -8421,24 +8817,36 @@
   bsr_scale_columns< int,unsigned int >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(unsigned int const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -8537,24 +8945,36 @@
   bsr_scale_columns< int,long long >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(long long const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -8653,24 +9073,36 @@
   bsr_scale_columns< int,unsigned long long >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(unsigned long long const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -8769,24 +9201,36 @@
   bsr_scale_columns< int,float >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(float const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -8885,24 +9329,36 @@
   bsr_scale_columns< int,double >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(double const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -9001,24 +9457,36 @@
   bsr_scale_columns< int,long double >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(long double const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -9117,24 +9585,36 @@
   bsr_scale_columns< int,npy_cfloat_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(npy_cfloat_wrapper const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -9233,24 +9713,36 @@
   bsr_scale_columns< int,npy_cdouble_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(npy_cdouble_wrapper const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -9349,24 +9841,36 @@
   bsr_scale_columns< int,npy_clongdouble_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,arg7,(npy_clongdouble_wrapper const (*))arg8);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   return NULL;
 }
@@ -10185,24 +10689,36 @@
   bsr_transpose< int,signed char >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(signed char const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -10317,24 +10833,36 @@
   bsr_transpose< int,unsigned char >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(unsigned char const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -10449,24 +10977,36 @@
   bsr_transpose< int,short >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(short const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -10581,24 +11121,36 @@
   bsr_transpose< int,unsigned short >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(unsigned short const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -10713,24 +11265,36 @@
   bsr_transpose< int,int >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(int const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -10845,24 +11409,36 @@
   bsr_transpose< int,unsigned int >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(unsigned int const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -10977,24 +11553,36 @@
   bsr_transpose< int,long long >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(long long const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -11109,24 +11697,36 @@
   bsr_transpose< int,unsigned long long >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(unsigned long long const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -11241,24 +11841,36 @@
   bsr_transpose< int,float >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(float const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -11373,24 +11985,36 @@
   bsr_transpose< int,double >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(double const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -11505,24 +12129,36 @@
   bsr_transpose< int,long double >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(long double const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -11637,24 +12273,36 @@
   bsr_transpose< int,npy_cfloat_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(npy_cfloat_wrapper const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -11769,24 +12417,36 @@
   bsr_transpose< int,npy_cdouble_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(npy_cdouble_wrapper const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -11901,24 +12561,36 @@
   bsr_transpose< int,npy_clongdouble_wrapper >(arg1,arg2,arg3,arg4,(int const (*))arg5,(int const (*))arg6,(npy_clongdouble_wrapper const (*))arg7,arg8,arg9,arg10);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object5 && array5) Py_DECREF(array5);
+    if (is_new_object5 && array5) {
+      Py_DECREF(array5); 
+    }
   }
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   return NULL;
 }
@@ -12928,42 +13600,66 @@
   bsr_matmat_pass2< int,signed char >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(signed char const (*))arg8,(int const (*))arg9,(int const (*))arg10,(signed char const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -13129,42 +13825,66 @@
   bsr_matmat_pass2< int,unsigned char >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(unsigned char const (*))arg8,(int const (*))arg9,(int const (*))arg10,(unsigned char const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -13330,42 +14050,66 @@
   bsr_matmat_pass2< int,short >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(short const (*))arg8,(int const (*))arg9,(int const (*))arg10,(short const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -13531,42 +14275,66 @@
   bsr_matmat_pass2< int,unsigned short >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(unsigned short const (*))arg8,(int const (*))arg9,(int const (*))arg10,(unsigned short const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -13732,42 +14500,66 @@
   bsr_matmat_pass2< int,int >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(int const (*))arg8,(int const (*))arg9,(int const (*))arg10,(int const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -13933,42 +14725,66 @@
   bsr_matmat_pass2< int,unsigned int >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(unsigned int const (*))arg8,(int const (*))arg9,(int const (*))arg10,(unsigned int const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -14134,42 +14950,66 @@
   bsr_matmat_pass2< int,long long >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(long long const (*))arg8,(int const (*))arg9,(int const (*))arg10,(long long const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -14335,42 +15175,66 @@
   bsr_matmat_pass2< int,unsigned long long >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(unsigned long long const (*))arg8,(int const (*))arg9,(int const (*))arg10,(unsigned long long const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -14536,42 +15400,66 @@
   bsr_matmat_pass2< int,float >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(float const (*))arg8,(int const (*))arg9,(int const (*))arg10,(float const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -14737,42 +15625,66 @@
   bsr_matmat_pass2< int,double >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(double const (*))arg8,(int const (*))arg9,(int const (*))arg10,(double const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return NULL;
 }
@@ -14938,42 +15850,66 @@
   bsr_matmat_pass2< int,long double >(arg1,arg2,arg3,arg4,arg5,(int const (*))arg6,(int const (*))arg7,(long double const (*))arg8,(int const (*))arg9,(int const (*))arg10,(long double const (*))arg11,arg12,arg13,arg14);
   resultobj = SWIG_Py_Void();
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 && array9) {
+      Py_DECREF(array9); 
+    }
   }
   {
-    if (is_new_object10 && array10) Py_DECREF(array10);
+    if (is_new_object10 && array10) {
+      Py_DECREF(array10); 
+    }
   }
   {
-    if (is_new_object11 && array11) Py_DECREF(array11);
+    if (is_new_object11 && array11) {
+      Py_DECREF(array11); 
+    }
   }
   return resultobj;
 fail:
   {
-    if (is_new_object6 && array6) Py_DECREF(array6);
+    if (is_new_object6 && array6) {
+      Py_DECREF(array6); 
+    }
   }
   {
-    if (is_new_object7 && array7) Py_DECREF(array7);
+    if (is_new_object7 && array7) {
+      Py_DECREF(array7); 
+    }
   }
   {
-    if (is_new_object8 && array8) Py_DECREF(array8);
+    if (is_new_object8 && array8) {
+      Py_DECREF(array8); 
+    }
   }
   {
-    if (is_new_object9 && array9) Py_DECREF(array9);
+    if (is_new_object9 &a