ó
    Eñi¿= ã                   óô  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
   SSKrSSKJrJr  SSK7  \R"                  qSqSqSqSqSqS	qS	qSqSqSq/ qS	qS	qSq 0 q!S	q"Sq#Sq$Sq%[J        / 0q&S	q'/ q(S
q)/ q*Sq+S
q,/ q-/ q./ q/S r0SÅS jr1S\l2        0 r3S H
  r4SS0\3\4'   M     S H
  r4SS0\3\4'   M     0 r50 r6S H  r7\7S-   \5\7'   \7\6\7S-   '   M     S r8S r9S r:S r;\Rx                  " S\Rz                  5      R|                  r?\Rx                  " S\Rz                  5      R|                  r@\Rx                  " S\Rz                  5      R|                  rA\Rx                  " S\Rz                  5      R„                  rC/ SQrD/ SQrES rFS  rG\HS4S! jrIS"rJS#rK\Rx                  " \JS	\K\KS$4-  \Rz                  5      S%4rL\Rx                  " \JS	\KS&-   \KS&-   S$4-  \Rz                  5      rM\Rx                  " \JS'-  \Rz                  5      S(4rN\Rx                  " \JS)-  \Rz                  5      S(4rOS*rP\Rx                  " \JS	\P\PS$4-  \Rz                  5      S(4rQ\PS+-   rR\Rx                  " \JS	\R\RS$4-  \Rz                  5      S(4rSS,rT\Rx                  " \JS	\T\TS$4-  \Rz                  5      S-4rUS.rV\Rx                  " \JS/\V\VS$4-  \Rz                  5      S04rWS1rX\Rx                  " \JS	\X\XS$4-  \Rz                  5      S24rY\Rx                  " \JS3-  \Rz                  5      S44rZ\Rx                  " \JS5-  \Rz                  5      S64r[\Rx                  " \JS7-  \Rz                  5      S84r\\Rx                  " \JS9-  \Rz                  5      S:4r]\Rx                  " \JS;-  \Rz                  5      S<4r^\Rx                  " \JS=-  \Rz                  5      S>4r_\Rx                  " \JS?-  \Rz                  5      S@4r`\Rx                  " \JSA-  \Rz                  5      SB4ra\Rx                  " \JSC-  \Rz                  5      SD4rb\Rx                  " \JSE-  \Rz                  5      SF4rc\Rx                  " \JSG-  \Rz                  5      SH4rd\Rx                  " \JSI-  \Rz                  5      SJ4re\Rx                  " \JSK-  \Rz                  5      SL4rf\Rx                  " \JSM-  \Rz                  5      SN4rg\Rx                  " \JSO-  \Rz                  5      SP4rh\Rx                  " \JSQ-  \Rz                  5      SR4ri\Rx                  " \JSS-  \Rz                  5      ST4rj\Rx                  " \JSU-  \Rz                  5      SV4rk\Rx                  " \JSW-  \Rz                  \RØ                  -  5      SX4rm\Rx                  " SY\RØ                  5      SZ4rnS[ roS\ rp\Rx                  " S]\Rz                  5      rq\Rx                  " S^\Rz                  5      rr\Rx                  " S_\Rz                  5      rsSÆS` jrtSa ruSÇSb jrvSc rwSÅSd jrx\Rx                  " Se\Rz                  5      ry\Rx                  " Sf\Rz                  5      rz\Rx                  " Sg\Rz                  5      r{\Rx                  " Sh\Rz                  5      r|\Rx                  " Si\Rz                  5      r}\Rx                  " Sj5      r~\Rx                  " Sk5      r\Rx                  " Sl\Rz                  5      r€Sm r�Sn r‚So rƒSp r„Sq r…Sr r†Ss r‡\Rx                  " St\Rz                  5      rˆ\Rx                  " Su\Rz                  5      r‰\Rx                  " Sv\Rz                  5      rŠ\Rx                  " Sw\Rz                  5      r‹\Rx                  " Sx\Rz                  5      rŒSy r�Sz rŽS{ r�S| r�SÆS} jr‘SÆS~ jr’SÆS jr“SÈS€ jr”S� r•S‚ r–SÉSƒ jr—SÊS„ jr˜SËS… jr™S† ršS‡ r›SÌSˆ jrœS‰ r�SÍSŠ jrž\Rx                  " S‹\Rz                  5      rŸSŒ r \Rx                  " S�\Rz                  5      r¡SŽ r¢S� r£S� r¤S‘ r¥S’ r¦SÎS“ jr§0 4S” jr¨S• r©\Rx                  " S–5      R„                  rªS— r«S˜ r¬\Rx                  " S™\Rz                  5      r­SÉSš jr®S› r¯/ 4Sœ jr°S� r±\Rx                  " Sž\Rz                  5      r²\Rx                  " SŸ\Rz                  5      r³\Rx                  " S \Rz                  5      r´\Rx                  " S¡\Rz                  5      rµ\Rx                  " S¢\Rz                  5      r¶S£ r·0 4S¤ jr¸SÏS¦ jr¹SÌS§ jrºSÌS¨ jr»S© r¼SÐSª jr½/ q¾S« r¿S¬ rÀS­ rÁ/ S4S® jrÂS¯ rÃG[|        GR‰                  \Ã5        \ÅS°:X  GaÐ  / rÆ/ rÇSrÈSrÉSrÊSrË\GR˜                  SS  GH  rÍ\ÍS	:X  a  M  \ÍS   S±:X  a  SrÈM  \ÍS²:X  a  SqSqM%  \ÍS³:X  a  S´qSqM1  \ÍSµ:X  a  [&        (       a	  \1" S¶S5        SqSqMQ  \ÍS·:X  a  SqM[  \ÍS¸:X  a  SqMe  \ÍS¹:X  a  SqSqMq  \ÍSº:X  a  SqS»qSqM  \ÍS¼:X  a  SrÉM‰  \ÍS½:X  a  SrËM“  \ÍS¾:X  a  SrÊM�  \ÍS   S¿:X  a  \Î" SÀ\Ï" \Í5       S¥35        Mº  \É(       a  SrÉ\ÍqMÇ  \Ê(       a  SrÊ\ÍqMÔ  \È(       a-   \Ð" \Í5      GR£                  5         \ÆGR‰                  \Í5        GM  \ÇGR‰                  \Í5        GM     [&        (       d  [2        (       a  [4        (       d	  \1" SÂS5        \¿" \Æ5      rÔ[0        (       aG  \1" SÃ\Ï" [0        5       S¥3S5        \À" \Ô5      rÕ\Ð" [0        SÄ5       rÈ\ÈGR­                  \Õ5        SSS5        \Ë(       a	  \H" \Ô5        ggg! \ a    Sr GNf = f! \Ò a  rÓ\Î" SÁ\Ó< S¥35         SrÓCÓGMÞ  SrÓCÓff = f! , (       d  f       NQ= f)Ñ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                  óx   • Sq SqSqSqSqSqSqSqSqSq	/ q
Sq[        / 0qSqSqSq/ q0 qSqSqSq/ q/ q/ q/ qS qg )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© ó    ÚT/home/mande/repo/quber/.venv/lib/python3.13/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                 óÆ   • [         (       d  g [        (       dJ  U(       a#  [        R                  R	                  [
        5        [        R                  R	                  U 5        g g ©N)r   r   ÚsysÚstdoutÚwriter    )ÚlineÚflags     r)   Úoutmessr2   ë   s>   € ÷ Š7ØßŠ5ÞÜ�J‰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                 ó^   • U [         ;   a"  [        SU  S[         U     S35        [         U    $ U $ )Nzrmbadname1: Replacing "ú" with "ú".
)ÚbadnamesÚerrmess©Únames    r)   Ú
rmbadname1rr     s6   € ØŒxÓÜÐ)¨$¨¨x¼À¹Ð7GÀtÐLÔMÜ˜‰~ÐØ€Kr(   c                 óD   • U  Vs/ s H  n[        U5      PM     sn$ s  snf r,   )rr   ©ÚnamesÚ_ms     r)   Ú	rmbadnamerw     s   € Ù%*Ó+¢U˜rŒJ�rŽN¡UÑ+Ð+ùÒ+ó   …c                 ó^   • U [         ;   a"  [        SU  S[         U     S35        [         U    $ U $ )Nzundo_rmbadname1: Replacing "rl   rm   )Úinvbadnamesro   rp   s    r)   Úundo_rmbadname1r{     s8   € ØŒ{ÓÜÐ.¨t¨f°H¼[ÈÑ=NÐ<OÈtÐTÔUÜ˜4Ñ Ð Ø€Kr(   c                 óD   • U  Vs/ s H  n[        U5      PM     sn$ s  snf r,   )r{   rt   s     r)   Úundo_rmbadnamer}     s   € Ù*/Ó0ª% BŒO˜BÖ©%Ñ0Ð0ùÒ0rx   z-\*-\s*fortran\s*-\*-z-\*-\s*f90\s*-\*-z-\*-\s*fix\s*-\*-z[^c*]\s*[^\s\d\t])z.f90z.f95z.f03z.f08)z.forz.ftnz.f77z.fc                 óp  • [         b/  [         R                  " U 5      R                  5       R                  nOæ[	        S[
        R                  R                  U 5      5      n[        U S5       nUR                  U5      nUR                  [        R                  5      (       a  SnOpUR                  [        R                  [        R                  45      (       a  SnO9UR                  [        R                  [        R                   45      (       a  SnOSnSSS5        [        XWS9$ ! , (       d  f       N= f)	a:  Ensures that filename is opened with correct encoding parameter.

This function uses charset_normalizer package, when available, for
determining the encoding of the file to be opened. When charset_normalizer
is not available, the function detects only UTF encodings, otherwise, ASCII
encoding is used as fallback.
Né    Úrbz	UTF-8-SIGzUTF-32zUTF-16Úascii)Úencoding)Úcharset_normalizerÚ	from_pathÚbestr‚   r`   ÚosÚpathÚgetsizeÚopenÚreadÚ
startswithÚcodecsÚBOM_UTF8ÚBOM_UTF32_LEÚBOM_UTF32_BEÚBOM_LEÚBOM_BE)ÚfilenameÚmoder‚   ÚnbytesÚfhandleÚraws         r)   Úopenhookr—   +  sà   € ô Ñ%Ü%×/Ò/°Ó9×>Ñ>Ó@×IÑI‰ô �RœŸ™Ÿ™¨Ó2Ó3ˆÜ�(˜DÔ! WØ—,‘,˜vÓ&ˆCØ�~‰~œfŸo™o×.Ñ.Ø&‘Ø—‘¤×!4Ñ!4´f×6IÑ6IÐ J×KÑKØ#‘Ø—‘¤§¡´·±Ð >×?Ñ?Ø#‘ð #�÷ "ô �¨Ñ2Ð2÷ "Õ!ús   Á,B)D'Ä'
D5c                 ó  • Sn[        U 5      R                  R                  5       [        ;   a  Sn[	        U S5       nUR                  5       nSn[        U5      (       a  SnO[        U5      (       a  SnSnUS:”  aq  U(       aj  US   S:w  aB  UR                  5       (       a-  US-  nUS   S:w  a  [        US	S
 5      (       d	  USS S:X  a  SnOUR                  5       nUS:”  a	  U(       a  Mj  S	S	S	5        U$ ! , (       d  f       U$ = f)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  sý   € ð €FÜˆEƒ{×Ñ×ÑÓ!Ô%;Ó;ØˆÜ	�%˜Ô	 Ø×ÑÓ!ˆØˆÜ˜×ÑØ‰AÜ˜T×"Ñ"ØˆAØˆFØ�!‹ežØ�A‰w˜#‹~ $§*¡*§,¡,Ø�Q‘�Ø˜‘G˜t“O¬¸¸R¸a¸×(AÑ(AÀdÈ2ÈbÀkÐUXÓFXØ!�FØØ×#Ñ#Ó%ˆDð �!‹eŸ˜÷ 
ð €M÷ 
Ô	ð €Mús   ¼B/C7Ã7
Dc           
      ó  • U(       d/  [         [        [        [        [        [
        [        [        [        4	nU / :X  a  g[        nSnSnSn[        R                  " S[        R                  5      n[        R                  " S5      n	[        R                  " S5      n
[        R                  " S5      nU(       a	  U" SS5        S	u  p|S
/[        S5       Vs/ s H  n[        U5      PM     sn-   nSq[        R                  " U [         S9n  UR#                  5       nU(       d  GO‚UR-                  5       (       Ga  SqUR)                  5       qSq UnSqSq[.        R0                  R3                  [        5      S   n[5        [        5      R6                  R9                  5       [:        ;   a#  [=        U5      (       d  [?        U5      (       d  SqO&[A        [        5      (       a  [?        U5      (       d  Sq[        (       a  [B        qO[D        q[G        S[I        [        5      < S[        < [        =(       a    S=(       d    S< S35        URK                  5       RM                  SS
5      nUS:X  d  US   S;  a  OUSS nUS:X  d  M  Sn[O        US5      u  nnUS
-  nUSS R9                  5       S:X  a  [O        US-   USS -   S5      u  nnSnURQ                  5       S:X  a  [        S:X  a  OSnGMç  [        S:X  Ga)  US   S ;   a)  USS R9                  5       S!:X  a  S"USS -   nSnO&SnSnGM$  [        (       a  [S        U5      S#:”  a  USS# nUS   U;  a  ['        S$[I        U5      -  5      eU(       a  [        (       a&  [S        U5      S:”  a  US   S
:X  d  UUS%S -   nSnSnGO³U	RU                  U5      nU(       a  URW                  S&5      nU(       a(  XzRU                  U5      RW                  S&5      -   nSnSnGO[S"USS -   nU(       a  UR9                  5       nOUnUnUnGO3[        S:X  Ga  U(       ds  WS':X  am  URU                  U5      (       aW  US(-   n UR#                  5       nU(       d  [Y        S)5        OUU-   nURU                  U5      (       a  OMA  UR[                  5       nU	RU                  U5      nU(       a  URW                  S&5      nU(       a'  XzRU                  U5      RW                  S&5      -   nSnSnO7U(       a*  U(       a  []        U5      (       d  UR9                  5       OUnOUnUnUnUSLnO[_        S*[I        [        5       35      eS+URa                  5       S-
  [        U4-  qURU                  U5      nU(       Ga  URW                  S,5      n[.        R0                  Rc                  U5      (       a  [e        UUSS-9  OÓ[.        R0                  Rg                  [        5      /[h        -   nSnU HV  n[.        R0                  Rk                  UU5      n[.        R0                  Rc                  U5      (       d  MI  Sn[e        UUSS-9    O   U(       d:  [G        S.[I        U5      < S/[.        Rl                  Rk                  U5      < S035        OU" U5        UnGMœ  U(       a  UR9                  5       nOUnUnS+URa                  5       S-
  [        U4-  qURU                  U5      nU(       Ga  URW                  S,5      n[.        R0                  Rc                  U5      (       a  [e        UUSS-9  OÓ[.        R0                  Rg                  [        5      /[h        -   nSnU HV  n[.        R0                  Rk                  UU5      n[.        R0                  Rc                  U5      (       d  MI  Sn[e        UUSS-9    O   U(       d:  [G        S.[I        U5      < S/[.        Rl                  Rk                  U5      < S035        OU" U5        SqURo                  5         U(       a
  U" SS5        gWu	  q qqqqqqqqgs  snf ! [$         a6  n['        SUR)                  5        SUR+                  5        SU S35      eSnAff = f)1zá
Read fortran codes from files and
 1) Get rid of comments, line continuations, and empty lines; lower cases.
 2) Call dowithline(line) on every line.
 3) Recursively call itself when statement "include '<filename>'" is met.
NFr
   z*\s*include\s*(\'|")(?P<name>[^\'"]*)(\'|")z(?P<line>.*)&\s*\Zz(\s*&|)(?P<line>.*)z.*?'''r   )r
   r
   Ú é
   )r—   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.
)8r   r    r!   r   r   Úbeginpatternr   r   r   ÚreÚcompileÚIÚrangeÚstrÚ	fileinputÚ	FileInputr—   r£   ÚUnicodeDecodeErrorÚ	Exceptionr’   ÚlinenoÚisfirstliner†   r‡   Úsplitextr   r    r¡   ÚCOMMON_FIXED_EXTENSIONSr¥   Ú_has_fix_headerr«   Úbeginpattern77Úbeginpattern90r2   ÚreprÚ
expandtabsÚreplaceÚsplit_by_unquotedr¦   rX   ÚmatchÚgroupro   ÚrstripÚiscstyledirectiveÚ
ValueErrorÚ
filelinenoÚisfileÚreadfortrancodeÚdirnamer%   ÚjoinÚpathsepÚclose)Úffilerº   r»   ÚsaveglobalsÚlocaldolowercaseÚcontÚ	finallineÚllÚincludelineÚcont1Úcont2Ú
mline_markÚl1rv   ÚspacedigitsÚfinÚlÚmsgÚextÚis_f2py_directiveÚrlÚ_Úorigfinalliner™   ÚlcÚmÚfnÚinclude_dirsÚ	foundfileÚinc_dirÚfn1s                                  r)   rÙ   rÙ   d  sˆ  € ö Ü!Ô#3´_ÄnÔV_Üœ%¤¬+ð6ˆà�ƒ{ØÜ"Ðð €DØ€IØ	€BÜ—*’*Ø5´r·t±tó=€Kä�JŠJÐ,Ó-€EÜ�JŠJÐ-Ó.€EÜ—’˜IÓ&€JÞÙ�2�rÔØ�F€BØ�%¬U°2¬YÓ7ªY rœ3˜rž7©YÑ7Ñ7€KØÐÜ
×
Ò
˜e¬hÑ
7€CØ
ð	Ø—‘“ˆAö ÙØ�?‰?×ÒØ!ÐØ!Ÿl™l›nˆOØˆKØˆBØˆIØ"ˆNÜ—'‘'×"Ñ"¤?Ó3°AÑ6ˆCÜ”OÓ$×+Ñ+×1Ñ1Ó3Ô7NÓNÜ(¨×+Ñ+¬¸q×/AÑ/AØ‘	Ü¤×0Ñ0¼È×9KÑ9KØ!'�ßŠyÜ-‘ä-�ÝÜœOÖ,®nÜ!×/ i×6°BÒ6ð8ô 9ð �L‰L‹N×"Ñ" 6¨3Ó/ˆà�r“'Ø�‰u˜HÓ$ØØ�#�2�ˆAð �r•'ð
 "Ðä# A sÓ+‰ˆˆBØ	ˆS‰ˆØˆbˆqˆ6�<‰<‹>˜WÓ$Ü$ Q¨¡[°2°a°b°6Ñ%9¸3Ó?‰DˆAˆqØ $ÐØ�7‰7‹9˜‹?Ü Ó'ð
 ð �ÚÜ˜UÔ"Ø�‰tÐ0Ó0Ø�Q�q�6—<‘<“> VÓ+Ø ! A B %™�AØ(,Ñ%à �DØ(-Ð%Úß’Ü�q“6˜B“;Ø˜#˜2˜�AØ�‰t˜;Ó&Üð !GäIMÈaËñ!Qó Rð Rö ŸIšI¬C°«F°Q«J¸qÀ¹tÀs»{à˜!˜A˜B˜%‘Z�Ø�	Ø "’à—K‘K “N�ÞØŸ™ ›�AÞØŸk™k¨!›n×2Ñ2°6Ó:Ñ:�BØ "�IØ$&’Mð   ! A B %™�Aæ'Ø$&§H¡H£J™	à$&˜	Ø$&�MØ’Bä˜vÔ%Þ˜C 6›M¨j×.>Ñ.>¸q×.AÑ.AØ˜‘H�ØØŸ™›�BÞÜØMôOàØ˜B™�AØ!×'Ñ'¨×+Ñ+Øñ ð —H‘H“J�Ø—‘˜A“ˆAÞØ—G‘G˜F“O�ÞØŸ+™+ a›.×.Ñ.¨vÓ6Ñ6�Ø�	Ø "‘æ#ö 4EÔIZÐ[]×I^ÑI^ §¡¤
Ðeg‘Ià "�IØ "�Ø�Ø˜T�M‰DäØFÄtÌNÓG[ÐF\Ð]ó_ð _à4Ø�N‰NÓ˜qÑ ¤/°2ð87ñ 7Ðà×Ñ˜mÓ,ˆßØ—‘˜“ˆBÜ�w‰w�~‰~˜b×!Ñ!Ü ¨zÀÓCô —G‘G—O‘O¤OÓ4ð 6Ü8Eñ F�à�	Û+�GÜŸ'™'Ÿ,™, w°Ó3�CÜ—w‘w—~‘~ c×*Ó*Ø$%˜	Ü'¨¸
È!ÒLÙñ  ,ö !ÝÜ˜Rž¤"§*¡*§/¡/°,Ö"?ðAô Bøñ �yÔ!Øˆò{ ö~ Ø—H‘H“J‰	àˆ	Ø€MØ0Ø�‰Ó˜1Ñœo¨rð43ñ 3Ðà×Ñ˜-Ó(€AßØ�W‰W�V‹_ˆÜ�7‰7�>‰>˜"×ÑÜ˜B¨:¸QÓ?äŸG™GŸO™O¬OÓ<Ð=ÄÑMˆLØˆIÛ'�Ü—g‘g—l‘l 7¨BÓ/�Ü—7‘7—>‘> #×&Ó&Ø !�IÜ# C°JÀaÒHÙñ (ö ÝÜ˜–HœbŸj™jŸo™o¨lÖ;ð=ô >øñ 	�9ÔØÐØ‡I�I„KÞÙ�2�qÕð 9Dñ	6ˆÐ% ¸È	Ø˜% ©+ùòE 8øô "ó 	ÜØ+¨C¯L©L«NÐ+;¸1¸S¿Z¹Z»\¸NØ   ð &ðóð ûð	ús   Ã`<Äa á
bá1a<á<b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           	      ó`  • [        S5      [        U5      -  (       a   S5       e[        R                  " SR                  S[        R                  " U5       S3S[        R                  " U5       S3SSS	95      nUR                  U 5      nU(       a  UR                  5       nUS
   US   4$ U S4$ )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Ð-Ü
�
Š
ð	!ß!'¡ØœrŸyšy¨Ó4Ð5°QÐ7Ø”R—Y’Y˜zÓ*Ð+¨1Ð-Ø0Ø0ð	 "(ð "2ó	3€Að 	
�‰�‹€AÞØ�K‰K‹MˆØ�(‘˜Q˜w™ZÐ(Ð(Ø�"ˆ:Ðr(   c                 óÂ   • / n[        U 5      R                  S5       H/  nS H  nUR                  US5      nM     UR                  U5        M1     SR	                  U5      $ )Nú@,@z(),rð   Ú,)ÚmarkoutercommaÚsplitrÐ   ÚappendrÛ   )ÚargslineÚarª   r™   s       r)   Ú_simplifyargsr,  ¬  sV   € Ø
€AÜ˜HÓ%×+Ñ+¨EÖ2ˆÛˆAØ—	‘	˜!˜SÓ!ŠAñ à	�‰�Žñ 3ð �8‰8�A‹;Ð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                 óš  • [        U S5      u  p#U(       a–  [        S   R                  U 5      (       dy  [        S   R                  U 5      (       d\  US:X  d   [	        U5      5       e[        U S5      u  pU(       a%  [        X5        [        USS S5      u  pU(       a  M%  [        X5        gUS:  a_  Sq[        S0q[        0 0q[        / 0q	/ [        [           S'   0 [        [           S'   S[        [           S'   S[        [           S	'   S
q
S
qgUS:”  Ga¥  Sn[        (       a  [        [        :X  a  Sn[        U:”  a¤  [        S[	        [        5      < S[	        [        5      < S35        [        S5        [        [        S-
     R                  [        [           5        [        [           [        [        S-
     S
   S'   [        [        	 [        S-
  q[        U:”  a  M¤  [        (       aÎ  [        [        :X  aÀ  [        [        S-
     R                  [        [           5        [        [           [        [        S-
     S
   S'   [        [        	 [        S-
  q[        [        S-
     R                  [        [           5        [        [           [        [        S-
     S
   S'   [        [        	 [        S-
  qS
q
gU S:X  a  gSn[        [         ["        [$        [&        [(        [*        [,        [.        [0        [2        [4        [6        [8        [:        [<        [>        [@        [B        [D        [F        [H        [J        [        [        [L        4 H%  nUS   R                  U 5      nU(       a    O	US-   nM'     W(       Gdº  [N        n	S[        s=::  a  [        ::  a   g  S[        [           ;   Ga9  [        [           S    GH$  n
U
[P        ;   a	  [P        U
   n
S[        [           ;   a  U
[        [           S   ;   a  M>  [R        R                  " SU
-  [U        U 5      [R        RV                  5      nU(       d  My  U	R                  URY                  S5      5      n[[        URY                  S5      5      nU(       a  SU
 SU SURY                  S5       S3n O	SU
 SU S3n [\        S   R                  U 5      nU(       d  [        S[	        U 5       S35          g[_        USU 5          g   [`        S:”  d2  [`        S:X  a<  [b        Re                  5       Rg                  S5      (       a  Sq4[        S[        -  5        gWS   S:X  GaP  S[        s=::  a
  [        :  a  O  O[        S-
  q[        [        ::  a  g[        S::  a  [k        S [        -  5      e[8        S   R                  U 5      nU(       ag  URY                  S!5      [        [           :X  dG  [k        S"[	        URY                  S!5      5      < S#[	        [        [           5      < S$[l        < 35      e[        [        :X  a  S
q[        [        S-
     R                  [        [           5        [        [           [        [        S-
     S
   S'   [        [        	 [        S-
  q[n        (       d  Sq8ggUS   S%:X  a6  S[        s=::  a
  [        ::  a  O  O
[        S-   qgSq9[_        X‡S   U 5        Sq8gUS   S&:X  a  gUS   S':X  a  [_        X‡S   U 5        gUS   S(:X  a+  [t        (       a  gS[        s=::  a  [        ::  a   g  [        qgS[        s=::  a  [        ::  a   g  [_        X‡S   U 5        g))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_1rz   r¾   ÚmarkouterparenrÀ   rÓ   r,  ÚcallfunpatternÚanalyzeliner   r!   r¡   Úendswithr&   rÆ   r    r   r   r   r   )r0   Úresetrð   Úhas_semicolonÚsemicolon_lineÚflr1   Úpatró   Úre_1rq   Úm1Úm2r+  s                 r)   r<  r<  ¹  sD  € ô )¨¨sÓ3Ñ€AÞÔ5°aÑ8×>Ñ>¸t×DÑDÜ/°Ñ2×8Ñ8¸×>Ñ>à˜‹zÐ&œ4 ›;Ó&ˆzä0°°sÓ;ÑˆÞÜ�dÔ"Ü#4°^ÀAÀBÐ5GÈÓ#MÑ ˆD÷ ˆnô 	�$ÔØØˆqƒyØˆÜ! 2Ð&ˆ	Ü" BÐ'ˆ
Ü! 2Ð&ˆ	Ø+-Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø,.Œ
”<Ñ  Ñ)Ø+-Œ
”<Ñ  Ñ(ØˆØˆØØˆq„yØˆßŠ=œ\¬\Ó9ØˆBÜ˜RÓÝÜœ,Ö'¬¬i®ð:ô ;äØlônä”l QÑ&Ñ'×.Ñ.¬z¼,Ñ/GÔHÜ6?ÄÑ6MŒI”l QÑ&Ñ'¨Ñ+¨FÑ3Üœ,Ð'Ü'¨!Ñ+ˆLô ˜RÕ÷ Š=œ\¬\Ó9Ü”l QÑ&Ñ'×.Ñ.¬z¼,Ñ/GÔHÜ6?ÄÑ6MŒI”l QÑ&Ñ'¨Ñ+¨FÑ3Üœ,Ð'Ü'¨!Ñ+ˆLÜ”l QÑ&Ñ'×.Ñ.¬z¼,Ñ/GÔHÜ6?ÄÑ6MŒI”l QÑ&Ñ'¨Ñ+¨FÑ3Üœ,Ð'Ü'¨!Ñ+ˆLØˆLØØˆrƒzØØ€DÜ ¤/´=Ä/ÜÜ ¤+¬}¼nÜ ÜœjÜÜœoÔ/@Ü¤¬}ÜœZ¬ÜÜ'Ü Ü&óˆð �‰F�L‰L˜ÓˆÞÙØ�a‰xŠñ#÷$ ÜˆØ”Õ/¤<Ô/Øð 0àœ*¤\Ñ2Ô2Ü"¤<Ñ0°Õ=�Øœ;Ó&Ü& tÑ,�DØ¤:¬lÑ#;Ó;ÀÌ
ÔS_ÑH`ÐamÑHnÓ@nÙÜ—X’XØLÈtÑSÔUcÐdhÓUiÔkm×koÑkoóq�ç�2ØŸ™ B§H¡H¨XÓ$6Ó7�BÜ% b§h¡h¨vÓ&6Ó7�AÞØ!)¨$¨¨q°°°:¸b¿h¹hÀxÓ>PÐ=QÐQRÐS™à!)¨$¨¨q°°°1Ð5˜Ü& qÑ)×/Ñ/°Ó5�AÞÜØRÔSWÐX\ÓS]ÐR^Ð^aÐbôdáÜ  9¨dÔ3Ùñ) >ô* �Q‹;œ7 a›<¬O×,AÑ,AÓ,C×,LÑ,LÈV×,TÑ,TØ#ÐÜÐ9¼\ÑJÔKØØ	ˆQ‰�5ŒØ”Õ.¤,Ö.Ü'¨!Ñ+ˆLÜ¤,Ó.ØÜ˜1ÓÜð 0ä+ñ-ó .ð .ô ˜!‰_×"Ñ" 4Ó(ˆÞ˜Ÿ™ &Ó)¬Y´|Ñ-DÓDÝä! "§(¡(¨6Ó"2Ö3´T¼)ÄLÑ:QÖ5RÞ-ð/ó ð ô
 œlÓ*Ø ˆOÜ”, Ñ"Ñ#×*Ñ*¬:´lÑ+CÔDÜ2;¼LÑ2IŒ	”, Ñ"Ñ# BÑ'¨Ñ/Ü”lÐ#Ü# aÑ'ˆßŠ}Ø‰Kð à	ˆQ‰�7Ó	Ø”Õ/¤<Ö/Ü'¨!Ñ+ˆLØØˆÜ�A˜1‘v˜tÔ$Ø‰Ø	ˆQ‰�7Ó	ØØ	ˆQ‰Ð$Ó	$Ü�A˜1‘v˜tÕ$Ø	ˆQ‰�:Ó	ßŠ>ØØ”Õ/¤<Ô/Øð 0ä&‰à”Õ/¤<Ô/Øð 0ä�A˜1‘v˜tÕ$r(   c                 óŠ   • SnSnU  H8  nUS:X  a  US-   nUS:X  a  US-   nM  OUS:X  a  US-
  nUS:X  a  US-   nM4  X-   nM:     U$ )Nr
   r   r6  r   ú@(@r7  ú@)@r'   )r0   rë   Úfr³   s       r)   rW  rW  W  sq   € Ø
€AØ	€AÛˆØ�‹8Ø�A‘ˆAØ�A‹vØ˜‘I�Ùð ð �#‹XØ�A‘ˆAØ�A‹vØ˜‘I�ÙØ‰EŠñ ð €Hr(   c                 ó6  • SnSn[        XS-   5      u  pEX$-  nU(       a`  US   U:X  a  US:X  a  USU-   S-   -  nO$X%S   -  nUS   S:X  a  US-  nOUS   S:X  a  US-  n[        USS  US-   5      u  pEX$-  nU(       a  M`  U(       a   [        X0U45      5       eU$ )Nr
   r   ú()Ú@r6  r   r7  )rÑ   rÎ   )r0   Úcommarë   rf  r  r  s         r)   r'  r'  i  sÁ   € Ø
€AØ	€AÜ% d°D©LÓ9�M€FØ�K€AÞ
Ø�!‰H˜Ó A¨£FØ��u‘˜sÑ"Ñ"‰Aà�q‘‰MˆAØ�Q‰x˜3‹Ø�Q‘‘Ø�q‘˜S“Ø�Q‘�Ü)¨%°°¨)°U¸T±\ÓB‰ˆØ	‰ˆ÷ ˆ%ö Ð$”$˜ �|Ó$Ó$ˆ5Ø€Hr(   c                 óJ   • U R                  SS5      R                  SS5      nU$ )Nrd  r6  re  r7  )rÐ   )r0   r™   s     r)   Úunmarkouterparenrl  |  s$   € Ø�‰�U˜CÓ ×(Ñ(¨°Ó4€AØ€Hr(   c                 óè  • U (       d  0 n U(       d  U $ XL a  U $ [        UR                  5       5       H¼  nUS:X  a  U(       d  X0;  a  X   X'   M  M  US:X  a  X    H  n[        XU5      n M     M>  US:X  a  [        XU   U5      n MU  US:X  a  [	        XU   U5      n Ml  US;   a  U(       d  X0;  a  X   X'   M†  Mˆ  US:X  a  M�  US;   a  [        SU S	35        M§  [        S
[        U5      -   5      e   U $ )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  �  s  € ÞØˆÞØˆØ‚}ØˆÜ�%—*‘*“,ÖˆØ�
‹?Þ˜›Ø™(�“ñ &à�*‹_Ø”X�Ü" 4¨EÓ2’ó à�.Ó Ü" 4¨q©°5Ó9ŠDØ�.Ó Ü" 4¨q©°5Ó9ŠDØÐ#Ó#Þ˜›Ø™(�“ñ &à�&‹[ÙØð )ó )ä�m A 3Ð&:Ð;Ö<äÐKÜ ›Fñ#ó $ð $ñ)  ð, €Kr(   zD\s*(?P<this>(@\(@.*?@\)@|\*[\d*]+|\*\s*@\(@.*?@\)@|))(?P<after>.*)\Zz[(?:,(?P<attributes>[\w(),]+))?(::)?(?P<name>\b[a-z$_][\w$]*\b)(?:\((?P<params>[\w,]*)\))?\Zzª\s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P<bind>(?:(?!@\)@).)*)\s*@\)@))*\s*\ZzF\s*(?P<scheme>(operator|assignment))@\(@\s*(?P<name>[^)]+)\s*@\)@\s*\Zz9\s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Zz4([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)zA([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))zintent\s*\(.*?\bcallback\bc                 ón   • U R                  S/ 5       H  n[        R                  U5      (       d  M    g   g)Nrn  r   r   )ÚgetÚ_intentcallbackpatternrÒ   )Úvdeclr+  s     r)   Ú_is_intent_callbackr„  µ  s0   € Ø�Y‰Y�z 2Ö&ˆÜ!×'Ñ'¨×*Ó*Ùñ 'ð r(   c                 óx  • SR                  U R                  5       5      n [        R                  U 5      n[	        X5        U(       ak  UR                  S5      nU(       a/  UR                  S5       Vs/ s H  o3R                  5       PM     snO/ nUR                  S5      X!R                  S5      4$ S / S 4$ s  snf )Nr
   Ú
attributesr&  rq   Úparams)rÛ   r(  ÚtypedefpatternrÒ   ÚprintrÓ   r¡   )r0   ra  Úattrsr+  s       r)   Ú_resolvetypedefpatternr‹  ¼  s“   € Ø�7‰7�4—:‘:“<Ó €DÜ	×	Ñ	˜dÓ	#€BÜ	ˆ$„OÞ	Ø—‘˜Ó&ˆÞ9> E§K¡K°Ô$4Ó5Ò$4˜q—‘–Ñ$4Ò5ÀBˆØ�x‰x˜Ó ¯©°Ó(:Ð:Ð:Ø��Tˆ>Ðùò 6s   Á2B7c                 óô   • [         R                  " S[         R                  5      nUR                  U 5      nS nU(       a7  UR	                  S5      nU S UR                  5        XR                  5       S  -   n X4$ )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‘  Æ  sh   € Ü�jŠjÐkÔmo×mqÑmqÓr€GØ�N‰N˜4Ó €EØ€NÞØŸ™ Q›ˆà�N�U—[‘[“]Ð# d¯9©9«;¨<Ð&8Ñ8ˆØÐÐr(   c                 óò  • [        U 5      u  p[        U 5      n [        R                  U 5      nU(       a3  UR	                  S5      UR	                  S5      UR	                  S5      U4$ [
        R                  U 5      nU(       a/  UR	                  S5      S-   UR	                  S5      -   S-   nU/ S S 4$ [        R                  U 5      nU(       a$  UR	                  S5      UR	                  S5      S S 4$ S / S S 4$ )Nrq   r5  r©   Úschemer6  r7  )r‘  rW  ÚnameargspatternrÒ   rÓ   ÚoperatorpatternÚcallnameargspattern)r0   Ú
bind_cnamera  rq   s       r)   Ú_resolvenameargspatternr˜  Ð  sá   € Ü*¨4Ó0Ñ€DÜ˜$Ó€DÜ	×	Ñ	˜tÓ	$€BÞ	Ø�x‰x˜Ó §¡¨&Ó!1°2·8±8¸HÓ3EÀzÐQÐQÜ	×	Ñ	˜tÓ	$€BÞ	Ø�x‰x˜Ó! CÑ'¨"¯(©(°6Ó*:Ñ:¸SÑ@ˆØ�R˜˜tÐ#Ð#Ü	×	"Ñ	" 4Ó	(€BÞ	Ø�x‰x˜Ó §¡¨&Ó!1°4¸Ð=Ð=Ø��T˜4ÐÐr(   c                 óX<  • U R                  S5      nUS:w  a  Sq[        (       aã  US;  aÝ  [        (       dÒ  [        S:  aÈ  [
        R                  R                  [        5      R                  S5      S   n[        SU S	35        Sq[        S-   qS
[        [        '   0 [        [        '   / [        [        '   / [        [           S'   0 [        [           S'   S
[        [           S'   U[        [           S'   S[        [           S'   SqUS;   G	aO  UR                  5       n[         R"                  " SU[         R$                  5      (       a  SnO[[         R"                  " SU[         R$                  5      (       a  SnO-[         R"                  " SU[         R$                  5      (       a  SnUS:X  a7  ['        U R                  S5      5      u  pVnSU0[        [           S   U'   / nSn	O[)        U R                  S5      5      u  pXpšUc  US:X  a  SnOSnUS;  a  [        S5        X5[        4qU(       aC  [+        [-        U5      R                  S5       Vs/ s H  nUR/                  5       PM     sn5      nO/ nSU;   a*  SU;   a  UR1                  S5        SU;   a  M  [        S 5        SnSnUS!;   ae  SnS"[        [           ;  a  gU[        [           S"   ;  a  g[        [            H  nUS   U:X  d  M    g   U[        [           S#   ;   a  gS$S%S!.U   n[2        (       a'  [4        S&:X  a  [        S::  a  [        S'-   qSnUS(;  a  Sn[        S-   q0 [        [        '   / [        [        '   U(       aÊ  [6        S:”  a  [        S)[9        [2        5      -  S5        S*[        [        '   S[        [           S'   [2        [        [           S'   S[        [           S'   / [        [           S'   / [        [           S+'   / [        [           S#'   0 [        [           S'   [        S-   q0 [        [        '   / [        [        '   U(       aæ  [6        S:”  a  [        S,[        -  S5        S-[        [        '   S-[        [           S'   S.[        [           S'   [        [        S-
     S   < S/[        [        S-
     S   < 3[        [           S'   / [        [           S'   / [        [           S+'   / [        [           S#'   0 [        [           S'   [        S-   q0 [        [        '   / [        [        '   U[        [        '   U[        [           S'   U(       d  S0UR;                  S1S25      -   nU R                  S35      [        [           S4'   [=        U5      [        [           S'   U	[        [           S5'   [        S:X  a  [        [        [           S'   O{[2        (       a7  [        S6:X  a-  [        [        S-
     S   < S/[        < 3[        [           S'   O9[        [        S-
     S   < S/[        [        S-
     S   < 3[        [           S'   [?        [        [           RA                  5       5       H(  n[        [           U   (       a  M  [        [           U	 M*     U[        [           S"'   / [        [           S'   / [        [           S+'   / [        [           S#'   0 [        [           S'   0 [        [           S7'   US:X  a  / [        [           S8'   US!;   a¦  U[        [        S'-
     S+   ;  a"  [        [        S'-
     S+   RC                  U5        [D        RF                  " [        [        S'-
     S   5      [        [           S'    [        [           S   U   [        [           S   U   S   RI                  S95      	 US:;   Gaf  W
(       a”  [         RL                  " [N        U
5      nU(       ar  U0 0[        [           S;'   UR                  S<5      [        [           S;   U   S<'   UR                  S=5      (       a%  UR                  S=5      [        [           S;   U   S'    [Q        [        [           S   U   [        [        S'-
     S   S   5      [        [           S   U'   US>:X  a_  U	(       aX  U	[        [           S   ;   aD  XY:X  d?  [Q        [        [           S   U   [        [           S   U	   5      [        [           S   U'    [        [        S'-
     S#   RC                  U5        US%:X  aq  [R        S   R#                  U R                  S35      S1-   U-   5      nU(       a=  [U        UR                  S5      UR                  S5      5      u  nnnn[W        UUUU5        US!;   a¿  [        [        S-
     RC                  [        [           5        [        [           [        [        S-
     S&   S'   [        [        	 [        S-
  q[        [        S-
     RC                  [        [           5        [        [           [        [        S-
     S&   S'   [        [        	 [        S-
  qggUS7:X  a�  [)        U R                  S5      5      u  pXp—Ub|  U(       aC  [+        [-        U5      R                  S5       Vs/ s H  nUR/                  5       PM     sn5      nO/ nU	b   [9        U	5      5       eU[        [           S7   U'   S7U[        4qggUS:X  a;  [U        X0R                  S5      5      u  nnnn[W        UUUU5      nUb
  S?U[        4qggUS@;   Ga  [        [           S   nU R                  S5      R/                  5       nURY                  SA5      nUS:  a©  USB:X  a£  [[        U5      RY                  SC5      S'-
  nUSUS-    SA-   UUS-   S -   nURY                  SA5      nUUS SA:X  aX  S"[        [           ;   aG  [        SDU R                  S5      < USU < SE35        USFR]                  [        [           S"   5      -   nUS:  a  SnSnOUSU R/                  5       nUUS'-   S n[-        U5      R                  S5      n[_        U5      S:”  a%  US   n[        SGSFR]                  USS 5      -  5        Sn[-        U5      R                  S5       Vs/ s H  o»R/                  5       PM     sn GH[  n[`        R#                  U5      nU(       dA  USH;   a  SnOR[c        U Re                  5       5        [        SIU< SJ[9        U5      < SK35        Ma  [=        UR                  S5      5      nUSH;   a  USL;   a  UUR                  S5      -  nUU;  a  0 UU'   USM:X  a  UUR                  S5      -   nUSB:X  aâ  U R                  S5      U-   n[f        R#                  U5      (       a´  U[        [           S"   ;  a’  [        S:”  ax  SN[        [        S'-
     S   ;  a  [        SO5        U[        [           S   :w  aA  [        SPU< SQ[        [           S   < SR35        [        [           S"   RC                  U5        O[i        SSU ST35        O[i        SUU-  5        USV;   a  UnSUU   ;   a  UU   S   RC                  W5        O	W/UU   S'   US9:X  ay  [        [           S   S
:X  a  [        SW5        GM  U[        [           S"   ;  a  GM  S+[        [           ;  a  / [        [           S+'   [        [           S+   RC                  U5        UnGM^     U[        [           S'   Ub
  S?U[        4qggUSX:X  aM  U R                  S5      R                  SF5       Vs/ s H  o»R/                  5       PM     sn[        [           SY'   gUSZ:X  GaW  [        [           S   nU R                  S5      R/                  5       SS& nSn[-        U5      R                  S5       GHæ  n UR                  S[5       Vs/ s H  o»R/                  5       PM     snu  nn[k        U5      n[=        U5      nUU;  a  0 UU'   S[UU   ;   a*  UU   S[   U:X  d  [        S_U< S`UU   S[   < SaU< S	35        [m        UU5      nU(       aý  URo                  Sb5      Sc:X  a   [?        U5      n [p        Rs                  U5       Hj  n [?        UU Ru                  5       U Rw                  5        R                  5       R;                  SdSe5      5      U U Ru                  5       U Rw                  5       & Ml     SR]                  U 5      nOHURo                  Sb5      Sf:X  a3  USS R                  5       R;                  SdSe5      R;                  SFSg5      n [y        U0 U5      n![9        U!5      UU   S['   SUU   ;   a  UU   S   RC                  SZ5        O	SZ/UU   S'   UnGMé     U[        [           S'   Ub
  S?U[        4qggUSj:X  Ga¬  U R                  S5      R/                  5       R                  5       Sk:X  a  S[        [           Sj'   gU R                  S5      (       GaR  [        [           Ro                  Sj0 5      n#U#c  [        Sl5        0 n#[-        U R                  S5      5      R                  S5       GHæ  n0 n$[         R"                  " SmU[         R$                  5      nU(       d  [        SnU S^35        MD  [€        R#                  UR                  S5      5      n%U%(       d  [        SoU S^35        M€  [U        U%R                  S5      U%R                  S5      5      u  nnnn[ƒ        UU5      u  n&n'n(UU$Sb'   U&U$Sp'   U'U$Sq'   U(U$Sr'   [?        U$RA                  5       5       H  nU$U   (       a  M  U$U	 M     [-        UR                  S5      5      R                  S5       H·  n)SsU);   a4   U)R                  Ss5       Vs/ s H  o»R/                  5       PM     snu  n*n+OU)R/                  5       =n*n+[_        U*5      [_        U+5      s=:X  a  S:X  d  O  [        StU) Sv35        M�  […        [‡        U*5      [‡        U+5      S-   5       H  n,U$U#[‰        U,5      '   M     M¹     GMé     U#[        [           Sj'   ggUSw:X  GaE  / nSn-Sn.Sn/Sn0Sn1U R                  S5       H¶  n2U1(       d!  U2Sx:X  a  U0(       + n0U2Sy:X  a  U0(       a  U/S-   n/M+  U2Sz:X  a  U1S-   n1OU2S{:X  a  U1S-
  n1U/S:X  a  U-U2-   n-MO  U/S:X  a  U.U2-   n.M\  U/S':X  d  Md  U-R/                  5       n-U-R‹                  SF5      (       a  U-SS R/                  5       n-URC                  U-U./5        U2n-Sn.Sn/M¸     U/S':X  aL  U-R/                  5       n-U-R‹                  SF5      (       a  U-SS R/                  5       n-URC                  U-U./5        [        [           Ro                  S0 5      n3SnU GHÔ  n4U4S   R/                  5       R�                  SF5      U4S   R/                  5       sU4S'   U4S'   U4S   R‹                  Sz5      (       a  [        S|U4S    S}35        Mm  [�        [+        [-        U4S   5      R                  S5       Vs/ s H  o»R/                  5       PM     sn5      5       GH  u  n5n!U!R‹                  Sz5      (       a  [        S|U! S}35        M.  S~U4S   ;   a  [        SU4S    S}35        MK  U3R‘                  U!0 5        U3U!   Ro                  Sb5      n6[“        U3U!   5      n7U6Sf:X  a  [         R”                  " S€U4S   5      OU4S   R                  SF5      n8 U7(       a  S�S‚R]                  U85       Sƒ3OU8U5   n9U3U!   Ro                  S[5      n>U>(       a  U>U9:w  a  [        S†U! S`U> S‡U9 S^35        U9U3U!   S['   U!nGM     GM×     U3[        [           S'   U(       a
  S?U[        4qggUSˆ:X  Ga.  U R                  S5      R/                  5       nUS   Sy:X  d  S‰U-   n/ n?[         R                  " SyUS'SŠ9u  nn@nAU@R/                  5       n@U@(       d  S‹n@U?RC                  W@WA/5        0 nBSˆ[        [           ;   a  [        [           Sˆ   nBU? Hv  n2U2S   WB;  a  / WBU2S   '   [-        U2S   5      R                  S5       Vs/ s H  o»R/                  5       PM     sn H#  nU(       d  M  WBU2S      RC                  U5        M%     Mx     WB[        [           Sˆ'   SˆW@[        4qgUSŒ:X  GaÑ  [         R"                  " S�U R                  S5      [         R$                  5      nU(       Gao  URe                  5       nCSŒ[        [           ;  a  0 [        [           SŒ'   UR                  S5      n0 [        [           SŒ   U'   SnDSŽWC;   Ga  WCSŽ   Gb  S�WC;   a  WCS�   c  SnDWD[        [           SŒ   U   S�'   WCSŽ   R                  SF5       Vs/ s H  o»R/                  5       PM     nn0 nEU Hª  n4S[U4;   a†  [         R"                  " S‘U4[         R$                  5      n%U%(       a@  U%R                  SŒ5      R/                  5       WEU%R                  S’5      R/                  5       '   O[        S“[9        U45       SE35        OU4WEU4'   WE[        [           SŒ   U   S”'   M¬     ggg[c        U Re                  5       5        [        S•5        gUS–;   aµ  S—[        [           ;  a  0 [        [           S—'   [        [           S—   nFU R                  S5      S˜:X  aK  S˜WF;   aE  [¡        WFS˜   [¢        5      (       a	  WFS˜   /UFS˜'   WFS˜   RC                  U R                  S5      5        gU R                  S5      WFU R                  S5      '   gUS:X  aO  [        c  [6        (       a  [        S™5        g[        nG[¥        [        UG   [        SS' U R                  S5      5        g[6        S:”  a%  [c        U Re                  5       5        [        Sš5        ggs  snf ! [J         a     GN¿f = f! [J         a     GNëf = f! [J         a     GNtf = fs  snf s  snf s  snf s  snf ! [J         a    [        S\U S]U S^35         GMÁ  f = f! [z        [|        [~        4 a   n"[i        ShU< SiU"< SE35         Sn"A"GMõ  Sn"A"ff = fs  snf ! [J         a    [        StU) Su35         G	M5  f = fs  snf ! [–         aá    [™        S„ U8 5       5      (       a¥  / n:U8 H›  n;S…U;;   as   U;R                  S…5      u  n<n=U:R›                  U=R/                  5       /[�        U<5      -  5        ML  ! [ž         a#    U:RC                  U;R/                  5       5         Mx  f = fU:RC                  U;R/                  5       5        M�     U:n8U7(       a  S�S‚R]                  U85       Sƒ3OU8U5   n9 GNvf = fs  snf s  snf )›a|  
Reads each line in the input file in sequence and updates global vars.

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

At the end of analyzeline, information is filtered into the correct dict
keys, but parameter values and dimensions are not yet interpreted.
r9  r  N)rû   r  r  rh   r   Ú.r   z=analyzeline: no group yet. Creating program group with name "rm   Úprogramr/  r0  r1  rq   ÚfromskyÚfrom)rû   r  r  zblock\s*dataú
block datazpython\s*moduleúpython modulezabstract\s*interfaceúabstract interfacerh   r  rn  Ú_BLOCK_DATA_r
   )Ú	interfacerž  r   z2analyzeline: No name/args pattern found for line.
r%  z<analyzeline: argument list is malformed (missing argument).
)r  r  r5  r4  rü   rú   r   r2  ©r¢  r   z&analyzeline: Creating module block %s
Úmoduler3  zDanalyzeline: Creating additional interface block (groupcounter=%s).
r¢  Úunknown_interfaceÚ:Úunknown_r­   rð   r  Úprefixr©   é   r  Úvarnamesr  ©rú   rü   ÚbindlangÚlangÚ	lang_namer  Úvariable)r  r
  r  r  r  r  r  r  ú::r
  re  z"All arguments will have attribute r¹   r&  zXanalyzeline: cannot handle multiple attributes without type specification. Ignoring %r.
©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ÿ   Úimplementedbyr  rq  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 "ro  rp  rr  Ú-z2analyzeline: expected "<char>-<char>" instead of "z&" in range list of implicit statement
z*" in range list of implicit statement (2)
r  Ú'Ú/r6  r7  zanalyzeline: implied-DO list "z" is not supported. Skipping.
r›   zComment line in declaration "z\(.*?\)ú(/ú, z/)c              3   ó,   #   • U  H
  nS U;   v •  M     g7f)r   Nr'   )Ú.0ró   s     r)   Ú	<genexpr>Úanalyzeline.<locals>.<genexpr>µ  s   é € Ð5ªW¨˜3 !ž8ªWùs   ‚r   z*analyzeline: changing init expression of "ú") to "r  z//)ÚmaxsplitÚ_BLNK_r  zR\A\s*(?P<name>\b\w+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\Zrv  ÚnotonlyÚonlyz7\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   r=  r>  r   r¡   r¾   rÒ   rÀ   r‹  r˜  rw   r'  r¦   Úremover   r   r   rÎ   rÐ   rr   rv  rw  r)  ÚcopyÚdeepcopyr[   rÆ   r�  Úcrackline_bindlangr  rO  Úcracktypespec0Ú
updatevarsÚfindrW  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)Hró   r?   r0   r1  Únewnamerq   rŠ  rð   r5  r©   Ú	bindclineÚxÚ
needmoduleÚneedinterfaceÚitr~  ÚbindcdatÚtr4   ÚselectorÚattrÚedeclÚ	last_namerã   ÚiÚplÚchr»  ra  ÚapÚinitexprr‡  ÚttÚvrì   Úimplr{  rb  Ú
kindselectÚ
charselectrr  r™   ÚbegcÚendcÚoÚdlÚilrf  ÚfcÚinpr³   r0  rë   ÚidxÚvtypeÚvdimÚmatchesÚnew_valÚexpanded_listrÒ   Ú
multiplierÚvalueÚcurrent_valÚclÚbnÚolÚ	commonkeyÚmmÚisonlyrï   r#  ÚgcsH                                                                           r)   rY  rY  à  sb  € ð �G‰G�F‹O€EØˆ{ÓØÐß‚{�tÐ#GÓGßŠ}¤°Ó!1Ü—'‘'×"Ñ"¤?Ó3×9Ñ9¸#Ó>¸qÑAˆÜØKÈGÈ9ÐTXÐYô	[àˆÜ# aÑ'ˆØ"+Œ	”,ÑØ#%Œ
”<Ñ Ø"$Œ	”,ÑØ+-Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø,5Œ
”<Ñ  Ñ)Ø+2Œ
”<Ñ  Ñ(Ø+4Œ
”<Ñ  Ñ(ØˆØÐ+Ô+à—‘“ˆÜ�8Š8�O U¬B¯D©D×1Ñ1Ø ‰EÜ�XŠXÐ(¨%´·±×6Ñ6Ø#‰EÜ�XŠXÐ-¨u´b·d±d×;Ñ;Ø(ˆEØ�F‹?Ü3°A·G±G¸GÓ4DÓE‰NˆD˜Ø6@À%Ð5HŒJ”|Ñ$ VÑ,¨TÑ2ØˆDØ‰Fä,CÀAÇGÁGÈGÓDTÓ,UÑ)ˆD˜Ø‰<Ø˜Ó$Ø%‘à�ØÐMÓMÜÐMÔNà!¬Ð6ÐÞÜÜ'5°dÓ';×'AÑ'AÀ%Ô'HóJÚ'H !ð  Ÿg™gžiÙ'HñJó K‰Dð ˆDØ�‹:Ø˜“*Ø—‘˜B”ð ˜•*äØOôQð ˆ
ØˆàÐ&Ó&ØˆMØœZ¬Ñ5Ó5ØØœ:¤lÑ3°FÑ;Ó;ØÜ¤Ô-�Ø�f‘: Õ%Ùñ .ð ”z¤,Ñ/°Ñ=Ó=ØØ)°jÑAÀ$ÑGˆEßŠ=œ\¨RÓ/´LÀAÓ4EÜ'¨!Ñ+ˆLØˆJØÐ?Ó?Ø !�ä# aÑ'ˆØ#%Œ
”<Ñ Ø"$Œ	”,ÑÞÜ˜‹{ÜÐAÜœ]Ó+ñ,Ø-.ô0à&.ŒI”lÑ#Ø0?ŒJ”|Ñ$ WÑ-Ü/<ŒJ”|Ñ$ VÑ,Ø/1ŒJ”|Ñ$ VÑ,Ø/1ŒJ”|Ñ$ VÑ,Ø46ŒJ”|Ñ$ [Ñ1Ø57ŒJ”|Ñ$ \Ñ2Ø/1ŒJ”|Ñ$ VÑ,Ü'¨!Ñ+ˆLØ')ŒJ”|Ñ$Ø&(ŒI”lÑ#ÞÜ˜‹{ÜÐ_Ü ñ"Ø#$ô&à&1ŒI”lÑ#Ø0;ŒJ”|Ñ$ WÑ-Ø/BŒJ”|Ñ$ VÑ,äœ<¨!Ñ+Ñ,¨VÔ4´jÄÐPQÑAQÑ6RÐSYÓ6Zð0\ŒJ”|Ñ$ VÑ,à/1ŒJ”|Ñ$ VÑ,Ø46ŒJ”|Ñ$ [Ñ1Ø57ŒJ”|Ñ$ \Ñ2Ø/1ŒJ”|Ñ$ VÑ,Ü'¨!Ñ+ˆLØ')ŒJ”|Ñ$Ø&(ŒI”lÑ#Ø"'Œ	”,ÑØ,1Œ
”<Ñ  Ñ)ÞØ §¡¨c°3Ó 7Ñ7ˆDØ-.¯W©W°XÓ->Œ
”<Ñ  Ñ*Ü+5°dÓ+;Œ
”<Ñ  Ñ(Ø-3Œ
”<Ñ  Ñ*Ü˜1ÓÜ/>ŒJ”|Ñ$ VÒ,ßŠ]œ|¨qÓ0äœ<¨!Ñ+Ñ,¨VÔ4¶oð0GŒJ”|Ñ$ VÒ,ô œ<¨!Ñ+Ñ,¨VÔ4´jÄÐPQÑAQÑ6RÐSYÓ6Zð0\ŒJ”|Ñ$ VÑ,ä”j¤Ñ.×3Ñ3Ó5Ö6ˆAÜœlÑ+¨A×.Ñ.Üœ|Ñ,¨QÒ/ñ 7ð ,0Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø02Œ
”<Ñ  Ñ-Ø13Œ
”<Ñ  Ñ.Ø+-Œ
”<Ñ  Ñ(Ø,.Œ
”<Ñ  Ñ)à�F‹?Ø35ŒJ”|Ñ$ ZÑ0àÐ&Ó&Øœ:¤l°QÑ&6Ñ7¸ÑDÓDÜœ<¨!Ñ+Ñ,¨[Ñ9×@Ñ@ÀÔFÜ/3¯}ª}Üœ<¨!Ñ+Ñ,¨VÑ4ó06ŒJ”|Ñ$ VÑ,ðÜœ|Ñ,¨VÑ4°TÑ:Üœ|Ñ,¨VÑ4°TÑ:¸:ÑF×LÑLÈZÓXðZð Ð.Ô.æÜŸ9š9Ô%7¸ÓC�ÞØ<@À"¸:”Jœ|Ñ,¨ZÑ8ØIQÏÉÐX^ÓI_”Jœ|Ñ,¨ZÑ8¸Ñ>¸vÑFØ—~‘~ k×2Ñ2ØMUÏ^É^Ð\gÓMhœ
¤<Ñ0°Ñ<¸TÑBÀ6ÑJðÜ9CÜœ|Ñ,¨VÑ4°TÑ:¼JÄ|ÐVWÑGWÑ<XÐY_Ñ<`ÐacÑ<dó:f”
œ<Ñ(¨Ñ0°Ñ6ð �yÓ Þ˜f¬
´<Ñ(@ÀÑ(HÓHØ›>ÜAKÜ&¤|Ñ4°VÑ<¸TÑBÄJÌ|ÑD\Ð]cÑDdÐekÑDlóBnœ
¤<Ñ0°Ñ8¸Ñ>ðÜœ<¨!Ñ+Ñ,¨\Ñ:×AÑAÀ$ÔGð �JÓÜ˜Q‘×%Ñ% a§g¡g¨hÓ&7¸#Ñ&=ÀÑ&DÓEˆAÞÜ2@Ø—G‘G˜F“O Q§W¡W¨WÓ%5ó37Ñ/�˜( D¨%ä˜8 X¨t°UÔ;àÐ&Ó&Ü”l QÑ&Ñ'×.Ñ.¬z¼,Ñ/GÔHÜ6?ÄÑ6MŒI”l QÑ&Ñ'¨Ñ+¨FÑ3Üœ,Ð'Ü'¨!Ñ+ˆLÜ”l QÑ&Ñ'×.Ñ.¬z¼,Ñ/GÔHÜ6?ÄÑ6MŒI”l QÑ&Ñ'¨Ñ+¨FÑ3Üœ,Ð'Ü'¨!Ñ+‰Lð 'ð 
�‹Ü 7¸¿¹ÀÓ8HÓ IÑˆ�FØÑÞÜ Ü+9¸$Ó+?×+EÑ+EÀeÔ+Ló"NÚ+L að #$§'¡'¦)Ù+Lñ"Nó O‘ð �Ø‘>Ð/¤4¨£<Ó/�>Ø6:ŒJ”|Ñ$ WÑ-¨dÑ3Ø '¨¬|Ð<Ñð ð 
�‹Ü*8Ø—7‘7˜7Ó#ó+%Ñ'ˆ�(˜D %ä˜x¨°4¸Ó?ˆ	ØÑ Ø *¨I´|ÐDÑð !à	ÐnÔ	nÜœ<Ñ(¨Ñ0ˆØ�W‰W�WÓ×#Ñ#Ó%ˆØ�G‰G�D‹MˆØˆq‹5�T˜XÓ%Ü˜rÓ"×'Ñ'¨Ó.°Ñ2ˆAØ�F�Q˜‘U�˜dÑ" R¨¨A©¨ ZÑ/ˆBØ—‘˜“ˆAØ�!�"ˆv˜‹~ &¬J´|Ñ,DÓ"DÝØŸ™ �¨"¨R¨a«&ð2ô 3à˜#Ÿ(™(¤:¬lÑ#;¸FÑ#CÓDÑD�Øˆq‹5ØˆAØ‰Bà�B�Q�—‘“ˆBØ�A˜‘E�F�ˆBÜ˜BÓ×%Ñ% eÓ,ˆÜˆr‹7�Q‹;Ø�A‘ˆBÜÐoØ—‘˜˜A˜B˜Ó ñ"ô #àˆ	ä%3°BÓ%7×%=Ñ%=¸eÔ%DÓEÒ%D —'‘'–)Ñ%DÕEˆAÜ×"Ñ" 1Ó%ˆBÞØÐ0Ó0Ø‘Aä˜!Ÿ+™+›-Ô(ÝÛœd 1žgð'ô (áä˜rŸx™x¨Ó/Ó0�ØÐ,Ó,°Ð6PÓ1PØ�R—X‘X˜gÓ&Ñ&�Ø˜‹~Ø��a‘Ø�{Ó"Ø˜BŸH™H WÓ-Ñ-�Ø�xÓØ—W‘W˜V“_ rÑ)�Ü)×/Ñ/°×3Ñ3Ø¤
¬<Ñ 8¸Ñ @Ó@Ü'¨!Ó+Ø)´¼LÈ1Ñ<LÑ1MÈfÑ1UÓUÜ 'Ø$_ô!að  !¤J¬|Ñ$<¸VÑ$DÓDÝ 'Û@AÄ:ÌlÑC[Ð\bÔCcð)eô !fä *¬<Ñ 8¸Ñ @× GÑ GÈÔ Jøä#Ø"@ÀÀÀ=Ð QõSô  ð !6Ø9:ñ!<ô =àÐ]Ó]Ø�Ø˜U 1™XÓ%Ø�a‘˜Ñ$×+Ñ+¨BÕ/à(* t��a‘˜Ñ$Ø�zÓ!ÜœlÑ+¨GÑ4¸	ÓAÜÐGÔHÚØœJ¤|Ñ4°VÑ<Ó<ÚØ¤j´Ñ&>Ó>Ø<>”Jœ|Ñ,¨[Ñ9Üœ<Ñ(¨Ñ5×<Ñ<¸QÔ?Ø‹Iñi Fðj ,1Œ
”<Ñ  Ñ(ØÑ Ø *¨I´|ÐDÑð !à	Ð"Ó	"à !§¡¨Ó 0× 6Ñ 6°sÔ ;Ó<Ò ;˜1�W‰WŽYÑ ;Ñ<ô 	”<Ñ  Ò1à	�Ô	Üœ<Ñ(¨Ñ0ˆØ�W‰W�WÓ×#Ñ#Ó% a¨Ð+ˆØˆ	Ü Ó#×)Ñ)¨%×0ˆAðØ23·'±'¸#´,Ó?²,¨QŸw™wžy±,Ñ?‘��8ô
 $ EÓ*ˆFÜ˜1“ˆAØ˜‹~Ø��a‘Ø�e˜A‘h‹¨¨a©°©¸Ó(AÝÛ�u˜Q‘x ”}£hð0ô 1ä! (¨FÓ3ˆAÞØ—5‘5˜Ó$¨Ó.Ü˜h›�BÜ*×3Ñ3°HÖ=˜Ü04Ø$ Q§W¡W£Y¨q¯u©u«wÐ7×=Ñ=Ó?×GÑGÈÈSÓQó1S˜˜1Ÿ7™7›9 Q§U¡U£WÒ-ñ >ð  "Ÿw™w r›{‘HØ—U‘U˜:Ó&¨)Ó3Ø'¨¨˜|×1Ñ1Ó3×;Ñ;¸CÀÓEß™  WÓ-ð ðÜ˜ 2 vÓ.�ô
 ! ›GˆE�!‰H�S‰MØ˜U 1™XÓ%Ø�a‘˜Ñ$×+Ñ+¨KÕ8à(3 }��a‘˜Ñ$Ø‹IñI 1ðJ ,1Œ
”<Ñ  Ñ(ØÑ Ø *¨I´|ÐDÑð !à	�Ô	Ø�7‰7�7Ó×!Ñ!Ó#×)Ñ)Ó+¨vÓ5Ø37ŒJ”|Ñ$ ZÒ0Ø�W‰W�W×ÒÜœlÑ+×/Ñ/°
¸BÓ?ˆDØ‰|ÜØSôUà�Ü# A§G¡G¨GÓ$4Ó5×;Ñ;¸E×B�Ø�Ü—X’XØPÐRSÔUW×UYÑUYó[�æÜØZÐ[\ÐZ]Ð]aÐbôdáÜ*×0Ñ0°·±¸&Ó1AÓB�ÞÜØcÐdeÐcfÐfjÐkômáÜ2@Ø—H‘H˜VÓ$ b§h¡h¨wÓ&7ó39Ñ/�˜( D¨%ä3@Ø˜hó4(Ñ0�
˜J¨à#+��ZÑ Ø'1��^Ñ$Ø'1��^Ñ$Ø#+��ZÑ Ü˜dŸi™i›kÖ*�AØ Ÿ7™7Ø  šGñ +ô (¨¯©°Ó(9Ó:×@Ñ@ÀÖG�AØ˜a“xð%Ø=>¿W¹WÀS¼\Ó)Jº\¸¯'©'®)¹\Ñ)J™J˜D¡$ð '(§g¡g£iÐ/˜˜tÜ˜t›9¬¨D«	Õ6°QÕ6ÜØPÐQRÐPSÐS~ÐôAá Ü"¤3 t£9¬c°$«i¸!©mÖ<˜Ø'+˜œS ›V›ó =ô Hñ1 CðP 48ŒJ”|Ñ$ ZÒ0ð] ð^ 
�ŒØˆØˆØˆØˆØˆØˆØ—‘˜Ö!ˆAÞØ˜“8Øœ�BØ˜“8¦Ø˜A™�AÙØ�C‹xØ˜A‘g‘Ø�c“Ø˜A‘g�Ø�A‹vØ˜!‘V’Ø�a“Ø˜!‘V’Ø�a•Ø—X‘X“Z�Ø—=‘= ×%Ñ%Ø˜A˜B˜Ÿ™›�BØ—	‘	˜2˜r˜(Ô#Ø�Ø�Ø’ñ- "ð. �‹6Ø—‘“ˆBØ�}‰}˜S×!Ñ!Ø˜˜�V—\‘\“^�Ø�I‰I�r˜2�hÔÜœ,Ñ'×+Ñ+¨F°BÓ7ˆØˆ	ÜˆAØ˜1™Ÿ™›×2Ñ2°3Ó7¸¸1¹¿¹»ˆJˆAˆa‰D�!�A‘$Ø�‰t�‰˜s×#Ñ#ÜÐ8¸¸1¹¸Ð>]Ð^Ô_ÙÜ#¤IÄ.ÐQRÐSTÑQUÓBV×B\ÑB\Ð]bÔBcÓ.dÒBc¸Q¯w©w®yÑBcÑ.dÓ$e×f‘��QØ—<‘< ×$Ñ$ÜÐ<¸Q¸CÐ?^Ð_Ô`ñ Ø˜!˜A™$“;ô Ð;¸A¸a¹D¸6ÐA`ÐaÔbÙØ—‘  2Ô&Ø˜Q™Ÿ™ JÓ/�Ü# D¨¡GÓ,�Ø:?À9Ó:Lœ"Ÿ*š* Z°°1±Ô6ÐRSÐTUÑRV×R\ÑR\Ð]`ÓRa�ðTÞ=A  4§9¡9¨WÓ#5Ð"6°bÑ9ÀwÈsÁ|�Gð& # 1™gŸk™k¨#Ó.�Þ K°7Ó$:ÜÐHÈÈÈ4ÐP[È}Ð\cÐdkÐclÐlpÐqÔrØ&��Q‘˜‘Ø“	ôW gñ ðb ,0Œ
”<Ñ  Ñ(ÞØ *¨I´|ÐDÑð à	�Ô	Ø�w‰w�wÓ×%Ñ%Ó'ˆØ�A‰w˜#‹~Ø˜$‘;ˆDàˆÜ—h’h˜s D°1Ñ5‰ˆˆB�Ø�X‰X‹ZˆÞØˆBØ
�	‰	�2�r�(ÔØˆ	Ø”z¤,Ñ/Ó/Ü"¤<Ñ0°Ñ:ˆIÛˆAØ�‰t˜9Ó$Ø"$�	˜!˜A™$‘Ü)7¸¸!¹Ó)=×)CÑ)CÀEÔ)JÓKÒ)J A—g‘g–iÑ)JÔK�ß�1Ø˜a ™d‘O×*Ñ*¨1Ö-ó Lñ ð .7Œ
”<Ñ  Ñ*Ø$ b¬,Ð7ÑØ	�ŒÜ�XŠXØaÐcd×cjÑcjÐkrÓcsÔuw×uyÑuyó{ˆçØ—‘“ˆBØœJ¤|Ñ4Ó4Ø24”
œ<Ñ(¨Ñ/Ø—8‘8˜FÓ#ˆDØ46ŒJ”|Ñ$ UÑ+¨DÑ1ØˆFØ˜Œ|  6¡
Ò 6Ø “? r¨)¡}Ñ'<Ø�FØ@F”
œ<Ñ(¨Ñ/°Ñ5°fÑ=Ø)+¨F©×)9Ñ)9¸#Ô)>Ó?Ò)> A—g‘g–iÑ)>�Ð?Ø�Û�AØ˜a“xÜŸXšXØVÐXYÔ[]×[_Ñ[_óa˜æØ<>¿H¹HØ %ó='ß',¡u£wð ˜rŸx™x¨Ó0×6Ñ6Ó8Ò9ô $Ø"OÔPTÐUVÓPWÈyÐXZÐ [õ]ð !"˜˜1™ØCE”Jœ|Ñ,¨UÑ3°DÑ9¸%Ó@ò ð !7ˆ|ô( �!—+‘+“-Ô ÜÐGÕHØ	Ð%Ó	%Ø¤Z´Ñ%=Ó=Ø;=ŒJ”|Ñ$Ð%7Ñ8Ü”|Ñ$Ð%7Ñ8ˆØ�7‰7�6‹?˜jÓ(¨Z¸1«_Ü˜!˜J™-¬×-Ñ-Ø!" :¡ ��*‘Øˆj‰M× Ñ  §¡¨Ó!1Õ2à!"§¡¨Ó!1ˆAˆa�g‰g�f‹oÒØ	�Ó	ÜÑ#ßŠwÜÐHÔIØÜˆÜœ
 2™Ü(¨¨!Ð,ØŸ™ ›õ	)ô 
�1‹Üˆa�k‰k‹mÔÜÐ>Õ?ð 
ùòoJøôN ó Úðûô ó Úðûô ó Úðüò."NùòL Fùòt =ùò @øÜó ÜØWÐXYÐWZÐZ`ÐacÐ`dÐdhÐiôkãðûô0  ¤¬IÐ6ó ÝÛ#£Sð*ô +æûðüòb *KøÜ(ó %Ü#Ø"TÐUVÐTWÐW~Ð ôAã$ð%üòn /eøô* "ó Tô
 Ñ5©WÓ5×5Ñ5Ø(*˜Û%,˜EØ" e›|ð!HØ8=¿¹ÀCÓ8HÑ$5 J°Ø$1×$8Ñ$8¸%¿+¹+»-¸Ì3ÈzË?Ñ9ZÖ$[øÜ'1ó !HØ$1×$8Ñ$8¸¿¹»×$Gð!Húð !.× 4Ñ 4°U·[±[³]Ö Cñ &-ð #0˜Þ=A  4§9¡9¨WÓ#5Ð"6°bÑ9ÀwÈsÁ|“Gð#TüòV Lùò& @sD  ÉAq!Ý=7Aq& áAAq7 ã?"Ar ê,Aró
ArþAr#Á@Ar-Á@$Ar(Á@=Ar-ÁF(AsÁP AtÁPAt	ÁP,AtÁZ/At/Á^!At4Ác(Ax"Áh,Ax'Áq&
Aq4Áq3Aq4Áq7
ArÁrArÁr
ArÁrArÁr(Ar-Ár-AsÁsAsÁsAtÁs&AtÁtAtÁt	AtÁtAt,Át+At,Át4.AxÁu#A Av%Áv#AxÁv%)AwÁwAxÁwAwÁwA	AxÁxAxc                 ó\   • SU ;  a  0 U S'   U S   nX;  a  / X1'   X1   R                  U5        g )NÚf2pymultilines©r)  )rÓ   Úcontext_nameÚmlr#  s       r)   rí  rí    s=   € Ø˜uÓ$Ø"$ˆÐÑØÐÑ€AØÓØˆ‰Ø�O×Ñ˜2Õr(   c                 óh  • S nS n[         R                  " SU [         R                  5      (       a  Sn OL[         R                  " SU [         R                  5      (       a  Sn OU R                  5       R	                  5       n [
        R                  [        U5      5      nU(       d  [        S5        g UR                  5       n[        UR                  5       5       H  n[        XV   5      XV'   M     U S;   a
  US   nUS   nUR                  S	5      nUS
:¼  a  US U R                  5       nXS-   S  nXX14$ )Nzdouble\s*complexúdouble complexzdouble\s*precisionzdouble precisionz>cracktypespec0: no kind/char_selector pattern found for line.
)r¼  r7   Úlogicalr5   Ú	characterrh   r9  r  r°  r   r2  )r¾   rÒ   rÀ   r¦   r¡   ÚselectpatternrW  r2   r!  rv  rw  rl  rÖ  )r4   rã   rö  r÷  ra  r#  r~  rú  s           r)   rÔ  rÔ  !  s  € Ø€HØ€DÜ	‡x‚xÐ# X¬r¯t©t×4Ñ4Ø#‰Ü	�ŠÐ'¨´2·4±4×	8Ñ	8Ø%‰à—>‘>Ó#×)Ñ)Ó+ˆÜ	×	Ñ	œ^¨BÓ/Ó	0€BÞÜØMô	OàØ
�‰‹€AÜ�!—&‘&“(Ž^ˆÜ ¡Ó%ˆ‹ñ àÐQÓQØ�V‘9ˆØˆw‰ZˆØ
�‰�‹€AØˆAƒvØ�"�1ˆv�|‰|‹~ˆØ�A‘�ˆZˆØ˜tÐ'Ð'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                 óì   • U R                  5       n [        U 5      S::  a  U $ U S   n[        S[        U 5      S-
  5       H*  nX   S:X  a  XS-      S;   d  XS-
     S;   a  M#  XU   -   nM,     XS   -   nU$ )Nr   r   r­   z()[]{}=+-/* r   )r¦   rX   rÁ   )ÚexprÚexpr2rú  s      r)   Úremovespacesr(  J  s…   € Ø�:‰:‹<€DÜ
ˆ4ƒy�Aƒ~ØˆØ�‰G€EÜ�1”c˜$“i !‘mÖ$ˆØ‰G�s‹NØ�q‘5‰k˜^Ó+Ø˜!‘e‘ Ó.ÙØ˜Q™‘Šñ %ð ˜‘HÑ€EØ€Lr(   c                 ó¼   • SnSnSnSnU  HM  nUS:X  a  US;   a  X-  nUnM  U(       d  US;   a  UnXS:X  a  U(       + nOUS:X  a  U(       a  US-  nMG  X-  nUnMO     U$ )	zÿ
The function replace all spaces in the input variable line which are
surrounded with quotation marks, with the triplet "@_@".

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

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

Returns
-------
str

r
   FNÚ\)r*  r¿  Ú")r¿  r+  r­   ú@_@r'   )r0   ÚfragmentÚinsideÚcurrent_quoteÚescapedr³   s         r)   Úmarkinnerspacesr1  Y  s…   € ð  €HØ€FØ€MØ€GÛˆØ�d‹?˜qÐ$5Ó5Ø‰MˆHØˆGÙÞ˜!˜{Ó*ØˆMØÓØ”Z‰FØ�#‹Xž&Ø˜ÑˆHÙØ‰ˆØŠñ ð €Or(   c                 óX  • Sn[        X5      u  pVnU(       a»  [        U5      R                  S5       Vs/ s H  oˆR                  5       PM     nn/ n	[        R
                  " S5      n
U Hd  nU(       d  M  U
R                  U5      nU(       a/  UR                  S5      R                  5       nXÛ[        U5      S -   nU	R                  U5        Mf     U	n[        U5      R                  S5       Vs/ s H  oˆR                  5       PM     nn/ nU H}  n[        [        [        U5      5      SS9R                  S5       Vs/ s H  oˆR                  5       PM     sn H-  nU(       d  M  UR                  UR                  SS5      5        M/     M     U GH…  n[        R                  U5      nU(       d  [        S	[!        U5       S
35        M:  [#        UR                  S5      5      n0 nU[$        [&           S   ;   Ga>  [$        [&           S   U   R)                  5       nSU;  nU(       a  U US'   O+U (       a$  U US   :X  d  [        SU< SUS   < SU < S35        SU;  a  [(        R(                  " U5      US'   O…U(       a~  [+        UR-                  5       5       Ha  nUUS   ;   a6  UU   US   U   :X  d'  [        SU< SU< SUS   U   < SUU   < S3	5        MB  [(        R(                  " UU   5      US   U'   Mc     SU;  a)  U(       a"  U(       a  UUS'   Oš[/        SU< SU< S35        O…U(       a~  [+        UR-                  5       5       Ha  nUUS   ;   a6  UU   US   U   :X  d'  [        SU< SU< SUS   U   < SUU   < S3	5        MB  [(        R(                  " UU   5      US   U'   Mc     SU;  a  UUS'   O+U(       a$  US   U:X  d  [        SU< SUS   < SU< S35        SU;  a  [(        R(                  " U5      US'   O™U(       a(  U H"  nUUS   ;  d  M  US   R                  U5        M$     Oi[(        R(                  " U 5      US'   [(        R(                  " U5      US'   [(        R(                  " U5      US'   UUS'   [(        R(                  " U5      US'   SUR1                  S5      =(       d    / ;   aT  U[$        [&           S   ;   a@  S[$        [&           ;  a  / [$        [&           S'   [$        [&           S   R                  U5        UR                  S 5      (       Gav  [2        R                  [5        UR                  S 5      5      5      nU(       Ga!  UR7                  5       nS! H  nUUS"-      c  M  UUS"-      UU'   UUS"-   	 M!     [+        UR-                  5       5       H  nUU   b  [9        UU   5      UU'   M  UU	 M!     S#U;   a‹  S$U;   a…  US#   S%:X  a  US$   US#'   US$	 OpU S&:X  a3  SU;  d
  US   (       d  0 US'   S#US   ;   a  US   S#	 US#   US   S''   US#	 O7US$   S(-   US#   -   US$'   US#	 [/        S)U < SU< S*U < SU< S+US$   < S,35        S#U;   ab  U S-;   a$  SU;  d
  US   (       d  0 US'   US#   US   S''   US#	 O8U S&:X  a2  SU;  d
  US   (       d  0 US'   S#US   ;   a  US   S#	 US#   US   S''   US#	 S.U;   a9  S/U;   a+  US/   US.   :X  d  [        S0U< SUS/   < SUS.   < S35        OUS.   US/'   S$U;   aq  S1US$    S23nSU;  d
  US   (       d  U/US'   OrUS   R                  U5        US    H4  nUSS3 S4:X  d  M  UU:w  d  M  US   S5	 [/        SU< S6U< S7U< S35          O#   O [        S8UUR                  S 5      -   -  5        [+        UR-                  5       5       H  nUU   (       a  M  UU	 M     U[$        [&           S   U'   S9[$        [&           ;   a  [$        [&           S9   R                  U5        UnGMˆ     U$ s  snf s  snf s  snf ):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.
Nr%  z(?P<start>[a-zA-Z]+)rŽ  r­   ©rj  z@ @r,  z-updatevars: no name pattern found for entity=r²  rq   r0  r4   z+updatevars: attempt to change the type of "rº  rÇ  z". Ignoring.
ro  z0updatevars: attempt to change the kindselector "r¸  rp  zupdatevars:z*: attempt to change empty charselector to r¼   z0updatevars: attempt to change the charselector "rr  z/updatevars: attempt to change the typename of "rn  r  r5  r3  r  )rX   ÚarrayÚinitÚ2rX   r4  r
   r#  r   r&  zupdatevars: "z" is mapped to "r6  z)"
©r¼  r7   r"  r5   r5  rq  z6updatevars: attempt to change the init expression of "ú
dimension(r7  é	   r  r   z: attempt to change r¶  z?updatevars: could not crack entity declaration "%s". Ignoring.
rª  )rá  r'  r(  r¦   r¾   r¿   rÒ   rÓ   r¡   rX   r)  r(  r1  rÐ   r×  r2   rÎ   rr   r>  r   rÑ  rv  rw  ro   r�  ÚlenarraypatternrW  r!  rl  )r4   rö  rn  Ú
entitydeclrù  r  r  rr  rð  rë   r³   r+  ró   ÚsÚelÚel1r»  Úe1Úenamerø  Únot_has_typespecr~  ra  Úd1ÚlkÚdmÚdm1s                              r)   rÕ  rÕ  ~  s
  € ð €IÜ'4°XÓ'HÑ$€J˜HæÜ'5°hÓ'?×'EÑ'EÀeÔ'LÓMÒ'L !—G‘G–IÑ'LˆÐMØˆÜ�JŠJÐ.Ó/ˆÛˆAÞÙØ—‘˜“
ˆAÞØ—G‘G˜GÓ$×*Ñ*Ó,�Øœ#˜a›&˜'˜
‘N�Ø�H‰H�QŽKñ ð ˆÜ+¨JÓ7×=Ñ=¸eÔDÓ	EÒD˜�'‰'Ž)ÑD€BÐ	EØ
€CÛˆÜ&4´\Ä/ÐRSÓBTÓ5UÐ]`Ñ&a×&gÑ&gÐhmÔ&nÓoÒ&n —7‘7–9Ñ&nÔoˆBßˆrØ—
‘
˜2Ÿ:™: e¨SÓ1Ö2ó pñ ô ˆÜ×Ñ˜aÓ ˆÞÜØ?ÄÀQÃ¸yÈÐVôXáÜ˜1Ÿ7™7 6›?Ó+ˆØˆØ”Jœ|Ñ,¨VÑ4Ô4Üœ|Ñ,¨VÑ4°UÑ;×@Ñ@ÓBˆEØ)°Ñ6ÐÞØ$,��jÒ!Þ 8¨u°ZÑ/@Ó#@ÝÛ˜5 Ô,«hð8ô 9à UÓ*Ü(,¯	ª	°*Ó(=��nÒ%ÞÜ˜jŸo™oÓ/Ö0�AØ˜E .Ñ1Ó1¸:Àa¹=ÈEÐR`ÑLaÐbcÑLdÓ;dÝÛ›u e¨NÑ&;¸AÔ&>À
È1Äð!Oö Pô 48·9²9¸ZÈ¹]Ó3K˜˜nÑ-¨aÓ0ñ 1ð  UÓ*®zÞ#Ø,6�E˜.Ò)åÛ$£jð2õ 3æÜ˜jŸo™oÓ/Ö0�AØ˜E .Ñ1Ó1¸:Àa¹=ÈEÐR`ÑLaÐbcÑLdÓ;dÝÛ›u e¨NÑ&;¸AÔ&>À
È1Äð!Oö Pô 48·9²9¸ZÈ¹]Ó3K˜˜nÑ-¨aÓ0ñ 1ð  Ó&Ø$,��jÒ!Þ 5¨Ñ#4¸Ó#@ÝÛ˜5 Ô,«hð8ô 9à Ó&Ü$(§I¢I¨hÓ$7��jÒ!ÞÛ!�AØ  jÑ 1Õ1Ø˜jÑ)×0Ñ0°Ö3ñ "øô !%§	¢	¨(Ó 3ˆE�*ÑÜ$(§I¢I¨jÓ$9ˆE�.Ñ!Ü$(§I¢I¨jÓ$9ˆE�.Ñ!Ø (ˆE�*ÑÜ $§	¢	¨(Ó 3ˆE�*ÑØ˜%Ÿ)™) JÓ/×5°2Ó6¸1Ä
Ì<Ñ@XÐY_Ñ@`Ó;`Ø¤*¬\Ñ":Ó:Ø8:”
œ<Ñ(¨Ñ5Ü”|Ñ$ [Ñ1×8Ñ8¸Ô;Ø�7‰7�7×ÒÜ ×&Ñ&¤~°a·g±g¸gÓ6FÓ'GÓHˆBßØ—\‘\“^�Û2�BØ˜"˜s™(‘|Ó/Ø!# B¨¡H¡˜˜2™Ø˜r C™xšLñ 3ô ˜bŸg™g›iž�AØ˜!‘uÑ(Ü 0°°A±Ó 7˜˜1›à˜qšEñ	 )ð ˜B“; 7¨b£=Ø˜%‘y B“Ø$& w¡K˜˜5™	Ø˜w™KØ! [Ó0Ø*°%Ó7ÀÀ~×AVØ46˜E .Ñ1Ø  E¨.Ñ$9Ó9Ø % nÑ 5°eÐ <Ø57¸±Y˜˜nÑ-¨cÑ2Ø˜u™Ià&(¨¡k°CÑ&7¸"¸U¹)Ñ&C˜˜7™Ø˜u˜IÝÛ$£a«³5¸"¸W¼+ð!Gô Hð ˜B“;ØÐ#LÓLØ*°%Ó7ÀÀ~×AVØ46˜E .Ñ1Ø57¸±Y˜˜nÑ-¨cÑ2Ø˜u™IØ! [Ó0Ø*°%Ó7ÀÀ~×AVØ46˜E .Ñ1Ø  E¨.Ñ$9Ó9Ø % nÑ 5°eÐ <Ø57¸±Y˜˜nÑ-¨cÑ2Ø˜u˜Ià˜R“<Ø˜e“|¨U°3©Z¸2¸f¹:Ó-EÝÛ! 5¨¤:¨r°&¬zð!;õ <ð &(¨¡Z˜˜c™
à˜b“=Ø% b¨¡k ]°!Ð4�BØ!¨Ó.°u¸Z×7HØ-/¨D˜˜jÒ)à˜jÑ)×0Ñ0°Ô4Ø#(¨Ô#4˜CØ" 2 A˜w¨+Õ5¸#À½)Ø$)¨*Ñ$5°bÐ$9Ý 'Û+0³#³rð);ô !<á %ñ $5øô ÐZØ˜AŸG™G GÓ,Ñ,ñ.ô /ä�e—j‘j“lÖ#ˆAØ˜—8‘8Ø˜!’Hñ $ð 38Œ
”<Ñ  Ñ(¨Ñ/Øœ¤LÑ1Ó1Ü”|Ñ$ ZÑ0×7Ñ7¸Ô>Ø‹	ñK ðL Ðùòq Nùò 
Fùò ps   ´`Ã/`"Ä>`'c                 óÎ  • S nS nS nU(       GaT  U S;   a®  [         R                  U5      nU(       d  [        S[        U5       S35        g UR	                  5       nUS   US'   US	 [        UR                  5       5       H  nX%   (       a  M  X%	 M     [        UR                  5       5       H  u  pV[        U5      X%'   M     GO U S:X  Ga"  [        R                  U5      nU(       d  [        S[        U5       S35        g UR	                  5       nUS   US'   US	 US	   (       ah  [        R                  [        US	   5      5      nUR	                  5       nS
 H#  nXxS-      (       a	  XxS-      Xx'   Xx   X8'   XxS-   	 M%     US   b  US   US'   US		 [        UR                  5       5       H  nX5   (       a  M  X5	 M     [        UR                  5       5       H  u  pV[        U5      X5'   M     OwU S:X  aY  [        R                  " SU[        R                  5      nU(       a  UR                  S5      nO2[        S[        X-   5      -  5        O[        S[        U5       S35        X#U4$ )Nr7  z1cracktypespec: no kindselector pattern found for r¹   Úkind2r   r#  z1cracktypespec: no charselector pattern found for ÚcharlenÚlenkind)rX   Úkindr6  Úf2py_lenrh   z\s*\(\s*(?P<name>\w+)\s*\)rq   z'cracktypespec: no typename found in %s
z$cracktypespec: no selector used for )ro  rÒ   r2   rÎ   r!  rv  rw  Úitemsrr   rp  Úlenkindpatternr'  r¾   rÀ   rÓ   )	r4   rö  r  r  rr  r~  rú  rI  rC  s	            r)   rá  rá  '  s\  € Ø€JØ€JØ€HßØÐ@Ó@Ü%×+Ñ+¨HÓ5ˆJÞÜØGÌÈXËÐGWÐWYÐZô\àØ#×-Ñ-Ó/ˆJØ(¨Ñ1ˆJ�s‰OØ˜7Ð#Ü˜*Ÿ/™/Ó+Ö,�Ø!—}‘}Ø"šñ -ô ˜Z×-Ñ-Ó/Ö0‘�Ü *¨1£�
“ó 1à˜Ô$Ü%×+Ñ+¨HÓ5ˆJÞÜØGÌÈXËÐGWÐWYÐZô\àØ#×-Ñ-Ó/ˆJØ(¨Ñ3ˆJ�s‰OØ˜9Ð%Ø˜)×$Ü(×.Ñ.Ü" :¨iÑ#8Ó9ó;�à!×+Ñ+Ó-�Û)�BØ C™x×(Ø&-°3©hÑ&7˜™Ø%,¡[�J‘NØ S¡Ò)ñ	 *ð
 ˜:Ñ&Ñ2à-4°ZÑ-@�J˜zÑ*Ø˜9Ð%Ü˜*Ÿ/™/Ó+Ö,�Ø!—}‘}Ø"šñ -ô ˜Z×-Ñ-Ó/Ö0‘�Ü *¨1£�
“ò 1à˜ÓÜ—x’xÐ =¸xÌÏÉÓNˆHÞØ#Ÿ>™>¨&Ó1‘äÐBÜ˜hÑ1Ó2ñ4õ 5ô Ð:¼4À»>Ð:JÈ"ÐMÔNØ 8Ð+Ð+r(   c                 óà  • U (       d  0 n U(       d  U $ SU ;  a  U/U S'   U $ U(       a  U S   R                  U5        XS   ;   a  U $ US:X  a  SU S   ;  a  U S   R                  U5        U $ US:X  a  SU S   ;  a  U S   R                  U5        U $ US:X  a  SU S   ;  a  U S   R                  U5        U $ US:X  a  SU S   ;  a  U S   R                  U5        U $ U S   R                  U5        U $ )Nrn  rJ   Ú	automaticr  r  r  )r{  r÷  r}  s      r)   rx  rx  b  s+  € ÞØˆÞØˆØ˜ÓØ ˜6ˆˆZÑØˆÞØˆZÑ×Ñ Ô%Ø�JÑÓØˆØˆxÓ˜K¨t°JÑ/?Ó?ØˆZÑ×Ñ Ô%ð €Kð 
�Ó	 °°jÑ1AÓ!AØˆZÑ×Ñ Ô%ð €Kð 
�Ó	Ø˜D Ñ,Ó,Ø�Ñ×#Ñ# DÔ)ð €Kð 
�Ó	Ø˜4 
Ñ+Ó+Ø�Ñ×#Ñ# DÔ)ð €Kð 	ˆZÑ×Ñ Ô%Ø€Kr(   c                 ó¸   • U (       d  0 n U(       d  U $ SU ;  a  XS'   U $ [        UR                  5       5       H  nU(       d
  X0S   ;  d  M  X   U S   U'   M      U $ )Nro  ©rv  rw  ©r{  Úselr}  r~  s       r)   ry  ry  }  sa   € ÞØˆÞØˆØ˜TÓ!Ø"ˆ^ÑØˆÜ�#—(‘(“*ÖˆÞ�A .Ñ1Õ1Ø&)¡fˆD�Ñ  Ó#ñ ð €Kr(   c                 ó¸   • U (       d  0 n U(       d  U $ SU ;  a  XS'   U $ [        UR                  5       5       H  nU(       d
  X0S   ;  d  M  X   U S   U'   M      U $ )Nrp  rQ  rR  s       r)   rz  rz  ‹  sa   € ÞØˆÞØˆØ˜TÓ!Ø"ˆ^ÑØˆä�#—(‘(“*ÖˆÞ�A .Ñ1Õ1Ø&)¡fˆD�Ñ  Ó#ñ ð €Kr(   c                 ó   • SU ;   a  U S   $ U$ )Nrq   r'   )r1  Úunknowns     r)   ÚgetblocknamerW  š  s   € Ø�ƒØ�V‰}ÐØ€Nr(   c                 óD   •  SU S    SU S    S3q g ! [         a     g f = f)NzIn: r�  r¦  rq   r¹   )r    rÆ   )r1  s    r)   ÚsetmesstextrY  ¢  s6   € ðØ! %¨¡- °°%¸±-°ÀÐCÑøÜó Ùðús   ‚ ’
žc                 óf   • 0 nSU ;   a  [        U S   5      nSU ;   a  UR                  U S   5        U$ )NÚparent_blockr  )Úget_usedictÚupdate)r1  Úusedicts     r)   r\  r\  «  s:   € Ø€GØ˜ÓÜ˜e NÑ3Ó4ˆØ�ƒ~Ø�‰�u˜U‘|Ô$Ø€Nr(   c           
      ó  • Uc  0 n[        U 5      nU(       d  U$ [        UR                  5       5       HÈ  u  p4UR                  5       nU[        ;  a%  [        SU< SU R                  S5      < S35        MD  [        U   n[        U5      nU(       d  Ma  U(       a  [        SU S35        [        UR                  5       5       H4  u  pxXq;   a&  [        S[        U5      < S[        U5      < S35        X�U'   M6     MÊ     U$ )	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 )
r\  rv  rL  r¡   r   r2   r�  rØ  ro   rÎ   )	r1  Ú	param_mapr^  ÚusenameÚmappingÚmvarsr‡  r~  r   s	            r)   Úget_useparametersrd  ´  sá   € ð ÑØˆ	Ü˜%Ó €GÞØÐÜ  §¡£Ö1ÑˆØ—-‘-“/ˆØœ-Ó'ÝÛ˜eŸi™i¨Ö/ð1ô 2áÜ˜gÑ&ˆÜ Ó&ˆÞÙæÜÐ5°g°Y¸lÐKÔLÜ˜Ÿ™›Ö(‰DˆAØ‹~ÝÜ59¸!¶W¼dÀ7¾mðMô Nà�a‹Ló	 )ñ 2ð& Ðr(   c           	      óô  • [         (       d  U $ [        U [        5      (       a  U  Vs/ s H  n[        X1S-   US9PM     nnU$ [	        U 5        [        U SU S    S3S5        Uc  [        U 5      nUbW  SU ;   aQ  U S   n[        UR                  5       5       H/  nXV   nSU;   d  M  US   nS	U;   d  M  US	   n	X’;   d  M(  X)   US	'   M1     U S
    V
s/ s H  n
[        X¡S-   US9PM     nn
X°S
'   U $ s  snf s  sn
f )Nrœ   )Útabr`  úBlock: rq   r¹   r   r0  ro  rJ  r/  )r   rì  rv  Ú
postcrack2rY  r2   rd  rw  )r1  rf  r`  ÚgÚretr0  rª   ÚvarrJ  ÚvalÚbÚnew_bodys               r)   rh  rh  Ò  s)  € ÷ Š=ØˆÜ�%œ×ÑáóÚ�1ô ˜! t¡°yÔAÙð 	ð àˆ
Ü�ÔÜˆsˆe�7˜5 ™=˜/¨Ð,¨aÔ0àÑÜ% eÓ,ˆ	àÑ ¨5£Ø�V‰}ˆÜ�d—i‘i“kÖ"ˆAØ‘'ˆCØ Õ$Ø˜>Ñ*�Ø˜T•>Ø˜v™,�CØÕ'Ø'0¡~˜˜V›ñ #ð ˜všó(Ú&�Aô ˜1¨¡*¸	ÔBÙ&ð ð (àˆ&�Mà€Lùò/ùò&(s   §C0ÃC5c                 óN  • [        U [        5      (       a[  / n/ nU  HM  n[        U5        [        XRS-   S9nSU;   a  SUS   ;   a  UR	                  U5        M<  UR	                  U5        MO     XC-   $ [        U 5        [        U [
        5      (       d  SU ;  a  [        S[        U 5      -   5      eSU ;   a  U S   S:X  d  [        U SU S    S	3S
5        [        U 5      n [        U 5      n [        U 5      U S'   [        U S   5      U S'   U R                  S5      (       a  U S   n[        XUS9U S'   / nSU ;   a?  U S   n[        UR                  5       5       H  nSU;   d  M  UR	                  U5        M     O0 nSn	SU ;   a  U S   n	U R                  S5      (       Ga~  / n
SU ;   a  U S   n
[         R                   " U S   5      nU	(       a  U	S-   nOSnXÆ;   a&  SnU SU 3U;   a  US-   nU SU 3U;   a  M  U SU 3nS/ 0 U	S-   S.nU S    HÏ  nXú;   a¢  / nSnU S    H  nUS-   nUS   S:X  d  M  SnUS    H7  nUS-   nSU;   d  M  US   U:X  d  M  [         R                   " U5      nUS   U	   O   U(       d  M^  US   (       d  U S   U	 XªR#                  U5      	   O   US   R	                  U5        Mª  Xû;   d  M±  [%        X¿   5      (       a  MÅ  X¿   US   U'   MÑ     US   (       d
  US   (       a(  X S'   SU/0 XÀS   S.n0 X|'   [&        R	                  U5        U(       a  XpS'   U $ )zY
TODO:
      function return values
      determine expression types if in argument list
rœ   ©rf  rq   rµ  r1  z0postcrack: Expected block dictionary instead of r¥  rg  r¹   r   r0  Úsortvarsr5  r/  r  r
   r3  r4  Ú__user__routinesÚunknown__user__routinesr   rð   r¢  Ú_user_interface)r1  r/  r0  rq   r   rŸ  )r1  r/  r0  rq   r4  )rì  rv  rY  Ú	postcrackr)  ÚdictrÆ   rÂ   r2   ÚanalyzeargsÚanalyzecommonÚanalyzevarsÚsortvarnamesr�  Úanalyzebodyrw  rÑ  r[   Ú
isexternalr   )r1  r5  rf  ÚgretÚuretri  ÚuserisdefinedÚuseblockr~  rq   r4  rc  Úmnamerú  r¢  r»  ÚedefÚjrm  ÚbbÚmblocks                        r)   ru  ru  ò  s~  € ô �%œ×ÑØˆØˆÛˆAÜ˜ŒNÜ˜! t¡Ñ,ˆAà˜‹{˜z¨Q¨v©YÓ6Ø—‘˜A–à—‘˜A–ñ ð ‰{ÐÜ�ÔÜ�eœT×"Ñ" w°eÓ';ÜÐJÜ˜E›
ñ#ó $ð 	$à�ƒ˜u V™}Ð0CÓCÜ�3�%�w˜u V™}˜o¨RÐ0°!Ô4Ü˜Ó€EÜ˜%Ó €EÜ Ó&€Eˆ&�MÜ$ U¨6¡]Ó3€Eˆ*ÑØ‡y�y�×ÑØ�V‰}ˆÜ °Ñ5€Eˆ&�Mà€MØ�ƒ~Ø˜‘<ˆÜ�h—m‘m“oÖ&ˆAØ˜Q�Ø×$Ñ$ QÖ'ò 'ð ˆØ€DØ�ƒØ�V‰}ˆà‡y�y�×ÒØˆ
Ø˜5Ó Ø˜|Ñ,ˆJÜ—	’	˜% ™-Ó(ˆÞØÐ-Ñ-‰Eà-ˆEØÓ!ØˆAØ�G˜1˜Q˜C�. MÓ1Ø˜‘E�ð �G˜1˜Q˜C�. MÕ1à�g˜Q˜q˜c�NˆEØ)°2Ø¨Ð0AÑ)AñCˆ	à�{Ô#ˆAØ‹Ø�Ø�Ø˜vœ�AØ˜A™�AØ˜‘z [Õ0Ø˜Ø"# F¤)˜BØ ! A¡˜AØ%¨�|°°6±
¸aµÜ'+§y¢y°£} Ø$% f¡I¨a LÙ %ñ #,÷  ˜4Ø#$ V§9Ø$)¨&¡M°!Ð$4Ø *×+;Ñ+;¸AÓ+>Ð ?Ù!ñ 'ð ˜&Ñ!×(Ñ(¨Ö.Ø•¤J¨u©x×$8Ó$8Ø',¡x�	˜&Ñ! !Ó$ñ+ $ð, �V× 	¨&× 1Ø",�,ÑØ.Øð9Ø$&°È;ÑEWñYˆFà ˆH‰OÜ×Ñ˜vÔ&ÞØˆe‰Ø€Lr(   c                 ó  • / n/ n[        U R                  5       5       H;  nSX   ;   a  X   S   (       a  UR                  U5        M*  UR                  U5        M=     [        U5      nSnU(       a�  US   nSnUSS   H  nXpU   S   ;   d  M  Sn  O   U(       a;  USS  U/-   nUS-   nXT:”  a'  [	        SSR                  U5      -   S-   5        X-   n U$ O#UR                  U5        USS  n[        U5      nSnU(       a  M�  U$ )Nru  r   r   zTsortvarnames: failed to compute dependencies because of cyclic dependencies between rÂ  r¹   )rv  rw  r)  rX   ro   rÛ   )r0  ÚindepÚdepr   rª   rú  r^  Úws           r)   rz  rz  Q  s'  € Ø€EØ
€CÜ�$—)‘)“+ÖˆØ�t‘wÓ 4¡7¨8×#4Ø�J‰J�qŽMà�L‰L˜ŽOñ	 ô
 	ˆC‹€AØ	€AÞ
Ø�‰FˆØˆØ�Q�R“ˆAØ˜‘G˜HÑ%Õ%Ø�Ùñ ö Ø�a�b�'˜Q˜C‘-ˆCØ�A‘ˆAØ‹uÜð ;àŸ)™) C›.ñ)à+/ñ0ô 1ð ™�Øð €Lð ð �L‰L˜ŒOØ�a�b�'ˆCÜ�C“ˆAØˆA÷) ˆ#ð* €Lr(   c           	      óæ  • [        U 5      (       d  U $ / n[        U S   R                  5       5       GHŸ  n/ nU S   U    GH…  n[        R                  " SU[        R
                  5      nU(       Ga.  / nUR                  S5      (       aG  [        UR                  S5      5      R                  S5       Vs/ s H  nUR                  5       PM     nn[        UR                  S5      R                  5       5      nX€S   ;   aZ  SU S   U   ;   a.  U S   U   S   R                  SS	R                  U5       S
35        ONSS	R                  U5       S
3/U S   U   S'   O.U(       a  SSS	R                  U5       S
3/0U S   U'   O0 U S   U'   X�;  a  UR                  U5        OUn[        SU SU S35        UR                  U5        GMˆ     X0S   U'   GM¢     SU ;  a  XS'   U $ U S   U-   U S'   U $ s  snf )Nr  z2\A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\ZÚdimsr%  rq   r0  rn  r8  r&  r7  z:analyzecommon: failed to extract "<name>[(<dims>)]" from "z" in common /z/.
Ú
commonvars)Ú	hascommonrv  rw  r¾   rÒ   rÀ   rÓ   r'  r(  r¦   rr   r)  rÛ   ro   )	r1  rŒ  r~  Úcomvarsr»  ró   r‹  rð  rª   s	            r)   rx  rx  s  s  € Ü�U×ÑØˆØ€JÜ�%˜‘/×&Ñ&Ó(×)ˆØˆØ�x‘ Õ#ˆAÜ—’ØEÀqÌ"Ï$É$óPˆAçØ�Ø—7‘7˜6—?‘?ä%3°A·G±G¸F³OÓ%D×%JÑ%JÈ5Ô%QóSÚ%Q ð ŸG™GžIÙ%Qð ð Sä˜qŸw™w v›×4Ñ4Ó6Ó7�Ø˜f™Ó%Ø! U¨6¡]°1Ñ%5Ó5Ø˜f™ aÑ(¨Ñ4×;Ñ;Ø(¨¯©°$«Ð(8¸Ð:õ<ð )¨¯©°$«Ð(8¸Ð:ð8<˜˜f™ aÑ(¨Ò4æà" z°#·(±(¸4³.Ð1AÀÐ%CÐ$Dð(F�E˜&‘M !Ò$ð (*�E˜&‘M !Ñ$ØÓ&Ø×%Ñ% aÔ(øà�ÜØPÐQRÐPSÐS`ÐabÐ`cÐcgÐhôjà�N‰N˜1×ñ7 $ð8 %ˆh‰˜Ôñ= *ð> ˜5Ó Ø(ˆlÑð €Lð $ LÑ1°JÑ>ˆˆlÑØ€Lùò7Ss   Â4G.c                 óø  • [        U 5        U S   R                  5        VVs0 s H  u  p4SU;  d  SUS   ;  d  M  X4_M     nnn/ nU S    GH$  nXS'   US   S;   az  Ub  US   U;  a  M  US	   nUS   UR                  5       ;   a  [        R	                  US   5        US   [        ;   a  Mb  [
        (       a  US   [
        ;  a  M|  [        US
SS9US'   OUn[        XxUS-   S9nUS   S;   a(  US   (       d  UR                  S5      (       d  SU;  a  MË  US   R                  SS5      S:X  a  [        R	                  U5        Mû  US   S:X  a  US   [        US   '   UR	                  U5        GM'     U$ s  snnf )Nr0  rn  r  r/  r[  r1  r«  rq   r5  z
      T©Úas_interfaceÚsaved_interfacerœ   rp  r£  r·  r  r­   r
   Úpythonmoduler¤  )rY  rL  rw  r#   r)  r$   Úcrack2fortrangenru  r�  rÐ   r   r   )	r1  r5  rf  Úkeyr  Úmaybe_privater/  rm  Úas_s	            r)   r{  r{  �  s�  € ô �Ôð   ™-×-Ñ-Ô/ôâ/‰JˆCØ˜UÓ" h°e¸JÑ6GÑ&Gó 	ˆŠ
Ù/ð ñ ð €DØ�6�]ˆØ!ˆ.ÑØˆW‰:Ð3Ó3ØÑ A f¡I°TÓ$9Ùà˜‘i�à�‰y˜M×.Ñ.Ó0Ó0Ü× Ñ   6¡Ô+Ø�‰yœIÓ%ÙßŠy˜Q˜v™Y¬iÓ7ÙÜ#3Ø�>°ñ$6ˆAÐÒ ð ˆCÜ�a #¨¡*Ñ-ˆØˆW‰:Ð<Ó<Ø��y §¡ ×!7Ñ!7Ø!¨Ó*ÙØˆW‰:×Ñ˜c 2Ó&¨.Ó8Ü×Ñ˜qÖ!à�‰z˜XÓ%Ø+,¨V©9”˜a ™iÑ(Ø�K‰K˜�Nñ; ð< €KùóKs
   ¢E6»E6c                 óH  • [        U 5        [        n0 nSU ;   a‡  U S   c*  S n[        S:”  a  [        S[	        U S   5       S35        X4$ [        U S   R                  5       5       H7  nU S   U   R                  S5      S;  a  U S   U   X'   M*  U S   U   S   X#'   M9     X4$ )Nr   r   z2buildimplicitrules: no implicit rules for routine rq   r8  r4   )rJ   rO  )rY  Údefaultimplicitrulesr   r2   rÎ   rv  rw  r�  )r1  ÚimplicitrulesÚ	attrrulesr~  s       r)   Úbuildimplicitrulesrœ  Ê  sÏ   € Ü�ÔÜ(€MØ€IØ�UÓØ�ÑÑ$Ø ˆMÜ˜‹{ÜØHÌÈeÐTZÉmÓI\ÐH]Ð]`Ðaôcð Ð#Ð#ô ˜% 
Ñ+×0Ñ0Ó2Ö3�Ø˜Ñ$ QÑ'×+Ñ+¨JÓ7Ð?VÓVØ',¨ZÑ'8¸Ñ';�MÓ$à#(¨Ñ#4°QÑ#7¸
Ñ#C�I“Lñ	 4ð
 Ð#Ð#r(   c                 ón   • [        XU5      n[        U5      [        [        4;   a  U$ [	        SU< 35      e)z1Like `eval` but returns only integers and floats zr=)rÜ  rh   r8   r:   rÖ   )r»  ri  rë   r™   s       r)   Úmyevalrž  Ý  s3   € äˆQ�1‹€AÜˆAƒw”3œ�,ÓØˆÜ
�r˜!™�ZÓ
 Ð r(   z\A\b\w+\b\Zc                 óV  •  [        [        U 0 0 5      5      nSUS4$ ! [         a     Of = f[        R	                  U 5      (       a  SSU 4$ [        U 5      nU GHL  n[        U5      U:”  a  M  [        R                  " SU-   S-   U 5      (       a  M9  [        R                  " SU-   S-   [        R                  5      nUR	                  U 5      nU(       d  M~   UR	                  U 5      nU(       aB  UR                  S5       S	S S
UR                  S5       3nUR	                  U5      nU(       a  MB  [        W0 0 5      n	UR	                  U 5      nU(       aB  UR                  S5       S	S S
UR                  S5       3nUR	                  U5      nU(       a  MB  [        U0 0 5      U	-
  n
UR	                  U 5      nU(       aB  UR                  S5       S	S S
UR                  S5       3nUR	                  U5      nU(       a  MB  [        U0 0 5      nUR	                  U 5      nU(       aB  UR                  S5       S	S S
UR                  S5       3nUR	                  U5      nU(       a  MB  [        U0 0 5      nU
S-  U	-   U:X  a  U
S-  U	-   U:X  a  X©U4s  $ O! [         a     Of = f  g   g)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  r6  r7  r  g      à?g      ø?)NNN)r8   rž  rÆ   Úgetlincoef_re_1rÒ   rX   r¾   r�  r¿   rÀ   rÓ   )r»  Úxsetr³   Úlen_erð  r`  ró   ra  Úeerm  r+  Úc2s               r)   Ú
getlincoefr¨  è  s�  € ð*Ü”�q˜"˜bÓ!Ó"ˆØ�!�TˆzÐøÜó Ùðúä×Ñ˜Q×ÑØ�!�QˆwˆÜ�‹F€EÜˆÜˆq‹6�E‹>ÙÜ�9Š9Ð&¨Ñ*¨UÑ2°A×6Ñ6áÜ�zŠzÐ.°Ñ2Ð5GÑGÌÏÉÓNˆØ�J‰J�q‹Mˆßˆ1ðØ—Z‘Z “]�ÞØŸH™H XÓ.Ð/¨q°°°1°R·X±X¸gÓ5FÐ4GÐH�BØŸ™ B›�B÷ �bô ˜2˜r 2Ó&�Ø—Z‘Z “]�ÞØŸH™H XÓ.Ð/¨q°°°1°R·X±X¸gÓ5FÐ4GÐH�BØŸ™ B›�B÷ �bô ˜2˜r 2Ó&¨Ñ*�Ø—Z‘Z “]�ÞØŸH™H XÓ.Ð/¨q°°°Q°r·x±xÀÓ7HÐ6IÐJ�BØŸ™ B›�B÷ �bô ˜2˜r 2Ó&�à—Z‘Z “]�ÞØŸH™H XÓ.Ð/¨q°°°Q°r·x±xÀÓ7HÐ6IÐJ�BØŸ™ B›�B÷ �bô ˜B  BÓ'�Ø˜‘G˜a‘K 1Ó$¨¨S©°1©¸Ó):Ø ˜7’NùÜó ÙðúàØñI ðH s:   ‚ �
*©*ÃAJÄ2A%JÆA(JÈA%JÉ*(JÊ
J#Ê"J#z\b[a-z][\w$]*\bc                 óØ  • X;   aÆ  X   R                  S/ 5      nSX   ;   aY  [        X   5      (       dG  [        R                  X   S   5       H)  nXC;  d  M
  XA;   d  M  X@:w  d  M  UR	                  U5        M+     US S   HG  nUR                  U/ 5      =(       d    [        XAU5       H  nXS;  d  M
  UR	                  U5        M     MI     O[        S[        U 5       S35        / nX2U '   U$ )Nru  rq  z)_get_depend_dict: no dependence info for r¹   )r�  ÚisstringÚword_patternrè  r)  Ú_get_depend_dictr2   rÎ   )rq   r0  ÚdepsÚwordsÚwordr‰  s         r)   r¬  r¬  /	  sØ   € Øƒ|Ø‘
—‘˜x¨Ó,ˆà�$‘*Ó¤X¨d©j×%9Ñ%9Ü$×,Ñ,¨T©Z¸©_Ö=�ð Õ$¨­¸$½,Ø—L‘L Ö&ñ	 >ð
 ™!“HˆDØ—X‘X˜d BÓ'÷ :Ü'¨°DÓ9ò:�à•>Ø—L‘L –Oó:ò ô 	Ð;¼DÀ»J¸<ÀrÐJÔKØˆØˆ�JØ€Lr(   c                 óf   • [        U R                  5       5      n0 nU H  n[        X0U5        M     U$ r,   )rv  rw  r¬  )r0  ru   Údepend_dictrª   s       r)   Ú_calc_depend_dictr²  E	  s1   € Ü�—‘“Ó€EØ€KÛˆÜ˜ +Ö.ñ àÐr(   c                 ó¶  • [        U 5      n/ n[        UR                  5       5       H!  nX   (       a  M  UR                  U5        X	 M#     U(       ad  [        UR	                  5       5       H>  u  p4U Vs/ s H  oUU;   d  M
  UPM     nnU(       d  UR                  U5        X	 M:  XaU'   M@     U(       a  Md  U Vs/ s H  o3U ;   d  M
  UPM     sn$ s  snf s  snf r,   )r²  rv  rw  r)  rL  )r0  r±  ru   rq   Úlstrª   Únew_lsts          r)   Úget_sorted_namesr¶  M	  sÅ   € Ü# DÓ)€KØ€EÜ�[×%Ñ%Ó'Ö(ˆØ× Ñ Ø�L‰L˜ÔØÒ!ñ )ö Ü˜k×/Ñ/Ó1Ö2‰IˆDÙ"%Ó:¢#˜Q¨kÑ)9—q¡#ˆGÐ:ÞØ—‘˜TÔ"ØÒ%à$+˜DÓ!ñ 3÷ ˆ+ñ #Ó3šU�T¨d¡l�D™UÑ3Ð3ùò ;ùò 4s   Á5	CÂCÂ;	CÃCc                 óš   • U S   S;   a  U SS n [         R                  U 5      (       a  g[        R                  U 5      (       a  gSU -   S-   $ )	Nr   ú'"r   r   é   é   zkind(r7  )rÚ  rÒ   Úreal8pattern)rc   s    r)   Ú
_kind_funcr¼  _	  sQ   € àˆa�y�EÓØ˜˜"�ˆÜ×Ñ˜6×"Ñ"ØÜ	×	Ñ	˜F×	#Ñ	#ØØ�VÑ˜cÑ!Ð!r(   c                 óZ   • SU -  nUS::  a  gUS::  a  gUS::  a  gUS::  a  g	USS
-  ::  a  gg)Nr®   é   r   i   r2  l        rº  l            r¹  é€   é   r   r'   )r™   ró   s     r)   Ú_selected_int_kind_funcrÁ  j	  sD   € à
ˆa‰€AØˆFƒ{ØØˆGƒ|ØØˆGƒ|ØØˆGƒ|ØØˆA�‰Hƒ}ØØr(   c                 óÀ   • U S:  a  gU S:  a  g[         R                  " 5       R                  5       nUR                  S5      (       a	  U S::  a  g g	U S:  a  gU S::  a  gg	)
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	  sn   € ð 	ˆ1ƒuØØˆ2ƒvØÜ×ÒÓ ×&Ñ&Ó(€GØ×ÑÐw×xÑxØ�‹7Øð ð ð	 
ˆR‹ØØ	
ˆb‹ØØr(   c           	      óÐ  • [         R                   " U5      n[         R                   " U5      nS[        4S[        4S[        44 H  u  pEXC;  d  M  XSU'   M     / n[	        U 5       H+  nSX   ;   d  M  SX   S   ;   d  M  UR                  U5        M-     [        R                  " S[        R                  5      n[        R                  " S[        R                  5      n	[        R                  " S[        R                  5      n
U GH)  nS	X   ;   Gaÿ  X   S	   n[        X   5      (       a(  UR                  5       nS
 H  nUR                  " U6 nM     UR                  SU5      nU	R                  SU5      nSnSX   ;   aA  SX   S   ;   a6  [        U5      nUR                  SX   S   S   -   S5      n[        U5      U:  nU(       dy  U
R                  U5      (       dc  UR                  S5      n[        U5      S:”  aC  SR!                  US S 5      R                  5       R                  US   R                  5       S5      n[#        X   5      (       a   [%        U5      n[&        R)                  U5       Hj  n[%        UUR+                  5       UR-                  5        R                  5       R                  SS5      5      UUR+                  5       UR-                  5       & Ml     SR!                  U5      nO![/        X   5      (       a  [1        SU S35        X   S    Vs/ s H:  nUR3                  S5      (       d  M  UR5                  S5      R7                  5       PM<     sn=(       d    S /S   n[&        R9                  U5      (       a  SnO[:        R9                  U5      (       a  Sn [=        X³UUS9X''   [A        X   5      (       a&  [C        X'   [D        5      (       a  [G        X'   5      X''   UR                  5       nUU:w  a
  X'   UU'   GM	  GM  [I        X   5        [1        SU< S35        GM,     U$ s  snf ! [>         a!  nX²U'   [1        SU SU< S35         S nANªS nAff = f) NrJ  Úselected_int_kindÚselected_real_kindrn  r  z \bkind\s*\(\s*(?P<value>.*)\s*\)z-\bselected_int_kind\s*\(\s*(?P<value>.*)\s*\)z4\bselected_(int|real)_kind\s*\(\s*(?P<value>.*)\s*\)rq  ))z.false.ÚFalse)z.true.ÚTruez
kind("\1")zselected_int_kind(\1)Fro  rð   r
   r   r   r#  r»  zAget_parameters[TODO]: implement evaluation of complex expression r¹   r  r   r¹  rº  )Údimspeczget_parameters: got "ú" on zget_parameters:parameter z does not have value?!
)%rÑ  r¼  rÁ  rÔ  r¶  r)  r¾   r¿   rÀ   Ú	islogicalr¡   rÐ   ÚsubrX   rÒ   r(  rÛ   Úisdoublerv  rÚ  rÛ  rŽ  rý   Ú	iscomplexr2   r‹   rä  r¦   r�  r»  Ú
param_evalrÆ   rª  rì  r8   rã  r‰  )r0  Ú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Ú  rì   Únls                         r)   rØ  rØ  Œ	  s  € Ü�YŠY�}Ó%€FÜ�yŠy˜Ó'€HØ¤
Ð+Ø+Ô-DÐEØ,Ô.FÐGóK‰
ˆð ÕØ!�T‹Nñ	Kð
 €KÜ˜dÖ#ˆØ˜™Õ  [°D±G¸JÑ4GÕ%GØ×Ñ˜qÖ!ñ $ô �jŠjÐ<¼b¿d¹dÓC€GÜŸ:š:Ø8¼"¿$¹$ó@Ðä—z’zØ?ÄÇÁóGÐäˆØ�$‘'Œ>Ø‘˜‘ˆAÜ˜™×!Ñ!Ø—G‘G“I�ó�Dð
 Ÿ	š	 4Ð(’Añð —‘˜M¨1Ó-ˆAØ$×(Ñ(Ð)AÀ1ÓEˆAð  ˆKà ¡Ó(ð ˜T™W ^Ñ4Ó4Ü!$ Q£�JØŸ	™	 #¨©°Ñ(?ÀÑ(GÑ"GÈÓL�Aô #& a£&¨:Ñ"5�KæØ'×-Ñ-¨a×0Ñ0ØŸ™ ›�Bä˜2“w “{ØŸG™G B s¨ GÓ,×2Ñ2Ó4×<Ñ<¸RÀ¹V¿\¹\»^ÈRÓP˜ô ˜™× Ñ Ü˜!“W�Ü&×/Ñ/°Ö2�AÜ,0Ø˜!Ÿ'™'›) A§E¡E£GÐ,×2Ñ2Ó4×<Ñ<¸SÀ#ÓFó-H�B�q—w‘w“y §¡£Ò)ñ 3ð —G‘G˜B“K‘ä˜4™7×#Ñ#Üð FØFGÀSÈðLô Mð "&¡¨Ò!4ó5Ú!4˜AØŸ,™, {×3ó <˜Ÿ™ {Ó3×9Ñ9Ö;Ù!4ñ5÷ ?à9=¸ÀñCˆGô ×#Ñ# A×&Ñ&Ø‘Ü×$Ñ$ Q×'Ñ'Ø�ðCÜ& q°FÀGÑL�‘	ô
 ˜™× Ñ ¤Z°±	¼3×%?Ñ%?Ü ¡	›N�‘	Ø—‘“ˆBØ�Q‹wØ#™Y��r”
ò ô �$‘'ŒNÜÐ/°©uÐ4LÐM×Nña ðb €Mùò15øô ó CØ�q‘	ÜÐ/°¨u°E¸!¹¸bÐA×BÑBûðCús$   ÌP5Ì<#P5Î)P:Ð:
Q%ÑQ Ñ Q%c                 ó&   • U S;   a  g[        X5      $ )N)z(:)ú(*)r   rî  )Ú_eval_scalar)Úlengthr‡  s     r)   Ú_eval_lengthrñ  ñ	  s   € ØÐ$Ó$ØÜ˜Ó'Ð'r(   z\d+_c                 óv  • [        U 5      (       a  U R                  S5      S   n  [        U 0 U5      n [        U [        5      (       a  [
        O[        " U 5      n U $ ! [        [        [        4 a    U s $ [         a:  n[        SU< SU < S[        UR                  5       5      < S35         S nAU $ S nAff = f)Nrð   r   r+  z" in evaluating z (available names: r±   )Ú_is_kind_numberr(  rÜ  rì  rÂ   rÎ   rÞ  rÝ  rß  rÆ   ro   rv  rw  )r  r‡  rì   s      r)   rï  rï  ú	  s¦   € Ü�u×ÑØ—‘˜CÓ  Ñ#ˆð	5ä�U˜B Ó'ˆÜ# E¬3×/Ñ/•´SÐ8¸%Ó@ˆð €Løô ”{¤IÐ.ó ØŠÜó 5Ýã›œt F§K¡K£MÖ2ð4÷ 	5ð 	5ð €Lûð	5ús   ¦4A ÁB8Á5	B8Á>/B3Â3B8c                 ó¤"  ^@^A• [        U 5        [        U 5      u  p[        R                  " U S   5      nU S   S:X  a  U S   U;  a  0 X0S   '   SU S   ;   as  US	 SU S   S   ;   ad  U S   S   S   n[        U5      U S    Vs1 s H  oUS   iM	     sn-   H1  nS H(  nXt;   d  M
  [	        UR                  U0 5      U5      X6'   M*     M3     / nU S	   n	U	 H  n
 X:     UR                  U
5        M     [        UR                  5       5       H  nXi;  d  M
  UR                  U5        M     [        U[        U 5      5      n0 n[        R                  " S
5      R                  n[        UR                  5       5       H9  nU" U5      nU(       d  M  XïR                  5       UR!                  5        n XÆ     M;     U G
Hñ  nUS   [        UR                  5       5      ;   a  [	        X6   X&S      5      X6'   SX6   ;  aË  SX6   ;   a  SX6   S   ;   d¸  U(       a‰  US   R%                  5       n[        UU   R                  5       5       HU  nUS:X  a  UU   U   S:X  a  M  XsU   ;  a  UU   U   X6   U'   M.  US:X  d  M6  UU   U    H  n[	        X6   U5      X6'   M     MW     O(X`S	   ;   a   ['        S[)        U5      < SU S   < S35        SX6   ;   a6  SX6   S   ;   a+  X6   S   S   n [+        [-        U0 U5      5      nUX6   S   S'   SX6   ;   a6  SX6   S   ;   a+  X6   S   S   n [+        [-        U0 U5      5      nUX6   S   S'   0 nSX6   ;   Gaá  X6   S   nUR1                  5         / X6   S'   Su  nnnnnU GH�  n
U
SS S:X  a  U
SS R3                  5       SS nO�U
SS S:X  a  U
SS R3                  5       SS nOpU
SS S:X  a  U
SS R3                  5       SS nOPU
SS  S!:X  a  U
S S R3                  5       SS nO0U
SS" S#:X  a  U
S"S R3                  5       SS nO[	        X6   U
5      X6'   U(       a†  SX6   ;  a  / X6   S'   [5        U5      R7                  S$5       Vs/ s H  nUR3                  5       PM     sn H8  nUR9                  S%S5      nUX6   S   ;  d  M"  X6   S   R                  U5        M:     SnU(       aM  UR9                  S&S'5      nUR9                  S(S)5      nS#X6   ;  a	  U/X6   S#'   OX6   S#   R                  U5        SnUb}  SX6   ;  a  / X6   S'   [;        [5        U5      R7                  S$5       Vs/ s H  nUR3                  5       PM     sn5       H&  nUX6   S   ;  d  M  X6   S   R                  U5        M(     SnUc  GM  S!X6   ;  a  / X6   S!'   [5        U5      R7                  S$5       Vs/ s H  nUR3                  5       PM     sn H&  nUX6   S!   ;  d  M  X6   S!   R                  U5        M(     SnGM’     U(       Ga  SX6   ;  Ga  / X6   S'   [;        [5        U5      R7                  S$5       Vs/ s H  nUR3                  5       PM     sn5       GHÆ  n [=        UU5      nUS+:X  a  S+OS,nUU:X  a  U/nO[5        US+5      R7                  S-5      n[C        U5      S.:X  a  S,U;   a  S,/nS,n[C        U5      S:X  a  US   U:w  a  S/US   /n[C        U5      S.:X  Ga'  [E        [F        RH                  RJ                  U5      u  nn U U-
  S-   n!U!RM                  [F        RN                  RP                  S09n0 n"U S    HÁ  n[F        RR                  " U5      n#U!RU                  U#5      (       d  M1   U!RW                  U#5      u  p¥X¥4S1 jn$[        U
RY                  5       5      n%U%R[                  URY                  5       5        U% V#s1 s H!  n#U#R^                  U;   d  M  U#R^                  iM#     n'n#U$[        U'5      4U"U'   MÃ     U"UU'   X6   S   R                  U5        GMÉ     S!X6   ;  Ga—  S	U ;   Ga�  X`S	   ;   Ga‡  X6   R                  S/ 5      n(/ n)[a        [b        [d        [f        5      " X6   5      n*[i        X6   5      (       Gaš  [k        X6   S   5       GH„  u  n+nUR                  U5      m@T@c  GO‚U*(       Gaz  T@Rm                  5        GHe  u  nu  n,n-U@UA4S2 jmA[        5       n.TA" UU.5        UU(;   d  S3X>   ;   d  SX>   ;   a  M<  U,b~  UU.;  ax  S4n/U," [F        RR                  " S5U S6U+ S735      5      n0U0RM                  [F        RN                  RP                  S09n0U0X>   S3'   U/U--   X>   S'   S!X>   ;  a  S5U S6U+ S8U 3/X>   S!'   O]S9n/SX>   ;  a  / X>   S'   S:X>   S   ;  a  X>   S   R                  S:5        U(R                  U5        U)R                  S5U S6U+ S8U 35        X>   R                  S/ 5      n1S;U1;   d   S<U1;   d  U1R                  U/(       a  S<OS;5        U1(       d  GM^  U1X>   S'   GMh     T@c  GM¥  T@Rm                  5        HË  u  nu  n,n-X>   R                  S/ 5      n'X>   R                  S/ 5       H]  n2U2Ro                  S5      (       d  M  SRq                  U2R7                  5       5      n2U'Rs                  U2S=S R7                  S>5      5        M_     U'(       a  [        [        U'5      5      X>   S'   UU';  d  Mº  U(R                  U5        MÍ     GM‡     Ou[u        X6   5      (       ac  SX6   ;   a[  S,X6   S   ;   a  [w        X6   S   S,   U5      n3U3X6   S   S,'   O1SX6   S   ;   a&  [w        X6   S   S   U5      n3X6   S   S	 U3X6   S   S,'   U)(       a  U)X6   S!'   U((       a  [        [        U(5      5      X6   S'   S3X6   ;   d  G
M  SX6   ;  a  / X6   S'   S;X6   S   ;  a!  S<X6   S   ;  a  X6   S   R                  S;5        SX6   ;  ad  / X6   S'   [        URm                  5       5       H/  u  pïU" X6   S3   5      (       d  M  X6   S   R                  U5        M1     X6   S   (       d  X6   S	 [y        X6   5      (       d  G
MÛ  [{        X6   S3   U5      X6   S3'   G
Mô     [        UR                  5       5       GH™  nX`S   :X  d  M  S#X6   ;   a
  X6   S#   U S#'   U S   S:X  d  M+  S?U ;   a  U S?   U;   a  [}        X6   X0S?      5      X6'   S@U ;   d  MW  U S@   n4U4R9                  SAS5      n5U4U5:X  + n6U5R9                  SBS5      n4U4U5:X  + n7[~        S   R                  U45      nU(       aÓ  [�        URƒ                  SC5      URƒ                  SD5      5      u  n8n9nn:[…        U8U95      u  n;n<n=U8X6   S'    U S?   (       a
  U8X0S?      S'   U;(       a!  SU;;   a   [-        U;S   0 U5      U;S'   U;X6   S'   U<(       a  U<X6   S'   U=(       a  U=X6   SE'   U6(       a  [	        X6   SA5      X6'   U7(       a  [	        X6   SB5      X6'   GM{  GM~  ['        SF[)        U S@   5       SG35        GMœ     U S   SH;  GaÊ  SIU ;   a   [        R                  " U S	   U SI   -   5      n>O[        R                  " U S	   5      n>[        UR                  5       5       H7  n[a        [†        [ˆ        5      " X6   5      (       d  M&  U>R                  U5        M9     SJU ;   av  U>Rs                  [        U SJ   R                  5       5      5        [        U SJ   R                  5       5       H+  nU SJ   U    H  nUU>;  d  M  U>R                  U5        M     M-     U S   S:X  a/  S?U ;   a  U>R                  U S?   5        OU>R                  U S   5        U S   SK;   a  U S   n?U?U;   a  SUU?   ;   a  UU?   S   U S'   U S   SL:X  a(  U>Rs                  [        UR                  5       5      5        [        UR                  5       5       H  nUU>;  d  M  X6	 M     U$ s  snf ! [         a     GMz  f = f! [         a9    [        R                  " SU-  [        R"                  5      R                  XÆ'    GM  f = f! [.         a     GN­f = f! [.         a     GN€f = fs  snf s  snf s  snf s  snf ! [>        [@        [        4 a    ['        S*U< S)35         G
N„f = f! [\         a&  n&Sn$[        U!RY                  5       5      n% Sn&A&G	N[Sn&A&ff = fs  sn#f ! [.         a     GNrf = f! [.         a     GNbf = f)Mz@
Sets correct dimension information for each variable/parameter
r0  r1  rú   rq   r
   rn  r/  r±  r5  z[A-Za-z][\w$]*z.*\b%s\br   r4   r  Ú	undefinedz"analyzevars: typespec of variable z is not defined in routine r8  rp  rX   ro  rJ  )NNNNNNr9  r  r   r   r·   r
  ru  r�   rt  rº  rs  r%  r­   z\n\nz

z\n r¹   z4analyzevars: could not parse dimension for variable r¦  r   z@:@r2  Ú1)Úlanguagec                 ó   • X-
  U-  $ r,   r'   )r<  r+  rm  s      r)   Úsolve_vÚanalyzevars.<locals>.solve_v¶
  s   € Ø01±¸©{Ð(:r(   c                 ó‚   >• TR                  U S / /5      S    H#  nX!;  d  M
  UR                  U5        T" X!5        M%     g )Nr   )r�  Úadd)r   r­  Úv1Úcoeffs_and_depsÚcompute_depss      €€r)   rÿ  Ú!analyzevars.<locals>.compute_depsä
  s<   ø€ Ø*9×*=Ñ*=¸aÀ$ÈÀÓ*LÈQÔ*O BØ')¥~Ø(,¯©°¬Ù(4°RÖ(>ò +Pr(   rq  Fzshape(rÂ  r7  z) == TÚinr  r  rÃ  r&  r©   r¨  ÚpureÚ	recursiver9  r  rr  zanalyzevars: prefix (z) were not used
)r¤  r“  rŸ  rž  rŒ  r  )rü   rú   rh   )ErY  rœ  rÑ  r  rx  r�  r)  ÚKeyErrorrv  rw  rØ  rd  r¾   r¿   rÒ   rŽ  rý   rÀ   r¡   r2   rÎ   rÂ   rÜ  rÆ   Úreverser¦   r'  r(  rÐ   rw   Úparam_parserÖ   ré  rX   rÍ  r   ÚExprÚparseÚtostringÚLanguager´   Ú	as_symbolr  Úlinear_solveÚsymbolsr]  ÚRuntimeErrorr  Úl_orÚisintent_inÚisintent_inoutÚisintent_inplaceÚisarrayrå  rL  r‹   rÛ   rë  rª  rñ  Úisscalarrï  r  rO  rÔ  rÓ   rá  Úisintent_callbackÚisintent_aux)Br1  rš  r›  r0  Úgenrm  rª   r~  Úsvarsr5  r+  r‡  Údep_matchesÚ
name_matchr   ró   Úln0rë   Údimension_exprsr÷  Údimr
  ru  rt  rs  rð  r³   Útmpr#  Údim_charr  rB  Úd2ÚdsizeÚsolver_and_depsr<  rù  Úall_symbolsrì   Úv_depsÚn_depsÚn_checksÚ
n_is_inputrú  Úsolverr­  Úall_depsÚis_requiredr5  Úv_attrÚaarð  ÚprÚpr1ÚispureÚisrecr4   rö  rø  r  r  rr  Ú
neededvarsrq   rþ  rÿ  sB                                                                   @@r)   ry  ry  

  sª  ù€ ô �ÔÜ1°%Ó8Ñ€MÜ�9Š9�U˜6‘]Ó#€DØˆW�~˜Ó#¨¨f©¸TÓ(AØ ˆ�6‰]ÑØ	ˆU�6‰]ÓØ�ˆHØ˜˜v™ rÑ*Ó*Ø˜‘- Ñ# JÑ/ˆCÜ˜“Y°U¸6²]Ó!C²]° F¤)±]Ñ!CÔC�Û.�AØ•xÜ"-¨d¯h©h°q¸"«o¸qÓ"A˜›ó /ñ Dð €EØ�‰=€DÛˆð	ØŠGØ�L‰L˜ŽOñ ô �$—)‘)“+ÖˆØ�=Ø�L‰L˜ŽOñ ô ˜DÔ"3°EÓ":Ó;€Fð €KÜ—’Ð-Ó.×4Ñ4€JÜ�$—)‘)“+ÖˆÙ�q‹Mˆßˆ1Ø—'‘'“)˜AŸE™E›GÐ$ˆAðKØ”ñ ô ˆØˆQ‰4”4˜	Ÿ™Ó(Ó)Ó)Ü! $¡'¨9°q±T©?Ó;ˆD‰GØ˜T™WÓ$Ø $¡'Ó)¨j¸D¹GÀJÑ<OÓ.OÞ Ø˜A™$Ÿ*™*›,�CÜ! -°Ñ"4×"9Ñ"9Ó";Ö<˜Ø 
›?¨}¸SÑ/AÀ!Ñ/DÈÓ/SÙ$Ø¨¡GÓ+Ø)6°sÑ);¸AÑ)>˜D™G A›JØ *�_Ø%2°3Ñ%7¸Ô%: Ü*5°d±g¸qÓ*A £ó &;ò =ð  ™-Ó'ÝÜ˜Qž  v¤ð0ô 1à˜T™WÓ$Ø˜™ Ñ/Ó/Ø‘G˜NÑ+¨EÑ2�ðÜœD  B¨Ó/Ó0�Að 23�‘˜Ñ'¨Ñ.à˜T™WÓ$Ø˜™ Ñ0Ó0Ø‘G˜NÑ+¨FÑ3�ðÜœD  B¨Ó/Ó0�Að 34�‘˜Ñ'¨Ñ/àˆØ˜™Ô Ø‘7˜:Ñ&ˆDØ�L‰LŒNØ"$ˆD‰G�JÑØ/KÑ,ˆC�˜ ¨Ü�Ø�R�a�5˜KÓ'Ø˜Q˜R˜5Ÿ;™;›=¨!¨BÐ/‘CØ�r˜�U˜hÓ&Ø  ˜eŸk™k›m¨Q¨rÐ2‘FØ�r˜�U˜hÓ&Ø  ˜eŸk™k›m¨Q¨rÐ2‘FØ�r˜�U˜gÓ%Ø˜q˜r˜UŸ[™[›]¨A¨bÐ1‘EØ�r˜�U˜f“_Ø˜a˜b˜EŸK™K›M¨1¨RÐ0‘Dä)¨$©'°1Ó5�D‘GÞØ t¡wÓ.Ø,.˜™ Ñ)Ü1?ÀÓ1G×1MÑ1MÈeÔ1TÓUÒ1T¨A˜aŸg™gžiÑ1TÔU˜àŸi™i¨¨RÓ0˜Ø d¡g¨hÑ&7Õ7Ø ™G HÑ-×4Ñ4°SÖ9ñ	 Vð
 "�FÞØŸ<™<¨°&Ó9�DØŸ<™<¨°Ó5�DØ T¡WÓ,Ø+/¨&˜™ šà™ ™×.Ñ.¨tÔ4Ø�DØÑ%Ø t¡wÓ.Ø,.˜™ Ñ)Ü&¼>È&Ó;Q×;WÑ;WÐX]Ô;^Ó'_Ò;^°a¨¯©®	Ñ;^Ñ'_Ö`˜Ø D¡G¨HÑ$5Õ5Ø ™G HÑ-×4Ñ4°QÖ7ñ að "�FØÔ$Ø d¡gÓ-Ø+-˜™ Ñ(Ü1?ÀÓ1F×1LÑ1LÈUÔ1SÓTÒ1S¨A˜aŸg™gžiÑ1SÔT˜Ø D¡G¨GÑ$4Õ4Ø ™G GÑ,×3Ñ3°AÖ6ñ Uð !“EñW ÷X �{¨$©'Ô1Ø')�‘˜Ñ$Ü"Ü,:¸3Ó,?×,EÑ,EÀeÔ,LÓMÒ,L q˜Ÿ™žÑ,LÑM÷�Að
ô (¨¨6Ó2˜ð '(¨3£h™s°C�HØ˜H“}Ø&˜Z™ä+¨A¨sÓ3×9Ñ9¸%Ó@˜Ü˜2“w !“|¨¨r«	Ø!˜U˜Ø˜Ü˜2“w !“|¨¨1©°Ó(9Ø! 2 a¡5˜\˜Ü˜2“w !”|Ü!$¤X§]¡]×%8Ñ%8¸"Ó!=™˜˜BØ " R¡¨!¡˜Ø!ŸN™N´H×4EÑ4E×4GÑ4G˜NÐH˜ð +-˜Ø!& v¤˜AÜ (× 2Ò 2°1Ó 5˜AØ$Ÿ~™~¨a×0Ó0ð!GØ+0×+=Ñ+=¸aÓ+@¡D Aà56ô %;ô 36°a·i±i³kÓ2B KØ$/×$6Ñ$6°q·y±y³{Ô$Cñ 5@ó*7Ú4?¨qØ'(§v¡v°¡~ó %+ A§F¤F±Kð !'ð *7ð 6=¼dÀ6»lÐ5J °Ó 2ñ- "/ð: .=˜¨Ñ*Ø‘G˜KÑ(×/Ñ/°×2ñðB ˜$™'Ô! f°¤o¸!ÀV¹}Ô:Lð
 ‘W—[‘[ ¨2Ó.ˆFØˆHÜœk¬>Ü.ô0Ø04±ó9ˆJä�t‘w×ÒÜ% d¡g¨kÑ&:×;‘D�A�qØ&5×&9Ñ&9¸!Ó&<�OØ&Ñ.áß#ð 2A×1FÑ1F×1HÑ-˜A™~ ¨ö?ô
 (+£u˜HÙ(¨¨HÔ5Ø ! V£Ø$'¨4©7£NØ$,°±Ó$7ñ
 !)Ø%Ñ1°a¸xÓ6Gð /4 Ù'-¬h×.@Ò.@Ø&,¨Q¨C¨r°!°°AÐ$6ó/8ó (9 à'+§}¡}Ü-5×->Ñ->×-@Ñ-@ð (5ð (B à/3 ¡¨¡ð 67°C¸$±J ¡¨Ñ 1Ø#*°$±'Ó#9ð +1°°°2°a°S¸¸a¸SÐ(Að8C D¡G¨GÑ$4øð /3 Ø#+°4±7Ó#:Ø8: D¡G¨HÑ$5Ø#'¨t©w°xÑ/@Ó#@Ø$(¡G¨HÑ$5×$<Ñ$<¸TÔ$Bà &§¡¨aÔ 0Ø (§¡Ø&,¨Q¨C¨r°!°°E¸!¸Ð$=ô!?à%)¡W§[¡[°¸RÓ%@˜FØ$.°&Ó$8Ø'1°VÓ';Ø &§¡Þ2=¡JÀ:ô!Oç%™vØ6< ¡¨
Ô 3ñm 2Iðn 'Ô2à1@×1FÑ1FÖ1HÑ-˜A™~ ¨Ø%)¡W§[¡[°¸2Ó%>˜FØ&*¡g§k¡k°*¸bÖ&A Ø#%§=¡=°×#:Ó#:Ø)+¯©°·±³Ó)< BØ$*§M¡M°"°Q°r°(·.±.ÀÓ2EÖ$Fñ 'Bö  &Ü48¼¸V»Ó4E ¡¨Ñ 1Ø ¨�Ø &§¡¨aÖ 0ô 2IòE <ôX ˜$™'×"Ñ"Ø! T¡WÓ,Ø˜d™g nÑ5Ó5Ü!-¨d©g°nÑ.EÀcÑ.JØ.4ó"6˜à7=˜™ Ñ/°Ò4Ø $¡'¨.Ñ"9Ó9Ü!-¨d©g°nÑ.EÀeÑ.LØ.4ó"6˜à ™G NÑ3°EÐ:Ø7=˜™ Ñ/°Ñ4ÞØ#+�‘˜Ñ ÞÜ$(¬¨V«Ó$5�‘˜Ñ!à�$‘'Ž>Ø ¡Ó(Ø&(�‘˜
Ñ#Ø $¡'¨*Ñ"5Ó5Ø $¡'¨*Ñ"5Ó5Ø‘˜
Ñ#×*Ñ*¨:Ô6Ø˜t™wÓ&Ø$&�‘˜Ñ!Ü  ×!2Ñ!2Ó!4Ö5‘D�AÙ˜™ ™—“Ø™ Ñ)×0Ñ0°Ö3ñ 6ð ‘w˜x×(Ø™ Ð)Ü˜™× Ô Ü+¨D©G°C©L¸&ÓA�‘˜”ñ[ ô^ �$—)‘)“+×ˆØ�f‘ÕØ˜™Ó Ø $¡¨¡��f‘Ø�W‰~ Õ+Ø˜uÓ$¨¨x©¸DÓ)@Ü(¨©°$¸X±Ñ2GÓH�D‘GØ˜uÕ$Ø˜x™�BØŸ*™* V¨RÓ0�CØ"$¨šm�FØŸ™ [°"Ó5�BØ!# sš]�EÜ$ Q™×-Ñ-¨bÓ1�AÞÜ:HØŸG™G F›O¨Q¯W©W°WÓ-=ó;?Ñ7˜ (¨D°%ä;HØ$ hó<0Ñ8˜
 J°à.6˜™ 
Ñ+ð!Ø$ XŸØDL ¨8¡_Ñ 5°jÑ Aö &Ø%¨Ó3ð!)Ü9=Ø(2°6Ñ(:¸BÀó:H J¨vÑ$6ð 7A˜D™G NÑ3Þ%Ø6@˜D™G NÑ3Þ#Ø2:˜D™G JÑ/Þ!Ü&1°$±'¸6Ó&B˜D™GÞ Ü&1°$±'¸;Ó&G˜DœGò !ô  Ø3´D¸¸x¹Ó4IÐ3JÐJ[Ð\÷^ñU ðX ˆW�~ÐVÔVØ˜5Ó ÜŸš 5¨¡=°5¸Ñ3FÑ#FÓG‰JäŸš 5¨¡=Ó1ˆJÜ�d—i‘i“kÖ"ˆAÜÔ%¤|Ô4°T±W×=Ó=Ø×!Ñ! !Ö$ñ #ð �eÓØ×Ñœd 5¨¡>×#6Ñ#6Ó#8Ó9Ô:Ü˜% ™.×-Ñ-Ó/Ö0�Ø˜w™¨Ô*�AØ 
Õ*Ø"×)Ñ)¨!Ö,ó +ñ 1ð �‰>˜ZÓ'Ø˜5Ó Ø×!Ñ! %¨¡/Õ2à×!Ñ! %¨¡-Ô0Ø�‰>Ð7Ó7Ø˜‘=ˆDØ�t‹| ¨D°©JÓ 6Ø"& t¡*¨XÑ"6��h‘Ø�‰>˜VÓ#Ø×Ñœd 4§9¡9£;Ó/Ô0Ü�d—i‘i“kÖ"ˆAØ˜
Õ"Ø’Gñ #ð €Kùòi "Døô ó 	Ûð	ûô" ó KÜ!#§¢¨K¸1Ñ,=¼r¿t¹tÓ!D×!JÑ!J�•ðKûô2 !ó Úðûô !ó Úðüò4 Vùò" (`ùò Uùò Nøô '¬
´HÐ=ó Üð(Ø()¡u¨Bð0÷ðûôF (4ó !Gð /3 GÜ25°e·m±m³oÓ2F¦Kûð!Güò*7øôt  )ó !Ú ð!ûô (1ó !)Ú$(ð!)úsò   ÂA@9ÃA@>Æ,AAË ABÌAB'ÑAB8Ô9AB=Ö7ACØ>AC
Ù$ACÝ7AAC8ßAD+
ß$AD+
ö7AD0÷AEÁ@>
AAÁAAAÁA>ABÁBABÁB
AB$ÁB#AB$ÁB'
AB5ÁB4AB5ÁC%AC5ÁC4AC5ÁC8
AD(	ÁDAD#	ÁD#AD(	ÁD0
AD>ÁD=AD>ÁE
AEÁEAEz\A[a-z]+[\w$]*\Zc           	      ó�  • Uc   [        XU5      nU$ [        U5      S:  d  USS[        U5      S-
  2   S:w  a  [	        SU S	35      eUSS
 R                  S5      n[        U5      S:X  a‹  US   R                  S5      n[        U5      S:X  a(  [        US   U5      n[        S[        U5      S-   5      nOO[        US   U5      n[        US   U5      n	[        [        U5      [        U	5      S-   5      nO[	        SU S35      eU R                  S5      (       a  U SS OU R                  S5      n / n
U  H!  n [        X±U5      nU
R                  U5        M#     [        [        Xj5      5      nU$ ! [         a   nU n[        SU SU < S35         SnAU$ SnAff = f! [         a  n[        SU SU< S35         SnANzSnAff = f)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¹   r2  r   rh  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)  rv  Úzip)r   râ  r‡  rÚ  rÒ  rì   ÚdimrangeÚboundÚlboundÚuboundÚv_evalÚitems               r)   rà  rà  ”  sê  € ð& �ð	;Ü�Q &Ó)ˆAð ˆô ˆ7ƒ|�aÓ˜7Ñ#5¤S¨£\°AÑ%5Ð#5Ñ6¸$Ó>ÜÐ1°'°Ð:KÐLÓMÐMØ�q˜ˆ}×"Ñ" 3Ó'€HÜ
ˆ8ƒ}˜Óà˜A‘;×$Ñ$ SÓ)ˆäˆx‹=˜AÓÜ ¨¡¨VÓ4ˆEÜ˜Q¤ E£
¨Q¡Ó/‰Hä  ¨!¡¨fÓ5ˆFÜ  ¨!¡¨fÓ5ˆFÜœS ›[¬#¨f«+¸©/Ó:‰HäÐIØ#˜9 Nð4ó 5ð 	5ð —L‘L ×&Ñ&ˆˆ1ˆR‰¨A×4Ñ4°SÓ9€AØ€FÛˆð	>Ü˜¨Ó/ˆDð 	�‰�dÖñ ô 	ŒS�Ó"Ó#€Aà€HøôK ó 	;ØˆAÜÐ'¨ u¨E°!±°bÐ9×:Ð:Øˆûð	;ûô> ó 	>ÜÐ'¨ u¨E°$±¸Ð<×=Ñ=ûð	>ús/   …E1 Ä:FÅ1
FÅ;FÆFÆ
GÆ(G Ç Gc                 ó"  • SU ;   a]  U SU R                  S5       nX R                  S5      S-   U R                  S5       n[        [        X15      5      n[	        X   U   5      $ X;   a  [	        X   5      $ U H“  n[
        R                  " SU-   S-   [
        R                  5      nUR                  U 5      nU(       d  MH  UR                  S5      [	        X   5      -   UR                  S5      -   n UR                  U 5      nU(       a  MK  M•     U $ )	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
r6  Nr   r7  r¡  r¢  r  r  )
rÖ  Úrfindr8   r  rÂ   r¾   r¿   rÀ   rÒ   rÓ   )r#  r‡  ÚdnameÚddimsr[   rÒ  r`  ró   s           r)   r  r  Ò  sù   € ðr ˆaƒxà�,�1—6‘6˜#“;�ˆØ—&‘&˜“+ ‘/ !§'¡'¨#£,Ð/ˆô ”K Ó.Ó/ˆÜ�6‘= Ñ'Ó(Ð(Ø	
‹Ü�6‘9‹~ÐãˆAÜ—:’:Ø$ qÑ(Ð+=Ñ=¼r¿t¹tóˆDð —
‘
˜1“ˆAß�!Ø—G‘G˜HÓ%Ü˜™	“Nñ#Ø%&§W¡W¨WÓ%5ñ6�à—J‘J˜q“M�÷ ’!ñ ð ˆr(   c                 óÎ  • U n[         R                  U 5      (       + nU(       a¡  [        U5      u  pV[        XS   U5      nSnU  H>  n	U	R	                  5       n	U	[
        R                  [
        R                  -   ;  a  Sn	X‰-   nM@     US   S:X  a  US-   nOUS-   nUn XS   ;   d  XS   ;   a  U S-   n XS   ;   a  M  XS   ;   a  M  X;   a;  S	n
U [        U
5      -   U;   a  U
S	-   n
U [        U
5      -   U;   a  M  U [        U
5      -   n U(       a
  WUS   U '   U $ XS   ;  a  US   R                  U0 5      US   U '   S
U;   a&  X1S
   US   -   ;   a  [        US   U    S5      US   U '   U $ )Nr0  Úe_rð   r   r»  Ú_er5  r™   r   r3  r4  r  )Úanalyzeargs_re_1rÒ   rœ  rÙ  r¡   rc   Úascii_lowercaseÚdigitsrÂ   r�  rx  )r+  r1  r5  Úorig_aÚ	a_is_exprrš  r›  ÚatÚnar³   r~  s              r)   Ú	expr2namerH  "  s�  € Ø€FÜ$×*Ñ*¨1Ó-Ô-€IÞÜ#5°eÓ#<Ñ ˆÜ˜q¨¡-°Ó?ˆØˆÛˆAØ—‘“	ˆAØœ×.Ñ.´·±Ñ>Ó>Ø�Ø‘ŠBñ	 ð
 ˆb‰6�S‹=Ø�c‘‰Bà�d‘ˆBØˆØ˜‘=Ó  A¨v©Ó$6Ø�C‘ˆAð ˜‘=Õ  A¨v©Õ$6àƒyØˆØ”#�a“&‰j˜DÓ Ø�A‘ˆAð ”#�a“&‰j˜DÕ à”�A“‰JˆÞØˆˆf‰�aÑð €Hð	 ˜&‘MÓ!Ø$ V™}×0Ñ0°¸Ó<ˆE�&‰M˜!ÑØ˜%Ó F°KÑ.@À5ÈÑCVÑ.VÓ$VÜ*¨5°©=¸Ñ+;¸ZÓHˆE�&‰M˜!ÑØ€Hr(   c                 óþ  • [        U 5        [        U 5      u  pSU ;  a  / U S'   / nU S    H   n[        X@U5      nUR                  U5        M"     X0S'   SU ;   a@  [	        U S   R                  5       5       H   u  pVU H  nX@S   ;  d  M  0 U S   U'   M     M"     U S    H>  nUS   U;   d  M  SU ;  a  / U S'   US   U S   ;  d  M'  U S   R                  US   5        M@     SU ;   a  U S   U S   ;  a  0 U S   U S   '   U $ )Nr5  r  r0  r/  rq   r3  r©   )rY  rœ  rH  r)  rv  rL  )r1  rš  rð   r5  r+  r~  Úargs1rm  s           r)   rw  rw  D  s)  € Ü�ÔÜ)¨%Ó0Ñ€MØ�UÓØˆˆf‰Ø€DØ�6Œ]ˆÜ�a Ó%ˆØ�‰�AŽñ ð ˆ&�MØ�%ÓÜ˜U 7™^×1Ñ1Ó3Ö4‰HˆAÛ�Ø &™MÕ)Ø')�E˜&‘M !Ó$ó ñ 5ð
 �6Œ]ˆØˆV‰9˜ÕØ %Ó'Ø%'��kÑ"Ø�‰y  kÑ 2Õ2Ø�kÑ"×)Ñ)¨!¨F©)Ö4ñ ð �5Ó˜U 8™_°E¸&±MÓAØ)+ˆˆf‰�e˜H‘oÑ&Ø€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                 óî   • [        U [        5      (       a  SS0$ [        U [        5      (       a  SS0$ [        U [        5      (       a  SS0$ [        U [        5      (       a  U $ [        [        U 5      5      e)Nr4   r7   r5   r¼  )rì  r8   r:   r¼  rv  ÚAssertionErrorrÎ   )r™   s    r)   Ú_ensure_exprdictrM  g  sk   € Ü�!”S×ÑØ˜IÐ&Ð&Ü�!”U×ÑØ˜FÐ#Ð#Ü�!”W×ÑØ˜IÐ&Ð&Ü�!”T×ÑØˆÜ
œ˜a›Ó
!Ð!r(   c                 ó‚  • X;   a  [        X   5      $ U R                  5       n [        R                  U 5      (       a  SS0$ [        R                  U 5      nU(       aF  SUR                  5       ;   a.  UR                  S5      (       a  [        S[        U 5       S35        SS0$ [        R                  U 5      nU(       aF  SUR                  5       ;   a.  UR                  S5      (       a  [        S[        U 5       S35        SS0$ S H\  n[        XS	9R                  S
U-   S
-   5       Vs/ s H  oUR                  5       PM     sn H  nXa;   d  M
  [        X   5      s  s  $    M^     0 n[        R                  U 5      (       a  [        U SS X5      nOx[        R                  U 5      nU(       a\  UR                  S5      n[        UR                  S5      X5      nU(       a	  SU;   a  US	 U(       d  US   U;   a  [        X(S      5      $ U S   S;   a  SSS0S.$ U(       d  [        S[        U 5       S35        U$ s  snf )Nr4   r¼  rq   z6determineexprtype: selected kind types not supported (r±   r7   r5   )Ú+r¾  r   rÀ  r3  ri  r   r   rn  r   r¸  r#  r   )r4   rp  z4determineexprtype: could not determine expressions (z) type.
)rM  r¦   Údetermineexprtype_re_1rÒ   Údetermineexprtype_re_2r!  rÓ   r2   rÎ   Údetermineexprtype_re_3r'  r(  Údetermineexprtype_re_4rÙ  Údetermineexprtype_re_5)	r&  r0  Úrulesró   Úoprð  r»  rõ  Úrns	            r)   rÙ  rÙ  s  s  € Øƒ|Ü ¡
Ó+Ð+Ø�:‰:‹<€DÜ×#Ñ# D×)Ñ)Ø˜IÐ&Ð&Ü×$Ñ$ TÓ*€AÞØ�Q—[‘[“]Ó" q§w¡w¨v§¡ÜØHÌÈdËÈÐTWÐXôZà˜IÐ&Ð&Ü×$Ñ$ TÓ*€AÞØ�Q—[‘[“]Ó" q§w¡w¨v§¡ÜØHÌÈdËÈÐTWÐXôZà˜FÐ#Ð#Û"ˆÜ%3°DÑ%C×%IÑ%IÈ#ÐPRÉ(ÐUXÉ.Ô%YÓZÒ%Y —'‘'–)Ñ%YÔZˆAØ�yÜ'¨©Ó0Ô0ó [ñ #ð 	€AÜ×#Ñ# D×)Ñ)Ü˜d 1 R˜j¨$Ó6‰ä"×(Ñ(¨Ó.ˆÞØ—‘˜“ˆBÜ! !§'¡'¨&£/°4Ó?ˆAÞ�Z 1“_Ø�j�MÞØ�a‘5˜E“>Ü+¨E°Q±%©LÓ9Ð9ØˆA�w�%ÓØ'¸#¸s¸ÑDÐDÞÜØBÄ4ÈÃ:À,ÈiÐXô	Zà€Hùò+ [s   Ä*H<r¹   c                 óä  • [        U 5        Sn[        U [        5      (       aQ  U  HI  nU(       a2  US   S;   a)  US   [        ;   a  M"  [        (       a  US   [        ;  a  M<  U[        XAUS9-   nMK     U$ SnSnSnU S   nUS:X  a  g/ n	SU ;   a  U S   nSU ;   ag  U S   n
U S    H4  n[        X°U	5      n[        X«   5      (       a  M#  U	R                  U5        M6     U S   S	:X  d  U	(       a  S
SR                  U	5       S3nSnSU ;   a?  [        U S   R                  5       5       H  nU< U[        -   < U< SU S   U   < 3nM!     U R                  S/ 5      S S  nUS	:X  a  SU;   a  UR                  S5        U(       a&  U< U[        -   < SSR                  U5      < SU< 3nSnSU ;   a  [        U S   U[        -   5      nSnSU ;   a  [        U S   U[        -   5      nUS:X  a  SnSnSU ;   a&  SU S    S3nU S   U	;  a  U	R                  U S   5        [        U S   U[        -   US9n[!        X S   X‘[        -   US9n
SnSU ;   a  U(       d  SU S    3nSU ;   aP  Sn[        U S   R#                  5       5       H)  u  nnU U[        -    SU S
SR                  U5       S3nM+     UU-   nUS:X  a  US:X  a  SnU< U< U< SU< U< U< SU< U< U< U
< U< U< U< SU< SU< 3nU$ ) Nr
   r1  r«  rq   r�  r›  r5  r0  rú   r6  r&  r7  r  r­   r
  Úcallbackúintent(z) r  r  r¥  r©   z	 result (r/  r�  z! in r  zentry rž  r¡  zend )rY  rì  rv  r#   r$   r”  rH  r  r)  rÛ   rw  r   r�  rÐ  Úuse2fortranÚcommon2fortranÚvars2fortranrL  )r1  rf  r‘  rj  ri  r¨  rq   r5  Ú	blocktypeÚargslr0  r+  r  r~  Ú
intent_lstr  r  r©   r/  ÚmessÚentry_stmtsrú  s                         r)   r”  r”     s7  € ô �ÔØ
€CÜ�%œ×ÑÛˆAÞ�Q�w‘ZÐ#=Ó=Ø�V‘9¤	Ó)Ùß’9  6¡´)Ó!;ÙØÔ(¨¸lÑKÑKŠCñ ð ˆ
Ø€FØ€DØ€DØ�g‘€IØ�IÓØØ€EØ�ƒØ�V‰}ˆØ�ƒØ�V‰}ˆØ�v”ˆAÜ˜! EÓ*ˆAÜ$ T¡W×-Ó-Ø—‘˜Q–ñ ð �‰>˜ZÓ'®5Ø�s—x‘x “Ð' qÐ)ˆDØÐØ˜UÓ"Ü�eÐ.Ñ/×4Ñ4Ó6Ö7ˆAâ  #¬£-³°EÐ:LÑ4MÈaÓ4Pð RÒñ 8ð —‘˜8 RÓ(©Ð+€JØ�JÓ :°Ó#;Ø×Ñ˜*Ô%Þâ,¨c´G¬mØŸH™H ZÖ0²$ð8Ðð €CØ�ƒ~Ü˜% ™,¨¬g©Ó6ˆØ€FØ�5ÓÜ  h¡°´w±Ó?ˆØÐ"Ó"ØˆØ€FØ�5ÓØ˜U 8™_Ð-¨QÐ/ˆØ�‰? %Ó'Ø�L‰L˜˜x™Ô)Ü˜E &™M¨3´©=À|ÑT€DÜØ�V‰}˜e¬7¡]ÀñO€Dà€DØ�ƒž|Ø�u˜V‘}�oÐ&ˆØ�%ÓØˆÜ˜˜w™×-Ñ-Ó/Ö0‰DˆAˆqØ(˜M¨#´©-¨¸¸q¸cÀÀ3Ç8Á8ÈAÃ;À-ÈqÐQŠKñ 1à�kÑ!ˆØ�LÓ  T¨^Ó%;ØˆâŠV“Y¢¢d«F²DÒ:JÊCÒQUÒW]Ò_cÓehÓjsÒuyð{€Cà€Jr(   c           
      óÈ   • Sn[        U R                  5       5       HB  nUS:X  a  U U SSR                  X   5       3nM%  U U SU SSR                  X   5       3nMD     U$ )Nr
   rÉ  zcommon r&  zcommon /z/ )rv  rw  rÛ   )r  rf  rj  r~  s       r)   r\  r\  ê  sp   € Ø
€CÜ�&—+‘+“-Ö ˆØ�‹=Ø�E˜#˜˜g c§h¡h¨v©yÓ&9Ð%:Ð;ŠCà�E˜#˜˜h q c¨¨C¯H©H°V±YÓ,?Ð+@ÐAŠCñ	 !ð
 €Jr(   c                 óÔ  • Sn[        U R                  5       5       HÈ  nU U SU S3nX   0 :X  a  U(       a  US   S:X  a  US S nM,  SX   ;   a  X   S   (       a  U S3nSX   ;   ab  X   S   (       aV  Sn[        X   S   R                  5       5       H2  nXPU   S   U   :X  a  U U U 3nSnM  U U U S	X   S   U    3nSnM4     U(       d  M¸  US   S:X  d  MÃ  US S nMÊ     U$ )
Nr
   zuse r&  r   rË  z only:rÍ  r­   z=>rQ  )r  rf  rj  ró   r³   r~  s         r)   r[  r[  ô  s  € Ø
€CÜ�#—(‘(“*ÖˆØ��c�U˜$˜q˜c Ð#ˆØ‰6�R‹<Þ�s˜2‘w #“~Ø˜#˜2�h�ÙØ�S‘VÓ ¡ v§Ø�E˜�.ˆCØ�C‘F‹?˜s™v eŸ}ØˆAÜ˜#™& ™-×,Ñ,Ó.Ö/�Ø˜A™˜u™ aÑ(Ó(Ø ˜E !  Q C˜.�CØ’Aà ˜E !  Q C r¨#©&°©-¸Ñ*:Ð);Ð<�CØ’Añ 0÷ ˆ3�3�r‘7˜c•>Ø�c�r�(ŠCñ% ð& €Jr(   c                 óª   • U S   n/ nU H4  n [        5       SU 3   nU" U 5      (       a  UR                  U5        M4  M6     U$ ! [         a     MG  f = f)Nr
  Ú	isintent_)Úglobalsr)  r  )rk  r´  rj  r
  rf  s        r)   Útrue_intent_listrh    si   € Ø
ˆh‰-€CØ
€CÛˆð	#Ü“	˜I f XÐ.Ñ/ˆAñ ��v‰vØ—
‘
˜6Ö"ñ ñ ð €Jøô ó 	Úð	ús   ŽAÁ
AÁAc           	      óÞ  • [        U 5        Sn/ nU H  nXpS   ;   d  M  UR                  U5        M      SU ;   a:  U S    H1  nXq;   a  Xv;  a  UR                  U5        M   M"  [        SU S35        M3     SU ;   a  UR                  U S   5        U(       d8  [	        UR                  5       5       H  nXv;  d  M
  UR                  U5        M     U GH„  nSX   ;   a>  X   S    H3  nX�;   d  M
  SX   ;   d  M  XqU   S   ;   d  M!  [        SU S	U S
35        M5     SU ;   a„  XpS   ;   a|  [        X   5      (       a	  U U SU 3nU U SU 3n[        X   5      (       a	  U U SU 3nXq;   a
  SX   ;  a  M¦  Sn	U S    H  n
XzS   :X  d  M  U
S   S:X  d  M  Sn	  O   U	(       a  MÔ  Xq;  a  [        U5        [        SU S35        Mõ  XpS   :X  a"  U S   S:w  d  U R                  S5      (       a  GM  SX   ;  aC  SX   ;   a  SX   S   ;   a  Xr;   a	  U U SU 3nGMK  [        X   5        [        SU S35        GMj  X   S   nUS:X  a  SX   ;   a  U SX   S    S3n0 nS X   ;   a  X   S    nOS!X   ;   a  X   S!   nS"U;   a   US"   S#;   a  U S$US"    S3nODU S"US"    3nO9S%U;   a"  U S&US%    3nS'U;   a  U S(US'    S3nOU S3nOS'U;   a  U S)US'    S3nS*nSX   ;   ab  X   S    Vs/ s H  nUS+;  d  M  UPM     nnU(       a  S,U;   a  S-U;   a  UR                  S-5        U(       a  U S.S/R                  U5       3nS/nS0X   ;   a   U U S1S/R                  X   S0   5       S3nS/nS2X   ;   a/  [        X   5      nU(       a  U U S3S/R                  U5       S3nS/nS4X   ;   a   U U S5S/R                  X   S4   5       S3nS/nSX   ;   a   U U S6S/R                  X   S   5       S3nS/nS7X   ;   aF  X   S7   nX   S   S8;   a)   [        U5      nSUR                   S/UR                    S3nU S9U S7U 3nOU S9U 3nU U U 3nGM‡     U$ s  snf ! ["         a     N2f = f):Nr
   r0  rŒ  zvars2fortran: Confused?!: "z" is not defined in vars.
rª  ru  z;vars2fortran: Warning: cross-dependence between variables "z" and "r¹  r3  zintent(callback) z	external z	optional r4   r   r/  rq   r1  rú   r   z*vars2fortran: No definition for argument "rm   r©   rn  r  z(vars2fortran: No typespec for argument "rh   rr  r6  r7  ro  rp  r   )r   r¦  z*(rX   z(len=rJ  z,kind=z(kind=r­   )r  z
intent(in)zintent(out)rÂ  r&  r  r8  r
  rZ  rt  zcheck(zdepend(rq  )r¼  r!  z :: )rY  r)  ro   rë  rv  rw  r  Ú
isoptionalÚshowr2   r�  rÐ  rÛ   rh  rÜ  r5   ÚimagrÆ   )r1  r0  r5  rf  r‘  rj  Únoutr+  r#  rá   rm  Úvardefrö  r³   rë   r÷  r´  r   s                     r)   r]  r]    s�  € Ü�ÔØ
€CØ€DÛˆØ�f‘ÕØ�K‰K˜ŽNñ ð �uÓØ�|Ô$ˆAØ‹yØ“=Ø—K‘K –Nñ !ô Ø1°!°Ð4OÐPöRñ %ð �UÓØ�‰�E˜*Ñ%Ô&ÞÜ�d—i‘i“kÖ"ˆAØ�}Ø—‘˜A–ñ #ô ˆØ�t‘wÓØ‘W˜XÔ&�Ø•9 ¨T©WÕ!4¸À1¹gÀhÑ>OÕ9OÜØUÐVWÐUXÐX_Ð`aÐ_bÐbfÐgöiñ 'ð ˜%Ó A¨{Ñ);Ó$;Ü  ¡×)Ñ)Ø˜˜c˜UÐ"3°A°3Ð7�Ø�E˜#˜˜i¨ sÐ+ˆCÜ˜$™'×"Ñ"Ø˜˜c˜U )¨A¨3Ð/�Ø‹y˜Z¨t©wÓ6ÙØˆDØ˜6”]�Ø˜&™	•> a¨¡j°JÕ&>Ø�DÙñ #ö ÙØ‹=Ü�ŒJÜÐ@ÀÀÀ4ÐHÔIÙØ�f‘ÓØ�W‰~ Ó+¨u¯y©y¸×/BÑ/Bò
 Ø˜T™WÓ$Ø˜T™WÓ$¨°t±w¸zÑ7JÓ)JØ“9Ø ˜E #  i°¨sÐ3�CÚÜ�‘ŒMÜÐ>¸q¸cÀÐFÔGÚØ‘˜Ñ$ˆØ�VÓ 
¨d©gÓ 5Ø�x˜q ¡¨Ñ!4Ð 5°QÐ7ˆFØˆØ˜T™WÓ$Ø‘w˜~Ñ.‰HØ˜t™wÓ&Ø‘w˜~Ñ.ˆHØ�(‹?Ø˜‰} 
Ó*Ø"˜8 2 h¨s¡m _°AÐ6‘à"˜8 1 X¨c¡] OÐ4‘Ø�hÓØ�x˜u X¨e¡_Ð$5Ð6ˆFØ˜Ó!Ø"˜8 6¨(°6Ñ*:Ð);¸1Ð=‘à"˜8 1˜‘Ø�xÓØ�x˜v h¨vÑ&6Ð%7°qÐ9ˆFØˆØ˜™Ó Ø#™w zÒ2ó .Ò2˜!Ø Ñ,÷ Ñ2ˆDð .æ °Ó 4¸È$Ó9Nð —‘˜MÔ*ÞØ"˜8 2 c§h¡h¨t£nÐ%5Ð6�Ø�Ø˜$™'Ó!Ø�x ˜s *¨S¯X©X°d±g¸kÑ6JÓ-KÐ,LÈAÐNˆFØˆAØ�t‘wÓÜ" 4¡7Ó+ˆCÞØ"˜8 A 3 g¨c¯h©h°s«m¨_¸AÐ>�ØˆAØ�d‘gÓØ�x ˜s &¨¯©°$±'¸'Ñ2BÓ)CÐ(DÀAÐFˆFØˆAØ�t‘wÓØ�x ˜s '¨#¯(©(°4±7¸8Ñ3DÓ*EÐ)FÀaÐHˆFØˆAØ�$‘'‹>Ø‘˜‘ˆAØ‰w�zÑ"Ð&CÓCðÜ˜Q›�AØ˜AŸF™F˜8 1 Q§V¡V H¨AÐ.�Að �x˜t A 3 a¨ sÐ+‰Fà�x˜t A 3Ð'ˆFØ��c�U˜6˜(Ð#‹ñI ðJ €JùòM.øô@ !ó Ùðús   Ë.
QË<QÐ(QÑ
Q,Ñ+Q,c                 ó6  • [        SS5        [        U [        5        [        SS5        / q[	        [
        S   5      n[        SS5        [         H(  n[        SUR                   S3S5        [        X5      nM*     [        SS5        [        U5      n[        U-   $ )NzReading fortran codes...
r   zPost-processing...
z"Applying post-processing hooks...
z  r¹   zPost-processing (stage 2)...
)
r2   rÙ   r<  r   ru  r   Úpost_processing_hooksÚ__name__Útraverserh  )ÚfilesÚpostlistÚhooks      r)   Úcrackfortranrv  �  s�   € ô Ð(¨!Ô,Ü�Eœ9Ô%ÜÐ" AÔ&Ø€KÜœ 1™Ó&€HÜÐ1°1Ô5ß%ˆÜ�"�T—]‘]�O 2Ð&¨Ô*Ü˜HÓ+Šñ &ô Ð,¨aÔ0Ü˜(Ó#€HÜ˜Ñ!Ð!r(   c                 óB   • [        U 5      S-   nSnS[        -  nX!-   U-   $ )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)r1  ÚpyfÚheaderÚfooters       r)   Úcrack2fortranr|  ®  s:   € ô ˜5Ó
! DÑ
(€Cð€Fðô ñ	€Fð
 ‰<˜&Ñ Ð r(   c                 óŒ   • [        U [        5      =(       a.    [        U 5      S:H  =(       a    [        U S   [        [        45      $ )Nr2  r   )rì  ÚtuplerX   r8   rÂ   )Úobjs    r)   Ú_is_visit_pairr€  ½  s8   € Ü�sœEÓ"÷ /Ü�C“˜A‘÷/ä˜3˜q™6¤C¬ :Ó.ð0r(   c                 ó  • [        U 5      (       a6  U S   S:X  a  U $ U" XU/UQ70 UD6nUb  [        U5      (       d   eU$ U nU u  p€OSU 4nSn[        U [        5      (       aE  / n[        U 5       H3  u  pš[	        Xš4UX'/-   U/UQ70 UD6u  p¼Uc  M"  UR                  U5        M5     OT[        U [        5      (       a=  0 nU R                  5        H&  u  pÚ[	        XÚ4UX'/-   U/UQ70 UD6u  pïUc  M"  XöU'   M(     OU nUc  U$ X†4$ )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   r[  N)r€  rì  rv  rå  rr  r)  rv  rL  )r  ÚvisitÚparentsr©   r5  ÚkwargsÚ
new_resultÚparentÚ
result_keyr[   r  Ú	new_indexÚnew_itemr•  Únew_keyÚ	new_values                   r)   rr  rr  Ã  sS  € ô8 �c×ÑØˆq‰6�^Ó#àˆJÙ˜3¨ÐA°$ÒA¸&ÑAˆ
ØÑ!Ü! *×-Ñ-Ð-Ð-ØÐØˆØ‰ˆ
�Cà˜�ˆØˆ
ä�#”t×ÑØˆ
Ü% cžN‰LˆEÜ"*¨E¨>¸5Ø+2°XÑ+=¸vð#<à,0ò#<à4:ñ#<ÑˆIð Ó$Ø×!Ñ! (Ö+ò +ô 
�Cœ×	Ñ	Øˆ
ØŸ)™)ž+‰JˆCÜ!)¨3¨,¸Ø*1°HÑ*<¸fð";à+/ò";à39ñ";ÑˆGð Ó"Ø&/˜7Ó#ò &ð ˆ
àÑØÐØÐ!Ð!r(   c                 ó  • US   u  pVU u  pxS n	US;   a  US   S   S:X  d   eUS   S   n
OUS:X  a  US	   S   S:X  d   eUS	   S   n
OS
n
S
nU
b6  UnU
R                  5        H  u  pÍ[        U5      (       d  M  U	" XË5      nM!     O_US:X  aY  US	   S   S   n
UnU
R                  5        H8  u  pÍ[        U5      (       d  M  [        R                  " SU-   S-   SU-   U5      nM:     Ub!  X¸:w  a  [	        SU SU SU SU S3	S5        X{4$ g
)aØ  Previously, Fortran character was incorrectly treated as
character*1. This hook fixes the usage of the corresponding
variables in `check`, `dimension`, `=`, and `callstatement`
expressions.

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

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

r   c                 óz   • [         R                  " SU -   S-   X5      n[         R                  " SU -   S-   X5      nU$ )Nz[*]\s*\br   z\b\s*[\[]\s*0\s*[\]])r¾   rÝ  )Úvarnamer  s     r)   Ú	fix_usageÚ8character_backward_compatibility_hook.<locals>.fix_usage  s>   € Ü—’�{ WÑ,¨uÑ4°gÓEˆÜ—’�u˜w‘Ð)@Ñ@Øó'ˆàˆr(   )r  rt  éýÿÿÿr   r0  r   rq  rž   NÚcallstatementz
(?<![&])\br   rŸ   zcharacter_bc_hook[rš  z]: replaced `z` -> `z`
)rL  Úischaracterr¾   rÝ  r2   )r9  rƒ  r©   r5  r„  Ú
parent_keyÚparent_valuer•  r  r�  Ú	vars_dictr‹  rŽ  Úvds                 r)   Ú%character_backward_compatibility_hookr˜    s`  € ð  ' r™{Ñ€JØ�J€Còð Ð+Ó+Ø�r‰{˜1‰~ Ó'Ð'Ð'Ø˜B‘K ‘N‰	Ø	�‹Ø�r‰{˜1‰~ Ó'Ð'Ð'Ø˜B‘K ‘N‰	àˆ	à€IØÑØˆ	Ø$Ÿ?™?Ö,‰KˆGÜ˜2�‹Ù% gÓ9’	ò -ð 
�Ó	Ø˜B‘K ‘N 6Ñ*ˆ	Øˆ	Ø$Ÿ?™?Ö,‰KˆGÜ˜2�‹ô ŸFšFØ! GÑ+¨eÑ3°S¸7±]ÀIóO’	ñ	 -ð ÑØÓô
 Ð(¨¨°A°c°Uð ;"Ø"' ¨¨y¨k¸ð>Ø?@ôBàÐÐð r(   Ú__main__r¦  z-quietz-verboser2  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&  )rV  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Úversionrx  r   r   r   r   r   r   r   r   r   r   r   r½   r!   r   r   r    r   r>  r   r   r=  r%   r   r$   r&   r   r#   r"   r   r*   r2   Ú	_MAXCACHEr™  r³   rn   rz   rª   rr   rw   r{   r}   r¿   rÀ   r�  r¤   r¥   rË   rÒ   r§   r¢   rÊ   r—   r«   rk  rÙ   ÚbeforethisafterÚfortrantypesrO  rà  rL  rM  Úgroupbegins77rÌ   Úgroupbegins90rÍ   Ú	groupendsrJ  ÚendifsrI  ÚmoduleproceduresrU  rN  r?  r@  rB  rC  rF  rG  rH  rA  rD  rE  rQ  rT  rX  rP  rR  rS  rK  ÚSr:  r;  rÑ   r,  rV  Úcrackline_bind_1rÓ  r<  rW  r'  rl  r  r$  rˆ  r”  r•  r–  rÚ  r»  r‚  r„  r‹  r‘  r˜  rY  rí  rÔ  r×  ro  rp  rM  r:  r(  r1  rÕ  rá  rx  ry  rz  rW  rY  r\  rd  rh  ru  rz  rx  r{  rœ  rž  r£  r¨  r«  r¬  r²  r¶  r¼  rÁ  rÔ  rØ  rñ  ró  rï  ry  rA  rà  r  rH  rw  rP  rQ  rR  rS  rT  rM  rÙ  r”  r\  r[  rh  r]  rp  rv  r|  r€  rr  r˜  r)  rq  rs  Úfuncsrf  Úf2Úf3ÚshowblocklistÚargvrë   ro   rÎ   r‰   rÝ   ÚOSErrorÚdetailrt  ry  r/   r'   r(   r)   Ú<module>r°     s^  ðñIóT Û Û Û 	Û Û 	Û Û 
Ý ðÛ÷ $ô
 à×"Ñ"€ð €	Ø€Ø	€Ø
€Ø
€Ø€Ø€Ø€Ø€Ø€Ø
€ð €Ø€Ø€Ø€ØÐ Ø€Ø€
Ø€Ü˜2Ð€	Ø€	Ø€Ø€Ø€	ØÐ Ø€Ø€	Ø€Ø€ò#ôLð €„ØÐ Û	!€AØ)¨6Ð2Ð˜Óñ 
"ã	€AØ)¨9Ð5Ð˜Óñ 
à€Ø€ó
€Að �e‘)€HˆQ�KØ€K��E‘	Óñ
òò,òò1ð —
’
Ð3°R·T±TÓ:×AÑA€Ø—*’*Ð1°2·4±4Ó8×?Ñ?€Ø—*’*Ð1°2·4±4Ó8×?Ñ?€Ø—*’*Ð1°2·4±4Ó8×>Ñ>€ò :Ð Ú8Ð ò3ò>ð4 '+°!ô _DðF€ð D€Ø�zŠzØ�r˜<¨°tÐ<Ñ<¸b¿d¹dóDØEKðL€àŸ
š
 ?ØˆÐ4Ñ4°lÐEbÑ6bÐdhð6jñ $jØkm×koÑkoóqÐ ð —*’*˜_ð 0?ñ ?Ø@BÇÁóFØGNðO€à—J’J˜ð 24ñ  4Ø57·T±Tó;Ø<CðDÐ ð (€Ø—’Ø�r˜=¨-¸Ð>Ñ>ÀÇÁóFØGNðO€àðñ€ð —’Ø�r˜=¨-¸Ð>Ñ>ÀÇÁóFØGNðO€ð7€	à�ZŠZØ�r˜9 i°Ð6Ñ6¸¿¹ó>Ø?DðE€
ð
 €à�zŠzØ�y &¨&°$Ð7Ñ7¸¿¹ó?Ø@GðH€ð )Ð ØŸšØ�rÐ+Ð-=¸tÐDÑDÀbÇdÁdóLàðÐ ð —*’*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à—:’:˜oð 18ñ 8Ø9;¿¹ó?Ø@KðLÐ à—*’*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à—*’*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à—*’*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à—
’
ØÐ4Ñ4°b·d±dó<Ø=EðF€à—’ØÐ6Ñ6¸¿¹ó>Ø?HðI€à—:’:ØÐ:Ñ:¸B¿D¹DóBØCNðOÐ à—
’
˜?ð .Qñ QØRT×RVÑRVóXØYaðb€à—:’:ØÐ@Ñ@À"Ç$Á$óHØITðUÐ à�jŠjØÐ0Ñ0°"·$±$ó8Ø9?ð@€à�jŠjØÐ0Ñ0°"·$±$ó8Ø9?ð@€à�zŠzØÐ2Ñ2°B·D±Dó:Ø;BðC€à—’ØÐ6Ñ6¸¿¹ó>Ø?HðI€à—
’
ØÐ4Ñ4°b·d±dó<Ø=EðF€à�ZŠZØÐ.Ñ.°·±ó6Ø7<ð=€
à—*’*ØÐ6Ñ6¸¿¹ó>Ø?IðJ€à—
’
ØÐ4Ñ4°b·d±dó<Ø=EðF€ð Ÿ*š* _ð 8Mñ &Mð OQ÷  OSñ  OSð  VX÷  VZñ  VZñ  OZó[ð ]oðoÐ à—:’:Ø9¸2¿4¹4óAØBMðNÐ òò(ð —’ÐAÀ2Ç4Á4ÓH€Ø—:’:ÐAÀ2Ç4Á4ÓHÐ Ø—Z’ZÐ kÐmo×mqÑmqÓrÐ ô[%ò|ô$ò&ô
ð@ —
’
ØKÈRÏTÉTóS€à—’ð%Ø&(§d¡dó,€ð —*’*ð rð  tv÷  txñ  txóy€à—*’*ð*Ø+-¯4©4ó1€ð —j’jØ@À"Ç$Á$óHÐ à—
’
Ø;ó=€à�zŠzØHóJ€ð ŸšÐ$AÀ2Ç4Á4ÓHÐ òòò ò ò u@òpò(ð8 �jŠjÐEÀrÇtÁtÓL€Ø�zŠzØIÈ2Ï4É4óQ€à�zŠzØ9¸2¿4¹4óA€à—’ð2à35·4±4ó9€ð —*’*ð Gð  IK÷  IMñ  IMóN€òò"òJfòR7,ôvô6ôôòòôô<ô@\ò~òD'ôT*òZ$ô&!ð —*’*˜^¨R¯T©TÓ2€òAðH �zŠzÐ,¨b¯d©dÓ3€òò,ò4ò$"òô ð$ (*ô bòJ(ð —*’*˜WÓ%×+Ñ+€òò DðN —:’:Ð1°2·4±4Ó8Ð ô;ò|Mð`  ô òDð6 ŸšÐ$6¸¿¹Ó=Ð ØŸšÐ$DÀbÇdÁdÓKÐ ØŸšØ1°2·4±4ó9Ð àŸš M°2·4±4Ó8Ð ØŸšÐ$EÀrÇtÁtÓLÐ ò	"ð )+ô (ôZGôTôò0ôzð@ Ð ò"ò"!ò0ð "$¨Dô ?"òD9 õx × Ò ÐBÔ Cð ˆzÔØ€EØ€EØ	€AØ	
€BØ	
€BØ€MØ�XŠX�a�bŒ\ˆØ�‹7ÙØˆq‰T�S‹[ØŠAØ�(‹]ØˆEØŠGØ�*‹_ØˆGØŠEØ�&‹[ßŠyÙØVÐXYô[àˆMØ"ŠNØÐ"Ó"ØŠMØÐ%Ó%ØŠNØ�&‹[ØˆIØ"ŠNØ�&‹[ØˆIØ#ˆNØŠMØ�$‹YØŠBØ�'‹\ØŠMØ�$‹YØŠBØˆq‰T�S‹[Ù�o¡d¨1£g Y¨bÐ1Ö2ÞØˆBØŠKÞØˆBØŠMÞð2Ù�Q“—’”Ø—’˜Q—ð �LŠL˜�Oñc ÷d Š9Ÿš¯}ª}Ùð ð ô	ñ ˜EÓ"€Hß‚{ÙÐ/±´[Ó0AÐ/BÀ"ÐEÀqÔIÙ˜HÓ%ˆÙ”+˜sÔ# qØ�GŠG�CŒL÷ $æÙˆX�ð ðQ øð[m ó ØÓðûðDo ó 2Ù˜) F¡:¨RÐ0×1Ó1ûð2ú÷" $Õ#ús5   ªl8 é)mìm)ì8mímím&ím!í!m&í)
m7