ó
¢áSc           @` sy  d  Z  d d l m Z m Z m Z d d l Z d d l Z d d l m Z d d l	 Td d l m
 Z
 e j Z e j j Z e j j Z e j Z i d d	 6d
 d 6d d g d 6d d 6d d 6d d 6d d 6d d 6Z i i d d 6d d 6d d 6d d 6d d  6d d! 6d d" 6d d# 6d d$ 6d d% 6d d& 6d' d( 6d d) 6d d* 6d d+ 6d d, 6d d- 6d. 6d/ d 6d0 d 6d1 d% 6g  d 6d d 6d d2 6d d3 6d4 d  6g  d! 6d d" 6d d5 6g  d# 6d d$ 6d d6 6d d7 6d8 d& 6d d( 6d d) 6d9 d: 6d; d< 6d= d> 6d? d@ 6d dA 6d dB 6d dC 6dD d* 6dE d+ 6dF d, 6dG d- 6i dH e 6d e e ƒ 6dI 6i dJ d 6i dK e 6dL i dM e 6g d% 6dN i d e 6dO g d 6dP d2 6e e e e ƒ e e ƒ ƒ dQ 6i i dR e 6d 6dS d 6dT d# 6dU d! 6i dV e 6dW i dX e 6g d% 6dN i d e 6dY dZ g d 6d[ d2 6e dQ 6i d\ d 6d] d$ 6d^ d" 6d_ d 6i dK e 6d` i da e 6g d% 6db d2 6dN i d e 6dY dO dc g d 6e dQ 6i dd d> 6de i dH e 6g d, 6df dA 6e dQ 6i e dQ 6d[ d2 6g Z i	 i dg e e e ƒ 6d< 6i dg e e e ƒ 6d: 6i dd e  6d> 6i dh i dH e 6g e e e ƒ 6d+ 6i dh i dH e 6g e e e ƒ 6d* 6i de i dH e e e! ƒ 6di e e e ƒ 6g e  6d, 6i dj e e e ƒ 6dB 6i dj e e e ƒ 6dC 6d dk 6i i dl e e" e# ƒ 6dm e e" e e# ƒ ƒ 6dn e$ 6dl e% 6d 6i do e e" e# ƒ 6dp e e" e e# ƒ ƒ 6do e$ 6do e% 6d# 6i dc e e" e# ƒ 6dq e e" e e# ƒ ƒ 6dq e$ 6dc e% 6d! 6i dr e% 6d3 6i ds e% 6d5 6i dt e% 6d6 6i i du e e# ƒ 6d 6i d e e# e  e& dv ƒ ƒ 6dw 6i dx e 6i dy e  6i dz e e e e e' ƒ e# ƒ ƒ 6i d{ e e e e e' ƒ e e# ƒ ƒ ƒ 6i d| e e e e' e# ƒ ƒ 6i d} e e e e' e e# ƒ ƒ ƒ 6g d% 6i dN dO g e  6i d e 6g d 6e" dQ 6i i d~ e( 6i d e) 6g d 6i d€ e( 6i d� e) 6i dc e' 6g d 6e e" e ƒ dQ 6d d‚ 6i i dƒ e 6d„ i d… e 6g d% 6dc dZ i d e 6dY g d 6e e% e  ƒ dQ 6i i d† e 6i d‡ e( 6i dˆ e) 6g d 6i d‰ e( 6i d� e) 6g d 6e e% e ƒ dQ 6d d‚ 6i dŠ d 6d‹ d& 6e$ dQ 6d dŒ 6i i d� e 6i dŽ e# 6d� e e# ƒ 6d� g d 6e e$ e e* e( e) ƒ ƒ dQ 6d d‚ 6i i dx e 6d‘ i d’ e# 6d“ i d” e 6g d% 6d• i dc e+ 6g d 6e e$ e  ƒ dQ 6i dj dA 6e  dQ 6g
 Z, i  a- d– „  Z. d— „  Z/ d S(˜   sK  

Build call-back mechanism for f2py2e.

Copyright 2000 Pearu Peterson all rights reserved,
Pearu Peterson <pearu@ioc.ee>
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

i    (   t   divisiont   absolute_importt   print_functionNi   (   t   __version__(   t   *(   t   cfuncssP   typedef #rctype#(*#name#_typedef)(#optargs_td##args_td##strarglens_td##noargs#);t
   cbtypedefssñ
  
#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;
	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#
#pyobjfrom#
	CFUNCSMESSPY("cb:capi_arglist=",capi_arglist);
	CFUNCSMESS("cb:Call-back calling Python function #argname#.\n");
#ifdef F2PY_REPORT_ATEXIT
f2py_cb_start_call_clock();
#endif
	capi_return = PyObject_CallObject(#name#_capi,(PyObject *)capi_arglist);
#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);
	if (capi_longjmp_ok)
		longjmp(#name#_jmpbuf,-1);
capi_return_pt:
	;
#return#
}
#endtitle#
t   bodys   setjmp.ht
   CFUNCSMESSt   needs   #maxnofargs#t
   maxnofargss   #nofoptargs#t
   nofoptargssC   	def #argname#(#docsignature#): return #docreturn#\n\
#docstrsigns#t   docstrsc   
{{}\verb@def #argname#(#latexdocsignature#): return #docreturn#@{}}
#routnote#

#latexdocstrsigns#t   latexdocstrs1   def #argname#(#docsignature#): return #docreturn#t   docstrshorts   
t   declt   ,t   argst    t   optargst	   pyobjfromt   freememt   args_tdt
   optargs_tdt   args_nmt
   optargs_nmt	   frompyobjt   setdimss   \n"
"t   docstrsignst   latexdocstrsignst   latexdocstrreqt   latexdocstroptt   latexdocstroutt   latexdocstrcbst   separatorsfors   /*decl*/s   /*pyobjfrom*/s   /*frompyobj*/t   returnt
   strarglenss   /*freemem*/t   strarglens_tdt   strarglens_nmt   noargss   /*setdims*/s   	Required arguments:t	   docstrreqs   	Optional arguments:t	   docstropts   	Return objects:t	   docstrouts   	Call-back functions:t	   docstrcbst	   docreturnt   docsignt
   docsignopts   \noindent Required arguments:s   \noindent Optional arguments:s   \noindent Return objects:s   \noindent Call-back functions:s
   --- #note#t   routnotes   	#ctype# return_value;s)   	CFUNCSMESS("cb:Getting return_value->");sº   	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");s5   	fprintf(stderr,"#showvalueformat#.\n",return_value);s   #ctype#_from_pyobjt   GETSCALARFROMPYTUPLEs   	return return_value;t   _checks?   	fprintf(stderr,"debug-capi:cb:#name#:%d:\n",return_value_len);s)   #ctype# return_value,int return_value_lens   return_value,&return_value_lens   #ctype# ,ints+   	CFUNCSMESS("cb:Getting return_value->\"");s\   	if (capi_j>capi_i)
		GETSTRFROMPYTUPLE(capi_return,capi_i++,return_value,return_value_len);s7   	fprintf(stderr,"#showvalueformat#\".\n",return_value);s   string.ht   GETSTRFROMPYTUPLEs   return;s<   
#ifndef F2PY_CB_RETURNCOMPLEX
#ctype# *return_value
#endif
s3   
#ifndef F2PY_CB_RETURNCOMPLEX
return_value
#endif
s0   
#ifndef F2PY_CB_RETURNCOMPLEX
#ctype# *
#endif
s<   
#ifdef F2PY_CB_RETURNCOMPLEX
	#ctype# return_value;
#endif
s‹  	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
sÄ   
#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

sJ   
#ifdef F2PY_CB_RETURNCOMPLEX
	return return_value;
#else
	return;
#endif
s   #ctype#s   		#pydocsignout#s"   \item[]{{}\verb@#pydocsignout#@{}}s   #rname#,s   		#pydocsign#s   \item[]{{}\verb@#pydocsign#@{}}s   --- See above.s
   #varname#,t   depends   #ctype# #varname_i#s   #ctype# *#varname_i#_cb_capis   #ctype# *#varname_i#s   #varname_i#s   #varname_i#_cb_capis	   #ctype# *s   ,int #varname_i#_cb_lens   ,ints   ,#varname_i#_cb_lens,   	#ctype# #varname_i#=(*#varname_i#_cb_capi);s8   intent(c,out) is forbidden for callback scalar argumentst   errors&   	CFUNCSMESS("cb:Getting #varname#->");sÆ   	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");s4   	fprintf(stderr,"#showvalueformat#.\n",#varname_i#);s=   	fprintf(stderr,"#showvalueformat#.\n",*#varname_i#_cb_capi);sH   	fprintf(stderr,"#showvalueformat#.\n",(#varname_i#).r,(#varname_i#).i);sZ   	fprintf(stderr,"#showvalueformat#.\n",(*#varname_i#_cb_capi).r,(*#varname_i#_cb_capi).i);s‰   	if (#name#_nofargs>capi_i)
		if (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,pyobj_from_#ctype#1(#varname_i#)))
			goto capi_fail;s“   	if (#name#_nofargs>capi_i)
		if (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,pyarr_from_p_#ctype#1(#varname_i#_cb_capi)))
			goto capi_fail;s   pyobj_from_#ctype#1s   pyarr_from_p_#ctype#1t	   _optionals(   	CFUNCSMESS("cb:Getting #varname#->\"");s]   	if (capi_j>capi_i)
		GETSTRFROMPYTUPLE(capi_return,capi_i++,#varname_i#,#varname_i#_cb_len);sM   	fprintf(stderr,"#showvalueformat#\":%d:.\n",#varname_i#,#varname_i#_cb_len);sf   	fprintf(stderr,"debug-capi:cb:#varname#=\"#showvalueformat#\":%d:\n",#varname_i#,#varname_i#_cb_len);s    	if (#name#_nofargs>capi_i)
		if (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,pyobj_from_#ctype#1size(#varname_i#,#varname_i#_cb_len)))
			goto capi_fail;sØ   	if (#name#_nofargs>capi_i) {
		int #varname_i#_cb_dims[] = {#varname_i#_cb_len};
		if (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,pyarr_from_p_#ctype#1(#varname_i#,#varname_i#_cb_dims)))
			goto capi_fail;
	}s   pyobj_from_#ctype#1sizes3   	npy_intp #varname_i#_Dims[#rank#] = {#rank*[-1]#};s   	#cbsetdims#;t   _depends-   	fprintf(stderr,"debug-capi:cb:#varname#\n");sß   	if (#name#_nofargs>capi_i) {
		PyArrayObject *tmp_arr = (PyArrayObject *)PyArray_New(&PyArray_Type,#rank#,#varname_i#_Dims,#atype#,NULL,(char*)#varname_i#,0,NPY_CARRAY,NULL); /*XXX: Hmm, what will destroy this array??? */
sß   	if (#name#_nofargs>capi_i) {
		PyArrayObject *tmp_arr = (PyArrayObject *)PyArray_New(&PyArray_Type,#rank#,#varname_i#_Dims,#atype#,NULL,(char*)#varname_i#,0,NPY_FARRAY,NULL); /*XXX: Hmm, what will destroy this array??? */
s‹   
		if (tmp_arr==NULL)
			goto capi_fail;
		if (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,(PyObject *)tmp_arr))
			goto capi_fail;
}s×   	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_INs   |F2PY_INTENT_Csô   ,capi_tmp);
		if (rv_cb_arr == NULL) {
			fprintf(stderr,"rv_cb_arr is NULL\n");
			goto capi_fail;
		}
		MEMCOPY(#varname_i#,rv_cb_arr->data,PyArray_NBYTES(rv_cb_arr));
		if (capi_tmp != (PyObject *)rv_cb_arr) {
			Py_DECREF(rv_cb_arr);
		}
	}s   	fprintf(stderr,"<-.\n");t   MEMCOPYc         C` s{   g  t  |  d <xf |  d D]Z } | d d k r xA | d D]2 } | rZ t | |  d ƒ q: t d |  d ƒ q: Wq q Wd  S(   Nt   nameR   t   blockt	   interfaces   warning: empty body for %s
(   t   cb_mapt   buildcallbackt   errmess(   t   mt   bit   b(    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/numpy/f2py/cb_rules.pyt   buildcallbacks”  s    c         C` s&  d d l  m } t d |  d | f ƒ t |  ƒ \ } } | | _ |  d } | j |  | ƒ } t i  | ƒ } t | j |  d | d g ƒ xZ t	 D]R } d | k r¶ | d |  ƒ sÂ d | k r” t
 | | |  ƒ }	 t | |	 ƒ } q” q” Wi  }
 xé t | ƒ D]Û \ } } | j | | | d | ƒ} | |
 | <x¦ t D]ž } d | k rNq6n  d	 | k rpt | | ƒ rpq6n  d | k r�| d | | ƒ sœd | k r6t
 | | | | ƒ }	 t | |	 ƒ } d
 | k rÔPqÔq6q6Wqý WxÍ | D]Å } |
 | } x² t D]ª } d | k rqún  d	 | k súd	 | k r@t | | ƒ r@qún  d | k r`| d | | ƒ sld | k rút
 | | | | ƒ }	 t | |	 ƒ } d
 | k r¤Pq¤qúqúWqãWx± | D]© } |
 | } x– t D]Ž } d | k râqÊn  d	 | k rôqÊn  d | k r| d | | ƒ s d | k rÊt
 | | | | ƒ }	 t | |	 ƒ } d
 | k rXPqXqÊqÊWq³Wd | k rÐd | k rÐt | d t ƒ rÐ| d d g | d <| d d g | d <| d d g | d <qÐn  t | d t ƒ r
t t d i | d d 6ƒ ƒ | d <n  t t d i | d d 6ƒ ƒ } | d k r]t t d i | d d 6ƒ ƒ | d <n% t d i | d d 6| d 6ƒ | d <| d j d d ƒ | d <| d j d d ƒ | d <g  | d <g  | d <xµ d  d! d" d# g D]¡ } | | k rt | | t ƒ r| d | | | d <n  d$ | } | | k rÝt | | t ƒ rÝ| d | | d% d !d& g | | d d' g | d <qÝqÝWd | k r¯d | d <d | d( <d | d) <n  | j d ƒ pÙ| j d ƒ pÙ| j d* ƒ séd+ | d, <n  t
 t | ƒ }	 |	 d- t j | d <t |	 d. t ƒ r4|	 d. g |	 d. <n  d. | k r�x> t j j ƒ  D]* } | | d. k rP|	 d. j | ƒ qPqPWn  |	 d/ t j | d d0 <|	 d. j | d d0 ƒ |	 d. t j | d <i |	 d1 d1 6|	 d2 d2 6|	 d3 d3 6|	 d4 d4 6| d5 d5 6| j | d <t d6 |	 d7 ƒ d  S(8   Ni   (   t	   capi_mapss/   	Constructing call-back function "cb_%s_in_%s"
R8   t   varsR1   t   indexR6   R5   t   _breakR   R   s(   
#ifndef F2PY_CB_RETURNCOMPLEX
,
#endif
R   R   R,   s   #docreturn#s   #docsignopt#R.   R   s	   #docsign#R-   t   docsignatures   #docsign#[#docsignopt#]t   _s   \_t   latexdocsignatureR   s   , R   R   R(   R)   R*   R+   t   latexi    s   \begin{description}s   \end{description}R   R   R$   t   voidR'   R   R	   R   t   _typedefR
   R   R   R   t   argnames   	  %s
R   (   R   RB   t   outmesst   getargst   depargst   cb_routsign2mapt
   dictappendR;   t   appendt   cb_rout_rulest
   applyrulest	   enumeratet   cb_sign2mapt   cb_arg_rulest
   isoptionalt
   isrequiredt
   isinstancet   listt
   stripcommat   replacet   gett   cb_routine_rulesR   t	   callbackst   strt   typedefst   keyst   typedefs_generatedt   needst   lcb2_map(   t   routt   umRB   R   RO   t   vart   vrdt   rdt   rt   art   savevrdt   it   aR   t   kt   t(    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/numpy/f2py/cb_rules.pyR<   Ÿ  sÌ    	
(
,
(,
,'	'


)

-(0   t   __doc__t
   __future__R    R   R   t   pprintt   sysR   R   t   auxfuncsR   t   versiont   f2py_versiont   stderrt   writeR=   t   stdoutRM   t   showR_   t   hasnotet   l_nott	   debugcapit   l_andt
   isfunctiont   isstringfunctiont   iscomplexfunctiont   issubroutineRS   RX   t   isintent_nothideRY   t   isintent_outt   isintent_hidet   isscalart
   isintent_ct   isarrayt   isstringt   throw_errort	   iscomplext   isintent_int   isintent_inoutt   l_ort   iscomplexarrayRW   R;   RA   R<   (    (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/numpy/f2py/cb_rules.pyt   <module>   sr  
		^

#





"()









	