a
    ;¹§eæ  ã                   @   sÆ   d dl Z e  de j¡Ze  de j¡Ze  de j¡Zdd„ Ze  d¡Ze  d¡Ze  d	¡Z	d
d„ Z
dd„ Ze  d¡Zdd„ Zdd„ Ze  d¡Zdd„ Zdd„ Ze  de j¡Zdd„ Zdd„ Ze
dƒZdS )é    Nz2(\n|\A)((     (\$|\*))|)\s*(subroutine|function)\bz+\n\s*end\s*(subroutine|function)\b.*(\n|\Z)z\n     (\$|\*)\s*function\bc                 C   s´   g }d}t  | |¡}|du rq°| ¡ }t | || ¡ ¡rl|  d||¡}|dkrPql|}| ||d … dkr8qlq8|d7 }t | | ¡ ¡}|r”| ¡ d pšt| ƒ }}| 	||f¡ q|S )z‘ Return a list of tuples for each function or subroutine each
    tuple is the start and end of a subroutine or function to be
    expanded.
    r   NÚ
éÿÿÿÿé   z
     $é   )
Úroutine_start_reÚsearchÚstartÚfunction_start_reÚmatchÚendÚrfindÚroutine_end_reÚlenÚappend)ÚastrZspanlistÚindÚmr   Úir   © r   úG/var/www/sunrise/env/lib/python3.9/site-packages/numpy/f2py/_src_pyf.pyÚparse_structure6   s$    r   z<\s*(\w[\w\d]*)\s*>z<\s*(\w[\w\d]*)\s*=\s*(.*?)\s*>z<\s*((.*?))\s*>c                 C   sP   t  | ¡}i }|D ]8}|d  ¡ p(t|ƒ}|d  dd¡}t|ƒ}|||< q|S )Nr   r   ú\,ú@comma@)Únamed_reÚfindallÚstripÚ
unique_keyÚreplaceÚconv)r   ZrepsÚnamesÚrepÚnameÚreplÚthelistr   r   r   Úfind_repl_patternsU   s    

r$   c                 C   s"   t | ƒ}t td| ¡d } | |fS )NÚ r   )r$   ÚreÚsubnr   )r   r   r   r   r   Úfind_and_remove_repl_patterns_   s    r(   z\A\\(?P<index>\d+)\Zc                 C   s`   |   d¡}dd„ |D ƒ}tt|ƒƒD ]0}t || ¡}|r$t| d¡ƒ}|| ||< q$d |¡S )Nú,c                 S   s   g | ]}|  ¡ ‘qS r   )r   )Ú.0Úxr   r   r   Ú
<listcomp>g   ó    zconv.<locals>.<listcomp>Úindex)ÚsplitÚranger   Úitem_rer
   ÚintÚgroupÚjoin)r   ÚbÚlr   r   Újr   r   r   r   e   s    
r   c                 C   s<   t |  ¡ ƒ}d}d}|s8d| }||v r2|d7 }qd}q|S )z( Obtain a unique key given a dictionary.Fr   z__l%sT)ÚlistÚkeys)ÚadictZallkeysÚdoneÚnZnewkeyr   r   r   r   o   s    
r   z\A\s*(\w[\w\d]*)\s*\Zc              	      sl  |   dd¡} |   dd¡} t| ƒ‰t d| ¡} ‡fdd„}t || ¡} d }d }i ‰t | ¡D ]´}|ˆvrZˆ || |d ¡¡}|d u rŽtd| ƒ‚||vr¨| 	d	¡s¨|||< d
d„ | 
d¡D ƒ}t|ƒ}|d u rÞ|}|ˆ|< |}qZ||krð|ˆ|< qZtd |d ˆ| ¡||¡ƒ qZˆs| S ‡ ‡fdd„}	d}
t|ƒD ]‰ |
t |	| ¡d 7 }
q4|
  dd¡}
|
  dd¡}
|
S )Nz\>z@rightarrow@z\<z@leftarrow@z<\1>c                    sj   t |  d¡ dd¡ƒ}t |¡r(d| S d }ˆ  ¡ D ]}ˆ | |kr4|}q4|d u rbtˆ ƒ}|ˆ |< d| S )Nr   r   r   z<%s>)r   r3   r   Útemplate_name_rer
   r9   r   )Úmobjr#   r!   Úkey)Úlnamesr   r   Úlistrepl„   s    
zexpand_sub.<locals>.listreplzNo replicates found for <%s>Ú_c                 S   s   g | ]}|  d d¡‘qS )r   r)   )r   )r*   r   r   r   r   r,   ž   r-   zexpand_sub.<locals>.<listcomp>r)   zHMismatch in number of replacements (base <{}={}>) for <{}={}>. Ignoring.c                    s$   |   d¡}ˆ |ˆ d |g ¡ˆ  S )Nr   )r3   Úget)r>   r!   )ÚkÚrulesr   r   Únamerepl­   s    
zexpand_sub.<locals>.namereplr%   z

ú>ú<)r   r$   r   ÚsubÚlist_reÚtemplate_rer   rC   Ú
ValueErrorÚ
startswithr/   r   ÚprintÚformatr4   r0   )Úsubstrr   rA   ZnumsubsZ	base_ruleÚrr#   ZruleÚnumrF   Únewstrr   )rD   r@   rE   r   Ú
expand_sub~   sH    
ÿrT   c           	      C   s   | }d}t |ƒ}d}i }| t¡ |D ]T}t|||d … ƒ\}}||7 }| |¡ |t||d |d … |ƒ7 }|d }q&|||d … 7 }|S )Nr%   r   r   )r   ÚupdateÚ_special_namesr(   rT   )	ZallstrrS   ÚwritestrÚstructZoldendr   rI   Z
cleanedstrZdefsr   r   r   Úprocess_str¹   s    


rY   z8(\n|\A)\s*include\s*['\"](?P<name>[\w\d./\\]+\.src)['\"]c                 C   sª   t j | ¡}t| ƒ‚}g }|D ]h}t |¡}|r|| d¡}t j |¡sTt j ||¡}t j 	|¡rp| 
t|ƒ¡ q†| |¡ q| |¡ qW d   ƒ n1 sœ0    Y  |S )Nr!   )ÚosÚpathÚdirnameÚopenÚinclude_src_rer
   r3   Úisabsr4   ÚisfileÚextendÚresolve_includesr   )ÚsourceÚdZfidÚlinesÚliner   Úfnr   r   r   rb   Î   s    


*rb   c                 C   s   t | ƒ}td |¡ƒS )Nr%   )rb   rY   r4   )rc   re   r   r   r   Úprocess_fileà   s    rh   zÿ
<_c=s,d,c,z>
<_t=real,double precision,complex,double complex>
<prefix=s,d,c,z>
<ftype=real,double precision,complex,double complex>
<ctype=float,double,complex_float,complex_double>
<ftypereal=real,double precision,\0,\1>
<ctypereal=float,double,\0,\1>
)r&   ÚcompileÚIr   r   r	   r   rK   r   rJ   r$   r(   r1   r   r   r=   rT   rY   r^   rb   rh   rV   r   r   r   r   Ú<module>   s&   1






;