o
    6aTU                     @   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_   5/usr/lib/python3/dist-packages/numpy/f2py/auxfuncs.pyrS   >   s   rS   c                 C   s   dt v S )Ncapi)debugoptionsvarr_   r_   r`   r   C      r   c                 C   s   d| v o| d dkot |  S )Ntypespec	characterr#   rc   r_   r_   r`   	_isstringG   s   ri   c                 C   s   t | ot|  S N)ri   r   rc   r_   r_   r`   rC   L      rC   c                 C   s   t | od| vS )NcharselectorrC   rc   r_   r_   r`   ischaracterP      rn   c                 C   s   t | ot| S rj   )r   ri   rc   r_   r_   r`   rD   T   ro   rD   c                 C   s   t | o| d d dkS )N	dimensionz(*))rD   rc   r_   r_   r`   r   X   s   r   c                 C   s   d| v ot |  S Nrp   rh   rc   r_   r_   r`   r   ^   rk   r   c                 C   s   t | pt| pt|  S rj   )r   rC   r#   rc   r_   r_   r`   rA   b   s   rA   c                 C      t | o
| ddv S Nrf   )complexzdouble complexrA   rZ   rc   r_   r_   r`   r   f      r   c                 C      t | o
| ddkS )Nrf   logicalrv   rc   r_   r_   r`   r4   k      r4   c                 C   rx   )Nrf   integerrv   rc   r_   r_   r`   r'   o   rz   r'   c                 C   rx   )Nrf   realrv   rc   r_   r_   r`   isreals   rz   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 )Nkindselector*kindKeyErrorrc   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   rf   r{   ry   8rA   rZ   r   rc   r_   r_   r`   r9      
   r9   c                 C   *   t | sdS | ddkrdS t| dkS )Nr   rf   r{   -1r   rc   r_   r_   r`   rJ      r   rJ   c                 C   r   )Nr   rf   r{   -2r   rc   r_   r_   r`   rN      r   rN   c                 C   r   )Nr   rf   r{   -4r   rc   r_   r_   r`   rI      r   rI   c                 C   r   )Nr   rf   r{   -8r   rc   r_   r_   r`   rL      r   rL   c                 C   *   t | sdS | ddksdS t| dkS )Nr   rf   r|   r   r   rc   r_   r_   r`   r!      r   r!   c                 C   r   )Nr   rf   r|   16r   rc   r_   r_   r`   r7      r   r7   c                 C   s   t | sdS t| dkS )Nr   32)r   r   rc   r_   r_   r`   r6      s   r6   c                 C   rs   rt   )r   rZ   rc   r_   r_   r`   r      rw   r   c                 C   s"   t | o| ddkot| dkS )Nrf   r{   1r   rZ   r   rc   r_   r_   r`   r&         
r&   c                 C   "   t | o| ddv ot| dkS )Nrf   r   r   r   rc   r_   r_   r`   rK      r   rK   c                 C   r   )Nrf   r   r   r   rc   r_   r_   r`   rO      r   rO   c                 C   r   )Nrf   r   r   r   rc   r_   r_   r`   isunsignedarray   r   r   c                 C   r   )Nrf   r   r   r   rc   r_   r_   r`   rM      r   rM   c                 C   r   )Nrf   r   r   r   rc   r_   r_   r`   issigned_chararray   r   r   c                 C   r   )Nrf   r   2r   rc   r_   r_   r`   issigned_shortarray   r   r   c                 C   r   )Nrf   r   4r   rc   r_   r_   r`   issigned_array   r   r   c                 C   r   )Nrf   r   r   r   rc   r_   r_   r`   rB      r   rB   c                 C      d| v o	d| d v S )Nattrspecallocatabler_   rc   r_   r_   r`   r         r   c                 C   s   d| vpt |  S rr   rm   rc   r_   r_   r`   	ismutable   rk   r   c                 C      d| v S )N
modulenamer_   routr_   r_   r`   r<      re   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   
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varsrp   :FrZ   )r   adr_   r_   r`   r     s   
r   c                 C      t | pt| S rj   )r<   r   r   r_   r_   r`   requiresf90wrapper   ro   r   c                 C   r   rj   )r$   rF   r   r_   r_   r`   r@   $  ro   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.
        Run the following test before using it in your applications:
        $(f2py install dir)/test-site/{b/runme_scalar,e/runme}
        When using GNU gcc/g77 compilers, codes should work correctly.
    **************************************************************
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 )N	externalsr_   r   r_   r_   r`   r   r  ro   r   c                 C   r   )Nf2pyenhancements
threadsafer_   r   r_   r_   r`   rH   v  s   
rH   c                 C   r   )Nr   r_   r   r_   r_   r`   hasvariables{  ro   r   c                 C   s(   d| v od| d v od| d vot | S )Nr   optionalrequired)r1   rc   r_   r_   r`   r=     s
   
r=   c                 C   r   )Nr   externalr_   rc   r_   r_   r`   r#     r   r#   c                 C   s   t |  ot| S rj   )r=   r1   rc   r_   r_   r`   r?     rk   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_   rc   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_   rc   r_   r_   r`   r/     s   



r/   c                 C      d|  dg v S )Nr   r   r   rc   r_   r_   r`   r2     ro   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   rc   r_   r_   r`   r-     s   r-   c                 C   s
   t |  S rj   )r-   rc   r_   r_   r`   r1        
r1   c                 C   r   )Ncr   r   rc   r_   r_   r`   r)     ro   r)   c                 C   r   )Ncacher   r   rc   r_   r_   r`   isintent_cache  ro   r   c                 C   r   )Ncopyr   r   rc   r_   r_   r`   r+     ro   r+   c                 C   r   )N	overwriter   r   rc   r_   r_   r`   r3     ro   r3   c                 C   r   )Ncallbackr   r   rc   r_   r_   r`   r*     ro   r*   c                 C   r   )Nr   r   r   rc   r_   r_   r`   r0     ro   r0   c                 C   r   )Nauxr   r   rc   r_   r_   r`   r(     ro   r(   c                 C   r   )Naligned4r   r   rc   r_   r_   r`   isintent_aligned4  ro   r   c                 C   r   )Naligned8r   r   rc   r_   r_   r`   isintent_aligned8  ro   r   c                 C   r   )N	aligned16r   r   rc   r_   r_   r`   isintent_aligned16  ro   r   	INTENT_ININTENT_INOUT
INTENT_OUTINTENT_HIDEINTENT_CACHEINTENT_COPTIONALINTENT_INPLACEINTENT_ALIGNED4INTENT_ALIGNED8INTENT_ALIGNED16c                 C   r   )Nr   privater_   rc   r_   r_   r`   r>     r   r>   c                 C   r   )N=r_   rc   r_   r_   r`   r     re   r   c                 C   s   t | sdS | d d dv S )Nr   r   )"')r   rc   r_   r_   r`   hasinitvalueasstring  r   r   c                 C   r   )Nnoter_   rc   r_   r_   r`   r     re   r   c                 C   r   r   )r$   r   r   r_   r_   r`   r     r   r   c                 C   r   )Ncommonr_   r   r_   r_   r`   r     re   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     re   r   c                 C   s   t | d uS rj   )r   r   r_   r_   r`   r     s   r   c                 C      dS )Nr   r_   rc   r_   r_   r`   istrue"     r   c                 C   r   r   r_   rc   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 rj   )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   rd   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  re   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   	blocknamecommentcounterrr_   r_   r`   getmultilineblocka  sF   


r  c                 C   
   t | dS )N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 )Ncallprotoargumentr   )r  z<warning: callstatement is defined without callprotoargument
r   )getctypezchar*size_tr   r   _typedefr   ,void)r  r   rS   	capi_mapsr  rP   rE   rQ   r%   extendr*   r)   rR   rA   r   rC   r   r  r  )
r   cb_mapr  r  	arg_types
arg_types2nrd   ctype
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  )N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,  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 )N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 rj   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 )Nrq   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`   r0        zreplace.<locals>.<listcomp>c                    s   g | ]}t | qS r_   r=  r>  )r   r@  r_   r`   r0    rA  r7  separatorsforz#%s#)r  r  r1  rT   r  r;  )r  r   r@  r4  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   _rB  )r  r  r   r1  r  r  dict)rdarr   r4  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_checkneedneedsrB  r   rD  	supertextr  zapplyrules: ignoring rule %s.
r   )r  r  r   r   r   append_needsr1  r  rT   r  rE  typesFunctionTyper	   r  r  )rulesr   rd   retr  rrresr4  r	  rG  rH  r_   r_   r`   r     s|   



	

r   )r   r   )r  )}__doc__pprintr[   rO  	functoolsr   r  r   r   __all__versionf2py_versionstderrr]   r	   rU   rY   rb   r   rS   r   ri   rC   rn   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   



$	
