B
    n\BU              R   @   s  d Z ddlmZmZm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 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+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYgRZejZejjZejZi Zg ZdZdZdU Zd[d	 Zd\d] Zd^dE Zd_d` ZdadF Zdbd Zdcd ZdddC Zded Z dfd6 Z!dgd) Z"dhdi Z#djdk Z$dld; Z%dmdL Z&dndP Z'dodK Z(dpdN Z)dqd# Z*drd9 Z+dsd8 Z,dtd  Z-dud( Z.dvdM Z/dwdQ Z0dxdy Z1dzdO Z2d{d| Z3d}d~ Z4dd Z5ddD Z6dd Z7dd Z8dd> Z9dd= Z:dd& Z;dd' Z<ddH Z=ddI Z>dd Z?ddB Z@dd7 ZAdd< ZBdd: ZCdd! ZDdd" ZEddG ZFdd ZGddJ ZHdd ZIdd? ZJdd% ZKddA ZLdd0 ZMdd1 ZNdd4 ZOdd/ ZPdd3 ZQdd+ ZRdd ZSdd- ZTdd5 ZUdd, ZVdd2 ZWdd* ZXdd ZYdd ZZdd Z[eMdeNdeOdePdeSdeRdeJdeWdeYdeZde[diZ\dd@ Z]dd Z^dd Z_dd Z`dd Zadd Zbdd ZcddÄ Zddd Zedd ZfddǄ ZgddɄ ZhG dd˄ deiZjG ddY dYekZlddR ZmddT ZnddS Zodd$ Zpdd ZqdddӄZrdd Zsi fddZtdd Zudd Zvdd Zwddڄ Zxdd Zydd Zzdd Z{dd߄ Z|ddX Z}dddVZ~dd
 Zi fddZd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

    )divisionabsolute_importprint_functionN)reduce   )__version__)cfuncs
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 )Nverboser   )optionsgetsysstdoutwrite)t rb   2lib/python3.7/site-packages/numpy/f2py/auxfuncs.pyrV   @   s    c             C   s   dt kS )NZcapi)debugoptions)varrb   rb   rc   r
   E   s    c             C   s   d| ko| d dkot |  S )Ntypespec	character)r&   )re   rb   rb   rc   	_isstringI   s    rh   c             C   s   t | ot|  S )N)rh   r   )re   rb   rb   rc   rF   N   s    c             C   s   t | od| kS )NZcharselector)rF   )re   rb   rb   rc   ischaracterR   s    ri   c             C   s   t | ot| S )N)r   rh   )re   rb   rb   rc   rG   V   s    c             C   s   t | o| d d dkS )N	dimensionz(*))rG   )re   rb   rb   rc   r   Z   s    c             C   s   d| kot |  S )Nrj   )r&   )re   rb   rb   rc   r   `   s    c             C   s   t | pt| pt|  S )N)r   rF   r&   )re   rb   rb   rc   rD   d   s    c             C   s   t | o| ddkS )Nrf   )complexzdouble complex)rD   r]   )re   rb   rb   rc   r    h   s    c             C   s   t | o| ddkS )Nrf   logical)rD   r]   )re   rb   rb   rc   r7   m   s    c             C   s   t | o| ddkS )Nrf   integer)rD   r]   )re   rb   rb   rc   r*   q   s    c             C   s   t | o| ddkS )Nrf   real)rD   r]   )re   rb   rb   rc   isrealu   s    rp   c             C   sH   y| d d S  t k
rB   y| d d S  t k
r<   Y nX Y nX d S )NZkindselector*Zkind)KeyError)re   rb   rb   rc   get_kindy   s    rs   c             C   s*   t | sdS | ddkrdS t| dkS )Nr   rf   )rn   rm   8)rD   r]   rs   )re   rb   rb   rc   r<      s
    c             C   s*   t | sdS | ddkrdS t| dkS )Nr   rf   rn   z-1)rD   r]   rs   )re   rb   rb   rc   rM      s
    c             C   s*   t | sdS | ddkrdS t| dkS )Nr   rf   rn   z-2)rD   r]   rs   )re   rb   rb   rc   rQ      s
    c             C   s*   t | sdS | ddkrdS t| dkS )Nr   rf   rn   z-4)rD   r]   rs   )re   rb   rb   rc   rL      s
    c             C   s*   t | sdS | ddkrdS t| dkS )Nr   rf   rn   z-8)rD   r]   rs   )re   rb   rb   rc   rO      s
    c             C   s*   t | sdS | ddksdS t| dkS )Nr   rf   ro   rt   )rD   r]   rs   )re   rb   rb   rc   r$      s
    c             C   s*   t | sdS | ddksdS t| dkS )Nr   rf   ro   Z16)rD   r]   rs   )re   rb   rb   rc   r:      s
    c             C   s   t | sdS t| dkS )Nr   Z32)r    rs   )re   rb   rb   rc   r9      s    c             C   s   t | o| ddkS )Nrf   )rl   zdouble complex)r   r]   )re   rb   rb   rc   r!      s    c             C   s"   t | o | ddko t| dkS )Nrf   rn   1)r   r]   rs   )re   rb   rb   rc   r)      s    c             C   s"   t | o | ddko t| dkS )Nrf   )rn   rm   z-1)r   r]   rs   )re   rb   rb   rc   rN      s    c             C   s"   t | o | ddko t| dkS )Nrf   )rn   rm   z-2)r   r]   rs   )re   rb   rb   rc   rR      s    c             C   s"   t | o | ddko t| dkS )Nrf   )rn   rm   z-4)r   r]   rs   )re   rb   rb   rc   isunsignedarray   s    rv   c             C   s"   t | o | ddko t| dkS )Nrf   )rn   rm   z-8)r   r]   rs   )re   rb   rb   rc   rP      s    c             C   s"   t | o | ddko t| dkS )Nrf   )rn   rm   ru   )r   r]   rs   )re   rb   rb   rc   issigned_chararray   s    rw   c             C   s"   t | o | ddko t| dkS )Nrf   )rn   rm   2)r   r]   rs   )re   rb   rb   rc   issigned_shortarray   s    ry   c             C   s"   t | o | ddko t| dkS )Nrf   )rn   rm   4)r   r]   rs   )re   rb   rb   rc   issigned_array   s    r{   c             C   s"   t | o | ddko t| dkS )Nrf   )rn   rm   rt   )r   r]   rs   )re   rb   rb   rc   rE      s    c             C   s   d| kod| d kS )NattrspecZallocatablerb   )re   rb   rb   rc   r      s    c             C   s   d| kpt |  S )Nrj   )rF   )re   rb   rb   rc   	ismutable   s    r}   c             C   s   d| kS )NZ
modulenamerb   )routrb   rb   rc   r?      s    c             C   s   d| kod| d kS )Nblockmodulerb   )r~   rb   rb   rc   r>      s    c             C   s   d| kod| d kS )Nr   Zfunctionrb   )r~   rb   rb   rc   r'     s    c             C   s"   t | rdS to t| o t|  S )Nr   )r,   	wrapfuncsr'   r&   )r~   rb   rb   rc   r(     s    c             C   s   d| kod| d kS )Nr   Z
subroutinerb   )r~   rb   rb   rc   rI     s    c             C   s   t | rdS t| ot| S )Nr   )r,   rI   hasassumedshape)r~   rb   rb   rc   rJ     s    c             C   sZ   |  drdS xF| d D ]:}x4| d  |i  dg D ]}|dkr6d| d< dS q6W qW dS )Nr   Targsvarsrj   :F)r]   )r~   adrb   rb   rc   r     s    
r   c             C   s   t | pt| S )N)r'   rI   )r~   rb   rb   rc   rC   !  s    c             C   sF   t | sdS d| kr| d }n| d }|| d krBt| d | S dS )Nr   resultnamer   )r'   r7   )r~   r   rb   rb   rc   r8   %  s    
c             C   sF   t | sdS d| kr| d }n| d }|| d krBt| d | S dS )Nr   r   r   r   )r'   r<   )r~   r   rb   rb   rc   r=   1  s    
c             C   sF   t | sdS d| kr| d }n| d }|| d krBt| d | S dS )Nr   r   r   r   )r'   r:   )r~   r   rb   rb   rc   r;   =  s    
c             C   sF   t | sdS d| kr| d }n| d }|| d krBt| d | S dS )Nr   r   r   r   )r'   r    )r~   r   rb   rb   rc   r"   I  s    
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"   rV   )r~   rb   rb   rc   r#   U  s
    c             C   sF   t | sdS d| kr| d }n| d }|| d krBt| d | S dS )Nr   r   r   r   )r'   rF   )r~   r   rb   rb   rc   rH   c  s    
c             C   s   d| ko| d S )NZ	externalsrb   )r~   rb   rb   rc   r   o  s    c             C   s   d| kod| d kS )Nf2pyenhancementsZ
threadsaferb   )r~   rb   rb   rc   rK   s  s    c             C   s   d| ko| d S )Nr   rb   )r~   rb   rb   rc   hasvariablesx  s    r   c             C   s(   d| ko&d| d ko&d| d ko&t | S )Nr|   ZoptionalZrequired)r4   )re   rb   rb   rc   r@   |  s    c             C   s   d| kod| d kS )Nr|   Zexternalrb   )re   rb   rb   rc   r&     s    c             C   s   t |  ot| S )N)r@   r4   )re   rb   rb   rc   rB     s    c             C   sp   d| krdS d| d krdS d| d kr,dS d| d kr<dS d| d krLdS d| d kr\dS d	| d krldS dS )
Nintentr   hider   inplaceinoutinoutoutinrb   )re   rb   rb   rc   r1     s    c             C   sD   d| koBd| d ks d| d koBd| d koBd| d koBd| d kS )Nr   r   r   r   r   r   rb   )re   rb   rb   rc   r2     s    c             C   s   d|  dg kS )Nr   r   )r]   )re   rb   rb   rc   r5     s    c             C   s<   d| ko:d| d kp:d| d ko:d| d ko:t tt|  S )Nr   r   r   r   )rU   r2   r3   )re   rb   rb   rc   r0     s    c             C   s
   t |  S )N)r0   )re   rb   rb   rc   r4     s    c             C   s   d|  dg kS )Ncr   )r]   )re   rb   rb   rc   r,     s    c             C   s   d|  dg kS )Ncacher   )r]   )re   rb   rb   rc   isintent_cache  s    r   c             C   s   d|  dg kS )Ncopyr   )r]   )re   rb   rb   rc   r.     s    c             C   s   d|  dg kS )NZ	overwriter   )r]   )re   rb   rb   rc   r6     s    c             C   s   d|  dg kS )Ncallbackr   )r]   )re   rb   rb   rc   r-     s    c             C   s   d|  dg kS )Nr   r   )r]   )re   rb   rb   rc   r3     s    c             C   s   d|  dg kS )NZauxr   )r]   )re   rb   rb   rc   r+     s    c             C   s   d|  dg kS )NZaligned4r   )r]   )re   rb   rb   rc   isintent_aligned4  s    r   c             C   s   d|  dg kS )NZaligned8r   )r]   )re   rb   rb   rc   isintent_aligned8  s    r   c             C   s   d|  dg kS )NZ	aligned16r   )r]   )re   rb   rb   rc   isintent_aligned16  s    r   Z	INTENT_INZINTENT_INOUTZ
INTENT_OUTZINTENT_HIDEZINTENT_CACHEZINTENT_CZOPTIONALZINTENT_INPLACEZINTENT_ALIGNED4ZINTENT_ALIGNED8ZINTENT_ALIGNED16c             C   s   d| kod| d kS )Nr|   Zprivaterb   )re   rb   rb   rc   rA     s    c             C   s   d| kS )N=rb   )re   rb   rb   rc   r     s    c             C   s   t | sdS | d d dkS )Nr   r   )"')r   )re   rb   rb   rc   hasinitvalueasstring  s    r   c             C   s   d| kS )NZnoterb   )re   rb   rb   rc   r     s    c             C   sF   t | sdS d| kr| d }n| d }|| d krBt| d | S dS )Nr   r   r   r   )r'   r   )r~   r   rb   rb   rc   r     s    
c             C   s   d| kS )Ncommonrb   )r~   rb   rb   rc   r     s    c             C   s6   t | rdS t| r2x| d D ]}t|rdS qW dS )Nr   bodyr   )r   r   containscommon)r~   brb   rb   rc   r     s    r   c             C   s:   t | rdS t| sdS x| d D ]}t|r"dS q"W dS )Nr   r   r   )r>   r   containsmodule)r   r   rb   rb   rc   r     s    r   c             C   s   d| kS )Nr   rb   )r~   rb   rb   rc   r     s    c             C   s   t | d k	S )N)r   )r~   rb   rb   rc   r     s    c             C   s   dS )Nr   rb   )re   rb   rb   rc   istrue  s    r   c             C   s   dS )Nr   rb   )re   rb   rb   rc   isfalse#  s    r   c               @   s   e Zd ZdS )	F2PYErrorN)__name__
__module____qualname__rb   rb   rb   rc   r   '  s   r   c               @   s   e Zd Zdd Zdd ZdS )rZ   c             C   s
   || _ d S )N)mess)selfr   rb   rb   rc   __init__-  s    zthrow_error.__init__c             C   s   d|| j f }t|d S )Nz

  var = %s
  Message: %s
)r   r   )r   re   r   rb   rb   rc   __call__0  s    zthrow_error.__call__N)r   r   r   r   r   rb   rb   rb   rc   rZ   +  s   c              G   sR   dg  }}x0t t| D ] }d|||f }|d|  qW td|d|f S )Nzlambda vz%s,f%d=f[%d]zf%d(v)z%s:%sz and )rangelenappendevaljoin)fll2irb   rb   rc   rS   5  s
    
c              G   sR   dg  }}x0t t| D ] }d|||f }|d|  qW td|d|f S )Nzlambda vz%s,f%d=f[%d]zf%d(v)z%s:%sz or )r   r   r   r   r   )r   r   r   r   rb   rb   rc   rU   =  s
    
c             C   s   t dS )Nzlambda v,f=f:not f(v))r   )r   rb   rb   rc   rT   E  s    c             C   s*   y| d d dkS  t k
r$   dS X d S )Nr   fortranname r   )rr   )r~   rb   rb   rc   r%   I  s    c             C   sV   y4| d d }|dkrt |s2td| d   t W n t k
rP   | d }Y nX |S )Nr   r   r   z"Failed to use fortranname from %s
r   )rr   r   )r~   r   rb   rb   rc   r   P  s    c             C   s  y| d  |}W n tk
r&   d S X |s0d S |dkrFt|trFd S t|trh|t|kr`d S || }|d d dkr|rd| d t| d |dd   }n|dd  }|dd  dkr|r|d d d	 t| d
 }n|d d }n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
)r]   rr   
isinstancestrlistr   reprr   )r~   Z	blocknamecommentcounterrrb   rb   rc   getmultilineblock^  s.    
&r   c             C   s
   t | dS )NZcallstatement)r   )r~   rb   rb   rc   r   |  s    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| r`|	ddg x| d	 D ]}| d
 | }t
|rqj||kr|| d }nJ||}ttttt|rnt|rn|d }t|st|r|d || qjW d|| }	|	s
d}	|	S )NZcallprotoargumentr   )r   z<warning: callstatement is defined without callprotoargument
r   )getctypezchar*Zsize_tr   r   Z_typedefrq   ,Zvoid)r   r   rV   Z	capi_mapsr   rS   rH   rT   r(   extendr-   r,   rU   rD   r    rF   r   r   r   )
r~   Zcb_mapr   r   Z	arg_typesZ
arg_types2nre   ZctypeZ
proto_argsrb   rb   rc   r     s<    

c             C   s
   t | dS )Nusercode)r   )r~   rb   rb   rc   r     s    c             C   s   t | dddS )Nr   r   )r   )r   )r~   rb   rb   rc   r     s    c             C   s
   t | dS )NZpymethoddef)r   )r~   rb   rb   rc   r     s    c             C   sx   g g  }}d| krp| d }d| krhx"| d D ]}||kr,| | q,W x(|D ]}||krL| | qLW n| d }||fS )Nr   sortvars)r   )r~   sortargsr   r   rb   rb   rc   getargs  s    

r   c                s   g  dg  }  fddd  D }|   dkrx"d D ]}| krH|| qHW x, D ]}||krh|| qhW n|d  } |fS )Nr   c                s(   g | ] }t d  | r| kr|qS )r   )r+   ).0r   )r   r~   rb   rc   
<listcomp>  s    zgetargs2.<locals>.<listcomp>r   r   )r]   keysr   )r~   r   Zauxvarsr   rb   )r   r~   rc   r     s    
c             C   s<   d| krd S d }| d dkr,| d | d f}| d  |d S )NZf2pymultilinesr   zpython moduler   )r]   )r~   krb   rb   rc   r     s    c             C   s*   dt |  d d }d|d | |d f S )NP         z/*%s %s %s*/rq   )r   )r   r   rb   rb   rc   r     s    c             C   s$   t | trttfdd| g S | gS )Nc             S   s   | || S )Nrb   )xyr   rb   rb   rc   <lambda>  s    zflatlist.<locals>.<lambda>)r   r   r   flatlist)r   rb   rb   rc   r     s    
r   c             C   s    | r| d dkr| d d S | S )Nrk   r   rb   )srb   rb   rc   rY     s    r   c          	      s   t  trfdd D S t tr< fddD S xdt   D ]v}|dkr\qNd kr~| d kr~ d | }n}t  | trd| |t | qNd|  | qNW S )Nc                s   g | ]}t | qS rb   )rW   )r   _m)
defaultsepr   rb   rc   r     s    zreplace.<locals>.<listcomp>c                s   g | ]}t | qS rb   )rW   )r   r   )r   r   rb   rc   r     s    r   separatorsforz#%s#)r   r   r   rW   r   r   )r   r   r   r   seprb   )r   r   r   rc   rW     s    

 c             C   s@  t |tr&x|D ]}t| |} qW | S x| D ]}|d dkrFq2|| kr,t | | trl| | g| |< t | | trt || tr| | ||  | |< n| | ||  nxt | | tr8t || tr8|dkrxL||  D ]$}|| | kr|| | | | |< qW nt| | || | |< q2|| | |< q2W | S )Nr   _r   )r   r   r   r   r   r   dict)Zrdarr   r   k1rb   rb   rc   r     s.    



c             C   s  i }t | tr@x,| D ]$}t|||}t||}d|krP qW |S d| krX| d |sX|S d| krtd| d i||}d|krt|d  x |  D ]}|dkr| | ||< qt | | trt| | |||< nt | | tr.g ||< x:| | D ].}t||i||}	||	kr|| 	|	|  qW n:|d dkrBqn&t | | t
rTg ||< x| |  D ]}
t |
tjrh|
|rht | | |
 trx| | |
 D ]N}t |t
rtd|i||}d|kr|d }nd	}|| 	t|| qW nR| | |
 }t |t
r8td|i|}d|kr4|d }nd	}|| 	t|| qhW ntd
t| |   t || trt|| dkr|| d ||< || g kr||= qW |S )NZ_breakZ_checkZneedZneedsr   r   r   Z	supertextr   zapplyrules: ignoring rule %s.
r   )r   r   r	   r   r   Zappend_needsr   r   rW   r   r   typesFunctionTyper   r   r   )Zrulesr   re   Zretr   ZrrZresr   r   r   r   rb   rb   rc   r	     sl    







)r   r   )r   )__doc__Z
__future__r   r   r   Zpprintr^   r   	functoolsr   r   r   r   __all__versionZf2py_versionstderrr`   r   rX   r\   rd   r   rV   r
   rh   rF   ri   rG   r   r   rD   r    r7   r*   rp   rs   r<   rM   rQ   rL   rO   r$   r:   r9   r!   r)   rN   rR   rv   rP   rw   ry   r{   rE   r   r}   r?   r>   r'   r(   rI   rJ   r   rC   r8   r=   r;   r"   r#   rH   r   rK   r   r@   r&   rB   r1   r2   r5   r0   r4   r,   r   r.   r6   r-   r3   r+   r   r   r   r/   rA   r   r   r   r   r   r   r   r   r   r   r   	Exceptionr   objectrZ   rS   rU   rT   r%   r   r   r   r   r   r   r   r   r   r   r   r   rY   rW   r   r	   rb   rb   rb   rc   <module>   s$  






$	
