/ lib / numpy / f2py / cb_rules.pyc
cb_rules.pyc
  1  o

  2  [��cXd�@s,dZddlmZddlmZmZmZmZmZm	Z	m
  3  Z
  4  mZmZm
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!ddlm"Z"ej#Z$ddgd�dd	d
  5  ddd
�Z%ididd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�d d�d!d�d"d�d#d��dd$�dd%�dd&�dg�dd�d'd�d(d�dd)�dg�dd�d*d�dg�dd�d+d�d,d�dd-�ddd.d/d0d1dddd2d3d4d5e	d6ee	�did7��d8ed9id:ed;igd<ed=id>gd?eeee�ee
��d@�edAidBdCdDedEidFedGigd<ed=idHdIgdJedK�dLdMdNdOed9idPedQigdRd<ed=idHd>dSge
dT�dUdVe	d6igdWedX�edJdY�gZ&eee�dZieee�dZiedUieee�d[e	d6igieee�d[e	d6igiedVee	e�d6ee	e�d\igieee�d]ieee�d]idd^�	eee�d_eeee��d`e
  6  daed_ieee�dbeeee��dce
  7  dbedbieee�dSeeee��dde
  8  ddedSieee
  9  e�dSiedeiedfiedgidh�ee�diieeee!dj��diedkiedlieeeee�e��dmieeeee�ee���dnieeeee��doieeeeee���dpiged<d>gied=igedq�edriedsigedtieduiedSigeee�ddv�edwidxedyigdSdIed=idHgeee�dz�ed{ied|ied}iged~ieduigeee�ddv�dd�e
 10  dd��ed�ied�ee�d�id�gee
 11  eeee��dd��edkid�ed�id�ed�igd�edSigee
 12  e�dz�d]ed��g
 13  Z'iZ(d�d��Z)d�d��Z*d�S)�aK
 14  
 15  Build call-back mechanism for f2py2e.
 16  
 17  Copyright 2000 Pearu Peterson all rights reserved,
 18  Pearu Peterson <pearu@ioc.ee>
 19  Permission to use, modify, and distribute this software is given under the
 20  terms of the NumPy License.
 21  
 22  NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
 23  $Date: 2005/07/20 11:27:58 $
 24  Pearu Peterson
 25  
 26  �)�__version__)�
 27  applyrules�	debugcapi�
 28  dictappend�errmess�getargs�hasnote�isarray�	iscomplex�iscomplexarray�iscomplexfunction�
 29  isfunction�
 30  isintent_c�
isintent_hide�isintent_in�isintent_inout�isintent_nothide�isintent_out�
 31  isoptional�
 32  isrequired�isscalar�isstring�isstringfunction�issubroutine�l_and�l_not�l_or�outmess�replace�
 33  stripcomma�throw_error)�cfuncszPtypedef #rctype#(*#name#_typedef)(#optargs_td##args_td##strarglens_td##noargs#);a^
 34  #begintitle#
 35  typedef struct {
 36      PyObject *capi;
 37      PyTupleObject *args_capi;
 38      int nofargs;
 39      jmp_buf jmpbuf;
 40  } #name#_t;
 41  
 42  #if defined(F2PY_THREAD_LOCAL_DECL) && !defined(F2PY_USE_PYTHON_TLS)
 43  
 44  static F2PY_THREAD_LOCAL_DECL #name#_t *_active_#name# = NULL;
 45  
 46  static #name#_t *swap_active_#name#(#name#_t *ptr) {
 47      #name#_t *prev = _active_#name#;
 48      _active_#name# = ptr;
 49      return prev;
 50  }
 51  
 52  static #name#_t *get_active_#name#(void) {
 53      return _active_#name#;
 54  }
 55  
 56  #else
 57  
 58  static #name#_t *swap_active_#name#(#name#_t *ptr) {
 59      char *key = "__f2py_cb_#name#";
 60      return (#name#_t *)F2PySwapThreadLocalCallbackPtr(key, ptr);
 61  }
 62  
 63  static #name#_t *get_active_#name#(void) {
 64      char *key = "__f2py_cb_#name#";
 65      return (#name#_t *)F2PyGetThreadLocalCallbackPtr(key);
 66  }
 67  
 68  #endif
 69  
 70  /*typedef #rctype#(*#name#_typedef)(#optargs_td##args_td##strarglens_td##noargs#);*/
 71  #static# #rctype# #callbackname# (#optargs##args##strarglens##noargs#) {
 72      #name#_t cb_local = { NULL, NULL, 0 };
 73      #name#_t *cb = NULL;
 74      PyTupleObject *capi_arglist = NULL;
 75      PyObject *capi_return = NULL;
 76      PyObject *capi_tmp = NULL;
 77      PyObject *capi_arglist_list = NULL;
 78      int capi_j,capi_i = 0;
 79      int capi_longjmp_ok = 1;
 80  #decl#
 81  #ifdef F2PY_REPORT_ATEXIT
 82  f2py_cb_start_clock();
 83  #endif
 84      cb = get_active_#name#();
 85      if (cb == NULL) {
 86          capi_longjmp_ok = 0;
 87          cb = &cb_local;
 88      }
 89      capi_arglist = cb->args_capi;
 90      CFUNCSMESS("cb:Call-back function #name# (maxnofargs=#maxnofargs#(-#nofoptargs#))\n");
 91      CFUNCSMESSPY("cb:#name#_capi=",cb->capi);
 92      if (cb->capi==NULL) {
 93          capi_longjmp_ok = 0;
 94          cb->capi = PyObject_GetAttrString(#modulename#_module,"#argname#");
 95          CFUNCSMESSPY("cb:#name#_capi=",cb->capi);
 96      }
 97      if (cb->capi==NULL) {
 98          PyErr_SetString(#modulename#_error,"cb: Callback #argname# not defined (as an argument or module #modulename# attribute).\n");
 99          goto capi_fail;
100      }
101      if (F2PyCapsule_Check(cb->capi)) {
102      #name#_typedef #name#_cptr;
103      #name#_cptr = F2PyCapsule_AsVoidPtr(cb->capi);
104      #returncptr#(*#name#_cptr)(#optargs_nm##args_nm##strarglens_nm#);
105      #return#
106      }
107      if (capi_arglist==NULL) {
108          capi_longjmp_ok = 0;
109          capi_tmp = PyObject_GetAttrString(#modulename#_module,"#argname#_extra_args");
110          if (capi_tmp) {
111              capi_arglist = (PyTupleObject *)PySequence_Tuple(capi_tmp);
112              Py_DECREF(capi_tmp);
113              if (capi_arglist==NULL) {
114                  PyErr_SetString(#modulename#_error,"Failed to convert #modulename#.#argname#_extra_args to tuple.\n");
115                  goto capi_fail;
116              }
117          } else {
118              PyErr_Clear();
119              capi_arglist = (PyTupleObject *)Py_BuildValue("()");
120          }
121      }
122      if (capi_arglist == NULL) {
123          PyErr_SetString(#modulename#_error,"Callback #argname# argument list is not set.\n");
124          goto capi_fail;
125      }
126  #setdims#
127  #ifdef PYPY_VERSION
128  #define CAPI_ARGLIST_SETITEM(idx, value) PyList_SetItem((PyObject *)capi_arglist_list, idx, value)
129      capi_arglist_list = PySequence_List(capi_arglist);
130      if (capi_arglist_list == NULL) goto capi_fail;
131  #else
132  #define CAPI_ARGLIST_SETITEM(idx, value) PyTuple_SetItem((PyObject *)capi_arglist, idx, value)
133  #endif
134  #pyobjfrom#
135  #undef CAPI_ARGLIST_SETITEM
136  #ifdef PYPY_VERSION
137      CFUNCSMESSPY("cb:capi_arglist=",capi_arglist_list);
138  #else
139      CFUNCSMESSPY("cb:capi_arglist=",capi_arglist);
140  #endif
141      CFUNCSMESS("cb:Call-back calling Python function #argname#.\n");
142  #ifdef F2PY_REPORT_ATEXIT
143  f2py_cb_start_call_clock();
144  #endif
145  #ifdef PYPY_VERSION
146      capi_return = PyObject_CallObject(cb->capi,(PyObject *)capi_arglist_list);
147      Py_DECREF(capi_arglist_list);
148      capi_arglist_list = NULL;
149  #else
150      capi_return = PyObject_CallObject(cb->capi,(PyObject *)capi_arglist);
151  #endif
152  #ifdef F2PY_REPORT_ATEXIT
153  f2py_cb_stop_call_clock();
154  #endif
155      CFUNCSMESSPY("cb:capi_return=",capi_return);
156      if (capi_return == NULL) {
157          fprintf(stderr,"capi_return is NULL\n");
158          goto capi_fail;
159      }
160      if (capi_return == Py_None) {
161          Py_DECREF(capi_return);
162          capi_return = Py_BuildValue("()");
163      }
164      else if (!PyTuple_Check(capi_return)) {
165          capi_return = Py_BuildValue("(N)",capi_return);
166      }
167      capi_j = PyTuple_Size(capi_return);
168      capi_i = 0;
169  #frompyobj#
170      CFUNCSMESS("cb:#name#:successful\n");
171      Py_DECREF(capi_return);
172  #ifdef F2PY_REPORT_ATEXIT
173  f2py_cb_stop_clock();
174  #endif
175      goto capi_return_pt;
176  capi_fail:
177      fprintf(stderr,"Call-back #name# failed.\n");
178      Py_XDECREF(capi_return);
179      Py_XDECREF(capi_arglist_list);
180      if (capi_longjmp_ok) {
181          longjmp(cb->jmpbuf,-1);
182      }
183  capi_return_pt:
184      ;
185  #return#
186  }
187  #endtitle#
188  )zsetjmp.h�
189  CFUNCSMESS�F2PY_THREAD_LOCAL_DECLz#maxnofargs#z#nofoptargs#zF    def #argname#(#docsignature#): return #docreturn#\n\
190  #docstrsigns#zc
191  {{}\verb@def #argname#(#latexdocsignature#): return #docreturn#@{}}
192  #routnote#
193  
194  #latexdocstrsigns#z1def #argname#(#docsignature#): return #docreturn#)�
195  cbtypedefs�body�need�
196  maxnofargs�
197  nofoptargs�docstr�latexdocstr�docstrshort�
separatorsfor�decl�
198  �args�,�optargs��	pyobjfrom�freemem�args_td�
199  optargs_td�args_nm�
200  optargs_nm�	frompyobj�setdims�docstrsignsz\n"
201  "�latexdocstrsigns�latexdocstrreq�latexdocstropt�latexdocstrout�latexdocstrcbsz/*decl*/z
/*pyobjfrom*/z
/*frompyobj*/�return�
202  strarglensz/*freemem*/�
strarglens_td�
strarglens_nm�noargsz/*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
203  --- #note#)r;r<�	docstrreq�	docstropt�	docstrout�	docstrcbs�	docreturn�docsign�
204  docsignoptr=r>r?r@�routnotez    #ctype# return_value = 0;z,    CFUNCSMESS("cb:Getting return_value->");a�    if (capi_j>capi_i) {
205          GETSCALARFROMPYTUPLE(capi_return,capi_i++,&return_value,#ctype#,
206            "#ctype#_from_pyobj failed in converting return_value of"
207            " call-back function #name# to C #ctype#\n");
208      } else {
209          fprintf(stderr,"Warning: call-back function #name# did not provide"
210                         " return value (index=%d, type=#ctype#)\n",capi_i);
211      }z8    fprintf(stderr,"#showvalueformat#.\n",return_value);z#ctype#_from_pyobjr"�GETSCALARFROMPYTUPLEz    return return_value;)r-r9r&rA�_checkzB    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->\"");a    if (capi_j>capi_i) {
212          GETSTRFROMPYTUPLE(capi_return,capi_i++,return_value,return_value_len);
213      } else {
214          fprintf(stderr,"Warning: call-back function #name# did not provide"
215                         " return value (index=%d, type=#ctype#)\n",capi_i);
216      }z:    fprintf(stderr,"#showvalueformat#\".\n",return_value);zstring.h�GETSTRFROMPYTUPLEzreturn;)r3r/r7r5r9r&rArOz<
217  #ifndef F2PY_CB_RETURNCOMPLEX
218  #ctype# *return_value
219  #endif
220  z3
221  #ifndef F2PY_CB_RETURNCOMPLEX
222  return_value
223  #endif
224  z0
225  #ifndef F2PY_CB_RETURNCOMPLEX
226  #ctype# *
227  #endif
228  zH
229  #ifdef F2PY_CB_RETURNCOMPLEX
230      #ctype# return_value = {0, 0};
231  #endif
232  a    if (capi_j>capi_i) {
233  #ifdef F2PY_CB_RETURNCOMPLEX
234          GETSCALARFROMPYTUPLE(capi_return,capi_i++,&return_value,#ctype#,
235            "#ctype#_from_pyobj failed in converting return_value of call-back"
236            " function #name# to C #ctype#\n");
237  #else
238          GETSCALARFROMPYTUPLE(capi_return,capi_i++,return_value,#ctype#,
239            "#ctype#_from_pyobj failed in converting return_value of call-back"
240            " function #name# to C #ctype#\n");
241  #endif
242      } else {
243          fprintf(stderr,
244                  "Warning: call-back function #name# did not provide"
245                  " return value (index=%d, type=#ctype#)\n",capi_i);
246      }z�#ifdef F2PY_CB_RETURNCOMPLEX
247      fprintf(stderr,"#showvalueformat#.\n",(return_value).r,(return_value).i);
248  #else
249      fprintf(stderr,"#showvalueformat#.\n",(*return_value).r,(*return_value).i);
250  #endif
251  zP
252  #ifdef F2PY_CB_RETURNCOMPLEX
253      return return_value;
254  #else
255      return;
256  #endif
257  z#ctype#)r1r8r6r-r9rAr&rOz        #pydocsignout#z"\item[]{{}\verb@#pydocsignout#@{}}z#rname#,)rHr?rJrO)rOrAz        #pydocsign#z\item[]{{}\verb@#pydocsign#@{}}z--- See above.z
258  #varname#,)	rGrFrHr>r=r?rKrL�dependz#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)r/r7r5r&rBrCrDz/    #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)
259          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");z7    fprintf(stderr,"#showvalueformat#.\n",#varname_i#);z@    fprintf(stderr,"#showvalueformat#.\n",*#varname_i#_cb_capi);zK    fprintf(stderr,"#showvalueformat#.\n",(#varname_i#).r,(#varname_i#).i);z]    fprintf(stderr,"#showvalueformat#.\n",(*#varname_i#_cb_capi).r,(*#varname_i#_cb_capi).i);)r-�errorr9r&rOz�    if (cb->nofargs>capi_i)
260          if (CAPI_ARGLIST_SETITEM(capi_i++,pyobj_from_#ctype#1(#varname_i#)))
261              goto capi_fail;z�    if (cb->nofargs>capi_i)
262          if (CAPI_ARGLIST_SETITEM(capi_i++,pyarr_from_p_#ctype#1(#varname_i#_cb_capi)))
263              goto capi_fail;zpyobj_from_#ctype#1zpyarr_from_p_#ctype#1)r3r&rO�	_optionalz+    CFUNCSMESS("cb:Getting #varname#->\"");zf    if (capi_j>capi_i)
264          GETSTRFROMPYTUPLE(capi_return,capi_i++,#varname_i#,#varname_i#_cb_len);zP    fprintf(stderr,"#showvalueformat#\":%d:.\n",#varname_i#,#varname_i#_cb_len);)r9r&rOze    fprintf(stderr,"debug-capi:cb:#varname#=#showvalueformat#:%d:\n",#varname_i#,#varname_i#_cb_len);z�    if (cb->nofargs>capi_i)
265          if (CAPI_ARGLIST_SETITEM(capi_i++,pyobj_from_#ctype#1size(#varname_i#,#varname_i#_cb_len)))
266              goto capi_fail;z�    if (cb->nofargs>capi_i) {
267          int #varname_i#_cb_dims[] = {#varname_i#_cb_len};
268          if (CAPI_ARGLIST_SETITEM(capi_i++,pyarr_from_p_#ctype#1(#varname_i#,#varname_i#_cb_dims)))
269              goto capi_fail;
270      }zpyobj_from_#ctype#1sizez6    npy_intp #varname_i#_Dims[#rank#] = {#rank*[-1]#};z    #cbsetdims#;)r-r:rO�_dependz0    fprintf(stderr,"debug-capi:cb:#varname#\n");a�    if (cb->nofargs>capi_i) {
271          /* tmp_arr will be inserted to capi_arglist_list that will be
272             destroyed when leaving callback function wrapper together
273             with tmp_arr. */
274          PyArrayObject *tmp_arr = (PyArrayObject *)PyArray_New(&PyArray_Type,
275            #rank#,#varname_i#_Dims,#atype#,NULL,(char*)#varname_i#,#elsize#,
276            NPY_ARRAY_CARRAY,NULL);
277  a�    if (cb->nofargs>capi_i) {
278          /* tmp_arr will be inserted to capi_arglist_list that will be
279             destroyed when leaving callback function wrapper together
280             with tmp_arr. */
281          PyArrayObject *tmp_arr = (PyArrayObject *)PyArray_New(&PyArray_Type,
282            #rank#,#varname_i#_Dims,#atype#,NULL,(char*)#varname_i#,#elsize#,
283            NPY_ARRAY_FARRAY,NULL);
284  z�
285          if (tmp_arr==NULL)
286              goto capi_fail;
287          if (CAPI_ARGLIST_SETITEM(capi_i++,(PyObject *)tmp_arr))
288              goto capi_fail;
289  })r3rOrSz�    if (capi_j>capi_i) {
290          PyArrayObject *rv_cb_arr = NULL;
291          if ((capi_tmp = PyTuple_GetItem(capi_return,capi_i++))==NULL) goto capi_fail;
292          rv_cb_arr =  array_from_pyobj(#atype#,#varname_i#_Dims,#rank#,F2PY_INTENT_INz|F2PY_INTENT_Ca8,capi_tmp);
293          if (rv_cb_arr == NULL) {
294              fprintf(stderr,"rv_cb_arr is NULL\n");
295              goto capi_fail;
296          }
297          MEMCOPY(#varname_i#,PyArray_DATA(rv_cb_arr),PyArray_NBYTES(rv_cb_arr));
298          if (capi_tmp != (PyObject *)rv_cb_arr) {
299              Py_DECREF(rv_cb_arr);
300          }
301      }z    fprintf(stderr,"<-.\n");�MEMCOPY)rJrOcCs\gt|d<|dD]!}|ddkr+|dD]}|r"t||d�qtd|d�qq
302  dS)N�namer%�block�	interfacezwarning: empty body for %s
303  )�cb_map�
buildcallbackr)�m�bi�b�r^��C:\Users\Jacks.GUTTSPC\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\numpy\f2py\cb_rules.py�buildcallbackss��r`cCs4ddlm}td|d|f�t|�\}}||_|d}|�||�}ti|�}t|�|d|dg�t	D]}d|vrC|d|�sGd|vrRt
304  |||�}	t||	�}q7i}
305  t|�D]J\}}|j||||d�}||
306  |<t
D]5}d|vrtqmd	|vrt||�rqmd|vr�|d||�s�d|vr�t
307  ||||�}	t||	�}d
308  |vr�nqmqY|D]B}|
309  |}t
D]9}d|vr�q�d	|vs�d	|vr�t||�r�q�d|vr�|d||�s�d|vr�t
310  ||||�}	t||	�}d
311  |vr�nq�q�|D]<}|
312  |}t
D]3}d|vr�q�d	|vr�q�d|v�r
|d||��sd|v�r&t
313  ||||�}	t||	�}d
314  |v�r&nq�q�d|v�rUd|v�rUt|dt��rU|dd
g|d<|dd
g|d<|dd
g|d<t|dt��rjttdd|di��|d<ttdd|di��}
|
dk�r�ttdd|di��|d<ntd|d|
d��|d<|d�dd�|d<|d�dd�|d<g|d<g|d <d!D]G}||v�r�t||t��r�|d|||d<d"|}||v�r�t||t��r�|d ||d#d�d$g||dd�d%g|d <�q�d|v�rd|d<d|d&<d|d'<|�d��s!|�d��s!|�d(��s!d)|d*<t
315  t|�}	|	d+tj|d<t|	d,t��r>|	d,g|	d,<d,|v�rZtj��D]}||d,v�rX|	d,�|��qH|	d-tj|dd.<|	d,�|dd.�|	d,tj|d<|	d/|	d0|	d1|	d2|d3d4�|j|d<td5|	d6�dS)7Nr)�	capi_mapsz2    Constructing call-back function "cb_%s_in_%s"
316  rV�varsrO)�indexrTrS�_breakr/r1z(
317  #ifndef F2PY_CB_RETURNCOMPLEX
318  ,
319  #endif
320  r8r6rJz#docreturn#z#docsignopt#rLr2z	#docsign#rK�docsignaturez#docsign#[#docsignopt#])rKrL�_z\_Zlatexdocsignaturer0z, r;r<)rFrGrHrI�latex�z\begin{description}z\end{description}r5r7rB�voidrEr%r&r$�_typedefr'r(r)r*�argname)r'r(r)r*rkz	      %s
321  r+)r2rarr�depargs�cb_routsign2maprrY�append�
cb_rout_rulesr�	enumerate�cb_sign2map�cb_arg_rulesrr�
322  isinstance�listrr�get�cb_routine_rulesr!�	callbacks�str�typedefs�keys�typedefs_generated�needs�lcb2_map)�rout�umrar/rl�var�vrd�rd�r�ar�savevrd�i�ar1�k�tr^r^r_rZs�
323  �
324  
325  � 
326  � 
327  �&
328  
329  ��
330  �
331  
332  �������
333  $
334  
335  ��rZN)+�__doc__r2r�auxfuncsrrrrrrr	r
336  rrr
rrrrrrrrrrrrrrrrrrr r!�version�f2py_versionrvrorrrYr`rZr^r^r^r_�<module>s.���-
337  �������������������������
�
�
�������	����������:����
338  �
339  �
340  
341  ���
342  �
343  �
344  ��
345  ��������
346  ��������������	���
347  �
348  ����+