tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/numpy
/linalg
/lapack_litemodule.c
/*This module contributed by Doug Heisterkamp | |
Modified by Jim Hugunin | |
More modifications by Jeff Whitaker | |
*/ | |
typedef struct { float r, i; } f2c_complex; | |
typedef struct { double r, i; } f2c_doublecomplex; | |
/* typedef long int (*L_fp)(); */ | |
extern int FNAME(dgelsd)(int *m, int *n, int *nrhs, | |
double a[], int *lda, double b[], int *ldb, | |
double s[], double *rcond, int *rank, | |
double work[], int *lwork, int iwork[], int *info); | |
extern int FNAME(zgelsd)(int *m, int *n, int *nrhs, | |
f2c_doublecomplex a[], int *lda, | |
f2c_doublecomplex b[], int *ldb, | |
double s[], double *rcond, int *rank, | |
f2c_doublecomplex work[], int *lwork, | |
double rwork[], int iwork[], int *info); | |
extern int FNAME(dgeqrf)(int *m, int *n, double a[], int *lda, | |
double tau[], double work[], | |
int *lwork, int *info); | |
extern int FNAME(zgeqrf)(int *m, int *n, f2c_doublecomplex a[], int *lda, | |
f2c_doublecomplex tau[], f2c_doublecomplex work[], | |
int *lwork, int *info); | |
extern int FNAME(dorgqr)(int *m, int *n, int *k, double a[], int *lda, | |
double tau[], double work[], | |
int *lwork, int *info); | |
extern int FNAME(zungqr)(int *m, int *n, int *k, f2c_doublecomplex a[], | |
int *lda, f2c_doublecomplex tau[], | |
f2c_doublecomplex work[], int *lwork, int *info); | |
extern int FNAME(xerbla)(char *srname, int *info); | |
static PyObject *LapackError; | |
static int | |
check_object(PyObject *ob, int t, char *obname, | |
char *tname, char *funname) | |
{ | |
if (!PyArray_Check(ob)) { | |
PyErr_Format(LapackError, | |
"Expected an array for parameter %s in lapack_lite.%s", | |
obname, funname); | |
return 0; | |
} | |
else if (!PyArray_IS_C_CONTIGUOUS((PyArrayObject *)ob)) { | |
PyErr_Format(LapackError, | |
"Parameter %s is not contiguous in lapack_lite.%s", | |
obname, funname); | |
return 0; | |
} | |
else if (!(PyArray_TYPE((PyArrayObject *)ob) == t)) { | |
PyErr_Format(LapackError, | |
"Parameter %s is not of type %s in lapack_lite.%s", | |
obname, tname, funname); | |
return 0; | |
} | |
else if (PyArray_ISBYTESWAPPED((PyArrayObject *)ob)) { | |
PyErr_Format(LapackError, | |
"Parameter %s has non-native byte order in lapack_lite.%s", | |
obname, funname); | |
return 0; | |
} | |
else { | |
return 1; | |
} | |
} | |
static PyObject * | |
lapack_lite_dgelsd(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
int lapack_lite_status; | |
int m; | |
int n; | |
int nrhs; | |
PyObject *a; | |
int lda; | |
PyObject *b; | |
int ldb; | |
PyObject *s; | |
double rcond; | |
int rank; | |
PyObject *work; | |
PyObject *iwork; | |
int lwork; | |
int info; | |
TRY(PyArg_ParseTuple(args,"iiiOiOiOdiOiOi", | |
&m,&n,&nrhs,&a,&lda,&b,&ldb,&s,&rcond, | |
&rank,&work,&lwork,&iwork,&info)); | |
TRY(check_object(a,NPY_DOUBLE,"a","NPY_DOUBLE","dgelsd")); | |
TRY(check_object(b,NPY_DOUBLE,"b","NPY_DOUBLE","dgelsd")); | |
TRY(check_object(s,NPY_DOUBLE,"s","NPY_DOUBLE","dgelsd")); | |
TRY(check_object(work,NPY_DOUBLE,"work","NPY_DOUBLE","dgelsd")); | |
TRY(check_object(iwork,NPY_INT,"iwork","NPY_INT","dgelsd")); | |
lapack_lite_status = | |
FNAME(dgelsd)(&m,&n,&nrhs,DDATA(a),&lda,DDATA(b),&ldb, | |
DDATA(s),&rcond,&rank,DDATA(work),&lwork, | |
IDATA(iwork),&info); | |
if (PyErr_Occurred()) { | |
return NULL; | |
} | |
return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:d,s:i,s:i,s:i}","dgelsd_", | |
lapack_lite_status,"m",m,"n",n,"nrhs",nrhs, | |
"lda",lda,"ldb",ldb,"rcond",rcond,"rank",rank, | |
"lwork",lwork,"info",info); | |
} | |
static PyObject * | |
lapack_lite_dgeqrf(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
int lapack_lite_status; | |
int m, n, lwork; | |
PyObject *a, *tau, *work; | |
int lda; | |
int info; | |
TRY(PyArg_ParseTuple(args,"iiOiOOii",&m,&n,&a,&lda,&tau,&work,&lwork,&info)); | |
/* check objects and convert to right storage order */ | |
TRY(check_object(a,NPY_DOUBLE,"a","NPY_DOUBLE","dgeqrf")); | |
TRY(check_object(tau,NPY_DOUBLE,"tau","NPY_DOUBLE","dgeqrf")); | |
TRY(check_object(work,NPY_DOUBLE,"work","NPY_DOUBLE","dgeqrf")); | |
lapack_lite_status = | |
FNAME(dgeqrf)(&m, &n, DDATA(a), &lda, DDATA(tau), | |
DDATA(work), &lwork, &info); | |
if (PyErr_Occurred()) { | |
return NULL; | |
} | |
return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i}","dgeqrf_", | |
lapack_lite_status,"m",m,"n",n,"lda",lda, | |
"lwork",lwork,"info",info); | |
} | |
static PyObject * | |
lapack_lite_dorgqr(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
int lapack_lite_status; | |
int m, n, k, lwork; | |
PyObject *a, *tau, *work; | |
int lda; | |
int info; | |
TRY(PyArg_ParseTuple(args,"iiiOiOOii", &m, &n, &k, &a, &lda, &tau, &work, &lwork, &info)); | |
TRY(check_object(a,NPY_DOUBLE,"a","NPY_DOUBLE","dorgqr")); | |
TRY(check_object(tau,NPY_DOUBLE,"tau","NPY_DOUBLE","dorgqr")); | |
TRY(check_object(work,NPY_DOUBLE,"work","NPY_DOUBLE","dorgqr")); | |
lapack_lite_status = | |
FNAME(dorgqr)(&m, &n, &k, DDATA(a), &lda, DDATA(tau), DDATA(work), | |
&lwork, &info); | |
if (PyErr_Occurred()) { | |
return NULL; | |
} | |
return Py_BuildValue("{s:i,s:i}","dorgqr_",lapack_lite_status, | |
"info",info); | |
} | |
static PyObject * | |
lapack_lite_zgelsd(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
int lapack_lite_status; | |
int m; | |
int n; | |
int nrhs; | |
PyObject *a; | |
int lda; | |
PyObject *b; | |
int ldb; | |
PyObject *s; | |
double rcond; | |
int rank; | |
PyObject *work; | |
int lwork; | |
PyObject *rwork; | |
PyObject *iwork; | |
int info; | |
TRY(PyArg_ParseTuple(args,"iiiOiOiOdiOiOOi", | |
&m,&n,&nrhs,&a,&lda,&b,&ldb,&s,&rcond, | |
&rank,&work,&lwork,&rwork,&iwork,&info)); | |
TRY(check_object(a,NPY_CDOUBLE,"a","NPY_CDOUBLE","zgelsd")); | |
TRY(check_object(b,NPY_CDOUBLE,"b","NPY_CDOUBLE","zgelsd")); | |
TRY(check_object(s,NPY_DOUBLE,"s","NPY_DOUBLE","zgelsd")); | |
TRY(check_object(work,NPY_CDOUBLE,"work","NPY_CDOUBLE","zgelsd")); | |
TRY(check_object(rwork,NPY_DOUBLE,"rwork","NPY_DOUBLE","zgelsd")); | |
TRY(check_object(iwork,NPY_INT,"iwork","NPY_INT","zgelsd")); | |
lapack_lite_status = | |
FNAME(zgelsd)(&m,&n,&nrhs,ZDATA(a),&lda,ZDATA(b),&ldb,DDATA(s),&rcond, | |
&rank,ZDATA(work),&lwork,DDATA(rwork),IDATA(iwork),&info); | |
if (PyErr_Occurred()) { | |
return NULL; | |
} | |
return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i}","zgelsd_", | |
lapack_lite_status,"m",m,"n",n,"nrhs",nrhs,"lda",lda, | |
"ldb",ldb,"rank",rank,"lwork",lwork,"info",info); | |
} | |
static PyObject * | |
lapack_lite_zgeqrf(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
int lapack_lite_status; | |
int m, n, lwork; | |
PyObject *a, *tau, *work; | |
int lda; | |
int info; | |
TRY(PyArg_ParseTuple(args,"iiOiOOii",&m,&n,&a,&lda,&tau,&work,&lwork,&info)); | |
/* check objects and convert to right storage order */ | |
TRY(check_object(a,NPY_CDOUBLE,"a","NPY_CDOUBLE","zgeqrf")); | |
TRY(check_object(tau,NPY_CDOUBLE,"tau","NPY_CDOUBLE","zgeqrf")); | |
TRY(check_object(work,NPY_CDOUBLE,"work","NPY_CDOUBLE","zgeqrf")); | |
lapack_lite_status = | |
FNAME(zgeqrf)(&m, &n, ZDATA(a), &lda, ZDATA(tau), ZDATA(work), | |
&lwork, &info); | |
if (PyErr_Occurred()) { | |
return NULL; | |
} | |
return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i}","zgeqrf_",lapack_lite_status,"m",m,"n",n,"lda",lda,"lwork",lwork,"info",info); | |
} | |
static PyObject * | |
lapack_lite_zungqr(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
int lapack_lite_status; | |
int m, n, k, lwork; | |
PyObject *a, *tau, *work; | |
int lda; | |
int info; | |
TRY(PyArg_ParseTuple(args,"iiiOiOOii", &m, &n, &k, &a, &lda, &tau, &work, &lwork, &info)); | |
TRY(check_object(a,NPY_CDOUBLE,"a","NPY_CDOUBLE","zungqr")); | |
TRY(check_object(tau,NPY_CDOUBLE,"tau","NPY_CDOUBLE","zungqr")); | |
TRY(check_object(work,NPY_CDOUBLE,"work","NPY_CDOUBLE","zungqr")); | |
lapack_lite_status = | |
FNAME(zungqr)(&m, &n, &k, ZDATA(a), &lda, ZDATA(tau), ZDATA(work), | |
&lwork, &info); | |
if (PyErr_Occurred()) { | |
return NULL; | |
} | |
return Py_BuildValue("{s:i,s:i}","zungqr_",lapack_lite_status, | |
"info",info); | |
} | |
static PyObject * | |
lapack_lite_xerbla(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
int info = -1; | |
NPY_BEGIN_THREADS_DEF; | |
NPY_BEGIN_THREADS; | |
FNAME(xerbla)("test", &info); | |
NPY_END_THREADS; | |
if (PyErr_Occurred()) { | |
return NULL; | |
} | |
Py_INCREF(Py_None); | |
return Py_None; | |
} | |
static struct PyMethodDef lapack_lite_module_methods[] = { | |
lameth(dgelsd), | |
lameth(dgeqrf), | |
lameth(dorgqr), | |
lameth(zgelsd), | |
lameth(zgeqrf), | |
lameth(zungqr), | |
lameth(xerbla), | |
{ NULL,NULL,0, NULL} | |
}; | |
static char lapack_lite_module_documentation[] = ""; | |
static struct PyModuleDef moduledef = { | |
PyModuleDef_HEAD_INIT, | |
"lapack_lite", | |
NULL, | |
-1, | |
lapack_lite_module_methods, | |
NULL, | |
NULL, | |
NULL, | |
NULL | |
}; | |
/* Initialization function for the module */ | |
PyMODINIT_FUNC PyInit_lapack_lite(void) | |
PyMODINIT_FUNC | |
initlapack_lite(void) | |
{ | |
PyObject *m,*d; | |
m = PyModule_Create(&moduledef); | |
m = Py_InitModule4("lapack_lite", lapack_lite_module_methods, | |
lapack_lite_module_documentation, | |
(PyObject*)NULL,PYTHON_API_VERSION); | |
if (m == NULL) { | |
return RETVAL; | |
} | |
import_array(); | |
d = PyModule_GetDict(m); | |
LapackError = PyErr_NewException("lapack_lite.LapackError", NULL, NULL); | |
PyDict_SetItemString(d, "LapackError", LapackError); | |
return RETVAL; | |
} | |