U C^ @sNdZddlmZmZmZddlZddlZddlmZej Z ej j Z ggggggggggd aiaddiZd d iZd d iZd diZddiZddiZddiZddiZddddZdddZded<d ed!<d"ed#<d$ed%<d%gtd&<d'ed&<d(ed&<d)ed*<d+ed,<d-ed.<d/ed0<d1ed2<d3ed4<d5ed6<d7ed8<d9ed:<d;ed<<d=ed><d?ed@<dAedB<dCedD<dEedF<dGedH<dIedJ<dKedL<dMedN<dOedP<dQgtdR<dSedR<d*gtdQ<dTedQ<dUedV<dWedX<d2gtdY<dZedY<d[ed\<d4gtd]<d^ed]<d8gtd_<d`ed_<daedb<dcedd<d:gtde<dfede<d>gtdg<dhedg<dgtd<ded<dgtd<ded<dBdNdPgtd<ded<ddʄZddd̄Zdd΄ZdS)a C declarations, CPP macros, and C functions for f2py2e. Only required declarations/macros/functions will be used. Copyright 1999,2000 Pearu Peterson all rights reserved, Pearu Peterson Permission to use, modify, and distribute this software is given under the terms of the NumPy License. NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. $Date: 2005/05/06 11:42:34 $ Pearu Peterson )divisionabsolute_importprint_functionN) __version__) includes0includestypedefstypedefs_generated userincludes cppmacroscfuncs callbacks f90modhooks commonhooksrz/*need_includes0*/rz/*need_includes*/r z/*need_userincludes*/r z/*need_typedefs*/r z/*need_typedefs_generated*/r z/*need_cppmacros*/r z/*need_cfuncs*/rz/*need_callbacks*/z/*need_f90modhooks*/z/*initf90modhooksstatic*/z/*initf90modhooksdynamic*/)rZinitf90modhooksstaticZinitf90modhooksdynamicz/*need_commonhooks*/z/*need_initcommonhooks*/)rZinitcommonhooksz#include zmath.hz#include zstring.hz#include zsetjmp.hz#include "Python.h"zPython.hz arrayobject.hzC#define PY_ARRAY_UNIQUE_SYMBOL PyArray_API #include "arrayobject.h"z#include "fortranobject.h"z#include zstdarg.hz$typedef unsigned char unsigned_char;Z unsigned_charz&typedef unsigned short unsigned_short;Zunsigned_shortz$typedef unsigned long unsigned_long;Z unsigned_longz typedef signed char signed_char;Z signed_charz#ifdef _WIN32 typedef __int64 long_long; #else typedef long long long_long; typedef unsigned long long unsigned_long_long; #endif Z long_longzf#ifdef _WIN32 typedef __uint64 long_long; #else typedef unsigned long long unsigned_long_long; #endif Zunsigned_long_longz=#ifndef _LONG_DOUBLE typedef long double long_double; #endif Z long_doublez6typedef struct {long double r,i;} complex_long_double;Zcomplex_long_doublez*typedef struct {float r,i;} complex_float;Z complex_floatz,typedef struct {double r,i;} complex_double;Zcomplex_doubleztypedef char * string;stringa#ifdef DEBUGCFUNCS #define CFUNCSMESS(mess) fprintf(stderr,"debug-capi:"mess); #define CFUNCSMESSPY(mess,obj) CFUNCSMESS(mess) \ PyObject_Print((PyObject *)obj,stderr,Py_PRINT_RAW);\ fprintf(stderr,"\n"); #else #define CFUNCSMESS(mess) #define CFUNCSMESSPY(mess,obj) #endif Z CFUNCSMESSao#if defined(PREPEND_FORTRAN) #if defined(NO_APPEND_FORTRAN) #if defined(UPPERCASE_FORTRAN) #define F_FUNC(f,F) _##F #else #define F_FUNC(f,F) _##f #endif #else #if defined(UPPERCASE_FORTRAN) #define F_FUNC(f,F) _##F##_ #else #define F_FUNC(f,F) _##f##_ #endif #endif #else #if defined(NO_APPEND_FORTRAN) #if defined(UPPERCASE_FORTRAN) #define F_FUNC(f,F) F #else #define F_FUNC(f,F) f #endif #else #if defined(UPPERCASE_FORTRAN) #define F_FUNC(f,F) F##_ #else #define F_FUNC(f,F) f##_ #endif #endif #endif #if defined(UNDERSCORE_G77) #define F_FUNC_US(f,F) F_FUNC(f##_,F##_) #else #define F_FUNC_US(f,F) F_FUNC(f,F) #endif ZF_FUNCa #if defined(PREPEND_FORTRAN) #if defined(NO_APPEND_FORTRAN) #if defined(UPPERCASE_FORTRAN) #define F_WRAPPEDFUNC(f,F) _F2PYWRAP##F #else #define F_WRAPPEDFUNC(f,F) _f2pywrap##f #endif #else #if defined(UPPERCASE_FORTRAN) #define F_WRAPPEDFUNC(f,F) _F2PYWRAP##F##_ #else #define F_WRAPPEDFUNC(f,F) _f2pywrap##f##_ #endif #endif #else #if defined(NO_APPEND_FORTRAN) #if defined(UPPERCASE_FORTRAN) #define F_WRAPPEDFUNC(f,F) F2PYWRAP##F #else #define F_WRAPPEDFUNC(f,F) f2pywrap##f #endif #else #if defined(UPPERCASE_FORTRAN) #define F_WRAPPEDFUNC(f,F) F2PYWRAP##F##_ #else #define F_WRAPPEDFUNC(f,F) f2pywrap##f##_ #endif #endif #endif #if defined(UNDERSCORE_G77) #define F_WRAPPEDFUNC_US(f,F) F_WRAPPEDFUNC(f##_,F##_) #else #define F_WRAPPEDFUNC_US(f,F) F_WRAPPEDFUNC(f,F) #endif Z F_WRAPPEDFUNCa0#if defined(F90MOD2CCONV1) /*E.g. Compaq Fortran */ #if defined(NO_APPEND_FORTRAN) #define F_MODFUNCNAME(m,f) $ ## m ## $ ## f #else #define F_MODFUNCNAME(m,f) $ ## m ## $ ## f ## _ #endif #endif #if defined(F90MOD2CCONV2) /*E.g. IBM XL Fortran, not tested though */ #if defined(NO_APPEND_FORTRAN) #define F_MODFUNCNAME(m,f) __ ## m ## _MOD_ ## f #else #define F_MODFUNCNAME(m,f) __ ## m ## _MOD_ ## f ## _ #endif #endif #if defined(F90MOD2CCONV3) /*E.g. MIPSPro Compilers */ #if defined(NO_APPEND_FORTRAN) #define F_MODFUNCNAME(m,f) f ## .in. ## m #else #define F_MODFUNCNAME(m,f) f ## .in. ## m ## _ #endif #endif /* #if defined(UPPERCASE_FORTRAN) #define F_MODFUNC(m,M,f,F) F_MODFUNCNAME(M,F) #else #define F_MODFUNC(m,M,f,F) F_MODFUNCNAME(m,f) #endif */ #define F_MODFUNC(m,f) (*(f2pymodstruct##m##.##f)) Z F_MODFUNCz#define SWAP(a,b) (size_t)(a) = ((size_t)(a) ^ (size_t)(b));\ (size_t)(b) = ((size_t)(a) ^ (size_t)(b));\ (size_t)(a) = ((size_t)(a) ^ (size_t)(b)) Z SWAPUNSAFEzF#define SWAP(a,b,t) {\ t *c;\ c = a;\ a = b;\ b = c;} ZSWAPz#define PRINTPYOBJERR(obj)\ fprintf(stderr,"#modulename#.error is related to ");\ PyObject_Print((PyObject *)obj,stderr,Py_PRINT_RAW);\ fprintf(stderr,"\n"); Z PRINTPYOBJERRz#ifndef max #define max(a,b) ((a > b) ? (a) : (b)) #endif #ifndef min #define min(a,b) ((a < b) ? (a) : (b)) #endif #ifndef MAX #define MAX(a,b) ((a > b) ? (a) : (b)) #endif #ifndef MIN #define MIN(a,b) ((a < b) ? (a) : (b)) #endif ZMINMAXZ f2py_sizezlen..aQ#define rank(var) var ## _Rank #define shape(var,dim) var ## _Dims[dim] #define old_rank(var) (PyArray_NDIM((PyArrayObject *)(capi_ ## var ## _tmp))) #define old_shape(var,dim) PyArray_DIM(((PyArrayObject *)(capi_ ## var ## _tmp)),dim) #define fshape(var,dim) shape(var,rank(var)-dim-1) #define len(var) shape(var,0) #define flen(var) fshape(var,0) #define old_size(var) PyArray_SIZE((PyArrayObject *)(capi_ ## var ## _tmp)) /* #define index(i) capi_i ## i */ #define slen(var) capi_ ## var ## _len #define size(var, ...) f2py_size((PyArrayObject *)(capi_ ## var ## _tmp), ## __VA_ARGS__, -1) astatic int f2py_size(PyArrayObject* var, ...) { npy_int sz = 0; npy_int dim; npy_int rank; va_list argp; va_start(argp, var); dim = va_arg(argp, npy_int); if (dim==-1) { sz = PyArray_SIZE(var); } else { rank = PyArray_NDIM(var); if (dim>=1 && dim<=rank) sz = PyArray_DIM(var, dim-1); else fprintf(stderr, "f2py_size: 2nd argument value=%d fails to satisfy 1<=value<=%d. Result will be 0.\n", dim, rank); } va_end(argp); return sz; } z/#define pyobj_from_char1(v) (PyInt_FromLong(v))Zpyobj_from_char1z0#define pyobj_from_short1(v) (PyInt_FromLong(v))Zpyobj_from_short1Zpyobj_from_int1z.#define pyobj_from_int1(v) (PyInt_FromLong(v))z0#define pyobj_from_long1(v) (PyLong_FromLong(v))Zpyobj_from_long1Zpyobj_from_long_long1z#ifdef HAVE_LONG_LONG #define pyobj_from_long_long1(v) (PyLong_FromLongLong(v)) #else #warning HAVE_LONG_LONG is not available. Redefining pyobj_from_long_long. #define pyobj_from_long_long1(v) (PyLong_FromLong(v)) #endif Zpyobj_from_long_double1z:#define pyobj_from_long_double1(v) (PyFloat_FromDouble(v))z5#define pyobj_from_double1(v) (PyFloat_FromDouble(v))Zpyobj_from_double1z4#define pyobj_from_float1(v) (PyFloat_FromDouble(v))Zpyobj_from_float1Zpyobj_from_complex_long_double1zK#define pyobj_from_complex_long_double1(v) (PyComplex_FromDoubles(v.r,v.i))Zpyobj_from_complex_double1zF#define pyobj_from_complex_double1(v) (PyComplex_FromDoubles(v.r,v.i))Zpyobj_from_complex_float1zE#define pyobj_from_complex_float1(v) (PyComplex_FromDoubles(v.r,v.i))Zpyobj_from_string1z>#define pyobj_from_string1(v) (PyString_FromString((char *)v))Zpyobj_from_string1sizezS#define pyobj_from_string1size(v,len) (PyUString_FromStringAndSize((char *)v, len))ZTRYPYARRAYTEMPLATEa/* New SciPy */ #define TRYPYARRAYTEMPLATECHAR case NPY_STRING: *(char *)(PyArray_DATA(arr))=*v; break; #define TRYPYARRAYTEMPLATELONG case NPY_LONG: *(long *)(PyArray_DATA(arr))=*v; break; #define TRYPYARRAYTEMPLATEOBJECT case NPY_OBJECT: PyArray_SETITEM(arr,PyArray_DATA(arr),pyobj_from_ ## ctype ## 1(*v)); break; #define TRYPYARRAYTEMPLATE(ctype,typecode) \ PyArrayObject *arr = NULL;\ if (!obj) return -2;\ if (!PyArray_Check(obj)) return -1;\ if (!(arr=(PyArrayObject *)obj)) {fprintf(stderr,"TRYPYARRAYTEMPLATE:");PRINTPYOBJERR(obj);return 0;}\ if (PyArray_DESCR(arr)->type==typecode) {*(ctype *)(PyArray_DATA(arr))=*v; return 1;}\ switch (PyArray_TYPE(arr)) {\ case NPY_DOUBLE: *(double *)(PyArray_DATA(arr))=*v; break;\ case NPY_INT: *(int *)(PyArray_DATA(arr))=*v; break;\ case NPY_LONG: *(long *)(PyArray_DATA(arr))=*v; break;\ case NPY_FLOAT: *(float *)(PyArray_DATA(arr))=*v; break;\ case NPY_CDOUBLE: *(double *)(PyArray_DATA(arr))=*v; break;\ case NPY_CFLOAT: *(float *)(PyArray_DATA(arr))=*v; break;\ case NPY_BOOL: *(npy_bool *)(PyArray_DATA(arr))=(*v!=0); break;\ case NPY_UBYTE: *(unsigned char *)(PyArray_DATA(arr))=*v; break;\ case NPY_BYTE: *(signed char *)(PyArray_DATA(arr))=*v; break;\ case NPY_SHORT: *(short *)(PyArray_DATA(arr))=*v; break;\ case NPY_USHORT: *(npy_ushort *)(PyArray_DATA(arr))=*v; break;\ case NPY_UINT: *(npy_uint *)(PyArray_DATA(arr))=*v; break;\ case NPY_ULONG: *(npy_ulong *)(PyArray_DATA(arr))=*v; break;\ case NPY_LONGLONG: *(npy_longlong *)(PyArray_DATA(arr))=*v; break;\ case NPY_ULONGLONG: *(npy_ulonglong *)(PyArray_DATA(arr))=*v; break;\ case NPY_LONGDOUBLE: *(npy_longdouble *)(PyArray_DATA(arr))=*v; break;\ case NPY_CLONGDOUBLE: *(npy_longdouble *)(PyArray_DATA(arr))=*v; break;\ case NPY_OBJECT: PyArray_SETITEM(arr, PyArray_DATA(arr), pyobj_from_ ## ctype ## 1(*v)); break;\ default: return -2;\ };\ return 1 ZTRYCOMPLEXPYARRAYTEMPLATEa #define TRYCOMPLEXPYARRAYTEMPLATEOBJECT case NPY_OBJECT: PyArray_SETITEM(arr, PyArray_DATA(arr), pyobj_from_complex_ ## ctype ## 1((*v))); break; #define TRYCOMPLEXPYARRAYTEMPLATE(ctype,typecode)\ PyArrayObject *arr = NULL;\ if (!obj) return -2;\ if (!PyArray_Check(obj)) return -1;\ if (!(arr=(PyArrayObject *)obj)) {fprintf(stderr,"TRYCOMPLEXPYARRAYTEMPLATE:");PRINTPYOBJERR(obj);return 0;}\ if (PyArray_DESCR(arr)->type==typecode) {\ *(ctype *)(PyArray_DATA(arr))=(*v).r;\ *(ctype *)(PyArray_DATA(arr)+sizeof(ctype))=(*v).i;\ return 1;\ }\ switch (PyArray_TYPE(arr)) {\ case NPY_CDOUBLE: *(double *)(PyArray_DATA(arr))=(*v).r;*(double *)(PyArray_DATA(arr)+sizeof(double))=(*v).i;break;\ case NPY_CFLOAT: *(float *)(PyArray_DATA(arr))=(*v).r;*(float *)(PyArray_DATA(arr)+sizeof(float))=(*v).i;break;\ case NPY_DOUBLE: *(double *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_LONG: *(long *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_FLOAT: *(float *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_INT: *(int *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_SHORT: *(short *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_UBYTE: *(unsigned char *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_BYTE: *(signed char *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_BOOL: *(npy_bool *)(PyArray_DATA(arr))=((*v).r!=0 && (*v).i!=0); break;\ case NPY_USHORT: *(npy_ushort *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_UINT: *(npy_uint *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_ULONG: *(npy_ulong *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_LONGLONG: *(npy_longlong *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_ULONGLONG: *(npy_ulonglong *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_LONGDOUBLE: *(npy_longdouble *)(PyArray_DATA(arr))=(*v).r; break;\ case NPY_CLONGDOUBLE: *(npy_longdouble *)(PyArray_DATA(arr))=(*v).r;*(npy_longdouble *)(PyArray_DATA(arr)+sizeof(npy_longdouble))=(*v).i;break;\ case NPY_OBJECT: PyArray_SETITEM(arr, PyArray_DATA(arr), pyobj_from_complex_ ## ctype ## 1((*v))); break;\ default: return -2;\ };\ return -1; Z STRINGCOPYNZGETSTRFROMPYTUPLEa#define GETSTRFROMPYTUPLE(tuple,index,str,len) {\ PyObject *rv_cb_str = PyTuple_GetItem((tuple),(index));\ if (rv_cb_str == NULL)\ goto capi_fail;\ if (PyString_Check(rv_cb_str)) {\ str[len-1]='\0';\ STRINGCOPYN((str),PyString_AS_STRING((PyStringObject*)rv_cb_str),(len));\ } else {\ PRINTPYOBJERR(rv_cb_str);\ PyErr_SetString(#modulename#_error,"string object expected");\ goto capi_fail;\ }\ } z#define GETSCALARFROMPYTUPLE(tuple,index,var,ctype,mess) {\ if ((capi_tmp = PyTuple_GetItem((tuple),(index)))==NULL) goto capi_fail;\ if (!(ctype ## _from_pyobj((var),capi_tmp,mess)))\ goto capi_fail;\ } ZGETSCALARFROMPYTUPLEal\ #define FAILNULL(p) do { \ if ((p) == NULL) { \ PyErr_SetString(PyExc_MemoryError, "NULL pointer found"); \ goto capi_fail; \ } \ } while (0) ZFAILNULLZMEMCOPYzh#define MEMCOPY(to,from,n)\ do { FAILNULL(to); FAILNULL(from); (void)memcpy(to,from,n); } while (0) z#define STRINGMALLOC(str,len)\ if ((str = (string)malloc(sizeof(char)*(len+1))) == NULL) {\ PyErr_SetString(PyExc_MemoryError, "out of memory");\ goto capi_fail;\ } else {\ (str)[len] = '\0';\ } Z STRINGMALLOCzF#define STRINGFREE(str) do {if (!(str == NULL)) free(str);} while (0) Z STRINGFREEa&#define STRINGCOPYN(to,from,buf_size) \ do { \ int _m = (buf_size); \ char *_to = (to); \ char *_from = (from); \ FAILNULL(_to); FAILNULL(_from); \ (void)strncpy(_to, _from, sizeof(char)*_m); \ _to[_m-1] = '\0'; \ /* Padding with spaces instead of nulls */ \ for (_m -= 2; _m >= 0 && _to[_m] == '\0'; _m--) { \ _to[_m] = ' '; \ } \ } while (0) Z STRINGCOPYzg#define STRINGCOPY(to,from)\ do { FAILNULL(to); FAILNULL(from); (void)strcpy(to,from); } while (0) z#define CHECKGENERIC(check,tcheck,name) \ if (!(check)) {\ PyErr_SetString(#modulename#_error,"("tcheck") failed for "name);\ /*goto capi_fail;*/\ } else Z CHECKGENERICz#define CHECKARRAY(check,tcheck,name) \ if (!(check)) {\ PyErr_SetString(#modulename#_error,"("tcheck") failed for "name);\ /*goto capi_fail;*/\ } else Z CHECKARRAYa#define CHECKSTRING(check,tcheck,name,show,var)\ if (!(check)) {\ char errstring[256];\ sprintf(errstring, "%s: "show, "("tcheck") failed for "name, slen(var), var);\ PyErr_SetString(#modulename#_error, errstring);\ /*goto capi_fail;*/\ } else Z CHECKSTRINGa#define CHECKSCALAR(check,tcheck,name,show,var)\ if (!(check)) {\ char errstring[256];\ sprintf(errstring, "%s: "show, "("tcheck") failed for "name, var);\ PyErr_SetString(#modulename#_error,errstring);\ /*goto capi_fail;*/\ } else Z CHECKSCALARz>#define ARRSIZE(dims,rank) (_PyArray_multiply_list(dims,rank))ZARRSIZEzq#ifdef OLDPYNUM #error You need to install NumPy version 13 or higher. See https://scipy.org/install.html #endif ZOLDPYNUMzstatic int calcarrindex(int *i,PyArrayObject *arr) { int k,ii = i[0]; for (k=1; k < PyArray_NDIM(arr); k++) ii += (ii*(PyArray_DIM(arr,k) - 1)+i[k]); /* assuming contiguous arr */ return ii; }Z calcarrindexastatic int calcarrindextr(int *i,PyArrayObject *arr) { int k,ii = i[PyArray_NDIM(arr)-1]; for (k=1; k < PyArray_NDIM(arr); k++) ii += (ii*(PyArray_DIM(arr,PyArray_NDIM(arr)-k-1) - 1)+i[PyArray_NDIM(arr)-k-1]); /* assuming contiguous arr */ return ii; }ZcalcarrindextraTstatic struct { int nd;npy_intp *d;int *i,*i_tr,tr; } forcombcache; static int initforcomb(npy_intp *dims,int nd,int tr) { int k; if (dims==NULL) return 0; if (nd<0) return 0; forcombcache.nd = nd; forcombcache.d = dims; forcombcache.tr = tr; if ((forcombcache.i = (int *)malloc(sizeof(int)*nd))==NULL) return 0; if ((forcombcache.i_tr = (int *)malloc(sizeof(int)*nd))==NULL) return 0; for (k=1;k= 0x03000000 else if (PyUnicode_Check(obj)) { tmp = PyUnicode_AsASCIIString(obj); } else { PyObject *tmp2; tmp2 = PyObject_Str(obj); if (tmp2) { tmp = PyUnicode_AsASCIIString(tmp2); Py_DECREF(tmp2); } else { tmp = NULL; } } #else else { tmp = PyObject_Str(obj); } #endif if (tmp == NULL) goto capi_fail; if (*len == -1) *len = PyString_GET_SIZE(tmp); STRINGMALLOC(*str,*len); STRINGCOPYN(*str,PyString_AS_STRING(tmp),*len+1); Py_DECREF(tmp); return 1; capi_fail: Py_XDECREF(tmp); { PyObject* err = PyErr_Occurred(); if (err==NULL) err = #modulename#_error; PyErr_SetString(err,errmess); } return 0; } Zint_from_pyobjZchar_from_pyobjzstatic int char_from_pyobj(char* v,PyObject *obj,const char *errmess) { int i=0; if (int_from_pyobj(&i,obj,errmess)) { *v = (char)i; return 1; } return 0; } Zsigned_char_from_pyobjzstatic int signed_char_from_pyobj(signed_char* v,PyObject *obj,const char *errmess) { int i=0; if (int_from_pyobj(&i,obj,errmess)) { *v = (signed_char)i; return 1; } return 0; } Zshort_from_pyobjzstatic int short_from_pyobj(short* v,PyObject *obj,const char *errmess) { int i=0; if (int_from_pyobj(&i,obj,errmess)) { *v = (short)i; return 1; } return 0; } aHstatic int int_from_pyobj(int* v,PyObject *obj,const char *errmess) { PyObject* tmp = NULL; if (PyInt_Check(obj)) { *v = (int)PyInt_AS_LONG(obj); return 1; } tmp = PyNumber_Int(obj); if (tmp) { *v = PyInt_AS_LONG(tmp); Py_DECREF(tmp); return 1; } if (PyComplex_Check(obj)) tmp = PyObject_GetAttrString(obj,"real"); else if (PyString_Check(obj) || PyUnicode_Check(obj)) /*pass*/; else if (PySequence_Check(obj)) tmp = PySequence_GetItem(obj,0); if (tmp) { PyErr_Clear(); if (int_from_pyobj(v,tmp,errmess)) {Py_DECREF(tmp); return 1;} Py_DECREF(tmp); } { PyObject* err = PyErr_Occurred(); if (err==NULL) err = #modulename#_error; PyErr_SetString(err,errmess); } return 0; } aFstatic int long_from_pyobj(long* v,PyObject *obj,const char *errmess) { PyObject* tmp = NULL; if (PyInt_Check(obj)) { *v = PyInt_AS_LONG(obj); return 1; } tmp = PyNumber_Int(obj); if (tmp) { *v = PyInt_AS_LONG(tmp); Py_DECREF(tmp); return 1; } if (PyComplex_Check(obj)) tmp = PyObject_GetAttrString(obj,"real"); else if (PyString_Check(obj) || PyUnicode_Check(obj)) /*pass*/; else if (PySequence_Check(obj)) tmp = PySequence_GetItem(obj,0); if (tmp) { PyErr_Clear(); if (long_from_pyobj(v,tmp,errmess)) {Py_DECREF(tmp); return 1;} Py_DECREF(tmp); } { PyObject* err = PyErr_Occurred(); if (err==NULL) err = #modulename#_error; PyErr_SetString(err,errmess); } return 0; } Zlong_from_pyobjZlong_long_from_pyobjastatic int long_long_from_pyobj(long_long* v,PyObject *obj,const char *errmess) { PyObject* tmp = NULL; if (PyLong_Check(obj)) { *v = PyLong_AsLongLong(obj); return (!PyErr_Occurred()); } if (PyInt_Check(obj)) { *v = (long_long)PyInt_AS_LONG(obj); return 1; } tmp = PyNumber_Long(obj); if (tmp) { *v = PyLong_AsLongLong(tmp); Py_DECREF(tmp); return (!PyErr_Occurred()); } if (PyComplex_Check(obj)) tmp = PyObject_GetAttrString(obj,"real"); else if (PyString_Check(obj) || PyUnicode_Check(obj)) /*pass*/; else if (PySequence_Check(obj)) tmp = PySequence_GetItem(obj,0); if (tmp) { PyErr_Clear(); if (long_long_from_pyobj(v,tmp,errmess)) {Py_DECREF(tmp); return 1;} Py_DECREF(tmp); } { PyObject* err = PyErr_Occurred(); if (err==NULL) err = #modulename#_error; PyErr_SetString(err,errmess); } return 0; } Zdouble_from_pyobjZlong_double_from_pyobja"static int long_double_from_pyobj(long_double* v,PyObject *obj,const char *errmess) { double d=0; if (PyArray_CheckScalar(obj)){ if PyArray_IsScalar(obj, LongDouble) { PyArray_ScalarAsCtype(obj, v); return 1; } else if (PyArray_Check(obj) && PyArray_TYPE(obj)==NPY_LONGDOUBLE) { (*v) = *((npy_longdouble *)PyArray_DATA(obj)); return 1; } } if (double_from_pyobj(&d,obj,errmess)) { *v = (long_double)d; return 1; } return 0; } astatic int double_from_pyobj(double* v,PyObject *obj,const char *errmess) { PyObject* tmp = NULL; if (PyFloat_Check(obj)) { #ifdef __sgi *v = PyFloat_AsDouble(obj); #else *v = PyFloat_AS_DOUBLE(obj); #endif return 1; } tmp = PyNumber_Float(obj); if (tmp) { #ifdef __sgi *v = PyFloat_AsDouble(tmp); #else *v = PyFloat_AS_DOUBLE(tmp); #endif Py_DECREF(tmp); return 1; } if (PyComplex_Check(obj)) tmp = PyObject_GetAttrString(obj,"real"); else if (PyString_Check(obj) || PyUnicode_Check(obj)) /*pass*/; else if (PySequence_Check(obj)) tmp = PySequence_GetItem(obj,0); if (tmp) { PyErr_Clear(); if (double_from_pyobj(v,tmp,errmess)) {Py_DECREF(tmp); return 1;} Py_DECREF(tmp); } { PyObject* err = PyErr_Occurred(); if (err==NULL) err = #modulename#_error; PyErr_SetString(err,errmess); } return 0; } Zfloat_from_pyobjzstatic int float_from_pyobj(float* v,PyObject *obj,const char *errmess) { double d=0.0; if (double_from_pyobj(&d,obj,errmess)) { *v = (float)d; return 1; } return 0; } Zcomplex_double_from_pyobjZcomplex_long_double_from_pyobjastatic int complex_long_double_from_pyobj(complex_long_double* v,PyObject *obj,const char *errmess) { complex_double cd={0.0,0.0}; if (PyArray_CheckScalar(obj)){ if PyArray_IsScalar(obj, CLongDouble) { PyArray_ScalarAsCtype(obj, v); return 1; } else if (PyArray_Check(obj) && PyArray_TYPE(obj)==NPY_CLONGDOUBLE) { (*v).r = ((npy_clongdouble *)PyArray_DATA(obj))->real; (*v).i = ((npy_clongdouble *)PyArray_DATA(obj))->imag; return 1; } } if (complex_double_from_pyobj(&cd,obj,errmess)) { (*v).r = (long_double)cd.r; (*v).i = (long_double)cd.i; return 1; } return 0; } astatic int complex_double_from_pyobj(complex_double* v,PyObject *obj,const char *errmess) { Py_complex c; if (PyComplex_Check(obj)) { c=PyComplex_AsCComplex(obj); (*v).r=c.real, (*v).i=c.imag; return 1; } if (PyArray_IsScalar(obj, ComplexFloating)) { if (PyArray_IsScalar(obj, CFloat)) { npy_cfloat new; PyArray_ScalarAsCtype(obj, &new); (*v).r = (double)new.real; (*v).i = (double)new.imag; } else if (PyArray_IsScalar(obj, CLongDouble)) { npy_clongdouble new; PyArray_ScalarAsCtype(obj, &new); (*v).r = (double)new.real; (*v).i = (double)new.imag; } else { /* if (PyArray_IsScalar(obj, CDouble)) */ PyArray_ScalarAsCtype(obj, v); } return 1; } if (PyArray_CheckScalar(obj)) { /* 0-dim array or still array scalar */ PyObject *arr; if (PyArray_Check(obj)) { arr = PyArray_Cast((PyArrayObject *)obj, NPY_CDOUBLE); } else { arr = PyArray_FromScalar(obj, PyArray_DescrFromType(NPY_CDOUBLE)); } if (arr==NULL) return 0; (*v).r = ((npy_cdouble *)PyArray_DATA(arr))->real; (*v).i = ((npy_cdouble *)PyArray_DATA(arr))->imag; return 1; } /* Python does not provide PyNumber_Complex function :-( */ (*v).i=0.0; if (PyFloat_Check(obj)) { #ifdef __sgi (*v).r = PyFloat_AsDouble(obj); #else (*v).r = PyFloat_AS_DOUBLE(obj); #endif return 1; } if (PyInt_Check(obj)) { (*v).r = (double)PyInt_AS_LONG(obj); return 1; } if (PyLong_Check(obj)) { (*v).r = PyLong_AsDouble(obj); return (!PyErr_Occurred()); } if (PySequence_Check(obj) && !(PyString_Check(obj) || PyUnicode_Check(obj))) { PyObject *tmp = PySequence_GetItem(obj,0); if (tmp) { if (complex_double_from_pyobj(v,tmp,errmess)) { Py_DECREF(tmp); return 1; } Py_DECREF(tmp); } } { PyObject* err = PyErr_Occurred(); if (err==NULL) err = PyExc_TypeError; PyErr_SetString(err,errmess); } return 0; } Zcomplex_float_from_pyobjastatic int complex_float_from_pyobj(complex_float* v,PyObject *obj,const char *errmess) { complex_double cd={0.0,0.0}; if (complex_double_from_pyobj(&cd,obj,errmess)) { (*v).r = (float)cd.r; (*v).i = (float)cd.i; return 1; } return 0; } Ztry_pyarr_from_charz\static int try_pyarr_from_char(PyObject* obj,char* v) { TRYPYARRAYTEMPLATE(char,'c'); } Ztry_pyarr_from_signed_charzwstatic int try_pyarr_from_unsigned_char(PyObject* obj,unsigned_char* v) { TRYPYARRAYTEMPLATE(unsigned_char,'b'); } Ztry_pyarr_from_unsigned_charzqstatic int try_pyarr_from_signed_char(PyObject* obj,signed_char* v) { TRYPYARRAYTEMPLATE(signed_char,'1'); } Ztry_pyarr_from_shortz_static int try_pyarr_from_short(PyObject* obj,short* v) { TRYPYARRAYTEMPLATE(short,'s'); } Ztry_pyarr_from_intzYstatic int try_pyarr_from_int(PyObject* obj,int* v) { TRYPYARRAYTEMPLATE(int,'i'); } Ztry_pyarr_from_longz\static int try_pyarr_from_long(PyObject* obj,long* v) { TRYPYARRAYTEMPLATE(long,'l'); } Ztry_pyarr_from_long_longzkstatic int try_pyarr_from_long_long(PyObject* obj,long_long* v) { TRYPYARRAYTEMPLATE(long_long,'L'); } Ztry_pyarr_from_floatz_static int try_pyarr_from_float(PyObject* obj,float* v) { TRYPYARRAYTEMPLATE(float,'f'); } Ztry_pyarr_from_doublezbstatic int try_pyarr_from_double(PyObject* obj,double* v) { TRYPYARRAYTEMPLATE(double,'d'); } Ztry_pyarr_from_complex_floatzvstatic int try_pyarr_from_complex_float(PyObject* obj,complex_float* v) { TRYCOMPLEXPYARRAYTEMPLATE(float,'F'); } Ztry_pyarr_from_complex_doublezystatic int try_pyarr_from_complex_double(PyObject* obj,complex_double* v) { TRYCOMPLEXPYARRAYTEMPLATE(double,'D'); } Zcreate_cb_arglistastatic int create_cb_arglist(PyObject* fun,PyTupleObject* xa,const int maxnofargs,const int nofoptargs,int *nofargs,PyTupleObject **args,const char *errmess) { PyObject *tmp = NULL; PyObject *tmp_fun = NULL; int tot,opt,ext,siz,i,di=0; CFUNCSMESS("create_cb_arglist\n"); tot=opt=ext=siz=0; /* Get the total number of arguments */ if (PyFunction_Check(fun)) { tmp_fun = fun; Py_INCREF(tmp_fun); } else { di = 1; if (PyObject_HasAttrString(fun,"im_func")) { tmp_fun = PyObject_GetAttrString(fun,"im_func"); } else if (PyObject_HasAttrString(fun,"__call__")) { tmp = PyObject_GetAttrString(fun,"__call__"); if (PyObject_HasAttrString(tmp,"im_func")) tmp_fun = PyObject_GetAttrString(tmp,"im_func"); else { tmp_fun = fun; /* built-in function */ Py_INCREF(tmp_fun); tot = maxnofargs; if (xa != NULL) tot += PyTuple_Size((PyObject *)xa); } Py_XDECREF(tmp); } else if (PyFortran_Check(fun) || PyFortran_Check1(fun)) { tot = maxnofargs; if (xa != NULL) tot += PyTuple_Size((PyObject *)xa); tmp_fun = fun; Py_INCREF(tmp_fun); } else if (F2PyCapsule_Check(fun)) { tot = maxnofargs; if (xa != NULL) ext = PyTuple_Size((PyObject *)xa); if(ext>0) { fprintf(stderr,"extra arguments tuple cannot be used with CObject call-back\n"); goto capi_fail; } tmp_fun = fun; Py_INCREF(tmp_fun); } } if (tmp_fun==NULL) { fprintf(stderr,"Call-back argument must be function|instance|instance.__call__|f2py-function but got %s.\n",(fun==NULL?"NULL":Py_TYPE(fun)->tp_name)); goto capi_fail; } #if PY_VERSION_HEX >= 0x03000000 if (PyObject_HasAttrString(tmp_fun,"__code__")) { if (PyObject_HasAttrString(tmp = PyObject_GetAttrString(tmp_fun,"__code__"),"co_argcount")) { #else if (PyObject_HasAttrString(tmp_fun,"func_code")) { if (PyObject_HasAttrString(tmp = PyObject_GetAttrString(tmp_fun,"func_code"),"co_argcount")) { #endif PyObject *tmp_argcount = PyObject_GetAttrString(tmp,"co_argcount"); Py_DECREF(tmp); if (tmp_argcount == NULL) { goto capi_fail; } tot = PyInt_AsLong(tmp_argcount) - di; Py_DECREF(tmp_argcount); } } /* Get the number of optional arguments */ #if PY_VERSION_HEX >= 0x03000000 if (PyObject_HasAttrString(tmp_fun,"__defaults__")) { if (PyTuple_Check(tmp = PyObject_GetAttrString(tmp_fun,"__defaults__"))) #else if (PyObject_HasAttrString(tmp_fun,"func_defaults")) { if (PyTuple_Check(tmp = PyObject_GetAttrString(tmp_fun,"func_defaults"))) #endif opt = PyTuple_Size(tmp); Py_XDECREF(tmp); } /* Get the number of extra arguments */ if (xa != NULL) ext = PyTuple_Size((PyObject *)xa); /* Calculate the size of call-backs argument list */ siz = MIN(maxnofargs+ext,tot); *nofargs = MAX(0,siz-ext); #ifdef DEBUGCFUNCS fprintf(stderr,"debug-capi:create_cb_arglist:maxnofargs(-nofoptargs),tot,opt,ext,siz,nofargs=%d(-%d),%d,%d,%d,%d,%d\n",maxnofargs,nofoptargs,tot,opt,ext,siz,*nofargs); #endif if (siz#define %s(v) (PyArray_SimpleNewFromData(0,NULL,%s,(char *)v))rzh#define %s(v,dims) (PyArray_New(&PyArray_Type, 1, dims, NPY_STRING, NULL, v, 1, NPY_ARRAY_CARRAY, NULL)))Z capi_mapsrkeysr )rkmr4/tmp/pip-install-6_kvzl1k/numpy/numpy/f2py/cfuncs.py buildcfuncss  rcCsDt|tr"|D]}t||qnt|tr0|s6dS|tkrDd}n|tkrRd}nv|tkr`d}nh|tkrnd}nZ|tkr|d}nL|t krd}n>|t krd}n0|t krd}n"|t krd }nt d t|dS|t|krdS|ri}|tkrJt|D]T}t|d }t|tr|D]2}||kr8||||||<n ||||<qq|D]6}||D]&}|t|kr^|gt|t|<q^qRt||ni}|tkr t|D]X}t||}t|tr|D]2}||kr||||||<n ||||<qҐq||krg||<||||Snt d t|dS) Nrrr r r r rrrzappend_needs: unknown need %s rz2append_needs: expected list or string but got :%s ) isinstancelist append_needsstrrrr r r r rrrerrmessreproutneedsneedsdictrappend)ZneedflagntmpnntZnnnrrrrsv                  rcCsXi}tD]D}g}tt|}tt|dkr:t|dtkrd|t|dt|d=nzd}t|ddD] }|tt|dkrxd}qqx|rt|ddt|dgt|<n|t|dt|d=|r*dtdd|t|kr*t|gkr*t||td||}q:tt|}q$|gkrJ|g}|||<q |S)NrrcSs||kS)Nr)xyrrrzget_needs..zQget_needs: no progress in sorting needs, probably circular dependence, skipping. ) rrcopylenr r"mapprintr)resr$outZsaveoutr#rrrr get_needss> $      r2)r)__doc__ __future__rrrsysr,rversionZ f2py_versionstderrwriterrr rrr r r r r rrrrrr2rrrrs   $$"            $ D     ( D      $ (   M        u C