3
5^$                 @   s   d Z ddlmZmZmZ ddd Z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

    )divisionabsolute_importprint_functionz$Revision: 1.16 $
      zSee `f2py -v`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j| | 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*:(*)z	%s(len=*)z	%s(%s=%s)z%s*(%s)z%s*%sz	%s(len=%sz%s,kind=%s)z%s)z%s(kind=%s)z%s %s	dimension,)r   r   r   )r   r   )r   r   join)varsafaf90modeZvardefselectorZlk r&   _/home/brian/BIRCH/lib-linux-x86_64/python/lib64/python3.6/site-packages/numpy/f2py/func2subr.pyvar2fixfortran   sP    





r(   c                s  t | stg  | d }x| d D ]~}| d | }xlt|jdg D ]X\}}|dkrDd||f }tddgd}d	||f |d
<  j| |||< ||d |< qDW q"W | d j  t }	dg}
|
fdd}| d }t| }t	| }d| }||kr|| ||< |g| d dd   }n|g| d  }t
||||}|d d dkr|r`d|dd   }nd|dd   }|| d }|jdddkrd|d< dj|}|r|d| d ||f  |s|d| d |f  n.|d||f  |	s|d|  |d | }|	r>x0| d jd D ]}|j jd!r|| qW |dd  }g }x2|D ]*}t|| rT|d|  |j| qTW xF|D ]>}||krqt|| r|t
|||d" |j| qW xF|D ]>}||krqt|| r|t
|||d" |j| qW x.|D ]&}||kr*q|t
|||d" qW || |	rx|rXn |d# || d j  |d$ dj fd%d&|D }|st| r|d'|||f  n|d(|||f  |r|d)| d |f  n|d* |
d+ S ),Nr!   argsr   r   zf2py_%s_d%sintegerhide)r   intentzshape(%s, %s)=r   c             S   s   d|d | f |d< d S )Nz%s
      %sr   r&   )lineretr&   r&   r'   addd   s    zcreatefuncwrapper.<locals>.addnamez
%sf2pywrapr      zcharacter*(*)zcharacter(len=10)zcharacter*10r   r   z(*)10z, zsubroutine f2pywrap_%s_%s (%s)
modulenamezuse %s, only : %szsubroutine f2pywrap%s (%s)zexternal %ssaved_interface
zuse )r$   	interfacez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)zend subroutine f2pywrap_%s_%sendr   )r	   AssertionError	enumerategetdictappendextendboolr   r   r(   r    splitlstrip
startswithr   r   r   r   )rout	signaturer!   r"   viddndvneed_interfacer/   r0   r1   fortrannamer$   newnamer)   lZ
charselectsargsr.   dumped_argsr&   )r9   r'   createfuncwrapperP   s    










rS   c                s  t | stg  | d }x| d D ]~}| d | }xlt|jdg D ]X\}}|dkrDd||f }tddgd}d	||f |d
<  j| |||< ||d |< qDW q"W | d j  t }	dg}
|
fdd}| d }t| }t	| }| d }dj
|}|r.|d| d ||f  |sP|d| d |f  n"|d||f  |	sP|d|  |	rx0| d jdD ]}|j jdrf|| qfW g }x2|D ]*}t|| r|d|  |j| qW xF|D ]>}||krؐqt|| r|t|||d |j| qW x.|D ]&}||kr q|t|||d qW |	rf|rFn |d || d j  |d dj
 fdd|D }|s|d||f  |r|d| d |f  n|d |
d  S )!Nr!   r)   r   r   zf2py_%s_d%sr*   r+   )r   r,   zshape(%s, %s)r-   r   c             S   s   d|d | f |d< d S )Nz%s
      %sr   r&   )r.   r/   r&   r&   r'   r0      s    zcreatesubrwrapper.<locals>.addr1   z, zsubroutine f2pywrap_%s_%s (%s)r4   zuse %s, only : %szsubroutine f2pywrap%s (%s)zexternal %sr5   r6   zuse )r$   r7   zend interfacec                s   g | ]}| kr|qS r&   r&   )r8   r"   )r9   r&   r'   r:      s    z%createsubrwrapper.<locals>.<listcomp>zcall %s(%s)zend subroutine f2pywrap_%s_%sr;   r   )r   r<   r=   r>   r?   r@   rA   rB   r   r   r    rC   rD   rE   r   r   r(   )rF   rG   r!   r"   rH   rI   rJ   rK   rL   rM   r/   r0   r1   rN   r$   r)   rQ   r.   rR   r&   )r9   r'   createsubrwrapper   s|    






rT   c             C   s:  t | rt| }| d }td||f  tj| } |}|}d| kr^| d }| d | | d |< | d | }t|sd|krg |d< |d jd d}x |d D ]}|jdrd	}P qW |r|d jd
|  |g| d  | d d d < | t| fS t| r2t| }| d }td||f  tj| } | t	| fS | dfS )Nr1   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   r@   rE   rS   r   rT   )rF   rN   r1   fnamernameZfvarflagrI   r&   r&   r'   assubr
  sB    



r[   )NN)r   )r   )__doc__
__future__r   r   r   __version__Zf2py_versionrW   Zauxfuncsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r(   rS   rT   r[   r&   r&   r&   r'   <module>   s   <
1
j
P