
    Ph7                       d 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Zddl	m
Z
 	 ddlZddlmZ ddl ddlmZ ej"                  adadadada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#da$da%tJ        g ia&d
a'g a(da)g a*da+da,g a-g a.g a/d Z0ddZ1de_2        i Z3dD ]	  Z4ddie3e4<    dD ]	  Z4ddie3e4<    i Z5i Z6dD ]  Z7e7dz   e5e7<   e7e6e7dz   <    d Z8d Z9d Z:d Z; ejx                  dejz                        j|                  Z? ejx                  dejz                        j|                  Z@ ejx                  dejz                        j|                  ZA ejx                  dejz                        j                  ZCg dZDg dZEd  ZFd! ZGeHdfd"ZId#ZJd$ZK ejx                  eJd
eKeKd%fz  ejz                        d&fZL ejx                  eJd
eKd'z   eKd'z   d%fz  ejz                        ZM ejx                  eJd(z  ejz                        d)fZN ejx                  eJd*z  ejz                        d)fZOd+ZP ejx                  eJd
ePePd%fz  ejz                        d)fZQePd,z   d-z   ZR ejx                  eJd
eReRd%fz  ejz                        d)fZSd.ZT ejx                  eJd
eTeTd%fz  ejz                        d/fZUd0ZV ejx                  eJd1eVeVd%fz  ejz                        d2fZWd3ZX ejx                  eJd
eXeXd%fz  ejz                        d4fZY ejx                  eJd5z  ejz                        d6fZZ ejx                  eJd7z  ejz                        d8fZ[ ejx                  eJd9z  ejz                        d:fZ\ ejx                  eJd;z  ejz                        d<fZ] ejx                  eJd=z  ejz                        d>fZ^ ejx                  eJd?z  ejz                        d@fZ_ ejx                  eJdAz  ejz                        dBfZ` ejx                  eJdCz  ejz                        dDfZa ejx                  eJdEz  ejz                        dFfZb ejx                  eJdGz  ejz                        dHfZc ejx                  eJdIz  ejz                        dJfZd ejx                  eJdKz  ejz                        dLfZe ejx                  eJdMz  ejz                        dNfZf ejx                  eJdOz  ejz                        dPfZg ejx                  eJdQz  ejz                        dRfZh ejx                  eJdSz  ejz                        dTfZi ejx                  eJdUz  ejz                        dVfZj ejx                  eJdWz  ejz                        dXfZk ejx                  eJdYz  ejz                  ej                  z        dZfZm ejx                  d[ej                        d\fZnd] Zod^ Zp ejx                  d_ejz                        Zq ejx                  d`ejz                        Zr ejx                  daejz                        ZsddbZtdc ZudddZvde ZwddfZx ejx                  dgejz                        Zy ejx                  dhejz                        Zz ejx                  diejz                        Z{ ejx                  djejz                        Z| ejx                  dkejz                        Z} ejx                  dl      Z~ ejx                  dm      Z ejx                  dnejz                        Zdo Zdp Zdq Zdr Zds Zdt Zdu Z ejx                  dvejz                        Z ejx                  dwejz                        Z ejx                  dxejz                        Z ejx                  dyejz                        Z ejx                  dzejz                        Zd{ Zd| Zd} Zd~ ZddZddZddZddZd Zd ZddZddZddZd Zd ZddZd ZddZ ejx                  dejz                        Zd Z ejx                  dejz                        Zd Zd Zd Zd Zd ZddZi fdZd Z ejx                  d      j                  Zd Zd Z ejx                  dejz                        Zg fdZd Z ejx                  dejz                        Z ejx                  dejz                        Z ejx                  dejz                        Z ejx                  dejz                        Z ejx                  dejz                        Zd Zi fdZddZddZddZd ZddZg ad Zd Zd Zg dfdZd Ztx        j                  e       edk(  rg Zg ZdZdZdZdZej                  dd D ]  Zed
k(  r	ed   dk(  rdZƌedk(  rdadaedk(  rdada(edk(  rt&        r	 e1dd       dadaAedk(  rdaIedk(  rdaQedk(  rdada[edk(  rdadadagedk(  rdZǌoedk(  rdZɌwedk(  rdZȌed   dk(  r ed ee˫      z         erdZeaerdZeaer+	  ee˫      j                          eĐj                  e˫       eŐj                  e˫        t&        st2        rt4        s	 e1dd        eeī      Zt0        rF e1d et0              z  d        eeҫ      Z et0        dī      5 ZeƐj                  eӫ       ddd       er	 eHeҫ       yyy# e$ r dZY 
w xY w# e$ rZ edeћd       Y dZ[ѐdZ[ww xY w# 1 sw Y   CxY w)a*  
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' |
                  'abstract interface'
     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','f2py_len']}
                             (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'], f2py_len=C['f2py_len'])
     (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.

    N)Path   )__version__)*)symbolicfix     c                  x    da dadadadadadadadada	g a
dat        g ia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y )Nr   r   r   r	   r
   r   )	strictf77sourcecodeformquietverbosetabcharpyffilenamef77modulenameskipemptyendsignorecontainsdolowercasedebuggroupcounter	grouplistneededmoduleexpectbeginskipblocksuntilusermodulesf90modulevarsgotnextfilefilepositiontextcurrentfilenameskipfunctions	skipfuncs	onlyfuncsinclude_pathsprevious_context     bC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\numpy/f2py/crackfortran.pyreset_global_f2py_varsr*      s     INEGGKMMNKELr"ILKOKMKOMIIMr(   c                     t         sy t        sE|r#t        j                  j	                  t
               t        j                  j	                  |        y y N)r   r   sysstdoutwriter    )lineflags     r)   outmessr2      s:     JJ-.

 r(   2   zabcdefghopqrstuvwxyz$_typespecrealijklmninteger)3intdoublefloatcharshortlongvoidcasewhilereturnsignedunsignediffortypedefsizeofunionstructstaticregisternewbreakdogotoswitchcontinueelseinlineexterndeleteconstautolenrankshapeindexslensize_imaxminflenfshapestringcomplex_doublefloat_doublestdinstderrr.   typedefault_bnc                 Z    | t         v r"t        d| dt         |    d       t         |    S | S )Nzrmbadname1: Replacing "" with "".
)badnameserrmessnames    r)   
rmbadname1rr     s/    xx~' 	(~Kr(   c                 >    | D cg c]  }t        |       c}S c c}w r,   )rr   names_ms     r)   	rmbadnamerw     s    %*+UrJrNU+++   c                 Z    | t         v r"t        d| dt         |    d       t         |    S | S )Nzundo_rmbadname1: Replacing "rl   rm   )invbadnamesro   rp   s    r)   undo_rmbadname1r{     s1    {T*, 	-4  Kr(   c                 >    | D cg c]  }t        |       c}S c c}w r,   )r{   rt   s     r)   undo_rmbadnamer}   !  s    */0%BOB%000rx   z-\*-\s*fortran\s*-\*-z-\*-\s*f90\s*-\*-z-\*-\s*fix\s*-\*-z[^c*]\s*[^\s\d\t])z.f90z.f95z.f03z.f08)z.forz.ftnz.f77z.fc                 L   t         .t        j                  |       j                         j                  }nt	        dt
        j                  j                  |             }t        | d      5 }|j                  |      }|j                  t        j                        rd}nf|j                  t        j                  t        j                  f      rd}n4|j                  t        j                  t        j                   f      rd}nd}ddd       t        | |      S # 1 sw Y   xY w)	aN  Ensures that filename is opened with correct encoding parameter.

    This function uses charset_normalizer package, when available, for
    determining the encoding of the file to be opened. When charset_normalizer
    is not available, the function detects only UTF encodings, otherwise, ASCII
    encoding is used as fallback.
    N    rbz	UTF-8-SIGzUTF-32zUTF-16ascii)encoding)charset_normalizer	from_pathbestr   r`   ospathgetsizeopenread
startswithcodecsBOM_UTF8BOM_UTF32_LEBOM_UTF32_BEBOM_LEBOM_BE)filenamemoder   nbytesfhandleraws         r)   openhookr   /  s     %%//9>>@II R23(D!W,,v&C~~foo.&!4!4f6I6I JK# >?# # " $22 "!s   *BDD#c                    d}t        |       j                  j                         t        v rd}t	        | d      5 }|j                         }d}t        |      rd}nt        |      rd}d}|dkD  rX|rV|d   dk7  r6|j                         r&|dz  }|d   dk7  rt        |d	d
       s|dd dk(  rd}n|j                         }|dkD  r|rVd	d	d	       |S # 1 sw Y   |S xY w)z(Check if file is in free format Fortran.FTr   r   !r   	N   r   &)
r   suffixlowerCOMMON_FREE_EXTENSIONSr   readline_has_f_header_has_f90_headerstrip_free_f90_start)fnameresultr   r0   ns        r)   is_free_formatr   N  s     FE{!%;;	%	!AT"AF!eAw#~$**,QGtORa(Ad2bkUXFX!F##%D !e 
 M 
 Ms   BCCc           
         |s/t         t        t        t        t        t
        t        t        t        f	}| g k(  ryt        }d}d}d}t        j                  dt        j                        }t        j                  d      }	t        j                  d      }
t        j                  d      }|r	 |dd       d	\  }}d
gt        d      D cg c]  }t        |       c}z   }dat        j                  | t               }	 	 |j#                         }|sn|j-                         rda|j)                         ada |}dadat.        j0                  j3                  t              d   }t5        t              j6                  j9                         t:        v rt=        |      st?        |      sdantA        t              rt?        |      sdat        rtB        antD        atG        dtI        t              dt        t        xr dxs dd       |jK                         jM                  dd
      }|dk(  s|d   dvrn|dd }|dk(  st        sBtO        |d      \  }}|d
z  }|dd j9                         dk(  rtO        |dz   |dd z   d      \  }}|jQ                         dk(  rt        dk(  rnd}t        dk(  r*|d   dv r#|dd j9                         d k(  r	d!|dd z   }nd}t        rtS        |      d"kD  r|dd" }|d   |vrt'        d#tI        |      z        |rt        r$tS        |      dkD  r|d   d
k(  s||d$d z   }d}d}nt        su|	jU                  |      }|r|jW                  d%      }|r(||
jU                  |      jW                  d%      z   }d}d}n!d!|dd z   }|r|j9                         }n|}|}|}|du}nd!|dd z   }|r|j9                         }n|}|}|}nt        dk(  r|sbd&k(  r]|jU                  |      rL|d'z   }	 |j#                         }|stY        d(       n||z   }|jU                  |      rn6|j[                         }|	jU                  |      }|r|jW                  d%      }|r(||
jU                  |      jW                  d%      z   }d}d}n|r|j9                         }n|}|}|}|du}nt]        d)tI        t              z        d*|j_                         dz
  t        |fz  a|jU                  |      }|r|jW                  d+      }t.        j0                  ja                  |      rtc        ||d,       nt.        j0                  je                  t              gtf        z   }d}|D ]S  }t.        j0                  ji                  ||      }t.        j0                  ja                  |      sCd}tc        ||d,        n |sAtG        d-tI        |      d.t.        jj                  ji                  |      d/       n ||       |}|r|j9                         }n|}|}d*|j_                         dz
  t        |fz  a|jU                  |      }|r|jW                  d+      }t.        j0                  ja                  |      rtc        ||d,       nt.        j0                  je                  t              gtf        z   }d}|D ]S  }t.        j0                  ji                  ||      }t.        j0                  ja                  |      sCd}tc        ||d,        n |sAtG        d-tI        |      d.t.        jj                  ji                  |      d/       n ||       da|jm                          |r
 |dd       y\	  a aaaaaaaayc c}w # t$        $ r6}t'        d|j)                          d|j+                          d| d      d}~ww xY w)0z
    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.
    NFr
   z*\s*include\s*(\'|")(?P<name>[^\'"]*)(\'|")z(?P<line>.*)&\s*\Zz(\s*&|)(?P<line>.*)z.*?'''r   )r
   r
    
   )r   zreadfortrancode: reading #z failed with
zu.
It is likely that installing charset_normalizer package will help f2py determine the input file encoding correctly.r   r   r   freez	Reading file z	 (format:z,strict)
    z
r   r   z!f2pyr	   )r   cr   Cr   f2pyz     H   zxreadfortrancode: Found non-(space,digit) char in the first column.
	Are you sure that this code is in fix form?
	line=%s   r0   .pyf
z.Unexpected end of file when reading multiline
z6Flag sourcecodeform must be either 'fix' or 'free': %szLine #%d in %s:"%s"
	rq   )
dowithlineistopz-readfortrancode: could not find include file z in . Ignoring.
)7r   r    r!   r   r   beginpatternr   r   r   recompileIrangestr	fileinput	FileInputr   r   UnicodeDecodeError	Exceptionr   linenoisfirstliner   r   splitextr   r   r   COMMON_FIXED_EXTENSIONSr   _has_fix_headerr   beginpattern77beginpattern90r2   repr
expandtabsreplacesplit_by_unquotedr   rX   matchgroupro   rstrip
ValueError
filelinenoisfilereadfortrancodedirnamer%   joinpathsepclose)ffiler   r   saveglobalslocaldolowercasecont	finallinellincludelinecont1cont2
mline_markl1rv   spacedigitsfinlmsgextrl_origfinalliner   lcmfninclude_dirs	foundfileinc_dirfn1s                                 r)   r   r   h  st    !#3_nV_%+6{" DI	B**5rtt=KJJ,-EJJ-.EI&J2rFB%U2Y7Yr3r7Y77K


eh
7C
	A ??!!llnOKBI"N''""?3A6CO$++1137NN(+q/A	09K!'--O,n .Y4"46 7 LLN""63/r'uH$#2A r' '3/GQHA"1v||~((Wr!"v)=sC1779?'
  U"t00Qq6<<>V+!AB%A Dq6B;#2AaDK' !GIMa!Q R R ICFQJqts{!AB%Z	 " AAGGFO%++a."6"6v">>$&	(* $aeO+(*
I(*I(*TMD  !AB%A'$&HHJ	$&	$&MBv%C6Mj.>.>q.AHBMOBA!''+  HHJAAGGFO%++a...v66	 "# "
I "I "TMDH4P^K__a a4NNq /287 7m,Bww~~b!zC GGOOO4 68E F	+G'',,w3Cww~~c*$%	'
!L  , !R"**//,"?A B y!C D HHJ		M01or43 3-(AWWV_77>>"B:Q?GGOOO<=MLI'ggll7B/77>>#& !I#CJaH ( Hbjjool;= > 	9IIK2q 9D	6%	%+K 8 " 	+CLLN+;1SZZ\N  & 	s   ^<^ 	_1__zN\s*(?P<before>%s(?=\s*(\b(%s)\b)))\s*(?P<this>(\b(%s)\b))\s*(?P<after>%s)\s*\Zzqcharacter|logical|integer|real|complex|double\s*(precision\s*(complex|)|complex)|type(?=\s*\([\w\s,=(*)]*\))|byte.*rh   z|static|automatic|undefined)z([a-z]+[\w\s(=*+-/)]*?|)functionr   r   begin)z	[a-z\s]*?
subroutiner   r   zprogram|block\s*dataz@|module(?!\s*procedure)|python\s*module|(abstract|)\s*interface|ztype(?!\s*\()z\end|endprogram|endblockdata|endmodule|endpythonmodule|endinterface|endsubroutine|endfunctionendzDend\s*(if|do|where|select|while|forall|associate|critical|enum|team)z[\w]*?endifzmodule\s*proceduremoduleprocedure)r
   implicitr   r   r   )r
   dimension|virtualr   r   	dimension)r
   externalr  r   r  )r
   optionalr  r   r  )r
   requiredr  r   r  )r
   publicr  r   r  )r
   privater  r   r  )r
   	intrinsicr  r   r  )r
   intent|depend|note|checkr  z\s*\(.*?\).*intent)r
   	parameterr	  z\s*\(.*r	  )r
   datar
  r   r
  )r
   callr  r   r  )r
   entryr  r   r  )r
   callfunr  r   r  )r
   commonr  r   r  )r
   user  r   r  )r
   containsr  r
   r  )r
   formatr  r   r  )r
   Kthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddefr  r   f2pyenhancementsz2\s*(?P<before>''')(?P<this>.*?)(?P<after>''')\s*\Z	multilinec           
      x   t        d      t        |      z  rJ d       t        j                  dj                  dj                  t        j                  |            dj                  t        j                  |            dd            }|j                  |       }|r|j                         }|d	   |d
   fS | dfS )z
    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
    z"'zcannot split by unquoted quoteszR\A(?P<before>({single_quoted}|{double_quoted}|{not_quoted})*)(?P<after>{char}.*)\Zz[^"'{}]z[{}]z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))
not_quotedr;   single_quoteddouble_quotedbeforeafterr
   )setr   r   r  escaper   	groupdict)r0   
charactersr   r   ds        r)   r   r     s     E
S_,P/PP-


	!!'!((:)>?ryy4500	 "( "2	3A 	
AKKM(QwZ((":r(   c                     g }t        |       j                  d      D ],  }dD ]  }|j                  |d      } |j                  |       . dj	                  |      S )N@,@z(),r   ,)markoutercommasplitr   appendr   )argslinear   r   s       r)   _simplifyargsr(    sV    
AH%++E2A		!S!A 	 3 88A;r(   z"\s*(?P<result>\b[a-z]+\w*\b)\s*=.*z \s*(?P<bind>\b[a-z]+\w*\b)\s*=.*zH\s*bind\(\s*(?P<lang>[^,]+)\s*,\s*name\s*=\s*"(?P<lang_name>[^"]+)"\s*\)c                    t        | d      \  }}|rt        d   j                  |       slt        d   j                  |       sT|dk(  sJ t	        |             t        | d      \  } }|r!t        | |       t        |dd d      \  } }|r!t        | |       y|dk  r_dat        diat        i iat        g ia	g t        t           d<   i t        t           d<   dt        t           d<   dt        t           d	<   d
a
d
ay|dkD  rd}t        rt        t        k(  rd}t        |kD  rt        dt	        t              dt	        t              d       t        d       t        t        dz
     j                  t        t                  t        t           t        t        dz
     d
   d<   t        t        = t        dz
  at        |kD  rt        rt        t        k(  rt        t        dz
     j                  t        t                  t        t           t        t        dz
     d
   d<   t        t        = t        dz
  at        t        dz
     j                  t        t                  t        t           t        t        dz
     d
   d<   t        t        = t        dz
  ad
a
y| dk(  ryd}t        t         t"        t$        t&        t(        t*        t,        t.        t0        t2        t4        t6        t8        t:        t<        t>        t@        tB        tD        tF        tH        tJ        t        t        tL        fD ]  }|d   j                  |       }|r n|dz   }! stN        }	dt        cxk  r	t        k  ry dt        t           v rt        t           d   D ]  }
|
tP        v r	tP        |
   }
dt        t           v r|
t        t           d   v r7tS        j                  d|
z  tU        |       tR        jV                        }|sk|	j                  |jY                  d            }t[        |jY                  d            }|rd|
d|d|jY                  d      d} n	d|
d|d} t\        d   j                  |       }|st        dt	        |       z          yt_        |d|         y t`        dkD  s,t`        dk(  r7tb        je                         jg                  d      rda4t        dt        z         yd   dk(  r=dt        cxk  r	t        k  rn nt        dz
  at        t        k  ryt        dk  rtk        dt        z        t8        d   j                  |       }|rc|jY                  d       t        t           k(  sDtk        d!t	        |jY                  d             d"t	        t        t                 d#tl              t        t        k(  rd
at        t        dz
     j                  t        t                  t        t           t        t        dz
     d
   d<   t        t        = t        dz
  atn        sda8yy|d   d$k(  r5dt        cxk  r	t        k  rn n
t        dz   ayda9t_        ||d   |        da8y|d   d%k(  ry|d   d&k(  rt_        ||d   |        y|d   d'k(  r*tt        rydt        cxk  r	t        k  r	y t        ayt        aydt        cxk  r	t        k  ry t_        ||d   |        y)(z
    reset=-1  --- initialize
    reset=0   --- crack the line
    reset=1   --- final check if mismatch of blocks occurred

    Cracked data is saved in grouplist[0].
    ;r   r   Nr
   bodyvarsblockrq   r      zcrackline: groupcounter=z groupname=r   zYcrackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
	externals
interfacedz5(?P<before>[^"]*)\b%s\b\s*@\(@(?P<args>[^@]*)@\)@.*\Zr  argszcallfun (z
) result (r   )z8crackline: could not resolve function call for line=%s.
r  r   z"crackline:%d: No pattern for line
r   z>crackline: groupcounter(=%s) is nonpositive. Check the blocks.thiszcrackline: End group z* does not match with previous Begin group z
	r   r   r   r  );r   f2pyenhancementspatternr   multilinepatternr   	crackliner   	groupname
groupcacher   r   r   r   r2   r%  dimensionpatternexternalpatternintentpatternoptionalpatternrequiredpatternparameterpatterndatapatternpublicpatternprivatepatternintrinsicpatternendifpattern
endpatternformatpatternr   functionpatternsubroutinepatternimplicitpatterntypespatterncommonpatterncallpattern
usepatterncontainspatternentrypatternmoduleprocedurepatterncrackline_re_1rz   r   markouterparenr   r   r(  callfunpatternanalyzeliner   r!   r   endswithr&   r   r    r   r   r   r   )r0   resetr   has_semicolonsemicolon_lineflr1   patr   re_1rq   m1m2r'  s                 r)   r7  r7    s,    )s3A}5a8>>tD/288>z&4;&z0s;ndE"#4^AB5G#M D.  	$qy!2&	"B'
!2&	+-
< (+-
< (,.
< )+-
< (qy\\9BR,'i: ;lnlQ&'..z,/GH6?6MIlQ&'+F3,''!+L R \\9lQ&'..z,/GH6?6MIlQ&'+F3,''!+LlQ&'..z,/GH6?6MIlQ&'+F3,''!+LLrzD /=/ +}n jo/@}Z' & FLLax#$ /</ 0*\22"<0=;&&t,D:l#;;
S_H`amHn@nXXLtSUcdhUikmkokoqBHHX$67B%bhhv&67A !RXXh%7 9  48;&q)//5AWZ^_cZddf9d3+ >, Q;7a<O,A,A,C,L,LV,T#9\JK	Q5.,.'!+L,.1 0+- . . !_""D*&)Y|-DD!"((6"23T)L:Q5R-/  
 l* O,"#**:l+CD2;L2I	,"#B'/l##a'K 	Q7	/</'!+LAs1vt$	Q7		Q$	$As1vt$	Q:	/</ 0&,/</ 0As1vt$r(   c                 z    d}d}| D ]1  }|dk(  r|dz   }|dk(  r|dz   }|dk(  r|dz
  }|dk(  r|dz   }-||z   }3 |S )Nr
   r   r2  r   @(@r3  @)@r'   )r0   r   fr   s       r)   rR  rR  ]  sl    
A	A8AAAvI#XAAAvIE  Hr(   c                    d}d}t        | |dz         \  }}||z  }|rY|d   |k(  r|dk(  r|d|z   dz   z  }n#||d   z  }|d   dk(  r|dz  }n|d   dk(  r|dz  }t        |dd  |dz         \  }}||z  }|rY|rJ t        || |f             |S )Nr
   r   z()@r2  r   r3  )r   r   )r0   commar   ra  r  r  s         r)   r#  r#  o  s    
A	A%dEDL9MFEKA
!HAFus""AqMAQx3QqSQ)%)UT\B	V  $$4|$$5Hr(   c                 J    | j                  dd      j                  dd      }|S )Nr_  r2  r`  r3  )r   )r0   r   s     r)   unmarkouterparenrf    s$    UC ((4AHr(   c                    | si } |s| S | |u r| S t        |j                               D ]  }|dk(  r|s|| vs||   | |<   |dk(  r||   D ]  }t        | ||      }  5|dk(  rt        | ||   |      } K|dk(  rt	        | ||   |      } a|dv r|s|| vsl||   | |<   u|dk(  r{|dv rt        d|z         t        d	t        |      z          | S )
Nr4   attrspeckindselectorcharselector)=typenamenote)r  checkr   r  r  dependz"appenddecl: "%s" not implemented.
z-appenddecl: Unknown variable definition key: )listkeyssetattrspecsetkindselectorsetcharselectorro   r   r   )decldecl2forcekr   s        r)   
appenddeclry    s   u}%**,
?(Q*_1X"4E2 . "4q59D. "4q59D##(Q&[ ) )9A=>KF# $ $)  , Kr(   zD\s*(?P<this>(@\(@.*?@\)@|\*[\d*]+|\*\s*@\(@.*?@\)@|))(?P<after>.*)\Zz[(?:,(?P<attributes>[\w(),]+))?(::)?(?P<name>\b[a-z$_][\w$]*\b)(?:\((?P<params>[\w,]*)\))?\Zz\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*\ZzF\s*(?P<scheme>(operator|assignment))@\(@\s*(?P<name>[^)]+)\s*@\)@\s*\Zz9\s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Zz4([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)zA([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))zintent\s*\(.*?\bcallback\bc                 `    | j                  dg       D ]  }t        j                  |      s y y)Nrh  r   r   )get_intentcallbackpatternr   )vdeclr'  s     r)   _is_intent_callbackr~    s-    YYz2&!''* ' r(   c                 d   dj                  | j                               } t        j                  |       }t	        | |       |re|j                  d      }|r-|j                  d      D cg c]  }|j                          c}ng }|j                  d      ||j                  d      fS d g d fS c c}w )Nr
   
attributesr"  rq   params)r   r$  typedefpatternr   printr   r   )r0   r\  attrsr'  s       r)   _resolvetypedefpatternr    s    774::< D			d	#B	$O	&9>EKK$45$4q$45Bxx(:::T> 6s   )B-c                     t        j                  dt         j                        }|j                  |       }d }|r8|j	                  d      }| d |j                          | |j                         d  z   } | |fS )NzObind\(\s*(?P<lang>[^,]+)(?:\s*,\s*name\s*=\s*["\'](?P<name>[^"\']+)["\']\s*)?\)r   )r   r   r   searchr   startr   )r0   patternr   bind_statements       r)   parse_name_for_bindr    sl    jjkmomqmqrGNN4 ENQNU[[]#d599;<&88r(   c                    t        |       \  } }t        |       } t        j                  |       }|r3|j	                  d      |j	                  d      |j	                  d      |fS t
        j                  |       }|r/|j	                  d      dz   |j	                  d      z   dz   }|g d d fS t        j                  |       }|r$|j	                  d      |j	                  d      d d fS d g d d fS )Nrq   r1  r   schemer2  r3  )r  rR  nameargspatternr   r   operatorpatterncallnameargspattern)r0   
bind_cnamer\  rq   s       r)   _resolvenameargspatternr    s    *40D*$D			t	$B	xx&!1288H3EzQQ			t	$B	xx!C'"((6*::S@Rt##		"	"4	(B	xx&!14==T4r(   c                 p7   | j                  d      }|dk7  rd at        r|dvrt        st        dk  rt
        j                  j                  t              j                  d      d   }t        d|z         dat        dz   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|dv r|j                         }t!        j"                  d|t         j$                        rd}nOt!        j"                  d|t         j$                        rd}n't!        j"                  d|t         j$                        rd}|dk(  r@t'        | j                  d            \  }}}t)        |      t        t           d
   |<   g }d }	nt+        | j                  d            \  }}}	}
||dk(  rd}nd}|dvrt        d       ||t        fa|r@t-        t/        |      j                  d      D cg c]  }|j1                          c}      }ng }d|v r%d|v r|j3                  d       d|v rt        d       d}d}|dv r\d}d t        t           vry |t        t           d    vry t        t           D ]  }|d   |k(  s y  |t        t           d!   v ry d"d#d|   }t4        r#t6        d$k(  rt        dk  rt        d%z   ad}|d&vrd}t        dz   ai t        t        <   g t        t        <   |rt8        dkD  rt        d't;        t4              z  d       d(t        t        <   dt        t           d<   t4        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z   ai t        t        <   g t        t        <   |rt8        dkD  rt        d*t        z  d       d+t        t        <   d+t        t           d<   d,t        t           d<   t        t        dz
     d   d-t        t        dz
     d   t        t           d<   g t        t           d	<   g t        t           d)<   g t        t           d!<   i t        t           d
<   t        dz   ai t        t        <   g t        t        <   |t        t        <   |t        t           d<   |sd.|j=                  d/d0      z   }| j                  d1      t        t           d2<   t?        |      t        t           d<   |	t        t           d3<   t        dk(  rt        t        t           d<   nqt4        r4t        d4k(  r+t        t        dz
     d   d-t        t        t           d<   n7t        t        dz
     d   d-t        t        dz
     d   t        t           d<   tA        t        t           jC                               D ]!  }t        t           |   rt        t           |= # |t        t           d <   g t        t           d	<   g t        t           d)<   g t        t           d!<   i t        t           d
<   i t        t           d5<   |dk(  rg t        t           d6<   |dv r|t        t        d%z
     d)   vr"t        t        d%z
     d)   jE                  |       tG        jH                  t        t        d%z
     d
         t        t           d
<   	 t        t           d
   |   t        t           d
   |   d7   jK                  d8      = |d9v rN
rt!        jN                  tP        |
      }|rm|i it        t           d:<   |j                  d;      t        t           d:   |   d;<   |j                  d<      r%|j                  d<      t        t           d:   |   d<   	 tS        t        t           d
   |   t        t        d%z
     d
   d         t        t           d
   |<   |d=k(  rX|	rV|	t        t           d
   v rD||	k(  s?tS        t        t           d
   |   t        t           d
   |	         t        t           d
   |<   	 t        t        d%z
     d!   jE                  |       |d#k(  rltT        d   j#                  | j                  d1      d/z   |z         }|r=tW        |j                  d      |j                  d            \  }}}}tY        ||||       |dv rt        t        dz
     jE                  t        t                  t        t           t        t        dz
     d$   d	<   t        t        = t        dz
  at        t        dz
     jE                  t        t                  t        t           t        t        dz
     d$   d	<   t        t        = t        dz
  ay y |d5k(  rt+        | j                  d            \  }}}	}|s|r@t-        t/        |      j                  d      D cg c]  }|j1                          c}      }ng }|	J t;        |	             |t        t           d5   |<   d5|t        fay y |dk(  r;tW        || j                  d            \  }}}}tY        ||||      }|
d>|t        fay y |d?v rt        t           d
   }| j                  d      j1                         }|j[                  d@      }|dk  r|dAk(  rt]        |      j[                  dB      d%z
  }|d |dz    d@z   ||dz   d  z   }|j[                  d@      }||d  d@k(  rTd t        t           v rEt        dC| j                  d      |d | dD       |dEj_                  t        t           d          z   }|dk  rd}d}n|d | j1                         }||d%z   d  }t/        |      j                  d      }ta        |      dkD  r%|d   }t        dFdEj_                  |dd        z         d }t/        |      j                  d      D cg c]  }|j1                          c}D ]4  }tb        j#                  |      }|s<|dGv rd}nOte        | jg                                t        dH|dIt;        |      dJ       Wt?        |j                  d            }|dGv r|dKk(  s|dLk(  r||j                  d      z  }||vri ||<   |dMk(  r||j                  d      z   }|dAk(  r| j                  d      |z   }th        j#                  |      r|t        t           d    vrt        dkD  rsdNt        t        d%z
     d   vrt        dO       |t        t           d   k7  r]t        dP|dQt        t           d   dR       t        t           d    jE                  |       ntk        dS|z         ntk        dT|z         |dUv r|}d7||   v r||   d7   jE                         n	g||   d7<   |d8k(  rrt        t           d   dk(  rt        dV       |t        t           d    vrd)t        t           vrg t        t           d)<   t        t           d)   jE                  |       |}7 |t        t           d
<   |
d>|t        fay y |dWk(  rK| j                  d      j                  dE      D cg c]  }|j1                          c}t        t           dX<   y |dYk(  r?t        t           d
   }| j                  d      j1                         dd$ }d }t/        |      j                  d      D ]  }	 |j                  dZ      D cg c]  }|j1                          c}\  }}tm        |      }t?        |      }||vri ||<   dZ||   v r&||   dZ   |k(  st        d^|d_||   dZ   d`|da       to        ||      }|r|jq                  db      dck(  rtA        |      } tr        ju                  |      D ]i  } tA        || jw                         | jy                          j                         j=                  ddde            | | jw                         | jy                          k dj_                  |       }nG|jq                  db      dfk(  r3|dd  j                         j=                  ddde      j=                  dEdg      }	 t{        |i |      }!t;        |!      ||   dZ<   d7||   v r||   d7   jE                  dY       n	dYg||   d7<   |} |t        t           d
<   |
d>|t        fay y |djk(  r| j                  d      j1                         j                         dkk(  rd t        t           dj<   y | j                  d      r1djt        t           v rt        t           dj   }#ni }#|#t        dl       i }#t/        | j                  d            j                  d      D ]  }i }$t!        j"                  dm|t         j$                        }|st        dn|z         <t        j#                  |j                  d            }%|%st        do|z         qtW        |%j                  d      |%j                  d            \  }}}}t        ||      \  }&}'}(||$db<   |&|$dp<   |'|$dq<   |(|$dr<   tA        |$jC                               D ]  }|$|   r	|$|=  t/        |j                  d            j                  d      D ]  })ds|)v r2	 |)j                  ds      D cg c]  }|j1                          c}\  }*}+n|)j1                         x}*}+ta        |*      ta        |+      cxk(  rdk(  sn t        du|)z         yt        t        |*      t        |+      dz         D ]  },|$|#t        |,      <      |#t        t           dj<   y y |dvk(  rg }d}-d}.d}/d}0d}1| j                  d      D ]  }2|1s|2dwk(  r|0 }0|2dxk(  r|0r|/dz   }/|2dyk(  r|1dz   }1n
|2dzk(  r|1dz
  }1|/dk(  r|-|2z   }-:|/dk(  r|.|2z   }.E|/d%k(  sK|-j1                         }-|-j                  dE      r|-dd  j1                         }-|jE                  |-|.g       |2}-d}.d}/ |/d%k(  rG|-j1                         }-|-j                  dE      r|-dd  j1                         }-|jE                  |-|.g       i }3d
t        t           v rt        t           d
   }3d }|D ]  }4|4D cg c]  }|j1                          }4}|4d   d   dEk(  r|4d   dd  |4d<   |4d   d   dyk(  rt        d{|4d   z         Tta        |4d         }5t        t-        t/        |4d         j                  d      D cg c]  }|j1                          c}            D ]  \  }6}!|!d   dyk(  rt        d{|!z         d}0|3|!   jq                  db      }7t        |3|!         }8|7dfk(  rd|}9t!        j                  |9|4d         }:n|4d   j                  dE      }:|!|3vri |3|!<   dZ|3|!   v r,|3|!   dZ   |:|6   k(  st        d}|!d_|3|!   dZ   d~|:|6   d]       |8'dj                  dj_                  |:            |3|!   dZ<   n|:|6   |3|!   dZ<   |!}  |3t        t           d
<   |
d>|t        fay y |dk(  r[| j                  d      j1                         }|d   dxk(  sd|z   }g };d}/d}<d}=|D ]R  }2|2dxk(  r|/dz   }/|/d4k\  r0|<j1                         }<|<sd}<|;jE                  |<|=g       |/d%z
  }/d}<d}=|/d%z  r|<|2z   }<N|=|2z   }=T |<j1                         }<|<sd}<|;jE                  |<|=g       i }>dt        t           v rt        t           d   }>|;D ]i  }2|2d   |>vrg |>|2d   <   t/        |2d         j                  d      D cg c]  }|j1                          c}D ]  }|s|>|2d      jE                  |        k |>t        t           d<   d|<t        fay |dk(  rt!        j"                  d| j                  d      t         j$                        }|rW|jg                         }?dt        t           vri t        t           d<   |j                  d      }i t        t           d   |<   d}@d|?v r|?d   d|?v r|?d   d}@@t        t           d   |   d<   |?d   j                  dE      D cg c]  }|j1                          }}i }A|D ]  }4dZ|4v rt!        j"                  d|4t         j$                        }%|%r@|%j                  d      j1                         A|%j                  d      j1                         <   nt        dt;        |4      z         n|4A|4<   At        t           d   |   d<    y y te        | jg                                t        d       y |dv rdt        t           vri t        t           d<   t        t           d   }B| j                  d      dk(  rDdBv r@t        Bd   t              r	Bd   g|Bd<   Bd   jE                  | j                  d             y | j                  d      B| j                  d      <   y |dk(  rIt        t8        rt        d       y t        }Ct        t        |C   t        d d% | j                  d             y t8        dkD  r%te        | jg                                t        d       y y c c}w # tL        $ r Y w xY w# tL        $ r Y w xY w# tL        $ r Y ww xY wc c}w c c}w c c}w c c}w # tL        $ r t        d[|d\|d]       Y w xY w# t|        t~        t        f$ r}"tk        dh|di|"dD       Y d }"~">d }"~"ww xY wc c}w # tL        $ r t        dt|)z         Y w xY wc c}w c c}w c c}w c c}w )Nr4  r  )r   r  r  rh   r   .r   zBanalyzeline: no group yet. Creating program group with name "%s".
programr+  r,  r-  rq   fromskyfrom)r   r  r  zblock\s*data
block datazpython\s*modulepython modulezabstract\s*interfaceabstract interfacerh   r  )rh  _BLOCK_DATA_r
   )	interfacer  r  z2analyzeline: No name/args pattern found for line.
r!  z<analyzeline: argument list is malformed (missing argument).
)r  r  r1  r0  r   r   r   r.  r  r  z&analyzeline: Creating module block %s
moduler/  zDanalyzeline: Creating additional interface block (groupcounter=%s).
r  unknown_interface:unknown_r   r   r  prefixr      r  varnamesrh  r  r   r   bindlanglang	lang_namer  variable)r   r  r  r  r  r  r  r  ::r  r`  z"All arguments will have attribute r   r"  zXanalyzeline: cannot handle multiple attributes without type specification. Ignoring %r.
r  r  z&analyzeline: no name pattern found in z statement for z. Skipping.
operator
assignmentr   __user__z8analyzeline: missing __user__ module (could be nothing)
z(analyzeline: appending intent(callback)  to z arguments
z,analyzeline: intent(callback) %s is ignored
z=analyzeline: intent(callback) %s is already in argument list
)r  r  r  r  r  r  z(analyzeline: ignoring program arguments
r   implementedbyr	  rk  zAanalyzeline: could not extract name,expr in parameter statement "" of ""
z1analyzeline: Overwriting the value of parameter "" ("z	") with "rm   r4   r5   r  ecomplexz+1j*(z analyzeline: Failed to evaluate z. Ignoring: r   nonez<analyzeline: Overwriting earlier "implicit none" statement.
z9\s*(?P<this>.*?)\s*(\(\s*(?P<after>[a-z-, ]+)\s*\)\s*|)\ZzDanalyzeline: could not extract info of implicit statement part "%s"
zManalyzeline: could not extract types pattern of implicit statement part "%s"
ri  rj  rl  -zZanalyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement
z^analyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement (2)
r
  '/r2  r3  z>analyzeline: implied-DO list "%s" is not supported. Skipping.
z\(.*?\)z*analyzeline: changing init expression of "") to "z(/{}/), r  z//_BLNK_r  zR\A\s*(?P<name>\b\w+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\Zrp  notonlyonlyz7\A\s*(?P<local>\b\w+\b)\s*=\s*>\s*(?P<use>\b\w+\b)\s*\Zlocalz0analyzeline: Not local=>use pattern found in %s
mapz0analyzeline: Could not crack the use statement.
)r  r  usercodez-analyzeline: No context for multiline block.
z+analyzeline: No code implemented for line.
)Nr   r&   r   r   r   r   r   basenamer!   r$  r2   r   r8  r9  r   r   r   r   r   r  dictr  rw   r#  r   remover   r   r   r   r   rr   rp  rq  r%  copydeepcopyr[   r   r  crackline_bindlangry  rJ  cracktypespec0
updatevarsfindrR  r   rX   namepatternr  r  r|  ro   get_parametersdetermineexprtyper{  real16patternfinditerr  r   evalSyntaxError	NameError	TypeErrortypespattern4implicitcracktypespecr   ordchrr   	enumerategetdimensionfindallr  
isinstancer   appendmultiline)Dr   r?   r0   r-  newnamerq   r  r   r1  r   	bindclinex
needmoduleneedinterfaceitrx  bindcdattr4   selectorattredecl	last_namer   iplchr  r\  apinitexprr  ttvr   implru  r]  
kindselect
charselectrl  r   begcendcodlilra  fcinpr   r,  r   llenidxvtypevdimcmplxpatmatchesclbnol	commonkeymmisonlyr   r  gcsD                                                                       r)   rT  rT    s   
 GGFOE{t#GG!1''""?399#>qAQT[[	]#a'"+	,#%
< "$	,+-
< (+-
< (,5
< )+2
< (+4
< (++88OUBDD1 EXX(%6#EXX-ubdd;(EF?3AGGG4DEND%59U5KJ|$V,T2DF,CAGGGDT,U)D$	<$%MMMN!46'5d';'A'A%'HJ'H!  ggi'HJ KD D:*B *OQ 
&&MZ55:l3F;;-f:% . z,/==)jA$GE\R/LA4E'!+LJ?? !#a'#%
< "$	,{A]+,-.0&.Il#0?J|$W-/<J|$V,/1J|$V,/1J|$V,46J|$[157J|$\2/1J|$V,'!+L')J|$&(Il#{_ "#$&&1Il#0;J|$W-/BJ|$V,<!+,V4jPQAQ6RSY6Z0\J|$V,/1J|$V,46J|$[157J|$\2/1J|$V,'!+L')J|$&(Il#"'	,,1
< )c3 77D-.WWX->
< *+5d+;
< (-3
< *1/>J|$V,!2|a/08/4K
<(0 |a/08*\TUEU:VW]:^4`
<(0j.3356Al+A.|,Q/ 7 ,0
< (+-
< (02
< -13
< .+-
< (,.
< )F?35J|$Z0&&:lQ&67DD<!+,[9@@F/3}}<!+,V406J|$V,|,V4T:|,V4T::FLLZXZ ..99%7C<@2;J|,Z8IQX^I_J|,Z8>vF~~k2MU^^\gMh
<0<TB6J9C|,V4T:J|VWGW<XY_<`ac<d:f
<(06 y f
<(@(HH6>AK&|4V<TBJ|D\]cDdekDlBn
<08><!+,\:AA$G JQ%%aggh&7#&=&DEA2@GGFOQWWW%537/(D%8XtU;&&lQ&'..z,/GH6?6MIlQ&'+F3,''!+LlQ&'..z,/GH6?6MIlQ&'+F3,''!+L ' 
6qwww7GHdFA +9$+?+E+Ee+L"N+La #$'')+L"N O >/4</>6:J|$W-d3 '|<  
*81777#+%'(D%x4?	  *I|D !	n	n<(0WWW##%GGDMq5TX%r"''.2AFQUd"RAZ/BA!"v~&J|,D"D"Ra&2 3#((:l#;F#CDDq5ABBQBAEFBB%%e,r7Q;ABoAB " #	%3B%7%=%=e%DE%D!'')%DEA""1%B00A!++-(d1g' (rxx/0,,Z1#4RXXg&&~a{"BHHW--xWWV_r))//3
< 8 @@'!+)L1<L1Mf1UU '$_!a  !J|$<V$DD '@A:lC[\bCc)e !f *< 8 @ G G J# OST UW   !69:!< =]]U1X%a$++B/(*ta$z!l+G4	AGHJ|4V<<j&>><>J|,[9<(5<<Q?Ik Fl ,1
< (  *I|D !	"	" ! 0 6 6s ;< ;1QWWY ;< 	< 1		<(0WWW##%a+	#))%0A23''#,?,Qqwwy,?8
 $E*F1A~aeAha(AuQx}h0 1!(F3A55$.hB*33H=04$QWWYquuw7==?GGSQ1S1779QUUW- >  "wwr{HUU:&)3'|113;;CEW- 2v.
 !GE!HSMU1X%a$++K8(3}a$II 1J ,1
< (  *I|D !		777!!#))+v537J|$Z0WWWZ55!,/
;|SU#AGGG$45;;EBXXPRSUWUYUY[_cdeg*00&1ABhlmnp2@HHV$bhhw&739/(D%3@h4(0
J#+Z '1^$'1^$#+Z diik*A7 G + ((9:@@GAax%=>WWS\)J\!'')\)JJD$ '(ggi/tt9D	6Q6}  AB  BC "3t9c$i!m<'+SV = H1 CP 48J|$Z0c d 
!A8B8AACxAgcAgAv!Va!VaXXZ==%ABB		2r(#- ". 6B}}S!V\\^IIr2hZ--l+F3D	A$%&AqAA&tAw#~tABx!tAw#~UXYZ[X\\^qt9D#I(6qt(<(B(B5(IJ(I1QWWY(IJ%L &Q Q43;Y\]]_
 QJ/#DG,Y&)H jj1Q48GdjjoGD= DG$q'>$q'#,'#,*F473<7 8 ##+??499W3E#FDGCL#*3<DGCL	?& R ,0
< (  *I|D !		www%%'Aw#~$;DACxEAvXXZ!B		2r(#E1u!V!V   XXZB
		2r(	z,//"<0:IAt9$"$	!A$)7!)=)C)CE)JK)JAaggi)JKadO**1- L  .7
< *$b,7	XXacdcjcjkrcsuwuyuy{BJ|4424
<(/88F#D46J|$U+D1F|6
 6?r)}'<F@F
<(/5f=)+F)9)9#)>?)>Aaggi)>?AaxXXVXY[][_[_a<>HH %='',uw rxx06689 $ SVZ[\V] ]_ !"1CEJ|,U3D9%@  !++- GH	%	%Z%==;=J|$%78|$%78776?j(Z1_!J--!":*jM  !12!"!1Aaggfo		#HI
2(!,	) Q;!++- BC UJP      ."NL Fv = @ hikmnp0  I6 #S* +h *K( %# }  AB  !BC$%j ' KH L& @s   0Ak"7Ak' AAk7 :"Al Al(Al>Al! Al+Al&*Al+CAmK;AnLAnL%AnS-An$U0An)^(An.cAn3k'	Ak4k3Ak4k7	AllAll	AllAll&Al+l+Am
m	Am
mAm>m!Am9m9Am>nAnnAn!n An!c                 Z    d| vri | d<   | d   }||vrg ||<   ||   j                  |       y )Nf2pymultilinesr%  )r   context_namemlr  s       r)   r  r  &  sF    u$"$A1,lO2
r(   c                 F   d }d }t        j                  d| t         j                        rd} nFt        j                  d| t         j                        rd} n| j                         j	                         } t
        j                  t        |            }|st        d       y |j                         }t        |j                               D ]  }t        ||         ||<    | dv r
|d   }|d   }|j                  d	      }|d
k\  r|d | j                         }||dz   d  }| |||fS )Nzdouble\s*complexdouble complexzdouble\s*precisionzdouble precisionz>cracktypespec0: no kind/char_selector pattern found for line.
)r  r7   logicalr5   	characterrh   r4  r  r  r   r.  )r   r   r   r   r   selectpatternrR  r2   r  rp  rq  rf  r  )r4   r   r  r  r\  r  rx  r  s           r)   r  r  0  s   HD	xx#Xrtt4#	'244	8%>>#))+			^B/	0BM	O
A!&&(^!%! QQV9wZ
AAv"1v||~AZXtR''r(   z)\s*(?P<name>\b\w+\b)\s*(?P<after>.*)\s*\ZzB\s*(\(\s*(kind\s*=)?\s*(?P<kind>.*)\s*\)|\*\s*(?P<kind2>.*?))\s*\Zz2\s*(\((?P<lenkind>.*)\)|\*\s*(?P<charlen>.*))\s*\Zz\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>.*)|(f2py_len\s*=\s*(?P<f2py_len>.*))|))\s*\Zz\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                     | j                         } t        |       dk  r| S | d   }t        dt        |       dz
        D ]'  }| |   dk(  r| |dz      dv s
| |dz
     dv r || |   z   }) || d   z   }|S )Nr   r   r   z()[]{}=+-/* r   )r   rX   r   )exprexpr2r  s      r)   removespacesr  W  s    ::<D
4yA~GE1c$i!m$GsN1q5k^+a!e.Q % DHELr(   c                     d}d}d}d}| D ]8  }|dk(  r|dv r||z  }|}|s|dv r|}||k(  r| }n|dk(  r|r|dz  }2||z  }|}: |S )	a(  
    The function replace all spaces in the input variable line which are 
    surrounded with quotation marks, with the triplet "@_@".

    For instance, for the input "a 'b c'" the function returns "a 'b@_@c'"

    Parameters
    ----------
    line : str

    Returns
    -------
    str

    r
   FN\)r  r  ")r  r  r   @_@r'   )r0   fragmentinsidecurrent_quoteescapedr   s         r)   markinnerspacesr  f  s      HFMGd?q$55MHG!{*MZF#X&HA  Or(   c                 |   d }t        | |      \  }}}|rt        |      j                  d      D cg c]  }|j                          }}g }	t	        j
                  d      }
|D ]Y  }|s|
j                  |      }|r0|j                  d      j                         }||t        |      d  z   }|	j                  |       [ |	}t        |      j                  d      D cg c]  }|j                          }}g }|D ]u  }t        t        t        |            d      j                  d      D cg c]  }|j                          c}D ]&  }|s|j                  |j                  dd             ( w |D ]  }t        j                  |      }|st        dt!        |      z         3t#        |j                  d	            }i }|t$        t&           d
   v rt$        t&           d
   |   j)                         }d|v}|r| |d<   n"| r | |d   k(  st        d|d|d   d| d       d|vrt)        j(                  |      |d<   nu|rst+        |j-                               D ]W  }||d   v r0||   |d   |   k(  s"t        d|d|d|d   |   d||   d	       :t)        j(                  ||         |d   |<   Y d|vr|r|r||d<   nt/        d|d|d       nu|rst+        |j-                               D ]W  }||d   v r0||   |d   |   k(  s"t        d|d|d|d   |   d||   d	       :t)        j(                  ||         |d   |<   Y d|vr||d<   n"|r |d   |k(  st        d|d|d   d|d       d|vrt)        j(                  |      |d<   n|r|D ]  }||d   vs|d   j                  |         net)        j(                  |       |d<   t)        j(                  |      |d<   t)        j(                  |      |d<   ||d<   t)        j(                  |      |d<   d|j1                  d      xs g v rP|t$        t&           d   v r>dt$        t&           vrg t$        t&           d<   t$        t&           d   j                  |       |j                  d      r&t2        j                  t5        |j                  d                  }|r|j7                         }dD ]  }||d z      ||d z      ||<   ||d z   =  t+        |j-                               D ]  }||   t9        ||         ||<   ||=  d!|v ryd"|v ru|d!   d#k(  r|d"   |d!<   |d"= na| d$k(  r*d|vs|d   si |d<   d!|d   v r|d   d!= |d!   |d   d%<   |d!= n2|d"   d&z   |d!   z   |d"<   |d!= t/        d'| d|d(| d|d)|d"   d*       d!|v rO| d+v rd|vs|d   si |d<   |d!   |d   d%<   |d!= n.| d$k(  r)d|vs|d   si |d<   d!|d   v r|d   d!= |d!   |d   d%<   |d!= d,|v r3d-|v r'|d-   |d,   k(  st        d.|d|d-   d|d,   d       n|d,   |d-<   d"|v rd/|d"   z  }d|vs|d   s|g|d<   nj|d   j                  |       |d   D ]-  }|d d0 d1k(  s||k7  s|d   d2= t/        d|d3|d4|d        n" n t        d5||j                  d      z   z         t+        |j-                               D ]  }||   r	||=  |t$        t&           d
   |<   d6t$        t&           v rt$        t&           d6   j                  |       |} |S c c}w c c}w c c}w )7Nr!  z(?P<start>[a-zA-Z]+)r  r   rd  z@ @r  z;updatevars: no name pattern found for entity=%s. Skipping.
rq   r,  r4   z+updatevars: attempt to change the type of "r  r  z". Ignoring.
ri  z0updatevars: attempt to change the kindselector "r  rj  zupdatevars:z*: attempt to change empty charselector to r   z0updatevars: attempt to change the charselector "rl  z/updatevars: attempt to change the typename of "rh  r  r1  r/  r  )rX   arrayinit2rX   r   r
   r  r   r"  zupdatevars: "z" is mapped to "r2  z)"
r  r7   r  r5   r!  rk  z6updatevars: attempt to change the init expression of "dimension(%s)	   r   r   z: attempt to change r  z?updatevars: could not crack entity declaration "%s". Ignoring.
r  )r  r#  r$  r   r   r   r   r   r   rX   r%  r  r  r   r  r2   r   rr   r9  r   r  rp  rq  ro   r{  lenarraypatternrR  r  rf  )r4   r  rh  
entitydeclr  r  r  rl  r  r   r   r'  r   selel1r  e1enamer  not_has_typespecrx  r\  d1lkdmdm1s                              r)   r  r    s    I'4Xx'H$J
H'5h'?'E'Ee'LM'L!AGGI'LMJJ./A
AGGG$**,#a&'
NHHQK  +J7==eD	ED!'')DB	E
C&4\/RSBT5U]`&a&g&ghm&no&n1779&noB

2::eS12 p  a NRVWXRYZ\1776?+J|,V44|,V4U;@@BE)6$,j!8uZ/@#@5,h8 9U*(,		*(=n%joo/0AE.11:a=ER`LabcLd;dueN&;A&>
1!O P 4899Z]3Kn-a0 1 U*z#,6E.)$j2 3joo/0AE.11:a=ER`LabcLd;dueN&;A&>
1!O P 4899Z]3Kn-a0 1 &$,j!5#4#@5,h8 9&$(IIh$7j!!Aj 11j)003 " !%		( 3E*$(IIj$9E.!$(IIj$9E.! (E* $		( 3E*%))J/5261
<@XY_@`;`*\"::8:
<(5|$[188;777 &&~aggg6F'GHB\\^2B"s(|/!#BH2rCxL 3 bggiA!u( 0A 71qE	 ) B;7b=%yB$&wK5	wK![0*%7~AV46E.1 E.$99 %n 5e <57Yn-c2uI&(kC&7"U)&C7uI$a5"W+!G H B;#LL*%7~AV46E.157Yn-c2uI![0*%7~AV46E.1 E.$99 %n 5e <57Yn-c2uIR<e|U3Z2f:-E!5:r&z!; < &(Zc
b=(2g;6B!.uZ7H-/Dj)j)004#(#4C"2Aw+5#)$)*$5b$9 '+0#r); !< % $5 ZAGGG,,. /ejjl#A8!H $ 38
< (/L11|$Z077>	K L q N 
F ps   \/\4-\9c                 t   d }d }d }|r+| dv rt         j                  |      }|st        dt        |      z         y |j	                         }|d   |d<   |d= t        |j                               D ]  }||   r	||=  t        |j                               D ]  \  }}t        |      ||<    n| dk(  rt        j                  |      }|st        dt        |      z         y |j	                         }|d   |d<   |d= |d   rft        j                  t        |d               }|j	                         }d	D ]#  }||d
z      r||d
z      ||<   ||   ||<   ||d
z   = % |d   |d   |d<   |d= t        |j                               D ]  }||   r	||=  t        |j                               D ]  \  }}t        |      ||<    np| dk(  rTt        j                  d|t        j                        }|r|j                  d      }n2t        dt        | |z         z         nt        dt        |      z         |||fS )Nr#  z4cracktypespec: no kindselector pattern found for %s
kind2r   r  z4cracktypespec: no charselector pattern found for %s
charlenlenkind)rX   kindr"  f2py_lenrh   z\s*\(\s*(?P<name>\w+)\s*\)rq   z'cracktypespec: no typename found in %s
z'cracktypespec: no selector used for %s
)ri  r   r2   r   r  rp  rq  itemsrr   rj  lenkindpatternr#  r   r   r   )	r4   r  r  r  rl  rx  r  r5  r/  s	            r)   r  r  ,  sn   JJH@@%++H5JKtT\~^`#--/J(1JsO7#*//+,!!}"1 - Z--/01 *1
1 1$%++H5JKtT\~^`#--/J(3JsO9%)$(..":i#89;!++-)BrCx(&-b3h&7%,R[JrNS)	 *
 :&2-4Z-@Jz*9%*//+,!!}"1 - Z--/01 *1
1 1xx =xNH#>>&1Bh124 5 >(^% &z8++r(   c                    | si } |s| S d| vr|g| d<   | S |r| d   j                  |       || d   v r| S |dk(  rd| d   vr| d   j                  |       | S |dk(  rd| d   vr| d   j                  |       | S |dk(  rd| d   vr| d   j                  |       | S |dk(  rd| d   vr| d   j                  |       | S | d   j                  |       | S )Nrh  rJ   	automaticr  r  r	  )ru  r  rw  s      r)   rr  rr  h  s-    6ZZ%tJxKtJ/??Z% K 
	j1A!AZ% K 
	D,,##D) K 
	4
++##D) K 	Z%Kr(   c                     | si } |s| S d| vr|| d<   | S t        |j                               D ]  }|s|| d   vs||   | d   |<    | S )Nri  rp  rq  ru  selrw  rx  s       r)   rs  rs    sg    T!"^#((*AT.11&)!fD #  Kr(   c                     | si } |s| S d| vr|| d<   | S t        |j                               D ]  }|s|| d   vs||   | d   |<    | S )Nrj  r=  r>  s       r)   rt  rt    sg    T!"^#((*AT.11&)!fD #  Kr(   c                     d| v r| d   S |S )Nrq   r'   )r-  unknowns     r)   getblocknamerC    s    V}Nr(   c                 @    d| d   d| d   da y # t        $ r Y y w xY w)NzIn: r  r  rq   r   )r    r   )r-  s    r)   setmesstextrE    s,    ,1&M5=I s    	c                 ^    i }d| v rt        | d         }d| v r|j                  | d          |S )Nparent_blockr  )get_usedictupdate)r-  usedicts     r)   rH  rH    s:    GeN34~uU|$Nr(   c           
         |i }t        |       }|s|S t        |j                               D ]  \  }}|j                         }|t        vr"t        d|d| j                  d      d       @t        |   }t        |      }|sW|rt        d|z         t        |j                               D ]2  \  }}||v r$t        dt        |      dt        |      d       |||<   4  |S )Nzget_useparameters: no module z info used by rq   r   z,get_useparameters: mapping for %s not impl.
z(get_useparameters: overriding parameter z with value from module )
rH  rp  r8  r   r   r2   r{  r  ro   r   )	r-  	param_maprJ  usenamemappingmvarsr  rx  r  s	            r)   get_useparametersrP    s     	% G 1--/-'eii/1 2g&&CwOP(DAqI~59!Wd7mM NIaL	 ) 2& r(   c                    t         s| S t        | t              r | D cg c]  }t        ||dz   |       }}|S t	        |        t        |d| d   dd       |t        |       }|Md| v rI| d   }t        |j                               D ](  }||   }d|v s|d   }d	|v s|d	   }	|	|v s!||	   |d	<   * | d
   D 
cg c]  }
t        |
|dz   |       }}
|| d
<   | S c c}w c c}
w )Nr   )tabrL  Block: rq   r   r   r,  ri  r6  r+  )r   r  rp  
postcrack2rE  r2   rP  rq  )r-  rR  rL  gretr,  r   varr6  valbnew_bodys               r)   rT  rT    s(    %1 !tyA 	 
sE&M2A6%e,	5V}diik"Aq'C$>*T>v,Ci''0~V # v(&A 1#*	B&  (E&ML/&(s   C<C"c                    t        | t              rYg }g }| D ]K  }t        |       t        ||dz         }d|v rd|d   v r|j	                  |       ;|j	                  |       M ||z   S t        |        t        | t
              sd| vrt        dt        |       z         d| v r| d   dk(  st        |d| d   d	d
       t        |       } t        |       } t        |       | d<   t        | d         | d<   d| v r
| d   r| d   }t        | ||      | d<   g }d| v r:| d   }t        |j                               D ]  }d|v s|j	                  |        ni }d}	d| v r| d   }	d| v rQ| d   rKg }
d| v r| d   }
t        j                  | d         }|	r|	dz   }nd}||v r!d}d||fz  |v r|dz   }d||fz  |v rd||fz  }dg i |	dz   d}| d   D ]  }||
v rg }d}| d   D ]l  }|dz   }|d   dk(  sd}|d   D ]1  }|dz   }d|v s|d   |k(  st        j                  |      }|d   |=  n |sO|d   s| d   |= |
|
j!                  |      =  n |d   j	                  |       ||v st#        ||         r||   |d   |<    |d   s|d   r+|
| d<   d|gi || d   d}i ||<   t$        j	                  |       |r|| d<   | S )zi
    TODO:
          function return values
          determine expression types if in argument list
    r   rR  rq   r  r-  z0postcrack: Expected block dictionary instead of r  rS  r   r   r,  sortvarsr1  r+  r  r
   r/  r0  __user__routinesunknown__user__routinesr   z%s_%ir  _user_interface)r-  r+  r,  rq   r   r  )r-  r+  r,  rq   r0  )r  rp  rE  	postcrackr%  r  r   r   r2   analyzeargsanalyzecommonanalyzevarssortvarnamesanalyzebodyrq  r  r[   
isexternalr   )r-  r1  rR  greturetrU  userisdefineduseblockrx  rq   r0  rO  mnamer  r  r  edefjrY  bbmblocks                        r)   ra  ra    s    %AN!t,A{zQvY6AA  d{eT"we';JE
# $ 	$uV}0CC3f6:E% E&E&M$U6]3E*5=V}t5E&MM~<hmmo&AQ$$Q' ' DV}ek 2
5 |,J		%-(--E-EM!AUAJ&-7E UAJ&-7uaj(E)20A)AC	{#AJvAAAz[0"#F)B !AA%|6
a'+yy}$%fIaL % #,  #$V9$)&M!$4 *:+;+;A+> ?! ' &!((.:jq&:+08If%a(- $. V	& 1",E,.9$&U;EWYF HUOv&eLr(   c                    g }g }t        | j                               D ]4  }d| |   v r| |   d   r|j                  |       $|j                  |       6 t        |      }d}|r|d   }d}|dd  D ]  }|| |   d   v sd} n |r;|dd  |gz   }|dz   }||kD  rKt	        ddj                  |      z   dz          ||z   }	 |S |j                  |       |dd  }t        |      }d}|r|S )Nro  r   r   zTsortvarnames: failed to compute dependencies because of cyclic dependencies between r  r   )rp  rq  r%  rX   ro   r   )r,  indepdepr  r   r  rY  ws           r)   re  re  X  s*   E
C$))+tAw478#4JJqMLLO	 
 	CA	A
FQRADGH%%  ab'QC-CAA1u ;))C.)+/0 1  L	 LLOab'CCAA) * Lr(   c           	         t        |       s| S g }t        | d   j                               D ]  }g }| d   |   D ]j  }t        j                  d|t        j
                        }|rg }|j                  d      rDt        |j                  d            j                  d      D cg c]  }|j                          }}t        |j                  d      j                               }|| d   v rVd| d   |   v r-| d   |   d   j                  dd	j                  |      z         nGdd	j                  |      z  g| d   |   d<   n(|rddd	j                  |      z  gi| d   |<   ni | d   |<   ||vr&|j                  |       n|}t        d
|d|d       |j                  |       m || d   |<    d| vr|| d<   | S | d   |z   | d<   | S c c}w )Nr  z2\A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\Zdimsr!  rq   r,  rh  r$  r"  z:analyzecommon: failed to extract "<name>[(<dims>)]" from "z" in common /z/.

commonvars)	hascommonrp  rq  r   r   r   r   r#  r$  r   rr   r%  r   ro   )	r-  rw  rx  comvarsr  r   rv  r  r   s	            r)   rc  rc  z  s   UJ%/&&()x#AEq"$$PA776?%3AGGFO%D%J%J5%QS%Q GGI%Q  Sqwwv4467f%!U6]1%55fa(4;;+sxx~>@ ,sxx~>8@fa(4 &CHHTN)K(L,Nfa( ,.fa(J&%%a(ijlmnpNN19 $: %h? *@ 5 (l L $L1J>lL9Ss   $Gc                    t        |        | d   j                         D ci c]  \  }}d|vsd|d   vr|| }}}g }| d   D ]  }| |d<   |d   dv rl||d   |vr|d	   }|d   |j                         v rt        j	                  |d          |d   t        v rXt
        r|d   t
        vrjt        |d
d      |d<   n|}t        |||dz         }|d   dv r|d   s|j                  d      sd|vr|d   j                  dd      dk(  rt        j	                  |       |d   dk(  r|d   t        |d   <   |j	                  |       	 |S c c}}w )Nr,  rh  r  r+  rG  r-  r  rq   r1  z
      Tas_interfacesaved_interfacer   r\  r  r  r  r   r
   pythonmoduler  )rE  r8  rq  r#   r%  r$   crack2fortrangenra  r{  r   r   r   )	r-  r1  rR  keyvaluemaybe_privater+  rY  as_s	            r)   rf  rf    s      ---//JCU"heJ6G&G 	U
/   D6]!.W:33AfIT$9iyM..00  6+yI%QvYi7#3>$6A  Ca#*-W:<<y!7!*W:c2&.8q!zX%+,V9ai(KKN; < KKs   Ec                 <   t        |        t        }i }d| v r| d   )d }t        dkD  rt        dt	        | d         z         ||fS t        | d   j                               D ]5  }| d   |   j                  d      dvr| d   |   ||<   (| d   |   d   ||<   7 ||fS )Nr   r   z6buildimplicitrules: no implicit rules for routine %s.
rq   r4   )rJ   r;  )rE  defaultimplicitrulesr   r2   r   rp  rq  r{  )r-  implicitrules	attrrulesrx  s       r)   buildimplicitrulesr    s    (MIU$ M{MPTUZ[aUbPcce )## %
+0023$Q'++J7?VV',Z'8';M!$#(#4Q#7
#CIaL	 4
 )##r(   c                 j    t        | ||      }t        |      t        t        fv r|S t	        d|z        )z2 Like `eval` but returns only integers and floats zr=%r)r  rh   r8   r:   r   )r  rU  r   r   s       r)   myevalr    s3    Q1AAw3,
Vq\
""r(   z\A\b\w+\b\Zc                    	 t        t        | i i             }d|dfS # t        $ r Y nw xY wt        j	                  |       rdd| fS t        |       }|D ]  }t        |      |kD  rt        j                  d|z   dz   |       r0t        j                  d|z   dz   t        j                        }|j	                  |       }|sn	 |j	                  |       }|r<|j                  d      d	dd
|j                  d      }|j	                  |      }|r<t        i i       }	|j	                  |       }|r<|j                  d      d	dd
|j                  d      }|j	                  |      }|r<t        |i i       |	z
  }
|j	                  |       }|r<|j                  d      d	dd
|j                  d      }|j	                  |      }|r<t        |i i       }|j	                  |       }|r<|j                  d      d	dd
|j                  d      }|j	                  |      }|r<t        |i i       }|
dz  |	z   |k(  r|
dz  |	z   |k(  r|
|	|fc S  y# t        $ r Y  yw xY w y)a  
    Obtain ``a`` and ``b`` when ``e == "a*x+b"``, where ``x`` is a symbol in
    xset.

    >>> getlincoef('2*x + 1', {'x'})
    (2, 1, 'x')
    >>> getlincoef('3*x + x*2 + 2 + 1', {'x'})
    (5, 3, 'x')
    >>> getlincoef('0', {'x'})
    (0, 0, None)
    >>> getlincoef('0*x', {'x'})
    (0, 0, 'x')
    >>> getlincoef('x*x', {'x'})
    (None, None, None)

    This can be tricked by sufficiently complex expressions

    >>> getlincoef('(x - 0.5)*(x - 1.5)*(x - 1)*x + 2*x + 3', {'x'})
    (2.0, 3.0, 'x')
    r   Nr   z\w\s*\([^)]*\b\b(?P<before>.*?)\b\b(?P<after>.*)r  r2  r3  r  g      ?g      ?)NNN)r8   r  r   getlincoef_re_1r   rX   r   r  r   r   r   )r  xsetr   len_er  r[  r   r\  eerY  r'  c2s               r)   
getlincoefr    sg   *q"b!"!Tz Q!QwFEq6E>99&*U2A6zz.25GGNJJqMZZ]*Arxx/@BBBB  2r2&ZZ]*Arxx/@BBBB  2r2&*ZZ]*C'1BDBBB  2r2&ZZ]*C'1BDBBB  BB'GaK1$S1):a7N   K P s:    	))AIAI-AIAI('I	I! I!z\b[a-z][\w$]*\bc                    | |v r||    j                  dg       }d||    v rOt        ||          sAt        j                  ||    d         D ]#  }||vs||v s|| k7  s|j	                  |       % |d d  D ]>  }|j                  |g       xs t        |||      D ]  }||vs|j	                  |        @ nt        dt        |       z         g }||| <   |S )Nro  rk  z,_get_depend_dict: no dependence info for %s
)r{  isstringword_patternr  r%  _get_depend_dictr2   r   )rq   r,  depswordswordrt  s         r)   r  r  :	  s    t|T
x,$t*Xd4j%9$,,T$Z_= u$$$,LL&	 >
 !HDXXdB' :'dD9:E>LLO:  	?4:NODJLr(   c                 d    t        | j                               }i }|D ]  }t        || |        |S r,   )rp  rq  r  )r,  ru   depend_dictr   s       r)   _calc_depend_dictr  P	  s3    EKD+. r(   c                 v   t        |       }g }t        |j                               D ]  }||   r	|j                  |       ||=  |rTt        |j	                               D ]5  \  }}|D cg c]	  }||v s| }}|s|j                  |       ||= 1|||<   7 |rT|D cg c]	  }|| v s| c}S c c}w c c}w )z
    )r  rp  rq  r%  r8  )r,  r  ru   rq   lstr   new_lsts          r)   get_sorted_namesr  X	  s     $D)KE[%%'(4 LLD! ) k//12ID#"%:#Qk)9q#G:T"%$+D! 3  #3UTddlDU33 ; 4s   +	B15B1 	B6*B6c                     | d   dv r| dd } t         j                  |       ryt        j                  |       ryd| z   dz   S )	Nr   '"r   r         zkind(r3  )r  r   real8pattern)rc   s    r)   
_kind_funcr  l	  sK    ayE"6"			F	#Vc!!r(   c                 P    d| z  }|dk  ry|dk  ry|dk  ry|dk  ry	|dd
z  k  ryy)Nr      r   i   r.  l        r  l            r        r   r'   )r   r   s     r)   _selected_int_kind_funcr  w	  sD    
aAF{G|G|G|AH}r(   c                     | dk  ry| dk  ryt        j                         j                         }|j                  d      r| dk  ryy	| dk  ry| dk  ryy	)
N   r  r  r  )aarch64arm64powerppcriscvs390xsparc!      r   r   )platformmachiner   r   )pr   radixr  s       r)   _selected_real_kind_funcr  	  sf     	1u2v &&(GYZ7 	 r6"Wr(   c           
         t        j                   |      }t        j                   |      }dt        fdt        fdt        ffD ]  \  }}||vs|||<    g }t	        |       D ]&  }d| |   v sd| |   d   v s|j                  |       ( t        j                  dt        j                        }t        j                  dt        j                        }	t        j                  dt        j                        }
|D ]  }d	| |   v r{| |   d	   }t        | |         r&|j                         }d
D ]  } |j                  | } |j                  d|      }|	j                  d|      }d}d| |   v rAd| |   d   v r7t        |      }|j                  d| |   d   d   z   d      }t        |      |k  }|ss|
j                  |      sb|j                  d      }t        |      dkD  rCdj!                  |d d       j                         j                  |d   j                         d      }t#        | |         rt%        |      }t&        j)                  |      D ]i  }t%        ||j+                         |j-                          j                         j                  dd            ||j+                         |j-                          k dj!                  |      }nt/        | |         rt1        d| d       t&        j3                  |      rd}nt4        j3                  |      rd}	 t7        |||      ||<   t=        | |         r$t?        ||   t@              rtC        ||         ||<   |j                         }||k7  s}||   ||<   tE        | |          t1        dt;        |      z          |S # t8        $ r*}|||<   t1        d|dt;        |      d       Y d }~d }~ww xY w)Nr6  selected_int_kindselected_real_kindrh  r	  z \bkind\s*\(\s*(?P<value>.*)\s*\)z-\bselected_int_kind\s*\(\s*(?P<value>.*)\s*\)z4\bselected_(int|real)_kind\s*\(\s*(?P<value>.*)\s*\)rk  ))z.false.False)z.true.Truez
kind("\1")zselected_int_kind(\1)Fri  r   r
   r   r   r  r  zAget_parameters[TODO]: implement evaluation of complex expression r   r  r  zget_parameters: got "z" on z2get_parameters:parameter %s does not have value?!
)#r  r  r  r  r  r%  r   r   r   	islogicalr   r   subrX   r   r$  r   isdoublerp  r  r  r  r   	iscomplexr2   r  r  r  r   r   r  r  r8   r  r  )r,  global_paramsr  g_paramsrq   funcparam_namesr   kind_reselected_int_kind_reselected_kind_rer  replis_replaced
orig_v_lenv_r  r   r   nls                       r)   r  r  	  s   YY}%Fyy'H
++-DE,.FGK
d x!HTN	K
 Kd#a [DGJ4G%Gq! $ jj<bddCG::8"$$@zz?G$q'>QAa!GGID
 "		4(A M1-A$(()A1EA  Ka(T!W^44!$QJ		#Q(?(G"GLA #&a&:"5K'--a0B2w{GGBsG,224<<RV\\^RP Q !W&//2A,0!'')AEEG,224<<S#F-HBqwwy) 3 GGBK47# FFGSL M
 ##A&$$Q'M Hf5q	
 Q Zq	3%?q	Nq	BQw#AYr
$q'NEaQSQ T M  Mq	c47KLLMs   N))	O2 OOc                 $    | dv ryt        | |      S )N)z(:)(*)r   r  )_eval_scalar)lengthr  s     r)   _eval_lengthr  	  s    $$''r(   z\d+_c                 X   t        |       r| j                  d      d   } 	 t        | i |      }  t        | t              rt
        nt        |       } | S # t        t        t        f$ r | cY S t        $ r7}t        d|d| dt        |j                               d       Y d }~| S d }~ww xY w)Nr   r   r  z" in evaluating z (available names: r   )_is_kind_numberr$  r  r  r   r   r  r  r  r   ro   rp  rq  )r  r  r   s      r)   r  r   
  s    uC #	5UB'8E3/S%@ L {I.  5tFKKM24 	5 	5 L	5s   /A B)*B)2,B$$B)c                 !  ABC t        |        t        |       \  }}t        j                  | d         C| d   dk(  r| d   Cvri C| d   <   d| d   v riCd= d| d   d   v r\| d   d   d   }t        C      t        d | d   D              z  D ]-  }d	D ]&  }||v st	        Cj                  |i       |      C|<   ( / g }| d
   }|D ]  }	 C|    |j                  |        t        Cj                               D ]  }||vs|j                  |        t        Ct        |             }	i }
t        j                  d      j                  }t        Cj                               D ]4  } ||      }|s||j                         |j!                          }	 |
|    6 |D 
]  }|d   t        |j                               v rt	        C|   ||d            C|<   dC|   vrdC|   v r
dC|   d   v s|r|d   j%                         }t        ||   j                               D ]N  }|dk(  r||   |   dk(  r|C|   vr||   |   C|   |<   *|dk(  s0||   |   D ]  }t	        C|   |      C|<    P n%|| d
   v rt'        dt)        |      d| d   d       dC|   v r7dC|   d   v r-C|   d   d   }	 t+        t-        |i |	            }|C|   d   d<   dC|   v r7dC|   d   v r-C|   d   d   }	 t+        t-        |i |	            }|C|   d   d<   i }dC|   v r C|   d   }|j1                          g C|   d<   d\  }}}}}|D ]m  }|d d dk(  r|dd  j3                         dd }n|d d dk(  r|dd  j3                         dd }no|d d dk(  r|dd  j3                         dd }nP|d d  d!k(  r|d d  j3                         dd }n1|d d" d#k(  r|d"d  j3                         dd }nt	        C|   |      C|<   |rdC|   vrg C|   d<   t5        |      j7                  d$      D cg c]  }|j3                          c}D ]6  }|j9                  d%d      }|C|   d   vs C|   d   j                  |       8 d }|rN|j9                  d&d'      }|j9                  d(d)      }d#C|   vr
|gC|   d#<   nC|   d#   j                  |       d }|wdC|   vrg C|   d<   t;        t5        |      j7                  d$      D cg c]  }|j3                          c}      D ]$  }|C|   d   vsC|   d   j                  |       & d }| d!C|   vrg C|   d!<   t5        |      j7                  d$      D cg c]  }|j3                          c}D ]$  }|C|   d!   vsC|   d!   j                  |       & d }p |rdC|   vrzg C|   d<   t;        t5        |      j7                  d$      D cg c]  }|j3                          c}      D ]/  }|d*k(  rd*nd+}||	v rt+        |	|         }|	D ]  }t        j                  d,|z   d-z   t        j"                        }|j                  |      }|sA|j=                  d.      t+        |	|         z   |j=                  d/      z   }|j                  |      }|rF ||k(  r|g}nt5        |d*      j7                  d0      }t?        |      d1k(  r	d+|v rd+g}d+}t?        |      dk(  r|d   |k7  rd2|d   g}t?        |      d1k(  rtA        tB        jD                  jF                  |      \  }} | |z
  dz   }!|!jI                  tB        jJ                  jL                  3      }i }"| d   D ]  }tC        jN                  |      }#|!jQ                  |#      s*	 |!jS                  |#      \  }}$||$fd4}%t        |jU                               }&|&jW                  |$jU                                t        Cfd5|&D              }(|%t        |(      f|"|<    |"||<   C|   d   j                  |       2 d!C|   vr\d
| v rW|| d
   v rOC|   j                  dg       })g }* t[        t\        t^        t`              C|         }+tc        C|         rnte        C|   d         D ]X  \  },}|j                  |      AAni|+rfAjg                         D ]R  \  }\  }-}.ABfd6Bt               }/ B||/       ||)v sd7C|   v sdC|   v r6|-||/vr|d8}0 |-tC        jN                  d9| d:|, d;            }1|1jI                  tB        jJ                  jL                  3      }1|1C|   d7<   |g|.z   C|   d<   d!C|   vrpd9| d:|, d<| gC|   d!<   n]d=}0dC|   vrg C|   d<   d>C|   d   vrC|   d   j                  d>       |)j                  |       |*j                  d9| d:|, d<|        C|   j                  dg       }2d?|2v sd@|2v s|2j                  |0rd@nd?       |2sK|2C|   d<   U AAjg                         D ]  \  }\  }-}.C|   j                  dg       }(C|   j                  dg       D ]V  }3|3ji                  d      sdjk                  |3j7                               }3|(jm                  |3dAd j7                  dB             X |(rt        t        |(            C|   d<   ||(vs|)j                  |        [ nsto        C|         redC|   v r^d+C|   d   v r!tq        C|   d   d+   |	      }4|4C|   d   d+<   n3dC|   d   v r)tq        C|   d   d   |	      }4C|   d   d= |4C|   d   d+<   |*r|*C|   d!<   |)rt        t        |)            C|   d<   d7C|   v s
dC|   vrg C|   d<   d?C|   d   vr!d@C|   d   vrC|   d   j                  d?       dC|   vr]g C|   d<   t        |
jg                               D ]+  \  }} |C|   d7         sC|   d   j                  |       - C|   d   sC|   d= ts        C|         s
tu        C|   d7   |	      C|   d7<   
 t        Cj                               D ]r  }|| d   k(  sd#C|   v rC|   d#   | d#<   | d   dk(  s(dC| v r| dC   Cv rtw        C|   C| dC            C|<   dD| v sP| dD   }5|5j9                  dEd      }6|5|6k(   }7|6j9                  dFd      }5|5|6k(   }8tx        d   j                  |5      }|rt{        |j=                  dG      |j=                  d/            \  }9}:}};t}        |9|:      \  }<}=}>|9C|   d<   	 | dC   r|9C| dC      d<   |<r d|<v r	 t-        |<d   i |	      |<d<   |<C|   d<   |=r|=C|   d<   |>r|>C|   dH<   |7rt	        C|   dE      C|<   |8sEt	        C|   dF      C|<   Yt'        dIt)        | dD         z         u | d   dJvrdK| v rt        j                  | d
   | dK   z         }?nt        j                  | d
         }?t        Cj                               D ]1  } t[        t~        t              C|         s!|?j                  |       3 dL| v ro|?jm                  t        | dL   j                                      t        | dL   j                               D ]%  }| dL   |   D ]  }||?vs|?j                  |        ' | d   dk(  r-dC| v r|?j                  | dC          n|?j                  | d          | d   dMv r| d   }@|@Cv rdC@   v rC@   d   | d<   | d   dNk(  r(|?jm                  t        Cj                                      t        Cj                               D ]
  }||?vsC|=  CS # t        $ r Y w xY w# t        $ r8 t        j                  d|z  t        j"                        j                  |
|<   Y w xY w# t.        $ r Y Jw xY w# t.        $ r Y w xY wc c}w c c}w c c}w c c}w # tX        $ r&}'d }%t        |!jU                               }&Y d }'~'nd }'~'ww xY w# t.        $ r Y w xY w# t.        $ r Y w xY w)ONr,  r-  r   rq   r
   rh  c              3   &   K   | ]	  }|d      yw)rq   Nr'   ).0rY  s     r)   	<genexpr>zanalyzevars.<locals>.<genexpr>
  s     $F1QvYs   r+  r  r1  z[A-Za-z][\w$]*z.*\b%s\br   r4   r  	undefinedz"analyzevars: typespec of variable z is not defined in routine z.
rj  rX   ri  r6  )NNNNNr%  r   r   r   r   r  ro  r   rn  r  rm  r!  r   z\n\nz

z\n r   r  r   r  r  r  r  z@:@r.  1)languagec                     | |z
  |z  S r,   r'   )r(  r'  rY  s      r)   solve_vzanalyzevars.<locals>.solve_v
  s    01A{(:r(   c              3   R   K   | ]  }|j                   v r|j                      y wr,   )r
  )r  r(  r,  s     r)   r  zanalyzevars.<locals>.<genexpr>
  s'      -74?q'(vv~ %&FFKs   $'c                 |    j                  | d g g      d   D ]!  }||vs|j                  |        ||       # y )Nr   )r{  add)r  r  v1coeffs_and_depscompute_depss      r)   r  z!analyzevars.<locals>.compute_deps
  s@    *9*=*=a$*LQ*OB')~(,(4R(> +Pr(   rk  Fzshape(r  r3  z) == Tinr  r  r  r"  r   r  pure	recursiver4  rl  z'analyzevars: prefix (%s) were not used
)r  r~  r  r  rw  r  )r   r   rh   )ArE  r  r  r  rr  r{  r%  KeyErrorrp  rq  r  rP  r   r   r   r  r   r   r   r2   r   r   r  r   reverser   r#  r$  r   rw   r   rX   r  r   ExprparsetostringLanguager   	as_symbolr  linear_solvesymbolsrI  RuntimeErrorl_orisintent_inisintent_inoutisintent_inplaceisarrayr  r8  r   r   extendr  r  isscalarr  ry  rJ  r  r  isintent_callbackisintent_aux)Dr-  r  r  genr   rx  svarsr1  r'  r  dep_matches
name_matchr  r   ln0r   dimension_exprsr  dimr  ro  rn  rm  r  r   tmpr  starr  r[  r  r.  d2dsizesolver_and_depsr(  rY  r  all_symbolsr   v_depsn_depsn_checks
n_is_inputr  solverr  all_depsis_requiredr!  v_attraar  prpr1ispureisrecr4   r  r  r  r  rl  
neededvarsrq   r  r  r,  sD                                                                    @@@r)   rd  rd  
  s    1%8M999U6]#DW~#fT(A U6]	U6]Hvr**-#J/CY$Ff$F!FF.ACx"-dhhq"oq"AQ / G E=D	GLLO  $))+D=LLO  D"3E":;FK-.44J$))+qM!'')AEEG$AKA  Q44	())!$q'9QqT?;DGT!W$a(Z47:;N-N A$**,C!-"4"9"9";<
?}S/A!/D/S$DG+)6s);A)>DGAJ*_%23%7%:*5d1gq*AQ &; = %-'Qv0 1T!W$Q//GN+E2DB/0A 23Q'.T!W$a00GN+F3DB/0A 34Q'/a 7:&DLLN"$DGJ/K,CRa5K'QR5;;=!B/CrUh&ekkmQr2FrUh&ekkmQr2FrUg%qrU[[]Ab1ErUf_abEKKM1R0D)$q'15DGtAw.,.Q)1?1G1M1Me1TU1TAaggi1TUiiR0d1gh&77 GH-44S9	 V
 "F<<&9D<<5DT!W,+/&QQ..t4D%tAw.,.Q)&>&;Q;W;WX];^'_;^a	;^'_`DGH$55 GH-44Q7 a "F$d1g-+-Q(1?1F1L1LU1ST1SAaggi1STDGG$44 GG,33A6 U !EW X {$q'1')Q$"~c7J7P7PQV7W#X7W!AGGI7W#XYA"#s(3DF{q	N#!zz*>*BEW*WY[Y]Y]^ JJqM ! 1 #F1I!/121A!BA $

1A   $ Dy"V+As399%@2w!|r	!U2w!|1!2a5\2w!|!$X]]%8%8"!=B "R!!NNH4E4E4G4GNH +-!&vA ( 2 21 5A$~~a0!G+0+=+=a+@DAq56! %; 36aiik2BK$/$6$6qyy{$C *- -74?-7 *7 6=d6l5J 2- "/: .=*GK(//2y Z| $q'!fo!uV}:L
 !W[[2.FH0k>.004Q9JtAw%d1gk&:;DAq&5&9&9!&<O&.# 2A1F1F1H-A~?
 (+uH(H5!"f$'47N$,Q$7
 !)%1ax6G /4'-h.@.@&,QCr!A$6/8 (9'+}}-5->->-@-@ (5 (B/3Q 67C$JQ 1#*$q'#9 +12aSaS(A8CDGG$4 /3#+47#:8:DGH$5#'tAwx/@#@$(GH$5$<$<T$B &a 0 (&,QCr!E!$=!?%)!W[[R%@F$.&$8'1V'; &2=J:!O%6<Q
 3m 2In '21@1F1F1H-A~%)!W[[2%>F&*1gkk*b&A#%==#:)+)<B$*MM"Qr(..2E$F 'B  &48V4EQ 1  &a 0 2IE <X $q'"!T!W,d1gn55!-d1gn.Ec.J.4"67=Q/4$q'."99!-d1gn.Ee.L.4"6 GN3E:7=Q/4#+Q $(V$5Q!$q'>a(&(Q
#$q'*"55$q'*"55Q
#**:6tAw&$&Q! !2!2!45DAqaQ)003 6 Awx(Q)Q +DGCL&AQU X $))+fa  $QfW~+u$xD)@(a$uX2GHDGu$xB**VR0C"$)mF["5B!#s]E$Q--b1A:HGGFOQWWW-=;?7(D%;H$h<08
J.6Q
+!$XDLU8_ 5j A &%3!)9=(26(:B:HJv$6 7ADGN3%6@DGN3#2:DGJ/!&1$q'6&BDG &1$q';&GDGFeT\oI^^`U X >VV5 5=53F#FGJ5=1Jdiik"A4t%|4T!W=!!!$ # ed5>#6#6#89:%.--/0w*A
*"))!, + 1 >Z'5 !!%/2!!%-0>77=Dt|DJ 6"&t*X"6h>V#d499;/0diik"A
"G # KM  		   K!#K1,=rtt!D!J!JAK2 !  ! 4 V" (` U $YR (4 !G /3G25emmo2FK!GD  ) ! ! (1 !)$(!)s   	~44A@2A@%A@(<A@-2A@2,A@7
&AA@<3AA.
AA>4	 =A@@A@@	A@@A@@	A@%@$A@%@<	AA+	AAA&	A&AA+	A.	AA;A:AA;A>	ABB
ABz\A[a-z]+[\w$]*\Zc                    | }t         j                  |        }|rt        |      \  }}t        | |d   |      }d}| D ]<  }	|	j	                         }	|	t
        j                  t
        j                  z   vrd}	||	z   }> |d   dk(  r|dz   }n|dz   }|} | |d   v s| |d   v r| dz   } | |d   v r| |d   v r| |v r6d	}
| t        |
      z   |v r|
d	z   }
| t        |
      z   |v r| t        |
      z   } |r
|d   | <   | S | |d   vr||d   v r|d   |   |d   | <   ni |d   | <   d
|v r%||d
   |d   z   v rt        |d   |    d      |d   | <   | S )Nr,  e_r   r   r  _er1  r   r   r/  r0  r  )
analyzeargs_re_1r   r  r  r   rc   ascii_lowercasedigitsr   rr  )r'  r-  r1  orig_a	a_is_exprr  r  atnar   rx  s              r)   	expr2namer$    s   F$**1--I#5e#< yq%-?A	A..>>aB	 
 b6S=cBdB5= Av$6CA 5= Av$6Dy#a&jD AA #a&jD AJfa H E&M!v&#(=#8fa #%fa %FeK.@5CV.V$V*5=+;ZHE&M!Hr(   c                    t        |        t        |       \  }}d| vrg | d<   g }| d   D ]   }t        || |      }|j                  |       " || d<   d| v r;t	        | d   j                               D ]  \  }}|D ]  }|| d   vsi | d   |<     | d   D ]5  }|d   |v sd| vrg | d<   |d   | d   vs| d   j                  |d          7 d| v r| d   | d   vri | d   | d   <   | S )Nr1  r  r,  r+  rq   r/  r   )rE  r  r$  r%  rp  r8  )r-  r  r   r1  r'  rx  args1rY  s           r)   rb  rb    s3   )%0M1UfD6]a%A  E&M%U7^1134HAuE&M)')E&M!$  5
 6]V9%'%'k"yk 22k"))!F)4  5U8_E&MA)+feHo&Lr(   z\A\(.+?,.+?\)\Zz\A[+-]?\d+(_(?P<name>\w+)|)\Zz*\A[+-]?[\d.]+[-\d+de.]*(_(?P<name>\w+)|)\Zz
\A\(.*\)\Zz\A(?P<name>\w+)\s*\(.*?\)\s*\Zc                     t        | t              rddiS t        | t              rddiS t        | t              rddiS t        | t              r| S t        t        |             )Nr4   r7   r5   r  )r  r8   r:   r  r  AssertionErrorr   )r   s    r)   _ensure_exprdictr)    s_    !SI&&!UF##!WI&&!T
a
!!r(   c                    | |v rt        ||          S | j                         } t        j                  |       rddiS t        j                  |       }|r>d|j                         v r(|j                  d      rt        dt        |       z         ddiS t        j                  |       }|r>d|j                         v r(|j                  d      rt        dt        |       z         ddiS dD ][  }t        | |      j                  d	|z   d	z         D cg c]  }|j                          c}D ]  }||v st        ||         c c S  ] i }t        j                  |       rt        | d
d ||      }ngt        j                  |       }|rP|j                  d      }t        |j                  d      ||      }|rd|v r|d= |s|d   |v rt        ||d            S | d   dv rdddidS |st        dt        |       z         |S c c}w )Nr4   r  rq   z:determineexprtype: selected kind types not supported (%s)
r7   r5   )+r  r   r  r  rc  r   r   rh  r   r  r  r   )r4   rj  z>determineexprtype: could not determine expressions (%s) type.
)r)  r   determineexprtype_re_1r   determineexprtype_re_2r  r   r2   r   determineexprtype_re_3r#  r$  determineexprtype_re_4r  determineexprtype_re_5)	r  r,  rulesr   opr  r  r  rns	            r)   r  r    s   t|T
++::<D##D)I&&$$T*AQ[[]"qwwvMPTUYPZZ\I&&$$T*AQ[[]"qwwvMPTUYPZZ\F##"%3D%C%I%I#PR(UX.%YZ%Y!'')%YZADy'Q00 [ # 	A##D)d1Rj$6"((.B!!''&/4?AZ1_jMa5E>+E"Q%L99Aw%'#sDDMQUVZQ[\	^H+ [s   G>r   c                 2   t        |        d}t        | t              rA| D ]:  }|r%|d   dv r|d   t        v rt        r|d   t        vr*|t        |||      z   }< |S d}d}d}| d   }|dk(  ryg }	d| v r| d   }d| v rZ| d   }
| d   D ]/  }t        || |	      }t        |
|         r|	j                  |       1 | d   d	k(  s|	rd
dj                  |	      z  }d}d| v r9t        | d   j                               D ]  }||t        z   |d| d   |   } | j                  dg       d d  }|d	k(  rd|v r|j                  d       |r"||t        z   ddj                  |      d|}d}d| v rt        | d   |t        z         }d}d| v rt        | d   |t        z         }|dk(  rd}d}d| v r#d| d   z  }| d   |	vr|	j                  | d          t        | d   |t        z   |      }t!        | | d   |	|t        z   |      }
d}d| v r
|sd| d   z  }d| v rNd}t        | d   j#                               D ](  \  }}||t        z   d|ddj                  |      d}* ||z   }|dk(  r|dk(  rd}|||d|||d||||
|||d |d|}|S )!Nr
   r-  r  rq   r{  r  r1  r,  r   z(%s)r"  r  r   r  callbackintent(z) r  r  r  r   z result (%s)r+  r  z! in %sr  zentry r2  r3  r  r  zend )rE  r  rp  r#   r$   r  r$  r  r%  r   rq  r   r{  r  use2fortrancommon2fortranvars2fortranr8  )r-  rR  r|  rV  rU  r  rq   r1  	blocktypeargslr,  r'  r  rx  
intent_lstr  r  r   r+  messentry_stmtsr  s                         r)   r  r    s$    
C%AQwZ#==V9	)6)!;(ClKKC  
FDDgIIEV}V}vA!UE*A$T!W-Q  >Z'5CHHUO+DU"e./4467A #-E:L4Ma4P R 8 8R(+JJ:#;*%,cGmHHZ0$8 C~%,g6F5hw?""F5%/1?%'LLx)E&M3=|TDuV}eS7]ODD|5=(%w--/0DAq(#-CHHQKIK 1 k!L T^%;VYdFD:JCQUW]_cehjsuy{CJr(   c           
          d}t        | j                               D ]A  }|dk(  r||ddj                  | |         }$||d|ddj                  | |         }C |S )Nr
   r  zcommon r"  zcommon /z/ )rp  rq  r   )r  rR  rV  rx  s       r)   r8  r8  \  s^    
C&++- =%(#sxxq	/BCC*-sAsxxq	7JKC	 !
 Jr(   c                    d}t        | j                               D ]  }||d|d}| |   i k(  r|r|d   dk(  r|d d }%d| |   v r| |   d   rd|z  }d| |   v r]| |   d   rUd}t        | |   d   j                               D ]1  }|| |   d   |   k(  r|||}d}|||d	| |   d   |   }d}3 |s|d   dk(  s|d d } |S )
Nr
   zuse r"  r   r  z%s only:r  r   z=>r=  )r  rR  rV  r   r   rx  s         r)   r7  r7  f  s   
C#((*"C+q6R<s2w#~#2hSVAv$CCF?s1ve}A#a&-,,./Aua((&)1a0CA*-q!SVE]15EFCA 0 3r7c>cr(C% & Jr(   c                     | d   }g }|D ]-  }	 t               d|z     } ||       s|j                  |       / |S # t        $ r Y =w xY w)Nr  zisintent_%s)globalsr%  r  )rW  r  rV  r  ra  s        r)   true_intent_listrC  ~  s`    
h-C
C	#	-&01A v

6"  J  		s   <	AAc           	         t        |        d}g }|D ]  }|| d   v s|j                  |        d| v r3| d   D ]+  }||v r||vs|j                  |       t        d|z         - d| v r|j                  | d          |s4t	        |j                               D ]  }||vs|j                  |        |D ]-  }d||   v r7||   d   D ],  }||v sd||   v s|||   d   v st        d|d|d	       . d
| v rn|| d
   v rgt        ||         r	||d|}||d|}t        ||         r	||d|}||v rd||   vrd}	| d   D ]  }
||
d   k(  s|
d   dk(  sd}	 n |	r||vrt        |       t        d|z         || d   k(  r| d   dk7  s| j                  d      rd||   vr>d||   v rd||   d   v r||v r	||d|}t        ||          t        d|z         9||   d   }|dk(  rd||   v r|d||   d   d}i }d||   v r	||   d   }nd||   v r||   d   }d |v r|d    d!v r|d"|d    d}n>|d |d    }n3d#|v r |d$|d#   }d%|v r|d&|d%   d}nd'|z  }nd%|v r|d(|d%   d}d)}d||   v rN||   d   D cg c]  }|d*vr|
 }}|rd+|v rd,|v r|j                  d,       |r|d-d.j                  |      }d.}d/||   v r!||d0d.j                  ||   d/         d}d.}d1||   v r+t        ||         }|r||d2d.j                  |      d}d.}d3||   v r!||d4d.j                  ||   d3         d}d.}d||   v r!||d5d.j                  ||   d         d}d.}d6||   v rF||   d6   }||   d   d7v r)	 t        |      }d|j                  d.|j                   d}|d8|d6|}n|d8|}|||}0 |S c c}w # t"        $ r Y /w xY w)9z&
    TODO:
    public sub
    ...
    r
   r,  rw  z7vars2fortran: Confused?!: "%s" is not defined in vars.
r  ro  z;vars2fortran: Warning: cross-dependence between variables "z" and "r  r/  zintent(callback) z	external z	optional r4   r   r+  rq   r-  r   r   z/vars2fortran: No definition for argument "%s".
r   rh  r  z-vars2fortran: No typespec for argument "%s".
rh   rl  r2  r3  ri  rj  r   )r   r  z*(rX   z(len=r6  z,kind=z%s)z(kind=r   )r  z
intent(in)zintent(out)r  r"  r   z
dimension(r  r6  rn  zcheck(zdepend(rk  )r  r  z :: )rE  r%  ro   r  rp  rq  r  
isoptionalshowr2   r{  r  r   rC  r  r5   imagr   )r-  r,  r1  rR  r|  rV  noutr'  r  r   rY  vardefr  r   r   r  r  r  s                     r)   r9  r9    s    
CDfKKN  u|$ADyD=KKNNQRRT % UE*%&diik"A}A # tAw!WX&9T!W!4d1gh>O9Oghjkln ' %A{);$; a)36Q?'*C3C$q'"+.Q7DyZtAw6D6]&	>ajJ&>D # D=JFJKfW~+uyy/B
 T!W$T!W$tAwz7J)J9/2C;CaMDqHIa$V
d1g 5!'a)<=FT!W$Aw~.HtAw&Aw~.H(?}
*&,hsm<$*HSM: (.@X%.4hv6FGF"f-F8#*0(62BCa #Awz2 .2!, 2D . 4$9N M*%+SXXd^<$q'!388DGK$89;FAtAw"47+C-3QFAd1g(.388DGG<L3MNFAtAw388DGH$568FA$q'>QAAwz"&CCQA%&VVQVV4A '-a3F#)1-FsF+O P JQ.D ! s   O*#(O//	O;:O;c                 4   t        dd       t        | t               t        dd       g at	        t
        d         }t        dd       t        D ](  }t        d|j                   dd       t        ||      }* t        dd       t        |      }t        |z   S )NzReading fortran codes...
r   zPost-processing...
z"Applying post-processing hooks...
z  r   zPost-processing (stage 2)...
)
r2   r   r7  r   ra  r   post_processing_hooks__name__traverserT  )filespostlisthooks      r)   crackfortranrQ    s     (!,E9%"A&K1&H115%"T]]O2&*Hd+ & ,a0(#H!!r(   c                 D    t        |       dz   }d}dt        z  }||z   |z   S )Nr   zE!    -*- f90 -*-
! Note: the context of this file is case sensitive.
z
! This file was auto-generated with f2py (version:%s).
! See:
! https://web.archive.org/web/20140822061353/http://cens.ioc.ee/projects/f2py2e
)r  f2py_version)r-  pyfheaderfooters       r)   crack2fortranrW  (  s<     5
!D
(CF 	F
 C<&  r(   c                 x    t        | t              xr) t        |       dk(  xr t        | d   t        t        f      S )Nr.  r   )r  tuplerX   r8   r   )objs    r)   _is_visit_pairr[  7  s8    sE" /CA/3q6C:.0r(   c                    t        |       r1| d   dk(  r| S  || ||g|i |}|t        |      sJ |S | }| \  }} nd| f}d}t        | t              rFg }t        |       D ]5  \  }	}
t	        |	|
f|g|||gz   |d|\  }}|%|j                  |       7 nYt        | t              rGt               }| j                         D ])  \  }}
t	        ||
f|g|||gz   |d|\  }}|%|||<   + n| }||S ||fS )a  Traverse f2py data structure with the following visit function:

    def visit(item, parents, result, *args, **kwargs):
        """

        parents is a list of key-"f2py data structure" pairs from which
        items are taken from.

        result is a f2py data structure that is filled with the
        return value of the visit function.

        item is 2-tuple (index, value) if parents[-1][1] is a list
        item is 2-tuple (key, value) if parents[-1][1] is a dict

        The return value of visit must be None, or of the same kind as
        item, that is, if parents[-1] is a list, the return value must
        be 2-tuple (new_index, new_value), or if parents[-1] is a
        dict, the return value must be 2-tuple (new_key, new_value).

        If new_index or new_value is None, the return value of visit
        is ignored, that is, it will not be added to the result.

        If the return value is None, the content of obj will be
        traversed, otherwise not.
        """
    r   rG  N)parentsr   )r[  r  rp  r  rM  r%  r  r8  )rZ  visitr]  r   r1  kwargs
new_resultparent
result_keyr[   r  	new_indexnew_itemr  new_key	new_values                   r)   rM  rM  =  ss   8 cq6^#J3A$A&A
!!*---
C
#t
%cNLE5"*E5>5 #K;?#K3:fX3E28#KCI#KIx $!!(+ + 
C	V
))+JC!)3, "J:>"J29VH2D17"JBH"JGY "&/
7# & 
z!!r(   c                    |d   \  }}| \  }}d }	|dv r|d   d   dk(  sJ |d   d   }
n|dk(  r|d	   d   dk(  sJ |d	   d   }
nd
}
d
}|
0|}|
j                         D ]  \  }}t        |      s |	||      } nV|dk(  rQ|d	   d   d   }
|}|
j                         D ]1  \  }}t        |      st        j                  d|z   dz   d|z   |      }3 |"||k7  rt	        d| d| d| d| d	d       ||fS y
)a  Previously, Fortran character was incorrectly treated as
    character*1. This hook fixes the usage of the corresponding
    variables in `check`, `dimension`, `=`, and `callstatement`
    expressions.

    The usage of `char*` in `callprotoargument` expression can be left
    unchanged because C `character` is C typedef of `char`, although,
    new implementations should use `character*` in the corresponding
    expressions.

    See https://github.com/numpy/numpy/pull/19388 for more information.

    r   c                 z    t        j                  d| z   dz   | |      }t        j                  d| z   dz   | |      }|S )Nz[*]\s*\br  z\b\s*[\[]\s*0\s*[\]])r   r  )varnamer  s     r)   	fix_usagez8character_backward_compatibility_hook.<locals>.fix_usage  sB    {W,u4guEuw)@@'r(   )r   rn  r   r,  r   rk  r   Ncallstatementz
(?<![&])\br  r   zcharacter_bc_hook[r  z]: replaced `z` -> `z`
)r8  ischaracterr   r  r2   )itemr]  r   r1  r_  
parent_keyparent_valuer  r  rj  	vars_dictrf  ri  vds                 r)   %character_backward_compatibility_hookrs    sj     'r{JJC ++r{1~'''BKN		r{1~'''BKN		I	$??,KGR2%gy9	 - 
	BKN6*		$??,KGR2 FF!G+e3S7]IO		 - 
 (AcU ;""'yk>?@BY r(   __main__r  z-quietz-verboser.  z-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form.
z-skipemptyendsz--ignore-containsz-f77z-f90r   z-hz-showz-mr  zUnknown option %s
z	OSError: a    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).
z Writing fortran code to file %s
rt  )r   )r   )r"  )rB  r,   )r
   N)Nr
   )r
   )NN)r   r   )r   F)r
   F)__doc__r-   rc   r   r   r   r  r  r   pathlibr   r   ImportErrorr
   r   auxfuncsr   versionrS  r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r    r   r9  r   r   r8  r%   r   r$   r&   r   r#   r"   r   r*   r2   	_MAXCACHEr  r   rn   rz   r   rr   rw   r{   r}   r   r   r  r   r   r   r   r   r   r   r   r   rF  r   beforethisafterfortrantypesrJ  r  rG  rH  groupbegins77r   groupbegins90r   	groupendsrE  endifsrD  moduleproceduresrP  rI  r:  r;  r=  r>  rA  rB  rC  r<  r?  r@  rL  rO  rS  rK  rM  rN  rF  Sr5  r6  r   r(  rQ  crackline_bind_1r  r7  rR  r#  rf  ry  r  r  r  r  r  r  r  r|  r~  r  r  r  rT  r  r  r  ri  rj  r9  r&  r  r  r  r  rr  rs  rt  rC  rE  rH  rP  rT  ra  re  rc  rf  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rd  r  r$  rb  r,  r-  r.  r/  r0  r)  r  r  r8  r7  rC  r9  rK  rQ  rW  r[  rM  rs  r%  rL  rN  funcsra  f2f3showblocklistargvr   ro   r   r   r   OSErrordetailrO  rT  r/   r'   r(   r)   <module>r     s  KX    	 	     
  "" 		


  
2			 	#L  	!A)62 
"	A)95 

A e)HQKKE	
,1 

3RTT:AA"**12448??"**12448??"**12448>> : 8 3>4 '+! bDJ Drzzr<t<<bddDEKL"

?44lEb6bdh6j $jkmkokoq  "**_ 0? ?@BFGNOBJJ 24  457TT;<CD  (r=->>FGNOGH r=->>FGNO7	RZZr9i66>?DE

 rzzy&&$77?@GH ) #r+-=tDDbddL  "**88"$$@AKL2::o 18 89;?@KL "**88"$$@AKL"**88"$$@AKL"**88"$$@AKL

44bdd<=EF66>?HI2::::BDDBCNO 

? .Q QRTRVRVXYab2::@@"$$HITU bjj00"$$89?@bjj00"$$89?@rzz22BDD:;BC66>?HI

44bdd<=EFRZZ..67<=
"**66>?IJ

44bdd<=EF %"**_ 8M &M OQ  OS  OS  VX  VZ  VZ  OZ[ ]oo 2::9244ABMN ( A244H2::A244H RZZ kmomqmqr \%~$&
> 

KRTTS%&(dd, "** r  tv  tx  txy"***+-441 !bjj@"$$H 

;=rzzHJ $$A244H    ~DB(4 bjjErttLrzzI244Qrzz9244A235449 "** G  IK  IM  IMN"J^B8,x6<@]@D(V*Z$&# "**^RTT2EP rzz,bdd3,4(" & (* [|(
 "**W%++ || 2::12448    "J4 $$6= #$DbddK #12449 #M2448 #$ErttL 	" )+ (ZHV0BP  ""!0 "$D ?"D9 x   B C zEE	A	
B	
BMXXab\7qTS[A(]EG*_GE&[VXY[M"N""M%%N&[I"N&[I#NM$YB'\M$YBqTS[)DG34BKBM2QQ LLOc d }  	 E"H3d;6GGKH%+s#qGGCL $X Q Ki  tj  2)F:R0112" $#s5   k )k k5kkk2k--k25k>