o
    $elX                     @   s  d 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mZ g dZ	ej
ZejjZejZi Zg ZdZdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z d$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)d6d7 Z*d8d9 Z+d:d; Z,d<d= Z-d>d? Z.d@dA Z/dBdC Z0dDdE Z1dFdG Z2dHdI Z3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7dRdS Z8dTdU Z9dVdW Z:dXdY Z;dZd[ Z<d\d] Z=d^d_ Z>d`da Z?dbdc Z@ddde ZAdfdg ZBdhdi ZCdjdk ZDdldm ZEdndo ZFdpdq ZGdrds ZHdtdu ZIdvdw ZJdxdy ZKdzd{ ZLd|d} ZMd~d ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXeJdeKdeLdeMdePdeOdeGdeTdeVdeWdeXdiZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd ZeG dd defZgG dd dZhdd Zidd Zjdd Zkdd ZlddĄ ZmdddƄZnddȄ Zoi fddʄZpdd̄ Zqdd΄ ZrddЄ Zsdd҄ ZtddԄ Zuddք Zvdd؄ Zwddڄ Zxdd܄ Zyddd߄Zzdd Z{i fddZ|dS )aW  

Auxiliary functions for f2py2e.

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 (BSD style) LICENSE.


NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
$Date: 2005/07/24 19:01:55 $
Pearu Peterson

    N)reduce   )__version__)cfuncs)R
applyrules	debugcapi
dictappenderrmessgentitlegetargs2getcallprotoargumentgetcallstatementgetfortrannamegetpymethoddef
getrestdocgetusercodegetusercode1hasbodyhascallstatement	hascommonhasexternalshasinitvaluehasnotehasresultnoteisallocatableisarrayisarrayofstrings	iscomplexiscomplexarrayiscomplexfunctioniscomplexfunction_warnisdoubleisdummyroutine
isexternal
isfunctionisfunction_wrapisint1array	isintegerisintent_aux
isintent_cisintent_callbackisintent_copyisintent_dictisintent_hideisintent_inisintent_inoutisintent_inplaceisintent_nothideisintent_outisintent_overwrite	islogicalislogicalfunctionislong_complexislong_doubleislong_doublefunctionislong_longislong_longfunctionismoduleismoduleroutine
isoptional	isprivate
isrequired	isroutineisscalarissigned_long_longarrayisstringisstringarrayisstringfunctionissubroutineissubroutine_wrapisthreadsafe
isunsignedisunsigned_charisunsigned_chararrayisunsigned_long_longisunsigned_long_longarrayisunsigned_shortisunsigned_shortarrayl_andl_notl_oroutmessreplaceshow
stripcommathrow_errorc                 C   s    t ddrtj|  d S d S )Nverboser   )optionsgetsysstdoutwrite)t r_   CD:\Projects\ConvertPro\env\Lib\site-packages\numpy/f2py/auxfuncs.pyrS   >   s   rS   c                 C   s   dt v S )NZcapi)debugoptionsvarr_   r_   r`   r   C      r   c                 C   s   d| v o| d dkot |  S )Ntypespec	characterr#   rb   r_   r_   r`   	_isstringG   s   rh   c                 C   s   t | ot|  S N)rh   r   rb   r_   r_   r`   rC   L      rC   c                 C   s   t | od| vS )NZcharselectorrC   rb   r_   r_   r`   ischaracterP      rl   c                 C   s   t | ot| S ri   )r   rh   rb   r_   r_   r`   rD   T   rm   rD   c                 C   s   t | o| d d dkS )N	dimensionz(*))rD   rb   r_   r_   r`   r   X   s   r   c                 C   s   d| v ot |  S Nrn   rg   rb   r_   r_   r`   r   ^   rj   r   c                 C   s   t | pt| pt|  S ri   )r   rC   r#   rb   r_   r_   r`   rA   b   s   rA   c                 C      t | o
| ddv S Nre   )complexzdouble complexrA   rZ   rb   r_   r_   r`   r   f      r   c                 C      t | o
| ddkS )Nre   logicalrt   rb   r_   r_   r`   r4   k      r4   c                 C   rv   )Nre   integerrt   rb   r_   r_   r`   r'   o   rx   r'   c                 C   rv   )Nre   realrt   rb   r_   r_   r`   isreals   rx   r{   c                 C   sH   z| d d W S  t y#   z	| d d W  Y S  t y"   Y Y d S w w )NZkindselector*kindKeyErrorrb   r_   r_   r`   get_kindw   s   r   c                 C   s*   t | sdS | ddvrdS t| dkS )Nr   re   ry   rw   8rA   rZ   r   rb   r_   r_   r`   r9      
   r9   c                 C   *   t | sdS | ddkrdS t| dkS )Nr   re   ry   -1r   rb   r_   r_   r`   rJ      r   rJ   c                 C   r   )Nr   re   ry   -2r   rb   r_   r_   r`   rN      r   rN   c                 C   r   )Nr   re   ry   -4r   rb   r_   r_   r`   rI      r   rI   c                 C   r   )Nr   re   ry   -8r   rb   r_   r_   r`   rL      r   rL   c                 C   *   t | sdS | ddksdS t| dkS )Nr   re   rz   r   r   rb   r_   r_   r`   r!      r   r!   c                 C   r   )Nr   re   rz   Z16r   rb   r_   r_   r`   r7      r   r7   c                 C   s   t | sdS t| dkS )Nr   32)r   r   rb   r_   r_   r`   r6      s   r6   c                 C   rq   rr   )r   rZ   rb   r_   r_   r`   r      ru   r   c                 C   s"   t | o| ddkot| dkS )Nre   ry   1r   rZ   r   rb   r_   r_   r`   r&         
r&   c                 C   "   t | o| ddv ot| dkS )Nre   r   r   r   rb   r_   r_   r`   rK      r   rK   c                 C   r   )Nre   r   r   r   rb   r_   r_   r`   rO      r   rO   c                 C   r   )Nre   r   r   r   rb   r_   r_   r`   isunsignedarray   r   r   c                 C   r   )Nre   r   r   r   rb   r_   r_   r`   rM      r   rM   c                 C   r   )Nre   r   r   r   rb   r_   r_   r`   issigned_chararray   r   r   c                 C   r   )Nre   r   2r   rb   r_   r_   r`   issigned_shortarray   r   r   c                 C   r   )Nre   r   4r   rb   r_   r_   r`   issigned_array   r   r   c                 C   r   )Nre   r   r   r   rb   r_   r_   r`   rB      r   rB   c                 C      d| v o	d| d v S )NattrspecZallocatabler_   rb   r_   r_   r`   r         r   c                 C   s   d| vpt |  S rp   rk   rb   r_   r_   r`   	ismutable   rj   r   c                 C      d| v S )N
modulenamer_   routr_   r_   r`   r<      rd   r<   c                 C      d| v o	d| d kS )Nblockmoduler_   r   r_   r_   r`   r;      r   r;   c                 C   r   )Nr   functionr_   r   r_   r_   r`   r$     r   r$   c                 C   s"   t | rdS tot| ot|  S Nr   )r)   	wrapfuncsr$   r#   r   r_   r_   r`   r%     s   r%   c                 C   r   )Nr   Z
subroutiner_   r   r_   r_   r`   rF     r   rF   c                 C   s   t | rdS t| ot| S r   )r)   rF   hasassumedshaper   r_   r_   r`   rG        rG   c                 C   sV   |  drdS | d D ]}| d  |i  dg D ]}|dkr'd| d<   dS qqdS )Nr   Targsvarsrn   :FrZ   )r   adr_   r_   r`   r     s   
r   c                 C      t | pt| S ri   )r<   r   r   r_   r_   r`   requiresf90wrapper   rm   r   c                 C   r   ri   )r$   rF   r   r_   r_   r`   r@   $  rm   r@   c                 C   F   t | sdS d| v r| d }n| d }|| d v r!t| d | S dS Nr   resultnamer   )r$   r4   r   r   r_   r_   r`   r5   (     
r5   c                 C   r   r   )r$   r9   r   r_   r_   r`   r:   4  r   r:   c                 C   r   r   )r$   r7   r   r_   r_   r`   r8   @  r   r8   c                 C   r   r   )r$   r   r   r_   r_   r`   r   L  r   r   c                 C   s   t | r
td dS dS )Na      **************************************************************
        Warning: code with a function returning complex value
        may not work correctly with your Fortran compiler.
        When using GNU gcc/g77 compilers, codes should work
        correctly for callbacks with:
        f2py -c -DF2PY_CB_RETURNCOMPLEX
    **************************************************************
r   r   )r   rS   r   r_   r_   r`   r    X  s   r    c                 C   r   r   )r$   rC   r   r_   r_   r`   rE   f  r   rE   c                 C      d| v o| d S )NZ	externalsr_   r   r_   r_   r`   r   r  rm   r   c                 C   r   )Nf2pyenhancementsZ
threadsafer_   r   r_   r_   r`   rH   v  s   
rH   c                 C   r   )Nr   r_   r   r_   r_   r`   hasvariables{  rm   r   c                 C   s(   d| v od| d v od| d vot | S )Nr   optionalrequired)r1   rb   r_   r_   r`   r=     s
   
r=   c                 C   r   )Nr   Zexternalr_   rb   r_   r_   r`   r#     r   r#   c                 C   s   t |  ot| S ri   )r=   r1   rb   r_   r_   r`   r?     rj   r?   c                 C   sp   d| vrdS d| d v rdS d| d v rdS d| d v rdS d| d v r&dS d| d v r.dS d	| d v r6dS dS )
Nintentr   hider   inplaceinoutinoutoutinr_   rb   r_   r_   r`   r.     s   r.   c                 C   sD   d| v o!d| d v sd| d v o!d| d vo!d| d vo!d| d vS )Nr   r   r   r   r   r   r_   rb   r_   r_   r`   r/     s   



r/   c                 C      d|  dg v S )Nr   r   r   rb   r_   r_   r`   r2     rm   r2   c                 C   s<   d| v od| d v pd| d v od| d vot tt|  S )Nr   r   r   r   )rR   r/   r0   rb   r_   r_   r`   r-     s   r-   c                 C   s
   t |  S ri   )r-   rb   r_   r_   r`   r1        
r1   c                 C   r   )Ncr   r   rb   r_   r_   r`   r)     rm   r)   c                 C   r   )Ncacher   r   rb   r_   r_   r`   isintent_cache  rm   r   c                 C   r   )Ncopyr   r   rb   r_   r_   r`   r+     rm   r+   c                 C   r   )N	overwriter   r   rb   r_   r_   r`   r3     rm   r3   c                 C   r   )Ncallbackr   r   rb   r_   r_   r`   r*     rm   r*   c                 C   r   )Nr   r   r   rb   r_   r_   r`   r0     rm   r0   c                 C   r   )NZauxr   r   rb   r_   r_   r`   r(     rm   r(   c                 C   r   )NZaligned4r   r   rb   r_   r_   r`   isintent_aligned4  rm   r   c                 C   r   )NZaligned8r   r   rb   r_   r_   r`   isintent_aligned8  rm   r   c                 C   r   )NZ	aligned16r   r   rb   r_   r_   r`   isintent_aligned16  rm   r   Z	INTENT_INZINTENT_INOUTZ
INTENT_OUTZINTENT_HIDEZINTENT_CACHEZINTENT_CZOPTIONALZINTENT_INPLACEZINTENT_ALIGNED4ZINTENT_ALIGNED8ZINTENT_ALIGNED16c                 C   r   )Nr   privater_   rb   r_   r_   r`   r>     r   r>   c                 C   r   )N=r_   rb   r_   r_   r`   r     rd   r   c                 C   s   t | sdS | d d dv S )Nr   r   )"')r   rb   r_   r_   r`   hasinitvalueasstring  r   r   c                 C   r   )NZnoter_   rb   r_   r_   r`   r     rd   r   c                 C   r   r   )r$   r   r   r_   r_   r`   r     r   r   c                 C   r   )Ncommonr_   r   r_   r_   r`   r     rd   r   c                 C   s4   t | rdS t| r| d D ]	}t|r dS qdS )Nr   bodyr   )r   r   containscommon)r   br_   r_   r`   r     s   r   c                 C   s8   t | rdS t| sdS | d D ]	}t|r dS qdS )Nr   r   r   )r;   r   containsmodule)r   r   r_   r_   r`   r     s   r   c                 C   r   )Nr   r_   r   r_   r_   r`   r     rd   r   c                 C   s   t | d uS ri   )r   r   r_   r_   r`   r     s   r   c                 C      dS )Nr   r_   rb   r_   r_   r`   istrue"     r   c                 C   r   r   r_   rb   r_   r_   r`   isfalse&  r   r   c                   @   s   e Zd ZdS )	F2PYErrorN)__name__
__module____qualname__r_   r_   r_   r`   r   *  s    r   c                   @   s   e Zd Zdd Zdd ZdS )rW   c                 C   s
   || _ d S ri   )mess)selfr   r_   r_   r`   __init__0  r   zthrow_error.__init__c                 C   s   d|| j f }t|)Nz

  var = %s
  Message: %s
)r   r   )r   rc   r   r_   r_   r`   __call__3  s   zthrow_error.__call__N)r   r   r   r   r   r_   r_   r_   r`   rW   .  s    rW   c                  G   N   dg }}t t| D ]}d|||f }|d|  qtd|d|f S )Nlambda v%s,f%d=f[%d]f%d(v)%s:%sz and rangelenappendevaljoinfll2ir_   r_   r`   rP   8  
   
rP   c                  G   r   )Nr   r   r   r   z or r   r   r_   r_   r`   rR   @  r   rR   c                 C   s   t dS )Nzlambda v,f=f:not f(v))r   )r   r_   r_   r`   rQ   H  rd   rQ   c                 C   s(   z	| d d dkW S  t y   Y dS w )Nr   fortranname r   r~   r   r_   r_   r`   r"   L  s
   r"   c                 C   sT   z| d d }|dkrt |std| d   t W |S  t y)   | d }Y |S w )Nr   r   r   z"Failed to use fortranname from %s
r   )r   r	   )r   r   r_   r_   r`   r   S  s   
r   c                 C   s
  z	| d  |}W n
 ty   Y d S w |sd S |dkr#t|tr#d S t|tr4|t|kr0d S || }|d d dkr|rQd| d t| d |dd   }n|dd  }|dd  dkry|rq|d d d	 t| d
 }|S |d d }|S td|t|f  |S )Nr   r      z'''z
	/* start z multiline (z) */
z
	/* end multiline (z)*/z-%s multiline block should end with `'''`: %s
)rZ   r   
isinstancestrlistr   reprr	   )r   Z	blocknamecommentcounterrr_   r_   r`   getmultilineblocka  sF   


r   c                 C   
   t | dS )NZcallstatementr   r   r_   r_   r`   r     r   r   c           
      C   s  t | ddd}|r|S t| rtd d S ddlm} g g }}tttt| r0|	ddg | d	 D ]B}| d
 | }t
|rAq4||v rL|| d }n%||}ttttt|r[n	t|r`n|d }t|slt|rq|d || q4d|| }	|	sd}	|	S )NZcallprotoargumentr   )r   z<warning: callstatement is defined without callprotoargument
r   )getctypezchar*Zsize_tr   r   Z_typedefr|   ,Zvoid)r   r   rS   Z	capi_mapsr   rP   rE   rQ   r%   extendr*   r)   rR   rA   r   rC   r   r   r   )
r   Zcb_mapr   r   Z	arg_typesZ
arg_types2nrc   ctypeZ
proto_argsr_   r_   r`   r     s>   

r   c                 C   r   )Nusercoder   r   r_   r_   r`   r     r   r   c                 C   s   t | dddS )Nr  r   )r   r   r   r_   r_   r`   r     s   r   c                 C   r   )NZpymethoddefr   r   r_   r_   r`   r     r   r   c                 C   sv   g g }}d| v r7| d }d| v r3| d D ]}||v r | | q|D ]}||vr.| | q#||fS | d }||fS )Nr   sortvars)r   )r   sortargsr   r   r_   r_   r`   getargs  s   


r  c                    s   g  dg }  fddd  D }|   dv rAd D ]}| v r.|| q# D ]}||vr<|| q1 |fS |d  } |fS )Nr   c                    s(   g | ]}t d  | r| vr|qS )r   )r(   ).0r   r   r   r_   r`   
<listcomp>  s    zgetargs2.<locals>.<listcomp>r   r  )rZ   keysr   )r   r  Zauxvarsr   r_   r
  r`   r     s   

r   c                 C   s<   d| vrd S d }| d dkr| d | d f}| d  |d S )NZf2pymultilinesr   zpython moduler   r   )r   kr_   r_   r`   r     s   r   c                 C   s*   dt |  d d }d|d | |d f S )NP         z/*%s %s %s*/r|   )r   )r   r   r_   r_   r`   r
     s   r
   c                 C   s$   t | trttfdd| g S | gS )Nc                 S   s   | || S ri   r_   )xyr   r_   r_   r`   <lambda>  s    zflatlist.<locals>.<lambda>)r   r   r   flatlist)r   r_   r_   r`   r    s   
r  c                 C   s    | r| d dkr| d d S | S )Nro   r  r_   )sr_   r_   r`   rV     s   rV   r   c              	      s   t  trfdd D S t tr fddD S dt   D ];}|dkr-q&d v r>| d v r> d | }n}t  | trWd| |t | q&d|  | q&S )Nc                    s   g | ]}t | qS r_   rT   r	  _m)
defaultsepr   r_   r`   r        zreplace.<locals>.<listcomp>c                    s   g | ]}t | qS r_   r  r  )r   r  r_   r`   r    r  r  separatorsforz#%s#)r   r   r  rT   r   r  )r   r   r  r  sepr_   )r   r  r   r`   rT     s   

 rT   c                 C   s(  t |tr|D ]}t| |} q| S | D ]|}|d dkrq|| v rt | | tr0| | g| |< t | | trSt || trI| | ||  | |< q| | ||  qt | | trt || tr|dkr||  D ]}|| | vr}|| | | | |< qkqt| | || | |< q|| | |< q| S )Nr   _r  )r   r   r   r  r   r   dict)rdarr   r  k1r_   r_   r`   r     s4   
r   c                 C   s  i }t | tr | D ]}t|||}t||}d|v r |S q	|S d| v r,| d |s,|S d| v rEtd| d i||}d|v rEt|d  |  D ]}|dkrV| | ||< qIt | | trgt| | |||< nt | | trg ||< | | D ]}t||i||}	||	v r|| 	|	|  qvn|d dkrqIt | | t
rg ||< | |  D ]l}
t |
tjr|
|rt | | |
 tr| | |
 D ]$}t |t
rtd|i||}d|v r|d }nd	}|| 	t|| qq| | |
 }t |t
r
td|i|}d|v r|d }nd	}|| 	t|| qn
td
t| |   t || trCt|| dkr9|| d ||< || g krC||= qI|S )N_break_checkZneedZneedsr  r   r  Z	supertextr   zapplyrules: ignoring rule %s.
r   )r   r   r   r   r   Zappend_needsr  r   rT   r   r  typesFunctionTyper	   r   r   )rulesr   rc   retr   rrresr  r   r   r!  r_   r_   r`   r     s|   



	

r   )r   r   )r   )}__doc__pprintr[   r$  	functoolsr   r   r   r   __all__versionZf2py_versionstderrr]   r	   rU   rY   ra   r   rS   r   rh   rC   rl   rD   r   r   rA   r   r4   r'   r{   r   r9   rJ   rN   rI   rL   r!   r7   r6   r   r&   rK   rO   r   rM   r   r   r   rB   r   r   r<   r;   r$   r%   rF   rG   r   r   r@   r5   r:   r8   r   r    rE   r   rH   r   r=   r#   r?   r.   r/   r2   r-   r1   r)   r   r+   r3   r*   r0   r(   r   r   r   r,   r>   r   r   r   r   r   r   r   r   r   r   r   	Exceptionr   rW   rP   rR   rQ   r"   r   r   r   r   r   r   r   r  r   r   r
   r  rV   rT   r   r   r_   r_   r_   r`   <module>   s   



$	
