o
    &i`                     @   s  d Z ddlmZ ejZddlZddlZddlZddlm	Z	 ddlm
Z
 ddlT g dZd	Zg Zi ai Zi d
dddddddddddddddddddddddddddddddddZi d
ddddddddd dd!dd"dd#dd$dd%dd&dd&dd'dd(dd(dddd)Zeri d
ddddd*dd!dd dd!dd"dd#dd$dd%dd&d+d,dd-d.d/dd'dd(dd(ddd0Zi d
d1dd2dd1dd3dd3dd4dd5dd6dd7dd8dd9dd:dd;dd<dd<dd=dd=ZerKi d
d1dd2dd>dd4dd?dd4dd@ddAdd7ddBdd9d+d:ddCd.dDdd;dd<ddEdFd=d0Zd1d2d4d4d@d7d9d:dGdGdGdHd=dIZddd
dddJddddddddd.dK	ddddddLddddddJddddddMdNdidNd
idNdidOaetZg ZdPdQ Zi d
dRddRddSddTddTddUddVddWddTddXddYd+dZddYdd[dd[dd\dd]dd^iZd_d` Zdadb Zdcdd Zd{dedfZdgdh Zdidj Z dkdl Z!dmdn Z"dodp Z#dqdr Z$dsdt Z%d|dudvZ&dwdx Z'dydz Z(dS )}a)  

Copyright 1999,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/05/06 10:57:33 $
Pearu Peterson

   )__version__    N)markoutercomma)cb_rules)*)getctypegetstrlength
getarrdimsgetpydocsigngetarrdocsigngetinitsign2maproutsign2mapmodsign2mapcb_sign2mapcb_routsign2mapcommon_sign2mapTdoublefloatZlong_doublecharintsigned_charZunsigned_charshortZunsigned_shortlong	long_longZunsignedcomplex_floatcomplexcomplex_doublecomplex_long_doublestring	characterbytesZ
NPY_DOUBLEZ	NPY_FLOATZ
NPY_STRINGZ	NPY_UBYTEZNPY_BYTEZ	NPY_SHORTZ
NPY_USHORTZNPY_INTZNPY_UINTZNPY_LONGZ
NPY_CFLOATZNPY_CDOUBLEZNPY_CHARZNPY_LONGDOUBLEZunsigned_longZ	NPY_ULONGZNPY_LONGLONGZunsigned_long_longZNPY_ULONGLONG)r   r    df1bswiulLFDcgBhHIqQGSNy)r   r   r   r   r   r   r   r   r   r   r   r   r    ) 48Z1216)	r:   r$   2r;   r<   -1z-2z-4z-8)r:   r<   r=   Z2432)r:   r$   r>   r;   r<   r:   )realintegerr   ZcomplexkindZlogicalzdouble complexzdouble precisionbytec                 C   s  t ta| d u rd} tj| sd S ztd|  t	| d}t
|  i i }W d    n1 s5w   Y  | D ]\}}| D ]
}|| || < qF|| || < q>| D ]k}|tvrhi t|< ||  D ]Z}|| | tv r|t| v rtd||t| | || | f  || | t| |< td|||| | f  t|| |  qntd|||| | || | tt f  qnq^td W d S  ty } ztd|  W Y d }~d S d }~ww )	Nz.f2py_f2cmapzReading f2cmap from {!r} ...
rz3	Warning: redefinition of {'%s':{'%s':'%s'->'%s'}}
z	Mapping "%s(kind=%s)" to "%s"
z5	Ignoring map {'%s':{'%s':'%s'}}: '%s' must be in %s
z1Successfully applied user defined f2cmap changes
z;Failed to apply user defined f2cmap changes: %s. Skipping.
)copydeepcopyf2cmap_default
f2cmap_allospathisfileoutmessformatopenevalreadloweritemskeysc2py_mapf2cmap_mappedappenderrmesslist	Exception)Zf2cmap_filer#   r"   kZd1Zk1msg r\   ?C:\wamp64\www\opt\env\Lib\site-packages\numpy/f2py/capi_maps.pyload_f2cmap_file   sN   
"
r^   z%gz%Lgz%dz%hhuz%hdz%huz%uz%ldz%luz(%g,%g)z	(%Lg,%Lg)z\"%s\"z'%c'c                 C   s  d}t | r)d| v r| d }n| d }|| d v r!t| d | S td|  |S t| r/|S t| r5dS t| r;dS d| v r| d  tv r| d  }t| }|d	 }d
| v rd| d
 v rz|| d
 d  }W |S  ty   td| d d| d
 d f  Y |S w d| d
 v r|d tv rt|d  }z|| d
 d  }W |S  ty   |tv rt| }z|t	| d
 d  }W Y |S  ty   td|| d
 d ||| d
 d t
 f  Y nw Y |S w |S t| std|   |S )z
    Determines C type
    voidresultnamevars,getctype: function %s has no return value?!
r    r   typespecr:   Zkindselectorr   z$getctype: "%s %s %s" not supported.
kindz}getctype: "%s(kind=%s)" is mapped to C "%s" (to override define dict(%s = dict(%s="<C typespec>")) in %s/.f2py_f2cmap file).
z2getctype: No C-type found in "%s", assuming void.
)
isfunctionr   rW   ZissubroutineZischaracter_or_characterarrayZisstring_or_stringarrayrQ   rH   KeyErrorstrrI   getcwd
isexternal)varctypeard   Zf2cmapr\   r\   r]   r      sp   
#
r   c                 C   s   t dd| } | S )a^  Rewrite Fortran expression as f2py supported C expression.

    Due to the lack of a proper expression parser in f2py, this
    function uses a heuristic approach that assumes that Fortran
    arithmetic expressions are valid C arithmetic expressions when
    mapping Fortran function calls to the corresponding C function/CPP
    macros calls.

    z\blen\bZ	f2py_slen)resub)exprr\   r\   r]   f2cexpr+  s   rq   c                 C   s   t | r%d| v r| d }n| d }|| d v rt| d | S td|  t| s1tdt|   d}d| v rN| d }d|v rD|d }n
d	|v rNt|d	 }td
|sZtd|rht| rftdt|   d}|S )Nr`   ra   rb   z0getstrlength: function %s has no return value?!
z;getstrlength: expected a signature of a string but got: %s
r$   charselectorr   lenz\(\s*(\*|:)\s*\)z(\*|:)zMgetstrlength:intent(hide): expected a string with defined length but got: %s
r?   )	isstringfunctionr   rW   isstringreprrq   rn   matchisintent_hide)rk   rm   rs   r\   r\   r]   r   :  s2   


r   c           	      C   sn  i }t |rt|st||d< d|d< d|d< |S t|r,d|d< d|d< d|d< |S t|r5t|d }d||d< ztt|d |d< W n	 tyT   Y nw d	||d< tt	||d< tt	|d
g dd
 |d< t
t	|D ]9}g }|| tv r|| g}ntD ]}td| || r|| q|D ]}t|t| krd||<  nqqyd\|d< }|D ]}|d }|dvrd|d ||f |d< q|d r|d d d
 |d< d\|d< }|d D ]<}|d }|dvrd|d ||f |d< qt|rtd|  d|d |df |d< q|r%tdt| t|f  q|d r5|d d d
 |d< |S )Nsize0rankr:   dimsr$   	dimensionr   ,r   z	rank*[-1]z.*?\b%s\b.*)r:   r   Zsetdims)r   :z(*)z(:)z%s#varname#_Dims[%d]=%s,Z	cbsetdimsz?getarrdims:warning: assumed shape array, using 0 instead of %r
r   z]getarrdims: If in call-back function: array argument %s must have bounded dimensions: got %s
)ru   isarrayr   isscalarrE   joinrv   rO   rY   rs   rangedepargsrn   rw   rV   indexisintent_inrL   rW   )	rm   rk   verboseretdimr(   vvar"   r\   r\   r]   r	   V  s   51







r	   c                 C   s  t |r(d|v r|d }n|d }||d v r t||d | S td|  dS | | }}d}t|r6d}nt|r<d}| }t|rY|d	 D ]}|d d
 dkrX|d
d  } nqFd}t|}	t|rnt| |\}}
d|
 }t	|rt|rd| |t
|	 t|	 |f }n
d| |t
|	 |f }d|t
|	 f }||fS t|rt|rd| |t||f }n
d| |t||f }d|t|f }||fS t|r|d }tt|}d| ||t|	 d||f }| |krd| |t|	 d|f }||fS d||t|	 d|| f }||fS t|rDd}| tv r8t|  tv r8dtt|   v r8tt|   d }|| ks6d| }nd}d| |f }|}||fS td|   ||fS )Nr`   ra   rb   rc   r:   r:   r:   inputz	in/outputintent   out=z, optional\n    Default: %sz%s : %s rank-0 array(%s,'%s')%sz%s : %s %s%sz%s : %sz*%s : %s rank-0 array(string(len=%s),'c')%sz%s : %s string(len=%s)%sz%s : string(len=%s)r}   z.%s : %s rank-%s array('%s') with bounds (%s)%sr~   )%s : rank-%s array('%s') with bounds (%s)z8%s : rank-%s array('%s') with bounds (%s) and %s storageargnamez => %sz%s : call-back function%sz7getpydocsign: Could not resolve docsignature for "%s".
)rf   r
   rW   r   isintent_inoutisintent_outr   hasinitvaluer   r   rT   c2pycode_mapru   r   r   rv   rs   r   rj   lcb_maplcb2_map)rm   rk   afsigZsigoutoptout_arZ   initrl   showinitr   r{   Zuar\   r\   r]   r
     s   

#


*

r
   c                 C   s   t |}t|rt|sd| t|f }|S t|r'd| t| t| f }|S t|rB|d }tt|}d| |t| d	|f }|S )Nz%%s : rank-0 array(string(len=%s),'c')z%s : rank-0 array(%s,'%s')r}   r   r~   )
r   ru   r   r   r   rT   r   rv   rs   r   )rm   rk   rl   r   r   r{   r\   r\   r]   r     s*   
	r   c                 C   sD  t |r	d\}}nd\}}t|r|d }|}t|st|rti }z1|d }d|v r<t|dd d\|d< |d	< nt|i i }t|jt|j	|d< |d	< W n t
ya   td
|| f w t|rpd|d |d	 f }||fS t |r|s~d\}}|d dkrd|dd dd }|d dkrd|dd  }||fS )N)z""z''r   =r~   r   r   @,@init.rinit.izMgetinit: expected complex number `(r,i)' but got `%s' as initial value of %r.z (capi_c.r=%s,capi_c.i=%s,capi_c)r   'z"%s""z\"z'%s')ru   r   	iscomplexiscomplexarrayr   splitrO   rh   rA   imagrY   
ValueErrorr   replace)rm   rk   r   r   r   r   r\   r\   r]   r     sJ   


	r   c                 C   sD   t | st| rt| }| d d|}|S t| st| r dS dS )Nrr   Zf2py_lenr$   )ru   isstringarrayr   getZischaracterZischaracterarray)rk   elsizer\   r\   r]   
get_elsize  s   r   c                 C   s~  | }t |r|d D ]}|dd dkr|dd } nq
| |t|d}g }t D ]\}}||r:|d|  q+|rEd||d< nd|d< t|rRd	|d
< n|d tv rat|d  |d
< nd|d
< t| |\|d< |d< t	|rt
|rt|st|d dd d\|d< |d< t|r| |d< | tv rt|  |d< tt|   d |d< tt|   d |d< tt|   d |d< tt|   d |d< n| |d< td| tt f  t|rt||d< t|rt|t| |}t|d }|d tv rt|d  |d< t||d < t|rg td!t d"td#td$td%td&t
d't t!t"t
d(td)td*t#d+t$d,t%d-t t&t"t%d.td/t'd/t(d0}	g }
t)d1t*|	d2D ]}|	| |r}|
|	|d   qkt|r|
d3| |d f  t|rd4t+d5d6 |d |}|
d7|  t|rd8| |d d4|
f |d9< nd:|d | |d d4|
f |d9< t!|r|d t,v rd;| t,|d  f |d<< t|rd=| | f |d<< t|rd>|  |d<< |d t,v rd?| t,|d  f |d@< dAt,|d   |dB< t|r'dC| | f |d@< t-| |\|dD< |dE< t.|r=|dF |dF< |S )Gz
    varname,ctype,atype
    init,init.r,init.i,pytype
    vardebuginfo,vardebugshowvalue,varshowvalue
    varrformat

    intent
    r   Nr   r   )varnameZ
outvarnamerl   zF2PY_%s|ZF2PY_INTENT_INr8   Z
varrformatrl   Or   r   r   r   r   r   r   Z	cbnamekeyZcbname
maxnofargs
nofoptargsZdocstrZcbdocstrZlatexdocstrZcblatexdocstrz5sign2map: Confused: external %s is not in lcb_map%s.
lengthr}   atyper   r   outputZinoutputrequiredoptionalZhiddenzcomplex scalarZscalarr   arrayzcomplex arrayzstring arrayzcomplex functionfunctioncallbackZ	auxiliaryr      zslen(%s)=%sr~   c                 S   s   d| |f S )Nz%s|%sr\   )xr9   r\   r\   r]   <lambda>n  s    zsign2map.<locals>.<lambda>zdims(%s)zdebug-capi:%s=>%s:%sZvardebuginfozdebug-capi:%s %s=%s:%sdebug-capi:%s=%sZvardebugshowvalue"debug-capi:slen(%s)=%%d %s=\"%%s\"zdebug-capi:%s=%%pz#name#:%s=%sZvarshowvalue%sshowvalueformatz#name#:slen(%s)=%%d %s=\"%%s\"	pydocsignpydocsignoutnote)/r   r   Zisintent_dictrR   rV   r   r   c2buildvalue_mapr   r   r   r   r   rj   r   r   rW   rX   rS   ru   r   
dictappendr	   rE   
c2capi_mapr   	debugcapir   r   Z
isrequired
isoptionalrx   Zl_andr   Zl_notr   r   iscomplexfunctionrf   isintent_callbackZisintent_auxr   rs   mapcformat_mapr
   hasnote)rm   rk   r   rZ   r   Zintent_flagsr#   r&   r   ilZrlr(   Zddimr\   r\   r]   r      s*  	

		












r   c           	      C   s  | d }t | }||dd| | t|td| || t| p%dt| p*dt| p/dd}d|v r;d|d< nd|d< d|v rHd	|d
< nd
|d
< i ad| v r| d 	 D ]@}|t
jv rt
j| D ]3}|d }d| d | v r| d | d 	 D ]}| d | d | |d kr|} nq||d t|< qdqXnd| v r| d rtd|d t| d f  t| tpd|d< t| rbd| v r| d }n| d }||d< t|| \|d< |d< t| d | |d< t| r| d | d |d< dg| d | d< |d tv rt|d  |d< nd|d< tdt|d   t| r>|d tv r1d|t|d  f |d< t| r>d ||f |d< t| rbt| d | |d!< |d! d"krbtd#t| d   d$|d!< t| rr| d |d< dg| d< |S )%zV
    name,NAME,begintitle,endtitle
    rname,ctype,rformat
    routdebugshowvalue
    ra   _\_	end of %sr:   )ra   ZtexnameZ
name_lowerNAME
begintitleendtitleZfortrannameZFORTRANNAMEZcallstatementusercode	usercode1	F_FUNC_USF_FUNCZF_WRAPPEDFUNC_USZF_WRAPPEDFUNCZuser   r   r   Z	externalszMroutsign2map: Confused: function %s has externals %s but no "use" statement.
Zcallprotoargumentr`   rnamer   r   rb   rl   r   Z
resultnoteSee elsewhere.Zrformatr   z.routsign2map: no c2buildvalue key for type %s
r   Zroutdebugshowvaluer   Zrlengthr?   zzroutsign2map: expected explicit specification of the length of the string returned by the fortran function %s; taking 10.
10)Zgetfortrannamer   rQ   uppergentitleZgetcallstatementgetusercodegetusercode1r   rS   r   Zcb_maprW   rv   Zgetcallprotoargumentrf   r
   r   Zhasresultnoter   r   r   rt   r   r   )	routra   fnamer   r)   unlnrZ   rm   r\   r\   r]   r     s   



















r   c                 C   s   t | r| d | d  | d ddd}n| d | d  | d ddd}t| p.g |d< t| r;| d |d< t| p@d|d	< t| pHd|d
< | d r\t| d d pXd|d< nd|d< t| ped|d< d| v rr| d |d< d| v r|| d |d< |S )z
    modulename
    ra   r   r   )Zf90modulenameZF90MODULENAMEZtexf90modulename)
modulenameZ
MODULENAMEZtexmodulenameZrestdocr   r:   r   r   bodyr   Zinterface_usercodeZpymethoddefZcoutputZf2py_wrapper_output)ismoduler   r   Z
getrestdocr   r   r   Zgetpymethoddef)mr   r\   r\   r]   r     s.   

r   c                 C   s   d| i}|d |d< t ||d< |d tv r$t|d  |d< t||d< |d tv r4dt|d   |d< t|r@t|t| |}t| |\|d< |d	< t|rZ|d
 |d
< dg|d
< |S )Nr   Z	varname_irl   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r	   r
   r   )rm   rk   r   r   r\   r\   r]   r     s   
r   c                 C   s  d| d |f dd}t | r0d| d v rd}nd}d|| d  | d  f |d	< d
|d< n
|d |d	< d|d< | d |d< t|d |d< td|d  |d< t| |d< d|d< |d dkrgd|d< n|d |d< |d dkrt| r|d|d< nd|d< |d tv rdt|d   |d< t| rt| |d< t	| rd| v r| d }n| d }t
| d | r| d | d |d< dg| d | d< ||d< t|| \|d< |d < t| rd!|d< nt
| r| d |d< dg| d< d"}d"}d#| v rd| v r| d# D ]}| d | }ttt|r|d$ }t|r|d$ }qt||d%< t||d&< t
| rCt	| rCd| v rC| d |d'< dg| d< |S )(z\
    name,begintitle,endtitle,argname
    ctype,rctype,maxnofargs,nofoptargs,returncptr
    zcb_%s_in_%sra   r:   )ra   
returncptrr   r   r   z	%s(%s,%s)ZcallbacknameZexternZstaticr   r   r   r   rl   r_   Zrctyper   z3
#ifdef F2PY_CB_RETURNCOMPLEX
return_value=
#endif
r   zreturn_value=r   r   Z	strlengthr`   rb   r   r   r   r   r   z8
#ifdef F2PY_CB_RETURNCOMPLEX
#ctype#
#else
void
#endif
r   argsr   r   r   Zroutnote)r   rQ   r   r   r   r   r   rt   r   rf   r   r
   Zl_orr   r   r   rv   )r   Zumr   r   rm   Znofargsr   rk   r\   r\   r]   r   
  s~   








r   c                 C   s   | t |d}t|rd|d< |d tv r#t|d  |d< t||d< |d tv r3dt|d   |d< t|r@t|t| |}nt|rNt	||d< d	|d
< t
| |\|d< |d< t|rh|d |d< dg|d< t| ||d< |S )N)r   rl   r   rl   r   r   r   r   ry   r$   r{   r   r   r   r   Z	arrdocstr)r   r   r   r   r   r   r   r	   ru   r   r
   r   r   )rm   rk   r   r\   r\   r]   r   \  s&   
r   )r   )N))__doc__r:   r   versionZf2py_versionrE   rn   rI   Zcrackfortranr   r   Zauxfuncs__all__Zusing_newcorer   r   r   rT   r   r   r   rH   rF   rG   rU   r^   r   r   rq   r   r	   r
   r   r   r   r   r   r   r   r   r   r\   r\   r\   r]   <module>   s(  	
	
	
	
	

,	
3
=J#jQ
R