pyodide/packages/scipy/patches/make-int-return-values.patch

668 lines
27 KiB
Diff

The return values of f2c functions are insignificant in most cases, so often it
is treated as returning void, when it really should return int (values are
"returned" by writing to pointers passed as an argument, but an obscure feature
known as alternative returns can cause the return value to be significant).
There's a big change to scipy/linalg/_cython_wrapper_generators.py, which is
called on build to generate python wrappers for lapack and BLAS. The change
makes everything call direct to CLAPACK with the correct function signatures
and also fixes some fortran -> c linking oddities that occur because f2py assumes
different function signatures to f2c, which in turn creates different function
signatures compared to what has been done in CLAPACK.
f2py is patched in numpy to make subroutines return int.
emscripten is very strict about void vs int returns and function signatures, so
we change everything to return int from subroutines, and signatures are altered
to be consistent.
diff --git a/scipy/_build_utils/src/wrap_dummy_g77_abi.f b/scipy/_build_utils/src/wrap_dummy_g77_abi.f
index caf99ac63..73cdebd96 100644
--- a/scipy/_build_utils/src/wrap_dummy_g77_abi.f
+++ b/scipy/_build_utils/src/wrap_dummy_g77_abi.f
@@ -6,14 +6,6 @@
WCDOTC = CDOTC( N, CX, INCX, CY, INCY )
END FUNCTION
- COMPLEX FUNCTION WCDOTU( N, CX, INCX, CY, INCY )
- INTEGER INCX, INCY, N
- COMPLEX CX(*), CY(*)
- EXTERNAL CDOTU
- COMPLEX CDOTU
- WCDOTU = CDOTU( N, CX, INCX, CY, INCY )
- END FUNCTION
-
DOUBLE COMPLEX FUNCTION WZDOTC( N, CX, INCX, CY, INCY )
INTEGER INCX, INCY, N
DOUBLE COMPLEX CX(*), CY(*)
@@ -22,14 +14,6 @@
WZDOTC = ZDOTC( N, CX, INCX, CY, INCY )
END FUNCTION
- DOUBLE COMPLEX FUNCTION WZDOTU( N, CX, INCX, CY, INCY )
- INTEGER INCX, INCY, N
- DOUBLE COMPLEX CX(*), CY(*)
- EXTERNAL ZDOTU
- DOUBLE COMPLEX ZDOTU
- WZDOTU = ZDOTU( N, CX, INCX, CY, INCY )
- END FUNCTION
-
COMPLEX FUNCTION WCLADIV( X, Y )
COMPLEX X, Y
EXTERNAL CLADIV
diff --git a/scipy/integrate/_odepackmodule.c b/scipy/integrate/_odepackmodule.c
index b296e6e30..f5029bee9 100644
--- a/scipy/integrate/_odepackmodule.c
+++ b/scipy/integrate/_odepackmodule.c
@@ -158,13 +158,13 @@ typedef void lsoda_f_t(F_INT *n, double *t, double *y, double *ydot);
typedef int lsoda_jac_t(F_INT *n, double *t, double *y, F_INT *ml, F_INT *mu,
double *pd, F_INT *nrowpd);
-void LSODA(lsoda_f_t *f, F_INT *neq, double *y, double *t, double *tout, F_INT *itol,
+int LSODA(lsoda_f_t *f, F_INT *neq, double *y, double *t, double *tout, F_INT *itol,
double *rtol, double *atol, F_INT *itask, F_INT *istate, F_INT *iopt,
double *rwork, F_INT *lrw, F_INT *iwork, F_INT *liw, lsoda_jac_t *jac,
F_INT *jt);
/*
-void ode_function(int *n, double *t, double *y, double *ydot)
+int ode_function(int *n, double *t, double *y, double *ydot)
{
ydot[0] = -0.04*y[0] + 1e4*y[1]*y[2];
ydot[2] = 3e7*y[1]*y[1];
@@ -173,7 +173,7 @@ void ode_function(int *n, double *t, double *y, double *ydot)
}
*/
-void
+int
ode_function(F_INT *n, double *t, double *y, double *ydot)
{
/*
diff --git a/scipy/linalg/fblas_l1.pyf.src b/scipy/linalg/fblas_l1.pyf.src
index 4803a4a97..5adc703a4 100644
--- a/scipy/linalg/fblas_l1.pyf.src
+++ b/scipy/linalg/fblas_l1.pyf.src
@@ -279,14 +279,16 @@ end subroutine <prefix>axpy
function sdot(n,x,offx,incx,y,offy,incy) result (xy)
! Computes a vector-vector dot product.
- fortranname sdot
+ callstatement sdot_return_value=(*f2py_func)(&n,x+offx,&incx,y+offy,&incy)
+ callprotoargument int*,float*,int*,float*,int*
- callstatement (*f2py_func)(&sdot,&n,x+offx,&incx,y+offy,&incy)
- callprotoargument float*,F_INT*,float*,F_INT*,float*,F_INT*
+ fortranname F_FUNC(sdot,SDOT)
+ ! This following line is to avoid Fortran wrappers - fix for CLAPACK
+ intent(c) sdot
real dimension(*), intent(in) :: x
real dimension(*), intent(in) :: y
- real sdot,xy
+ double precision sdot,xy
integer optional, intent(in),check(incx>0||incx<0) :: incx = 1
integer optional, intent(in),check(incy>0||incy<0) :: incy = 1
integer optional, intent(in),depend(x) :: offx=0
@@ -304,8 +306,12 @@ end function sdot
function ddot(n,x,offx,incx,y,offy,incy) result (xy)
! Computes a vector-vector dot product.
- callstatement (*f2py_func)(&ddot,&n,x+offx,&incx,y+offy,&incy)
- callprotoargument double*,F_INT*,double*,F_INT*,double*,F_INT*
+ callstatement ddot_return_value=(*f2py_func)(&n,x+offx,&incx,y+offy,&incy)
+ callprotoargument int*,double*,int*,double*,int*
+
+ fortranname F_FUNC(ddot,ddot)
+ ! This following line is to avoid Fortran wrappers - fix for CLAPACK
+ intent(c) ddot
double precision dimension(*), intent(in) :: x
double precision dimension(*), intent(in) :: y
@@ -324,6 +330,7 @@ function ddot(n,x,offx,incx,y,offy,incy) result (xy)
end function ddot
++// in CLAPACK, cdotu and zdotu are void and return by pointer (as can't return complex* without allocation)
function <prefix2c>dotu(n,x,offx,incx,y,offy,incy) result(xy)
<ftype2c> :: <prefix2c>dotu, xy
@@ -335,6 +342,11 @@ function <prefix2c>dotu(n,x,offx,incx,y,offy,incy) result(xy)
<ftype2c> dimension(*),intent(in) :: x
<ftype2c> dimension(*),intent(in) :: y
++ fortranname F_FUNC(<prefix2c>dotu,<C,Z>DOTU)
++ ! This following line is to avoid Fortran wrappers - fix for CLAPACK
++ intent(c) <prefix2c>dotu
++
+
integer optional, intent(in),check(incx>0||incx<0) :: incx = 1
integer optional, intent(in),check(incy>0||incy<0) :: incy = 1
@@ -354,10 +366,12 @@ end function <prefix2c>dotu
function <prefix2c>dotc(n,x,offx,incx,y,offy,incy) result(xy)
<ftype2c> :: <prefix2c>dotc, xy
- fortranname w<prefix2c>dotc
+ callstatement <prefix2c>dotc_return_value=(*f2py_func)(&n,x+offx,&incx,y+offy,&incy)
+ callprotoargument int*,<ctype2c>*,int*,<ctype2c>*,int*
- callstatement (*f2py_func)(&<prefix2c>dotc,&n,x+offx,&incx,y+offy,&incy)
- callprotoargument <ctype2c>*,F_INT*,<ctype2c>*,F_INT*,<ctype2c>*,F_INT*
+ fortranname F_FUNC(<prefix2c>dotc,<C,Z>DOTC)
+ ! This following line is to avoid Fortran wrappers - fix for CLAPACK
+ intent(c) <prefix2c>dotc
<ftype2c> dimension(*),intent(in) :: x
<ftype2c> dimension(*),intent(in) :: y
@@ -379,10 +393,15 @@ end function <prefix2c>dotc
function <prefix3>nrm2(n,x,offx,incx) result(n2)
- <ftypereal3> <prefix3>nrm2, n2
+ <ftypereal3> nm2
+ double precision <prefix3>nrm2
- callstatement (*f2py_func)(&<prefix3>nrm2, &n,x+offx,&incx)
- callprotoargument <ctypereal3>*,F_INT*,<ctype3>*,F_INT*
+ callstatement <prefix3>nrm2_return_value=(*f2py_func)( &n,x+offx,&incx)
+ callprotoargument int*,<ctype3>*,int*
+
+ fortranname F_FUNC(<prefix3>nrm2,<S,SC>NRM2)
+ ! This following line is to avoid Fortran wrappers - fix for CLAPACK
+ intent(c) <prefix3>nrm2
<ftype3> dimension(*),intent(in) :: x
@@ -399,10 +418,14 @@ end function <prefix3>nrm2
function <prefix4>nrm2(n,x,offx,incx) result(n2)
- <ftypereal4> <prefix4>nrm2, n2
+ callstatement <prefix4>nrm2_return_value=(*f2py_func)(&n,x+offx,&incx)
+ callprotoargument int*,<ctype4>*,int*
- callstatement (*f2py_func)(&<prefix4>nrm2, &n,x+offx,&incx)
- callprotoargument <ctypereal4>*,F_INT*,<ctype4>*,F_INT*
+ double precision <prefix4>nrm2
+ <ftype4> n2
+ fortranname F_FUNC(<prefix4>nrm2,<S,D>NRM2)
+ ! This following line is to avoid Fortran wrappers - fix for CLAPACK
+ intent(c) <prefix4>nrm2
<ftype4> dimension(*),intent(in) :: x
@@ -417,14 +440,20 @@ function <prefix4>nrm2(n,x,offx,incx) result(n2)
end function <prefix4>nrm2
-function <prefix3>asum(n,x,offx,incx) result (s)
+function <prefix3>asum(n,x,offx,incx) result (d)
! Computes the sum of magnitudes of the vector elements
- callstatement (*f2py_func)(&<prefix3>asum,&n,x+offx,&incx)
- callprotoargument <ctypereal3>*,F_INT*,<ctype3>*,F_INT*
+ callstatement <prefix3>asum_return_value=(*f2py_func)(&n,x+offx,&incx)
+ callprotoargument int*,<ctype3>*,int*
+
+ double precision <prefix3>asum
+ fortranname F_FUNC(<prefix3>asum,<S,SC>ASUM)
+ ! This following line is to avoid Fortran wrappers - fix for CLAPACK
+ intent(c) <prefix3>asum
<ftype3> dimension(*), intent(in) :: x
- <ftypereal3> <prefix3>asum,s
+ <ftypereal3> s
+ double precision <prefix3>asum
integer optional, intent(in), check(incx>0||incx<0) :: incx = 1
integer optional, intent(in), depend(x) :: offx=0
check(offx>=0 && offx<len(x)) :: offx
@@ -434,11 +463,16 @@ function <prefix3>asum(n,x,offx,incx) result (s)
end function <prefix3>asum
-function <prefix4>asum(n,x,offx,incx) result (s)
+function <prefix4>asum(n,x,offx,incx) result (d)
! Computes the sum of magnitudes of the vector elements
- callstatement (*f2py_func)(&<prefix4>asum,&n,x+offx,&incx)
- callprotoargument <ctypereal4>*,F_INT*,<ctype4>*,F_INT*
+ callstatement <prefix4>asum_return_value=(*f2py_func)(&n,x+offx,&incx)
+ callprotoargument int*,<ctype4>*,int*
+
+ <ftype4> <prefix4>asum
+ fortranname F_FUNC(<prefix4>asum,<D,Z>ASUM)
+ ! This following line is to avoid Fortran wrappers - fix for CLAPACK
+ intent(c) <prefix4>asum
<ftype4> dimension(*), intent(in) :: x
<ftypereal4> <prefix4>asum,s
diff --git a/scipy/linalg/setup.py b/scipy/linalg/setup.py
index 0cbd5ffdf..d4ee4f867 100644
--- a/scipy/linalg/setup.py
+++ b/scipy/linalg/setup.py
@@ -44,9 +44,10 @@ def configuration(parent_package='', top_path=None):
# flapack:
sources = ['flapack.pyf.src']
sources += get_g77_abi_wrappers(lapack_opt)
- dep_pfx = join('src', 'lapack_deprecations')
- deprecated_lapack_routines = [join(dep_pfx, c + 'gegv.f') for c in 'cdsz']
- sources += deprecated_lapack_routines
+# CLAPACK still has these routines (with conflicting signatures)
+# dep_pfx = join('src', 'lapack_deprecations')
+# deprecated_lapack_routines = [join(dep_pfx, c + 'gegv.f') for c in 'cdsz']
+# sources += deprecated_lapack_routines
depends = ['flapack_gen.pyf.src',
'flapack_gen_banded.pyf.src',
'flapack_gen_tri.pyf.src',
diff --git a/scipy/optimize/_lsq/setup.py b/scipy/optimize/_lsq/setup.py
index 7ce589c0c..6412886e0 100644
--- a/scipy/optimize/_lsq/setup.py
+++ b/scipy/optimize/_lsq/setup.py
@@ -3,7 +3,7 @@ def configuration(parent_package='', top_path=None):
from numpy.distutils.misc_util import Configuration
config = Configuration('_lsq', parent_package, top_path)
config.add_extension('givens_elimination',
- sources=['givens_elimination.c'])
+ sources=['givens_elimination.c'],include_dirs=['../../linalg'])
return config
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/cgsrfs.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/cgsrfs.c
index a7dd2f8fd..3b2544d4f 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/cgsrfs.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/cgsrfs.c
@@ -171,13 +171,6 @@ cgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
int isave[3];
extern int clacon2_(int *, complex *, complex *, float *, int *, int []);
-#ifdef _CRAY
- extern int CCOPY(int *, complex *, int *, complex *, int *);
- extern int CSAXPY(int *, complex *, complex *, int *, complex *, int *);
-#else
- extern int ccopy_(int *, complex *, int *, complex *, int *);
- extern int caxpy_(int *, complex *, complex *, int *, complex *, int *);
-#endif
Astore = A->Store;
Aval = Astore->nzval;
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/dgscon.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/dgscon.c
index d51f24c3b..b76dc7a78 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/dgscon.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/dgscon.c
@@ -92,10 +92,7 @@ dgscon(char *norm, SuperMatrix *L, SuperMatrix *U,
double *work;
int *iwork;
int isave[3];
- extern int drscl_(int *, double *, double *, int *);
-
extern int dlacon2_(int *, double *, double *, int *, double *, int *, int []);
-
/* Test the input parameters. */
*info = 0;
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/dgsrfs.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/dgsrfs.c
index d37226035..69f6bd8cf 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/dgsrfs.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/dgsrfs.c
@@ -171,13 +171,6 @@ dgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
int isave[3];
extern int dlacon2_(int *, double *, double *, int *, double *, int *, int []);
-#ifdef _CRAY
- extern int SCOPY(int *, double *, int *, double *, int *);
- extern int SSAXPY(int *, double *, double *, int *, double *, int *);
-#else
- extern int dcopy_(int *, double *, int *, double *, int *);
- extern int daxpy_(int *, double *, double *, int *, double *, int *);
-#endif
Astore = A->Store;
Aval = Astore->nzval;
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_ccopy_to_ucol.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_ccopy_to_ucol.c
index a5eb0b613..bc8ce3537 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_ccopy_to_ucol.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_ccopy_to_ucol.c
@@ -26,8 +26,6 @@ at the top-level directory.
int num_drop_U;
#endif
-extern void ccopy_(int *, complex [], int *, complex [], int *);
-
#if 0
static complex *A; /* used in _compare_ only */
static int _compare_(const void *a, const void *b)
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_cdrop_row.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_cdrop_row.c
index 09b8a937d..fdd6064de 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_cdrop_row.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_cdrop_row.c
@@ -23,15 +23,6 @@ at the top-level directory.
#include <stdlib.h>
#include "slu_cdefs.h"
-extern void cswap_(int *, complex [], int *, complex [], int *);
-extern void caxpy_(int *, complex *, complex [], int *, complex [], int *);
-extern void ccopy_(int *, complex [], int *, complex [], int *);
-extern float scasum_(int *, complex *, int *);
-extern float scnrm2_(int *, complex *, int *);
-extern void scopy_(int *, float [], int *, float [], int *);
-extern double dnrm2_(int *, double [], int *);
-extern int icamax_(int *, complex [], int *);
-
static float *A; /* used in _compare_ only */
static int _compare_(const void *a, const void *b)
{
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_dcopy_to_ucol.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_dcopy_to_ucol.c
index 2bb889c39..658e7e71e 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_dcopy_to_ucol.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_dcopy_to_ucol.c
@@ -26,7 +26,6 @@ at the top-level directory.
int num_drop_U;
#endif
-extern void dcopy_(int *, double [], int *, double [], int *);
#if 0
static double *A; /* used in _compare_ only */
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_ddrop_row.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_ddrop_row.c
index f25b5085a..19afee76c 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_ddrop_row.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_ddrop_row.c
@@ -23,13 +23,6 @@ at the top-level directory.
#include <stdlib.h>
#include "slu_ddefs.h"
-extern void dswap_(int *, double [], int *, double [], int *);
-extern void daxpy_(int *, double *, double [], int *, double [], int *);
-extern void dcopy_(int *, double [], int *, double [], int *);
-extern double dasum_(int *, double *, int *);
-extern double dnrm2_(int *, double *, int *);
-extern double dnrm2_(int *, double [], int *);
-extern int idamax_(int *, double [], int *);
static double *A; /* used in _compare_ only */
static int _compare_(const void *a, const void *b)
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_scopy_to_ucol.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_scopy_to_ucol.c
index 6dc0460c1..994224c35 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_scopy_to_ucol.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_scopy_to_ucol.c
@@ -26,7 +26,7 @@ at the top-level directory.
int num_drop_U;
#endif
-extern void scopy_(int *, float [], int *, float [], int *);
+extern int scopy_(int *, float [], int *, float [], int *);
#if 0
static float *A; /* used in _compare_ only */
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_sdrop_row.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_sdrop_row.c
index 836ee5450..8d1368838 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_sdrop_row.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_sdrop_row.c
@@ -23,13 +23,6 @@ at the top-level directory.
#include <stdlib.h>
#include "slu_sdefs.h"
-extern void sswap_(int *, float [], int *, float [], int *);
-extern void saxpy_(int *, float *, float [], int *, float [], int *);
-extern void scopy_(int *, float [], int *, float [], int *);
-extern float sasum_(int *, float *, int *);
-extern float snrm2_(int *, float *, int *);
-extern double dnrm2_(int *, double [], int *);
-extern int isamax_(int *, float [], int *);
static float *A; /* used in _compare_ only */
static int _compare_(const void *a, const void *b)
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_zcopy_to_ucol.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_zcopy_to_ucol.c
index afe4a7e04..4f45bd11d 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_zcopy_to_ucol.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_zcopy_to_ucol.c
@@ -26,7 +26,6 @@ at the top-level directory.
int num_drop_U;
#endif
-extern void zcopy_(int *, doublecomplex [], int *, doublecomplex [], int *);
#if 0
static doublecomplex *A; /* used in _compare_ only */
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_zdrop_row.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_zdrop_row.c
index 2de1226ef..362e18210 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_zdrop_row.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/ilu_zdrop_row.c
@@ -23,15 +23,6 @@ at the top-level directory.
#include <stdlib.h>
#include "slu_zdefs.h"
-extern void zswap_(int *, doublecomplex [], int *, doublecomplex [], int *);
-extern void zaxpy_(int *, doublecomplex *, doublecomplex [], int *, doublecomplex [], int *);
-extern void zcopy_(int *, doublecomplex [], int *, doublecomplex [], int *);
-extern double dzasum_(int *, doublecomplex *, int *);
-extern double dznrm2_(int *, doublecomplex *, int *);
-extern double dnrm2_(int *, double [], int *);
-extern void dcopy_(int *, double [], int *, double [], int *);
-extern int izamax_(int *, doublecomplex [], int *);
-
static double *A; /* used in _compare_ only */
static int _compare_(const void *a, const void *b)
{
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/scipy_slu_config.h b/scipy/sparse/linalg/dsolve/SuperLU/SRC/scipy_slu_config.h
index 5afc93b5d..1a2c4ca36 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/scipy_slu_config.h
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/scipy_slu_config.h
@@ -3,6 +3,14 @@
#include <stdlib.h>
+#include"f2c.h"
+#define integer int
+#define logical int
+#include"clapack.h"
+#undef integer
+#undef logical
+
+
/*
* Support routines
*/
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/sgsrfs.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/sgsrfs.c
index 5faab1dfb..7380eb6cc 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/sgsrfs.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/sgsrfs.c
@@ -171,13 +171,6 @@ sgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
int isave[3];
extern int slacon2_(int *, float *, float *, int *, float *, int *, int []);
-#ifdef _CRAY
- extern int SCOPY(int *, float *, int *, float *, int *);
- extern int SSAXPY(int *, float *, float *, int *, float *, int *);
-#else
- extern int scopy_(int *, float *, int *, float *, int *);
- extern int saxpy_(int *, float *, float *, int *, float *, int *);
-#endif
Astore = A->Store;
Aval = Astore->nzval;
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/sgssvx.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/sgssvx.c
index c7aa79b3c..4f3a6310b 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/sgssvx.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/sgssvx.c
@@ -21,6 +21,8 @@ at the top-level directory.
*/
#include "slu_sdefs.h"
+extern float slangs(char *, SuperMatrix *);
+
/*! \brief
*
* <pre>
@@ -378,8 +380,6 @@ sgssvx(superlu_options_t *options, SuperMatrix *A, int *perm_c, int *perm_r,
double t0; /* temporary time */
double *utime;
- /* External functions */
- extern float slangs(char *, SuperMatrix *);
Bstore = B->Store;
Xstore = X->Store;
@@ -575,7 +575,8 @@ printf("dgssvx: Fact=%4d, Trans=%4d, equed=%c\n",
} else {
*(unsigned char *)norm = 'I';
}
- anorm = slangs(norm, AA);
+ anorm = slangs(norm, AA); /* External functions */
+ extern float slangs(char *, SuperMatrix *);
sgscon(norm, L, U, anorm, rcond, stat, &info1);
utime[RCOND] = SuperLU_timer_() - t0;
}
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_dcomplex.h b/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_dcomplex.h
index 67e83bcc7..e5757d5c4 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_dcomplex.h
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_dcomplex.h
@@ -28,7 +28,10 @@ at the top-level directory.
#ifndef DCOMPLEX_INCLUDE
#define DCOMPLEX_INCLUDE
-typedef struct { double r, i; } doublecomplex;
+#include"scipy_slu_config.h"
+
+// defined in clapack
+//typedef struct { double r, i; } doublecomplex;
/* Macro definitions */
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_scomplex.h b/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_scomplex.h
index 5c9aa7058..a10f9a52f 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_scomplex.h
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_scomplex.h
@@ -27,8 +27,9 @@ at the top-level directory.
#ifndef SCOMPLEX_INCLUDE
#define SCOMPLEX_INCLUDE
-
-typedef struct { float r, i; } complex;
+#include"scipy_slu_config.h"
+// defined in CLAPACK
+//typedef struct { float r, i; } complex;
/* Macro definitions */
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_util.h b/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_util.h
index d34e4fe5b..7df125f68 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_util.h
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/slu_util.h
@@ -398,7 +398,6 @@ extern int spcoletree (int *, int *, int *, int, int, int *);
extern int *TreePostorder (int, int *);
extern double SuperLU_timer_ ();
extern int sp_ienv (int);
-extern int xerbla_ (char *, int *);
extern void ifill (int *, int, int);
extern void snode_profile (int, int *);
extern void super_stats (int, int *);
diff --git a/scipy/sparse/linalg/dsolve/SuperLU/SRC/zgsrfs.c b/scipy/sparse/linalg/dsolve/SuperLU/SRC/zgsrfs.c
index 02b63df30..71209b3b7 100644
--- a/scipy/sparse/linalg/dsolve/SuperLU/SRC/zgsrfs.c
+++ b/scipy/sparse/linalg/dsolve/SuperLU/SRC/zgsrfs.c
@@ -171,13 +171,6 @@ zgsrfs(trans_t trans, SuperMatrix *A, SuperMatrix *L, SuperMatrix *U,
int isave[3];
extern int zlacon2_(int *, doublecomplex *, doublecomplex *, double *, int *, int []);
-#ifdef _CRAY
- extern int CCOPY(int *, doublecomplex *, int *, doublecomplex *, int *);
- extern int CSAXPY(int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *);
-#else
- extern int zcopy_(int *, doublecomplex *, int *, doublecomplex *, int *);
- extern int zaxpy_(int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *);
-#endif
Astore = A->Store;
Aval = Astore->nzval;
diff --git a/scipy/sparse/linalg/dsolve/_superlu_utils.c b/scipy/sparse/linalg/dsolve/_superlu_utils.c
index 16bb03392..13e63c0ba 100644
--- a/scipy/sparse/linalg/dsolve/_superlu_utils.c
+++ b/scipy/sparse/linalg/dsolve/_superlu_utils.c
@@ -243,12 +243,12 @@ int input_error(char *srname, int *info)
* Stubs for Harwell Subroutine Library functions that SuperLU tries to call.
*/
-void mc64id_(int *a)
+int mc64id_(int *a)
{
superlu_python_module_abort("chosen functionality not available");
}
-void mc64ad_(int *a, int *b, int *c, int d[], int e[], double f[],
+int mc64ad_(int *a, int *b, int *c, int d[], int e[], double f[],
int *g, int h[], int *i, int j[], int *k, double l[],
int m[], int n[])
{
diff --git a/scipy/sparse/linalg/eigen/arpack/ARPACK/SRC/debug.h b/scipy/sparse/linalg/eigen/arpack/ARPACK/SRC/debug.h
index 5eb0bb1b3..81a6efafb 100644
--- a/scipy/sparse/linalg/eigen/arpack/ARPACK/SRC/debug.h
+++ b/scipy/sparse/linalg/eigen/arpack/ARPACK/SRC/debug.h
@@ -1,16 +1,16 @@
-c
+
c\SCCS Information: @(#)
c FILE: debug.h SID: 2.3 DATE OF SID: 11/16/95 RELEASE: 2
c
c %---------------------------------%
c | See debug.doc for documentation |
c %---------------------------------%
- integer logfil, ndigit, mgetv0,
- & msaupd, msaup2, msaitr, mseigt, msapps, msgets, mseupd,
- & mnaupd, mnaup2, mnaitr, mneigh, mnapps, mngets, mneupd,
- & mcaupd, mcaup2, mcaitr, mceigh, mcapps, mcgets, mceupd
- common /debug/
- & logfil, ndigit, mgetv0,
- & msaupd, msaup2, msaitr, mseigt, msapps, msgets, mseupd,
- & mnaupd, mnaup2, mnaitr, mneigh, mnapps, mngets, mneupd,
- & mcaupd, mcaup2, mcaitr, mceigh, mcapps, mcgets, mceupd
+c integer logfil, ndigit, mgetv0,
+c & msaupd, msaup2, msaitr, mseigt, msapps, msgets, mseupd,
+c & mnaupd, mnaup2, mnaitr, mneigh, mnapps, mngets, mneupd,
+c & mcaupd, mcaup2, mcaitr, mceigh, mcapps, mcgets, mceupd
+c common /debug/
+c & logfil, ndigit, mgetv0,
+c & msaupd, msaup2, msaitr, mseigt, msapps, msgets, mseupd,
+c & mnaupd, mnaup2, mnaitr, mneigh, mnapps, mngets, mneupd,
+c & mcaupd, mcaup2, mcaitr, mceigh, mcapps, mcgets, mceupd
diff --git a/scipy/sparse/linalg/eigen/arpack/ARPACK/SRC/stat.h b/scipy/sparse/linalg/eigen/arpack/ARPACK/SRC/stat.h
index 66a8e9f87..81d49c3bd 100644
--- a/scipy/sparse/linalg/eigen/arpack/ARPACK/SRC/stat.h
+++ b/scipy/sparse/linalg/eigen/arpack/ARPACK/SRC/stat.h
@@ -5,17 +5,17 @@ c
c\SCCS Information: @(#)
c FILE: stat.h SID: 2.2 DATE OF SID: 11/16/95 RELEASE: 2
c
- real t0, t1, t2, t3, t4, t5
- save t0, t1, t2, t3, t4, t5
+c real t0, t1, t2, t3, t4, t5
+c save t0, t1, t2, t3, t4, t5
c
- integer nopx, nbx, nrorth, nitref, nrstrt
- real tsaupd, tsaup2, tsaitr, tseigt, tsgets, tsapps, tsconv,
- & tnaupd, tnaup2, tnaitr, tneigh, tngets, tnapps, tnconv,
- & tcaupd, tcaup2, tcaitr, tceigh, tcgets, tcapps, tcconv,
- & tmvopx, tmvbx, tgetv0, titref, trvec
- common /timing/
- & nopx, nbx, nrorth, nitref, nrstrt,
- & tsaupd, tsaup2, tsaitr, tseigt, tsgets, tsapps, tsconv,
- & tnaupd, tnaup2, tnaitr, tneigh, tngets, tnapps, tnconv,
- & tcaupd, tcaup2, tcaitr, tceigh, tcgets, tcapps, tcconv,
- & tmvopx, tmvbx, tgetv0, titref, trvec
+c integer nopx, nbx, nrorth, nitref, nrstrt
+c real tsaupd, tsaup2, tsaitr, tseigt, tsgets, tsapps, tsconv,
+c & tnaupd, tnaup2, tnaitr, tneigh, tngets, tnapps, tnconv,
+c & tcaupd, tcaup2, tcaitr, tceigh, tcgets, tcapps, tcconv,
+c & tmvopx, tmvbx, tgetv0, titref, trvec
+c common /timing/
+c & nopx, nbx, nrorth, nitref, nrstrt,
+c & tsaupd, tsaup2, tsaitr, tseigt, tsgets, tsapps, tsconv,
+c & tnaupd, tnaup2, tnaitr, tneigh, tngets, tnapps, tnconv,
+c & tcaupd, tcaup2, tcaitr, tceigh, tcgets, tcapps, tcconv,
+c & tmvopx, tmvbx, tgetv0, titref, trvec
--
2.25.1