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; | |
| } | |