
    thh=                    N   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mZ ddlT 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   ZR ej<        eJd	eReRd$fz  ej=                  d(fZSd,ZT ej<        eJd	eTeTd$fz  ej=                  d-fZUd.ZV ej<        eJd/eVeVd$fz  ej=                  d0fZWd1ZX ej<        eJd	eXeXd$fz  ej=                  d2fZY ej<        eJd3z  ej=                  d4fZZ ej<        eJd5z  ej=                  d6fZ[ 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Za ej<        eJdCz  ej=                  dDfZb ej<        eJdEz  ej=                  dFfZc ej<        eJdGz  ej=                  dHfZd ej<        eJdIz  ej=                  dJfZe ej<        eJdKz  ej=                  dLfZf ej<        eJdMz  ej=                  dNfZg ej<        eJdOz  ej=                  dPfZh ej<        eJdQz  ej=                  dRfZi ej<        eJdSz  ej=                  dTfZj ej<        eJdUz  ej=                  dVfZk ej<        eJdWz  ej=        ejl        z            dXfZm ej<        dYejl                  dZfZnd[ Zod\ Zp ej<        d]ej=                  Zq ej<        d^ej=                  Zr ej<        d_ej=                  Zsdd`Ztda ZuddcZvdd ZwddeZx ej<        dfej=                  Zy ej<        dgej=                  Zz ej<        dhej=                  Z{ ej<        diej=                  Z| ej<        djej=                  Z} ej<        dk          Z~ ej<        dl          Z ej<        dmej=                  Zdn Zdo Zdp Zdq Zdr Zds Zdt Z ej<        duej=                  Z ej<        dvej=                  Z ej<        dwej=                  Z ej<        dxej=                  Z ej<        dyej=                  Zdz 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 ]2Zed	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ͦ           d           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ͦ           4t&          st2          rt4          s e1dd            eeƦ          Zt0          rg e1d et0                     d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     N/var/www/histauto/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     sB    xL$LLLLLMMM~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~     sD    {TtTT[=NTTTUUU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   J  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    d}tM          |d          \  }}|d
z  }|dd                                         dk    r#tM          |d z   |dd         z   d          \  }}d}|'                                dk    rt          dk    rnd}[t          dk    rS|d         d!v r6|dd                                         d"k    rd#|dd         z   }d}n*d}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}nhd#|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}n0|r(|rt[          |          s|                                n|}n|}|}|}|du}n$t]          d+tG          t                               d,|/                                dz
  t          |fz  a|)                    |          }|r|*                    d-          }t,          j        0                    |          rtc          ||d.           nt,          j        2                    t                    gtf          z   }d}|D ]W}t,          j        4                    ||          }t,          j        0                    |          rd}tc          ||d.            nX|s@tE          d/tG          |          d0t,          j5        4                    |          d1           n ||           |}Q|r|                                }n|}|}d,|/                                dz
  t          |fz  a|)                    |          }|r|*                    d-          }t,          j        0                    |          rtc          ||d.           nt,          j        2                    t                    gtf          z   }d}|D ]W}t,          j        4                    ||          }t,          j        0                    |          rd}tc          ||d.            nX|s@tE          d/tG          |          d0t,          j5        4                    |          d1           n ||           da|6                                 |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
z4Flag sourcecodeform must be either 'fix' or 'free': zLine #%d in %s:"%s"
	rq   )
dowithlineistopz-readfortrancode: could not find include file z in . Ignoring.
)7r   r    r!   r   r   beginpatternr   r   r   recompileIrange	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iscstyledirective
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is_f2py_directiverl_origfinalliner   lcmfninclude_dirs	foundfileinc_dirfn1s                                 r)   r   r   d  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]	AA! 	 	 	CLLNN  SZZ\\  !$    	  	?? 	9!!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!/i6B668 9 9 9 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%A(,%% D(-% q66B;;#2#At;&& !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	 "# # 4E gIZ[]I^I^ g


egII "I "TMDD]tNG[G[]]_ _ _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!!!{]~  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*datazM|module(?!\s*procedure)|python\s*module|(abstract|)\s*interface|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dt          j        |           d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("([^"\\]|(\\.))*"))
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

	!!'7ry44777-RYz**---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)   _simplifyargsr1    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                 p   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 rbt          t                   d         D ]H}
|
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	          |            d            dS t_          |d|             dS Jt`          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   )z4crackline: could not resolve function call for line=.
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   r1  callfunpatternanalyzeliner   r!   r   endswithr&   r   r    r   r   r   r   )r0   resetr   has_semicolonsemicolon_lineflr1   patr   re_1rq   m1m2r0  s                 r)   rA  rA    sU    )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 J%////</////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 6S$SSSSbhhx>P>PSSS5$55555&q)//55A bSWX\S]S]bbbd d d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   r;  r   @(@r<  @)@r'   )r0   r   fr   s       r)   r\  r\  W  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   ()@r;  r   r<  )r   r   )r0   commar   rk  r"  r#  s         r)   r,  r,  i  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 )Nri  r;  rj  r<  )r   )r0   r   s     r)   unmarkouterparenrq  |  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| d	           t          d
t          |          z             | S )Nr4   attrspeckindselectorcharselector)=typenamenote)r  checkr  r	  r
  dependzappenddecl: "z" not implemented.
z-appenddecl: Unknown variable definition key: )listkeyssetattrspecsetkindselectorsetcharselectorro   r   r   )decldecl2forcekr   s        r)   
appenddeclr    su     u}}%**,, $ $
?? #(Q*__1X 3 3"4E223.  "4q599DD.  "4q599DD### #(Q&[[ ) ) );A;;;<<<<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 )Nrs  r   r   )get_intentcallbackpatternr   )vdeclr0  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   r0  s     r)   rx   z*_resolvetypedefpattern.<locals>.<listcomp>  s     555q555r(   r+  rq   params)r   r-  typedefpatternr   printr   )r0   rf  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   r:  r   schemer;  r<  )r  r\  nameargspatternr   r   operatorpatterncallnameargspattern)r0   
bind_cnamerf  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                 E   |                      d          }|dk    rdat          r|dvrt          st          dk     rt
          j                            t                    	                    d          d         }t          d| d	           dat          dz   ad
t          t          <   i t          t          <   g t          t          <   g t          t                   d<   i t          t                   d<   d
t          t                   d<   |t          t                   d<   dt          t                   d<   da|dv r]|                                }t!          j        d|t           j                  rd}nEt!          j        d|t           j                  rd}n"t!          j        d|t           j                  rd}|dk    rHt'          |                      d                    \  }}}d|i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"|         }t0          r(t2          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          <   |rt4          dk    r%t          d*t7          t0                    z  d           d+t          t          <   dt          t                   d<   t0          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$t4          dk    rt          d-t          z  d           d.t          t          <   d.t          t                   d<   d/t          t                   d<   t          t          dz
           d         d0t          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d1|                    d2d3          z   }|                      d4          t          t                   d5<   t;          |          t          t                   d<   |	t          t                   d6<   t          dk    rt          t          t                   d<   nt0          rDt          d7k    r9t          t          dz
           d         d0t          t          t                   d<   nLt          t          dz
           d         d0t          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                   d8<   |dk    rg t          t                   d9<   |d"v r|t          t          d(z
           d,         vr.t          t          d(z
           d,                              |           tC          j"        t          t          d(z
           d                   t          t                   d<   	 t          t                   d         |         t          t                   d         |         d         #                    d:          = n# tH          $ r Y nw xY w|d;v r|
rt!          j%        tL          |
          }|r|i it          t                   d<<   |                     d=          t          t                   d<         |         d=<   |                     d>          r4|                     d>          t          t                   d<         |         d<   	 tO          t          t                   d         |         t          t          d(z
           d         d                   t          t                   d         |<   n# tH          $ r Y nw xY w|d?k    r|	r|	t          t                   d         v rg||	k    satO          t          t                   d         |         t          t                   d         |	                   t          t                   d         |<   	 t          t          d(z
           d$                              |           n# tH          $ r Y nw xY w|d&k    rtP          d                             |                      d4          d2z   |z             }|rMtS          |                     d          |                     d                    \  }}}}tU          ||||           |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 |d8k    rt)          |                      d                    \  }}}	}|~|r:t+          d@ t-          |          	                    d           D                       }ng }|	J t7          |	                      |t          t                   d8         |<   d8|t          fadS dS |dk    rJtS          ||                      d                    \  }}}}tU          ||||          }|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           }t_          |          dk    r5|d         }t          dIdH.                    |dd                   z             d}dJ t-          |          	                    d           D             D ]}t`                              |          }|sL|dKv rd}ngtc          | 2                                           t          dL|dMt7          |          dN           kt;          |                     d                    }|dKv r|dOv r||                     d          z  }||vri ||<   |dPk    r||                     d          z   }|dDk    r|                      d          |z   }tf                              |          r|t          t                   d#         vrt          dk    rdQt          t          d(z
           d         vrt          dR           |t          t                   d         k    rWt          dS|dTt          t                   d         dU           t          t                   d#                              |           n&ti          dV| dW           nti          dX|z             |dYv r|}d||         v r"||         d                              |           n|g||         d<   |d:k    rt          t                   d         d
k    rt          dZ           i|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&# tH          $ r t          da| db| dc           Y Iw xY wtk          |          }t;          |          }||vri ||<   d`||         v r7||         d`         |k    s%t          dd|de||         d`         df|d	           tm          ||          }|rB|7                    dg          dhk    rt=          |          }tp          9                    |          D ]} t=          || :                                | ;                                                                                             didj                    || :                                | ;                                <   d.                    |          }n]|7                    dg          dkk    rD|dd                                                             didj                              dHdl          }	 ty          |i |          } n;# tz          t|          t~          f$ r!}!ti          dm|dn|!dG           Y d}!~!Pd}!~!ww xY wt7          |           ||         d`<   d||         v r"||         d                              d^           nd^g||         d<   |}|t          t                   d<   |dA|t          fadS dS |dok    r|                      d          +                                                                dpk    rdt          t                   do<   dS |                      d          rt          t                   7                    doi           }"|"t          dq           i }"t-          |                      d                    	                    d           D ](}i }#t!          j        dr|t           j                  }|st          ds| dc           ;t                              |                     d                    }$|$st          dt| dc           ~tS          |$                     d          |$                     d                    \  }}}}t          ||          \  }%}&}'||#dg<   |%|#du<   |&|#dv<   |'|#dw<   t=          |#                                          D ]}|#|         s|#|= t-          |                     d                    	                    d           D ]}(dx|(v rG	 dy |(	                    dx          D             \  })}*n9# tH          $ r t          dz|( d{           Y Iw xY w|(+                                x})}*t_          |)          t_          |*          cxk    rdk    sn t          dz|( d|           t          t          |)          t          |*          dz             D ]}+|#|"t          |+          <   *|"t          t                   do<   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|,+                                },|,E                    dH          r|,dd         +                                },|                     |,|-g           |1},d}-d}.|.d(k    r\|,+                                },|,E                    dH          r|,dd         +                                },|                     |,|-g           t          t                   7                    di           }2d}|D ]!}3|3d         +                                F                    dH          |3d         +                                c|3d<   |3d<   |3d         E                    d          rt          d|3d          d           t          t+          d t-          |3d                   	                    d           D                                 D ]M\  }4} | E                    d          rt          d|  d           /d|3d         v rt          d|3d          d           S|2H                    | i            |2|          7                    dg          }5t          |2|                    }6|5dkk    rt!          jJ        d|3d                   n|3d         	                    dH          }7	 |6rdd.                    |7           dn|7|4         }8n	# t          $ r t          d |7D                       rg }9|7D ]}:d|:v r	 |:	                    d          \  };}<|9M                    |<+                                gt          |;          z             X# t          $ r* |9                     |:+                                           Y w xY w|9                     |:+                                           |9}7|6rdd.                    |7           dn|7|4         }8Y nw xY w|2|          7                    d`          }=|=r|=|8k    rt          d|  de|= d|8 dc           |8|2|          d`<   | }O#|2t          t                   d<   |rdA|t          fadS dS |dk    rE|                      d          +                                }|d         dk    sd|z   }g }>t!          j	        d|d(          \  }}?}@|?+                                }?|?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|2                                }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          dt7          |3           dG           n|3|D|3<   |Dt          t                   d         |         d<   dS dS dS tc          | 2                                           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          t4          rt          d           dS t          }Ft          t          |F         t          dd(         |                      d                     dS t4          dk    r2tc          | 2                                           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.
    r>  r  N)r   r  r  rh   r   .r   z=analyzeline: no group yet. Creating program group with name "rm   programr4  r5  r6  rq   fromskyfrom)r   r  r  zblock\s*data
block datazpython\s*modulepython modulezabstract\s*interfaceabstract interfacerh   r#  rs  _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  r:  r9  r  r   r   r7  r  r  z&analyzeline: Creating module block %s
moduler8  zDanalyzeline: Creating additional interface block (groupcounter=%s).
r  unknown_interface:unknown_r   r   r"  prefixr      r  varnamesr  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  rj  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 . Skipping.
>   operator
assignmentr  __user__z8analyzeline: missing __user__ module (could be nothing)
z(analyzeline: appending intent(callback)  to z arguments
zanalyzeline: intent(callback) z 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(   rv  zAanalyzeline: could not extract name,expr in parameter statement "" of ""
z1analyzeline: Overwriting the value of parameter "" ("z	") with "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*|)\Zz@analyzeline: could not extract info of implicit statement part "zIanalyzeline: could not extract types pattern of implicit statement part "rt  ru  rw  -c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzeline.<locals>.<listcomp>c  s     )J)J)J!'')))J)J)Jr(   z2analyzeline: expected "<char>-<char>" instead of "z&" in range list of implicit statement
z*" in range list of implicit statement (2)
r  '/r;  r<  zanalyzeline: implied-DO list "z" 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 "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//)maxsplit_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*\Zr{  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localz-analyzeline: Not local=>use pattern found in mapz0analyzeline: Could not crack the use statement.
)r  r  usercodez-analyzeline: No context for multiline block.
z+analyzeline: No code implemented for line.
)Sr   r&   r   r   r   r   r   basenamer!   r-  r2   r   rB  rC  r   r   r   r   r   r  r  r{   r,  remover   r   r   r   r   rr   r{  r|  r.  copydeepcopyr[   r   r  crackline_bindlangr  rT  cracktypespec0
updatevarsr   findr\  r   rX   namepatternr  r&  r  ro   get_parametersdetermineexprtyper  real16patternfinditerr  r  evalSyntaxError	NameError	TypeErrortypespattern4implicitcracktypespecr   ordchrr   removeprefix	enumerate
setdefaultgetdimensionfindall
IndexErroranyextendr8   r   
isinstancer   appendmultiline)Gr   r?   r0   r6  newnamerq   r  r   r:  r   	bindcline
needmoduleneedinterfaceitr  bindcdattr4   selectorattredecl	last_namer   iplchr  rf  apinitexprr  ttvr   implr  rg  
kindselect
charselectrw  r   begcendcodlilrk  fcinpr   r5  r   idxvtypevdimmatchesnew_valexpanded_listr   
multipliervaluecurrent_valclbnol	commonkeymmisonlyr   r(  gcsG                                                                          r)   r^  r^    s#    GGFOOE{ t#GGG H!-!1!1'""?3399#>>qAYGYYY	[ 	[ 	[#a'"+	,#%
< "$	,+-
< (+-
< (,5
< )+2
< (+4
< (+++8OUBD11 	) EEX(%66 	)#EEX-ubd;; 	)(EF??3AGGG4D4DEEND%6@%5HJ|$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,, 	\|q00<!+,V444oo0GJ|$V,, <!+,V444jPQAQ6RSY6Z6Z0\J|$V,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<@":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 '& 
 78H8H I I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 4	 4	A""1%%B 	1000AA!++--(((Gd1gggg' ( ( (rxx//00,,,6P1P1P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# Q Q Q QS S S S   !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   iXYiiaciiik k k $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 .	8l+//
B??D|SU U U#AGGG$4$455;;EBB ', ',XPRSUWUY[ [ b[\bbbd d d*00&1A1ABB kdekkkm m m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$$( % % %# UV   A A A$H%
 '(ggii/tt99D		6666Q6666QRA A A "3t99c$ii!m<< , ,'+SVV,,  48J|$Z000].	8 .	8^ 
!! 	 	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	 0	 0	A1223771JAaD!A$ts## ^1^^^___#I.d.d.QRSTQUBVBVB\B\]bBcBc.d.d.d$e$eff + +Q<<$$ _Q___``` !A$;; aAaDaaabbb2&&&QJ//#DG,,:?9:L:L"*Z1666RSTURVR\R\]`RaRaT=AS9499W#5#59999ws|GG! T T T
 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"/=AS9499W#5#59999ws|GGG#T$ #1gkk#.. sK7$:$:qqqP[qqdkqqqrrr&Q		W+X ,0
< ( 	E *I|D	E 	E			www%%''Aw#~~$;DhsD1555B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 $ [PTUVPWPW [ [ [] ] ] ] !"1CEJ|,U3D9%@@% | 6 6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(!,	) 	) 	) 	) 	) 
1akkmm>????? 
s   (Ac= =
d
	d
A$h* *
h76h7.k3 3
l ?l M "ANN AN&N%AN&U'AU9U9AV1VAV,V,AV1a"Aa;a;AbbAbq#Arr-Av	r1AAttAv	t1At6t3Av	t5At6t6AAv	vAv	c                 p    d| vri | d<   | d         }||vrg ||<   ||                              |           d S )Nf2pymultilinesr.  )r   context_namemlr(  s       r)   r  r    sU    u$$"$A1,lO2r(   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   r>  r#  r  r   r7  )r   r   r   r   r   selectpatternr\  r2   r&  r{  r|  rq  r  )r4   r   r  r  rf  r(  r  r	  s           r)   r  r  !  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)   removespacesr7  J  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\)r9  r  ")r  r:  r   @_@r'   )r0   fragmentinsidecurrent_quoteescapedr   s         r)   markinnerspacesr@  Y  s      HFMG  d??q$555MHG 	!{**MZFF#XX&XHAOr(   c                 L   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          |           d           @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#                              }|rZ|                                }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| d0v 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&= d1|v rGd2|v r8|d2         |d1         k    s&t          d3|d|d2         d|d1         d           n|d1         |d2<   d'|v r}d4|d'          d5}d|vs|d         s|g|d<   n|d         	                    |           |d         D ]:}|dd6         d7k    r*||k    r$|d         d8= t-          d|d9|d:|d            n;n(t          d;||                    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   ro  z@ @r;  z-updatevars: no name pattern found for entity=r  rq   r5  r4   z+updatevars: attempt to change the type of "r  r  z". Ignoring.
rt  z0updatevars: attempt to change the kindselector "r  ru  zupdatevars:z*: attempt to change empty charselector to r   z0updatevars: attempt to change the charselector "rw  z/updatevars: attempt to change the typename of "rs  r  r:  r8  r#  )rX   arrayinit2rX   rF  r
   r2  r   r+  zupdatevars: "z" is mapped to "r;  z)"
r  r7   r1  r5   rG  rv  z6updatevars: attempt to change the init expression of "
dimension(r<  	   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.  r7  r@  r   r  r2   r   rr   rC  r   r  r{  r|  ro   r  lenarraypatternr\  r&  rq  )r4   r  rs  
entitydeclr  r  r  rw  r   r   r0  r   selel1r  e1enamer  not_has_typespecr  rf  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   	VQVVVX X X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==4bk444B!..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                 x   d }d }d }|r| dv rt                               |          }|s"t          dt          |           d           d S |                                }|d         |d<   |d= t          |                                          D ]}||         s||= t          |                                          D ]\  }}t          |          ||<   n| dk    rWt                              |          }|s"t          dt          |           d           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          }nCt          dt          | |z             z             n t          dt          |           d           |||fS )NrI  z1cracktypespec: no kindselector pattern found for r   kind2r   r2  z1cracktypespec: no charselector pattern found for charlenlenkind)rX   kindrH  f2py_lenrh   z\s*\(\s*(?P<name>\w+)\s*\)rq   z'cracktypespec: no typename found in %s
z$cracktypespec: no selector used for )rt  r   r2   r   r&  r{  r|  itemsrr   ru  lenkindpatternr,  r   r   r   )	r4   r  r  r  rw  r  r	  r[  rU  s	            r)   r  r  '  sC   JJH 2O@@@%++H55J ZXZZZ\ \ \#--//J(1JsO7#*//++,, & &!!} &"1Z--//00 . .1 *1
1.$$%++H55J ZXZZZ\ \ \#--//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 M4>>MMMNNN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 )Nrs  rJ   	automaticr  r  r,  )r  r  r  s      r)   r}  r}  b  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 )Nrt  r{  r|  r  selr  r  s       r)   r~  r~  }  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 )Nru  rc  rd  s       r)   r  r    s      T!!"^#((** - - 	-AT.111&)!fD #Kr(   unknownc                     d| v r| d         S |S )Nrq   r'   )r6  rg  s     r)   getblocknameri    s    V}Nr(   c                 T    	 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   )r6  s    r)   setmesstextrk    sP    C%-CC%-CCC   s    
''c                 z    i }d| v rt          | d                   }d| v r|                    | d                    |S )Nparent_blockr  )get_usedictupdate)r6  usedicts     r)   rn  rn    sH    GeN344~~uU|$$$Nr(   c           
      8   |i }t          |           }|s|S t          |                                          D ]\  }}|                                }|t          vr*t          d|d|                     d          d           Lt          |         }t          |          }|sk|rt          d| d           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 z not impl.
z(get_useparameters: overriding parameter z with value from module )
rn  r{  r^  r   r   r2   r  r  ro   r   )	r6  	param_maprp  usenamemappingmvarsr  r  r  s	            r)   get_useparametersrv    s\    	%  G  11  --//-''GWWeii////1 2 2 2g&&& 	 	MKgKKKLLL(( 	 	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   )tabrr  
postcrack2)rv   grr  rz  s     r)   rx   zpostcrack2.<locals>.<listcomp>  s<        !tyAAA   r(   Block: rq   r   r   r5  rt  r\  c                 :    g | ]}t          |d z             S ry  r{  )rv   brr  rz  s     r)   rx   zpostcrack2.<locals>.<listcomp>  s<     ( ( ( 1#*	BBB ( ( (r(   r4  )r   r  r{  rk  r2   rv  r|  )
r6  rz  rr  retr5  r   varr\  valnew_bodys
    ``       r)   r|  r|    s[     %       
s,,5=,,,a000%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          r| d         }t          | ||          | d<   g }d| v rF| d         }t          |                                          D ]}d|v r|                    |           ni }d}	d| v r| d         }	|                     d          rg }
d| v r| d         }
t!          j        | d                   }|	r|	dz   }nd}||v r d}| d| |v r|dz   }| d| |v | d| }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   rz  rq   r  r6  z0postcrack: Expected block dictionary instead of r  r~  r   r   r5  sortvarsr:  r4  r  r
   r8  r9  __user__routinesunknown__user__routinesr   r   r  _user_interface)r6  r4  r5  rq   r   r  )r6  r4  r5  rq   r9  )r  r{  rk  	postcrackr.  dictr   r   r2   analyzeargsanalyzecommonanalyzevarssortvarnamesr  analyzebodyr|  r  r[   
isexternalr   )r6  r:  rz  greturetr}  userisdefineduseblockr  rq   r9  ru  mnamer	  r  r  edefjr  bbmblocks                        r)   r  r    s}    %  	 	ANNN!t,,,A{{zQvY66AAd{eT"" $we';';JE

# $ $ 	$uV}0CCC300uV}000!444E%  E&&E&M$U6]33E*yy V}t555E&MM~~<hmmoo&& 	( 	(AQ$$Q'''	( DV}yy +'
5  |,J	%-(( 	.--EE-EM!!A..Q..M11E ..Q..M11NNqNNE)20A)AC C	{# 	0 	0AJv " "AAAz[00"#F) & &B !AA%||6
a'+y}}$%fIaL % "#$V9 5$)&M!$4 *:+;+;A+>+> ?!E&!((....eJuQx$8$8',Qx	&!!$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 )Nrz  r   r   zTsortvarnames: failed to compute dependencies because of cyclic dependencies between r  r   )r{  r|  r.  rX   ro   r   )r5  indepdepr  r   r	  rc  ws           r)   r  r  Q  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           	      H   t          |           s| S g }t          | d                                                   D ]}g }| d         |         D ]}t          j        d|t          j                  }|rZg }|                    d          r?d t          |                    d                                        d          D             }t          |                    d          
                                          }|| d         v ryd| d         |         v r?| d         |         d                             d	d
                    |           d           n]d	d
                    |           dg| d         |         d<   n3|r&dd	d
                    |           d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   r5  rs  rJ  r+  r<  z:analyzecommon: failed to extract "<name>[(<dims>)]" from "z" in common /z/.

commonvars)	hascommonr{  r|  r   r   r   r   r,  r-  rr   r   r.  r   ro   )r6  r  r  comvarsr  r   r  r   s           r)   r  r  s  s   U J%/&&(()) % %x# 	 	AEq"$P PA j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;;:$:::< < < < ;$:::8<fa(44 *"%C#((4..%C%C%C$D(FE&M!$$ (*E&M!$J&&%%a(((hQRhhabhhhj j j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 )rs  r  r'   )rv   keyr!  s      r)   
<dictcomp>zanalyzebody.<locals>.<dictcomp>  sB       CU""heJ6G&G&G 	U&G&G&Gr(   r5  r4  rm  r6  r  rq   r:  z
      Tas_interfacesaved_interfacer   r  r  r  r  r   r
   pythonmoduler  )rk  r^  r|  r#   r.  r$   crack2fortrangenr  r  r   r   r   )r6  r:  rz  maybe_privater4  r  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         4d }t          dk    r&t          dt	          | d                    d           nvt          | d                                                   D ]N}| d         |                             d          dvr| d         |         ||<   7| d         |         d         ||<   O||fS )Nr  r   z2buildimplicitrules: no implicit rules for routine rq   r=  r4   )rJ   ra  )rk  defaultimplicitrulesr   r2   r   r{  r|  r  )r6  implicitrules	attrrulesr  s       r)   buildimplicitrulesr    s    (MIU$ M{{aeTZmI\I\aaac c c %
+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|          )z2 Like `eval` but returns only integers and floats zr=)r  rh   r8   r:   r   )r  r}  r   r   s       r)   myevalr    s?    Q1AAww3,
Z!ZZ
 
  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"  r;  r<  r#  g      ?g      ?)NNN)r8   r  r   getlincoef_re_1r   rX   r   r  r   r   r   )r  xsetr   len_er  re  r   rf  eer  r0  c2s               r)   
getlincoefr    s:   *q"b!!""!Tz   Q !QwFFE # #q66E>>9&*U2A66 	z.25GGNNJJqMM 	ZZ]] (HHX..HHHHRXXg5F5FHHBBB  ( 2r2&&ZZ]] (HHX..HHHHRXXg5F5FHHBBB  ( 2r2&&*ZZ]] (HHX..JJJJrxx7H7HJJBBB  ( 2r2&&ZZ]] (HHX..JJJJrxx7H7HJJBBB  ( BB''GaK1$$S1):):a7NNN   E7	8 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          |            d           g }||| <   |S )Nrz  rv  z)_get_depend_dict: no dependence info for r   )r  isstringword_patternr  r.  _get_depend_dictr2   r   )rq   r5  depswordswordr  s         r)   r  r  /	  s7   t||T
x,,$t*Xd4j%9%9$,,T$Z_== ' ' u$$$$,,LL&&&!!!H 	$ 	$DXXdB'' :'dD99$ $E>>LLOOO$	$ 	JDJJJJJKKKDJLr(   c                 x    t          |                                           }i }|D ]}t          || |           |S r,   )r{  r|  r  )r5  rz   depend_dictr   s       r)   _calc_depend_dictr  E	  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>V	  s#    :::Qk)9)9q)9)9)9r(   c                     g | ]}|v |	S r'   r'   )rv   rq   r5  s     r)   rx   z$get_sorted_names.<locals>.<listcomp>\	  s    333TddllDlllr(   )r  r{  r|  r.  r^  )r5  rz   rq   lstnew_lstr  s   `    @r)   get_sorted_namesr  M	  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(r<  )r  r   real8pattern)rc   s    r)   
_kind_funcr  _	  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   r7  l        r  l            r        r   r'   )r   r   s     r)   _selected_int_kind_funcr  j	  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  z	  s     	1uuq2vvq  &&((Gwxx 772 	
Rr	
br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 ) Nr\  selected_int_kindselected_real_kindrs  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*\)rv  ))z.false.False)z.true.Truez
kind("\1")zselected_int_kind(\1)Frt  r   r
   r   r   r(  r  zAget_parameters[TODO]: implement evaluation of complex expression r   c                     g | ]>}|                     d           |                    d                                           ?S )r  )r   r  r   )rv   rN  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   isdoubler{  r  r  r  r  	iscomplexr2   r  r  
param_evalr   r  r  r8   r  r  )r5  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   r:  z" in evaluating z (available names: r   )_is_kind_numberr-  r  r  r   r   r  r  r  r   ro   r{  r|  )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          |           \  }}t          j        | d                   @| d         dk    r| d         @vri @| d         <   d| d         v r|@d= d| d         d         v ri| d         d         d         }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 ]D}	 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    rNtE          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@fd7|#D             }%|"t          |%          f||<   |||<   @|         d                             |           Fd"@|         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                    dM           | d         dNvrdO| v r$t          j        | d
         | dO         z             }<nt          j        | d
                   }<t          @	                                          D ]@} t_          t          t                    @|                   r|<                    |           AdP| v r|<8                    t          | dP         	                                                     t          | dP         	                                          D ],}| dP         |         D ]}||<vr|<                    |           -| d         dk    r;dE| v r|<                    | dE                    n|<                    | d                    | d         dQv r'| d         }=|=@v rd@|=         v r@|=         d         | d<   | d         dRk    r4|<8                    t          @	                                                     t          @	                                          D ]	}||<vr@|= 
@S )SzH
    Sets correct dimension information for each variable/parameter
    r5  r6  r   rq   r
   rs  c                     h | ]
}|d          S rp   r'   )rv   r  s     r)   	<setcomp>zanalyzevars.<locals>.<setcomp>
  s    !C!C!C!F)!C!C!Cr(   r4  r  r:  z[A-Za-z][\w$]*z.*\b%s\br   r4   r  	undefinedz"analyzevars: typespec of variable z is not defined in routine r=  ru  rX   rt  r\  )NNNNNNrK  r  r   r   r   r  rz  r   ry  r  rx  c                 6    g | ]}|                                 S r'   r  r  s     r)   rx   zanalyzevars.<locals>.<listcomp>q
  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@:@r7  1)languagec                     | |z
  |z  S r,   r'   )rN  r0  r  s      r)   solve_vzanalyzevars.<locals>.solve_v
  s    01A{(:r(   c                 0    h | ]}|j         v |j         S r'   )r  )rv   rN  r5  s     r)   r  zanalyzevars.<locals>.<setcomp>
  s.     *7 *7 *7/0'(v~~ %&F'5~~r(   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(   rv  Fzshape(r  r<  z) == Tinr	  r
  r  r+  r   r  pure	recursiver>  r#  rw  zanalyzevars: prefix (z) were not used
)r  r  r  r  r  r  )r  r   rh   )Drk  r  r  r$  r}  r  r.  KeyErrorr{  r|  r  rv  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symbolsro  RuntimeErrorl_orisintent_inisintent_inoutisintent_inplaceisarrayr  r^  r   r   r  r  r  isscalarr  r  rT  r  r   r  isintent_callbackisintent_aux)Ar6  r  r  genr   r  svarsr:  r0  r  dep_matches
name_matchr  r   ln0r   dimension_exprsr  dimr  rz  ry  rx  r   tmpr(  dim_charr  rT  d2dsizesolver_and_depsrN  r  r  all_symbolsr   v_depsn_depsn_checks
n_is_inputr	  solverr  all_depsis_requiredrG  v_attraar  prpr1ispureisrecr4   r  r  r  r  rw  
neededvarsrq   r   r!  r5  sA                                                                 @@@r)   r  r  

  sA    1%88M99U6]##DW~##fT(A(A U6]	U6]Hvr***-#J/CYY!C!CU6]!C!C!CC 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$$$q'))jDGJ<O.O.O  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 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\Dx4I4I\\\^ ^ ^W~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   5D
D D 7H  4H76H7O%%
O21O25Q
Q! Q!"`33*a a 8A&g
h	)#h	h	D3AEE
AEEAEE$AE?E?
AFFAFz\A[a-z]+[\w$]*\Zc           	      z   |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             }nmt          |d         |          }t          |d         |          }	t          t          |          t          |	          dz             }nt	          d| 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   r7  r   rm  zparam_eval: dimension z can't be parsedr   r+  r   r  z.param_eval: multidimensional array parameters z not supportedr  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#5#5S\\A%5#56$>>L'LLLMMMqt}""3''H
8}}A;$$S))x==AV44EQE

Q//HH !f55F !f55FS[[#f++/::HH 4#4 4 4 5 5 	5 LL&&	-1R4A44S99AF  	>h//DD 	> 	> 	><<<$<<<========	>dS6""##AHs*    
A=A	G
H%H  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
    r;  Nr   r<  r  r  r"  r#  )
r  rfindr8   r'  r   r   r   r   r   r   )r(  r  dnameddimsr[   r  re  r   s           r)   r'  r'    s8   r axx,166#;;,!&&++/!''#,,./ 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         | <   nk| |d         vr%|d         	                    |i           |d         | <   d
|v r8||d
         |d         z   v r%t          |d         |          d          |d         | <   | S )Nr5  e_r   r   r  _er:  r   r   r8  r9  r  )analyzeargs_re_1r   r  r  r   rc   ascii_lowercasedigitsr   r  r}  )r0  r6  r:  orig_a	a_is_exprr  r  atnar   r  s              r)   	expr2nameri  "  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}00<<E&M!%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 )Nr:  r  r5  r4  rq   r8  r   )rk  r  ri  r.  r{  r^  )r6  r  r   r:  r0  r  args1r  s           r)   r  r  D  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_exprdictrn  g  s    !S 'I&&!U $F##!W 'I&&!T 
a
!
!!r(   c                    | |v rt          ||                    S |                                 } t                              |           rddiS t                              |           }|rOd|                                v r5|                    d          r t          dt          |            d           ddiS t                              |           }|rOd|                                v r5|                    d          r t          dt          |            d           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          |            d           |S )Nr4   r  rq   z6determineexprtype: selected kind types not supported (r   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(   rE  rn  r   r   rs  r   r  r2  r   )r4   ru  z4determineexprtype: could not determine expressions (z) type.
)rn  r   determineexprtype_re_1r   determineexprtype_re_2r&  r   r2   r   determineexprtype_re_3r,  r-  determineexprtype_re_4r  determineexprtype_re_5)r5  r5  rulesr   opr  r  rns           r)   r  r  s  s   t||T
+++::<<D##D)) 'I&&$$T**A 'Q[[]]""qwwv"XdXXXZ Z ZI&&$$T**A $Q[[]]""qwwv"XdXXXZ Z 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 ZX4::XXX	Z 	Z 	ZHr(   r   Fc                 p   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 ru| d         }
| d         D ]=}t          || |	          }t          |
|                   s|	                    |           >| d         d	k    s|	rd
d	                    |	           d}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 r1d| d          d}| d         |	vr|	                    | d                    t          | d         |t          z   |          }t!          | | d         |	|t          z   |          }
d}d| v r|sd| d          }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
   r6  r  rq   r  r  r:  r5  r   r;  r+  r<  r  r   r  callbackintent(z) r  r  r  r   z	 result (r4  r  z! in r  zentry r  r  zend )rk  r  r{  r#   r$   r  ri  r6  r.  r   r|  r   r  r  use2fortrancommon2fortranvars2fortranr^  )r6  rz  r  r  r}  r  rq   r:  	blocktypeargslr5  r0  r  r  
intent_lstr  r  r   r4  messentry_stmtsr	  s                         r)   r  r    sU    
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')sxx)))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/U8_///?%''LLx)))E&M3=|TTTDuV}eS7]O O ODD|&uV}&&%w--//00 	R 	RDAq(Q#-QQqQQ388A;;QQQKK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/ )r{  r|  r   )r  rz  r  r  s       r)   r~  r~    s    
C&++--   B B==;#;;chhvay&9&9;;CCA#AAqAACHHVAY,?,?AACCJr(   c                 2   d}t          |                                           D ]}| | d| d}| |         i k    r|r|d         dk    r
|d d         }1d| |         v r| |         d         r| d}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 only:r  r   z=>rc  )r  rz  r  r   r   r  s         r)   r}  r}    sj   
C#((**  #c##q###q6R<< s2w#~~#2#hSVAv...CCF??s1ve}?A#a&-,,..//  Aua((( .!.Q..CAA <!<Q<<#a&-*:<<CAA 	3r7c>>crc(CJr(   c                     | d         }g }|D ]J}	 t                      d|          } ||           r|                    |           ;# t          $ r Y Gw xY w|S )Nr  	isintent_)globalsr.  r%  )r  r  r  r  rk  s        r)   true_intent_listr    s    
h-C
C # #	#		.f../A qvv #

6"""	  	 	 	D	
 Js   A
AAc           	      	   t          |            d}g }|D ]!}|| d         v r|                    |           "d| v r<| d         D ]3}||v r||vr|                    |            t          d| d           4d| 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| d           || d         k    r#| d         dk    s| 
                    d          r7d||         vrSd||         v rd||         d         v r||v r	| | d| }jt          ||                    t          d| d           ||         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}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/}d0||         v r+| | d1d/                    ||         d0                    d}d/}d2||         v r6t          ||                   }|r| | d3d/                    |           d}d/}d4||         v r+| | d5d/                    ||         d4                    d}d/}d||         v r+| | d6d/                    ||         d                    d}d/}d7||         v r]||         d7         }||         d         d8v r4	 t          |          }d|j         d/|j         d}n# t"          $ r Y nw xY w| d9| d7| }n| d9| }| | | }|S ):Nr
   r5  r  zvars2fortran: Confused?!: "z" is not defined in vars.
r  rz  z;vars2fortran: Warning: cross-dependence between variables "z" and "r  r8  zintent(callback) z	external z	optional r4   r   r4  rq   r6  r   r   z*vars2fortran: No definition for argument "rm   r   rs  r  z(vars2fortran: No typespec for argument "rh   rw  r;  r<  rt  ru  r   )r   r  z*(rX   z(len=r\  z,kind=z(kind=r   c                     g | ]}|d v|	S ))r  r'   )rv   r   s     r)   rx   z vars2fortran.<locals>.<listcomp>n  s,     . . .!,, ,,,r(   z
intent(in)zintent(out)r  r+  r  rJ  r  r|  ry  zcheck(zdepend(rv  )r  r0  z :: )rk  r.  ro   r  r{  r|  r6  
isoptionalshowr2   r  r  r   r  r  r5   imagr   )r6  r5  r:  rz  r  r  noutr0  r(  r   r  vardefr  r   r  r  r  s                    r)   r  r    sG   
CD  fKKNNNu|$ 	R 	RADyyD==KKNNNP!PPPR R R RUE*%&&& diikk"" 	 	A}}A d$ d$tAw!WX& i i99T!W!4!4d1gh>O9O9OgVWgg`agggi i i%A{);$;$; a)) 87c77A77+#++++C$q'"" 0/c//A//DyyZtAw66D6]  &	>>ajJ&>&>DE D==JJJHHHHIIIfW~++uyy/B/B+
 T!W$$T!W$$tAwz7J)J)J99 3#3333CaMMMFqFFFGGGa$V
d1g 5 577a!4777FT!W$$Aw~.HHtAw&&Aw~.H(??}
**"66hsm666"44Xc]44h66Xe_66F!!"==(6*:==="x99hv&6999Fa  . .tAwz2 . . .D + 4 4$9N9N M*** "66chhtnn66$q'!!NNNSXXd1gk6J-K-KNNNFAtAw"47++C ?">A>>chhsmm>>>Ad1gFFF$q''2B)C)CFFFFAtAwHHH#((4783D*E*EHHHFA$q'>>QAAwz"&CCCQA.AF..QV...AA    D++A++++FF''A''F#c#6##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   rA  r   r  r   post_processing_hooks__name__traverser|  )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)r6  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 )Nr7  r   )r  tuplerX   r8   r   )objs    r)   _is_visit_pairr    s@    sE"" /CA/3q6C:..0r(   c                    t          |           r9| d         dk    r| S  || ||g|R i |}|t          |          sJ |S | }| \  }} nd| f}d}t          | t                    rKg }t          |           D ]8\  }	}
t	          |	|
f|||gz   |g|R i |\  }}||                    |           9nWt          | t                    r@i }|                                 D ](\  }}
t	          ||
f|||gz   |g|R i |\  }}||||<   )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   rm  N)r  r  r{  r  r  r.  r  r^  )r  visitparentsr   r:  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+2fX+=v#<,0#< #< #<4:#< #<Ix $!!(+++	, 
C		 	
))++ 	0 	0JC!)3,*1VH*<f";+/"; "; ";39"; ";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_usage  sF    {W,u4guEEuw)@@' 'r(   )r  ry  r   r5  r   rv  r   Ncallstatementz
(?<![&])\br  r   zcharacter_bc_hook[r  z]: replaced `z` -> `z`
)r^  ischaracterr   r  r2   )rZ  r  r   r:  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-verboser7  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 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 r  )r   )r   )r+  )rg  r,   )r
   N)Nr
   )r
   )NN)r   r   )r   F)r
   F)__doc__r   r  r   r   r  r   rc   r-   pathlibr   r   ImportErrorr
   r   r   auxfuncsversionr  r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r    r   rC  r   r   rB  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fortrantypesrT  r  rQ  rR  groupbegins77r   groupbegins90r   	groupendsrO  endifsrN  moduleproceduresrZ  rS  rD  rE  rG  rH  rK  rL  rM  rF  rI  rJ  rV  rY  r]  rU  rW  rX  rP  Sr?  r@  r   r1  r[  crackline_bind_1r  rA  r\  r,  rq  r  r3  r  r  r  r  r  r  r  r  r  r  r  r^  r  r  r  rt  ru  r_  rL  r7  r@  r  r  r}  r~  r  ri  rk  rn  rv  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rb  r  r'  ri  r  rr  rs  rt  ru  rv  rn  r  r  r~  r}  r  r  r  r  r  r  r  r  r.  r  r  funcsrk  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 '+! _D _D _D _DF 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 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                u@ u@ u@p  ( ( (8 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7, 7, 7,v   6                <   @\ \ \ \~  D' ' 'T* * * *Z$ $ $&! ! ! ! "*^RT22A A AH rz,bd33  ,  4 4 4$" " "      $ (* b b b bJ( ( ( "*W%%+   D D DN 2:12488 ; ; ; ;|M M M`      D  6 $$6== #$DbdKK #1249 9 #M2488 #$ErtLL 	" 	" 	" )+ ( ( ( (ZG G G GT      0  z z z z@  " " ""! ! !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1dd1gg1112222 	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 E[0A0AEEEqIIImH%%T+s## 	qGGCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 XS P s6   / 992cc cc 'f		ff