
;>"^$                 @   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	 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 Sd |  | k rj t  |  |  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 r| rL| d d k r2d | } qd | | | d f } q| d d k rsd | | d f } qd | | d f } np d | k rd | | d f } d	 | k rd | | d	 f } qd | } n  d	 | k rd | | d	 f } d | | f } d |  | k r;d | 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&   F/home/birch/.local/lib/python3.5/site-packages/numpy/f2py/func2subr.pyvar2fixfortran   sP    
	!r(   c                s  t  |   s t  g    |  d } x |  d D] } |  d | } x t | j d g    D]y \ } } | d k rZ d | | f } t d d d d	 g  } d
 | | f | d <  j |  | | | <| | d | <qZ Wq- W|  d j    t    }	 d g }
 |
 d d  } |  d } t |   } t	 |   } d | } | | k rt| | | | <| 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 rd | d <d j |  } | rb| d |  d | | f  | s| d |  d | f  n6 | d | | f  |	 s| d |  | d | } |	 rx: |  d  j d!  D]% } | j   j d"  r| |  qW| d d   } g  } x9 | D]1 } t | |  r| d |  | j |  qWxS | D]K } | | k rIq4t | |  r4| t
 | | d# |  | j |  q4WxS | D]K } | | k rqt | |  r| t
 | | d# |  | j |  qWx6 | D]. } | | k rq| t
 | | d# |  qW| |  |	 rS| r+n( | d$  | |  d  j    | d%  d j   f d& d'   | D  } | st |   r| d( | | | f  n | d) | | | f  | r| d* |  d | f  n
 | d+  |
 d, S)-Nr!   argsr   r   zf2py_%s_d%sr   integerintenthidez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 Sr&   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                so  t  |   s t  g    |  d } x |  d D] } |  d | } x t | j d g    D]y \ } } | d k rZ d | | f } t d d d d	 g  } d
 | | f | d <  j |  | | | <| | d | <qZ Wq- W|  d j    t    }	 d g }
 |
 d d  } |  d } t |   } t	 |   } |  d } d j
 |  } | r| d |  d | | f  | s| d |  d | f  n( | d | | f  |	 s| d |  |	 rx: |  d j d  D]% } | j   j d  r| |  qWg  } x9 | D]1 } t | |  r| d |  | j |  qWxS | D]K } | | k rVqAt | |  rA| t | | d |  | j |  qAWx6 | D]. } | | k rq| t | | d |  qW|	 r | rn( | 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 Sr&   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  |   r9t |   } |  d } t d | | f  t j |   }  | } | } d |  k r} |  d } |  d | |  d | <|  d | } t |  s
d | k r g  | d <| d j d  d } x( | d D] } | j d  r d	 } Pq W| r
| d j d
 |  | g |  d |  d d  d   <|  t |   f St |   rt |   } |  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[   )__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   X1jP