U
    ;vf$                     @   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rd| | krd|| | d f }i }d}d| | kr| | d }d	}nd
| | kr| | d
 }d}d|kr6|r|d dkrd| }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rd||d	 f }d||f }d| | krd|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"   8/tmp/pip-unpacked-wheel-sdaoq5e2/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rd|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qt|| r|t
|||d% || q|D ]>}||krqt|| r|t
|||d% || q|D ]&}||kr2q |t
|||d% q || |d k	rb|| |	r|rpn |d& || d!   |d' d fd(d)|D }|st| 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Аqt|| 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 | rt| }| d }td||f  t| } |}|}d| kr^| d }| d | | d |< | d | }t|sd|krg |d< |d d d}|d D ]}|drd	} qq|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