tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/numpy
/fft
/fftpack_litemodule.c
static PyObject *ErrorObject; | |
/* ----------------------------------------------------- */ | |
static char fftpack_cfftf__doc__[] = ""; | |
PyObject * | |
fftpack_cfftf(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
PyObject *op1, *op2; | |
PyArrayObject *data; | |
PyArray_Descr *descr; | |
double *wsave, *dptr; | |
npy_intp nsave; | |
int npts, nrepeats, i; | |
if(!PyArg_ParseTuple(args, "OO", &op1, &op2)) { | |
return NULL; | |
} | |
data = (PyArrayObject *)PyArray_CopyFromObject(op1, | |
NPY_CDOUBLE, 1, 0); | |
if (data == NULL) { | |
return NULL; | |
} | |
descr = PyArray_DescrFromType(NPY_DOUBLE); | |
if (PyArray_AsCArray(&op2, (void *)&wsave, &nsave, 1, descr) == -1) { | |
goto fail; | |
} | |
if (data == NULL) { | |
goto fail; | |
} | |
npts = PyArray_DIM(data, PyArray_NDIM(data) - 1); | |
if (nsave != npts*4 + 15) { | |
PyErr_SetString(ErrorObject, "invalid work array for fft size"); | |
goto fail; | |
} | |
nrepeats = PyArray_SIZE(data)/npts; | |
dptr = (double *)PyArray_DATA(data); | |
Py_BEGIN_ALLOW_THREADS; | |
NPY_SIGINT_ON; | |
for (i = 0; i < nrepeats; i++) { | |
cfftf(npts, dptr, wsave); | |
dptr += npts*2; | |
} | |
NPY_SIGINT_OFF; | |
Py_END_ALLOW_THREADS; | |
PyArray_Free(op2, (char *)wsave); | |
return (PyObject *)data; | |
fail: | |
PyArray_Free(op2, (char *)wsave); | |
Py_DECREF(data); | |
return NULL; | |
} | |
static char fftpack_cfftb__doc__[] = ""; | |
PyObject * | |
fftpack_cfftb(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
PyObject *op1, *op2; | |
PyArrayObject *data; | |
PyArray_Descr *descr; | |
double *wsave, *dptr; | |
npy_intp nsave; | |
int npts, nrepeats, i; | |
if(!PyArg_ParseTuple(args, "OO", &op1, &op2)) { | |
return NULL; | |
} | |
data = (PyArrayObject *)PyArray_CopyFromObject(op1, | |
NPY_CDOUBLE, 1, 0); | |
if (data == NULL) { | |
return NULL; | |
} | |
descr = PyArray_DescrFromType(NPY_DOUBLE); | |
if (PyArray_AsCArray(&op2, (void *)&wsave, &nsave, 1, descr) == -1) { | |
goto fail; | |
} | |
if (data == NULL) { | |
goto fail; | |
} | |
npts = PyArray_DIM(data, PyArray_NDIM(data) - 1); | |
if (nsave != npts*4 + 15) { | |
PyErr_SetString(ErrorObject, "invalid work array for fft size"); | |
goto fail; | |
} | |
nrepeats = PyArray_SIZE(data)/npts; | |
dptr = (double *)PyArray_DATA(data); | |
Py_BEGIN_ALLOW_THREADS; | |
NPY_SIGINT_ON; | |
for (i = 0; i < nrepeats; i++) { | |
cfftb(npts, dptr, wsave); | |
dptr += npts*2; | |
} | |
NPY_SIGINT_OFF; | |
Py_END_ALLOW_THREADS; | |
PyArray_Free(op2, (char *)wsave); | |
return (PyObject *)data; | |
fail: | |
PyArray_Free(op2, (char *)wsave); | |
Py_DECREF(data); | |
return NULL; | |
} | |
static char fftpack_cffti__doc__[] =""; | |
static PyObject * | |
fftpack_cffti(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
PyArrayObject *op; | |
npy_intp dim; | |
long n; | |
if (!PyArg_ParseTuple(args, "l", &n)) { | |
return NULL; | |
} | |
/*Magic size needed by cffti*/ | |
dim = 4*n + 15; | |
/*Create a 1 dimensional array of dimensions of type double*/ | |
op = (PyArrayObject *)PyArray_SimpleNew(1, &dim, NPY_DOUBLE); | |
if (op == NULL) { | |
return NULL; | |
} | |
Py_BEGIN_ALLOW_THREADS; | |
NPY_SIGINT_ON; | |
cffti(n, (double *)PyArray_DATA((PyArrayObject*)op)); | |
NPY_SIGINT_OFF; | |
Py_END_ALLOW_THREADS; | |
return (PyObject *)op; | |
} | |
static char fftpack_rfftf__doc__[] =""; | |
PyObject * | |
fftpack_rfftf(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
PyObject *op1, *op2; | |
PyArrayObject *data, *ret; | |
PyArray_Descr *descr; | |
double *wsave, *dptr, *rptr; | |
npy_intp nsave; | |
int npts, nrepeats, i, rstep; | |
if(!PyArg_ParseTuple(args, "OO", &op1, &op2)) { | |
return NULL; | |
} | |
data = (PyArrayObject *)PyArray_ContiguousFromObject(op1, | |
NPY_DOUBLE, 1, 0); | |
if (data == NULL) { | |
return NULL; | |
} | |
/* FIXME, direct access changing contents of data->dimensions */ | |
npts = PyArray_DIM(data, PyArray_NDIM(data) - 1); | |
PyArray_DIMS(data)[PyArray_NDIM(data) - 1] = npts/2 + 1; | |
ret = (PyArrayObject *)PyArray_Zeros(PyArray_NDIM(data), | |
PyArray_DIMS(data), PyArray_DescrFromType(NPY_CDOUBLE), 0); | |
PyArray_DIMS(data)[PyArray_NDIM(data) - 1] = npts; | |
rstep = PyArray_DIM(ret, PyArray_NDIM(ret) - 1)*2; | |
descr = PyArray_DescrFromType(NPY_DOUBLE); | |
if (PyArray_AsCArray(&op2, (void *)&wsave, &nsave, 1, descr) == -1) { | |
goto fail; | |
} | |
if (data == NULL || ret == NULL) { | |
goto fail; | |
} | |
if (nsave != npts*2+15) { | |
PyErr_SetString(ErrorObject, "invalid work array for fft size"); | |
goto fail; | |
} | |
nrepeats = PyArray_SIZE(data)/npts; | |
rptr = (double *)PyArray_DATA(ret); | |
dptr = (double *)PyArray_DATA(data); | |
Py_BEGIN_ALLOW_THREADS; | |
NPY_SIGINT_ON; | |
for (i = 0; i < nrepeats; i++) { | |
memcpy((char *)(rptr+1), dptr, npts*sizeof(double)); | |
rfftf(npts, rptr+1, wsave); | |
rptr[0] = rptr[1]; | |
rptr[1] = 0.0; | |
rptr += rstep; | |
dptr += npts; | |
} | |
NPY_SIGINT_OFF; | |
Py_END_ALLOW_THREADS; | |
PyArray_Free(op2, (char *)wsave); | |
Py_DECREF(data); | |
return (PyObject *)ret; | |
fail: | |
PyArray_Free(op2, (char *)wsave); | |
Py_XDECREF(data); | |
Py_XDECREF(ret); | |
return NULL; | |
} | |
static char fftpack_rfftb__doc__[] =""; | |
PyObject * | |
fftpack_rfftb(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
PyObject *op1, *op2; | |
PyArrayObject *data, *ret; | |
PyArray_Descr *descr; | |
double *wsave, *dptr, *rptr; | |
npy_intp nsave; | |
int npts, nrepeats, i; | |
if(!PyArg_ParseTuple(args, "OO", &op1, &op2)) { | |
return NULL; | |
} | |
data = (PyArrayObject *)PyArray_ContiguousFromObject(op1, | |
NPY_CDOUBLE, 1, 0); | |
if (data == NULL) { | |
return NULL; | |
} | |
npts = PyArray_DIM(data, PyArray_NDIM(data) - 1); | |
ret = (PyArrayObject *)PyArray_Zeros(PyArray_NDIM(data), PyArray_DIMS(data), | |
PyArray_DescrFromType(NPY_DOUBLE), 0); | |
descr = PyArray_DescrFromType(NPY_DOUBLE); | |
if (PyArray_AsCArray(&op2, (void *)&wsave, &nsave, 1, descr) == -1) { | |
goto fail; | |
} | |
if (data == NULL || ret == NULL) { | |
goto fail; | |
} | |
if (nsave != npts*2 + 15) { | |
PyErr_SetString(ErrorObject, "invalid work array for fft size"); | |
goto fail; | |
} | |
nrepeats = PyArray_SIZE(ret)/npts; | |
rptr = (double *)PyArray_DATA(ret); | |
dptr = (double *)PyArray_DATA(data); | |
Py_BEGIN_ALLOW_THREADS; | |
NPY_SIGINT_ON; | |
for (i = 0; i < nrepeats; i++) { | |
memcpy((char *)(rptr + 1), (dptr + 2), (npts - 1)*sizeof(double)); | |
rptr[0] = dptr[0]; | |
rfftb(npts, rptr, wsave); | |
rptr += npts; | |
dptr += npts*2; | |
} | |
NPY_SIGINT_OFF; | |
Py_END_ALLOW_THREADS; | |
PyArray_Free(op2, (char *)wsave); | |
Py_DECREF(data); | |
return (PyObject *)ret; | |
fail: | |
PyArray_Free(op2, (char *)wsave); | |
Py_XDECREF(data); | |
Py_XDECREF(ret); | |
return NULL; | |
} | |
static char fftpack_rffti__doc__[] =""; | |
static PyObject * | |
fftpack_rffti(PyObject *NPY_UNUSED(self), PyObject *args) | |
{ | |
PyArrayObject *op; | |
npy_intp dim; | |
long n; | |
if (!PyArg_ParseTuple(args, "l", &n)) { | |
return NULL; | |
} | |
/*Magic size needed by rffti*/ | |
dim = 2*n + 15; | |
/*Create a 1 dimensional array of dimensions of type double*/ | |
op = (PyArrayObject *)PyArray_SimpleNew(1, &dim, NPY_DOUBLE); | |
if (op == NULL) { | |
return NULL; | |
} | |
Py_BEGIN_ALLOW_THREADS; | |
NPY_SIGINT_ON; | |
rffti(n, (double *)PyArray_DATA((PyArrayObject*)op)); | |
NPY_SIGINT_OFF; | |
Py_END_ALLOW_THREADS; | |
return (PyObject *)op; | |
} | |
/* List of methods defined in the module */ | |
static struct PyMethodDef fftpack_methods[] = { | |
{"cfftf", fftpack_cfftf, 1, fftpack_cfftf__doc__}, | |
{"cfftb", fftpack_cfftb, 1, fftpack_cfftb__doc__}, | |
{"cffti", fftpack_cffti, 1, fftpack_cffti__doc__}, | |
{"rfftf", fftpack_rfftf, 1, fftpack_rfftf__doc__}, | |
{"rfftb", fftpack_rfftb, 1, fftpack_rfftb__doc__}, | |
{"rffti", fftpack_rffti, 1, fftpack_rffti__doc__}, | |
{NULL, NULL, 0, NULL} /* sentinel */ | |
}; | |
/* Initialization function for the module (*must* be called initfftpack) */ | |
static char fftpack_module_documentation[] = "" ; | |
static struct PyModuleDef moduledef = { | |
PyModuleDef_HEAD_INIT, | |
"fftpack_lite", | |
NULL, | |
-1, | |
fftpack_methods, | |
NULL, | |
NULL, | |
NULL, | |
NULL | |
}; | |
/* Initialization function for the module */ | |
PyMODINIT_FUNC PyInit_fftpack_lite(void) | |
PyMODINIT_FUNC | |
initfftpack_lite(void) | |
{ | |
PyObject *m,*d; | |
m = PyModule_Create(&moduledef); | |
m = Py_InitModule4("fftpack_lite", fftpack_methods, | |
fftpack_module_documentation, | |
(PyObject*)NULL,PYTHON_API_VERSION); | |
/* Import the array object */ | |
import_array(); | |
/* Add some symbolic constants to the module */ | |
d = PyModule_GetDict(m); | |
ErrorObject = PyErr_NewException("fftpack.error", NULL, NULL); | |
PyDict_SetItemString(d, "error", ErrorObject); | |
/* XXXX Add constants here */ | |
return RETVAL; | |
} | |