
    G/Ph7B                    X   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n# e$ r dZY nw xY wddlmZ ddlT 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j<        dej=                  j>        Z? ej<        dej=                  j>        Z@ ej<        dej=                  j>        ZA ej<        dej=                  jB        ZCg dZDg dZEd  ZFd! ZGeHdfd"ZId#ZJd$ZK ej<        eJd
eKeKd%fz  ej=                  d&fZL ej<        eJd
eKd'z   eKd'z   d%fz  ej=                  ZM ej<        eJd(z  ej=                  d)fZN ej<        eJd*z  ej=                  d)fZOd+ZP ej<        eJd
ePePd%fz  ej=                  d)fZQePd,z   d-z   ZR ej<        eJd
eReRd%fz  ej=                  d)fZSd.ZT ej<        eJd
eTeTd%fz  ej=                  d/fZUd0ZV ej<        eJd1eVeVd%fz  ej=                  d2fZWd3ZX ej<        eJd
eXeXd%fz  ej=                  d4fZY ej<        eJd5z  ej=                  d6fZZ ej<        eJd7z  ej=                  d8fZ[ ej<        eJd9z  ej=                  d:fZ\ ej<        eJd;z  ej=                  d<fZ] ej<        eJd=z  ej=                  d>fZ^ ej<        eJd?z  ej=                  d@fZ_ ej<        eJdAz  ej=                  dBfZ` ej<        eJdCz  ej=                  dDfZa ej<        eJdEz  ej=                  dFfZb ej<        eJdGz  ej=                  dHfZc ej<        eJdIz  ej=                  dJfZd ej<        eJdKz  ej=                  dLfZe ej<        eJdMz  ej=                  dNfZf ej<        eJdOz  ej=                  dPfZg ej<        eJdQz  ej=                  dRfZh ej<        eJdSz  ej=                  dTfZi ej<        eJdUz  ej=                  dVfZj ej<        eJdWz  ej=                  dXfZk ej<        eJdYz  ej=        ejl        z            dZfZm ej<        d[ejl                  d\fZnd] Zod^ Zp ej<        d_ej=                  Zq ej<        d`ej=                  Zr ej<        daej=                  ZsddbZtdc ZuddeZvdf ZwddgZx ej<        dhej=                  Zy ej<        diej=                  Zz ej<        djej=                  Z{ ej<        dkej=                  Z| ej<        dlej=                  Z} ej<        dm          Z~ ej<        dn          Z ej<        doej=                  Zdp Zdq Zdr Zds Zdt Zdu Zdv Z ej<        dwej=                  Z ej<        dxej=                  Z ej<        dyej=                  Z ej<        dzej=                  Z ej<        d{ej=                  Zd| Zd} Zd~ Zd ZddZddZddZddZd Zd ZddZddZddZd Zd ZddZd ZddZ ej<        dej=                  Zd Z ej<        dej=                  Zd Zd Zd Zd Zd ZddZi fdZd Z ej<        d          jB        Zd Zd Z ej<        dej=                  ZddZd Zg fdZd Z ej<        dej=                  Z ej<        dej=                  Z ej<        dej=                  Z ej<        dej=                  Z ej<        dej=                  Zd Zi fdZddZddZddZd ZddZg ad Zd Zd Zg dfdZd ZÐt|                              eæ           edk    rg Zg ZdZdZdZdZej        dd         D ]1Zed
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Medk    rdaVedk    rda_edk    rdadajedk    rdadadawedk    rdZɌedk    rdZˌedk    rdZʌed         dk    r ed eeͦ          z             erdZeaerdZeaerV	  eeͦ                                           eƠ                    eͦ           # e$ rZ edeӛd           Y dZ[ӐdZ[ww xY weǠ                    eͦ           3t&          st2          rt4          s e1dd            eeƦ          Zt0          rf e1d et0                    z  d            eeԦ          Z et0          dɦ          5 ZeȠ                    eզ           ddd           n# 1 swxY w Y   er eHeԦ           dS dS dS )a  
crackfortran --- read fortran (77,90) code and extract declaration information.

Copyright 1999 -- 2011 Pearu Peterson all rights reserved.
Copyright 2011 -- present NumPy Developers.
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.


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                  |    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d S )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     W/var/www/html/test/jupyter/venv/lib/python3.11/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d S t          sG|r$t          j                            t
                     t          j                            |            d S d S N)r   r   sysstdoutwriter    )lineflags     r)   outmessr2      s^        	/J-...
 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                 t    | t           v r.t          d| dt           |          d           t           |          S | S )Nzrmbadname1: Replacing "" with "".
)badnameserrmessnames    r)   
rmbadname1rr     sF    xx~~~' 	( 	( 	(~Kr(   c                     d | D             S )Nc                 ,    g | ]}t          |          S r'   )rr   .0_ms     r)   
<listcomp>zrmbadname.<locals>.<listcomp>  s    +++rJrNN+++r(   r'   namess    r)   	rmbadnamer{     s    ++U++++r(   c                 t    | t           v r.t          d| dt           |          d           t           |          S | S )Nzundo_rmbadname1: Replacing "rl   rm   )invbadnamesro   rp   s    r)   undo_rmbadname1r~     sJ    {44T***, 	- 	- 	-4  Kr(   c                     d | D             S )Nc                 ,    g | ]}t          |          S r'   )r~   ru   s     r)   rx   z"undo_rmbadname.<locals>.<listcomp>   s     000BOB000r(   r'   ry   s    r)   undo_rmbadnamer     s    00%0000r(   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                 `   t           ,t          j        |                                           j        }nt	          dt
          j                            |                     }t          | d          5 }|	                    |          }|
                    t          j                  rd}n^|
                    t          j        t          j        f          rd}n0|
                    t          j        t          j        f          rd}nd}ddd           n# 1 swxY w Y   t          | ||          S )	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   -  sB    %%/99>>@@I R2233(D!! 
	#W,,v&&C~~fo.. #&!4f6I JKK ## >?? ## #
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# 
	# $2222s   1BDDDc                 (   d}t          |           j                                        t          v rd}t	          | d          5 }|                                }d}t          |          rd}nt          |          rd}d}|dk    rw|ru|d         dk    rM|                                r9|dz  }|d         dk    rt          |d	d
                   s|dd         dk    rd}n|                                }|dk    r|ud	d	d	           n# 1 swxY w Y   |S )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   L  sj    FE{{!!%;;;	%		 &!! 	AAT"" 	AF!eeeAw#~~$**,,~QGtOORaR(A(AOd2b5kUXFXFX!F##%%D !eee& & & & & & & & & & & & & & & Ms   B9DDDc           
         |s8t           t          t          t          t          t
          t          t          t          f	}| g k    rdS t          }d}d}d}t          j
        dt          j                  }t          j
        d          }	t          j
        d          }
t          j
        d          }|r |dd           d	\  }}d
gd t          d          D             z   }dat          j        | t                    }	 	 |                                }nO# t"          $ rB}t%          d|                                 d|                                 d| d          d}~ww xY w|sn|                                rda|                                ada |}dadat,          j                            t                    d         }t3          t                    j                                        t8          v r!t;          |          st=          |          sdan%t?          t                    rt=          |          sdat          rt@          antB          atE          dtG          t                    dt          t          rdpdd           |$                                %                    dd
          }|dk    s|d         dvrn|dd         }|dk    tM          |d          \  }}|d
z  }|dd                                         dk    r!tM          |d z   |dd         z   d          \  }}|'                                dk    rt          dk    rnd}Wt          dk    rO|d         d!v r2|dd                                         d"k    rd#|dd         z   }n(d}t          rtQ          |          d$k    r
|dd$         }|d         |vrt%          d%tG          |          z            |rt          r2tQ          |          dk    r|d         d
k    s||d&d         z   }d}d}n|	)                    |          }|r|*                    d'          }|r1||
)                    |          *                    d'          z   }d}d}nTd#|dd         z   }|r|                                }n|}|}|}n(t          dk    r|sw|d(k    rq|)                    |          r\|d)z   }	 |                                }|stW          d*           n||z   }|)                    |          rnB|,                                }|	)                    |          }|r|*                    d'          }|r0||
)                    |          *                    d'          z   }d}d}n|r|                                }n|}|}|}|du}n$t[          d+tG          t                    z            d,|.                                dz
  t          |fz  a|)                    |          }|r|*                    d-          }t,          j        /                    |          rta          ||d.           nt,          j        1                    t                    gtd          z   }d}|D ]W}t,          j        3                    ||          }t,          j        /                    |          rd}ta          ||d.            nX|s@tE          d/tG          |          d0t,          j4        3                    |          d1           n ||           |}5|r|                                }n|}|}d,|.                                dz
  t          |fz  a|)                    |          }|r|*                    d-          }t,          j        /                    |          rta          ||d.           nt,          j        1                    t                    gtd          z   }d}|D ]W}t,          j        3                    ||          }t,          j        /                    |          rd}ta          ||d.            nX|s@tE          d/tG          |          d0t,          j4        3                    |          d1           n ||           da|5                                 |r |dd           dS |\	  a aaaaaaaadS )2z
    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
    c                 ,    g | ]}t          |          S r'   )strru   s     r)   rx   z#readfortrancode.<locals>.<listcomp>  s    777r3r77777r(   
   )r   Tz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.
)6r   r    r!   r   r   beginpatternr   r   r   recompileIrange	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l1spacedigitsfinlmsgextrl_origfinalliner   lcmfninclude_dirs	foundfileinc_dirfn1s                                r)   r   r   f  s	     6!#3_nV_%+6{{" DI	B*5rt= =KJ,--EJ-..EI&&J 
2rFB%77U2YY7777K

eh
7
7
7CU	AA! 	 	 	CLLNN  SZZ\\  !$    	  	?? 	7!!llnnOKBI"N'""?33A6CO$$+11337NNN(++ O/>q/A/A O		00 (9K9K (!' .--GO,,,,nn .Y4"446 7 7 7 LLNN""63//r''uH$$#2#A r''
 $As++B	Sbqb6<<>>W$$$Q[2abb6%93??DAq7799??''
  U""t000QqS6<<>>V++!ABB%AA D q66B;;#2#AaDK'' !GIMa!Q R R R  I CFFQJJqts{{!ABB%Z	 "KKNN (A ekk!nn226:::B "I$&MM  !ABB%A' '$&HHJJ		$&	$&MBBv%% C6MMj.>.>q.A.AMHB MO O OBA!''++  HHJJAA $GGFOO 
%++a....v666	 "# # "

II "I "TMDDH4P^K_K__a a a4NNq /287 7m,, 	"Bw~~b!! BzCCCCC GOOO44 68E F	+  G',,w33Cw~~c** $%	'
!LLLL ! BGR"*//,"?"?"?"?A B B B Jy!!!kUl  HHJJ			M01or43 3-((A WWV__7>>" 	>B:Q?????GOOO<<=MLI'  gll7B//7>>#&&  !I#CJaHHHHE  >HHHHbjool;;;;= > > > 	
9IIKKK D
2q 9D	6%	%+++s   :D 
E=EE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           
         t          d          t          |          z  r
J d            t          j        d                    d                    t          j        |                    d                    t          j        |                    dd                    }|                    |           }|r$|                                }|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PPP

	!!'!((:)>)>??ry445500	 "( "2 "2	3 	3A 	
A )KKMM(QwZ((":r(   c                     g }t          |                               d          D ]2}dD ]}|                    |d          }|                    |           3d                    |          S )N@,@z(),r   ,)markoutercommasplitr   appendr   )argslinear   r   s       r)   _simplifyargsr-    sq    
AH%%++E22   	" 	"A		!S!!AA	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                 n   t          | d          \  }}|rt          d                             |           st          d                             |           sq|dk    sJ t	          |                      t          | d          \  } }|r-t          | |           t          |dd         d          \  } }|-t          | |           dS |dk     rwd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dS |dk    rd}t          rt          t          k    rd}t          |k    rt          dt	          t                    dt	          t                    d           t          d           t          t          dz
                               t          t                              t          t                   t          t          dz
           d
         d<   t          t          = t          dz
  at          |k    t          rt          t          k    rt          t          dz
                               t          t                              t          t                   t          t          dz
           d
         d<   t          t          = t          dz
  at          t          dz
                               t          t                              t          t                   t          t          dz
           d
         d<   t          t          = t          dz
  ad
a
dS | dk    rdS 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                             |           }|r n|dz   }'|stN          }	dt          cxk    rt          k    rn ndS dt          t                   v rat          t                   d         D ]G}
|
tP          v rtP          |
         }
dt          t                   v r|
t          t                   d         v rHtS          j        d|
z  tU          |           tR          j+                  }|r|	                    |,                    d                    }t[          |,                    d                    }|r d|
d|d|,                    d          d} n	d|
d|d} t\          d                             |           }|s"t          dt	          |           z              dS t_          |d|             dS It`          dk    s7t`          dk    rEtb          2                                3                    d          rda4t          dt          z             dS |d         dk    rdt          cxk    rt          k     rn nt          dz
  at          t          k    rdS t          dk    rtk          dt          z            t8          d                             |           }|r|,                    d           t          t                   k    sZtk          d!t	          |,                    d                     d"t	          t          t                             d#tl                    t          t          k    rd
at          t          dz
                               t          t                              t          t                   t          t          dz
           d
         d<   t          t          = t          dz
  atn          sda8dS dS |d         d$k    rCdt          cxk    rt          k    rn nt          dz   adS da9t_          ||d         |            da8dS |d         d%k    rdS |d         d&k    rt_          ||d         |            dS |d         d'k    r.tt          rdS dt          cxk    rt          k    rn ndS t          adS dt          cxk    rt          k    rn ndS t_          ||d         |            dS )(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_1r}   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)   r<  r<    sQ    )s33A} 
5a8>>tDD 
/288>>
 zzz4;;zzz0s;;n 	NdE"""#4^ABB5G#M#M D.  	N 	$qyy!2&	"B'
!2&	+-
< (+-
< (,.
< )+-
< (qyy 	\\99BRG,''''i: ; ; ;ln n nlQ&'..z,/GHHH6?6MIlQ&'+F3,''!+L R  		\\99lQ&'..z,/GHHH6?6MIlQ&'+F3,''!+LlQ&'..z,/GHHH6?6MIlQ&'+F3,''!+LLrzzD /=/ +}n jo/@}Z' &   FLL 	Eax K%////</////F*\222"<0=  ;&&&t,D:l#;;;
S_H`amHn@n@nXLtSUcdhUiUikmkoq q BHHX$6$677B%bhhv&6&677A < < DD!!!RXXh%7%7%7%7 9< 4844;&q)//55A WZ^_cZdZddf f f9d333FF Q;;7a<<O,A,A,C,C,L,LV,T,T<#9\JKKK	Q5....,.....'!+L,..1 0+- . . . !_""4(( 	&))Y|-DDD)!"((6"2"23333T)L:Q5R5R5R5R--/   
 l** O,"#**:l+CDDD2;L2I	,"#B'/l##a' 	KKK	 		Q7		////</////'!+LFAs1vt$$$	Q7			Q$	$	$As1vt$$$$$	Q:		 	F////</////F&////</////FAs1vt$$$$$r(   c                     d}d}| D ]6}|dk    r|dz   }|dk    r|dz   }n|dk    r|dz
  }|dk    r|dz   }1||z   }7|S )Nr
   r   r7  r   @(@r8  @)@r'   )r0   r   fr   s       r)   rW  rW  O  s    
A	A  88AAAvvI  #XXAAAvvIEHr(   r'  c                 b   d}d}t          | |dz             \  }}||z  }|rq|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  }|q|rJ t          || |f                      |S )Nr
   r   ()@r7  r   r8  )r   r   )r0   commar   rf  r  r  s         r)   r(  r(  a  s    
A	A%dEDL99MFEKA
 
!HAFFus""AAqMAQx3QqSQ)%)UT\BB	V  
 $$$4|$$$$$Hr(   c                 Z    |                      dd                               dd          }|S )Nrd  r7  re  r8  )r   )r0   r   s     r)   unmarkouterparenrl  t  s*    UC  ((44AHr(   c                    | si } |s| S | |u r| S t          |                                          D ]}|dk    r|s|| vr||         | |<   |dk    r||         D ]}t          | ||          } =|dk    rt          | ||         |          } [|dk    rt	          | ||         |          } y|dv r|s|| vr||         | |<   |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)   
appenddeclr  y  so     u}}%**,, $ $
?? #(Q*__1X 3 3"4E223.  "4q599DD.  "4q599DD### #(Q&[[ ) ) )9A=>>>>KFF# $ $ $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                 r    |                      dg           D ]}t                              |          r dS  dS )Nrn  r   r   )get_intentcallbackpatternr   )vdeclr,  s     r)   _is_intent_callbackr    sF    YYz2&&  !''** 	11	1r(   c                 x   d                     |                                           } t                              |           }t	          | |           |rc|                    d          }|rd |                    d          D             ng }|                    d          ||                    d          fS d g d fS )Nr
   
attributesc                 6    g | ]}|                                 S r'   )r   )rv   r,  s     r)   rx   z*_resolvetypedefpattern.<locals>.<listcomp>  s     555q555r(   r'  rq   params)r   r)  typedefpatternr   printr   )r0   ra  attrss      r)   _resolvetypedefpatternr    s    774::<<  D			d	#	#B	$OOO	 ;&&9>F55EKK$4$45555Bxx(:(:::T>r(   c                    t          j        dt           j                  }|                    |           }d }|rN|                    d          }| d |                                         | |                                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    s|    jkmomqrrGNN4  EN 9QNU[[]]N#d599;;<<&88r(   c                 <   t          |           \  } }t          |           } t                              |           }|r?|                    d          |                    d          |                    d          |fS t
                              |           }|r7|                    d          dz   |                    d          z   dz   }|g d d fS t                              |           }|r,|                    d          |                    d          d d fS d g d d fS )Nrq   r6  r   schemer7  r8  )r  rW  nameargspatternr   r   operatorpatterncallnameargspattern)r0   
bind_cnamera  rq   s       r)   _resolvenameargspatternr    s   *400D*$D			t	$	$B	 Rxx&!1!1288H3E3EzQQ			t	$	$B	 $xx!!C'"((6*:*::S@Rt##		"	"4	(	(B	 >xx&!1!14==T4r(   c                 F   |                      d          }|dk    rdat          r
|dvrt          st          dk     rt
          j                            t                    	                    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 ri|                                }t!          j        d|t           j                  rd}nEt!          j        d|t           j                  rd}n"t!          j        d|t           j                  rd}|dk    rTt'          |                      d                    \  }}}t)          |          t          t                   d         |<   g }d}	n't+          |                      d                    \  }}}	}
||dk    rd}nd}|dvrt          d           ||t          fa|r:t-          d t/          |          	                    d          D                       }ng }d|v r,d|v r|                    d           d|v t          d            d}d}|d!v rd}d"t          t                   vrdS |t          t                   d"         vrdS t          t                   D ]}|d         |k    r dS |t          t                   d#         v rdS d$d%d!|         }t2          r(t4          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          <   |rt6          dk    r%t          d)t9          t2                    z  d           d*t          t          <   dt          t                   d<   t2          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          <   |r$t6          dk    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d0|                    d1d2          z   }|                      d3          t          t                   d4<   t=          |          t          t                   d<   |	t          t                   d5<   t          dk    rt          t          t                   d<   nt2          rDt          d6k    r9t          t          dz
           d         d/t          t          t                   d<   nLt          t          dz
           d         d/t          t          dz
           d         t          t                   d<   t?          t          t                                                              D ]-}t          t                   |         st          t                   |= .|t          t                   d"<   g t          t                   d
<   g t          t                   d+<   g t          t                   d#<   i t          t                   d<   i t          t                   d7<   |dk    rg t          t                   d8<   |d!v r|t          t          d'z
           d+         vr.t          t          d'z
           d+         !                    |           tE          j#        t          t          d'z
           d                   t          t                   d<   	 t          t                   d         |         t          t                   d         |         d9         $                    d:          = n# tJ          $ r Y nw xY w|d;v r|
rt!          j&        tN          |
          }|r|i it          t                   d<<   |                     d=          t          t                   d<         |         d=<   |                     d>          r4|                     d>          t          t                   d<         |         d<   	 tQ          t          t                   d         |         t          t          d'z
           d         d                   t          t                   d         |<   n# tJ          $ r Y nw xY w|d?k    r|	r|	t          t                   d         v rg||	k    satQ          t          t                   d         |         t          t                   d         |	                   t          t                   d         |<   	 t          t          d'z
           d#         !                    |           n# tJ          $ r Y nw xY w|d%k    rtR          d                             |                      d3          d1z   |z             }|rMtU          |                     d          |                     d                    \  }}}}tW          ||||           |d!v rt          t          dz
           !                    t          t                              t          t                   t          t          dz
           d&         d
<   t          t          = t          dz
  at          t          dz
           !                    t          t                              t          t                   t          t          dz
           d&         d
<   t          t          = t          dz
  adS dS |d7k    rt+          |                      d                    \  }}}	}|~|r:t-          d@ t/          |          	                    d          D                       }ng }|	J t9          |	                      |t          t                   d7         |<   d7|t          fadS dS |dk    rJtU          ||                      d                    \  }}}}tW          ||||          }|dA|t          fadS dS |dBv rt          t                   d         }|                      d          ,                                }|-                    dC          }|dk     r|dDk    rt]          |          -                    dE          d'z
  }|d|dz            dCz   ||dz   d         z   }|-                    dC          }||d         dCk    rrd"t          t                   v r^t          dF|                      d          |d|         dG           |dH/                    t          t                   d"                   z   }|dk     rd}d}n)|d|         ,                                }||d'z   d         }t/          |          	                    d          }ta          |          dk    r5|d         }t          dIdH/                    |dd                   z             d}dJ t/          |          	                    d          D             D ]}tb                              |          }|sL|dKv rd}ngte          | 3                                           t          dL|dMt9          |          dN           kt=          |                     d                    }|dKv r$|dOk    s|dPk    r||                     d          z  }||vri ||<   |dQk    r||                     d          z   }|dDk    r|                      d          |z   }th                              |          r|t          t                   d"         vrt          dk    rdRt          t          d'z
           d         vrt          dS           |t          t                   d         k    rWt          dT|dUt          t                   d         dV           t          t                   d"         !                    |           n%tk          dW|z             ntk          dX|z             |dYv r|}d9||         v r"||         d9         !                    |           n|g||         d9<   |d:k    rt          t                   d         d	k    rt          dZ           p|t          t                   d"         vrd+t          t                   vrg t          t                   d+<   t          t                   d+         !                    |           |}|t          t                   d<   |dA|t          fadS dS |d[k    rGd\ |                      d          	                    dH          D             t          t                   d]<   dS |d^k    r<t          t                   d         }|                      d          ,                                dd&         }d}t/          |          	                    d          D ]}	 d_ |	                    d`          D             \  }}n&# tJ          $ r t          da|db|dc           Y Iw xY wtm          |          }t=          |          }||vri ||<   d`||         v r7||         d`         |k    s%t          dd|de||         d`         df|dg           to          ||          }|rB|8                    dh          dik    rt?          |          }tr          :                    |          D ]} t?          || ;                                | <                                                                                             djdk                    || ;                                | <                                <   d/                    |          }n]|8                    dh          dlk    rD|dd                                                             djdk                              dHdm          }	 t{          |i |          } n;# t|          t~          t          f$ r!}!tk          dn|do|!dG           Y d}!~!Pd}!~!ww xY wt9          |           ||         d`<   d9||         v r"||         d9         !                    d^           nd^g||         d9<   |}|t          t                   d<   |dA|t          fadS dS |dpk    r |                      d          ,                                                                dqk    rdt          t                   dp<   dS |                      d          rdpt          t                   v rt          t                   dp         }"ni }"|"t          dr           i }"t/          |                      d                    	                    d          D ]$}i }#t!          j        ds|t           j                  }|st          dt|z             :t                              |                     d                    }$|$st          du|z             |tU          |$                     d          |$                     d                    \  }}}}t          ||          \  }%}&}'||#dh<   |%|#dv<   |&|#dw<   |'|#dx<   t?          |#                                           D ]}|#|         s|#|= t/          |                     d                    	                    d          D ]}(dy|(v rF	 dz |(	                    dy          D             \  })}*n8# tJ          $ r t          d{|(z             Y Hw xY w|(,                                x})}*ta          |)          ta          |*          cxk    rdk    sn t          d||(z             t          t          |)          t          |*          dz             D ]}+|#|"t          |+          <   &|"t          t                   dp<   dS dS |d}k    rg }d},d}-d}.d}/d}0|                      d          D ]}1|0s|1d~k    r|/ }/|1dk    r|/r|.dz   }.|1dk    r|0dz   }0n|1dk    r|0dz
  }0|.dk    r|,|1z   },>|.dk    r|-|1z   }-J|.d'k    rb|,,                                },|,F                    dH          r|,dd         ,                                },|!                    |,|-g           |1},d}-d}.|.d'k    r\|,,                                },|,F                    dH          r|,dd         ,                                },|!                    |,|-g           t          t                   8                    di           }2d}|D ]X}3|3d         ,                                |3d         ,                                c|3d<   |3d<   |3d         F                    dH          r|3d         dd         |3d<   |3d         F                    d          rt          d|3d         z             t          t-          d t/          |3d                   	                    d          D                                 D ]j\  }4} | F                    d          rt          d| z             .d|3d         v rt          d|3d         z             Q|2H                    | i            |2|          8                    dh          }5t          |2|                    }6|5dlk    rt!          jJ        d|3d                   n|3d         	                    dH          }7	 |6r(dK                    d/                    |7                    n|7|4         }8n# t          $ r t          d |7D                       rg }9|7D ]}:d|:v r	 |:	                    d          \  };}<|9N                    |<,                                gt          |;          z             X# t          $ r* |9!                    |:,                                           Y w xY w|9!                    |:,                                           |9}7|6r(dK                    d/                    |7                    n|7|4         }8Y nw xY w|2|          8                    d`          }=|=r|=|8k    rt          d| de|=d|8dc           |8|2|          d`<   | }lZ|2t          t                   d<   |rdA|t          fadS dS |dk    r|                      d          ,                                }|d         dk    sd|z   }g }>d}.d}?d}@|D ]\}1|1dk    r|.dz   }.|.d6k    r8|?,                                }?|?sd}?|>!                    |?|@g           |.d'z
  }.d}?d}@|.d'z  r|?|1z   }?W|@|1z   }@]|?,                                }?|?sd}?|>!                    |?|@g           i }Adt          t                   v rt          t                   d         }A|>D ]o}1|1d         |Avrg |A|1d         <   d t/          |1d                   	                    d          D             D ]%}|r!|A|1d                  !                    |           &p|At          t                   d<   d|?t          fadS |dk    r t!          j        d|                      d          t           j                  }|r|3                                }Bdt          t                   vri t          t                   d<   |                     d          }i t          t                   d         |<   d}Cd|Bv r"|Bd         d|Bv r
|Bd         d}C|Ct          t                   d         |         d<   d |Bd         	                    dH          D             }i }D|D ]}3d`|3v rt!          j        d|3t           j                  }$|$rP|$                     d          ,                                |D|$                     d          ,                                <   n%t          dt9          |3          z             n|3|D|3<   |Dt          t                   d         |         d<   dS dS te          | 3                                           t          d           dS |dv rdt          t                   vri t          t                   d<   t          t                   d         }E|                      d          dk    r[d|Ev rWt          |Ed         t                    r|Ed         g|Ed<   |Ed         !                    |                      d                     dS |                      d          |E|                      d          <   dS |dk    rdt          t6          rt          d           dS t          }Ft          t          |F         t          dd'         |                      d                     dS t6          dk    r2te          | 3                                           t          d           dS dS )a  
    Reads each line in the input file in sequence and updates global vars.

    Effectively reads and collects information from the input file to the
    global variable groupcache, a dictionary containing info about each part
    of the fortran module.

    At the end of analyzeline, information is filtered into the correct dict
    keys, but parameter values and dimensions are not yet interpreted.
    r9  r  N)r   r  r  rh   r   .r   zBanalyzeline: no group yet. Creating program group with name "%s".
programr0  r1  r2  rq   fromskyfrom)r   r  r  zblock\s*data
block datazpython\s*modulepython modulezabstract\s*interfaceabstract interfacerh   r  )rn  _BLOCK_DATA_r
   )	interfacer  r  z2analyzeline: No name/args pattern found for line.
c                 6    g | ]}|                                 S r'   r   rv   xs     r)   rx   zanalyzeline.<locals>.<listcomp>  s6     J J J"#  ggii J J Jr(   r&  z<analyzeline: argument list is malformed (missing argument).
)r  r  r6  r5  r   r   r   r3  r  r  z&analyzeline: Creating module block %s
moduler4  zDanalyzeline: Creating additional interface block (groupcounter=%s).
r  unknown_interface:unknown_r   r   r  prefixr      r  varnamesrn  r  r   r   bindlanglang	lang_namer  c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>  s6     "N "N "N&' #$'')) "N "N "Nr(   variable)r  r  r  r  r  r	  r
  r  ::r  re  z"All arguments will have attribute r   r'  zXanalyzeline: cannot handle multiple attributes without type specification. Ignoring %r.
c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>  s     EEE!''))EEEr(   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  c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>  s     <<<1QWWYY<<<r(   implementedbyr  c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>  s     ???Qqwwyy???r(   rq  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"
ro  rp  rr  -c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>_  s     )J)J)J!'')))J)J)Jr(   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  '/r7  r8  z>analyzeline: implied-DO list "%s" is not supported. Skipping.
c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>  s     .d.d.dQqwwyy.d.d.dr(   r   z=Comment line in declaration "%s" is not supported. Skipping.
z\(.*?\)z(/{}/), c              3      K   | ]}d |v V  	dS )r   Nr'   )rv   r   s     r)   	<genexpr>zanalyzeline.<locals>.<genexpr>  s&      553!8555555r(   r   z*analyzeline: changing init expression of "") to "r  z//_BLNK_c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>  s     KKKAaggiiKKKr(   r  zR\A\s*(?P<name>\b\w+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\Zrv  notonlyonlyc                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>  s     ???Aaggii???r(   z7\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.
)Tr   r&   r   r   r   r   r   basenamer!   r)  r2   r   r=  r>  r   r   r   r   r   r  dictr  r{   r(  remover   r   r   r   r   rr   rv  rw  r*  copydeepcopyr[   r   r  crackline_bindlangr  rO  cracktypespec0
updatevarsr   findrW  r   rX   namepatternr  r"  r  ro   get_parametersdetermineexprtyper  real16patternfinditerr  r   evalSyntaxError	NameError	TypeErrortypespattern4implicitcracktypespecr   ordchrr   	enumerate
setdefaultgetdimensionfindallr  
IndexErroranyextendr8   r   
isinstancer   appendmultiline)Gr   r?   r0   r2  newnamerq   r  r   r6  r   	bindcline
needmoduleneedinterfaceitr~  bindcdattr4   selectorattredecl	last_namer   iplchr  ra  apinitexprr  ttvr   implr{  rb  
kindselect
charselectrr  r   begcendcodlilrf  fcinpr   r1  r   idxvtypevdimmatchesnew_valexpanded_listr   
multipliervaluecurrent_valclbnol	commonkeymmisonlyr   r$  gcsG                                                                          r)   rY  rY    s!$    GGFOOE{ t#GGG H!-!1!1'""?3399#>>qAQT[[	] 	] 	]#a'"+	,#%
< "$	,+-
< (+-
< (,5
< )+2
< (+4
< (+++8OUBD11 	) EEX(%66 	)#EEX-ubd;; 	)(EF??3AGGG4D4DEEND%59U5K5K5KJ|$V,T2DFF,CAGGGDTDT,U,U)D$	<$$%MMMMNNN!46 	 J J'5d';';'A'A%'H'HJ J J K KDD D::**B **OQ Q Q 
&&&MZ555:l3F;;;-  f:%%FF &z,/===)jAA$GE 	"\R//LA4E4E'!+LJ??? !#a'#%
< "$	, 	){{A]++,-.0 0 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444jPQAQ6RSY6Z6Z0\J|$V,/1J|$V,46J|$[157J|$\2/1J|$V,'!+L')J|$&(Il#"'	,,1
< ) 	8c3 7 77D-.WWX->->
< *+5d+;+;
< (-3
< *1/>J|$V,, `!2!2|a/0888//4K
<(00 |a/0888*\TUEU:VW]:^:^4`
<(0j.335566 	0 	0Al+A. 0|,Q/+/
< (+-
< (02
< -13
< .+-
< (,.
< )F??35J|$Z0&&&:lQ&67DDD<!+,[9@@FFF/3}<!+,V406 06J|$V,|,V4T:|,V4T::FLLZXXZ Z   ... i9%7CC i<@2;J|,Z8IQX^I_I_J|,Z8>vF~~k22 iMU^^\gMhMh
<0<TB6J9C|,V4T:J|VWGW<XY_<`ac<d:f :f
<(066   y   nf
<(@(HHH6>>AK&|4V<TBJ|D\]cDdekDlBn Bn
<08><!+,\:AA$GGGG   JQ%%aggh&7&7#&=&DEEA <2@GGFOOQWWW%5%537 37/(D%8XtU;;;&&&lQ&'..z,/GHHH6?6MIlQ&'+F3,''!+LlQ&'..z,/GHHH6?6MIlQ&'+F3,''!+LLL '& 
6qwww7G7GHHdFA   "N "N+9$+?+?+E+Ee+L+L"N "N "N O O >>4<<>>>6:J|$W-d3 '|<  
*81777##+% +%'(D%x4??	  *I|D ! 	n	n	n<(0WWW##%%GGDMMq55TX%%r""''..2AFQUFd"RAZ/BA!""v~~&J|,D"D"D"RaR&&&2 3 3 3#((:l#;F#CDDDq55ABBBQBBAEFFBB%%e,,r77Q;;ABoABB  " # # #	EE^B%7%7%=%=e%D%DEEE 5	 5	A""1%%B 	1000AA!++--(((Gd1gggg' ( ( (rxx//00,,,Z1#4#4RXXg&&&~~a{""BHHW---xWWV__r))//33 =
< 8 @@@'!++)L1<L1Mf1UUU '$_!a !a !a  !J|$<V$DDD '@A:lC[\bCcCcCc)e !f !f !f *< 8 @ G G J J J# OST UW W W W   !69:!< = = =]]]U1X%%a$++B////(*ta$z!!l+G4	AAGHHHJ|4V<<<j&>>><>J|,[9<(5<<Q???II+0
< (  *I|D ! 	"	"	"<< 0 0 6 6s ; ;<<< 	< 111			<(0WWW##%%ad+	##))%00 $	 $	A??!''#,,???88   hihihikmkmkmnp p p $E**F1A~~aeAha(A(AAAuQx}}}hhh0 1 1 1!(F33A 	.55$$..hB*33H== S S04$QWWYYquuww%67==??GGSQQ1S 1S17799QUUWW,--!wwr{{HHUU:&&)33'|1133;;CEEW-- 2v..I6   #88SSS* + + + !GGE!HSMU1X%%a$++K8888(3}a$II+0
< (  *I|D ! 			777!!##))++v5537J|$Z000WWW 1	8Z555!,/
;|SU U U#AGGG$4$455;;EBB ', ',XPRSUWUY[ [ _cdeg g g*00&1A1ABB hlmnp p p2@HHV$$bhhw&7&739 39/(D%3@h4( 4(0
J#+Z '1^$'1^$#+Z diikk** $ $A7 $ G'(9(9::@@GG , ,Aaxx%)J)JQWWS\\)J)J)JJD$$( % % %# }  AB  !BC C C$H%
 '(ggii/tt99D		6666Q6666}  AB  BC C C "3t99c$ii!m<< , ,'+SVV,,  48J|$Z000c1	8 1	8d 
!! 	 	A 88B888AACxxAgcAgAvv!Va!VaXXZZ==%% (ABBB		2r(###66B}}S!! $V\\^^IIr2h,'++FB77	 2	 2	A1qtzz||JAaD!A$ts##  tABBx!ts## Y\]^_\``aaa#I.d.d.QRSTQUBVBVB\B\]bBcBc.d.d.d$e$eff + +Q<<$$ ]`aabbb !A$;; \_`ab_ccddd2&&&QJ//#DG,,:?9:L:L"*Z1666RSTURVR\R\]`RaRa\EI[hoodii.@.@AAAwWZ|GG! \ \ \
 55W55555 0(*%, D DE"e||!H8=C8H8H$5J$1$8$8%++--3z??9Z$[$[$[$['1 !H !H !H$1$8$8$G$G$G$G$G!H !. 4 4U[[]] C C C C"/EI[hoodii.@.@AAAwWZ|GGG#\$ #1gkk#.. zK7$:$:G`a`a`acncncnpwpwpwxyyy&Q		W+X ,0
< ( 	E *I|D	E 	E			www%%''Aw#~~$;D 	 	ACxxEAvvXXZZ "!B		2r(###E1u !V!VXXZZ 	B
		2r(	z,///"<0:I 	. 	.At9$$"$	!A$KK!)=)=)C)CE)J)JKKK . . .adO**1---. .7
< *$b,7	Xacdcjcjkrcscsuwuy{ { 	IBJ|44424
<(/88F##D46J|$U+D1F||6
 6??r)}'<F@F
<(/5f=??F)9)9#)>)>??? F FAaxxXVXY[][_a a _<>HH %=' ='',uww rxx00668899 $ SVZ[\V]V] ]_ _ _ _ !"1CEJ|,U3D9%@@F F !++--   GHHHHH	%	%	%Z%===;=J|$%78|$%78776??j((Z1__!J--- 0!":*jM  !1!122222!"!1!1Aaggfoo			# JHIIIF
2(!,	) 	) 	) 	) 	) Q;;!++--   BCCCCC ;s   3Ad 
ddA$h5 5
ii.k> >
l
lM2"ANN AN8N7AN8U9AVVAWV"AV>V>AWa1"AbbAb3b2Ab3r2Ass.Aws0AAuu Awu1Au5u2Awu4Au5u5AAwwAwc                 p    d| vri | d<   | d         }||vrg ||<   ||                              |           d S )Nf2pymultilinesr*  )r   context_namemlr$  s       r)   r  r  *  sT    u$$"$A1,lO2
Fr(   c                    d }d }t          j        d| t           j                  rd} nIt          j        d| t           j                  rd} n&|                                                                 } t
                              t          |                    }|st          d           d S |                                }t          |
                                          D ]}t          ||                   ||<   | dv r|d         }|d         }|                    d	          }|d
k    r)|d |                                         }||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   r9  r  r  r   r3  )r   r   r   r   r   selectpatternrW  r2   r"  rv  rw  rl  r  )r4   r   r  r  ra  r$  r~  r  s           r)   r  r  4  sS   HD	x#Xrt44 ,#	'24	8	8 ,%>>##))++			^B//	0	0B M	O 	O 	O
A!&&((^^ & &!%%!QQQV9wZ
AAvv"1"v||~~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                 (   |                                  } t          |           dk    r| S | d         }t          dt          |           dz
            D ]4}| |         dk    r| |dz            dv s| |dz
           dv r)|| |         z   }5|| d         z   }|S )Nr   r   r   z()[]{}=+-/* r   )r   rX   r   )exprexpr2r  s      r)   removespacesr/  [  s    ::<<D
4yyA~~GE1c$ii!m$$    GsNN1q5k^++a!e..QDHELr(   c                     d}d}d}d}| D ];}|dk    r|dv r||z  }|}|s|dv r|}||k    r| }n|dk    r|r|dz  }4||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\)r1  r  ")r  r2  r   @_@r'   )r0   fragmentinsidecurrent_quoteescapedr   s         r)   markinnerspacesr8  j  s      HFMG  d??q$555MHG 	!{**MZFF#XX&XHAOr(   c                 H   d}t          | |          \  }}}|rd t          |                              d          D             }g }t          j        d          }	|D ]r}
|
s|	                    |
          }|rA|                    d                                          }||
t          |          d         z   }
|	                    |
           s|}d t          |                              d          D             }g }|D ]x}d t          t          t          |                    d	                              d
          D             D ]-}|r)|	                    |                    dd                     .y|D ]#}t                              |          }|s t          dt          |          z             ?t!          |                    d                    }i }|t"          t$                   d         v r^t"          t$                   d         |                                         }d|v}|r| |d<   n-| r+| |d         k    st          d|d|d         d| d           d|vrt'          j        |          |d<   n|rt)          |                                          D ]v}||d         v rG||         |d         |         k    s/t          d|d|d|d         |         d||         d	           St'          j        ||                   |d         |<   wd|vr!|r|r||d<   nt-          d|d|d           n|rt)          |                                          D ]v}||d         v rG||         |d         |         k    s/t          d|d|d|d         |         d||         d	           St'          j        ||                   |d         |<   wd|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r|d         	                    |
           (nat'          j        |           |d<   t'          j        |          |d<   t'          j        |          |d<   ||d<   t'          j        |          |d<   d|                    d          pg v rn|t"          t$                   d          v rTd!t"          t$                   vrg t"          t$                   d!<   t"          t$                   d!         	                    |           |                    d"          rt0                              t3          |                    d"                              }|rY|                                }d#D ]!}||d$z            ||d$z            ||<   ||d$z   = "t)          |                                          D ]&}||         t7          ||                   ||<   #||= 'd%|v rd&|v r|d%         d'k    r|d&         |d%<   |d&= n~| d(k    r9d|vs|d         si |d<   d%|d         v r	|d         d%= |d%         |d         d)<   |d%= n?|d&         d*z   |d%         z   |d&<   |d%= t-          d+| d|d,| d|d-|d&         d.           d%|v rh| d/v r&d|vs|d         si |d<   |d%         |d         d)<   |d%= n>| d(k    r8d|vs|d         si |d<   d%|d         v r	|d         d%= |d%         |d         d)<   |d%= d0|v rGd1|v r8|d1         |d0         k    s&t          d2|d|d1         d|d0         d           n|d0         |d1<   d&|v r|d3|d&         z  }d|vs|d         s|g|d<   n|d         	                    |           |d         D ]:}|dd4         d5k    r*||k    r$|d         d6= t-          d|d7|d8|d            n;n(t          d9||                    d"          z   z             t)          |                                          D ]}||         s||= |t"          t$                   d         |<   d:t"          t$                   v r+t"          t$                   d:         	                    |           |}%|S );z
    Returns last_name, the variable name without special chars, parenthesis
        or dimension specifiers.

    Alters groupcache to add the name, typespec, attrspec (and possibly value)
    of current variable.
    Nc                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zupdatevars.<locals>.<listcomp>  s     MMM!AGGIIMMMr(   r&  z(?P<start>[a-zA-Z]+)r  c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zupdatevars.<locals>.<listcomp>  s     	E	E	E!''))	E	E	Er(   c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zupdatevars.<locals>.<listcomp>  s     ooo17799ooor(   r   rj  z@ @r3  z;updatevars: no name pattern found for entity=%s. Skipping.
rq   r1  r4   z+updatevars: attempt to change the type of "r  r  z". Ignoring.
ro  z0updatevars: attempt to change the kindselector "r  rp  zupdatevars:z*: attempt to change empty charselector to r   z0updatevars: attempt to change the charselector "rr  z/updatevars: attempt to change the typename of "rn  r  r6  r4  r  )rX   arrayinit2rX   r>  r
   r*  r   r'  zupdatevars: "z" is mapped to "r7  z)"
r  r7   r)  r5   r?  rq  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   rX   r*  r/  r8  r   r  r2   r   rr   r>  r   r  rv  rw  ro   r  lenarraypatternrW  r"  rl  )r4   r  rn  
entitydeclr   r	  r
  rr  r   r   r,  r   selel1r  e1enamer  not_has_typespecr~  ra  d1lkdmdm1s                             r)   r  r    s
    I'4Xx'H'H$J
H MM~h'?'?'E'Ee'L'LMMMJ.// 	 	A 

A #GGG$$**,,#a&&''
NHHQKKKK	E	E^J77==eDD	E	E	EB
C 3 3oon\/RSBTBT5U5U]`&a&a&a&g&ghm&n&nooo 	3 	3B 3

2::eS11222	3  E Ea   	NRVWXRYRYZ\ \ \1776??++J|,V444|,V4U;@@BBE)6 9$,j!! 98uZ/@#@#@EE5,,,hhh8 9 9 9U**(,	*(=(=n%% Ljoo//00 L LAE.111:a=ER`LabcLd;d;dAAuuueN&;A&>&>&>
1!O P P P P 489Z]3K3Kn-a00U**z*# 3,6E.))G$uujjj2 3 3 3 3 Ljoo//00 L LAE.111:a=ER`LabcLd;d;dAAuuueN&;A&>&>&>
1!O P P P P 489Z]3K3Kn-a00&&$,j!! 95#4#@#@EE5,,,hhh8 9 9 9&&$(Ih$7$7j!! 4! 4 4Aj 111j)00333 $	( 3 3E*$(Ij$9$9E.!$(Ij$9$9E.! (E* $	( 3 3E*%))J//52661
<@XY_@`;`;`*\":::8:
<(5|$[188;;;777 C	/ &&~aggg6F6F'G'GHHB A/\\^^2 ) )B"s(|/!#BH2rCxLbggii " "A!u( 0A 7 71qEEB;;7b==%yB$&wK5	wKK![00*%77~AV746E.1 E.$999 %n 5e <57Yn-c2uII&(kC&7"U)&C7uI$HHaaa555"W+++!G H H H B;;#LLL*%77~AV746E.157Yn-c2uII![00*%77~AV746E.1 E.$999 %n 5e <57Yn-c2uIR<<e||U3Z2f:-E-E!EE5:::r&zzz!; < < < < &(Zc
b==(2g;6B!..uZ7H.-/Dj))j)00444#(#4 & &C"2A2w+55#))$)*$5b$9 '+055###rrr); !< !< !< % ZAGGG,,,. / / /ejjll## 	 	A8 !H27
< (/L111|$Z077>>>		r(   c                 r   d }d }d }|r| dv rt                               |          }|s!t          dt          |          z             d S |                                }|d         |d<   |d= t          |                                          D ]}||         s||= t          |                                          D ]\  }}t          |          ||<   n| dk    rVt                              |          }|s!t          dt          |          z             d S |                                }|d         |d<   |d= |d         rt                              t          |d                             }|                                }d	D ],}||d
z            r||d
z            ||<   ||         ||<   ||d
z   = -|d         |d         |d<   |d= t          |                                          D ]}||         s||= t          |                                          D ]\  }}t          |          ||<   n| dk    r[t          j        d|t          j                  }|r|                    d          }nBt          dt          | |z             z             nt          dt          |          z             |||fS )NrA  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
)ro  r   r2   r   r"  rv  rw  itemsrr   rp  lenkindpatternr(  r   r   r   )	r4   r  r	  r
  rr  r~  r  rS  rM  s	            r)   r  r  8  s;   JJH 3&@@@%++H55J KtT\~~^` ` `#--//J(1JsO7#*//++,, & &!!} &"1Z--//00 . .1 *1
1.$$%++H55J KtT\~~^` ` `#--//J(3JsO9%)$ A(..":i#899; ;!++--) * *BrCx( 8&-b3h&7%,R[JrNS)):&2-4Z-@Jz*9%*//++,, & &!!} &"1Z--//00 . .1 *1
1.x =xNNH 5#>>&11Bh1224 5 5 5 5 >(^^% & & &z8++r(   c                    | si } |s| S d| vr|g| d<   | S |r| d                              |           || d         v r| S |dk    r&d| d         vr| d                              |           n|dk    r&d| d         vr| d                              |           ns|dk    r&d| d         vr| d                              |           nG|dk    r&d| d         vr| d                              |           n| d                              |           | S )Nrn  rJ   	automaticr	  r
  r$  )r{  r  r}  s      r)   rx  rx  t  sb      6Z &Z%%%tJxKtJ/???Z%%%%			j1A!A!AZ%%%%			D,,,##D)))			4
+++##D)))Z%%%Kr(   c                     | si } |s| S d| vr|| d<   | S t          |                                          D ]}|s
|| d         vr||         | d         |<    | S )Nro  rv  rw  r{  selr}  r~  s       r)   ry  ry    s      T!!"^#((** - - 	-AT.111&)!fD #Kr(   c                     | si } |s| S d| vr|| d<   | S t          |                                          D ]}|s
|| d         vr||         | d         |<    | S )Nrp  r[  r\  s       r)   rz  rz    s      T!!"^#((** - - 	-AT.111&)!fD #Kr(   unknownc                     d| v r| d         S |S )Nrq   r'   )r2  r_  s     r)   getblocknamera    s    V}Nr(   c                 R    d| d         d| d         da d S # t          $ r Y d S w xY w)NzIn: r  r  rq   r   )r    r   )r2  s    r)   setmesstextrc    sJ    ,1&MMM5===I   s    
&&c                 z    i }d| v rt          | d                   }d| v r|                    | d                    |S )Nparent_blockr  )get_usedictupdate)r2  usedicts     r)   rf  rf    sH    GeN344~~uU|$$$Nr(   c           
      6   |i }t          |           }|s|S t          |                                          D ]\  }}|                                }|t          vr*t          d|d|                     d          d           Lt          |         }t          |          }|sk|rt          d|z             t          |                                          D ]>\  }}||v r0t          dt          |          dt          |          d           |||<   ?|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 )
rf  rv  rV  r   r   r2   r  r  ro   r   )	r2  	param_maprh  usenamemappingmvarsr  r~  r  s	            r)   get_useparametersrn    sV    	%  G  11  --//-''GWWeii////1 2 2 2g&&& 	 	QCwOPPP(( 	 	DAqI~~59!WWWWd7mmmmM N N NIaLL		 r(   c                    t           s| S t          | t                    rfd| D             }|S t          |            t	          d| d         dd           t          |           _d| v r[| d         }t          |                                          D ]1}||         }d|v r#|d         }d|v r|d         }|v r|         |d<   2fd	| d
         D             }	|	| d
<   | S )Nc                 :    g | ]}t          |d z             S r   )tabrj  
postcrack2)rv   grj  rr  s     r)   rx   zpostcrack2.<locals>.<listcomp>  s<        !tyAAA   r(   Block: rq   r   r   r1  ro  rT  c                 :    g | ]}t          |d z             S rq  rs  )rv   brj  rr  s     r)   rx   zpostcrack2.<locals>.<listcomp>  s<     ( ( ( 1#*	BBB ( ( (r(   r0  )r   r  rv  rc  r2   rn  rw  )
r2  rr  rj  retr1  r   varrT  valnew_bodys
    ``       r)   rt  rt    sW     %       
sssE&MMM2A666%e,,	5V}diikk"" 	6 	6Aq'C$$>*T>>v,Ci'''0~V( ( ( ( (v( ( (HE&MLr(   c                    t          | t                    rjg }g }| D ]^}t          |           t          ||dz             }d|v r d|d         v r|                    |           I|                    |           _||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 rF| d         }t          |                                          D ]}d|v r|                    |           ni }d}	d| v r| d         }	d| v r| d         rg }
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 d||fz  }dg i |	dz   d}| d         D ]}||
v rg }d}| d         D ]}|dz   }|d         dk    rld}|d         D ]6}|dz   }d|v r+|d         |k    rt          j        |          }|d         |=  n7|r)|d         s	| d         |= |
|
                    |          =  n|d                             |           ||v r&t#          ||                   s||         |d         |<   |d         s|d         r3|
| d<   d|gi || d         d}i ||<   t$                              |           |r|| d<   | S )zi
    TODO:
          function return values
          determine expression types if in argument list
    r   rr  rq   r  r2  z0postcrack: Expected block dictionary instead of r  rv  r   r   r1  sortvarsr6  r0  r  r
   r4  r5  __user__routinesunknown__user__routinesr   z%s_%ir  _user_interface)r2  r0  r1  rq   r   r  )r2  r0  r1  rq   r5  )r  rv  rc  	postcrackr*  r  r   r   r2   analyzeargsanalyzecommonanalyzevarssortvarnamesanalyzebodyrw  r  r[   
isexternalr   )r2  r6  rr  greturetru  userisdefineduseblockr~  rq   r5  rm  mnamer  r  r  edefjrx  bbmblocks                        r)   r  r    st    %  	 	ANNN!t,,,A{{zQvY66AAd{eT"" $we';';JE

# $ $ 	$uV}0CCC333f6:::E%  E&&E&M$U6]33E*5=V}t555E&MM~~<hmmoo&& 	( 	(AQ$$Q'''	( DV}ek 2
5  |,J	%-(( 	.--EE-EM!!AUAJ&-77E UAJ&-77uaj(E)20A)AC C	{# 	4 	4AJv " "AAAz[00"#F) & &B !AA%||6
a'+y}}$%fIaL % "#$V9 5$)&M!$4 *:+;+;A+>+> ?!E&!((....::jq&:&::+08If%a(V 	'	& 1 	'",E,.9$&U;EWY YF HUOv&&&  eLr(   c                 P   g }g }t          |                                           D ]E}d| |         v r$| |         d         r|                    |           0|                    |           Ft          |          }d}|r|d         }d}|dd          D ]}|| |         d         v rd} n|rH|dd          |gz   }|dz   }||k    r.t	          dd                    |          z   dz              ||z   }n3n0|                    |           |dd          }t          |          }d}||S )Nru  r   r   zTsortvarnames: failed to compute dependencies because of cyclic dependencies between r  r   )rv  rw  r*  rX   ro   r   )r1  indepdepr  r   r  r^  ws           r)   r  r  d  s|   E
C$))++  tAw478#4JJqMMMMLLOOOOCA	A
 FQRR 	 	ADGH%%% &  	abb'QC-CAA1uu ;))C..)+/0 1 1 1   LLOOOabb'CCAA)  * Lr(   c           	      B   t          |           s| S g }t          | d                                                   D ]}g }| d         |         D ]}t          j        d|t          j                  }|rWg }|                    d          r?d t          |                    d                                        d          D             }t          |                    d          
                                          }|| d         v rwd| d         |         v r>| d         |         d                             d	d
                    |          z             n[d	d
                    |          z  g| d         |         d<   n2|r%dd	d
                    |          z  gi| d         |<   ni | d         |<   ||vr|                    |           n|}t          d|d|d           |                    |           || d         |<   d| vr|| d<   n| d         |z   | d<   | S )Nr  z2\A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\Zdimsc                 6    g | ]}|                                 S r'   r  r  s     r)   rx   z!analyzecommon.<locals>.<listcomp>  s6     S S S ! GGII S S Sr(   r&  rq   r1  rn  rB  r'  z:analyzecommon: failed to extract "<name>[(<dims>)]" from "z" in common /z/.

commonvars)	hascommonrv  rw  r   r   r   r   r(  r)  rr   r   r*  r   ro   )r2  r  r~  comvarsr  r   r  r   s           r)   r  r    s   U J%/&&(()) % %x# 	 	AEq"$P PA p776?? SS S%3AGGFOO%D%D%J%J5%Q%QS S SDqwwv446677f%%!U6]1%555fa(4;;+sxx~~>@ @ @ @ ,sxx~~>8@fa(44  .&CHHTNN)K(L,Nfa(( ,.fa(J&&%%a(((ijijijlmlmlmnp p pNN1$h5  (l#L1J>lLr(   c                 0   t          |            d | d                                         D             }g }| d         D ]V}| |d<   |d         dv r||d         |vr|d         }|d         |                                v r t                              |d                    |d         t          v rst
          r|d         t
          vrt          |d	d
          |d<   n|}t          |||dz             }|d         dv r"|d         s|                    d          sd|vr|d         	                    dd          dk    rt                              |           |d         dk    r|d         t          |d         <   |                    |           X|S )Nc                 6    i | ]\  }}d |vs
d|d          v||S )rn  r	  r'   )rv   keyr  s      r)   
<dictcomp>zanalyzebody.<locals>.<dictcomp>  sB       CU""heJ6G&G&G 	U&G&G&Gr(   r1  r0  re  r2  r  rq   r6  z
      Tas_interfacesaved_interfacer   r~  r  r  r  r   r
   pythonmoduler  )rc  rV  rw  r#   r*  r$   crack2fortrangenr  r  r   r   r   )r2  r6  rr  maybe_privater0  rx  as_s          r)   r  r    s     ---//  M D6]  !.W:333AfIT$9$9iyM..0000  6+++yI%% QvYi77#3>$6 $6 $6A   Ca#*---W:<<<y =!"!7!7 =!**W:c2&&.88q!!!!zX%%+,V9ai(KKNNNNKr(   c                    t          |            t          }i }d| v r| d         3d }t          dk    r%t          dt	          | d                   z             nvt          | d                                                   D ]N}| d         |                             d          dvr| d         |         ||<   7| d         |         d         ||<   O||fS )Nr  r   z6buildimplicitrules: no implicit rules for routine %s.
rq   r4   )rJ   rY  )rc  defaultimplicitrulesr   r2   r   rv  rw  r  )r2  implicitrules	attrrulesr~  s       r)   buildimplicitrulesr    s    (MIU$ M{{MPTUZ[aUbPcPcce e e %
+002233 D D$Q'++J77?VVV',Z'8';M!$$#(#4Q#7
#CIaLL)##r(   c                     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    s=    Q1AAww3,
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                              |           rdd| fS t          |           }|D ]b}t          |          |k    rt          j        d|z   dz   |           r3t          j        d|z   dz   t          j	                  }|                    |           }|r	 |                    |           }|rG|
                    d          d	dd
|
                    d          }|                    |          }|Gt          |i i           }	|                    |           }|rG|
                    d          d	dd
|
                    d          }|                    |          }|Gt          |i i           |	z
  }
|                    |           }|rG|
                    d          d	dd
|
                    d          }|                    |          }|Gt          |i i           }|                    |           }|rG|
                    d          d	dd
|
                    d          }|                    |          }|Gt          |i i           }|
dz  |	z   |k    r|
dz  |	z   |k    r|
|	|fc S n# t          $ r Y nw xY w nddS )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  r7  r8  r  g      ?g      ?)NNN)r8   r  r   getlincoef_re_1r   rX   r   r  r   r   r   )r  xsetr   len_er  r`  r   ra  eerx  r,  c2s               r)   
getlincoefr    s?   *q"b!!""!Tz   Q !QwFFE ' 'q66E>>9&*U2A66 	z.25GGNNJJqMM 	ZZ]] (****AAArxx/@/@/@BBBB  ( 2r2&&ZZ]] (****AAArxx/@/@/@BBBB  ( 2r2&&*ZZ]] (****CCC'1B1B1BDBBB  ( 2r2&&ZZ]] (****CCC'1B1B1BDBBB  ( BB''GaK1$$S1):):a7NNN   E?	@ s   "% 
22GJ55
KKz\b[a-z][\w$]*\bc                 
   | |v r||                               dg           }d||          v rat          ||                    sLt                              ||          d                   D ]%}||vr||v r|| k    r|                    |           &|d d          D ]E}|                     |g           pt          |||          D ]}||vr|                    |           Fn!t          dt          |           z             g }||| <   |S )Nru  rq  z,_get_depend_dict: no dependence info for %s
)r  isstringword_patternr  r*  _get_depend_dictr2   r   )rq   r1  depswordswordr  s         r)   r  r  F	  s1   t||T
x,,$t*Xd4j%9%9$,,T$Z_== ' ' u$$$$,,LL&&&!!!H 	$ 	$DXXdB'' :'dD99$ $E>>LLOOO$	$ 	?4::NOOODJLr(   c                 x    t          |                                           }i }|D ]}t          || |           |S r,   )rv  rw  r  )r1  rz   depend_dictr   s       r)   _calc_depend_dictr  \	  sF    EK / /D+....r(   c                 ~    t                     g }t                                                    D ]"}|         s|                    |           |= #rWt                                                    D ]3\  }}fd|D             }|s|                    |           |= .||<   4W fd|D             S )Nc                     g | ]}|v |	S r'   r'   )rv   r   r  s     r)   rx   z$get_sorted_names.<locals>.<listcomp>m	  s#    :::Qk)9)9q)9)9)9r(   c                     g | ]}|v |	S r'   r'   )rv   rq   r1  s     r)   rx   z$get_sorted_names.<locals>.<listcomp>s	  s    333TddllDlllr(   )r  rv  rw  r*  rV  )r1  rz   rq   lstnew_lstr  s   `    @r)   get_sorted_namesr  d	  s   #D))KE[%%''(( " "4  	"LLD!
 ,k//1122 	, 	,ID#::::#:::G ,T"""%%$+D!!  , 4333U3333r(   c                     | d         dv r
| dd         } t                               |           rdS t                              |           rdS d| z   dz   S )	Nr   '"r   r         zkind(r8  )r  r   real8pattern)rc   s    r)   
_kind_funcr  v	  sd    ayE"6"" q			F	#	# qVc!!r(   c                 f    d| z  }|dk    rdS |dk    rdS |dk    rdS |dk    rd	S |dd
z  k    rdS dS )Nr      r   i   r3  l        r  l            r        r   r'   )r   r   s     r)   _selected_int_kind_funcr  	  sZ    
aAF{{qG||qG||qG||qAH}}r2r(   c                     | dk     rdS | dk     rdS t          j                                                    }|                    d          r	| dk    rdS n| dk     rdS | dk    rdS d	S )
N   r  r  r  )
aarch64alphaarm64	loongarchmipspowerppcriscvs390xsparc!      r   r   )platformmachiner   r   )pr   radixr  s       r)   _selected_real_kind_funcr  	  s     	1uuq2vvq  &&((Gwxx 772  r662"WW22r(   c           	      ~	   t          j         |          }t          j         |          }dt          fdt          fdt          ffD ]\  }}||vr|||<   g }t	          |           D ]1}d| |         v r%d| |         d         v r|                    |           2t          j        dt          j                  }t          j        dt          j                  }	t          j        dt          j                  }
|D ]}d	| |         v r| |         d	         }t          | |                   r#|
                                }d
D ]} |j        | }|                    d|          }|	                    d|          }d}d| |         v r]d| |         d         v rMt          |          }|                    d| |         d         d         z   d          }t          |          |k     }|s|
                    |          s|                    d          }t          |          dk    r[d                    |d d                   
                                                    |d         
                                d          }t#          | |                   rt%          |          }t&                              |          D ]}t%          ||                                |                                         
                                                    dd                    ||                                |                                <   d                    |          }n(t/          | |                   rt1          d| d           d | |         d         D             pd gd         }t&                              |          rd}nt4                              |          rd}	 t7          ||||          ||<   n2# t8          $ r%}|||<   t1          d| d|d           Y d }~nd }~ww xY wt;          | |                   r3t=          ||         t>                    rtA          ||                   ||<   |
                                }||k    r||         ||<   tC          | |                    t1          d|d           |S ) NrT  selected_int_kindselected_real_kindrn  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*\)rq  ))z.false.False)z.true.Truez
kind("\1")zselected_int_kind(\1)Fro  r   r
   r   r   r$  r  zAget_parameters[TODO]: implement evaluation of complex expression r   c                     g | ]>}|                     d           |                    d                                           ?S )r  )r   removeprefixr   )rv   rF  s     r)   rx   z"get_parameters.<locals>.<listcomp>	  sQ     5 5 5,,{335{3399;; 5 5 5r(   r   r  r  )dimspeczget_parameters: got "" on zget_parameters:parameter z does not have value?!
)"r  r  r  r  r  r*  r   r   r   	islogicalr   r   subrX   r   r)  r   isdoublerv  r  r  r  r   	iscomplexr2   r  r  
param_evalr   r  r  r8   r  r  )r1  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  r   nls                        r)   r  r  	  s   Y}%%Fy''H
++-DE,.FGK " "
d x!HTNKd## " "a  [DGJ4G%G%Gq!!!j<bdCCG:8"$@ @z?G G PO PO$q'>>QAa!! )GGII ) )D
 "	4(AAM1--A$(()A1EEA  Ka(( T!W^444!$QJ		#Q(?(G"GLLA #&a&&:"5K Q'--a00 QB2ww{{GGBssG,,2244<<RV\\^^RPP Q   	M!WW&//22 H HA,0!''))AEEGG+,2244<<S#FF-H -HBqwwyy())GGBKK47## M LFGL L L M M M5 5!%a!45 5 5 ?9=CG ##A&& $$Q'' C&q(FGLLLq		 C C Cq	AAA!AAABBBBBBBBC Q   +Zq	3%?%? +q	NNq	BQww#AYr
$q'NNNMMMMNNNNMs   O22
P!<PP!c                 .    | dv rdS t          | |          S )N)z(:)(*)r   r  )_eval_scalar)lengthr  s     r)   _eval_lengthr  	
  s#    $$$u'''r(   z\d+_c                    t          |           r|                     d          d         } 	 t          | i |          }  t          | t                    rt
          nt          |           } ni# t          t          t          f$ r | cY S t          $ rB}t          d|d| dt          |                                          d           Y d }~nd }~ww xY w| S )Nr   r   r2  z" in evaluating z (available names: r   )_is_kind_numberr)  r  r  r   r   r  r  r  r   ro   rv  rw  )r  r  r   s      r)   r  r  
  s   u $C  #	5UB''8E3//8S%@@{I.    5 5 533tFKKMM22224 	5 	5 	5 	5 	5 	5 	5 	55 Ls   =A* *C	C8CCc                 (  >?@ t          |            t          |           \  }}t          j        | d                   @| d         dk    r| d         @vri @| d         <   d| d         v r@d= d| d         d         v rv| d         d         d         }t          @          t          d | d         D                       z  D ]2}d	D ]-}||v r't	          @                    |i           |          @|<   .3g }| d
         }|D ]0}	 @|          |                    |           !# t          $ r Y -w xY wt          @	                                          D ]}||vr|                    |           t          @t          |                     }	i }
t          j        d          j        }t          @	                                          D ]} ||          }|rr||                                |                                         }	 |
|          G# t          $ r- t          j        d|z  t          j                  j        |
|<   Y }w xY w|D ]}|d         t          |	                                          v r%t	          @|         ||d                            @|<   d@|         vrd@|         v rd@|         d         v s|r|d                                         }t          ||         	                                          D ]m}|dk    r||         |         dk    r|@|         vr||         |         @|         |<   =|dk    r*||         |         D ]}t	          @|         |          @|<   nn3|| d
         v r)t'          dt)          |          d| d         d           d@|         v red@|         d         v rU@|         d         d         }	 t+          t-          |i |	                    }n# t.          $ r Y nw xY w|@|         d         d<   d@|         v red@|         d         v rU@|         d         d         }	 t+          t-          |i |	                    }n# t.          $ r Y nw xY w|@|         d         d<   i }d@|         v r@|         d         }|                                 g @|         d<   d\  }}}}}|D ]}|dd         dk    r%|dd                                         dd         }n|dd         dk    r%|dd                                         dd         }n|dd         d k    r%|dd                                         dd         }n|dd!         d"k    r%|d!d                                         dd         }nL|dd#         d$k    r%|d#d                                         dd         }nt	          @|         |          @|<   |rd@|         vrg @|         d<   d% t5          |                              d&          D             D ]I}|                    d'd          }|@|         d         vr!@|         d                             |           Jd}|rf|                    d(d)          }|                    d*d+          }d$@|         vr|g@|         d$<   n!@|         d$                             |           d}|d @|         vrg @|         d <   t;          d, t5          |                              d&          D                       D ]3}|@|         d          vr!@|         d                              |           4d}|wd"@|         vrg @|         d"<   d- t5          |                              d&          D             D ]3}|@|         d"         vr!@|         d"                             |           4d}|rd@|         vrg @|         d<   t;          d. t5          |                              d&          D                       D ]Q}	 t=          ||	          }n0# t>          t@          t          f$ r t'          d/|d+           Y nw xY w|d0k    rd0nd1}||k    r|g}n#t5          |d0                              d2          }tC          |          d3k    r	d1|v rd1g}d1}tC          |          dk    r|d         |k    r
d4|d         g}tC          |          d3k    r[tE          tF          j$        j%        |          \  }}||z
  dz   }|&                    tF          j'        j(        5          }i }| d         D ]}tG          j)        |          } |*                    |           r	 |+                    |           \  }}!||!fd6}"t          |,                                          }#|#-                    |!,                                           n:# t\          $ r-}$d}"t          |,                                          }#Y d}$~$nd}$~$ww xY wt          @fd7|#D                       }%|"t          |%          f||<   |||<   @|         d                             |           Sd"@|         vrKd
| v rF|| d
         v r;@|                             d g           }&g }' t_          t`          tb          td                    @|                   }(tg          @|                   rti          @|         d                   D ]\  })}|                    |          >>n|(r>5                                D ]\  }\  }*}+>?fd8?t                      }, ?||,           ||&v sd9@|         v s
d @|         v rB|*||,vrd:}- |*tG          j)        d;| d<|) d=                    }.|.&                    tF          j'        j(        5          }.|.@|         d9<   |g|+z   @|         d <   d"@|         vrd;| d<|) d>| g@|         d"<   n{d?}-d@|         vrg @|         d<   d@@|         d         vr!@|         d                             d@           |&                    |           |'                    d;| d<|) d>|            @|                             dg           }/dA|/v sdB|/v s|/                    |-rdBndA           |/r|/@|         d<   >>5                                D ]\  }\  }*}+@|                             d g           }%@|                             dg           D ]n}0|06                    d           rWd7                    |0                                          }0|%8                    |0dCd                             dD                     o|%r%t          t          |%                    @|         d <   ||%vr|&                    |           nts          @|                   rd@|         v rd1@|         d         v r4tu          @|         d         d1         |	          }1|1@|         d         d1<   nRd@|         d         v rBtu          @|         d         d         |	          }1@|         d         d= |1@|         d         d1<   |'r|'@|         d"<   |&r%t          t          |&                    @|         d <   d9@|         v rd@|         vrg @|         d<   dA@|         d         vr1dB@|         d         vr!@|         d                             dA           d @|         vrg @|         d <   t          |
5                                          D ]=\  }} |@|         d9                   r!@|         d                              |           >@|         d          s	@|         d = tw          @|                   r%ty          @|         d9         |	          @|         d9<   t          @	                                          D ]}|| d         k    rd$@|         v r@|         d$         | d$<   | d         dk    rdE| v r/| dE         @v r%t{          @|         @| dE                            @|<   dF| v r| dF         }2|2                    dGd          }3|2|3k     }4|3                    dHd          }2|2|3k     }5t|          d                             |2          }|rt          |@                    dI          |@                    dJ                    \  }6}7}}8t          |6|7          \  }9}:};|6@|         d<   	 | dE         r|6@| dE                  d<   n# t.          $ r Y nw xY w|9r;d|9v r,	 t-          |9d         i |	          |9d<   n# t.          $ r Y nw xY w|9@|         d<   |:r|:@|         d<   |;r|;@|         dK<   |4rt	          @|         dG          @|<   |5rt	          @|         dH          @|<   t'          dLt)          | dF                   z             | d         dMvrdN| v r$t          j        | d
         | dN         z             }<nt          j        | d
                   }<t          @	                                          D ]@} t_          t          t                    @|                   r|<                    |           AdO| v r|<8                    t          | dO         	                                                     t          | dO         	                                          D ],}| dO         |         D ]}||<vr|<                    |           -| d         dk    r;dE| v r|<                    | dE                    n|<                    | d                    | d         dPv r'| d         }=|=@v rd@|=         v r@|=         d         | d<   | d         dQk    r4|<8                    t          @	                                                     t          @	                                          D ]	}||<vr@|= 
@S )RzH
    Sets correct dimension information for each variable/parameter
    r1  r2  r   rq   r
   rn  c              3   &   K   | ]}|d          V  dS )rq   Nr'   )rv   rx  s     r)   r  zanalyzevars.<locals>.<genexpr>2
  s&      $F$F1QvY$F$F$F$F$F$Fr(   r0  r  r6  z[A-Za-z][\w$]*z.*\b%s\br   r4   r  	undefinedz"analyzevars: typespec of variable z is not defined in routine z.
rp  rX   ro  rT  )NNNNNNrC  r  r   r   r   r  ru  r   rt  r  rs  c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzevars.<locals>.<listcomp>
  s     UUUAaggiiUUUr(   r&  r   z\n\nz

z\n r   c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzevars.<locals>.<listcomp>
  s     '_'_'_a		'_'_'_r(   c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzevars.<locals>.<listcomp>
  s     TTTAaggiiTTTr(   c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzevars.<locals>.<listcomp>
  s     MMMqMMMr(   z4analyzevars: could not parse dimension for variable r  r   z@:@r3  1)languagec                     | |z
  |z  S r,   r'   )rF  r,  rx  s      r)   solve_vzanalyzevars.<locals>.solve_v
  s    01A{(:r(   c              3   8   K   | ]}|j         v |j         V  d S r,   )r  )rv   rF  r1  s     r)   r  zanalyzevars.<locals>.<genexpr>
  s9       -7 -7/0'(v~~ %&F'5~~~-7 -7r(   c                                          | d g g          d         D ]'}||vr!|                    |            ||           (d S )Nr   )r  add)r  r  v1coeffs_and_depscompute_depss      r)   r  z!analyzevars.<locals>.compute_deps
  s`    *9*=*=a$*L*LQ*O !? !?B')~~(,(4R(>(>(>!? !?r(   rq  Fzshape(r  r8  z) == Tinr  r  r  r'  r   r  pure	recursiver9  r  rr  z'analyzevars: prefix (%s) were not used
)r  r  r  r  r  r  )r   r   rh   )Drc  r  r  r   rx  r  r*  KeyErrorrv  rw  r  rn  r   r   r   r  r   r   r   r2   r   r   r  r   reverser   r(  r)  r   r{   param_parser   r  rX   r  r   ExprparsetostringLanguager   	as_symbolr  linear_solvesymbolsrg  RuntimeErrorl_orisintent_inisintent_inoutisintent_inplaceisarrayr  rV  r   r   r  r  r  isscalarr  r  rO  r  r   r  isintent_callbackisintent_aux)Ar2  r  r  genr   r~  svarsr6  r,  r  dep_matches
name_matchr  r   ln0r   dimension_exprsr  dimr  ru  rt  rs  r   tmpr$  dim_charr  rL  d2dsizesolver_and_depsrF  rx  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
  rr  
neededvarsrq   r  r  r1  sA                                                                 @@@r)   r  r  "
  sS    1%88M99U6]##DW~##fT(A(A U6]	U6]Hvr***-#J/CYY$F$Ff$F$F$F!F!FF B B. B BACxx"-dhhq"ooq"A"AQB E=D  	GGLLOOOO 	 	 	D	$))++  D==LLOOOD"3E":":;;F K-..4J$))++ K KJqMM 	K!''))AEEGG#$AKA K K K!#K1,=rt!D!D!JAK		K  MB MBQ44	(())))!$q'9QqT?;;DGT!W$$a((Z47:;N-N-N  1A$**,,C!-"4"9"9";";<< B B
??}S/A!/D/S/S$DG++)6s);A)>DGAJJ*__%23%7%: B B*5d1gq*A*AQB %-''GQv0 1 1 1T!W$$Q///GN+E2DB//00AA    D12Q'.T!W$$a000GN+F3DB//00AA    D23Q'/a  7:&DLLNNN"$DGJ/K,C +! +!RaR5K''QRR5;;==!B$/CCrrUh&&ekkmmQrT2FFrrUh&&ekkmmQrT2FFrrUg%%qrrU[[]]AbD1EErrUf__abbEKKMM1R40DD)$q'155DG "tAw..,.Q)UU1G1G1M1Me1T1TUUU : :iiR00d1gh&777 GH-44S999!F  <<&99D<<55DT!W,,+/&QQ..t444D%tAw..,.Q)&'_'_>&;Q;Q;W;WX];^;^'_'_'_`` 8 8DGH$555 GH-44Q777!F$d1g--+-Q(TT1F1F1L1LU1S1STTT 7 7DGG$444 GG,33A666 E A3{$q'11')Q$"MMN3,?,?,E,Ee,L,LMMM  ?3 ?3A
 (622&
H=   0()0 0 0     '(3hhssCHH}}&Z+As3399%@@2ww!||r		!U2ww!||1(9(9!2a5\2ww!||!$X]%8"!=!=B "R!!NNH4E4GNHH +-!&v K KA ( 21 5 5A$~~a00 K!G+0+=+=a+@+@DAq56! %; %; %; %; 36aiikk2B2BK$/$6$6qyy{{$C$C$C$C'3 !G !G !G /3G25emmoo2F2FKKKKKK!G *- -7 -7 -7 -74?-7 -7 -7 *7 *7 6=d6ll5J 2 .=*GK(//2222$q'!!foo!uV}:L:L
 !W[[2..FH0k>.0 004Q9 9JtAw W>%d1gk&:;; K1 K1DAq&5&9&9!&<&<O&.# := 2A1F1F1H1H 6= 6=-A~? ? ? ? ? ?
 (+uuH(LH555 !V$'47NN$,Q$7$7
 !)%1ax6G6G /4'-vh.@$6Q$6$6!$6$6$6/8 /8 (9 (9'+}}-5->-@ (5 (B (B/3Q 67C$JQ 1#*$q'#9#9 )B(A(Aa(A(Aa(A(A8CDGG$4 /3#+47#:#:8:DGH$5#'tAwx/@#@#@$(GH$5$<$<T$B$B$B &a 0 0 0 ($=Q$=$=!$=$=!$=$=!? !? !?%)!W[[R%@%@F$.&$8$8'1V';'; &2=$MJJ:!O !O !O% =6<Q
 3&21@1F1F1H1H 	1 	1-A~%)!W[[2%>%>F&*1gkk*b&A&A G G#%==#:#: !G)+)<)<B$*MM"QrT(..2E2E$F$F$F% F48V4E4EQ 1  &a 0 0 0WK1X $q'"" 
>!T!W,,d1gn555!-d1gn.Ec.J.4"6 "67=Q/44$q'."999!-d1gn.Ee.L.4"6 "6 GN3E:7=Q/4 ,#+Q  6$(V$5$5Q!$q'>>a((&(Q
#$q'*"555$q'*"555Q
#**:666tAw&&$&Q! !2!2!4!455 4 4DAqqa 4Q)00333Awx( *Q)Q   B+DGCL&AAQ$))++ +` +`fa   $QfW~++u$$xD)@)@(a$uX2GHHDGu$$xB**VR00C"$)mF["55B!#s]E$Q--b11A `:HGGFOOQWWW-=-=;? ;?7(D%;H$h<0 <08
J.6Q
+!$X MDLU8_ 5j A( ! ! ! D!% A%33!)9=(26(:B:H :HJv$6$6'0 !) !) !)$(D!)6@DGN3% A6@DGN3# ;2:DGJ/! C&1$q'6&B&BDG  H&1$q';&G&GDGFeT\oI^I^^` ` `>VVV5  5=53F#FGGJJ5=11Jdiikk"" 	% 	%A4t%|44T!W== %!!!$$$ed5>#6#6#8#899:::%.--//00 - -w* - -A
**"))!,,,- >Z''5  !!%/2222!!%-000>777=Dt||DJ 6 6"&t*X"6h>V##d499;;//000diikk"" 	 	A
""GKs   D  
D-,D-H4IIO22
O?>O?Q!!
Q.-Q./a  *a-,a-A&g,,
h#	6#h	h#	EAE'E'
AE4E3AE4E>AFF
AF&F%AF&z\A[a-z]+[\w$]*\Zc           	      r   |D	 t          | ||          }n/# t          $ r"}| }t          d| d| d           Y d}~nd}~ww xY w|S t          |          dk     s|ddt          |          dz
           dk    rt	          d| d	          |dd
                             d          }t          |          dk    r|d                             d          }t          |          dk    r7t          |d         |          }t          dt          |          dz             }nit          |d         |          }t          |d         |          }	t          t          |          t          |	          dz             }nt	          d          | 	                    d          r
| dd         n|                     d          } g }
| D ]W}	 t          |||          }n-# t          $ r }t          d| d|d           Y d}~nd}~ww xY w|

                    |           Xt          t          ||
                    }|S )a  
    Creates a dictionary of indices and values for each parameter in a
    parameter array to be evaluated later.

    WARNING: It is not possible to initialize multidimensional array
    parameters e.g. dimension(-3:1, 4, 3:5) at this point. This is because in
    Fortran initialization through array constructor requires the RESHAPE
    intrinsic function. Since the right-hand side of the parameter declaration
    is not executed in f2py, but rather at the compiled c/fortran extension,
    later, it is not possible to execute a reshape of a parameter array.
    One issue remains: if the user wants to access the array parameter from
    python, we should either
    1) allow them to access the parameter array using python standard indexing
       (which is often incompatible with the original fortran indexing)
    2) allow the parameter array to be accessed in python as a dictionary with
       fortran indices as keys
    We are choosing 2 for now.
    Nzparam_eval: got "r  r   r3  r   rh  zparam_eval: dimension z can't be parsedr   r'  r   r  zEparam_eval: multidimensional array parameters {dimspec} not supportedz(/r   )r  r   r2   rX   r   r)  r  r   r8   r   r*  r  zip)r  r  r  r  r  r   dimrangeboundlbounduboundv_evalitems               r)   r  r    s   & 	;Q&))AA 	; 	; 	;A999!999::::::::	;  7||a7#3#3S\\!^#34<<L'LLLMMMqt}""3''H
8}}A;$$S))x==AV44EQE

1--HH !f55F !f55FS[[#f++a-88HH 3 4 4 	4 LL&&	-1R4A44S99AF  	>h//DD 	> 	> 	><<<$<<<========	>dS6""##AHs*    
A=AG
H!G<<Hc                    d| v r| d|                      d                   }| |                      d          dz   |                     d                   }t          t          ||                    }t	          ||         |                   S | |v rt	          ||                    S |D ]}t          j        d|z   dz   t
          j                  }|                    |           }|rX|	                    d          t	          ||                   z   |	                    d          z   } |                    |           }|X| S )	a  Recursively parse array dimensions.

    Parses the declaration of an array variable or parameter
    `dimension` keyword, and is called recursively if the
    dimension for this array is a previously defined parameter
    (found in `params`).

    Parameters
    ----------
    d : str
        Fortran expression describing the dimension of an array.
    params : dict
        Previously parsed parameters declared in the Fortran source file.

    Returns
    -------
    out : str
        Parsed dimension expression.

    Examples
    --------

    * If the line being analyzed is

      `integer, parameter, dimension(2) :: pa = (/ 3, 5 /)`

      then `d = 2` and we return immediately, with

    >>> d = '2'
    >>> param_parse(d, params)
    2

    * If the line being analyzed is

      `integer, parameter, dimension(pa) :: pb = (/1, 2, 3/)`

      then `d = 'pa'`; since `pa` is a previously parsed parameter,
      and `pa = 3`, we call `param_parse` recursively, to obtain

    >>> d = 'pa'
    >>> params = {'pa': 3}
    >>> param_parse(d, params)
    3

    * If the line being analyzed is

      `integer, parameter, dimension(pa(1)) :: pb = (/1, 2, 3/)`

      then `d = 'pa(1)'`; since `pa` is a previously parsed parameter,
      and `pa(1) = 3`, we call `param_parse` recursively, to obtain

    >>> d = 'pa(1)'
    >>> params = dict(pa={1: 3, 2: 5})
    >>> param_parse(d, params)
    3
    r7  Nr   r8  r  r  r  r  )
r  rfindr8   r  r   r   r   r   r   r   )r$  r  dnameddimsr[   r  r`  r   s           r)   r  r    s8   r axx,166#;;,!&&++a-,- Kv..//6%='(((	
f6!9~~ 	" 	"A:$q(+==rt D 

1A "GGH%%q	NN#%&WWW%5%56JJqMM  " r(   c                 (   | }t                               |            }|rt          |          \  }}t          | |d         |          }d}| D ]8}	|	                                }	|	t
          j        t
          j        z   vrd}	||	z   }9|d         dk    r|dz   }n|dz   }|} | |d         v s
| |d         v r| dz   } | |d         v | |d         v | |v rAd	}
| t          |
          z   |v r|
d	z   }
| t          |
          z   |v | t          |
          z   } |r||d         | <   ns| |d         vr-||d         v r|d         |         |d         | <   ni |d         | <   d
|v r8||d
         |d         z   v r%t          |d         |          d          |d         | <   | S )Nr1  e_r   r   r  _er6  r   r   r4  r5  r  )
analyzeargs_re_1r   r  r  r   rc   ascii_lowercasedigitsr   rx  )r,  r2  r6  orig_a	a_is_exprr  r  atnar   r~  s              r)   	expr2namer`  :  s   F$**1---I #5e#<#< yq%-?? 	 	A		A.>>>aBBb6S==cBBdB5=  Av$6$6CA 5=  Av$6$6Dyy#a&&jD  AA #a&&jD  AJ 	IfaE&M!!v&&#(=#8fa  #%fa %FeK.@5CV.V$V$V*5=+;ZHHE&M!Hr(   c                 H   t          |            t          |           \  }}d| vrg | d<   g }| d         D ](}t          || |          }|                    |           )|| d<   d| v rGt	          | d                                                   D ]\  }}|D ]}|| d         vri | d         |<    | d         D ]F}|d         |v r:d| vrg | d<   |d         | d         vr!| d                             |d                    Gd| v r!| d         | d         vri | d         | d         <   | S )Nr6  r  r1  r0  rq   r4  r   )rc  r  r`  r*  rv  rV  )r2  r  r   r6  r,  r~  args1rx  s           r)   r  r  _  s   )%00M1UfD6]  a%%AE&M%U7^113344 	* 	*HAu * *E&M))')E&M!$* 6] 5 5V9%''%'k"yk 222k"))!F)4445U8_E&MA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_exprdictre    s    !S 'I&&!U $F##!W 'I&&!T 
a
!
!!r(   c                    | |v rt          ||                    S |                                 } t                              |           rddiS t                              |           }|rNd|                                v r4|                    d          rt          dt          |           z             ddiS t                              |           }|rNd|                                v r4|                    d          rt          dt          |           z             ddiS dD ]V}d t          | |	                              d
|z   d
z             D             D ]}||v rt          ||                   c c S  Wi }t                              |           rt          | dd         ||          }nt                              |           }|ri|                    d          }t          |                    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 )Nr4   r  rq   z:determineexprtype: selected kind types not supported (%s)
r7   r5   )+r  r   r  c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   z%determineexprtype.<locals>.<listcomp>  s     ZZZ!''))ZZZr(   r=  ri  r   r   rn  r   r  r*  r   )r4   rp  z>determineexprtype: could not determine expressions (%s) type.
)re  r   determineexprtype_re_1r   determineexprtype_re_2r"  r   r2   r   determineexprtype_re_3r(  r)  determineexprtype_re_4r  determineexprtype_re_5)r-  r1  rulesr   opr  r  rns           r)   r  r    s   t||T
+++::<<D##D)) 'I&&$$T**A 'Q[[]]""qwwv"MPTUYPZPZZ\ \ \I&&$$T**A $Q[[]]""qwwv"MPTUYPZPZZ\ \ \F##" 1 1ZZ^D%C%C%C%I%I#PR(UX.%Y%YZZZ 	1 	1ADyy'Q0000000 	1 	A##D)) :d1R4j$66"((.. 	:B!!''&//4??A "Z1__jM :a5E>>+E"Q%L999Aw%'#sDDD ^MQUVZQ[Q[\	^ 	^ 	^Hr(   r   Fc                 l   t          |            d}t          | t                    rO| D ]J}|r1|d         dv r'|d         t          v rt          r|d         t          vr5|t          |||          z   }K|S d}d}d}| d         }|dk    rdS g }	d| v r| d         }d| v rt| d         }
| d         D ]=}t          || |	          }t          |
|                   s|	                    |           >| d         d	k    s|	rd
d	                    |	          z  }d}d| v rIt          | d         
                                          D ]!}||t          z   |d| d         |         }"|                     dg           d d          }|d	k    rd|v r|                    d           |r'||t          z   dd	                    |          d|}d}d| v rt          | d         |t          z             }d}d| v rt          | d         |t          z             }|dk    rd}d}d| v r0d| d         z  }| d         |	vr|	                    | d                    t          | d         |t          z   |          }t!          | | d         |	|t          z   |          }
d}d| v r|sd| d         z  }d| v r\d}t          | d                                                   D ]-\  }}||t          z   d|dd	                    |          d}.||z   }|dk    r|dk    rd}|||d|||d||||
|||d |d|}|S )!Nr
   r2  r  rq   r  r  r6  r1  r   z(%s)r'  r  r   r  callbackintent(z) r  r  r  r   z result (%s)r0  r  z! in %sr  zentry r7  r8  r  r  zend )rc  r  rv  r#   r$   r  r`  r-  r*  r   rw  r   r  r  use2fortrancommon2fortranvars2fortranrV  )r2  rr  r  ry  ru  r  rq   r6  	blocktypeargslr1  r,  r  r~  
intent_lstr  r  r   r0  messentry_stmtsr  s                         r)   r  r    sB    
C%  	L 	LA QwZ#===V9	)) 6)!;!;(ClKKKKCC
FDDgIIrEV}V}v 	  	 A!UE**A$T!W--  Q>Z''5'CHHUOO+DU""e./446677 	R 	RA  #--E:L4Ma4P4P R8R((+JJ:#;#;*%%% 8,,cGmmmHHZ0000$$8 C~~%,g66F5hw??"""F5%/1?%''LLx)))E&M3=|TTTDuV}eS7]O O ODD|5=(%w--//00 	I 	IDAq([#---CHHQKKKKIKKk!L  T^%;%;VVYYYddFFFDD:J:JCCQUQUW]W]_c_cehehehjsjsjsuyuy{CJr(   c           
          d}t          |                                           D ]P}|dk    r#||dd                    | |                   }+||d|dd                    | |                   }Q|S )Nr
   r  zcommon r'  zcommon /z/ )rv  rw  r   )r  rr  ry  r~  s       r)   ru  ru    s    
C&++--   L L==%(S###sxxq	/B/B/BCCC*-#sssAAAsxxq	7J7J7JKCCJr(   c                 2   d}t          |                                           D ]}||d|d}| |         i k    r|r|d         dk    r
|d d         }1d| |         v r| |         d         rd|z  }d| |         v r| |         d         rtd}t          | |         d                                                   D ]D}|| |         d         |         k    r|||}d}%|||d	| |         d         |         }d}E|r|d         dk    r
|d d         }|S )
Nr
   zuse r'  r   r  z%s only:r  r   z=>r[  )r  rr  ry  r   r   r~  s         r)   rt  rt    sa   
C#((**  "sCCC+q6R<< s2w#~~#2#hSVAv$CCF??s1ve}?A#a&-,,..//  Aua(((&)c11aa0CAA*-#qq!!!SVE]15E5EFCAA 	3r7c>>crc(CJr(   c                     | d         }g }|D ]J}	 t                      d|z           } ||           r|                    |           ;# t          $ r Y Gw xY w|S )Nr  zisintent_%s)globalsr*  r  )rz  r  ry  r  rf  s        r)   true_intent_listr  '  s    
h-C
C # #	#		-&01A qvv #

6"""	  	 	 	D	
 Js   A
AAc           	      	   t          |            d}g }|D ]!}|| d         v r|                    |           "d| v r;| d         D ]2}||v r||vr|                    |            t          d|z             3d| v r|                    | d                    |s=t	          |                                          D ]}||vr|                    |           |D ]}d||         v rE||         d         D ]6}||v r0d||         v r&|||         d         v rt          d|d|d	           7d
| v r|| d
         v rt          ||                   r	||d|}||d|}t          ||                   r	||d|}||v rd||         vrd}	| d         D ]}
||
d         k    r|
d         dk    rd}	 n|	r||vr#t          |           t          d|z             || d         k    r#| d         dk    s| 
                    d          r6d||         vrRd||         v rd||         d         v r||v r	||d|}it          ||                    t          d|z             ||         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}nJ|d |d          }n<d#|v r&|d$|d#         }d%|v r|d&|d%         d}nd'|z  }nd%|v r|d(|d%         d}d)}d||         v rUd* ||         d         D             }|rd+|v rd,|v r|                    d,           |r|d-d.                    |          }d.}d/||         v r+||d0d.                    ||         d/                   d}d.}d1||         v r6t          ||                   }|r||d2d.                    |          d}d.}d3||         v r+||d4d.                    ||         d3                   d}d.}d||         v r+||d5d.                    ||         d                   d}d.}d6||         v r]||         d6         }||         d         d7v r4	 t          |          }d|j        d.|j        d}n# t"          $ r Y nw xY w|d8|d6|}n|d8|}|||}|S )9Nr
   r1  r  z7vars2fortran: Confused?!: "%s" is not defined in vars.
r  ru  z;vars2fortran: Warning: cross-dependence between variables "z" and "r  r4  zintent(callback) z	external z	optional r4   r   r0  rq   r2  r   r   z/vars2fortran: No definition for argument "%s".
r   rn  r  z-vars2fortran: No typespec for argument "%s".
rh   rr  r7  r8  ro  rp  r   )r   r  z*(rX   z(len=rT  z,kind=z%s)z(kind=r   c                     g | ]}|d v|	S ))r  r'   )rv   r   s     r)   rx   z vars2fortran.<locals>.<listcomp>  s,     . . .!,, ,,,r(   z
intent(in)zintent(out)r  r'  r  z
dimension(r  rs  rt  zcheck(zdepend(rq  )r  r(  z :: )rc  r*  ro   r  rv  rw  r-  
isoptionalshowr2   r  r  r   r  r  r5   imagr   )r2  r1  r6  rr  r  ry  noutr,  r$  r   rx  vardefr  r   r  r  r  s                    r)   rv  rv  5  s   
CD  fKKNNNu|$ 	T 	TADyyD==KKNNNNQRRT T T TUE*%&&& diikk"" 	 	A}}A g, g,tAw!WX& n n99T!W!4!4d1gh>O9O9OGghghghjkjkjkln n n%A{);$;$; a)) @363QQ?'*sCCC3C$q'"" 8+.3QQ7DyyZtAw66D6]  &	>>ajJ&>&>DE D==JJJFJKKKfW~++uyy/B/B+
 T!W$$T!W$$tAwz7J)J)J99/2sCCC;CaMMMDqHIIIa$V
d1g 5 5!'a)<)<)<=FT!W$$Aw~.HHtAw&&Aw~.H(??}
**&,ffhsmmm<$*FFHSMM:  (.@X%%.4ffhv6F6F6FGFF"f-FF8##*0&&(62B2B2BCa  . .tAwz2 . . .D + 4 4$9N9N M*** %+VVSXXd^^^<$q'!!388DGK$89999;FAtAw"47++C G-3VQQQFAd1g(.388DGG<L3M3M3M3MNFAtAw388DGH$566668FA$q'>>QAAwz"&CCCQAA%&VVVQVVV4AA    D&,ffaaa3FF#)6611-F#ssFF+Js   "S
SSc                 |   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   r<  r   r  r   post_processing_hooks__name__traversert  )filespostlisthooks      r)   crackfortranr    s     (!,,,E9%%%"A&&&K1&&H11555% , ,&T]&&&***Hd++,a000(##H!!r(   c                 N    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)r2  pyfheaderfooters       r)   crack2fortranr    s?     5
!
!D
(CF 	F
 C<&  r(   c                     t          | t                    o4t          |           dk    o!t          | d         t          t          f          S )Nr3  r   )r  tuplerX   r8   r   )objs    r)   _is_visit_pairr    s@    sE"" /CA/3q6C:..0r(   c                 8   t          |           r9| d         dk    r| S  || ||g|R i |}|t          |          sJ |S | }| \  }} nd| f}d}t          | t                    rLg }t          |           D ]9\  }	}
t	          |	|
f|g|R ||gz   |d|\  }}||                    |           :ndt          | t                    rMt                      }|                                 D ])\  }}
t	          ||
f|g|R ||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   re  N)parentsr   )r  r  rv  r  r  r*  r  rV  )r  visitr  r   r6  kwargs
new_resultparent
result_keyr[   r  	new_indexnew_itemr  new_key	new_values                   r)   r  r    s   8 c q6^##JU3A$AAA&AA
!!*-----
CC
#t 
%cNN 	, 	,LE5"*E5>5 #K;?#K #K3:fX3E28#K #KCI#K #KIx $!!(+++	, 
C		 	VV
))++ 	0 	0JC!)3, "J:>"J "J29VH2D17"J "JBH"J "JGY "&/
7#	0 
z!!r(   c                 b   |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
}|
8|}|
                                 D ] \  }}t          |          r |	||          }!nd|dk    r^|d	         d         d         }
|}|
                                 D ]3\  }}t          |          rt          j        d|z   dz   d|z   |          }4|'||k    rt	          d| d| d| d| d	d           ||fS d
S )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                 v    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_usage5  sF    {W,u4guEEuw)@@' 'r(   )r  rt  r   r1  r   rq  r   Ncallstatementz
(?<![&])\br  r   zcharacter_bc_hook[r  z]: replaced `z` -> `z`
)rV  ischaracterr   r  r2   )rQ  r  r   r6  r  
parent_keyparent_valuer  r  r  	vars_dictr  r  vds                 r)   %character_backward_compatibility_hookr  #  s     'r{JJC   +++r{1~''''BKN			r{1~''''BKN			I	$??,, 	: 	:KGR2 :%Igy99		: 
		BKN6*		$??,, 	O 	OKGR2 O F!G+e3S7]IO O	 
  > > >c > >"'> >/8> > >?@B B BY r(   __main__r  z-quietz-verboser3  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
r  )r   )r   )r'  )r_  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   versionr  r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r    r   r>  r   r   r=  r%   r   r$   r&   r   r#   r"   r   r*   r2   	_MAXCACHEr  r   rn   r}   r   rr   r{   r~   r   r   r   r  r   r   r   r   r   r   r   r   r   r  r   beforethisafterfortrantypesrO  r  rL  rM  groupbegins77r   groupbegins90r   	groupendsrJ  endifsrI  moduleproceduresrU  rN  r?  r@  rB  rC  rF  rG  rH  rA  rD  rE  rQ  rT  rX  rP  rR  rS  rK  Sr:  r;  r   r-  rV  crackline_bind_1r  r<  rW  r(  rl  r  r+  r  r  r  r  r  r  r  r  r  r  r  rY  r  r  r  ro  rp  rW  rD  r/  r8  r  r  rx  ry  rz  ra  rc  rf  rn  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rY  r  r  r`  r  ri  rj  rk  rl  rm  re  r  r  ru  rt  r  rv  r  r  r  r  r  r  r*  r  r  funcsrf  f2f3showblocklistargvr   ro   r   r   r   OSErrordetailr  r  r/   r'   r(   r)   <module>r     s  I IT 


      				 				                  
          " 		


  
2			 	# # #L     	! 3 3A)62	 6 6A)95
 
 
A e)HQKKE	  , , ,  1 1 1 
3RT::A"*12488?"*12488?"*12488> :99 888 3 3 3>  4 '+! VD VD VD VDr Drzr<t<<bdD DEKL"
?44lEb6bdh6j $jkmkoq q  "*_ 0? ?@BF FGNOBJ 24  457T; ;<CD  (r=->>F FGNOGH r=->>F FGNO7	RZr9i66> >?DE

 rzy&&$77? ?@GH ) #r+-=tDDbdL L  "*88"$@ @AKL2:o 18 89;? ?@KL "*88"$@ @AKL"*88"$@ @AKL"*88"$@ @AKL
44bd< <=EF66> >?HI2:::BDB BCNO 
? .Q QRTRVX XYab2:@@"$H HITU bj00"$8 89?@bj00"$8 89?@rz22BD: :;BC66> >?HI
44bd< <=EFRZ..6 67<=
"*66> >?IJ
44bd< <=EF %"*_ 8M &M OQ  OS  VX  VZ  OZ[ [ ]oo 2:924A ABMN   (   A24HH2:A24HH RZ kmomqrr \% \% \% \%~  $   &  
   > 
KRTS S%&(d, , "* r  tv  txy y"**+-41 1 !bj@"$H H 
;= =rzHJ J $$A24HH                P	D P	D P	Df  ( ( (4 bjErtLLrzI24Q Qrz924A A23549 9 "* G  IK  IMN N  " " "Jf f fR8, 8, 8,x   6                <   @] ] ] ]@  D( ( (V* * * *Z$ $ $&# # # # "*^RT22E E EP rz,bd33  ,  4 4 4$" " "      & (* b b b bJ( ( ( "*W%%+   D D DN 2:12488 ; ; ; ;|M M M`   " " " "J  4 $$6== #$DbdKK #1249 9 #M2488 #$ErtLL 	" 	" 	" )+ ( ( ( (ZH H H HV      0  } } } }F  " " ""! ! !0 0 0 "$D ?" ?" ?" ?"D9  9  9 x   B C C C zEE	A	
B	
BMXabb\ 1 177qTS[[AA(]]EGG*__GEE&[[ [VXY[ [ [M"NN"""MM%%%NN&[[I"NN&[[I#NMM$YYBB'\\MM$YYBBqTS[[G)DDGG34444 	BKK 
	BMM 	2QQ 2 2 20F000111111112 LLOOOO  }   	 	 	 |E""H 3dd;6G6GGKKKmH%%T+s## 	qGGCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 XS P s6   / 992cc&c!!c&,fff