U C^Y"@sdZddlmZmZmZddlmZddlmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%ddlm&Z&ej'Z(ddd d gd d d dddZ)dddddddddddddddddddddgddddgddgddddddddddddddd d!d"e d#e e did$d%e d&id'e d(igd)e d id*gd+eee ee ed,e d-id.d/d0e d1id2e d3igd)e d id4d5gd6ed7d8d9d:d;e d&idd)e d id4d*d?ged@dAdBe d#igdCedDed6dEgZ*eeedFieeedFiedAieeedGe d#igieeedGe d#igiedBee ed#ee edHigieeedIieeedIiddJ eeedKeee edLedMedKieeedNeee edOedNedNieeed?eee edPedPed?iedQiedRiedSidTe edUieeee%dVdie dWiedXiee ee eedYiee ee ee edZiee eeed[iee eee ed\iged)d*gie d iged]ed^ied_iged`iedaied?igeeeddbe dcidde deigd?d5e d id4geeedfe dgiedhiediigedjiedaigeeeddbdkdleddme dniedoe edpidqgeeee!eeddre dWidsedtidue dvigdwed?igeeedfdIedxg Z+ia,dydzZ-d{d|Z.d}S)~aK Build call-back mechanism for f2py2e. Copyright 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/07/20 11:27:58 $ Pearu Peterson )divisionabsolute_importprint_function) __version__) applyrules debugcapi dictappenderrmessgetargshasnoteisarray iscomplexiscomplexarrayiscomplexfunction isfunction isintent_c isintent_hide isintent_inisintent_inoutisintent_nothide isintent_out isoptional isrequiredisscalarisstringisstringfunction issubroutinel_andl_notl_oroutmessreplace stripcomma throw_error)cfuncszPtypedef #rctype#(*#name#_typedef)(#optargs_td##args_td##strarglens_td##noargs#);a #begintitle# PyObject *#name#_capi = NULL;/*was Py_None*/ PyTupleObject *#name#_args_capi = NULL; int #name#_nofargs = 0; jmp_buf #name#_jmpbuf; /*typedef #rctype#(*#name#_typedef)(#optargs_td##args_td##strarglens_td##noargs#);*/ #static# #rctype# #callbackname# (#optargs##args##strarglens##noargs#) { PyTupleObject *capi_arglist = #name#_args_capi; PyObject *capi_return = NULL; PyObject *capi_tmp = NULL; PyObject *capi_arglist_list = NULL; int capi_j,capi_i = 0; int capi_longjmp_ok = 1; #decl# #ifdef F2PY_REPORT_ATEXIT f2py_cb_start_clock(); #endif CFUNCSMESS("cb:Call-back function #name# (maxnofargs=#maxnofargs#(-#nofoptargs#))\n"); CFUNCSMESSPY("cb:#name#_capi=",#name#_capi); if (#name#_capi==NULL) { capi_longjmp_ok = 0; #name#_capi = PyObject_GetAttrString(#modulename#_module,"#argname#"); } if (#name#_capi==NULL) { PyErr_SetString(#modulename#_error,"cb: Callback #argname# not defined (as an argument or module #modulename# attribute).\n"); goto capi_fail; } if (F2PyCapsule_Check(#name#_capi)) { #name#_typedef #name#_cptr; #name#_cptr = F2PyCapsule_AsVoidPtr(#name#_capi); #returncptr#(*#name#_cptr)(#optargs_nm##args_nm##strarglens_nm#); #return# } if (capi_arglist==NULL) { capi_longjmp_ok = 0; capi_tmp = PyObject_GetAttrString(#modulename#_module,"#argname#_extra_args"); if (capi_tmp) { capi_arglist = (PyTupleObject *)PySequence_Tuple(capi_tmp); if (capi_arglist==NULL) { PyErr_SetString(#modulename#_error,"Failed to convert #modulename#.#argname#_extra_args to tuple.\n"); goto capi_fail; } } else { PyErr_Clear(); capi_arglist = (PyTupleObject *)Py_BuildValue("()"); } } if (capi_arglist == NULL) { PyErr_SetString(#modulename#_error,"Callback #argname# argument list is not set.\n"); goto capi_fail; } #setdims# #ifdef PYPY_VERSION #define CAPI_ARGLIST_SETITEM(idx, value) PyList_SetItem((PyObject *)capi_arglist_list, idx, value) capi_arglist_list = PySequence_List(capi_arglist); if (capi_arglist_list == NULL) goto capi_fail; #else #define CAPI_ARGLIST_SETITEM(idx, value) PyTuple_SetItem((PyObject *)capi_arglist, idx, value) #endif #pyobjfrom# #undef CAPI_ARGLIST_SETITEM #ifdef PYPY_VERSION CFUNCSMESSPY("cb:capi_arglist=",capi_arglist_list); #else CFUNCSMESSPY("cb:capi_arglist=",capi_arglist); #endif CFUNCSMESS("cb:Call-back calling Python function #argname#.\n"); #ifdef F2PY_REPORT_ATEXIT f2py_cb_start_call_clock(); #endif #ifdef PYPY_VERSION capi_return = PyObject_CallObject(#name#_capi,(PyObject *)capi_arglist_list); Py_DECREF(capi_arglist_list); capi_arglist_list = NULL; #else capi_return = PyObject_CallObject(#name#_capi,(PyObject *)capi_arglist); #endif #ifdef F2PY_REPORT_ATEXIT f2py_cb_stop_call_clock(); #endif CFUNCSMESSPY("cb:capi_return=",capi_return); if (capi_return == NULL) { fprintf(stderr,"capi_return is NULL\n"); goto capi_fail; } if (capi_return == Py_None) { Py_DECREF(capi_return); capi_return = Py_BuildValue("()"); } else if (!PyTuple_Check(capi_return)) { capi_return = Py_BuildValue("(N)",capi_return); } capi_j = PyTuple_Size(capi_return); capi_i = 0; #frompyobj# CFUNCSMESS("cb:#name#:successful\n"); Py_DECREF(capi_return); #ifdef F2PY_REPORT_ATEXIT f2py_cb_stop_clock(); #endif goto capi_return_pt; capi_fail: fprintf(stderr,"Call-back #name# failed.\n"); Py_XDECREF(capi_return); Py_XDECREF(capi_arglist_list); if (capi_longjmp_ok) longjmp(#name#_jmpbuf,-1); capi_return_pt: ; #return# } #endtitle# zsetjmp.hZ CFUNCSMESSz #maxnofargs#z #nofoptargs#zC def #argname#(#docsignature#): return #docreturn#\n\ #docstrsigns#zc {{}\verb@def #argname#(#latexdocsignature#): return #docreturn#@{}} #routnote# #latexdocstrsigns#z1def #argname#(#docsignature#): return #docreturn#) cbtypedefsbodyneed maxnofargs nofoptargsdocstr latexdocstr docstrshort ,z\n" ")declargsoptargs pyobjfromfreememargs_td optargs_tdargs_nm optargs_nm frompyobjsetdims docstrsignslatexdocstrsignslatexdocstrreqlatexdocstroptlatexdocstroutlatexdocstrcbsz/*decl*/z /*pyobjfrom*/z /*frompyobj*/z /*freemem*/z /*setdims*/z Required arguments:z Optional arguments:z Return objects:z Call-back functions:z\noindent Required arguments:z\noindent Optional arguments:z\noindent Return objects:z\noindent Call-back functions:z --- #note#)Z separatorsforr1r4r:r2r3return strarglensr5r6r7 strarglens_tdr8r9 strarglens_nmnoargsr;r<r= docstrreq docstropt docstrout docstrcbs docreturndocsign docsignoptr>r?r@rAZroutnotez #ctype# return_value;z) CFUNCSMESS("cb:Getting return_value->");z if (capi_j>capi_i) GETSCALARFROMPYTUPLE(capi_return,capi_i++,&return_value,#ctype#,"#ctype#_from_pyobj failed in converting return_value of call-back function #name# to C #ctype#\n");z5 fprintf(stderr,"#showvalueformat#.\n",return_value);z#ctype#_from_pyobjZGETSCALARFROMPYTUPLEz return return_value;)r1r:r(rB_checkz? fprintf(stderr,"debug-capi:cb:#name#:%d:\n",return_value_len);z)#ctype# return_value,int return_value_lenzreturn_value,&return_value_lenz #ctype# ,intz+ CFUNCSMESS("cb:Getting return_value->\"");z\ if (capi_j>capi_i) GETSTRFROMPYTUPLE(capi_return,capi_i++,return_value,return_value_len);z7 fprintf(stderr,"#showvalueformat#\".\n",return_value);zstring.hZGETSTRFROMPYTUPLEzreturn;)r4r2r8r6r:r(rBrNz< #ifndef F2PY_CB_RETURNCOMPLEX #ctype# *return_value #endif z3 #ifndef F2PY_CB_RETURNCOMPLEX return_value #endif z0 #ifndef F2PY_CB_RETURNCOMPLEX #ctype# * #endif z< #ifdef F2PY_CB_RETURNCOMPLEX #ctype# return_value; #endif a if (capi_j>capi_i) #ifdef F2PY_CB_RETURNCOMPLEX GETSCALARFROMPYTUPLE(capi_return,capi_i++,&return_value,#ctype#,"#ctype#_from_pyobj failed in converting return_value of call-back function #name# to C #ctype#\n"); #else GETSCALARFROMPYTUPLE(capi_return,capi_i++,return_value,#ctype#,"#ctype#_from_pyobj failed in converting return_value of call-back function #name# to C #ctype#\n"); #endif z #ifdef F2PY_CB_RETURNCOMPLEX fprintf(stderr,"#showvalueformat#.\n",(return_value).r,(return_value).i); #else fprintf(stderr,"#showvalueformat#.\n",(*return_value).r,(*return_value).i); #endif zJ #ifdef F2PY_CB_RETURNCOMPLEX return return_value; #else return; #endif z#ctype#)r3r9r7r1r:rBr(rNz #pydocsignout#z"\item[]{{}\verb@#pydocsignout#@{}}z#rname#,)rIr@rKrN)rNrBz #pydocsign#z\item[]{{}\verb@#pydocsign#@{}}z--- See above.z #varname#,) rHrGrIr?r>r@rLrMZdependz#ctype# #varname_i#z#ctype# *#varname_i#_cb_capiz#ctype# *#varname_i#z #varname_i#z#varname_i#_cb_capiz #ctype# *z,int #varname_i#_cb_lenz,intz,#varname_i#_cb_len)r2r8r6rCrDrEz, #ctype# #varname_i#=(*#varname_i#_cb_capi);z8intent(c,out) is forbidden for callback scalar argumentsz& CFUNCSMESS("cb:Getting #varname#->");z if (capi_j>capi_i) GETSCALARFROMPYTUPLE(capi_return,capi_i++,#varname_i#_cb_capi,#ctype#,"#ctype#_from_pyobj failed in converting argument #varname# of call-back function #name# to C #ctype#\n");z4 fprintf(stderr,"#showvalueformat#.\n",#varname_i#);z= fprintf(stderr,"#showvalueformat#.\n",*#varname_i#_cb_capi);zH fprintf(stderr,"#showvalueformat#.\n",(#varname_i#).r,(#varname_i#).i);zZ fprintf(stderr,"#showvalueformat#.\n",(*#varname_i#_cb_capi).r,(*#varname_i#_cb_capi).i);)r1errorr:r(rNzu if (#name#_nofargs>capi_i) if (CAPI_ARGLIST_SETITEM(capi_i++,pyobj_from_#ctype#1(#varname_i#))) goto capi_fail;z if (#name#_nofargs>capi_i) if (CAPI_ARGLIST_SETITEM(capi_i++,pyarr_from_p_#ctype#1(#varname_i#_cb_capi))) goto capi_fail;zpyobj_from_#ctype#1zpyarr_from_p_#ctype#1)r4r(rN _optionalz( CFUNCSMESS("cb:Getting #varname#->\"");z] if (capi_j>capi_i) GETSTRFROMPYTUPLE(capi_return,capi_i++,#varname_i#,#varname_i#_cb_len);zM fprintf(stderr,"#showvalueformat#\":%d:.\n",#varname_i#,#varname_i#_cb_len);)r:r(rNzf fprintf(stderr,"debug-capi:cb:#varname#=\"#showvalueformat#\":%d:\n",#varname_i#,#varname_i#_cb_len);z if (#name#_nofargs>capi_i) if (CAPI_ARGLIST_SETITEM(capi_i++,pyobj_from_#ctype#1size(#varname_i#,#varname_i#_cb_len))) goto capi_fail;z if (#name#_nofargs>capi_i) { int #varname_i#_cb_dims[] = {#varname_i#_cb_len}; if (CAPI_ARGLIST_SETITEM(capi_i++,pyarr_from_p_#ctype#1(#varname_i#,#varname_i#_cb_dims))) goto capi_fail; }zpyobj_from_#ctype#1sizez3 npy_intp #varname_i#_Dims[#rank#] = {#rank*[-1]#};z #cbsetdims#;)r1r;rN_dependz- fprintf(stderr,"debug-capi:cb:#varname#\n");a  if (#name#_nofargs>capi_i) { int itemsize_ = #atype# == NPY_STRING ? 1 : 0; /*XXX: Hmm, what will destroy this array??? */ PyArrayObject *tmp_arr = (PyArrayObject *)PyArray_New(&PyArray_Type,#rank#,#varname_i#_Dims,#atype#,NULL,(char*)#varname_i#,itemsize_,NPY_ARRAY_CARRAY,NULL); a  if (#name#_nofargs>capi_i) { int itemsize_ = #atype# == NPY_STRING ? 1 : 0; /*XXX: Hmm, what will destroy this array??? */ PyArrayObject *tmp_arr = (PyArrayObject *)PyArray_New(&PyArray_Type,#rank#,#varname_i#_Dims,#atype#,NULL,(char*)#varname_i#,itemsize_,NPY_ARRAY_FARRAY,NULL); zw if (tmp_arr==NULL) goto capi_fail; if (CAPI_ARGLIST_SETITEM(capi_i++,(PyObject *)tmp_arr)) goto capi_fail; })r4rNrPz if (capi_j>capi_i) { PyArrayObject *rv_cb_arr = NULL; if ((capi_tmp = PyTuple_GetItem(capi_return,capi_i++))==NULL) goto capi_fail; rv_cb_arr = array_from_pyobj(#atype#,#varname_i#_Dims,#rank#,F2PY_INTENT_INz|F2PY_INTENT_Cz,capi_tmp); if (rv_cb_arr == NULL) { fprintf(stderr,"rv_cb_arr is NULL\n"); goto capi_fail; } MEMCOPY(#varname_i#,PyArray_DATA(rv_cb_arr),PyArray_NBYTES(rv_cb_arr)); if (capi_tmp != (PyObject *)rv_cb_arr) { Py_DECREF(rv_cb_arr); } }z fprintf(stderr,"<-.\n");ZMEMCOPY)rKrNcCs\gt|d<|dD]B}|ddkr|dD](}|rDt||dq,td|dq,qdS)Nnamer'blockZ interfacezwarning: empty body for %s )cb_map buildcallbackr )mZbibrX6/tmp/pip-install-6_kvzl1k/numpy/numpy/f2py/cb_rules.pybuildcallbackss    rZcCs`ddlm}td|d|ft|\}}||_|d}|||}ti|}t||d|dgt D]6}d|kr|d|sd|krnt |||} t|| }qni} t |D]\} } |j | || | d}|| | <t D]n}d|krqd |krt|| rqd|kr|d|| s"d|krt |||| } t|| }d |krqqq|D]} | | }t D]}d|krrq`d |ks`d |krt|| rq`d|kr|d|| sd|kr`t |||| } t|| }d |kr`qPq`qP|D]} | | }t D]r}d|krqd |kr$qd|kr@|d|| sJd|krt |||| } t|| }d |krqqqd |krd |krt|d tr|d d g|d <|dd g|d<|dd g|d<t|dtrttdd|di|d<ttdd|di} | dkrs  r   2t                 !