
6e]c        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 d   Zl e j< d e j=  Zm d d  Zn d   Zo d d  Zp d   Zq d d  Zr e j< d e j=  Zs e j< d e j=  Zt e j< d e j=  Zu e j< d  Zv e j< d  Zw e j< d e j=  Zx d   Zy d   Zz d   Z{ 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 rfne d d k r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 rLd a d a d a n e d k rad Z n e d k rv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 r0y! e e  j   e j e  Wn' e k
 r,Z e d e e   n Xn e j e  qQWt oRt oRt ree0 d d  n  e e  Z t re0 d e t  d  e e  Z e t d   Z e j e  Wd QXn  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)`
  `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   lib/python2.7/site-packages/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   lib/python2.7/site-packages/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   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt
   rmbadname1	  s
    c         C` s   g  |  D] } t  |  ^ q S(   N(   Rd   (   t   namest   _m(    (    s6   lib/python2.7/site-packages/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   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   undo_rmbadname1  s
    c         C` s   g  |  D] } t  |  ^ q S(   N(   Ri   (   Re   Rf   (    (    s6   lib/python2.7/site-packages/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   lib/python2.7/site-packages/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 |  rZ 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   } q] WWd QX| S(   s(   Check if file is in free format Fortran.i    t   ri   i   t   !s   	i   iit   &N(   t   opent   readlinet   _has_f_headert   _has_f90_headert   stript   _free_f90_start(   t   filet   resultt   fR'   t   n(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   is_free_format2  s"    		
3c      	   C` so  | 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  } 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 r| 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 s;| d d k r.Pn  | d  } qWt st! | d  \ } } | d	 7} | d  j"   d k rt! | d* | d d  \ } } qn  | j#   d k rd } q n  t d k r| d d+ k r| d d !j"   d k rd | d } q6d } q n( t r6t$ |  d k r6| d  } q6n  | d | k r_t% d t |    n  | slt rt$ |  d k r| d d	 k r| | d } d } d } qt sN|	 j& |  } | r| j' d  } n  | r
| |
 j& |  j' d  } d } d } n5 d | d } | r-| j"   } n | } | } | } | d k	 } qd | d } | rq| j"   } n | } | } | } n5t d k r| r| d  k r| j& |  r| d! } xG t r| j   } | st) d"  Pn  | | } | j& |  rPqqW| j*   } n  |	 j& |  } | r>| j' d  } n  | ro| |
 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- |  r't. | d& | d' d qt j j/ t  g t0 } d } xU | D]M } t j j1 | |  } t j j- |  rMd } t. | d& | d' d PqMqMW| st d( t |  t j2 j1 |  f  qn
 | |  | } q W| r| j"   } n | } | } d$ | j,   d t | f a | j& |  } | r| j' d%  } t j j- |  rqt. | d& | d' d q$t j j/ t  g t0 } d } xU | D]M } t j j1 | |  } t j j- |  rd } t. | d& | d' d PqqW| s$t d( t |  t j2 j1 |  f  q$n
 | |  d a | j3   | rJ| 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   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   
Rq   i   s   !f2pyi   R   t   ct   Ct   #t   f2pys        iH   sx   readfortrancode: Found non-(space,digit) char in the first column.
	Are you sure that this code is in fix form?
	line=%si   R'   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   (4   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   split_by_unquotedt   lowerRw   RN   t	   Exceptiont   matcht   groupR!   Rb   t   rstript
   ValueErrort
   filelinenot   isfilet   readfortrancodet   dirnameR    t   joint   pathsept   close(   t   ffileR   R   t   saveglobalst   localdolowercaset   contt	   finallinet   llt   includelinet   cont1t   cont2t
   mline_markt   l1Rf   t   spacedigitst   fint   lt   extt   rlt   _t   origfinallineRp   t   lct   mt   fnt   include_dirst	   foundfilet   inc_dirt   fn1(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR   J  sR   
,				
'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` s   t  d  t  |  @s# t d   t j d j d d j t j |   d d j t j |   d d	 d
 d   } | j |   } | r | j   } | d | d f S|  d f S(   s   
    Splits the line into (line[:i], line[i:]),
    where i is the index of first occurrence of one of the characters
    not within quotes, or len(line) if no such index exists
    s   "'s   cannot split by unquoted quotessR   \A(?P<before>({single_quoted}|{double_quoted}|{not_quoted})*)(?P<after>{char}.*)\Zt
   not_quoteds   [^"'{}]R1   s   [{}]t   single_quoteds   ('([^'\\]|(\\.))*')t   double_quoteds   ("([^"\\]|(\\.))*")t   beforet   afterR   (   t   sett   AssertionErrorR   R   R   t   escapeR   t	   groupdict(   R'   t
   charactersRp   R   t   d(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR   d  s    #	c         C` sc   g  } xM t  |   j d  D]6 } x  d D] } | j | d  } q) W| j |  q Wd j |  S(   Ns   @,@s   (),R   t   ,(   t   markoutercommat   splitR   t   appendR   (   t   argslinet   aR|   Rp   (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   _simplifyargsx  s    s&   \s*(?P<result>\b[a-z]+[\w]*\b)\s*[=].*c         C` s   t  |  d  \ } } | r t d j |   p> t d j |   r | d k s` t t |    t  |  d  \ }  } x0 | r t |  |  t  | d d  \ }  } qx Wt |  |  d 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 rd } t rgt t k rg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 qjWt rt t k r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 r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 oKt k n rTd Sd t	 t k rx+t	 t d D]}
 |
 t( k rt( |
 }
 n  d t	 t k r|
 t	 t d k rqsn  t) j d |
 t* |   t) j+  } | rs|	 j | j, d   } t- | j, d   } | r6d |
 | | j, d  f }  n d |
 | f }  t. d j |   } | swt d t |    d St/ | d |   d Sqs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 rBt6 d t   n  t d j |   } | r| j, d  t t k r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 rrd t k o<t k n rOt d a d Sd a: t/ | | d |   d a9 n | d d k rnw | d d  k rt; rd Sd t k o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    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.
t	   externalst
   interfaceds5   (?P<before>[^"]*)\b%s\b\s*@\(@(?P<args>[^@]*)@\)@.*\ZR   t   argss   callfun %s(%s) result (%s)Rz   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   (<   R   t   f2pyenhancementspatternR   t   multilinepatternR   R   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   has_semicolont   semicolon_linet   flR(   t   patR   t   re_1Rc   t   m1t   m2R   (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR     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   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR    s    

	

	R   c         C` s  d } d } t  |  | d  \ } } | | 7} x | r | d | k ri | d k ri | d | d 7} nH | | d 7} | d d k r | d 7} n | d d k r | d 8} n  t  | d | d  \ } } | | 7} q2 W| s t t | |  | f    | S(   NR   i    s   ()t   @R  i   R  (   R   R   R   (   R'   t   commaR   R{   R   R   (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR   1  s     
	"c         C` s"   |  j  d d  j  d d  } | S(   Ns   @(@R  s   @)@R  (   R   (   R'   Rp   (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   unmarkouterparenD  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$  R%  (   R   R'  R   R   R   (   t   listt   keyst   setattrspect   setkindselectort   setcharselectorRb   R   R   (   t   declt   decl2t   forcet   kR   (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt
   appenddeclI  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   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   _is_intent_callbacku  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   Rz   t   bind(   R  t   nameargspatternR   R   t   callnameargspatternR!   (   R'   R  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   _resolvenameargspattern|  s    4"c   =   
   C` s  |  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t$ k
 rqXn  | d{ k ry; t% t t d | t t d" d d  t t d | <Wn t$ k
 rp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t$ k
 rqXn  | d  k rt& d	 j |  j  d*  d2 |  } | rt' | j  d  | j  d   \ } } } } t( | | | |  qn  | d| k r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 qnp| d. k r	t |  j  d   \ } } } } | d  k	 r| r	t g  t |  j
 d  D] }	 |	 j   ^ q	 } n g  } | d  k s	t) t |    | t t d. | <d. | t f a qn| d k rP
t' | |  j  d   \ } } } } t( | | | |  } | d  k	 rd3 | t f a qnI| d} k rt t d } |  j  d  j   } | j* d;  } | d	 k  rN| d5 k rNt+ |  j* d<  d" } | | d  d; | | d } | j* d;  } | | d; k rNd t t k rNt d= |  j  d  | |  f  | d> j, t t d  } qNn  | d	 k  ri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 |  } | sk| d~ k r;d } qt/ |  j0    t d@ | t |  f  qn t | j  d   } | | k ri  | | <n  | d4 k r| | j  d  } n  | d5 k r|  j  d  | } t1 j |  r| t t d k rt d k rydA t t d" d k r.t dB  n  | t t d k rt dC | t t d f  t t d j  |  qqt2 dD |  qt2 dE |  qn  | d k r| } n  d0 | | k r| | d0 j  |  n | g | | d0 <| d1 k rot t d d k rt dF  qn  | t t d k r6qn  d% t t k rWg  t t d% <n  t t d% j  |  n  | } qW| t t d <| d  k	 rd3 | t f a qn| dG k rt t d } |  j  d  j   d d! !} d  } xzt |  j
 d  D]c} y2 g  | j
 dH  D] }	 |	 j   ^ q\ } } Wn( t$ k
 r\t dI | | f  qn Xt3 |  } t |  } | | k ri  | | <n  dH | | k r| | dH | k rt dJ | | | dH | f  n  t4 | |  } | r| j5 dK  dL k r{t |  } x[ t6 j7 |  D]J }  t | |  j8   |  j9   !j   j: dM dN   | |  j8   |  j9   +qWd j, |  } q| j5 dK  dO k r| d j   j: dM dN  j: d> dP  } qn  y t; | i  |  } Wn3 t< t= t> f k
 r	} t2 dQ | | f  qn Xt |  | | dH <d0 | | k rF| | d0 j  dG  n dG g | | d0 <| } qW| t t d <| d  k	 rd3 | t f a qn	| dR k r}|  j  d  j   j   dS k rd  t t dR <q|  j  d  rdR t t k rt t dR }  n i  }  |  d  k r#t dT  i  }  n  xCt |  j  d   j
 d  D]#} i  }! t j dU | t j  } | st dV |  qBn  t? j | j  d   }" |" st dW |  qBn  t' |" j  d  |" j  d   \ } } } } t@ | |  \ }# }$ }% | |! dK <|# |! dX <|$ |! dY <|% |! dZ <x. t |! j    D] } |! | s2|! | =q2q2Wxt | j  d   j
 d  D] }& d[ |& k ry2 g  |& j
 d[  D] }	 |	 j   ^ q\ }' }( Wqt$ k
 rt d\ |&  qoqXn |& j   }' }( t- |'  t- |(  k od k n s't d] |&  qon  x7 tA tB |'  tB |(  d  D] }) |! |  tC |)  <qGWqoWqBW|  t t dR <q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 r6|. d }. n  |, d	 k rO|* |/ }* q|, d k rh|+ |/ }+ q|, d" k r|* j   }* |* jD d>  r|* d j   }* n  | j  |* |+ g  |/ }* d }+ d	 }, qqW|, d" k r|* j   }* |* jD d>  r|* d j   }* n  | j  |* |+ g  n  i  }0 d t t k rEt t d }0 n  d  } x| D]
}1 g  |1 D] }	 |	 j   ^ q_}1 |1 d	 d	 d> k r|1 d	 d |1 d	 <n  |1 d	 d	 da k rt dc |1 d	  qRn  d	 } d	 }2 t- |1 d  }3 xqt g  t |1 d	  j
 d  D] }	 |	 j   ^ q D]7} | d	 da k rKt dc |  q!n  d	 }- xS | |3 k  r|- s{|1 d | d> k r|1 d | d_ k r|- }- n  | d } qT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!WqRW|0 t t d <| d  k	 rd3 | t f a qn
| de k r|  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 ra|5 j   }5 |5 s5dg }5 n  |4 j  |5 |6 g  |, d" }, d }5 d }6 n  |, d" rx|5 |/ }5 q|6 |/ }6 qW|5 j   }5 |5 s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 rXt j di |  j  d  t j  } | r;| j0   }8 dh t t k ri  t t dh <n  | j  d  } i  t t dh | <d	 }9 dj |8 k rU|8 dj d  k	 rUdk |8 k rP|8 dk d  k rPd }9 n  |9 t t dh | dl <g  |8 dj j
 d>  D] }	 |	 j   ^ qz} 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 <qWqUqt/ |  j0    t dq  nA| d k rdr t t k ri  t t dr <n  t t dr }; |  j  d  ds k rds |; k rtE |; ds tF  r|; ds g |; ds <n  |; ds j  |  j  d   q|  j  d  |; |  j  d  <n | d k rpt d  k rFt rBt dt  n  d  St }< tG t |< t d"  |  j  d   n) t d k rt/ |  j0    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 moduleR   t   _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   prefixRz   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*   R   t   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.
(   R   R   R   R^   (   R   R   R   (   R>  s
   block data(   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   (H   R   R!   R"   R   R   R   R   R   t   basenameR   R   R)   R   R   R   R   R   R   R   R   R9  Rg   R   Rw   t   removeR   R   R   R   Rd   R(  R)  R   t   copyt   deepcopyRQ   R   R1  R	  t   cracktypespec0t
   updatevarsR   t   findR  R   RN   t   namepatternt   printR   R3  Rb   t   get_parameterst   determineexprtypeR2  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   Rz   R6  t   xt
   needmodulet   needinterfacet   itR0  t   tR+   t   selectort   attrt   edeclt	   last_nameR   Rn   t   plt   chRF  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   lib/python2.7/site-packages/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   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyRi    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.
RG  R-   t   logicalR*   t	   characterR^   R   R   s   ::i    i   (   RG  R-   R  R*   R  R^   (   R!   R   R   R   Rw   R   t   selectpatternR  R)   R   R(  R)  R   RW  (   R+   R   Rp  Rq  R  R   R0  Rn   (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyRU    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   lib/python2.7/site-packages/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{   t   cct   cbR   (    (    s6   lib/python2.7/site-packages/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]+)R^  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!  R   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.
RG  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.
RC  (   RG  R-   R  R*   (   R!   Rd  R   R   Rw   R   R   R   R   R   RN   R   R  R  R   RX  R)   R   Rd   R   R   RS  R(  R)  Rb   t   lenarraypatternR  R   R   (   R+   Rp  R!  t
   entitydeclRs  R}  R~  R%  Rk  R   R   R   R   t   st   elt   el1RF  t   e1t   enameRr  t   not_has_typespecR0  R  t   d1t   lkt   dmt   dm1(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyRV     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(   NRG  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
(   RG  R-   R  R*   (   R!   R"  R   R)   R   R   R(  R)  t   itemsRd   R#  t   lenkindpatternR   R   R   R   (	   R+   Rp  R}  R~  R%  R0  Rn   R  R  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyRd    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-  Rq  R/  (    (    s6   lib/python2.7/site-packages/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/  R0  (    (    s6   lib/python2.7/site-packages/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/  R0  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR,    s    	
t   unknownc         C` s   d |  k r |  d S| S(   NRc   (    (   R   R  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   getblockname  s    c         C` s4   y d |  d |  d f a  Wn t k
 r/ n Xd  S(   Ns
   In: %s:%s
R<  Rc   (   R   R   (   R   (    (    s6   lib/python2.7/site-packages/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   lib/python2.7/site-packages/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)   R2  RZ  Rb   R   (	   R   t	   param_mapR  t   usenamet   mappingt   mvarsRx  R0  Rz  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   get_useparameters  s.    	
c         C` sh  t  s
 |  St |  t  rL g  |  D]" } t | d | d d | ^ q  } | St |   t d | |  d f d  | d  k r t |   } n  | d  k	 r'd |  k r'|  d } xv t | j    D]_ } | | } d | k r | d } d	 | k r | d	 }	 |	 | k r| |	 | d	 <qq q q Wn  g  |  d
 D]" }
 t |
 d | d d | ^ q2} | |  d
 <|  S(   Nt   tabs   	R  s   %sBlock: %s
Rc   i    R   R"  R  R   (	   R   Rh  R(  t
   postcrack2R  R)   R!   R  R)  (   R   R  R  t   gt   retR   R|   t   varR  t   valt   bt   new_body(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR  6  s0    ,




0
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   RE  R   s0   postcrack: Expected block dictionary instead of R@  s   %sBlock: %s
i    R   t   sortvarsR   R   R   R   R   R   t   __user__routinest   unknown__user__routinesi   s   %s_%iR>  t   _user_interfaceis   python module(   Rh  R(  R  t	   postcrackR   t   dictR   R   R)   t   analyzeargst   analyzecommont   analyzevarst   sortvarnamest   analyzebodyR)  RS  RQ   t
   isexternalR   (   R   R   R  t   grett   uretR  t   userisdefinedt   useblockR0  Rc   R   R  t   mnameRn   R>  RF  t   edefR  R  t   bbt   mblock(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR  V  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   depRz  R|   Rn   R  t   w(    (    s6   lib/python2.7/site-packages/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  t
 | j d  j	    } | |  d k rHd |  d | k r#|  d | d j d d	 j |   qd d	 j |  g |  d | d <n< | rv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   Rd   R   R   Rb   (	   R   R  R0  t   comvarsRF  R   R  Rk  R|   (    (    s6   lib/python2.7/site-packages/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   	R>  R   R   t   pythonmoduleR?  R   (   R   R   s         (   R  R!   R   R   t   crack2fortrangenR   R  R   R   R   R   (   R   R   R  R   R  t   as_(    (    s6   lib/python2.7/site-packages/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  (   R@   R  (	   R  t   defaultimplicitrulesR!   R   R)   R   R(  R)  R2  (   R   t   implicitrulest	   attrrulesR0  (    (    s6   lib/python2.7/site-packages/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(   R_  R^   R   (   RF  R  R   Rp   (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   myeval8  s    $s   \A\b\w+\b\Zc         C` s  y) t  t |  i  i    } d | d  f SWn t k
 r< n Xt j |   rY d d |  f St |   } xU| D]M} t |  | k r ql n  t j d | d |   r ql n  t j	 d | d t j
  } | j |   } | rl 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 |  } qSWt | i  i   |	 }
 | j |   } x> | rd | j d  d
 | j d	  f } | j |  } qWt | i  i   } | j |   } x> | rXd | j d  d | j d	  f } | j |  } qWt | i  i   } |
 d
 |	 | k r|
 d |	 | k r|
 |	 | f SWn t k
 rn XPql ql Wd S(   Ni    i   s   \w\s*\([^)]*\bs   \bs   (?P<before>.*?)\bs   \b(?P<after>.*)s   %s(%s)%sR   R   g      ?g      ?(   NNN(   R.   R  R!   R   t   getlincoef_re_1R   RN   R   t   searchR   R   R   (   RF  t   xsetR   t   len_eRk  R  R   R  t   eeR  R   t   c2(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt
   getlincoefA  s^    	"	"	"	"(s   \A[a-z]\w*\ZR   c         C` s]	  g  } y! | j  t |  d i  i    Wn" t k
 rK | j  |  d  n Xy! | j  t |  d i  i    Wn" t k
 r | j  |  d  n Xt | d t  rd | d } | d k r t |  d  } qz| d k  r d |  d | f } qzd |  d | f } nm t | d t  rbd | d } | d k rKd |  d } qzd | |  d f } n d |  d |  d f } y# t t | i  i    d  d  f SWn t k
 rn Xt |  d |  t |  d |  } } d  | d | d g k rP	| 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  r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 rXt	 |
  rKt
 d |
  n  d |
 }
 n  | d k r{d | d |
 f } qM	| d k  rd | d |
 | f } qM	d | d |
 | f } qP	| d d k rt | d  } | | k rt	 |  rt
 d |  n  d | } n  | d d k r%n1 | d d k rBd | } n d | d | f } | d k rk| } qM	| d k  rd | | f } qM	d | | f } qP	| 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  rVd | d | f } n d | d | f } | d k r| } qM	| d k  rd | | f } qM	d | | f } qP	t | d  } | | k rt	 |  rt
 d |  n  d | } n  | d d k rd | } nY | d d k r2d | } n< | d d k  rZ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 } qP	| d k  r:	d | | | f } qP	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  R   Rh  R.   R   R   R!   R  t   _varname_matchR)   (   R  R   t   start   edlt   p1R   R  t   d2R  R   R   R  t   c1(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt	   getarrlenw  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
(   R2  t   isstringt   word_patternt   findallR   t   _get_depend_dictR)   R   (   Rc   R   t   depst   wordst   wordR  (    (    s6   lib/python2.7/site-packages/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   lib/python2.7/site-packages/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   lib/python2.7/site-packages/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  (   R\  R   t   real8pattern(   RY   (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt
   _kind_func?	  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   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   _selected_int_kind_funcJ	  s    
c         C` sx   |  d k  r d S|  d k  r  d St  j   j   } | j d  rT |  d k rt d Sn  |  d k  rd d S|  d k rt d Sd S(   Ni   i   i   i   t   aarch64t   powert   ppct   riscvt   s390xt   sparci   i   i
   i(   R
  R  R  R  R  R  (   t   platformt   machineR   Rg  (   t   pRp   t   radixR  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   _selected_real_kind_funcZ	  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   RF  i    R  R  s   @,@s   get_parameters: got "%s" on %s
s2   get_parameters:parameter %s does not have value?!
(   s   .false.R  (   s   .true.R   (#   RS  R  R	  R  R  R   R   R   R   t	   islogicalR   R   t   subR  RN   R   R   R   t   isdoubleR(  R\  R]  R^  R   t	   iscomplexR   R_  R   R)   R   R  Rh  R.   Rf  RY  (   R   t   global_paramsRx  t   g_paramsRc   t   funct   param_namesR|   t   kind_ret   selected_int_kind_ret   selected_kind_reRz  t   replt   is_replacedt
   orig_v_lent   v_Ry  R   R   R{  t   nl(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyRZ  m	  sz    	$"8
E "
#c         C` s   |  d k r d St  |  |  S(   Ns   (:)s   (*)R   (   s   (:)s   (*)R   (   t   _eval_scalar(   t   lengthRx  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   _eval_length	  s    s   \d+_c         C` s   t  |   r" |  j d  d }  n  y t t |  i  |   }  WnP t t t f k
 r[ |  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   R_  Ra  R`  Rb  R   Rb   R(  R)  (   t   valueRx  R{  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR(  	  s    !c   7   
   C` s  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 r8d | | d k r8| | d d } y t t | i  |
   } Wn t k
 rn X| | | d d <q8n  d | | k rd | | d k r| | d d } y t t | i  |
   } Wn t k
 r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 rh|	 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 rS| | d j |  qSqS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   ^ qY D]2 } | | | d k rr| | d j |  qrqr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 | rs	| j d*  t |
 |  | j d+  } | j |  } q1	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 re
| d } n  |  r
|  d0 d1 k r
|  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 }" |" rVg  | | d <n  g  | | d <d | | k rd }# t | | d  }$ x| | d D]E} g  }% d }& d }' | | k rM| | k rd7 | | d }' }& | | d } qM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 rx|% |) d j   d d !j d4  7}% qxqxWn  d | | k r|% | | d }% qn  |# d }# | | k r}d | | k r}d: | | k r}| | | d k r}t$ t% t& t'  | |  r}| g | | d <|$ d k r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 rS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 r_d@ | | d k r_| | 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WxSt | j    D]?} | |  d k r7d | | k rr| | d |  d <n  |  d d k rvdA |  k r|  dA | k rt- | | | |  dA  | | <n  dB |  k rs|  dB }+ d }, d }- |+ j dC d  }. |+ |. k }, |. j dD d  }+ |+ |. k }- t. d j |+  } | rUt/ | j dE  | j d+   \ }/ }0 } }1 t0 |/ |0  \ }2 }3 }4 |/ | | d <|2 rd |2 k ry t |2 d i  |
  |2 d <Wqt k
 rqXn  |2 | | d <n  |3 r|3 | | d <n  |4 r|4 | | dF <n  |, r2t | | dC  | | <n  |- rmt | | dD  | | <qmqpt dG t |  dB   qsqvq7q7W|  d dR k rdL |  k rt j |  d	 |  dL  }5 n t j |  d	  }5 xC t | j    D]/ } t$ t1 t2  | |  r|5 j |  qqWdM |  k r|5 j3 t |  dM j     xV t |  dM j    D]; } x2 |  dM | D]" } | |5 k rb|5 j |  qbqbWqM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 rM|5 j3 t | j     n  x3 t | j    D] } | |5 k r`| | =q`q`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   R   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   Rz   RB  t   puret	   recursiveR   R%  s'   analyzevars: prefix (%s) were not used
R?  R  s   python modules
   block dataR  R   R   R^   (   NNNNN(   R   R.  (   R?  R  s   python modules
   block data(   R   R   (4   R  R  RS  R(  R)  R*  R   t   KeyErrorRZ  R  R   R   R   R^  R   R   R   R)   R   R   R_  R   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(  R1  R	  RU  Rd  t   isintent_callbackt   isintent_auxt   extend(7   R   R  R  R   t   genR|   R0  t   svarsR   R   Rx  t   dep_matchest
   name_matchRz  R   t   ln0R   t   savelindimsRq  t   dimR   R  R'  R&  Rk  R   t   tmpR   R  R  R  R  t   dit   shape_macroR(   Rn   t   nit   ddepst   adt   pdRp   t   aaR)  t   prt   ispuret   isrect   pr1R+   Rp  Rr  R}  R~  R%  t
   neededvarsRc   (    (    s6   lib/python2.7/site-packages/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   iRF  t   _eR   Rp   i   R   R   R   (
   t   analyzeargs_re_1R   R  R[  R   RY   t   ascii_lowercaset   digitsR   R*  (   R   R   R   t   orig_at	   a_is_exprR  R  t   att   naR   R0  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt	   expr2name;  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   Rz   (   R  R  R[  R   R(  R  (   R   R  R  R   R   R0  t   args1R  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR  `  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*   RG  (   Rh  R.   R0   RG  R  R   R   (   Rp   (    (    s6   lib/python2.7/site-packages/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(   NRG  R+   Rc   s:   determineexprtype: selected kind types not supported (%s)
R-   R*   t   +RI  R   Rl   R  R  i   iR!  i    s   '"R  R#  s>   determineexprtype: could not determine expressions (%s) type.
(   R]  Rw   t   determineexprtype_re_1R   t   determineexprtype_re_2R   R   R)   R   t   determineexprtype_re_3R   R   t   determineexprtype_re_4R[  t   determineexprtype_re_5(	   R  R   t   rulesR   t   opRk  RF  Ro  t   rn(    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyR[    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  R:  R   R   s   (%s)R   R   s	   %s%s%s %sR   t   callbacks   %s%sintent(%s) %sR   R   R@  Rz   s    result (%s)R   R<  s   ! in %sR   s   %s%sentry %s(%s)s
   block dataR=  s%   %s%s%s %s%s%s %s%s%s%s%s%s%send %s %s(   R   R   (   R  Rh  R(  R   R   R  R[  R;  R   R   R)  R   R2  RR  t   use2fortrant   common2fortrant   vars2fortranR  (   R   R  R  R  R  RB  Rc   R   t	   blocktypet   argslR   R   R   R0  t
   intent_lstR   R   Rz   R   t   messt   entry_stmtsRn   (    (    s6   lib/python2.7/site-packages/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   RK  s   %s%scommon %sR   s   %s%scommon /%s/ %s(   R(  R)  R   (   R   R  R  R0  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyRi    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   RM  s   %s only:RO  R   s   %s%s%ss
   %s%s%s=>%s(   R(  R)  (   R   R  R  R   R   R0  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyRh    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    (   R_  Ra  R   (   R  R  R  R   R   (    (    s6   lib/python2.7/site-packages/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  | | d D] } | d8 k r| ^ q} | rd' | d( j
 |  f } d( } qn  d) | | k r;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 rry& t |  } d3 | j | j f } Wqrt k
 rnqr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.
RC  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$  RG  s   double complexs   (%s,%s)s   %s :: %s=%ss   %s :: %ss   %s%s%s(   R   R.  (   R   (   RG  s   double complex(   R  R   Rb   R=  R(  R)  R;  t
   isoptionalt   showR)   R   Rp  R_  R*   t   imagR   (   R   R   R   R  R  R  t   noutR   R   R   R  t   vardefRp  R   R   Rq  R  Rz  (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyRj  5  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   lib/python2.7/site-packages/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   lib/python2.7/site-packages/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   -mRI  s   Unknown option %s
s   IOError: %s
s    Warning: You have specified 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   RS  R  R   R   t   auxfuncst   versionRy  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}   Rr  R   t   beforethisaftert   fortrantypesR	  Rc  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   R1  R  R7  R8  R\  R  R3  R5  R9  R  Ri  RU  RX  R"  R#  R  R  R  R  RV  Rd  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  RZ  R*  R+  R(  R  RT  R[  R  R_  R`  Ra  Rb  Rc  R]  R[  R  R  Ri  Rh  Rp  Rj  Rx  R}  t   __name__Rv  t   funcsR{   t   f2t   f3t   showblocklistt   argvR   Rb   R   Rs   R   R   t   IOErrort   detailR   Rw  Rz  R&   (    (    (    s6   lib/python2.7/site-packages/numpy/f2py/crackfortran.pyt   <module>   sJ  
	
	&
						
	%	$	"	"%%%%%	"%%%%%%	"%%%%%%%%%#									  %	
					9				 `	"	+"		3					Y			 ]%		-K
	z															