U
    ¸mœdî$  ã                   @   sr   d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ ddd„Zddd„Zdd	d
„Zdd„ ZdS )aW  

Rules for building C/API module with 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 License.

NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
$Date: 2004/11/26 11:13:06 $
Pearu Peterson

é    Né   )ÚgetfortrannameÚ
isexternalÚ
isfunctionÚisfunction_wrapÚisintent_inÚisintent_outÚislogicalfunctionÚismoduleroutineÚisscalarÚissubroutineÚissubroutine_wrapÚoutmessÚshowc                 C   sÈ  |d kr|}|| kr,t | ƒ td| ƒ dS d| | krTt | | ƒ td| ƒ dS | | d }|dkrˆd| | krˆd|| | d f }i }d}d| | kr®| | d }d	}nd
| | krÊ| | d
 }d}d|k�r6|�r|d dkrðd| }nd|||d f }n0|d dk�r$d||d f }nd||d f }nZd|k�rvd||d f }d	|k�rld||d	 f }nd| }nd	|k�r�d||d	 f }d||f }d| | k�rÄd|d | | d ¡f }|S )Nz1var2fixfortran: No definition for argument "%s".
Ú Útypespecz/var2fixfortran: No typespec for argument "%s".
ÚtypeÚtypenamez%s(%s)ZkindselectorÚkindÚcharselectorÚlenÚ*)r   ú:ú(*)z	%s(len=*)z	%s(%s=%s))r   r   z%s*(%s)z%s*%sz	%s(len=%sz%s,kind=%s)z%s)z%s(kind=%s)z%s %sÚ	dimensionú,)r   r   Újoin)ÚvarsÚaÚfaÚf90modeZvardefÚselectorZlk© r"   úM/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numpy/f2py/func2subr.pyÚvar2fixfortran   sP    





r$   c                    s
  t | ƒst‚g ‰ | d }| d D ]z}| d | }t| dg ¡ƒD ]X\}}|dkr@d||f }tddgd�}d	||f |d
< ˆ  |¡ |||< ||d |< q@q | d  ˆ ¡ tˆ ƒ}	dg}
|
fdd„}| d }t| ƒ}t	| ƒ}d| }||k�r|| ||< |g| d dd …  }n|g| d  }t
||d|ƒ}|d d… dk�rŽ|�rXd|dd …  }nd|dd …  }|| d }| dd¡dk�rŽd|d< | d|¡}d }d |¡}|�rà|d| d ||f ƒ |�s|d| d |f ƒ n6|d||f ƒ |	�s|d| ƒ | dd¡d  | }|	�rT| d!  d"¡D ](}| ¡  d#¡�r*d$|k�r*||ƒ �q*|dd … }g }|D ]*}t|| ƒ�rh|d| ƒ | |¡ �qh|D ]>}||k�rª�q˜t|| ƒ�r˜|t
|||d%�ƒ | |¡ �q˜|D ]>}||k�rî�qÜt|| ƒ�rÜ|t
|||d%�ƒ | |¡ �qÜ|D ]&}||k�r2�q |t
|||d%�ƒ �q ||ƒ |d k	�rb||ƒ |	�r�|�rpn |d&ƒ || d!  ¡ ƒ |d'ƒ d ‡ fd(d)„|D ƒ¡}|�sÞt| ƒ�rÌ|d*|||f ƒ n|d+|||f ƒ |�rú|d,| d |f ƒ n|d-ƒ |
d. S )/Nr   Úargsr   r   úf2py_%s_d%sÚintegerÚhide©r   Úintentúshape(%s, %s)ú=r   c                 S   s   d|d | f |d< d S ©Nz%s
      %sr   r"   ©ÚlineÚretr"   r"   r#   Úadd^   s    zcreatefuncwrapper.<locals>.addÚnamez
%sf2pywrapr   z
@@@NAME@@@é   zcharacter*(*)zcharacter(len=10)zcharacter*10r   r   r   Ú10ú, úsubroutine f2pywrap_%s_%s (%s)Ú
modulenameúuse %s, only : %súsubroutine f2pywrap%s (%s)úexternal %sú Úsaved_interfaceÚ
úuse Ú__user__©r    Ú	interfaceúend interfacec                    s   g | ]}|ˆ kr|‘qS r"   r"   ©Ú.0r   ©Ú
extra_argsr"   r#   Ú
<listcomp>­   s      z%createfuncwrapper.<locals>.<listcomp>z%s = .not.(.not.%s(%s))z%s = %s(%s)úend subroutine f2pywrap_%s_%sÚendr   )r   ÚAssertionErrorÚ	enumerateÚgetÚdictÚappendÚextendÚboolr   r
   r$   Úreplacer   ÚsplitÚlstripÚ
startswithr   r   r   r	   )ÚroutÚ	signaturer   r   ÚvÚiÚdÚdnÚdvÚneed_interfacer0   r1   r2   Úfortrannamer    Znewnamer%   Zl_tmplZ
charselectÚl1ZrlÚsargsr/   Údumped_argsr"   rE   r#   ÚcreatefuncwrapperJ   s´    


ÿ




ra   c                    sÞ  t | ƒst‚g ‰ | d }| d D ]z}| d | }t| dg ¡ƒD ]X\}}|dkr@d||f }tddgd�}d	||f |d
< ˆ  |¡ |||< ||d |< q@q | d  ˆ ¡ tˆ ƒ}	dg}
|
fdd„}| d }t| ƒ}t	| ƒ}| d }d 
|¡}|�r&|d| d ||f ƒ |�sH|d| d |f ƒ n"|d||f ƒ |	�sH|d| ƒ |	�r†| d  d¡D ](}| ¡  d¡�r\d|k�r\||ƒ �q\g }|D ]*}t|| ƒ�rŽ|d| ƒ | |¡ �qŽ|D ]>}||k�rÐ�q¾t|| ƒ�r¾|t|||d�ƒ | |¡ �q¾|D ]&}||k�r�q|t|||d�ƒ �q|	�r„|�r8nL|dƒ | d  d¡D ],}| ¡  d¡�rpd|k�rp�qN||ƒ �qN|dƒ d 
‡ fdd„|D ƒ¡}|�s²|d||f ƒ |�rÎ|d| d |f ƒ n|d ƒ |
d! S )"Nr   r%   r   r   r&   r'   r(   r)   r+   r,   r   c                 S   s   d|d | f |d< d S r-   r"   r.   r"   r"   r#   r1   Ï   s    zcreatesubrwrapper.<locals>.addr2   r5   r6   r7   r8   r9   r:   r<   r=   r>   r?   r@   rA   rB   c                    s   g | ]}|ˆ kr|‘qS r"   r"   rC   rE   r"   r#   rG     s      z%createsubrwrapper.<locals>.<listcomp>zcall %s(%s)rH   rI   r   )r   rJ   rK   rL   rM   rN   rO   rP   r   r
   r   rR   rS   rT   r   r   r$   )rU   rV   r   r   rW   rX   rY   rZ   r[   r\   r0   r1   r2   r]   r    r%   r_   r/   r`   r"   rE   r#   Úcreatesubrwrapper»   s„    

ÿ

rb   c                 C   s8  t | ƒrðt| ƒ}| d }td||f ƒ t | ¡} |}|}d| kr^| d }| d | | d |< | d | }t|ƒsÊd|kr‚g |d< |d  d¡ d}|d D ]}| d¡rœd	} q´qœ|rÊ|d  d
| ¡ |g| d  | d d d …< | t| ƒfS t| ƒ�r0t| ƒ}| d }td||f ƒ t | ¡} | t	| ƒfS | dfS )Nr2   z6		Creating wrapper for Fortran function "%s"("%s")...
Úresultr   r*   Úoutr   zout=r   zout=%sr%   z8		Creating wrapper for Fortran subroutine "%s"("%s")...
r   )
r   r   r   Úcopyr   rN   rT   ra   r   rb   )rU   r]   r2   ÚfnameÚrnameZfvarÚflagrX   r"   r"   r#   Úassubr  sH     ÿ


ÿ
ri   )NN)r   )r   )Ú__doc__re   Zauxfuncsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r$   ra   rb   ri   r"   r"   r"   r#   Ú<module>   s   <
1
q
S