ó
ØÆ÷Xc           @` 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 „ Z d d „ Z d „  Z d S(   sW  

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

i    (   t   divisiont   absolute_importt   print_functions   $Revision: 1.16 $i
   iÿÿÿÿs   See `f2py -v`Ni   (   t   getfortrannamet
   isexternalt
   isfunctiont   isfunction_wrapt   isintent_int   isintent_outt   islogicalfunctiont   ismoduleroutinet   isscalart   issubroutinet   issubroutine_wrapt   outmesst   showc         C` sN  | d  k r | } n  | |  k r= t |  ƒ t d | ƒ d Sd |  | k rm t |  | ƒ t d | ƒ d S|  | d } | d k r² d |  | k r² d | |  | d f } n  i  } d } d |  | k rå |  | d } d	 } n' d
 |  | k r|  | d
 } d } n  d | k r“| rU| d d k r;d | } qd | | | d f } q| d d k r|d | | d f } qd | | d f } ns d | k rãd | | d f } d	 | k rÖd | | d	 f } qd | } n# d	 | k rd | | d	 f } n  d | | f } d |  | k rJd | d j |  | d ƒ f } n  | S(   Ns1   var2fixfortran: No definition for argument "%s".
t    t   typespecs/   var2fixfortran: No typespec for argument "%s".
t   typet   typenames   %s(%s)t   kindselectort   kindt   charselectort   lent   *t   :s   (*)s	   %s(len=*)s	   %s(%s=%s)s   %s*(%s)s   %s*%ss	   %s(len=%ss   %s,kind=%s)s   %s)s   %s(kind=%s)s   %s %st	   dimensiont   ,(   R   R   s   (*)(   R   R   (   t   NoneR   R   t   join(   t   varst   at   fat   f90modet   vardeft   selectort   lk(    (    s3   /tmp/pip-build-X4mzal/numpy/numpy/f2py/func2subr.pyt   var2fixfortran   sP    	
		$c         C` s  t  |  ƒ s t ‚ g  } |  d } x¹ |  d D]­ } |  d | } x– t | j d g  ƒ ƒ D]| \ } } | d k rZ d | | f } t d d d d	 g ƒ }	 d
 | | f |	 d <| j | ƒ |	 | | <| | d | <qZ qZ Wq- W|  d j | ƒ t | ƒ }
 d g } | d „ } |  d } t |  ƒ } t	 |  ƒ } d | } | | k rn| | | | <| g |  d d } n | g |  d } t
 | | | | ƒ } | d  d k rÿ| r»d | d } n d | d } | | d } | j d d ƒ d k rÿd | d <qÿn  d j | ƒ } | rS| d |  d | | f ƒ | sŒ| d |  d | f ƒ qŒn9 | d | | f ƒ |
 sŒ| d | ƒ | d | } n  |
 rÕx@ |  d j d  ƒ D]( } | j ƒ  j d! ƒ r¦| | ƒ q¦q¦Wn  | d } g  } x< | D]4 } t | | ƒ rì| d | ƒ | j | ƒ qìqìWxY | D]Q } | | k rCq+n  t | | ƒ r+| t
 | | d" | ƒƒ | j | ƒ q+q+WxY | D]Q } | | k rŸq‡n  t | | ƒ r‡| t
 | | d" | ƒƒ | j | ƒ q‡q‡Wx9 | D]1 } | | k rûqãn  | t
 | | d" | ƒƒ qãW| | ƒ |
 r\| r1q\| d# ƒ | |  d j ƒ  ƒ | d$ ƒ n  d j g  | D] } | | k ri| ^ qiƒ } | sÐt |  ƒ r¶| d% | | | f ƒ qÐ| d& | | | f ƒ n  | rñ| d' |  d | f ƒ n
 | d( ƒ | d) S(*   NR   t   argsR   R   s   f2py_%s_d%sR   t   integert   intentt   hides   shape(%s, %s)t   =R   c         S` s   d | d |  f | d <d  S(   Ns   %s
      %si    (    (   t   linet   ret(    (    s3   /tmp/pip-build-X4mzal/numpy/numpy/f2py/func2subr.pyt   addd   s    t   names
   %sf2pywrapi   i   s   character*(*)s   character(len=10)s   character*10R   R   s   (*)t   10s   , s   subroutine f2pywrap_%s_%s (%s)t
   modulenames   use %s, only : %ss   subroutine f2pywrap%s (%s)s   external %st   saved_interfaces   
s   use R!   t	   interfaces   end interfaces   %s = .not.(.not.%s(%s))s   %s = %s(%s)s   end subroutine f2pywrap_%s_%st   endi    (   R   t   AssertionErrort	   enumeratet   gett   dictt   appendt   extendt   boolR   R
   R%   R   t   splitt   lstript
   startswithR   R   R   R	   (   t   routt	   signaturet
   extra_argsR   R   t   vt   it   dt   dnt   dvt   need_interfaceR,   R-   R.   t   fortrannameR!   t   newnameR&   t   lt
   charselectt   sargsR+   t   dumped_args(    (    s3   /tmp/pip-build-X4mzal/numpy/numpy/f2py/func2subr.pyt   createfuncwrapperP   sª    
%
	




.
c         C` s™  t  |  ƒ s t ‚ g  } |  d } x¹ |  d D]­ } |  d | } x– t | j d g  ƒ ƒ D]| \ } } | d k rZ d | | f } t d d d d	 g ƒ }	 d
 | | f |	 d <| j | ƒ |	 | | <| | d | <qZ qZ Wq- W|  d j | ƒ t | ƒ }
 d g } | d „ } |  d } t |  ƒ } t	 |  ƒ } |  d } d j
 | ƒ } | r| d |  d | | f ƒ | s»| d |  d | f ƒ q»n+ | d | | f ƒ |
 s»| d | ƒ n  |
 rx@ |  d j d ƒ D]( } | j ƒ  j d ƒ rÕ| | ƒ qÕqÕWn  g  } x< | D]4 } t | | ƒ r| d | ƒ | j | ƒ qqWxY | D]Q } | | k rhqPn  t | | ƒ rP| t | | d | ƒƒ | j | ƒ qPqPWx9 | D]1 } | | k rÄq¬n  | t | | d | ƒƒ q¬W|
 r| rðq| d ƒ | |  d j ƒ  ƒ | d ƒ n  d j
 g  | D] } | | k r(| ^ q(ƒ } | sf| d | | f ƒ n  | r‡| d |  d | f ƒ n
 | d ƒ | d S(   NR   R&   R   R   s   f2py_%s_d%sR   R'   R(   R)   s   shape(%s, %s)R*   R   c         S` s   d | d |  f | d <d  S(   Ns   %s
      %si    (    (   R+   R,   (    (    s3   /tmp/pip-build-X4mzal/numpy/numpy/f2py/func2subr.pyR-   Î   s    R.   s   , s   subroutine f2pywrap_%s_%s (%s)R0   s   use %s, only : %ss   subroutine f2pywrap%s (%s)s   external %sR1   s   
s   use R!   R2   s   end interfaces   call %s(%s)s   end subroutine f2pywrap_%s_%sR3   i    (   R   R4   R5   R6   R7   R8   R9   R:   R   R
   R   R;   R<   R=   R   R   R%   (   R>   R?   R@   R   R   RA   RB   RC   RD   RE   RF   R,   R-   R.   RG   R!   R&   RK   R+   RL   (    (    s3   /tmp/pip-build-X4mzal/numpy/numpy/f2py/func2subr.pyt   createsubrwrapperº   s|    
%
	


.
c         C` sž  t  |  ƒ r?t |  ƒ } |  d } t d | | f ƒ t j |  ƒ }  | } | } d |  k r€ |  d } |  d | |  d | <n  |  d | } t | ƒ sd | k r³ g  | d <n  | d j d ƒ d } x+ | d D] } | j d ƒ rÕ d	 } PqÕ qÕ W| r| d j d
 | ƒ qn  | g |  d |  d (|  t |  ƒ f St |  ƒ r”t |  ƒ } |  d } t d | | f ƒ t j |  ƒ }  |  t	 |  ƒ f S|  d f S(   NR.   s6   		Creating wrapper for Fortran function "%s"("%s")...
t   resultR   R(   t   outi   s   out=i    s   out=%sR&   s8   		Creating wrapper for Fortran subroutine "%s"("%s")...
R   (
   R   R   R   t   copyR   R8   R=   RM   R   RN   (   R>   RG   R.   t   fnamet   rnamet   fvart   flagRB   (    (    s3   /tmp/pip-build-X4mzal/numpy/numpy/f2py/func2subr.pyt   assubr
  sB    


(   t   __doc__t
   __future__R    R   R   t   __version__t   f2py_versionRQ   t   auxfuncsR   R   R   R   R   R   R	   R
   R   R   R   R   R   R   R%   RM   RN   RV   (    (    (    s3   /tmp/pip-build-X4mzal/numpy/numpy/f2py/func2subr.pyt   <module>   s   X1jP