
Xc        3   @` s  d  Z  d d l m Z m Z m Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l Z d d l m Z d d l Te j a d a d a d a d a d d	 a d
 a d
 a d a d a d a g  a d
 a d
 a d a i  a d
 a  d a! e" a# d a$ i g  t$ 6a% d
 a& g  a' d a( g  a) e" a* d a+ g  a, g  a- g  a. d   Z/ d d  Z0 d e _1 i  Z2 x d D] Z3 i d d 6e2 e3 <q}Wx d D] Z3 i d d 6e2 e3 <qW[3 i  Z4 i  Z5 x d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF g3 D]" Z6 e6 dG e4 e6 <e6 e5 e6 dG <qiWdH   Z7 dI   Z8 dJ   Z9 dK   Z: dL   Z; e j< dM e j=  j> Z? e j< dN e j=  j@ ZA e j< dO e j=  j@ ZB e j< dP e j=  j@ ZC e j< dQ e j=  j> ZD dR   ZE eF d dS  ZG dT dU dV ZH dW ZI e j< eH d
 eI eI dX f e j=  dE f ZJ e j< eH d
 eI dY eI dY dX f e j=  ZK e j< eH dZ d[ d[ dX f e j=  d\ f ZL e j< eH d] d^ d^ dX f e j=  d\ f ZM d_ ZN e j< eH d
 eN eN dX f e j=  d\ f ZO eN d` ZP e j< eH d
 eP eP dX f e j=  d\ f ZQ da ZR e j< eH d
 eR eR db f e j=  dc f ZS dd ZT e j< eH de eT eT db f e j=  df f ZU e j< eH d
 dg dg dX f e j=  dg f ZV e j< eH d
 dh dh dX f e j=  di f ZW e j< eH d
 dj dj dX f e j=  dj f ZX e j< eH d
 dk dk dX f e j=  dk f ZY e j< eH d
 dl dl dX f e j=  dl f ZZ e j< eH d
 dm dm dX f e j=  dm f Z[ e j< eH d
 dn dn dX f e j=  dn f Z\ e j< eH d
 do do dX f e j=  do f Z] e j< eH d
 dp dp dq f e j=  dr f Z^ e j< eH d
 ds ds dt f e j=  ds f Z_ e j< eH d
 du du dX f e j=  du f Z` e j< eH d
 dv dv dX f e j=  dv f Za e j< eH d
 dw dw dX f e j=  dw f Zb e j< eH d
 dx dx dX f e j=  dx f Zc e j< eH d
 dy dy dX f e j=  dy f Zd e j< eH d
 dz dz dX f e j=  dz f Ze e j< eH d
 d{ d{ d
 f e j=  d{ f Zf e j< eH d
 d| d| dX f e j=  d| f Zg e j< eH d
 d} d} dX f e j= e jh B d~ f Zi e j< d e jh  d f Zj d   Zk e j< d e j=  Zl d d  Zm d   Zn d d  Zo d   Zp d d  Zq e j< d e j=  Zr e j< d e j=  Zs e j< d e j=  Zt e j< d  Zu e j< d  Zv e j< d e j=  Zw d   Zx d   Zy d   Zz d   Z{ d   Z| e j< d e j=  Z} e j< d e j=  Z~ e j< d e j=  Z e j< d e j=  Z e j< d e j=  Z d   Z d   Z d   Z d   Z d d  Z d d  Z d d  Z d d  Z d   Z d   Z e" d  Z d
 e" d  Z e" d
 d  Z d   Z d   Z d
 d  Z d   Z e" e" d  Z e j< d e j=  Z d   Z e j< d  j> Z d d  Z e j< d e j=  Z d   Z d   Z d   Z d   Z d   Z d d d  Z i  d  Z d   Z e j< d  j> Z d   Z d   Z e j< d e j=  Z g  d  Z d   Z e j< d e j=  Z e j< d e j=  Z e j< d e j=  Z e j< d e j=  Z e j< d e j=  Z d   Z i  d  Z d e d  Z d
 d  Z d
 d  Z d   Z d
 e d  Z d   Z d   Z e d k rg  Z g  Z d Z d Z d Z d Z xe j d D]Z e d
 k r]ne d d k rvd Z ne d k rd a d a ne d k rd a d a ne d k rt re0 d d  n  d a d a nWe d k rd a nBe d k rd a n-e d k r"d a d a ne d k rCd a d a d a n e d k rXd Z n e d k rmd Z n e d k rd Z n e d d k re d e e   n e rd Z e a nv e rd Z e a na e r'y! e e  j   e j e  Wn' e k
 r#Z e d e e   n Xn e j e  qHWt oIt oIt r\e0 d d  n  e e e  Z t re0 d e t  d  e e  Z e t d  Z e j e  e j   n  e reF e  n  n  d S(   s  
crackfortran --- read fortran (77,90) code and extract declaration information.

Copyright 1999-2004 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: 2005/09/27 07:13:49 $
Pearu Peterson


Usage of crackfortran:
======================
Command line keys: -quiet,-verbose,-fix,-f77,-f90,-show,-h <pyffilename>
                   -m <module name for f77 routines>,--ignore-contains
Functions: crackfortran, crack2fortran
The following Fortran statements/constructions are supported
(or will be if needed):
   block data,byte,call,character,common,complex,contains,data,
   dimension,double complex,double precision,end,external,function,
   implicit,integer,intent,interface,intrinsic,
   logical,module,optional,parameter,private,public,
   program,real,(sequence?),subroutine,type,use,virtual,
   include,pythonmodule
Note: 'virtual' is mapped to 'dimension'.
Note: 'implicit integer (z) static (z)' is 'implicit static (z)' (this is minor bug).
Note: code after 'contains' will be ignored until its scope ends.
Note: 'common' statement is extended: dimensions are moved to variable definitions
Note: f2py directive: <commentchar>f2py<line> is read as <line>
Note: pythonmodule is introduced to represent Python module

Usage:
  `postlist=crackfortran(files,funcs)`
  `postlist` contains declaration information read from the list of files `files`.
  `crack2fortran(postlist)` returns a fortran code to be saved to pyf-file

  `postlist` has the following structure:
 *** it is a list of dictionaries containing `blocks':
     B = {'block','body','vars','parent_block'[,'name','prefix','args','result',
          'implicit','externals','interfaced','common','sortvars',
          'commonvars','note']}
     B['block'] = 'interface' | 'function' | 'subroutine' | 'module' |
                  'program' | 'block data' | 'type' | 'pythonmodule'
     B['body'] --- list containing `subblocks' with the same structure as `blocks'
     B['parent_block'] --- dictionary of a parent block:
                             C['body'][<index>]['parent_block'] is C
     B['vars'] --- dictionary of variable definitions
     B['sortvars'] --- dictionary of variable definitions sorted by dependence (independent first)
     B['name'] --- name of the block (not if B['block']=='interface')
     B['prefix'] --- prefix string (only if B['block']=='function')
     B['args'] --- list of argument names if B['block']== 'function' | 'subroutine'
     B['result'] --- name of the return value (only if B['block']=='function')
     B['implicit'] --- dictionary {'a':<variable definition>,'b':...} | None
     B['externals'] --- list of variables being external
     B['interfaced'] --- list of variables being external and defined
     B['common'] --- dictionary of common blocks (list of objects)
     B['commonvars'] --- list of variables used in common blocks (dimensions are moved to variable definitions)
     B['from'] --- string showing the 'parents' of the current block
     B['use'] --- dictionary of modules used in current block:
         {<modulename>:{['only':<0|1>],['map':{<local_name1>:<use_name1>,...}]}}
     B['note'] --- list of LaTeX comments on the block
     B['f2pyenhancements'] --- optional dictionary
          {'threadsafe':'','fortranname':<name>,
           'callstatement':<C-expr>|<multi-line block>,
           'callprotoargument':<C-expr-list>,
           'usercode':<multi-line block>|<list of multi-line blocks>,
           'pymethoddef:<multi-line block>'
           }
     B['entry'] --- dictionary {entryname:argslist,..}
     B['varnames'] --- list of variable names given in the order of reading the
                       Fortran code, useful for derived types.
     B['saved_interface'] --- a string of scanned routine signature, defines explicit interface
 *** Variable definition is a dictionary
     D = B['vars'][<variable name>] =
     {'typespec'[,'attrspec','kindselector','charselector','=','typename']}
     D['typespec'] = 'byte' | 'character' | 'complex' | 'double complex' |
                     'double precision' | 'integer' | 'logical' | 'real' | 'type'
     D['attrspec'] --- list of attributes (e.g. 'dimension(<arrayspec>)',
                       'external','intent(in|out|inout|hide|c|callback|cache|aligned4|aligned8|aligned16)',
                       'optional','required', etc)
     K = D['kindselector'] = {['*','kind']} (only if D['typespec'] =
                         'complex' | 'integer' | 'logical' | 'real' )
     C = D['charselector'] = {['*','len','kind']}
                             (only if D['typespec']=='character')
     D['='] --- initialization expression string
     D['typename'] --- name of the type if D['typespec']=='type'
     D['dimension'] --- list of dimension bounds
     D['intent'] --- list of intent specifications
     D['depend'] --- list of variable names on which current variable depends on
     D['check'] --- list of C-expressions; if C-expr returns zero, exception is raised
     D['note'] --- list of LaTeX comments on the variable
 *** Meaning of kind/char selectors (few examples):
     D['typespec>']*K['*']
     D['typespec'](kind=K['kind'])
     character*C['*']
     character(len=C['len'],kind=C['kind'])
     (see also fortran type declaration statement formats below)

Fortran 90 type declaration statement format (F77 is subset of F90)
====================================================================
(Main source: IBM XL Fortran 5.1 Language Reference Manual)
type declaration = <typespec> [[<attrspec>]::] <entitydecl>
<typespec> = byte                          |
             character[<charselector>]     |
             complex[<kindselector>]       |
             double complex                |
             double precision              |
             integer[<kindselector>]       |
             logical[<kindselector>]       |
             real[<kindselector>]          |
             type(<typename>)
<charselector> = * <charlen>               |
             ([len=]<len>[,[kind=]<kind>]) |
             (kind=<kind>[,len=<len>])
<kindselector> = * <intlen>                |
             ([kind=]<kind>)
<attrspec> = comma separated list of attributes.
             Only the following attributes are used in
             building up the interface:
                external
                (parameter --- affects '=' key)
                optional
                intent
             Other attributes are ignored.
<intentspec> = in | out | inout
<arrayspec> = comma separated list of dimension bounds.
<entitydecl> = <name> [[*<charlen>][(<arrayspec>)] | [(<arrayspec>)]*<charlen>]
                      [/<init_expr>/ | =<init_expr>] [,<entitydecl>]

In addition, the following attributes are used: check,depend,note

TODO:
    * Apply 'parameter' attribute (e.g. 'integer parameter :: i=2' 'real x(i)'
                                   -> 'real x(2)')
    The above may be solved by creating appropriate preprocessor program, for example.

i    (   t   divisiont   absolute_importt   print_functionNi   (   t   __version__(   t   *t   fixi   t    t    ic           C` s   d a  d a d a d a d a d a d a d a d a d a	 g  a
 d a i g  t 6a d a d a d a g  a i  a d a d a d a g  a g  a g  a g  a d  a d  S(	   Ni   R   i    i   R   R   is       (   t	   strictf77t   sourcecodeformt   quiett   verboset   tabchart   pyffilenamet   f77modulenamet   skipemptyendst   ignorecontainst   dolowercaset   debugt   groupcountert	   grouplistt   neededmodulet   expectbegint   skipblocksuntilt   usermodulest   f90modulevarst   gotnextfilet   filepositiontextt   currentfilenamet   skipfunctionst	   skipfuncst	   onlyfuncst   include_pathst   Nonet   previous_context(    (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   reset_global_f2py_vars   s4    	c         C` s@   t  s
 d  St s< | r) t j j t  n  t j j |   n  d  S(   N(   R   R
   t   syst   stdoutt   writeR   (   t   linet   flag(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   outmess   s    i2   s   abcdefghopqrstuvwxyz$_t   realt   typespect   ijklmnt   integert   intt   doublet   floatt   chart   shortt   longt   voidt   caset   whilet   returnt   signedt   unsignedt   ift   fort   typedeft   sizeoft   uniont   structt   statict   registert   newt   breakt   dot   gotot   switcht   continuet   elset   inlinet   externt   deletet   constt   autot   lent   rankt   shapet   indext   slent   sizet   _it   maxt   mint   flent   fshapet   stringt   complex_doublet   float_doublet   stdint   stderrR%   t   typet   defaultt   _bnc         C` s0   |  t  k r, t d |  t  |  f  t  |  S|  S(   Ns&   rmbadname1: Replacing "%s" with "%s".
(   t   badnamest   errmess(   t   name(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt
   rmbadname1	  s
    c         C` s   g  |  D] } t  |  ^ q S(   N(   Rd   (   t   namest   _m(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt	   rmbadname  s    c         C` s0   |  t  k r, t d |  t  |  f  t  |  S|  S(   Ns+   undo_rmbadname1: Replacing "%s" with "%s".
(   t   invbadnamesRb   (   Rc   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   undo_rmbadname1  s
    c         C` s   g  |  D] } t  |  ^ q S(   N(   Ri   (   Re   Rf   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   undo_rmbadname  s    c         C` sS   |  j  d  } | d k r d Sd |  | k r3 d Sd |  | k rG d S|  | d S(   Nt   .iR   s   \t   /i   (   t   rfind(   Rc   t   i(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   getextension!  s    s   .*[.](for|ftn|f77|f)\Zs   -[*]-\s*fortran\s*-[*]-s   -[*]-\s*f90\s*-[*]-s   -[*]-\s*fix\s*-[*]-s   [^c*]\s*[^\s\d\t]c         C` s   d } t  |  d  } | j   } d } t |  r< d } n t |  rW d } d } n  x | d k r | r | d d k r | j   r | d 8} | d d k r t | d   s | d d	 !d
 k r d } Pq n  | j   } qZ W| j   | S(   s(   Check if file is in free format Fortran.i    t   ri   i   t   !s   	i   iit   &(   t   opent   readlinet   _has_f_headert   _has_f90_headert   stript   _free_f90_startt   close(   t   filet   resultt   fR'   t   n(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   is_free_format2  s$    		
3
c      	   C` s  | s* t  t t t t t t t t f	 } n  |  g  k r: d St } d } d } d } t	 j
 d  } t	 j
 d t	 j  }	 t	 j
 d  }
 t	 j
 d  } t	 j
 d  } | r | d d	  n  d* \ } } d
 g g  t d  D] } t |  ^ q } d a t j |   } x+t r3| j   } | s%Pn  | j   rd a | j   a d a  | } d a d a t j j t  d } t t  rt |  pt |  rd a n" t t  rt |  rd a n  t rt a n t a t d t t  t t rd pd f  n  | j   j  d d
  } x. | d k sJ| d	 d k r=Pn  | d	  } qWt s| j! |  } | r| j" d  d
 } | j" d  } | d  j#   d k r| d+ } | j! | d  } | r| | j" d  } q| | d } qqn  | j$   d k rd } q	n  t d k r| d d, k r^| d d !j#   d k rRd | d } qd } q	n( t rt% |  d k r| d  } qn  | d | k rt& d t |    n  | st rt% |  d k r| d d
 k r| | d  } d } d } qt s|
 j! |  } | r)| j" d  } n  | rZ| | j! |  j" d  } d } d } n5 d | d } | r}| j#   } n | } | } | } | d k	 } qd | d } | r| j#   } n | } | } | } n5t d k r| rg| d! k rg| j! |  rg| d" } xG t rW| j   } | s7t( d#  Pn  | | } | j! |  rPqqW| j)   } n  |
 j! |  } | r| j" d  } n  | r| | j! |  j" d  } d } d } n' | r| j#   } n | } | } | } | d k	 } n t* d$ t t    d% | j+   d t | f a |	 j! |  } | r | j" d&  } t j j, |  rwt- | d' | d( d q*t j j. t  g t/ } d } xU | D]M } t j j0 | |  } t j j, |  rd } t- | d' | d( d PqqW| s*t d) t |  t j1 j0 |  f  q*n
 | |  | } q	W| rI| j#   } n | } | } d% | j+   d t | f a |	 j! |  } | rj| j" d&  } t j j, |  rt- | d' | d( d qtt j j. t  g t/ } d } xU | D]M } t j j0 | |  } t j j, |  rd } t- | d' | d( d PqqW| stt d) t |  t j1 j0 |  f  qtn
 | |  d a | j2   | r| d d  n! | \	 a  a a a a a a a a d S(-   s   
    Read fortran codes from files and
     1) Get rid of comments, line continuations, and empty lines; lower cases.
     2) Call dowithline(line) on every line.
     3) Recursively call itself when statement "include '<filename>'" is met.
    Ni    R   sS   (?P<line>([^"]*["][^"]*["][^"!]*|[^\']*\'[^\']*\'[^\'!]*|[^!\'"]*))!{1}(?P<rest>.*)s*   \s*include\s*(\'|")(?P<name>[^\'"]*)(\'|")s   (?P<line>.*)&\s*\Zs   (\s*&|)(?P<line>.*)s   .*?'''iR   i
   i   R   t   frees   	Reading file %s (format:%s%s)
s   ,stricts   s   
R'   t   resti   t   f2pyR   t   cRq   t   Ct   #i   s        iH   sx   readfortrancode: Found non-(space,digit) char in the first column.
	Are you sure that this code is in fix form?
	line=%si   s   .pyfs   
s.   Unexpected end of file when reading multiline
s6   Flag sourcecodeform must be either 'fix' or 'free': %ss   Line #%d in %s:"%s"
	Rc   t
   dowithlinet   istopsA   readfortrancode: could not find include file %s in %s. Ignoring.
(   R   R   s       (   R   R   Rq   R   R   (3   R   R   R   R	   R   t   beginpatternR
   R   R   t   ret   compilet   It   ranget   strt	   fileinputt	   FileInputt   TrueRt   t   isfirstlinet   filenamet   ost   patht   splitextt	   is_f_fileRv   t   _has_fix_headerR~   t   beginpattern77t   beginpattern90R)   t   reprt
   expandtabst   replacet   matcht   groupt   lowerRw   RN   t	   ExceptionR!   Rb   t   rstript
   ValueErrort
   filelinenot   isfilet   readfortrancodet   dirnameR    t   joint   pathsepRy   (   t   ffileR   R   t   saveglobalst   localdolowercaset   contt	   finallinet   llt   commentlinet   includelinet   cont1t   cont2t
   mline_markt   l1Rf   t   spacedigitst   fint   lt   extRp   t   rlt   origfinallinet   lct   mt   fnt   include_dirst	   foundfilet   inc_dirt   fn1(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR   K  sb   
	,				
0			"
	
	&

&

s"   \s*(?P<before>%s(?=\s*(\b(%s)\b)))s   \s*(?P<this>(\b(%s)\b))s   \s*(?P<after>%s)\s*\Zsq   character|logical|integer|real|complex|double\s*(precision\s*(complex|)|complex)|type(?=\s*\([\w\s,=(*)]*\))|bytes   .*s   |static|automatic|undefineds   ([a-z]+[\w\s(=*+-/)]*?|)t   functiont   begins	   [a-z\s]*?t
   subroutines   program|block\s*datas?   |module(?!\s*procedure)|python\s*module|interface|type(?!\s*\()sB   end|endprogram|endblockdata|endmodule|endpythonmodule|endinterfaces   [\w\s]*t   ends>   (end\s*(if|do|where|select|while|forall))|(module\s*procedure)s   [\w]*?t   endift   implicits   dimension|virtualt	   dimensiont   externalt   optionalt   requiredt   publict   privatet   intrisics   intent|depend|note|checks   \s*\(.*?\).*t   intentt	   parameters   \s*\(.*t   datat   callt   entryt   callfunt   commont   uset   containst   formatsK   threadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddeft   f2pyenhancementss2   \s*(?P<before>''')(?P<this>.*?)(?P<after>''')\s*\Zt	   multilinec         C` sc   g  } xM t  |   j d  D]6 } x  d D] } | j | d  } q) W| j |  q Wd j |  S(   Ns   @,@s   (),t   _t   ,(   t   markoutercommat   splitR   t   appendR   (   t   argslinet   aR}   Rp   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   _simplifyargso  s    s&   \s*(?P<result>\b[a-z]+[\w]*\b)\s*[=].*c         C` s  d |  k r| t  d j |   p/ t d j |   r| xB |  j d  D]1 } | d k sg t t |    t | |  qC Wd S| d k  r d a i d t 6a i i  t 6a	 i g  t 6a
 g  t	 t d <i  t	 t d <d t	 t d <d t	 t d <d	 a d	 a d S| d k rRd } t r*t t k r*d
 } n  x~ t | k rt d t t  t t  f  t d  t
 t d j t	 t  t
 t t
 t d d	 d <t
 t =t d a q-Wt rNt t k rNt
 t d j t	 t  t
 t t
 t d d	 d <t
 t =t d a t
 t d j t	 t  t
 t t
 t d d	 d <t
 t =t d a d	 a n  d S|  d k rbd Sd } x t t t t t t t t t t t t t t t t t  t! t" t# t$ t% t& t  t g D]- } | d j |   } | rPn  | d } qW| st' } d t k ot k n rd Sd t	 t k rUx+t	 t d D]} | t( k rUt( | } n  d t	 t k r| t	 t d k rq6n  t) j d | t* |   t) j+  }	 |	 r6| j |	 j, d   }
 t- |	 j, d   } |
 rd | | |
 j, d  f }  n d | | f }  t. d j |   } | s:t d t |    d St/ | d |   d Sq6Wn  t0 d k st0 d k rt1 j2   j3 d  rd a5 t d t  n  d S| d d k rd t k ot k  n rt d a t t k rd Sn  t d k rt6 d t   n  t d j |   }	 |	 rm|	 j, d  t t k rmt6 d t |	 j, d   t t t  t7 f   n  t t k rd	 a n  t
 t d j t	 t  t
 t t
 t d d	 d <t
 t =t d a t8 sd a9 qn | d d k r5d t k ot k n rt d a d Sd a: t/ | | d |   d a9 n | d d k rHnw | d d  k rt; rbd Sd t k oyt k n rd St a n4 d t k ot k n rd St/ | | d |   d S(!   s   
    reset=-1  --- initialize
    reset=0   --- crack the line
    reset=1   --- final check if mismatch of blocks occurred

    Cracked data is saved in grouplist[0].
    t   ;i    NR   t   bodyt   varst   blockRc   ii   s(   crackline: groupcounter=%s groupname=%s
sY   crackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
i   t	   externalst
   interfaceds5   (?P<before>[^"]*)\b%s\b\s*@\(@(?P<args>[^@]*)@\)@.*\Zt   beforet   argss   callfun %s(%s) result (%s)R{   s   callfun %s(%s)s8   crackline: could not resolve function call for line=%s.
R   s   .pyfs"   crackline:%d: No pattern for line
R   s>   crackline: groupcounter(=%s) is nonpositive. Check the blocks.t   thissG   crackline: End group %s does not match with previous Begin group %s
	%sR   R   R   (<   t   f2pyenhancementspatternR   t   multilinepatternR   t   AssertionErrorR   t	   cracklineR   t	   groupnamet
   groupcacheR   R   R   R   R)   R   t   dimensionpatternt   externalpatternt   intentpatternt   optionalpatternt   requiredpatternt   parameterpatternt   datapatternt   publicpatternt   privatepatternt   intrisicpatternt   endifpatternt
   endpatternt   formatpatternR   t   functionpatternt   subroutinepatternt   implicitpatternt   typespatternt   commonpatternt   callpatternt
   usepatternt   containspatternt   entrypatternt   crackline_re_1Rh   R   t   markouterparenR   R   R   t   callfunpatternt   analyzelineR   R   R   t   endswithR!   R"   R   R   R   R   R   R   (   R'   t   resetR   t   flR(   t   patR   t   re_1Rc   t   m1t   m2R   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR   z  s   	

				$-
 	

		c         C` s   d } d } x |  D]z } | d k rN | d } | d k r | d } q q n5 | d k r | d } | d k r | d } q q n  | | } q W| S(   NR   i    t   (i   s   @(@t   )s   @)@(    (   R'   R   R|   R   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR    s    

	

	R   c         C` s#  d } d } d } x |  D] } | s2 | d k rQ | d k rQ | d } d } n | r | d k r | s{ | d d k r | d } d } n^ | | k r | d } | d k r d } q n0 | | k r | d k r | d	 | d	 } q n  | | } q W| st  t | |  | | f    | S(
   NR   i    R  R  i   s   'is   \t   @(   R   R   (   R'   t   commaR   R|   t   ccR   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR   #  s(    
	*
	
%c         C` s"   |  j  d d  j  d d  } | S(   Ns   @(@R  s   @)@R  (   R   (   R'   Rp   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   unmarkouterparen:  s    c         C` sp  |  s i  }  n  | s |  S|  | k r) |  Sx@t  | j    D],} | d k rt | s` | |  k rh| | |  | <qhq< | d k r x | | D] } t |  | |  }  q Wq< | d k r t |  | | |  }  q< | d k r t |  | | |  }  q< | d k r&| s| |  k rh| | |  | <qhq< | d k r5q< | d k rRt d |  q< t d t |    q< W|  S(   NR+   t   attrspect   kindselectort   charselectort   =t   typenamet   noteR   t   checkR   R   R   s"   appenddecl: "%s" not implemented.
s,   appenddecl: Unknown variable definition key:(   R  s   typename(   s   intents   checkR   s   optionals   required(   t   listt   keyst   setattrspect   setkindselectort   setcharselectorRb   R   R   (   t   declt   decl2t   forcet   kR   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt
   appenddecl?  s6    	sF   \s*(?P<this>(@\(@.*?@\)@|[*][\d*]+|[*]\s*@\(@.*?@\)@|))(?P<after>.*)\Zs   \s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P<bind>.*)\s*@\)@))*\s*\Zs9   \s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Zs4   ([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)sA   ([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))s   intent\s*\(.*?\bcallback\bc         C` s4   x- |  j  d g   D] } t j |  r d Sq Wd S(   NR  i   i    (   t   gett   _intentcallbackpatternR   (   t   vdeclR   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   _is_intent_callbackk  s    c         C` s   t  |   }  t j |   } | rU | j d  | j d  | j d  | j d  f St j |   } | r | j d  | j d  d  d  f Sd  g  d  d  f S(   NRc   R   R{   t   bind(   R  t   nameargspatternR   R   t   callnameargspatternR!   (   R'   R  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   _resolvenameargspatternr  s    4"c   =   
   C` sk  |  j  d  } | d k r$ d  a n  t r | dv k r t r t d k  r t j j t	  j
 d  d	 } t d
 |  d	 a t d a d t t <i  t t <g  t t <g  t t d <i  t t d <d t t d <| t t d <d t t d <d	 a n  | dw k r	| j   } t j d | t j  r,d } n  t j d | t j  rMd } n  t |  j  d   \ } } } } | d  k r| d k rd } n d } | dx k rt d  qn  | | t f a | rt g  t |  j
 d  D] }	 |	 j   ^ q } n g  } d | k r<x d | k r.| j d  qWt d  n  d	 }
 d	 } | dy k rd } d t t k rnd  S| t t d k rd  Sx& t t D] } | d | k rd  SqW| t t d k rd  Si d d 6d  d 6| } n  t r(t d! k r(t d k r(t d" a d }
 | d k r(d } q(n  t d a i  t t <g  t t <|
 rt d k rrt d# t t  d	  n  d$ t t <d t t d <t t t d <d t t d <g  t t d <g  t t d% <g  t t d <i  t t d <t d a i  t t <g  t t <n  | rt d k r%t d& t d	  n  d t t <d t t d <d' t t d <d( t t d d t t d d f t t d <g  t t d <g  t t d% <g  t t d <i  t t d <t d a i  t t <g  t t <n  | t t <| t t d <| sd) | } n  |  j  d*  t t d+ <t |  t t d <| t t d, <t d k rUt	 t t d <ni t rt d- k rd( t t d d t	 f t t d <n0 d( t t d d t t d d f t t d <x: t t t j    D]" } t t | st t | =qqW| t t d <g  t t d <g  t t d% <g  t t d <i  t t d <i  t t d. <| d k rlg  t t d/ <n  | dz k r| t t d" d% k rt t d" d% j  |  n  t! j" t t d" d  t t d <y0 t t d | t t d | d0 j# d1  =WqqXn  | d{ k ry; t$ t t d | t t d" d d  t t d | <Wn n X| d k r| r| t t d k r| | k st$ t t d | t t d |  t t d | <qqn  y t t d" d j  |  WqqXn  | d  k rqt% d	 j |  j  d*  d2 |  } | rqt& | j  d  | j  d   \ } } } } t' | | | |  qqn  | d| k rgt t d j  t t  t t t t d d! d <t t =t d a t t d j  t t  t t t t d d! d <t t =t d a qgn\| d. k r	t |  j  d   \ } } } } | d  k	 rg| r	t g  t |  j
 d  D] }	 |	 j   ^ qc	 } n g  } | d  k s	t( t |    | t t d. | <d. | t f a qgn| d k r2
t& | |  j  d   \ } } } } t' | | | |  } | d  k	 rgd3 | t f a qgn5| d} k rt t d } |  j  d  j   } | j) d;  } | d	 k  r0| d5 k r0t* |  j) d<  d" } | | d  d; | | d } | j) d;  } | | d; k r0d t t k r0t d= |  j  d  | |  f  | d> j+ t t d  } q0n  | d	 k  rKd	 } d } n | |  j   } | | d" } t |  j
 d  } t, |  d k r| d	 } t d? d> j+ | d   n  d  } xg  t |  j
 d  D] }	 |	 j   ^ qD]j} t- j |  } | sM| d~ k rd } qbt. |  j/    t d@ | t |  f  qn t | j  d   } | | k r{i  | | <n  | d4 k r| | j  d  } n  | d5 k r|  j  d  | } t0 j |  r| t t d k rlt d k r[dA t t d" d k rt dB  n  | t t d k rit dC | t t d f  t t d j  |  qiqzt1 dD |  q}t1 dE |  qn  | d k r| } n  d0 | | k r| | d0 j  |  n | g | | d0 <| d1 k rQt t d d k rt dF  qn  | t t d k rqn  d% t t k r9g  t t d% <n  t t d% j  |  n  | } qW| t t d <| d  k	 rgd3 | t f a qgn| dG k rht t d } |  j  d  j   d d! !} d  } xpt |  j
 d  D]Y} y2 g  | j
 dH  D] }	 |	 j   ^ q\ } } Wn t dI | | f  qn Xt2 |  } t |  } | | k rfi  | | <n  dH | | k r| | dH | k rt dJ | | | dH | f  n  t3 | |  } | r| j4 dK  dL k rSt |  } x[ t5 j6 |  D]J }  t | |  j7   |  j8   !j   j9 dM dN   | |  j7   |  j8   +qWd j+ |  } q| j4 dK  dO k r| d j   j9 dM dN  j9 d> dP  } qn  y t: | i  |  } Wn3 t; t< t= f k
 r} t1 dQ | | f  qn Xt |  | | dH <d0 | | k r| | d0 j  dG  n dG g | | d0 <| } qW| t t d <| d  k	 rgd3 | t f a qgn| dR k rK|  j  d  j   j   dS k rd  t t dR <qg|  j  d  rgdR t t k rt t dR }  n i  }  |  d  k rt dT  i  }  n  x9t |  j  d   j
 d  D]} i  }! t j dU | t j  } | sXt dV |  qn  t> j | j  d   }" |" st dW |  qn  t& |" j  d  |" j  d   \ } } } } t? | |  \ }# }$ }% | |! dK <|# |! dX <|$ |! dY <|% |! dZ <x. t |! j    D] } |! | s
|! | =q
q
Wxt | j  d   j
 d  D] }& d[ |& k ry2 g  |& j
 d[  D] }	 |	 j   ^ ql\ }' }( Wqt d\ |&  qGqXn |& j   }' }( t, |'  t, |(  k od k n st d] |&  qGn  x7 t@ tA |'  tA |(  d  D] }) |! |  tB |)  <qWqGWqW|  t t dR <qgn	| d^ k r]g  } d }* d }+ d	 }, d }- d	 }. x|  j  d  D]}/ |. s|/ d_ k r|- }- n  |/ d` k r|- r|, d }, qqn  |/ da k r|. d }. n |/ db k r|. d }. n  |, d	 k r|* |/ }* q|, d k r6|+ |/ }+ q|, d" k r|* j   }* |* jC d>  rp|* d j   }* n  | j  |* |+ g  |/ }* d }+ d	 }, qqW|, d" k r|* j   }* |* jC d>  r|* d j   }* n  | j  |* |+ g  n  i  }0 d t t k rt t d }0 n  d  } x| D]
}1 g  |1 D] }	 |	 j   ^ q-}1 |1 d	 d	 d> k rn|1 d	 d |1 d	 <n  |1 d	 d	 da k rt dc |1 d	  q n  d	 } d	 }2 t, |1 d  }3 xqt g  t |1 d	  j
 d  D] }	 |	 j   ^ q D]7} | d	 da k rt dc |  qn  d	 }- xS | |3 k  rt|- sI|1 d | d> k rt|1 d | d_ k rg|- }- n  | d } q"W| d } | |0 k ri  |0 | <n  dH |0 | k r|0 | dH |1 d |2 | d !k rt dd | |0 | dH |1 d |2 | d !f  n  |1 d |2 | d !|0 | dH <| }2 | } qWq W|0 t t d <| d  k	 rgd3 | t f a qgn
| de k rV|  j  d  j   } | d	 d` k sdf | } n  g  }4 d	 }, d }5 d }6 x | D] }/ |/ d` k r|, d }, qn  |, d- k r/|5 j   }5 |5 sdg }5 n  |4 j  |5 |6 g  |, d" }, d }5 d }6 n  |, d" rF|5 |/ }5 q|6 |/ }6 qW|5 j   }5 |5 sodg }5 n  |4 j  |5 |6 g  i  }7 de t t k rt t de }7 n  x |4 D] }/ |/ d	 |7 k rg  |7 |/ d	 <n  xX g  t |/ d  j
 d  D] }	 |	 j   ^ qD]$ } | r
|7 |/ d	 j  |  q
q
WqW|7 t t de <de |5 t f a n| dh k r&t j di |  j  d  t j  } | r	| j/   }8 dh t t k ri  t t dh <n  | j  d  } i  t t dh | <d	 }9 dj |8 k r#|8 dj d  k	 r#dk |8 k r|8 dk d  k rd }9 n  |9 t t dh | dl <g  |8 dj j
 d>  D] }	 |	 j   ^ qH} i  }: x | D] }1 dH |1 k rt j dm |1 t j  }" |" r|" j  dh  j   |: |" j  dn  j   <qt do t |1   n
 |1 |: |1 <|: t t dh | dp <qmWq#qgt. |  j/    t dq  nA| d k rdr t t k rSi  t t dr <n  t t dr }; |  j  d  ds k rds |; k rtD |; ds tE  r|; ds g |; ds <n  |; ds j  |  j  d   qg|  j  d  |; |  j  d  <n | d k r>t d  k rt rt dt  n  d  St }< tF t |< t d"  |  j  d   n) t d k rgt. |  j/    t du  n  d  S(   NR   R   R   R   R   R^   i   Rk   i    sB   analyzeline: no group yet. Creating program group with name "%s".
t   programR   R   R   Rc   t   fromskyt   froms   block\s*datas
   block datas   python\s*modules   python modulet   aftert   _BLOCK_DATA_R   t	   interfaces2   analyzeline: No name/args pattern found for line.
s   @,@s<   analyzeline: argument list is malformed (missing argument).
R   R   R   R   ii   s&   analyzeline: Creating module block %s
t   moduleR   sD   analyzeline: Creating additional interface block (groupcounter=%s).
t   unknown_interfaces   %s:%st   unknown_R   t   prefixR{   i   R   t   varnamesR  R   R   t   variableR   R   R   R   R   R   R   s   ::s   @)@s'   All arguments will have attribute %s%s
R   sX   analyzeline: cannot handle multiple attributes without type specification. Ignoring %r.
sE   analyzeline: no name pattern found in %s statement for %s. Skipping.
t   __user__s8   analyzeline: missing __user__ module (could be nothing)
s;   analyzeline: appending intent(callback) %s to %s arguments
s+   analyzeline: intent(callback) %s is ignoreds<   analyzeline: intent(callback) %s is already in argument lists(   analyzeline: ignoring program arguments
R   R  sM   analyzeline: could not extract name,expr in parameter statement "%s" of "%s"
sG   analyzeline: Overwriting the value of parameter "%s" ("%s") with "%s".
R+   R*   t   dt   et   complexs   +1j*(s1   analyzeline: Failed to evaluate %r. Ignoring: %s
R   t   nones<   analyzeline: Overwriting earlier "implicit none" statement.
s9   \s*(?P<this>.*?)\s*(\(\s*(?P<after>[a-z-, ]+)\s*\)\s*|)\ZsD   analyzeline: could not extract info of implicit statement part "%s"
sM   analyzeline: could not extract types pattern of implicit statement part "%s"
R  R  R  t   -sZ   analyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement
s^   analyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement (2)
R   t   'Rl   R  R  s>   analyzeline: implied-DO list "%s" is not supported. Skipping.
s=   analyzeline: changing init expression of "%s" ("%s") to "%s"
R   s   //t   _BLNK_R   sT   \A\s*(?P<name>\b[\w]+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\ZR  t   notonlyt   onlys;   \A\s*(?P<local>\b[\w]+\b)\s*=\s*>\s*(?P<use>\b[\w]+\b)\s*\Zt   locals0   analyzeline: Not local=>use pattern found in %s
t   maps0   analyzeline: Could not crack the use statement.
R   t   usercodes-   analyzeline: No context for multiline block.
s+   analyzeline: No code implemented for line.
(   s   begins   calls   callfuns   type(   s   begins   calls   callfun(   s	   interfaces
   block data(   s   calls   callfun(   s   calls   callfun(   s   functionR   (   s   calls   callfun(   s	   dimensions   intents   optionals   requiredR   s   publicR   R   (   s   publicR   (   s   optionals   requireds   publicR   R   R   (   s   f2pyenhancements(G   R   R!   R"   R   R   R   R   R   t   basenameR   R   R)   R   R   R   R   R   R   R   R   R0  Rg   R   Rw   t   removeR   R   R   R   Rd   R  R   R   t   copyt   deepcopyRQ   R(  R  t   cracktypespec0t
   updatevarsR   t   findR  R   RN   t   namepatternt   printt	   groupdictR*  Rb   t   get_parameterst   determineexprtypeR)  t   real16patternt   finditert   startR   R   t   evalt   SyntaxErrort	   NameErrort	   TypeErrort   typespattern4implicitt   cracktypespecR   t   ordt   chrt
   startswitht
   isinstanceR   t   appendmultiline(=   R   R5   R'   R   t   newnameRc   R   R{   R-  t   xt
   needmodulet   needinterfacet   itR'  t   tR+   t   selectort   attrt   edeclt	   last_nameR   Rn   t   plt   chR?  R  t   apt   initexprt   paramst   ttt   vt   msgt   implR$  R  t
   kindselectt
   charselectR  Rp   t   begct   endct   ot   dlt   ilR|   t   fct   inpR   R   R   t   jt   llent   clt   bnt   olt	   commonkeyt   mmt   isonlyR   R>  t   gc(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR
  }  s   	



			!	1








-


$-!89$*
!1! !	
5	
	

2%E
!	%*




%2
(&

	?*

4+
	
	
	9 	,%
!
c         C` sQ   d |  k r i  |  d <n  |  d } | | k r< g  | | <n  | | j  |  d  S(   Nt   f2pymultilines(   R   (   R   t   context_namet   mlR>  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyRc    s    
c         C` s5  d  } d  } t j d |  t j  r- d }  n3 t j d |  t j  rN d }  n |  j   j   }  t j t |   } | s t d  d  S| j	   } x. t
 | j    D] } t | |  | | <q W|  d k r | d } | d } n  | j d  } | d k r%| |  j   } | | d } n  |  | | | f S(   Ns   double\s*complexs   double complexs   double\s*precisions   double precisions>   cracktypespec0: no kind/char_selector pattern found for line.
R@  R-   t   logicalR*   t	   characterR^   R   R4  s   ::i    i   (   s   complexs   integers   logicals   reals	   characters   type(   R!   R   R   R   Rw   R   t   selectpatternR  R)   RS  R  R   R  RP  (   R+   R   Rj  Rk  R  R>  R'  Rn   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyRN    s.    		
s+   \s*(?P<name>\b[\w]+\b)\s*(?P<after>.*)\s*\ZsC   \s*(\(\s*(kind\s*=)?\s*(?P<kind>.*)\s*\)|[*]\s*(?P<kind2>.*?))\s*\Zs3   \s*(\((?P<lenkind>.*)\)|[*]\s*(?P<charlen>.*))\s*\Zs   \s*(kind\s*=\s*(?P<kind>.*?)\s*(@,@\s*len\s*=\s*(?P<len>.*)|)|(len\s*=\s*|)(?P<len2>.*?)\s*(@,@\s*(kind\s*=\s*|)(?P<kind2>.*)|))\s*\Zs   \s*(@\(@\s*(?!/)\s*(?P<array>.*?)\s*@\)@\s*[*]\s*(?P<len>.*?)|([*]\s*(?P<len2>.*?)|)\s*(@\(@\s*(?!/)\s*(?P<array2>.*?)\s*@\)@|))\s*(=\s*(?P<init>.*?)|(@\(@|)/\s*(?P<init2>.*?)\s*/(@\)@|)|)\s*\Zc         C` s   |  j    }  t |   d k r" |  S|  d } xm t d t |   d  D]R } |  | d k r |  | d d k sF |  | d d k r qF n  | |  | } qF W| |  d } | S(   Ni   i    R   s   ()[]{}=+-/* i(   Rw   RN   R   (   t   exprt   expr2Rn   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   removespaces  s    
 c         C` s   d } d } d } d } x |  D] } | d k rS | d	 k rS | | } | } q n  | d k rt | d
 k rt | } n  | | k r | d } nA | | k r | d } n( | d k r | d k r | d } q n  | | } | } q W| S(   NR   i    s   's   \t   "i   R   s   @_@(   s   \s   'R  (   s   'R  (    (   R'   R   R|   R  t   cbR   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   markinnerspaces  s*    
	


c      	   C` s  d  } t |  |  \ } } } | r g  t |  j d  D] } | j   ^ q: } g  }	 t j d  }
 xh | D]` } | s qn n  |
 j |  } | r | j d  j	   } | | t
 |  } n  |	 j |  qn W|	 } n  g  t |  j d  D] } | j   ^ q } g  } x{ | D]s } xj g  t t t |   d d j d  D] } | j   ^ qGD]( } | r]| j | j d d   q]q]WqWx| D]} t j |  } | st d t |   qn  t | j d	   } i  } | t t d
 k rt t d
 | j   } d | k } | r/|  | d <n5 |  rd|  | d k rdt d | | d |  f  n  d | k rt j |  | d <n | rx t | j    D]s } | | d k r| | | d | k rt d | | | d | | | f  qt j | |  | d | <qWn  d | k rU| rU| r>| | d <qt d | | f  n | rx t | j    D]s } | | d k r| | | d | k rt d | | | d | | | f  qnt j | |  | d | <qnWn  d | k r| | d <n5 | r6| d | k r6t d | | d | f  n  d | k rXt j |  | d <q| rx5 | D]* } | | d k re| d j |  qeqeWqnV t j |   | d <t j |  | d <t j |  | d <| | d <t j |  | d <| j d  r0t j t | j d    } | r| j   } xK d d d g D]: } | | d d  k	 r>| | d | | <| | d =q>q>WxH t | j    D]4 } | | d  k	 rt | |  | | <q| | =qWd | k rLd | k rL| d d k r| d | d <| d =qL| d d | d | d <| d =t d |  | |  | | d f  n  d | k rd | d } d | k s}| d r| g | d <q| d j |  xW | d D]H } | d  d k r| | k r| d d  =t d! | | | f  PqqWn  d | k r|  d, k rId | k s'| d r4i  | d <n  | d | d d& <q|  d' k rd | k sl| d ryi  | d <n  d | d k r| d d =n  | d | d d& <qn  d | k r-d( | k r| d( | d k rt d) | | d( | d f  q| d | d( <q-q0t d* | | j d   n  x. t | j    D] } | | sC| | =qCqCW| t t d
 | <d+ t t k rt t d+ j |  n  | } qW| S(-   Ns   @,@s   (?P<start>[a-zA-Z]+)RX  R  R   s   @ @s   @_@s;   updatevars: no name pattern found for entity=%s. Skipping.
Rc   R   R+   sI   updatevars: attempt to change the type of "%s" ("%s") to "%s". Ignoring.
R  sV   updatevars: attempt to change the kindselector "%s" of "%s" ("%s") to "%s". Ignoring.
R  sE   updatevars:%s: attempt to change empty charselector to %r. Ignoring.
sV   updatevars: attempt to change the charselector "%s" of "%s" ("%s") to "%s". Ignoring.
R  sM   updatevars: attempt to change the typename of "%s" ("%s") to "%s". Ignoring.
R  R4  RN   t   arrayt   initt   2R   R   s-   updatevars: "%s %s" is mapped to "%s %s(%s)"
s   dimension(%s)i	   R   is5   updatevars:%s: attempt to change %r to %r. Ignoring.
R@  R-   R  R*   R   R  R  sT   updatevars: attempt to change the init expression of "%s" ("%s") to "%s". Ignoring.
s?   updatevars: could not crack entity declaration "%s". Ignoring.
R;  (   s   complexs   integers   logicals   real(   R!   R^  R   R   Rw   R   R   R   R   R   RN   R   R  R  R   RQ  R)   R   Rd   R   R   RL  R  R   Rb   t   lenarraypatternR  RS  R  (   R+   Rj  R  t
   entitydeclRm  Rw  Rx  R  Re  R   R   R   R   t   st   elt   el1R?  t   e1t   enameRl  t   not_has_typespecR'  R  t   d1t   lkt   dmt   dm1(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyRO    s   .	.G$)#")#"

!

c   	      C` s  d  } d  } d  } | r|  d k r t j |  } | sQ t d t |   d  S| j   } | d | d <| d =x. t | j    D] } | | s | | =q q Wxt | j    D] \ } } t	 |  | | <q Wq|  d k r&t
 j |  } | st d	 t |   d  S| j   } | d
 | d <| d
 =| d rt j t | d   } | j   } xS d d g D]B } | | d r| | d | | <n  | | | | <| | d =qoWn  | d =x. t | j    D] } | | s| | =qqWx t | j    D] \ } } t	 |  | | <qWq|  d k r}t j d | t j  } | rb| j d  } qt d t |  |   qt d t |   n  | | | f S(   NR@  R-   R  R*   s4   cracktypespec: no kindselector pattern found for %s
t   kind2R   R  s4   cracktypespec: no charselector pattern found for %s
t   charlent   lenkindRN   t   kindR  R^   s   \s*\(\s*(?P<name>\w+)\s*\)Rc   s'   cracktypespec: no typename found in %s
s'   cracktypespec: no selector used for %s
(   s   complexs   integers   logicals   real(   R!   R  R   R)   R   RS  R  R   t   itemsRd   R  t   lenkindpatternR   R   R   R   (	   R+   Rj  Rw  Rx  R  R'  Rn   R  R  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR^    sf    


c         C` s9  |  s i  }  n  | s |  Sd |  k r6 | g |  d <|  S| rP |  d j  |  n  | |  d k rd |  S| d k r d |  d k r |  d j  |  n | d k r d |  d k r |  d j  |  nq | d k r d |  d k r |  d j  |  nA | d k r$d |  d k r$|  d j  |  n |  d j  |  |  S(   NR  R@   t	   automaticR   R   (   R   (   R$  Rk  R&  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR!    s*    	c         C` s   |  s i  }  n  | s |  Sd |  k r3 | |  d <|  SxE t  | j    D]1 } | sb | |  d k rF | | |  d | <qF qF W|  S(   NR  (   R  R   (   R$  t   selR&  R'  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR"    s    	
c         C` s   |  s i  }  n  | s |  Sd |  k r3 | |  d <|  SxE t  | j    D]1 } | sb | |  d k rF | | |  d | <qF qF W|  S(   NR  (   R  R   (   R$  R  R&  R'  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR#    s    	
t   unknownc         C` s   d |  k r |  d S| S(   NRc   (    (   R   R  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   getblockname  s    c         C` s*   y d |  d |  d f a  Wn n Xd  S(   Ns
   In: %s:%s
R3  Rc   (   R   (   R   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   setmesstext  s    c         C` sI   i  } d |  k r% t  |  d  } n  d |  k rE | j |  d  n  | S(   Nt   parent_blockR   (   t   get_usedictt   update(   R   t   usedict(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR    s    c   	      C` s"  | d  k r i  } n  t |   } | s+ | Sx t | j    D] \ } } | j   } | t k r t d | |  j d  f  q> n  t | } t |  } | s q> n  | r t	 d |  n  xY t | j    D]E \ } } | | k rt d t
 |  t
 |  f  n  | | | <q Wq> W| S(   Ns0   get_useparameters: no module %s info used by %s
Rc   s+   get_useparameters: mapping for %s not impl.sD   get_useparameters: overriding parameter %s with value from module %s(   R!   R  R  R  R   R   R)   R)  RT  Rb   R   (	   R   t	   param_mapR  t   usenamet   mappingt   mvarsRr  R'  Rt  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   get_useparameters  s.    	
c         C` s  t  s
 |  St |  t  r] g  } x7 |  D]/ } t | d | d d | } | j |  q& W| St |   t d | |  d f d  | d  k r t |   } n  | d  k	 r8d |  k r8|  d } xv t | j	    D]_ } | | } d | k r | d } d	 | k r1| d	 }	 |	 | k r.| |	 | d	 <q.q1q q Wn  g  }
 x; |  d
 D]/ } t | d | d d | } |
 j |  qIW|
 |  d
 <|  S(   Nt   tabs   	R  s   %sBlock: %s
Rc   i    R   R  R  R   (
   R   Rb  R  t
   postcrack2R   R  R)   R!   R  R   (   R   R  R  t   rett   gR   R}   t   varR  t   valt   new_bodyt   b(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR  ,  s8    





c         C` s  t  |  t  r g  } g  } xg |  D]_ } t |  t | d | d } d | k rt d | d k rt | j |  q" | j |  q" W| | St |   t  |  t  r d |  k r t d t |     n  d |  k r|  d d k rt d | |  d f d	  n  t	 |   }  t
 |   }  t |   |  d
 <t |  d
  |  d <d |  k rf|  d rf|  d } n  t |  | d | |  d <g  } d |  k r|  d } x? t | j    D]" } d | k r| j |  qqWn i  } d }	 d |  k r|  d }	 n  d |  k rp|  d rpg  }
 d |  k r1|  d }
 n  t j |  d
  } |	 rW|	 d } n d } | | k rd } x$ d | | f | k r| d } qrWd | | f } n  i d d 6g  d 6i  d
 6|	 d d 6} x3|  d D]'} | |
 k rg  } d } x |  d D] } | d } | d d k rd } xV | d D]J } | d } d | k r4| d | k r4t j |  } | d | =Pq4q4W| r| d s|  d | =n  |
 |
 j |  =PqqqW| d j |  q| | k rt | |  r| | | d
 | <qqW| d
 s| d rp|
 |  d <i d d 6| g d 6i  d
 6| d 6|  d d 6} i  | | <t j |  qpn  | r| |  d <n  |  S(   si   
    TODO:
          function return values
          determine expression types if in argument list
    R  s   	Rc   R=  R   s0   postcrack: Expected block dictionary instead of R8  s   %sBlock: %s
i    R   t   sortvarsR   R   R   R   R   R   t   __user__routinest   unknown__user__routinesi   s   %s_%iR6  t   _user_interfaceis   python module(   Rb  R  R  t	   postcrackR   t   dictR   R   R)   t   analyzeargst   analyzecommont   analyzevarst   sortvarnamest   analyzebodyR   RL  RQ   t
   isexternalR   (   R   R   R  t   grett   uretR  t   userisdefinedt   useblockR'  Rc   R   R  t   mnameRn   R6  R?  t   edefR  R  t   bbt   mblock(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR  P  s    







&
c         C` sL  g  } g  } xU t  |  j    D]A } d |  | k rS |  | d rS | j |  q | j |  q Wt |  } d } x | rG| d } d } x0 | d D]$ } | |  | d k r d } Pq q W| r| d | g } | d } | | k rDt d d j |  d  | | } PqDqy | j |  | d } t |  } d } qy W| S(   Nt   dependi    i   sT   sortvarnames: failed to compute dependencies because of cyclic dependencies between s   , s   
(   R  R   R   RN   Rb   R   (   R   t   indept   depRt  R}   Rn   R  t   w(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR    s8    	




c   	      C` s	  t  |   s |  Sg  } xt |  d j    D]} g  } x|  d | D]|} t j d | t j  } | rg  } | j d  r g  t | j d   j d  D] } | j	   ^ q } n  | j d  j	   } | |  d k rBd |  d | k r|  d | d j
 d d	 j |   q~d d	 j |  g |  d | d <n< | rpi d d	 j |  g d 6|  d | <n i  |  d | <| | k r| j
 |  qn | } t d
 | | f  | j
 |  qH W| |  d | <q- Wd |  k r| |  d <n |  d | |  d <|  S(   NR   s2   \A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\Zt   dimss   @,@Rc   R   R  s   dimension(%s)R   sN   analyzecommon: failed to extract "<name>[(<dims>)]" from "%s" in common /%s/.
t
   commonvars(   t	   hascommonR  R   R   R   R   R   R   R   Rw   R   R   Rb   (	   R   R  R'  t   comvarsR?  R   R  Re  R}   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR    sD    7%%c         C` sn  t  |   g  } xW|  d D]K} |  | d <| d d k r | d  k	 r] | d | k r] q n
 | d } | d t k r} q n  t r | d t k r q n  t | d d d t | d <n | } t | | d | d } | d d k r| d rd | k rq qn  | d j d	 d  d k r4t j	 |  q | d d k rY| d t
 | d <n  | j	 |  q W| S(   NR   R  R   R   R   Rc   R   s   
R   i   t   as_interfacet   saved_interfaceR  s   	R6  R   R   t   pythonmoduleR7  R   (   s   functions
   subroutines         (   R  R!   R   R   t   crack2fortrangenR   R  R   R   R   R   (   R   R   R  R   R  t   as_(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR    s2    


	c         C` s   t  |   t } i  } d |  k r |  d d  k rb d  } t d k r t d t |  d   q q xi t |  d j    D]N } |  d | j d  d k r |  d | | | <qy |  d | d | | <qy Wn  | | f S(	   NR   i   s6   buildimplicitrules: no implicit rules for routine %s.
Rc   R+   R@   R  (   s   statics	   automatic(	   R  t   defaultimplicitrulesR!   R   R)   R   R  R   R)  (   R   t   implicitrulest	   attrrulesR'  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   buildimplicitrules  s    
c         C` sN   t  |  | |  } t |  t d  t d  g k r: | St d |   d  S(   Ni    g        s   r=%r(   RY  R^   R   (   R?  R  R   Rp   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   myeval2  s    $s   \A\b\w+\b\Zc         C` s  y) t  t |  i  i    } d | d  f SWn n Xt j |   rO d d |  f St |   } xK| D]C} t |  | k r qb n  t j d | d |   r qb n  t j d | d t j	  } | j |   } | rb y| j |   } x> | r$d | j
 d  d | j
 d	  f } | j |  } q Wt | i  i   }	 | j |   } x> | rd | j
 d  d | j
 d	  f } | j |  } qIWt | i  i   |	 }
 | j |   } x> | rd | j
 d  d
 | j
 d	  f } | j |  } qWt | i  i   } | j |   } x> | rNd | j
 d  d | j
 d	  f } | j |  } qWt | i  i   } |
 d
 |	 | k r|
 d |	 | k r|
 |	 | f SWn n XPqb qb Wd S(   Ni    i   s   \w\s*\([^)]*\bs   \bs   (?P<before>.*?)\bs   \b(?P<after>.*)s   %s(%s)%sR   R4  g      ?g      ?(   NNN(   R.   R  R!   t   getlincoef_re_1R   RN   R   t   searchR   R   R   (   R?  t   xsetR   t   len_eRe  R  R   R  t   eeR  R   t   c2(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt
   getlincoef;  s^    	"	"	"	"(s   \A[a-z]\w*\ZR   c         C` s?	  g  } y! | j  t |  d i  i    Wn | j  |  d  n Xy! | j  t |  d i  i    Wn | j  |  d  n Xt | d t  r d | d } | d k r t |  d  } qf| d k  r d |  d | f } qfd |  d | f } nm t | d t  rNd | d } | d k r7d |  d } qfd | |  d f } n d |  d |  d f } y# t t | i  i    d  d  f SWn n Xt |  d |  t |  d |  } } d  | d | d g k r2	| d | d f d k rt | d | d d  d  d  f S| d | d d } | d d | d f } | d | | d f } | d d k r| d | k r| d k  rd	 | d | d | f | d d
 | | d f f S| rd | d | d | f | d d | | d f f Sd | d | d f | d d | d f Sn  | d d k r| d | k r| d k  rd	 | d | d | f | d d
 | | d f f S| rd | d | d | f | d d | | d f f Sd | d | d f | d d | d f Sn  | d | d k r| d | k r| d | d }	 |	 s>t |  d  d  f S| d k  rxd	 |	 | d | f | d d
 | |	 f f S| rd |	 | d | f | d d | |	 f f Sd |	 | d f | d d |	 f Sn  | d | d k od k n rt | d  }
 |
 | k r:t |
  r-t	 d |
  n  d |
 }
 n  | d k r]d | d |
 f } q/	| d k  rd | d |
 | f } q/	d | d |
 | f } q2	| d d k rt | d  } | | k rt |  rt	 d |  n  d | } n  | d d k rn1 | d d k r$d | } n d | d | f } | d k rM| } q/	| d k  rmd | | f } q/	d | | f } q2	| d d k rt | d  } | | k rt |  rt	 d |  n  d | } n  | d d k rd | } nY | d d k rd | } n< | d d k  r8d | d | f } n d | d | f } | d k ra| } q/	| d k  rd | | f } q/	d | | f } q2	t | d  } | | k rt |  rt	 d |  n  d | } n  | d d k rd | } nY | d d k rd | } n< | d d k  r<d | d | f } n d | d | f } t | d  } | | k rt |  rt	 d |  n  d | } n  | d d k rn1 | d d k rd | } n d | d | f } | d k rd | | f } q2	| d k  r	d | | | f } q2	d | | | f } n  | d  d  f S(   Ni    i   s   %s-%ss   %s+%ss   -(%s)s   %s-(%s)s	   %s-(%s)+1i   s   %s * %s - %ss	   +%s)/(%s)s   %s * %s + %ss	   -%s)/(%s)s   %s * %ss   )/(%s)s#   	getarrlen:variable "%s" undefined
s   (%s)s   %s-%s-%ss   %s-%s+%sis   -%ss   %s*%ss   +%ss   +%s*%ss   -%s*%ss   %s%ss   %s%s-%ss   %s%s+%s(   i    i    (
   R   R  Rb  R.   R   R   R!   R  t   _varname_matchR)   (   R|  R   t   start   edlt   p1R>  R  t   d2R  R   R   R  t   c1(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt	   getarrlenq  s    !!#'# 64. 860$.,&$		s   \b[a-z][\w$]*\bc         C` s  |  | k r | |  j  d g   } d | |  k r t | |   r xJ t j | |  d  D]. } | | k r[ | | k r[ | j |  q[ q[ Wn  xw | D]Q } xH | j  | g   p t | | |  D]" } | | k r | j |  q q Wq Wn t d t |    g  } | | |  <| S(   NR  R  s,   _get_depend_dict: no dependence info for %s
(   R)  t   isstringt   word_patternt   findallR   t   _get_depend_dictR)   R   (   Rc   R   t   depst   wordst   wordR  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR  		  s    !
c         C` s=   t  |  j    } i  } x | D] } t | |  |  q W| S(   N(   R  R   R  (   R   Re   t   depend_dictR}   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   _calc_depend_dict	  s
    c         C` s   t  |   } g  } x; t | j    D]' } | | s% | j |  | | =q% q% Wxy | r xl t | j    D]X \ } } g  | D] } | | k r | ^ q } | s | j |  | | =ql | | | <ql WqS Wg  | D] } | |  k r | ^ q S(   s   
    (   R  R  R   R   R  (   R   R  Re   Rc   t   lstR}   t   new_lst(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   get_sorted_names%	  s    
	%
c         C` sR   |  d d k r  |  d d !}  n  t  j |   r3 d St j |   rF d Sd |  d S(	   Ni    s   '"i   ii   i   s   kind(R  (   RV  R   t   real8pattern(   RY   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt
   _kind_func9	  s    c         C` s^   d |  } | d k r d S| d k r* d S| d k r: d S| d k rJ d S| d k rZ d Sd
 S(   Ni
   i   i   i   i   i    i   i?   i   ii   i   I       l            l	                    (    (   Rp   R   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   _selected_int_kind_funcD	  s    
c         C` s   |  d k  r d S|  d k  r  d St  j   j   } | j d  sP | j d  rc |  d k r d Sn  |  d k  rs d	 S|  d k r d Sd
 S(   Ni   i   i   i   t   powert   ppc64i   i   i
   i(   t   platformt   machineR   Ra  (   t   pRp   t   radixR  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   _selected_real_kind_funcT	  s    c         C` s-  t  j  |  } t  j  |  } xH d t f d t f d t f g D]% \ } } | | k r@ | | | <q@ q@ Wg  } xH t |   D]: } d |  | k r| d |  | d k r| | j |  q| q| Wt j d t j  } t j d t j  }	 t j d t j  }
 x-| D]%} d	 |  | k r|  | d	 } t	 |  |  ri| j
   } x& d d g D] } | j |   } qMWn  | j d |  } |	 j d |  } t } d |  | k rd |  | d k rt |  } | j d |  | d d d  } t |  | k  } qn  | sk|
 j |  sk| j d  } t |  d k rhd j | d   j
   j | d j
   d  } qhqkn  t |  |  rt |  } x[ t j |  D]J } t | | j   | j   !j
   j d d   | | j   | j   +qWd j |  } nR t |  |  rI| d d k rI| d d k rIt | d d ! j d  } qIn  y t | | |  | | <Wn7 t k
 r} | | | <t d | t |  f  n Xt |  |  rt | | t   rt! | |  | | <n  | j
   } | | k r%| | | | <q%q t" |  |  t d t |   q W| S(   NR  t   selected_int_kindt   selected_real_kindR  R   s    \bkind\s*\(\s*(?P<value>.*)\s*\)s-   \bselected_int_kind\s*\(\s*(?P<value>.*)\s*\)s4   \bselected_(int|real)_kind\s*\(\s*(?P<value>.*)\s*\)R  s   .false.t   Falses   .true.R   s
   kind("\1")s   selected_int_kind(\1)R  R   R   i   iR>  R?  i    R  R  s   @,@s   get_parameters: got "%s" on %s
s2   get_parameters:parameter %s does not have value?!
(   s   .false.s   False(   s   .true.s   True(#   RL  R  R  R	  R  R   R   R   R   t	   islogicalR   R   t   subR  RN   R   R   R   t   isdoubleR  RV  RW  RX  R   t	   iscomplexR   RY  R   R)   R   R  Rb  R.   R`  RR  (   R   t   global_paramsRr  t   g_paramsRc   t   funct   param_namesR}   t   kind_ret   selected_int_kind_ret   selected_kind_reRt  t   replt   is_replacedt
   orig_v_lent   v_Rs  R   R   Ru  t   nl(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyRT  g	  sz    	$"8
E "
#c         C` s   |  d k r d St  |  |  S(   Ns   (:)s   (*)R   (   s   (:)s   (*)R   (   t   _eval_scalar(   t   lengthRr  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   _eval_length	  s    s   \d+_c         C` s   t  |   r" |  j d  d }  n  y t t |  i  |   }  WnM t t f k
 rX |  St k
 r } t d | |  t | j	    f  n X|  S(   NR   i    s,   "%s" in evaluating %r (available names: %s)
(
   t   _is_kind_numberR   R   RY  R[  RZ  R   Rb   R  R   (   t   valueRr  Ru  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR  	  s    !c   7   
   C` si  t  |   t |   \ } } t j |  d  } |  d d k r` |  d | k r` i  | |  d <n  d |  d k r | d =d |  d d k r |  d d d } xZ t | j    D]C } x: d d g D], } | | k r t | | |  | | <q q Wq Wq n  g  } |  d	 } x; | D]3 }	 y | |	 | j |	  Wqt k
 rFqXqWx6 t | j    D]" } | | k r^| j |  q^q^Wt | t	 |    }
 i  } t
 j d
  j } x t | j    D]t } | |  } | r| | j   | j   !} y | | Wq8t k
 r4t
 j d | t
 j  j | | <q8XqqWx| D]} | d t | j    k rt | | | | d  | | <n  d | | k rd | | k od | | d k s| r| d j   } x t | | j    D] } | d k r| | | d k rqn  | | | k r=| | | | | | <q| d k rx0 | | | D] } t | | |  | | <qXWqqWq| |  d	 k rt d t |  |  d f  qqn  d | | k r.d | | d k r.| | d d } y t t | i  |
   } Wn n X| | | d d <q.n  d | | k rd | | d k r| | d d } y t t | i  |
   } Wn n X| | | d d <qn  i  } d | | k r
| | d } | j   g  | | d <dP \ } } } } } xF| D]>}	 |	 d  d k r*|	 d j   d d !} n |	 d  d k rT|	 d j   d d !} n |	 d  d k r~|	 d j   d d !} nk |	 d  d k r|	 d j   d d !} nA |	 d  d k r|	 d j   d d !} n t | | |	  | | <| rd | | k rg  | | d <n  xt g  t |  j d   D] } | j   ^ q)D]D } | j d! d  } | | | d k r?| | d j |  q?q?Wd  } n  | r| j d" d#  } | j d$ d%  } d | | k r| g | | d <n | | d j |  d  } n  | d  k	 rd | | k r)g  | | d <n  xh t g  t |  j d   D] } | j   ^ qE D]2 } | | | d k r^| | d j |  q^q^Wd  } n  | d  k	 rd | | k rg  | | d <n  xb g  t |  j d   D] } | j   ^ qD]2 } | | | d k r| | d j |  qqWd  } qqW| r
d | | k r
g  | | d <xIt g  t |  j d   D] } | j   ^ q| D]} d& } | d' k rd' } n  | |
 k rt |
 |  } n  x t |
 j    D]x } t
 j d( | d) t
 j  } | j |  } xC | r_	| j d*  t |
 |  | j d+  } | j |  } q	WqW| | k r|	| g } n t | d'  j d,  } t |  d- k r	d& | k r	d& g } d& } n  t |  d k r	| d | k r	d. | d g } n  t |  d- k r
t | t |  d j     \ } } }  | d  d/ k rQ
| d } n  |  rt
|  d0 d1 k rt
|  d0  }  n  | r
| |  f | | <q
n  | | d j |  qWq
n  d | | k rt | |  r
d2 }! n d2 }! t  | |  rd | | k r| | d } d& | k r| d& } t! d3 | | d4 j" | | d  | d4 j" | | d | g  f  | | d j |  | | d =d | | k rg  | | d <n  d5 | | d k r| | d j d5  qqt! d6 |  qqn  d | | k rd	 |  k r| |  d	 k rd | | k }" |" rBg  | | d <n  g  | | d <d | | k rd }# t | | d  }$ x| | d D]E} g  }% d }& d }' | | k r9| | k rd7 | | d }' }& | | d } q9xW |  d	 D]H }( |( | k rqn  t
 j d8 |( d9 | t
 j  r|% j |(  qqWn  | | k rd | | k rxP | | d D]= }) |) d  d k rd|% |) d j   d d !j d4  7}% qdqdWn  d | | k r|% | | d }% qn  |# d }# | | k rid | | k rid: | | k ri| | | d k rit# t$ t% t&  | |  ri| g | | d <|$ d k rwd; |' |! | |# |& f | | d: <n d< |' | |& f | | d: <d rd | | k r|$ d k rd= |' |! | |# |& | f g | | d <qd> |' | |& | f g | | d <n  d | | k r&d? g | | d <n  d? | | d k rd@ | | d k r| | d j d?  qq| dQ k r|" r| | k r| |% k r| | d j |  qq| | d |% | | d <qqqWn t' | |  rd. }* d | | k rd& | | d k r?t( | | d d& |
  }* |* | | d d& <qd | | d k rt( | | d d |
  }* | | d d =|* | | d d& <qqn  | | d s| | d =n  |" r| | d r| | d =qn  d: | | k rCd | | k rg  | | d <n  d? | | d k rKd@ | | d k rK| | d j d?  n  d | | k rg  | | d <xL t | j)    D]8 \ } } | | | d:  r|| | d j |  q|q|W| | d s| | d =qn  t* | |  rt+ | | d: |
  | | d: <qqCqCWxIt | j    D]5} | |  d k r#d | | k r^| | d |  d <n  |  d d k rXdA |  k r|  dA | k rt, | | | |  dA  | | <n  dB |  k rU|  dB }+ d }, d }- |+ j dC d  }. |+ |. k }, |. j dD d  }+ |+ |. k }- t- d j |+  } | r7t. | j dE  | j d+   \ }/ }0 } }1 t/ |/ |0  \ }2 }3 }4 |/ | | d <|2 rd |2 k ry t |2 d i  |
  |2 d <WqqXn  |2 | | d <n  |3 r|3 | | d <n  |4 r|4 | | dF <n  |, rt | | dC  | | <n  |- rOt | | dD  | | <qOqRt dG t |  dB   qUqXq#q#W|  d dR k redL |  k rt j |  d	 |  dL  }5 n t j |  d	  }5 xC t | j    D]/ } t# t0 t1  | |  r|5 j |  qqWdM |  k rq|5 j2 t |  dM j     xV t |  dM j    D]; } x2 |  dM | D]" } | |5 k rD|5 j |  qDqDWq/Wn  |  d d k rdA |  k r|5 j |  dA  q|5 j |  d  n  |  d dS k r|  d }6 |6 | k rd | |6 k r| |6 d |  d <qn  |  d dO k r/|5 j2 t | j     n  x3 t | j    D] } | |5 k rB| | =qBqBWn  | S(T   NR   R   R   Rc   R   R  R   R   R   s   \w[\w\d_$]*s   .*\b%s\bi    R+   R   t	   undefinedsC   analyzevars: typespec of variable %s is not defined in routine %s.
R  RN   R  R  i	   R   i   ii   R   R  i   R  i   R  s   @,@R   s   \n\ns   

s   \n s   
R   t   :s   (?P<before>.*?)\bs   \b(?P<after>.*)R   R4  s   @:@i   t   1s   1 * is   /(1)RP   so   analyzevars: character array "character*%s %s(%s)" is considered as "character %s(%s)"; "intent(c)" is forced.
R   R   s'   analyzevars: charselector=%r unhandled.R  s   .*?\bs   \bR  s   %s%s(%s,%s)%ss   %slen(%s)%ss   %s%s(%s,%i)%s==%ss   %slen(%s)%s>=%sR   R   R{   R:  t   puret	   recursiveR   R  s'   analyzevars: prefix (%s) were not used
R7  R  s   python modules
   block dataR  R   R   R^   (   NNNNN(   R   R#  (   s   modules   pythonmodules   python modules
   block data(   s
   subroutines   function(3   R  R  RL  R  R   R!  R   t   KeyErrorRT  R  R   R   R   RX  R   R   R   R)   R   R   RY  t   reverseR!   Rw   R   R   R   Rg   R   RN   R  t
   isintent_ct   isstringarrayRb   R   t   l_ort   isintent_int   isintent_inoutt   isintent_inplaceR  R  R  t   isscalarR  R(  R  RN  R^  t   isintent_callbackt   isintent_auxt   extend(7   R   R  R  R   t   genR}   R'  t   svarsR   R   Rr  t   dep_matchest
   name_matchRt  R   t   ln0R   t   savelindimsRk  t   dimR   R  R  R  Re  R   t   tmpR>  R  R  R  R|  t   dit   shape_macroR(   Rn   t   nit   ddepst   adt   pdRp   t   aaR  t   prt   ispuret   isrect   pr1R+   Rj  Rl  Rw  Rx  R  t
   neededvarsRc   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR  	  s~   
 (
+"$ %!
5		;	5;		*		#(	
&, .
$!'$'		)"
*"
s   \A[a-z]+[\w$]*\Zc         C` s  |  } t  j |   } | r t |  \ } } t |  | d |  } d } xC |  D]; }	 |	 j   }	 |	 t j t j k r d }	 n  | |	 } qQ W| d d k r | d } n
 | d } | }  x1 |  | d k s |  | d k r |  d }  q Wn  |  | k r=d	 }
 x$ |  t |
  | k r)|
 d	 }
 qW|  t |
  }  n  | rT| | d |  <n |  | d k r| | d k r| d | | d |  <qi  | d |  <n  d
 | k r| | d
 | d k rt	 | d |  d  | d |  <n  |  S(   NR   t   e_R   iR?  t   _eR   Rp   i   R   R   R   (
   t   analyzeargs_re_1R   R  RU  R   RY   t   ascii_lowercaset   digitsR   R!  (   R   R   R   t   orig_at	   a_is_exprR  R  t   att   naR   R'  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt	   expr2name5  s>    	
#$"c         C` s  t  |   t |   \ } } d |  k r5 g  |  d <n  g  } x1 |  d D]% } t | |  |  } | j |  qF W| |  d <d |  k r xY t |  d j    D]> \ } } x/ | D]' } | |  d k r i  |  d | <q q Wq Wn  xj |  d D]^ } | d | k r d |  k rg  |  d <n  | d |  d k rJ|  d j | d  qJq q Wd |  k r|  d |  d k ri  |  d |  d <n  |  S(   NR   R   R   R   Rc   R   R{   (   R  R  RP  R   R  R  (   R   R  R  R   R   R'  t   args1R  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR  Z  s.    

# s   \A\(.+?[,].+?\)\Zs   \A[+-]?\d+(_(P<name>[\w]+)|)\Zs+   \A[+-]?[\d.]+[\d+-de.]*(_(P<name>[\w]+)|)\Zs
   \A\(.*\)\Zs   \A(?P<name>\w+)\s*\(.*?\)\s*\Zc         C` sw   t  |  t  r i d d 6St  |  t  r4 i d d 6St  |  t  rN i d d 6St  |  t  ra |  St t |     d  S(   NR-   R+   R*   R@  (   Rb  R.   R0   R@  R  R   R   (   Rp   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   _ensure_exprdict|  s    c   	      C` sr  |  | k r t  | |   S|  j   }  t j |   r@ i d d 6St j |   } | r d | j   k r | j d  r t d t |    n  i d d 6St	 j |   } | r d | j   k r | j d  r t d t |    n  i d d 6Sx{ d d d	 d
 g D]g } x^ g  t
 |  d | j d | d  D] } | j   ^ q0D]  } | | k rFt  | |  SqFWqWi  } t j |   rt |  d d !| |  } n t j |   } | r(| j d  } t | j d  | |  } | rd | k r| d =n  | s(| d | k r%t  | | d  Sq(n  |  d d k rQi d d 6i d	 d	 6d 6S| snt d t |    n  | S(   NR@  R+   Rc   s:   determineexprtype: selected kind types not supported (%s)
R-   R*   t   +RB  R   Rl   R  R  i   iR  i    s   '"R  R  s>   determineexprtype: could not determine expressions (%s) type.
(   RR  Rw   t   determineexprtype_re_1R   t   determineexprtype_re_2RS  R   R)   R   t   determineexprtype_re_3R   R   t   determineexprtype_re_4RU  t   determineexprtype_re_5(	   R  R   t   rulesR   t   opRe  R?  Ri  t   rn(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyRU    sN    !!C
s   
c         C` s  t  |   d } t |  t  r xr |  D]j } | rw | d d k rw | d t k rX q& n  t rw | d t k rw q& qw n  | t | | d | } q& W| Sd } d } d } |  d } | d k r d Sg  }	 d |  k r |  d } n  d |  k ro|  d	 }
 xD |  d D]8 } t | |  |	  } t |
 |  s|	 j |  qqW|  d d k sV|	 rod
 d j	 |	  } qon  d } d |  k rxC t |  d j
    D]( } d | | t | |  d | f } qWn  |  j d g   } | d k rd | k r| j d  n  | r.d | | t d j	 |  | f } n  d } d |  k rZt |  d | t  } n  d } d |  k rt |  d | t  } n  | d k rd } n  d } d |  k rd |  d } |  d |	 k r|	 j |  d  qn  t |  d | t  } t |  |  d	 |	 | t d | }
 d } d |  k rF| rFd |  d } n  d |  k rd } xG t |  d j    D]/ \ } } d | | t | d j	 |  f } qoW| | } n  | d k r| d k rd } n  d | | | | | | | | | |
 | | | | | f } | S(   NR   R   R   R   Rc   R  R1  R   R   s   (%s)R   R   s	   %s%s%s %sR   t   callbacks   %s%sintent(%s) %sR   R   R8  R{   s    result (%s)R   R3  s   ! in %sR   s   %s%sentry %s(%s)s
   block dataR5  s%   %s%s%s %s%s%s %s%s%s%s%s%s%send %s %s(   s   functions
   subroutine(   R  Rb  R  R   R   R  RP  R0  R   R   R   R   R)  RK  t   use2fortrant   common2fortrant   vars2fortranR  (   R   R  R  R  R  R:  Rc   R   t	   blocktypet   argslR   R   R   R'  t
   intent_lstR   R   R{   R   t   messt   entry_stmtsRn   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR    s    
	

&
	 #$	4c         C` sy   d } xl t  |  j    D]X } | d k rN d | | d j |  |  f } q d | | | d j |  |  f } q W| S(   NR   RD  s   %s%scommon %sR   s   %s%scommon /%s/ %s(   R  R   R   (   R   R  R  R'  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR^     s    #'c         C` si  d } x\t  |  j    D]H} d | | | f } |  | i  k rk | r | d d k r | d  } q q n  d |  | k r |  | d r d | } n  d |  | k r>|  | d r>d } x t  |  | d j    D]b } | |  | d | k rd	 | | | f } d } q d
 | | | |  | d | f } d } q Wn  | r | d d k r | d  } q q W| S(   NR   s   %s%suse %s,iR   RF  s   %s only:RH  R   s   %s%s%ss
   %s%s%s=>%s(   R  R   (   R   R  R  R   R   R'  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR]  
  s(    !	"c         C` si   |  d } g  } xR | D]J } y t  d |  } Wn t k
 rJ d } n X| r | j |  q q W| S(   NR   s   isintent_%s(var)i    (   RY  R[  R   (   R  R  R  R   R   (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   true_intent_list"  s    

c         C` s  t  |   d } g  } x. | D]& } | |  d k r | j |  q q Wd |  k r xN |  d D]? } | | k r | | k r | j |  q q^ t d |  q^ Wn  d |  k r | j |  d  n  | sx9 t | j    D]" } | | k r | j |  q q Wn  x| D]} d | | k rx` | | d D]M } | | k r2d | | k r2| | | d k r2t d | | f  q2q2Wn  d |  k rw| |  d k rwt | |  rd	 | | | f } n  d
 | | | f } t | |  rd | | | f } n  | | k r#d | | k r#qn  d }	 x< |  d D]0 }
 | |
 d k r4|
 d d k r4d }	 Pq4q4W|	 rwqqwn  | | k rt |  t	 d |  qn  | |  d k r|  d d k rqn  d | | k rFd | | k r$d | | d k r$| | k rd
 | | | f } qqn  t | |  t	 d |  qn  | | d } | d k rd | | k rd | | | d f } n  i  } d | | k r| | d } n! d | | k r| | d } n  d | k r| d d7 k rd | | d f } qd | | d f } ns d  | k rmd! | | d  f } d" | k r`d# | | d" f } qd$ | } n# d" | k rd% | | d" f } n  d& } d | | k rg  } x2 | | d D]" } | d8 k r| j |  qqW| rd' | d( j
 |  f } d( } qn  d) | | k rId* | | d( j
 | | d)  f } d( } n  d+ | | k rt | |  } | rd, | | d( j
 |  f } n  d( } n  d- | | k rd. | | d( j
 | | d-  f } d( } n  d | | k rd/ | | d( j
 | | d  f } d( } n  d0 | | k r| | d0 } | | d d9 k rvy& t |  } d3 | j | j f } WqvqvXn  d4 | | | f } n d5 | | f } d6 | | | f } qW| S(:   s&   
    TODO:
    public sub
    ...
    R   R   R  s7   vars2fortran: Confused?!: "%s" is not defined in vars.
R;  R  sH   vars2fortran: Warning: cross-dependence between variables "%s" and "%s"
R   s   %s%sintent(callback) %ss   %s%sexternal %ss   %s%soptional %sR+   i   R   Rc   R   R   i    s/   vars2fortran: No definition for argument "%s".
R  R   s-   vars2fortran: No typespec for argument "%s".
R^   R  s   %s(%s)R  R  R   R#  s   %s*(%s)s   %s*%sRN   s	   %s(len=%sR  s   %s,kind=%s)s   %s)s   %s(kind=%s)R   s   %s, %sR   R   s   %s%sdimension(%s)R   s   %s%sintent(%s)R  s   %s%scheck(%s)s   %s%sdepend(%s)R  R@  s   double complexs   (%s,%s)s   %s :: %s=%ss   %s :: %ss   %s%s%s(   R   R#  (   s   external(   s   complexs   double complex(   R  R   Rb   R2  R  R   R0  t
   isoptionalt   showR)   R   Re  RY  R*   t   imag(   R   R   R   R  R  R  t   noutR   R>  R   R  t   vardefRj  R   Rk  R   R  Rt  (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyR_  /  s    
0 	
!$!		$	!	c         C` s^   t  d d  t |  t  t  d d  g  a t t d  } t  d d  t |  } t | S(   Ns   Reading fortran codes...
i    s   Post-processing...
s   Post-processing (stage 2)...
(   R)   R   R   R   R  R   R  (   t   filest   postlist(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   crackfortran  s    c         C` s,   t  |   d } d } d t } | | | S(   Ns   
sE   !    -*- f90 -*-
! Note: the context of this file is case sensitive.
sb   
! This file was auto-generated with f2py (version:%s).
! See http://cens.ioc.ee/projects/f2py2e/
(   R  t   f2py_version(   R   t   pyft   headert   footer(    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   crack2fortran  s    
t   __main__R#  s   -quiets   -verbosei   s   -fixs?   Use option -f90 before -fix if Fortran 90 code is in fix form.
s   -skipemptyendss   --ignore-containss   -f77s   -f90R   s   -hs   -shows   -mRB  s   Unknown option %s
s   IOError: %s
s    Warning: You have specifyied module name for non Fortran 77 code
  that should not need one (expect if you are scanning F90 code
  for non module blocks but then you should use flag -skipemptyends
  and also be sure that the files do not contain programs without program statement).
s    Writing fortran code to file %s
R  (   t   __doc__t
   __future__R    R   R   R$   RY   R   R   R   RL  R  R   R   t   auxfuncst   versionRn  R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R!   R   R   R   R   R    R   R   R"   R   R   R   R   R#   R)   t	   _MAXCACHER  R   Ra   Rh   R}   Rd   Rg   Ri   Rj   Ro   R   R   R   R   R  Ru   Rv   R   Rx   R~   Rg  R   t   beforethisaftert   fortrantypesR  R]  R   R   t   groupbegins77R   t   groupbegins90R   t	   groupendsR   t   endifsR   R   R   R   R   R   R   R   R   R   R   R   R  R  R	  R  R  R  R   t   SR   R   R   R  R   R  R   R  R(  R  R.  R/  RV  R   R*  R,  R0  R
  Rc  RN  RQ  R  R  R  R  R  R  RO  R^  R!  R"  R#  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R	  RT  R  R   R  R  RI  RP  R  RT  RU  RV  RW  RX  RR  RU  R  R  R^  R]  Re  R_  Rm  Rr  t   __name__Rk  t   funcsR|   t   f2t   f3t   showblocklistt   argvR   Rb   R   Rs   Ry   R   t   IOErrort   detailR   Rl  Ro  R&   (    (    (    s6   /tmp/pip-build-X4mzal/numpy/numpy/f2py/crackfortran.pyt   <module>   sJ  
	
	&
						
	%	$	"	"%%%%%	"%%%%%%	"%%%%%%%%%#								  %	
					9				$`	"	+"		3					Y			 ]%		-K
	|															