Ë
    ¡ehB ã                   ó  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 	 ddlZddlmZ ddl­ ddlmZ ej"                  adadadadad	ad
ad
adadadag ad
ad
ada i a!d
a"da#da$da%tJ        g ia&d
a'g a(da)g a*da+da,g a-g a.g a/d„ Z0dÇd„Z1de_2        i Z3dD ]	  Z4ddie3e4<   Œ dD ]	  Z4ddie3e4<   Œ i Z5i Z6dD ]  Z7e7dz   e5e7<   e7e6e7dz   <   Œ d„ Z8d„ Z9d„ Z:d„ Z; ejx                  dejz                  «      j|                  Z? ejx                  dejz                  «      j|                  Z@ ejx                  dejz                  «      j|                  ZA ejx                  dejz                  «      j„                  ZCg d¢ZDg d¢ZEd „ ZFd!„ ZGeHdfd"„ZId#ZJd$ZK ejx                  eJd
eKeKd%fz  ejz                  «      d&fZL ejx                  eJd
eKd'z   eKd'z   d%fz  ejz                  «      ZM ejx                  eJd(z  ejz                  «      d)fZN ejx                  eJd*z  ejz                  «      d)fZOd+ZP ejx                  eJd
ePePd%fz  ejz                  «      d)fZQePd,z   d-z   ZR ejx                  eJd
eReRd%fz  ejz                  «      d)fZSd.ZT ejx                  eJd
eTeTd%fz  ejz                  «      d/fZUd0ZV ejx                  eJd1eVeVd%fz  ejz                  «      d2fZWd3ZX ejx                  eJd
eXeXd%fz  ejz                  «      d4fZY ejx                  eJd5z  ejz                  «      d6fZZ ejx                  eJd7z  ejz                  «      d8fZ[ ejx                  eJd9z  ejz                  «      d:fZ\ ejx                  eJd;z  ejz                  «      d<fZ] ejx                  eJd=z  ejz                  «      d>fZ^ ejx                  eJd?z  ejz                  «      d@fZ_ ejx                  eJdAz  ejz                  «      dBfZ` ejx                  eJdCz  ejz                  «      dDfZa ejx                  eJdEz  ejz                  «      dFfZb ejx                  eJdGz  ejz                  «      dHfZc ejx                  eJdIz  ejz                  «      dJfZd ejx                  eJdKz  ejz                  «      dLfZe ejx                  eJdMz  ejz                  «      dNfZf ejx                  eJdOz  ejz                  «      dPfZg ejx                  eJdQz  ejz                  «      dRfZh ejx                  eJdSz  ejz                  «      dTfZi ejx                  eJdUz  ejz                  «      dVfZj ejx                  eJdWz  ejz                  «      dXfZk ejx                  eJdYz  ejz                  ejØ                  z  «      dZfZm ejx                  d[ejØ                  «      d\fZnd]„ Zod^„ Zp ejx                  d_ejz                  «      Zq ejx                  d`ejz                  «      Zr ejx                  daejz                  «      ZsdÈdb„Ztdc„ ZudÉdd„Zvde„ ZwdÇdf„Zx ejx                  dgejz                  «      Zy ejx                  dhejz                  «      Zz ejx                  diejz                  «      Z{ ejx                  djejz                  «      Z| ejx                  dkejz                  «      Z} ejx                  dl«      Z~ ejx                  dm«      Z ejx                  dnejz                  «      Z€do„ Z�dp„ Z‚dq„ Zƒdr„ Z„ds„ Z…dt„ Z†du„ Z‡ ejx                  dvejz                  «      Zˆ ejx                  dwejz                  «      Z‰ ejx                  dxejz                  «      ZŠ ejx                  dyejz                  «      Z‹ ejx                  dzejz                  «      ZŒd{„ Z�d|„ ZŽd}„ Z�d~„ Z�dÈd„Z‘dÈd€„Z’dÈd�„Z“dÊd‚„Z”dƒ„ Z•d„„ Z–dËd…„Z—dÌd†„Z˜dÍd‡„Z™dˆ„ Zšd‰„ Z›dÎdŠ„Zœd‹„ Z�dÏdŒ„Zž ejx                  d�ejz                  «      ZŸdŽ„ Z  ejx                  d�ejz                  «      Z¡d�„ Z¢d‘„ Z£d’„ Z¤d“„ Z¥d”„ Z¦dÐd•„Z§i fd–„Z¨d—„ Z© ejx                  d˜«      j„                  Zªd™„ Z«dš„ Z¬ ejx                  d›ejz                  «      Z­dËdœ„Z®d�„ Z¯g fdž„Z°dŸ„ Z± ejx                  d ejz                  «      Z² ejx                  d¡ejz                  «      Z³ ejx                  d¢ejz                  «      Z´ ejx                  d£ejz                  «      Zµ ejx                  d¤ejz                  «      Z¶d¥„ Z·i fd¦„Z¸dÑd¨„Z¹dÎd©„ZºdÎdª„Z»d«„ Z¼dÒd¬„Z½g a¾d­„ Z¿d®„ ZÀd¯„ ZÁg dfd°„ZÂd±„ ZÃ�t|        �j‰                  eÃ«       eÅd²k(  �rg ZÆg ZÇdZÈdZÉdZÊdZËe�j˜                  dd D ]å  ZÍeÍd
k(  rŒ	eÍd   d³k(  rdZÈŒeÍd´k(  rdadaŒeÍdµk(  rd¶adaŒ(eÍd·k(  rt&        r	 e1d¸d«       dadaŒAeÍd¹k(  rdaŒIeÍdºk(  rdaŒQeÍd»k(  rdadaŒ[eÍd¼k(  rdad½adaŒgeÍd¾k(  rdZÉŒoeÍd¿k(  rdZËŒweÍdÀk(  rdZÊŒeÍd   dÁk(  r eÎdÂ eÏeÍ«      z  «       Œ™eÉrdZÉeÍaŒ eÊrdZÊeÍaŒ§eÈr+	  eÐeÍ«      �j£                  «        eÆ�j‰                  eÍ«       ŒÔeÇ�j‰                  eÍ«       Œç t&        st2        rt4        s	 e1dÄd«        e¿eÆ«      ZÔt0        rF e1dÅ eÏt0        «      z  d«        eÀeÔ«      ZÕ eÐt0        dÆ«      5 ZÈeÈ�j­                  eÕ«       ddd«       eËr	 eHeÔ«       yyy# e$ r dZY �
Œ«w xY w# eÒ$ rZÓ eÎdÃeÓ›d§�«       Y dZÓ[Ó�Œ‰dZÓ[Óww xY w# 1 sw Y   ŒCxY w)Óa  
crackfortran --- read fortran (77,90) code and extract declaration information.

Copyright 1999 -- 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   — da dadadadadadadadada	g a
dat        g iadadadag ai adadadag ag ag ag ad ay )Nr   r   r   r	   r
   r   )Ú	strictf77ÚsourcecodeformÚquietÚverboseÚtabcharÚpyffilenameÚf77modulenameÚskipemptyendsÚignorecontainsÚdolowercaseÚdebugÚgroupcounterÚ	grouplistÚneededmoduleÚexpectbeginÚskipblocksuntilÚusermodulesÚf90modulevarsÚgotnextfileÚfilepositiontextÚcurrentfilenameÚskipfunctionsÚ	skipfuncsÚ	onlyfuncsÚinclude_pathsÚprevious_context© ó    úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/numpy/f2py/crackfortran.pyÚreset_global_f2py_varsr*   Å   s�   € ð €IØ€NØ€EØ€GØ€GØ€KØ€MØ€MØ€NØ€KØ€Eà€LÜ˜rÐ"€IØ€LØ€KØ€OØ€KØ€MØ€KØÐØ€OØ€MØ€IØ€IØ€MØÑr(   c                 ó¨   — t         sy t        sE|r#t        j                  j	                  t
        «       t        j                  j	                  | «       y y ©N)r   r   ÚsysÚstdoutÚwriter    )ÚlineÚflags     r)   Úoutmessr2   ë   s:   € õ ØÝÙÜ�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                 óZ   — | t         v r"t        d| ›dt         |    ›d�«       t         |    S | S )Nzrmbadname1: Replacing "ú" with "ú".
)ÚbadnamesÚerrmess©Únames    r)   Ú
rmbadname1rr   
  s/   € ØŒxÑÝÚ”x “~ð'ô 	(ä˜‰~ÐØ€Kr(   c                 ó>   — | D �cg c]  }t        |«      ‘Œ c}S c c}w r,   )rr   ©ÚnamesÚ_ms     r)   Ú	rmbadnamerw     s   € Ø%*Ö+˜rŒJ�r�NÒ+Ð+ùÒ+ó   …c                 óZ   — | t         v r"t        d| ›dt         |    ›d�«       t         |    S | S )Nzundo_rmbadname1: Replacing "rl   rm   )Úinvbadnamesro   rp   s    r)   Úundo_rmbadname1r{     s1   € ØŒ{ÑÝÚœ TÓ*ð,ô 	-ä˜4Ñ Ð Ø€Kr(   c                 ó>   — | D �cg c]  }t        |«      ‘Œ c}S c c}w r,   )r{   rt   s     r)   Úundo_rmbadnamer}     s   € Ø*/Ö0 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                 óL  — t         �.t        j                  | «      j                  «       j                  }n×t	        dt
        j                  j                  | «      «      }t        | d«      5 }|j                  |«      }|j                  t        j                  «      rd}nf|j                  t        j                  t        j                  f«      rd}n4|j                  t        j                  t        j                   f«      rd}nd}ddd«       t        | |¬«      S # 1 sw Y   ŒxY w)	aN  Ensures that filename is opened with correct encoding parameter.

    This function uses charset_normalizer package, when available, for
    determining the encoding of the file to be opened. When charset_normalizer
    is not available, the function detects only UTF encodings, otherwise, ASCII
    encoding is used as fallback.
    Né    Úrbz	UTF-8-SIGzUTF-32zUTF-16Úascii)Úencoding)Úcharset_normalizerÚ	from_pathÚbestr‚   r`   ÚosÚpathÚgetsizeÚopenÚreadÚ
startswithÚcodecsÚBOM_UTF8ÚBOM_UTF32_LEÚBOM_UTF32_BEÚBOM_LEÚBOM_BE)ÚfilenameÚmoder‚   ÚnbytesÚfhandleÚraws         r)   Úopenhookr—   ,  sà   € ô Ð%Ü%×/Ñ/°Ó9×>Ñ>Ó@×IÑI‰ô �RœŸ™Ÿ™¨Ó2Ó3ˆÜ�(˜DÓ!ð 
	# WØ—,‘,˜vÓ&ˆCØ�~‰~œfŸo™oÔ.Ø&‘Ø—‘¤×!4Ñ!4´f×6IÑ6IÐ JÔKØ#‘Ø—‘¤§¡´·±Ð >Ô?Ø#‘ð #�÷
	#ô �˜$¨Ô2Ð2÷
	#ð 
	#ús   Á*BDÄD#c                 ó¼  — d}t        | «      j                  j                  «       t        v rd}t	        | d«      5 }|j                  «       }d}t        |«      rd}nt        |«      rd}d}|dkD  rX|rV|d   dk7  r6|j                  «       r&|dz  }|d   dk7  rt        |d	d
 «      s|dd dk(  rd}n|j                  «       }|dkD  r|rŒVd	d	d	«       |S # 1 sw Y   |S xY w)z(Check if file is in free format Fortran.FTÚré   r   ú!r   ú	Né   éþÿÿÿr   ú&)
r   ÚsuffixÚlowerÚCOMMON_FREE_EXTENSIONSr—   ÚreadlineÚ_has_f_headerÚ_has_f90_headerÚstripÚ_free_f90_start)ÚfnameÚresultr•   r0   Úns        r)   Úis_free_formatr«   K  sò   € ð €FÜˆEƒ{×Ñ×ÑÓ!Ô%;Ñ;ØˆÜ	�%˜Ó	ð & Ø×ÑÓ!ˆØˆÜ˜ÔØ‰AÜ˜TÔ"ØˆAØˆFØ�!Še™Ø�A‰w˜#Š~ $§*¡*¤,Ø�Q‘�Ø˜‘G˜t’O¬¸¸R¸a¸Ô(AÀdÈ2ÈbÀkÐUXÒFXØ!�FØØ×#Ñ#Ó%ˆDð �!Šeš÷&ð €M÷&ð €Mús   ºBCÃCc           
      ó`  — |s/t         t        t        t        t        t
        t        t        t        f	}| g k(  ryt        }d}d}d}t        j                  dt        j                  «      }t        j                  d«      }	t        j                  d«      }
t        j                  d«      }|r	 |dd«       d	\  }}d
gt        d«      D �cg c]  }t        |«      ‘Œ c}z   }dat        j                  | t         ¬«      }	 	 |j#                  «       }|s�nà|j-                  «       ræda|j)                  «       ada |}dadat.        j0                  j3                  t        «      d   }t5        t        «      j6                  j9                  «       t:        v rt=        |«      st?        |«      sdantA        t        «      rt?        |«      sdat        rtB        antD        atG        dtI        t        «      ›dt        ›t        xr dxs d›d�«       |jK                  «       jM                  dd
«      }|dk(  s|d   dvrn|dd }|dk(  sŒd}tO        |d«      \  }}|d
z  }|dd j9                  «       dk(  rtO        |dz   |dd z   d«      \  }}d}|jQ                  «       dk(  rt        dk(  rnd}�Œ«t        dk(  �r|d   d v r'|dd j9                  «       d!k(  rd"|dd z   }d}nd}d}�Œãt        rtS        |«      d#kD  r|dd# }|d   |vrt'        d$tI        |«      z  «      ‚|rt        r$tS        |«      dkD  r|d   d
k(  s||d%d z   }d}d}�nu|	jU                  |«      }|r|jW                  d&«      }|r)||
jU                  |«      jW                  d&«      z   }d}d}�n&d"|dd z   }|r|j9                  «       }n|}|}|}�nt        dk(  rß|sbd'k(  r]|jU                  |«      rL|d(z   }	 |j#                  «       }|stY        d)«       n||z   }|jU                  |«      rnŒ6|j[                  «       }|	jU                  |«      }|r|jW                  d&«      }|r(||
jU                  |«      jW                  d&«      z   }d}d}n(|r |rt]        |«      s|j9                  «       n|}n|}|}|}|du}nt_        d*tI        t        «      z  «      ‚d+|ja                  «       dz
  t        |fz  a|jU                  |«      }|rÿ|jW                  d,«      }t.        j0                  jc                  |«      rte        ||d¬-«       nÈt.        j0                  jg                  t        «      gth        z   }d}|D ]S  }t.        j0                  jk                  ||«      }t.        j0                  jc                  |«      sŒCd}te        ||d¬-«        n |sAtG        d.tI        |«      ›d/t.        jl                  jk                  |«      ›d0�«       n ||«       |}�Œõ|r|j9                  «       }n|}|}d+|ja                  «       dz
  t        |fz  a|jU                  |«      }|rÿ|jW                  d,«      }t.        j0                  jc                  |«      rte        ||d¬-«       nÈt.        j0                  jg                  t        «      gth        z   }d}|D ]S  }t.        j0                  jk                  ||«      }t.        j0                  jc                  |«      sŒCd}te        ||d¬-«        n |sAtG        d.tI        |«      ›d/t.        jl                  jk                  |«      ›d0�«       n ||«       da|jo                  «        |r
 |dd«       y\	  a aaaaaaaayc c}w # t$        $ r6}t'        d|j)                  «       › d|j+                  «       › d|› d�«      ‚d}~ww xY w)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
z6Flag sourcecodeform must be either 'fix' or 'free': %szLine #%d in %s:"%s"
	rq   )Ú
dowithlineÚistopz-readfortrancode: could not find include file z in ú. Ignoring.
)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Ù   e  sf  € ñ Ü!Ô#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 rœ3˜r�7Ò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Ø‘	Ü¤Ô0¼ÈÔ9KØ!'�ÝÜ-‘ä-�ÝÜœOÕ,­nÜ Ò. YÒ4°"Ñ4ð6ô 7ð �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¬C°«F°QªJ¸qÀ¹tÀsº{à˜!˜A˜B˜%‘Z�Ø�	Ø "’à—K‘K “N�ÙØŸ™ ›�AÙØ˜eŸk™k¨!›n×2Ñ2°6Ó:Ñ:�BØ "�IØ$&’Mð   ! A B %™�Aá'Ø$&§H¡H£J™	à$&˜	Ø$&�MØ’Bä˜vÒ%Ù˜C 6šM¨j×.>Ñ.>¸qÔ.AØ˜‘H�ØØŸ™›�BÙÜØMôOàØ˜B™�AØ!×'Ñ'¨Ô+Øð ð —H‘H“J�Ø—‘˜A“ˆAÙØ—G‘G˜F“O�ÙØ˜%Ÿ+™+ a›.×.Ñ.¨vÓ6Ñ6�Ø�	Ø "‘á#ñ 4EÔIZÐ[]ÔI^ §¡¤
Ðeg‘Ià "�IØ "�Ø�Ø˜T�M‰DäØHÌ4ÔP^ÓK_Ñ_óað aà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   Ã])Ã<]. Ý.	^-Ý71^(Þ(^-zN\s*(?P<before>%s(?=\s*(\b(%s)\b)))\s*(?P<this>(\b(%s)\b))\s*(?P<after>%s)\s*\Zzqcharacter|logical|integer|real|complex|double\s*(precision\s*(complex|)|complex)|type(?=\s*\([\w\s,=(*)]*\))|byteú.*rh   z|static|automatic|undefined)z([a-z]+[\w\s(=*+-/)]*?|)Úfunctionrú   rù   Úbegin)z	[a-z\s]*?Ú
subroutinerü   rù   zprogram|block\s*dataz@|module(?!\s*procedure)|python\s*module|(abstract|)\s*interface|ztype(?!\s*\()z\end|endprogram|endblockdata|endmodule|endpythonmodule|endinterface|endsubroutine|endfunctionÚendzDend\s*(if|do|where|select|while|forall|associate|critical|enum|team)z[\w]*?Úendifzmodule\s*procedureÚmoduleprocedure)r
   Úimplicitr   rù   r   )r
   údimension|virtualr  rù   Ú	dimension)r
   Úexternalr  rù   r  )r
   Úoptionalr  rù   r  )r
   Úrequiredr  rù   r  )r
   Úpublicr  rù   r  )r
   Úprivater  rù   r  )r
   Ú	intrinsicr  rù   r  )r
   úintent|depend|note|checkr	  z\s*\(.*?\).*Úintent)r
   Ú	parameterr  z\s*\(.*r  )r
   Údatar  rù   r  )r
   Úcallr  rù   r  )r
   Úentryr  rù   r  )r
   Úcallfunr  rù   r  )r
   Úcommonr  rù   r  )r
   Úuser  rù   r  )r
   Úcontainsr  r
   r  )r
   Úformatr  rù   r  )r
   úKthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddefr  rù   Úf2pyenhancementsz2\s*(?P<before>''')(?P<this>.*?)(?P<after>''')\s*\ZÚ	multilinec           
      óx  — t        d«      t        |«      z  rJ d«       ‚t        j                  dj                  dj                  t        j                  |«      «      dj                  t        j                  |«      «      dd¬«      «      }|j                  | «      }|r|j                  «       }|d	   |d
   fS | dfS )z¶
    Splits the line into (line[:i], line[i:]),
    where i is the index of first occurrence of one of the characters
    not within quotes, or len(line) if no such index exists
    z"'zcannot split by unquoted quoteszR\A(?P<before>({single_quoted}|{double_quoted}|{not_quoted})*)(?P<after>{char}.*)\Zz[^"'{}]z[{}]z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))Ú
not_quotedr;   Úsingle_quotedÚdouble_quotedÚbeforeÚafterr
   )Úsetr¾   r¿   r  ÚescaperÒ   Ú	groupdict)r0   Ú
charactersr™   ró   Úds        r)   rÑ   rÑ   ˜  s®   € ô �E“
œS ›_Ò,ÐPÐ/PÓPÐ-Ü
�
‰
ð	!ß!'¡Ø!×(Ñ(¬¯©°:Ó)>Ó?Ø—‘œrŸy™y¨Ó4Ó5Ø0Ø0ð	 "(ó "2ó	3€Að 	
�‰�‹€AÙØ�K‰K‹MˆØ�(‘˜Q˜w™ZÐ(Ð(Ø�"ˆ:Ðr(   c                 óº   — g }t        | «      j                  d«      D ],  }dD ]  }|j                  |d«      }Œ |j                  |«       Œ. dj	                  |«      S )Nú@,@z(),rð   ú,)ÚmarkoutercommaÚsplitrÐ   ÚappendrÛ   )ÚargslineÚarª   r™   s       r)   Ú_simplifyargsr*  ¬  s`   € Ø
€AÜ˜HÓ%×+Ñ+¨EÓ2ò ˆØò 	"ˆAØ—	‘	˜!˜SÓ!‰Að	"à	�‰��ðð �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                 ó¬  — t        | d«      \  }}|r„t        d   j                  | «      slt        d   j                  | «      sT|dk(  sJ t	        |«      «       ‚t        | d«      \  } }|r!t        | |«       t        |dd d«      \  } }|rŒ!t        | |«       y|dk  r_dat        diat        i iat        g ia	g t        t           d<   i t        t           d<   dt        t           d<   dt        t           d	<   d
a
d
ay|dkD  �r”d}t        rt        t        k(  rd}t        |kD  r t        dt	        t        «      ›dt	        t        «      ›d�«       t        d«       t        t        dz
     j                  t        t           «       t        t           t        t        dz
     d
   d<   t        t        = t        dz
  at        |kD  rŒ t        rÍt        t        k(  rÀt        t        dz
     j                  t        t           «       t        t           t        t        dz
     d
   d<   t        t        = t        dz
  at        t        dz
     j                  t        t           «       t        t           t        t        dz
     d
   d<   t        t        = t        dz
  ad
a
y| dk(  ryd}t        t         t"        t$        t&        t(        t*        t,        t.        t0        t2        t4        t6        t8        t:        t<        t>        t@        tB        tD        tF        tH        tJ        t        t        tL        fD ]  }|d   j                  | «      }|r n|dz   }Œ! �s”tN        }	dt        cxk  r	t        k  ry dt        t           v �rt        t           d   D �]  }
|
tP        v r	tP        |
   }
dt        t           v r|
t        t           d   v rŒ7tS        j                  d|
z  tU        | «      tR        jV                  «      }|sŒk|	j                  |jY                  d«      «      }t[        |jY                  d«      «      }|rd|
›d|›d|jY                  d«      ›d�} n	d|
›d|›d�} t\        d   j                  | «      }|st        dt	        | «      z  «        yt_        |d| «        y t`        dkD  s,t`        dk(  r7tb        je                  «       jg                  d«      rda4t        dt        z  «       yd   dk(  �r=dt        cxk  r	t        k  rn nt        dz
  at        t        k  ryt        dk  rtk        dt        z  «      ‚t8        d   j                  | «      }|rc|jY                  d «      t        t           k(  sDtk        d!t	        |jY                  d «      «      ›d"t	        t        t           «      ›d#tl        ›�«      ‚t        t        k(  rd
at        t        dz
     j                  t        t           «       t        t           t        t        dz
     d
   d<   t        t        = t        dz
  atn        sda8yy|d   d$k(  r5dt        cxk  r	t        k  rn n
t        dz   ayda9t_        ||d   | «       da8y|d   d%k(  ry|d   d&k(  rt_        ||d   | «       y|d   d'k(  r*tt        rydt        cxk  r	t        k  r	y t        ayt        aydt        cxk  r	t        k  ry t_        ||d   | «       y)(z¬
    reset=-1  --- initialize
    reset=0   --- crack the line
    reset=1   --- final check if mismatch of blocks occurred

    Cracked data is saved in grouplist[0].
    ú;r   r   Nr
   ÚbodyÚvarsÚblockrq   r   é   zcrackline: groupcounter=z groupname=r¹   zYcrackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
Ú	externalsÚ
interfacedz5(?P<before>[^"]*)\b%s\b\s*@\(@(?P<args>[^@]*)@\)@.*\Zr  Úargszcallfun ú(z
) result (r©   ú)z8crackline: could not resolve function call for line=%s.
r  r¸   z"crackline:%d: No pattern for line
rý   z>crackline: groupcounter(=%s) is nonpositive. Check the blocks.Úthiszcrackline: End group z* does not match with previous Begin group z
	rû   rþ   rÿ   r  );rÑ   Úf2pyenhancementspatternrÒ   ÚmultilinepatternrÎ   Ú	crackliner   Ú	groupnameÚ
groupcacher   r   r   r   r2   r'  ÚdimensionpatternÚexternalpatternÚintentpatternÚoptionalpatternÚrequiredpatternÚparameterpatternÚdatapatternÚpublicpatternÚprivatepatternÚintrinsicpatternÚendifpatternÚ
endpatternÚformatpatternr½   ÚfunctionpatternÚsubroutinepatternÚimplicitpatternÚtypespatternÚcommonpatternÚcallpatternÚ
usepatternÚcontainspatternÚentrypatternÚmoduleprocedurepatternÚcrackline_re_1rz   r¾   ÚmarkouterparenrÀ   rÓ   r*  ÚcallfunpatternÚanalyzeliner   r!   r¡   Úendswithr&   rÆ   r    r   r   r   r   )r0   Úresetrð   Úhas_semicolonÚsemicolon_lineÚflr1   Úpatró   Úre_1rq   Úm1Úm2r)  s                 r)   r9  r9  ¸  s6  € ô )¨¨sÓ3Ñ€A€}ÙÔ5°aÑ8×>Ñ>¸tÔDÜ/°Ñ2×8Ñ8¸Ô>à˜ŠzÐ&œ4 ›;Ó&ˆzä0°°sÓ;ÑˆˆnÙÜ�d˜EÔ"Ü#4°^ÀAÀBÐ5GÈÓ#MÑ ˆD�.ò ô 	�$˜ÔØØˆ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�âØŸ™ B§H¡H¨XÓ$6Ó7�BÜ% b§h¡h¨vÓ&6Ó7�AÚâ ¢! R§X¡X¨hÕ%7ð 9™ð ò 48ºÐ;˜Ü& qÑ)×/Ñ/°Ó5�AÙÜØWÔZ^Ð_cÓZdÑdôfáÜ  9¨dÔ3Ùð+ô, �QŠ;œ7 aš<¬O×,AÑ,AÓ,C×,LÑ,LÈVÔ,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�s˜1‘v˜tÔ$Ø‰Ø	ˆQ‰�7Ò	ØØ	ˆQ‰Ð$Ò	$Ü�A�s˜1‘v˜tÕ$Ø	ˆQ‰�:Ò	ÝØØ”Ô/¤<Ò/Øð 0ä&‰œ,‰à”Ô/¤<Ò/Øð 0ä�A�s˜1‘v˜tÕ$r(   c                 óz   — d}d}| D ]1  }|dk(  r|dz   }|dk(  r|dz   }Œ|dk(  r|dz
  }|dk(  r|dz   }Œ-||z   }Œ3 |S )Nr
   r   r4  r   ú@(@r5  ú@)@r'   )r0   rë   Úfr³   s       r)   rT  rT  W  sq   € Ø
€AØ	€AØò ˆØ�Š8Ø�A‘ˆAØ�AŠvØ˜‘I�ØØ�#ŠXØ�A‘ˆAØ�AŠvØ˜‘I�ØØ�‰E‰ðð €Hr(   c                 ó  — d}d}t        | |dz   «      \  }}||z  }|rY|d   |k(  r|dk(  r|d|z   dz   z  }n#||d   z  }|d   dk(  r|dz  }n|d   dk(  r|dz  }t        |dd  |dz   «      \  }}||z  }|rŒY|rJ t        || |f«      «       ‚|S )Nr
   r   ú()ú@r4  r   r5  )rÑ   rÎ   )r0   Úcommarë   rc  r  r  s         r)   r%  r%  i  sÍ   € Ø
€AØ	€AÜ% d¨E°D©LÓ9�M€FˆEØˆ�K€AÙ
Ø�!‰H˜Ò A¨¢FØ��u‘˜sÑ"Ñ"‰Aà��q‘‰MˆAØ�Q‰x˜3ŠØ�Q‘‘Ø�q‘˜S’Ø�Q‘�Ü)¨%°°¨)°U¸T±\ÓB‰ˆ�Ø	ˆV‰ˆò ñ Ð$”$˜˜4 �|Ó$Ó$ˆ5Ø€Hr(   c                 óJ   — | j                  dd«      j                  dd«      }|S )Nra  r4  rb  r5  )rÐ   )r0   r™   s     r)   Úunmarkouterparenri  |  s$   € Ø�‰�U˜CÓ ×(Ñ(¨°Ó4€AØ€Hr(   c                 ó   — | si } |s| S | |u r| S t        |j                  «       «      D ]£  }|dk(  r|s|| vsŒ||   | |<   Œ|dk(  r||   D ]  }t        | ||«      } Œ Œ5|dk(  rt        | ||   |«      } ŒK|dk(  rt	        | ||   |«      } Œa|dv r|s|| vsŒl||   | |<   Œu|dk(  rŒ{|dv rt        d|z  «       ŒŽt        d	t        |«      z   «      ‚ | S )
Nr4   ÚattrspecÚkindselectorÚcharselector)ú=ÚtypenameÚnote)r
  Úcheckr  r  r  Údependz"appenddecl: "%s" not implemented.
z-appenddecl: Unknown variable definition key: )ÚlistÚkeysÚsetattrspecÚsetkindselectorÚsetcharselectorro   rÆ   rÂ   )ÚdeclÚdecl2ÚforceÚkrë   s        r)   Ú
appenddeclr|  �  s  € ÙØˆÙØˆØˆu�}ØˆÜ�%—*‘*“,Óò $ˆØ�
Š?Ù˜ šØ ™(��Q’Ø�*Š_Ø˜1‘Xò 3�Ü" 4¨¨EÓ2‘ñ3à�.Ò Ü" 4¨¨q©°5Ó9‰DØ�.Ò Ü" 4¨¨q©°5Ó9‰DØÐ#Ñ#Ù˜ šØ ™(��Q’Ø�&Š[ØØð )ñ )äÐ9¸AÑ=Õ>äÐKÜ ›Fñ#ó $ð $ð)$ð, €Kr(   zD\s*(?P<this>(@\(@.*?@\)@|\*[\d*]+|\*\s*@\(@.*?@\)@|))(?P<after>.*)\Zz[(?:,(?P<attributes>[\w(),]+))?(::)?(?P<name>\b[a-z$_][\w$]*\b)(?:\((?P<params>[\w,]*)\))?\Zzª\s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P<bind>(?:(?!@\)@).)*)\s*@\)@))*\s*\ZzF\s*(?P<scheme>(operator|assignment))@\(@\s*(?P<name>[^)]+)\s*@\)@\s*\Zz9\s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Zz4([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)zA([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))zintent\s*\(.*?\bcallback\bc                 ó`   — | j                  dg «      D ]  }t        j                  |«      sŒ y y)Nrk  r   r   )ÚgetÚ_intentcallbackpatternrÒ   )Úvdeclr)  s     r)   Ú_is_intent_callbackr�  ´  s2   € Ø�Y‰Y�z 2Ó&ò ˆÜ!×'Ñ'¨Õ*Ùðð r(   c                 ód  — dj                  | j                  «       «      } t        j                  | «      }t	        | |«       |re|j                  d«      }|r-|j                  d«      D �cg c]  }|j                  «       ‘Œ c}ng }|j                  d«      ||j                  d«      fS d g d fS c c}w )Nr
   Ú
attributesr$  rq   Úparams)rÛ   r&  ÚtypedefpatternrÒ   ÚprintrÓ   r¡   )r0   r^  Úattrsr)  s       r)   Ú_resolvetypedefpatternrˆ  »  s“   € Ø�7‰7�4—:‘:“<Ó €DÜ	×	Ñ	˜dÓ	#€BÜ	ˆ$�„OÙ	Ø—‘˜Ó&ˆÙ9> E§K¡K°Ó$4Ö5˜q�—‘•Ó5ÀBˆØ�x‰x˜Ó ¨¯©°Ó(:Ð:Ð:Ø��Tˆ>Ðùò 6s   Á)B-c                 óì   — t        j                  dt         j                  «      }|j                  | «      }d }|r8|j	                  d«      }| d |j                  «        | |j                  «       d  z   } | |fS )NzObind\(\s*(?P<lang>[^,]+)(?:\s*,\s*name\s*=\s*["\'](?P<name>[^"\']+)["\']\s*)?\)r   )r¾   r¿   rÀ   ÚsearchrÓ   Ústartrý   )r0   ÚpatternrÒ   Úbind_statements       r)   Úparse_name_for_bindrŽ  Å  sl   € Ü�j‰jÐkÔmo×mqÑmqÓr€GØ�N‰N˜4Ó €EØ€NÙØŸ™ Q›ˆà�N�U—[‘[“]Ð# d¨5¯9©9«;¨<Ð&8Ñ8ˆØ�ÐÐr(   c                 óÖ  — t        | «      \  } }t        | «      } t        j                  | «      }|r3|j	                  d«      |j	                  d«      |j	                  d«      |fS t
        j                  | «      }|r/|j	                  d«      dz   |j	                  d«      z   dz   }|g d d fS t        j                  | «      }|r$|j	                  d«      |j	                  d«      d d fS d g d d fS )Nrq   r3  r©   Úschemer4  r5  )rŽ  rT  ÚnameargspatternrÒ   rÓ   ÚoperatorpatternÚcallnameargspattern)r0   Ú
bind_cnamer^  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                 ó9  — | j                  d«      }|dk7  rdat        rÚ|dvrÖt        sÐt        dk  rÇt
        j                  j                  t        «      j                  d«      d   }t        d|z  «       dat        dz   ad	t        t        <   i t        t        <   g t        t        <   g t        t           d
<   i t        t           d<   d	t        t           d<   |t        t           d<   dt        t           d<   da|dv �rÓ|j                  «       }t!        j"                  d|t         j$                  «      rd}nOt!        j"                  d|t         j$                  «      rd}n't!        j"                  d|t         j$                  «      rd}|dk(  r@t'        | j                  d«      «      \  }}}t)        |¬«      t        t           d   |<   g }d}	nt+        | j                  d«      «      \  }}}	}
|€|dk(  rd}nd}|dvrt        d«       ||t        fa|r@t-        t/        |«      j                  d«      D �cg c]  }|j1                  «       ‘Œ c}«      }ng }d|v r%d|v r|j3                  d«       d|v rŒt        d«       d}d}|d v r\d}d!t        t           vry|t        t           d!   vryt        t           D ]  }|d   |k(  sŒ y |t        t           d"   v ryd#d$d œ|   }t4        r#t6        d%k(  rt        dk  rt        d&z   ad}|d'vrd}t        dz   ai t        t        <   g t        t        <   |rÉt8        dkD  rt        d(t;        t4        «      z  d«       d)t        t        <   dt        t           d<   t4        t        t           d<   dt        t           d<   g t        t           d
<   g t        t           d*<   g t        t           d"<   i t        t           d<   t        dz   ai t        t        <   g t        t        <   |rãt8        dkD  rt        d+t        z  d«       d,t        t        <   d,t        t           d<   d-t        t           d<   t        t        dz
     d   ›d.t        t        dz
     d   ›�t        t           d<   g t        t           d
<   g t        t           d*<   g t        t           d"<   i t        t           d<   t        dz   ai t        t        <   g t        t        <   |t        t        <   |t        t           d<   |sd/|j=                  d0d1«      z   }| j                  d2«      t        t           d3<   t?        |«      t        t           d<   |	t        t           d4<   t        dk(  rt        t        t           d<   nqt4        r4t        d5k(  r+t        t        dz
     d   ›d.t        ›�t        t           d<   n7t        t        dz
     d   ›d.t        t        dz
     d   ›�t        t           d<   tA        t        t           jC                  «       «      D ]!  }t        t           |   rŒt        t           |= Œ# |t        t           d!<   g t        t           d
<   g t        t           d*<   g t        t           d"<   i t        t           d<   i t        t           d6<   |dk(  rg t        t           d7<   |d v r£|t        t        d&z
     d*   vr"t        t        d&z
     d*   jE                  |«       tG        jH                  t        t        d&z
     d   «      t        t           d<   	 t        t           d   |   t        t           d   |   d8   jK                  d9«      = |d:v �rN
r‰t!        jN                  tP        |
«      }|rm|i it        t           d;<   |j                  d<«      t        t           d;   |   d<<   |j                  d=«      r%|j                  d=«      t        t           d;   |   d<   	 tS        t        t           d   |   t        t        d&z
     d   d   «      t        t           d   |<   |d>k(  rX|	rV|	t        t           d   v rD||	k(  s?tS        t        t           d   |   t        t           d   |	   «      t        t           d   |<   	 t        t        d&z
     d"   jE                  |«       |d$k(  rltT        d   j#                  | j                  d2«      d0z   |z   «      }|r=tW        |j                  d«      |j                  d«      «      \  }}}}tY        ||||«       |d v r¿t        t        dz
     jE                  t        t           «       t        t           t        t        dz
     d%   d
<   t        t        = t        dz
  at        t        dz
     jE                  t        t           «       t        t           t        t        dz
     d%   d
<   t        t        = t        dz
  ayy|d6k(  r•t+        | j                  d«      «      \  }}}	}|�s|r@t-        t/        |«      j                  d«      D �cg c]  }|j1                  «       ‘Œ c}«      }ng }|	�J t;        |	«      «       ‚|t        t           d6   |<   d6|t        fayy|dk(  r;tW        || j                  d«      «      \  }}}}tY        ||||«      }|�
d?|t        fayy|d@v �rçt        t           d   }| j                  d«      j1                  «       }|j[                  dA«      }|dk  r£|dBk(  ržt]        |«      j[                  dC«      d&z
  }|d|dz    dAz   ||dz   d z   }|j[                  dA«      }||d dAk(  rTd!t        t           v rEt        dD| j                  d«      ›|d| ›dE�«       |dFj_                  t        t           d!   «      z   }|dk  rd}d}n|d| j1                  «       }||d&z   d }t/        |«      j                  d«      }ta        |«      dkD  r%|d   }t        dGdFj_                  |dd «      z  «       d}t/        |«      j                  d«      D �cg c]  }|j1                  «       ‘Œ c}D �]4  }tb        j#                  |«      }|s<|dHv rd}nOte        | jg                  «       «       t        dI|›dJt;        |«      ›dK�«       ŒWt?        |j                  d«      «      }|dHv r|dLk(  s|dMk(  r||j                  d«      z  }||vri ||<   |dNk(  r||j                  d«      z   }|dBk(  rÔ| j                  d«      |z   }th        j#                  |«      r«|t        t           d!   vr‹t        dkD  rsdOt        t        d&z
     d   vrt        dP«       |t        t           d   k7  r]t        dQ|›dRt        t           d   ›dS�«       t        t           d!   jE                  |«       ntk        dT|z  «       ntk        dU|z  «       |dVv r|}d8||   v r||   d8   jE                  «       n	g||   d8<   |d9k(  rrt        t           d   d	k(  rt        dW«       �Œá|t        t           d!   vr�Œõd*t        t           vrg t        t           d*<   t        t           d*   jE                  |«       |}�Œ7 |t        t           d<   |�
d?|t        fayy|dXk(  rK| j                  d«      j                  dF«      D �cg c]  }|j1                  «       ‘Œ c}t        t           dY<   y|dZk(  �r?t        t           d   }| j                  d«      j1                  «       dd% }d}t/        |«      j                  d«      D �]Ð  }	 |j                  d[«      D �cg c]  }|j1                  «       ‘Œ c}\  }}tm        |«      }t?        |«      }||vri ||<   d[||   v r&||   d[   |k(  st        d_|›d`||   d[   ›da|›db�«       to        ||«      }|rù|jq                  dc«      ddk(  ržtA        |«      } tr        ju                  |«      D ]i  } tA        || jw                  «       | jy                  «        j                  «       j=                  dedf«      «      | | jw                  «       | jy                  «        Œk dj_                  | «      }nG|jq                  dc«      dgk(  r3|dd j                  «       j=                  dedf«      j=                  dFdh«      }	 t{        |i |«      }!t;        |!«      ||   d[<   d8||   v r||   d8   jE                  dZ«       n	dZg||   d8<   |}�ŒÓ |t        t           d<   |�
d?|t        fayy|dkk(  �r…| j                  d«      j1                  «       j                  «       dlk(  rdt        t           dk<   y| j                  d«      �r1dkt        t           v rt        t           dk   }#ni }#|#€t        dm«       i }#t/        | j                  d«      «      j                  d«      D �]Â  }i }$t!        j"                  dn|t         j$                  «      }|st        do|z  «       Œ<t‚        j#                  |j                  d«      «      }%|%st        dp|z  «       ŒqtW        |%j                  d«      |%j                  d«      «      \  }}}}t…        ||«      \  }&}'}(||$dc<   |&|$dq<   |'|$dr<   |(|$ds<   tA        |$jC                  «       «      D ]  }|$|   rŒ	|$|= Œ t/        |j                  d«      «      j                  d«      D ]¬  })dt|)v r2	 |)j                  dt«      D �cg c]  }|j1                  «       ‘Œ c}\  }*}+n|)j1                  «       x}*}+ta        |*«      ta        |+«      cxk(  rdk(  sn t        dv|)z  «       Œyt‡        t‰        |*«      t‰        |+«      dz   «      D ]  },|$|#t‹        |,«      <   Œ Œ® �ŒÅ |#t        t           dk<   yy|dwk(  �rg }d}-d}.d}/d}0d}1| j                  d«      D ]—  }2|1s|2dxk(  r|0 }0|2dyk(  r|0r|/dz   }/Œ|2dzk(  r|1dz   }1n
|2d{k(  r|1dz
  }1|/dk(  r|-|2z   }-Œ:|/dk(  r|.|2z   }.ŒE|/d&k(  sŒK|-j1                  «       }-|-j�                  dF«      r|-dd j1                  «       }-|jE                  |-|.g«       |2}-d}.d}/Œ™ |/d&k(  rG|-j1                  «       }-|-j�                  dF«      r|-dd j1                  «       }-|jE                  |-|.g«       t        t           jq                  di «      }3d}|D �]Ë  }4|4d   j1                  «       |4d   j1                  «       c|4d<   |4d<   |4d   j�                  dF«      r|4d   dd |4d<   |4d   j�                  dz«      rt        d||4d   z  «       Œvt�        t-        t/        |4d   «      j                  d«      D �cg c]  }|j1                  «       ‘Œ c}«      «      D �]  \  }5}!|!j�                  dz«      rt        d||!z  «       Œ'd}|4d   v rt        d~|4d   z  «       Œ@|3j‘                  |!i «       |3|!   jq                  dc«      }6t“        |3|!   «      }7|6dgk(  rt!        j”                  d|4d   «      n|4d   j                  dF«      }8	 |7r d€j—                  d�j_                  |8«      «      n|8|5   }9|3|!   jq                  d[«      }>|>r|>|9k7  rt        d„|!›d`|>›d…|9›d^�«       |9|3|!   d[<   |!}�Œ
 �ŒÎ |3t        t           d<   |r
d?|t        fayy|d†k(  �r| j                  d«      j1                  «       }|d   dyk(  sd‡|z   }g }?t!        j                  dy|d&¬ˆ«      \  }}@}A|@j1                  «       }@|@sd‰}@|?jE                  @Ag«       i }Bd†t        t           v rt        t           d†   }B|?D ]i  }2|2d   Bvrg B|2d   <   t/        |2d   «      j                  d«      D �cg c]  }|j1                  «       ‘Œ c}D ]  }|sŒB|2d      jE                  |«       Œ Œk Bt        t           d†<   d†@t        fay|dŠk(  �r³t!        j"                  d‹| j                  d«      t         j$                  «      }|�rW|jg                  «       }CdŠt        t           vri t        t           dŠ<   |j                  d«      }i t        t           dŠ   |<   d}DdŒCv rýCdŒ   �ød�Cv rCd�   €d}DDt        t           dŠ   |   dŽ<   CdŒ   j                  dF«      D �cg c]  }|j1                  «       ‘Œ }}i }E|D ]   }4d[|4v rt!        j"                  d�|4t         j$                  «      }%|%r@|%j                  dŠ«      j1                  «       E|%j                  d�«      j1                  «       <   nt        d‘t;        |4«      z  «       n|4E|4<   Et        t           dŠ   |   d’<   Œ¢ yyte        | jg                  «       «       t        d“«       y|d”v r«d•t        t           vri t        t           d•<   t        t           d•   }F| j                  d«      d–k(  rDd–Fv r@t£        Fd–   t¤        «      r	Fd–   g|Fd–<   Fd–   jE                  | j                  d«      «       y| j                  d«      F| j                  d«      <   y|dk(  rIt        €t8        rt        d—«       yt        }Gt§        t        |G   t        dd& | j                  d«      «       yt8        dkD  r%te        | jg                  «       «       t        d˜«       yyc c}w # tL        $ r Y �Œšw xY w# tL        $ r Y �Œ×w xY w# tL        $ r Y �Œgw xY wc c}w c c}w c c}w c c}w # tL        $ r t        d\|›d]|›d^�«       Y �Œþw xY w# t|        t~        t€        f$ r}"tk        di|›dj|"›dE�«       Y d}"~"�Œ.d}"~"ww xY wc c}w # tL        $ r t        du|)z  «       Y �Œ�w xY wc c}w # t˜        $ rÛ t›        d‚„ |8D «       «      ržg }:|8D ]•  };dƒ|;v rp	 |;j                  dƒ«      \  }<}=|:j�                  |=j1                  «       gtŸ        |<«      z  «       ŒI# t         $ r" |:jE                  |;j1                  «       «       Y Œsw xY w|:jE                  |;j1                  «       «       Œ— |:}8|7r d€j—                  d�j_                  |8«      «      n|8|5   }9Y �Œw xY wc c}w c c}w )™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.
    r6  r  N)rû   r  r  rh   r   ú.r   zBanalyzeline: no group yet. Creating program group with name "%s".
Úprogramr-  r.  r/  rq   ÚfromskyÚfrom)rû   r  r  zblock\s*dataú
block datazpython\s*moduleúpython modulezabstract\s*interfaceúabstract interfacerh   r  )rk  Ú_BLOCK_DATA_r
   )Ú	interfacer›  r�  z2analyzeline: No name/args pattern found for line.
r#  z<analyzeline: argument list is malformed (missing argument).
)r  r  r3  r2  rü   rú   r   r0  ©rŸ  r�  z&analyzeline: Creating module block %s
Úmoduler1  zDanalyzeline: Creating additional interface block (groupcounter=%s).
rŸ  Úunknown_interfaceú:Úunknown_r­   rð   r  Úprefixr©   é   r  Úvarnamesrk  r  ©rú   rü   ÚbindlangÚlangÚ	lang_namer  Úvariable)r  r
  r  r  r  r  r  r  ú::r
  rb  z"All arguments will have attribute r¹   r$  zXanalyzeline: cannot handle multiple attributes without type specification. Ignoring %r.
©r  r  z&analyzeline: no name pattern found in z statement for z. Skipping.
ÚoperatorÚ
assignmentr  Ú__user__z8analyzeline: missing __user__ module (could be nothing)
z(analyzeline: appending intent(callback) ú to z arguments
z,analyzeline: intent(callback) %s is ignored
z=analyzeline: intent(callback) %s is already in argument list
)r  r  r  r  r  r  z(analyzeline: ignoring program arguments
rÿ   Úimplementedbyr  rn  zAanalyzeline: could not extract name,expr in parameter statement "ú" of "ú"
z1analyzeline: Overwriting the value of parameter "ú" ("z	") with "rm   r4   r5   r!  ÚeÚcomplexz+1j*(z analyzeline: Failed to evaluate z. Ignoring: r   Únonez<analyzeline: Overwriting earlier "implicit none" statement.
z9\s*(?P<this>.*?)\s*(\(\s*(?P<after>[a-z-, ]+)\s*\)\s*|)\ZzDanalyzeline: could not extract info of implicit statement part "%s"
zManalyzeline: could not extract types pattern of implicit statement part "%s"
rl  rm  ro  ú-zZanalyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement
z^analyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement (2)
r  ú'ú/r4  r5  z>analyzeline: implied-DO list "%s" is not supported. Skipping.
r›   z=Comment line in declaration "%s" is not supported. Skipping.
z\(.*?\)z(/{}/)ú, c              3   ó$   K  — | ]  }d |v –— Œ
 y­w)r   Nr'   )Ú.0ró   s     r)   ú	<genexpr>zanalyzeline.<locals>.<genexpr>»  s   è ø€ Ò5¨˜3 !œ8Ñ5ù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*\Zrs  ÚnotonlyÚonlyz7\A\s*(?P<local>\b\w+\b)\s*=\s*>\s*(?P<use>\b\w+\b)\s*\ZÚlocalz0analyzeline: Not local=>use pattern found in %s
Úmapz0analyzeline: Could not crack the use statement.
)r  r  Úusercodez-analyzeline: No context for multiline block.
z+analyzeline: No code implemented for line.
)TrÓ   r&   r   r   r   r†   r‡   Úbasenamer!   r&  r2   r   r:  r;  r   r¡   r¾   rÒ   rÀ   rˆ  Údictr•  rw   r%  r¦   Úremover   r   r   rÎ   rÐ   rr   rs  rt  r'  ÚcopyÚdeepcopyr[   rÆ   rŠ  Úcrackline_bindlangr|  rL  Úcracktypespec0Ú
updatevarsÚfindrT  rÛ   rX   Únamepatternr†  r  r  ro   Úget_parametersÚdetermineexprtyper~  Úreal16patternÚfinditerr‹  rý   ÚevalÚSyntaxErrorÚ	NameErrorÚ	TypeErrorÚtypespattern4implicitÚcracktypespecrÁ   ÚordÚchrr‹   Ú	enumerateÚ
setdefaultÚgetdimensionÚfindallr  Ú
IndexErrorÚanyÚextendr8   rÖ   Ú
isinstancerÂ   Úappendmultiline)Hró   r?   r0   r/  Únewnamerq   r‡  rð   r3  r©   Ú	bindclineÚxÚ
needmoduleÚneedinterfaceÚitr{  ÚbindcdatÚtr4   ÚselectorÚattrÚedeclÚ	last_namerã   ÚiÚplÚchr·  r^  ÚapÚinitexprr„  ÚttÚvrì   Úimplrx  r_  Ú
kindselectÚ
charselectro  r™   ÚbegcÚendcÚoÚdlÚilrc  ÚfcÚinpr³   r.  rë   ÚidxÚvtypeÚvdimÚmatchesÚnew_valÚexpanded_listrÒ   Ú
multiplierÚvalueÚcurrent_valÚclÚbnÚolÚ	commonkeyÚmmÚisonlyrï   r!  ÚgcsH                                                                           r)   rV  rV  ß  sT  € ð �G‰G�F‹O€EØˆ{ÒØÐÝ�tÐ#GÑGÝ¤°Ò!1Ü—'‘'×"Ñ"¤?Ó3×9Ñ9¸#Ó>¸qÑAˆÜØQÐT[Ñ[ô	]àˆÜ# aÑ'ˆØ"+Œ	”,ÑØ#%Œ
”<Ñ Ø"$Œ	”,ÑØ+-Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø,5Œ
”<Ñ  Ñ)Ø+2Œ
”<Ñ  Ñ(Ø+4Œ
”<Ñ  Ñ(ØˆØÐ+Ò+à—‘“ˆÜ�8‰8�O U¬B¯D©DÔ1Ø ‰EÜ�X‰XÐ(¨%´·±Ô6Ø#‰EÜ�X‰XÐ-¨u´b·d±dÔ;Ø(ˆEØ�FŠ?Ü3°A·G±G¸GÓ4DÓE‰NˆD�%˜Ü59ÀUÔ5KŒJ”|Ñ$ VÑ,¨TÑ2ØˆDØ‰Fä,CÀAÇGÁGÈGÓDTÓ,UÑ)ˆD�$˜ 	Øˆ<Ø˜Ò$Ø%‘à�ØÐMÑMÜÐMÔNà! 4¬Ð6ÐÙÜÜ'5°dÓ';×'AÑ'AÀ%Ó'HöJØ"#ð  Ÿg™g�iò 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Ò,å¤°Ò!2äœ|¨aÑ/Ñ0°Ó8½/ð4K”
œ<Ñ(¨Ò0ô œ|¨aÑ/Ñ0°Ó8¼*Ä\ÐTUÑEUÑ:VÐW]Ò:^ð4`”
œ<Ñ(¨Ñ0ä”j¤Ñ.×3Ñ3Ó5Ó6ò 	0ˆAÜœlÑ+¨AÓ.Üœ|Ñ,¨QÑ/ð	0ð ,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�ÙØ<@À2¸;”Jœ|Ñ,¨ZÑ8ØIQÏÉÐX^ÓI_”Jœ|Ñ,¨ZÑ8¸Ñ>¸vÑFØ—~‘~ kÔ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Ø 6š>Ü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ð 'ð 
�ŠÜ6°q·w±w¸wÓ7GÓHÑˆˆd�F˜AØÐÙÜ Ü+9¸$Ó+?×+EÑ+EÀeÓ+Lö"NØ&'ð #$§'¡'¥)ò "Nó O‘ð �Ø�>Ð/¤4¨£<Ó/�>Ø6:ŒJ”|Ñ$ WÑ-¨dÑ3Ø '¨¬|Ð<Ñð ð 
�ŠÜ*8Ø�1—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 �!—'‘'•)ÒEó 5	ˆAÜ×"Ñ" 1Ó%ˆBÙØÐ0Ñ0Ø‘Aä˜!Ÿ+™+›-Ô(ÝÚœd 1�gð'ô (àä˜rŸx™x¨Ó/Ó0�ØÐ,Ñ,Ø�Z’ 1¨Ò#4Ø�R—X‘X˜gÓ&Ñ&�Ø˜‰~Ø��a‘Ø�{Ò"Ø˜BŸH™H WÓ-Ñ-�Ø�xÒØ—W‘W˜V“_ rÑ)�Ü)×/Ñ/°Ô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ä#Ø OÐSTÑ UõWô  ð !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ðk5	ðl ,1Œ
”<Ñ  Ñ(ØÐ Ø *¨I´|ÐDÑð !à	Ð"Ò	"à !§¡¨Ó 0× 6Ñ 6°sÓ ;Ö<˜1ˆQ�W‰W�YÒ<ô 	”<Ñ  Ò1à	�Ó	Üœ<Ñ(¨Ñ0ˆØ�W‰W�WÓ×#Ñ#Ó% a¨Ð+ˆØˆ	Ü Ó#×)Ñ)¨%Ó0ó $	ˆAðØ23·'±'¸#³,Ö?¨Q˜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Ó=ò S˜Ü04Ø$ Q§W¡W£Y¨q¯u©u«wÐ7×=Ñ=Ó?×GÑGÈÈSÓQó1S˜˜1Ÿ7™7›9 Q§U¡U£WÑ-ðSð  "Ÿ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$	ðJ ,1Œ
”<Ñ  Ñ(ØÐ Ø *¨I´|ÐDÑð !à	�Ó	Ø�7‰7�7Ó×!Ñ!Ó#×)Ñ)Ó+¨vÒ5Ø37ŒJ”|Ñ$ ZÒ0Ø�W‰W�WÕØœZ¬Ñ5Ñ5Ü!¤,Ñ/°
Ñ;‘à�Øˆ|ÜØSôUà�Ü# A§G¡G¨GÓ$4Ó5×;Ñ;¸EÓBó ',�Ø�Ü—X‘XØPÐRSÔUW×UYÑUYó[�áÜØ_ÐcdÑeôgàÜ*×0Ñ0°·±¸&Ó1AÓB�ÙÜØhÐlmÑnôpàÜ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Ø  ™Gð$ô (¨¯©°Ó(9Ó:×@Ñ@ÀÓGò ,�AØ˜a‘xð%Ø=>¿W¹WÀS»\Ö)J¸¨!¯'©'­)Ò)J™J˜D¡$ð '(§g¡g£iÐ/˜˜tÜ˜t›9¬¨D«	Ô6°QÔ6ÜØ}ð  ABñ  BôCà Ü"¤3 t£9¬c°$«i¸!©mÓ<ò ,˜Ø'+˜œS ›Všñ,ò,ð1',ðP 48ŒJ”|Ñ$ ZÒ0ðc ðd 
�‹ØˆØˆØˆØˆØˆØˆØ—‘˜Ó!ò 	ˆ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ˆØˆ	Øó 2	ˆAØ˜1™Ÿ™› q¨¡t§z¡z£|ˆJˆAˆa‰D�!�A‘$Ø�‰t�‰˜sÔ#Ø˜‘t˜A˜B�x��!‘Ø�‰t�‰˜sÔ#ÜÐYÐ\]Ð^_Ñ\`Ñ`ÔaØÜ#¤IÄ.ÐQRÐSTÑQUÓBV×B\ÑB\Ð]bÓBcÖ.d¸Q¨q¯w©w­yÒ.dÓ$eÓfó +‘��QØ—<‘< Ô$ÜÐ]Ð`aÑaÔbð Ø˜!˜A™$‘;ô Ð\Ð_`ÐabÑ_cÑcÔdØØ—‘  2Ô&Ø˜Q™Ÿ™ JÓ/�Ü# D¨¡GÓ,�Ø:?À9Ò:Lœ"Ÿ*™* Z°°1±Ô6ÐRSÐTUÑRV×R\ÑR\Ð]`ÓRa�ð\ÙEI˜hŸo™o¨d¯i©i¸Ó.@ÔAÈwÐWZÉ|�Gð& # 1™gŸk™k¨#Ó.�Ù K°7Ò$:ÝÒ`aÒcnÒpwÐxÔyØ&��Q‘˜‘Ø’	òW+ð2	ðf ,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 A�a—g‘g•iÒKò .�ÚØ˜a ™d‘O×*Ñ*¨1Õ-ñ.ð	.ð .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�a—g‘g•iÐ?�Ð?Ø�Øò F�AØ˜a‘xÜŸX™XØVÐXYÔ[]×[_Ñ[_óa˜áØ<>¿H¹HØ %ó='ß',¡u£wð ˜rŸx™x¨Ó0×6Ñ6Ó8Ò9ô $Ø SÔVZÐ[\ÓV]Ñ ]õ_ð !"˜˜1™ØCE”Jœ|Ñ,¨UÑ3°DÑ9¸%Ò@ñFð ä�!—+‘+“-Ô ÜÐ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ÒØ	�Ò	ÜÐ#ÝÜÐHÔIØÜˆÜœ
 2™Ü(¨¨!Ð,ØŸ™ ›õ	)ô �QŠ;Ü�!—+‘+“-Ô ÜÐBÕCð ùòCJøôP ò Úðûô ò Úðûô ò Úðüò."NùòL Fùòv =ùò @øÜò ÝÚhiÒkmÐnôpâðûô0  ¤¬IÐ6ò ÝÚ#¢Sð*ô +åûðüòh *KøÜ(ò %Ü#Ø }ð  ABñ  !BôCâ$ð%üòr /eøô* "ò \ô
 Ñ5¨WÔ5Ô5Ø(*˜Ø%,ò D˜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ðDð #0˜ÙEI˜hŸo™o¨d¯i©i¸Ó.@ÔAÈwÐWZÉ|“Gð#\üòV Lùò& @sA  È0AkÜ7Ak ßAAk' á:"Ak7 èAlð(Alú>Alý AlýAlý*AlÁCAl=ÁK;Am6ÁLAm1ÁL%Am6ÁV AnÁY	'AnÁ^Ar Áb?ArÁk	Ak$Ák#Ak$Ák'	Ak4Ák3Ak4Ák7	AlÁlAlÁlAlÁlAl:Ál9Al:Ál=Am.ÁmAm)Ám)Am.Ám1Am6Ám6AnÁnAnÁn&Aq=Áo A ApÁp Aq=Áp(Ap,Áp)Aq=Áp+Ap,Áp,AAq=Áq<Aq=c                 óZ   — d| vri | d<   | d   }||vrg ||<   ||   j                  |«       y )NÚf2pymultilines©r'  )rÓ   Úcontext_nameÚmlr!  s       r)   rç  rç  !  sF   € Ø˜uÑ$Ø"$ˆÐÑØÐÑ€AØ˜1ÑØˆˆ,‰Ø€l�O×Ñ˜2ÔØ
r(   c                 óF  — d }d }t        j                  d| t         j                  «      rd} nFt        j                  d| t         j                  «      rd} n| j                  «       j	                  «       } t
        j                  t        |«      «      }|st        d«       y |j                  «       }t        |j                  «       «      D ]  }t        ||   «      ||<   Œ | dv r
|d   }|d   }|j                  d	«      }|d
k\  r|d | j                  «       }||dz   d  }| |||fS )Nzdouble\s*complexúdouble complexzdouble\s*precisionzdouble precisionz>cracktypespec0: no kind/char_selector pattern found for line.
)r¸  r7   Úlogicalr5   Ú	characterrh   r6  r  r­  r   r0  )r¾   rÒ   rÀ   r¦   r¡   ÚselectpatternrT  r2   r  rs  rt  ri  rÑ  )r4   rã   rð  rñ  r^  r!  r{  rô  s           r)   rÏ  rÏ  +  s  € Ø€HØ€DÜ	‡x�xÐ# X¬r¯t©tÔ4Ø#‰Ü	�‰Ð'¨´2·4±4Ô	8Ø%‰à—>‘>Ó#×)Ñ)Ó+ˆÜ	×	Ñ	œ^¨BÓ/Ó	0€BÙÜØMô	OàØ
�‰‹€AÜ�!—&‘&“(‹^ò &ˆÜ  !¡Ó%ˆˆ!Šð&àÐQÑQØ�V‘9ˆØˆw‰ZˆØ
�‰�‹€AØˆA‚vØ�"�1ˆv�|‰|‹~ˆØ��A‘�ˆZˆØ�X˜t RÐ'Ð'r(   z)\s*(?P<name>\b\w+\b)\s*(?P<after>.*)\s*\ZzB\s*(\(\s*(kind\s*=)?\s*(?P<kind>.*)\s*\)|\*\s*(?P<kind2>.*?))\s*\Zz2\s*(\((?P<lenkind>.*)\)|\*\s*(?P<charlen>.*))\s*\Zz§\s*(kind\s*=\s*(?P<kind>.*?)\s*(@,@\s*len\s*=\s*(?P<len>.*)|)|(len\s*=\s*|)(?P<len2>.*?)\s*(@,@\s*(kind\s*=\s*|)(?P<kind2>.*)|(f2py_len\s*=\s*(?P<f2py_len>.*))|))\s*\Zz¿\s*(@\(@\s*(?!/)\s*(?P<array>.*?)\s*@\)@\s*\*\s*(?P<len>.*?)|(\*\s*(?P<len2>.*?)|)\s*(@\(@\s*(?!/)\s*(?P<array2>.*?)\s*@\)@|))\s*(=\s*(?P<init>.*?)|(@\(@|)/\s*(?P<init2>.*?)\s*/(@\)@|)|)\s*\Zc                 óä   — | j                  «       } t        | «      dk  r| S | d   }t        dt        | «      dz
  «      D ]'  }| |   dk(  r| |dz      dv s
| |dz
     dv rŒ || |   z   }Œ) || d   z   }|S )Nr   r   r­   z()[]{}=+-/* r   )r¦   rX   rÁ   )ÚexprÚexpr2rô  s      r)   Úremovespacesr"  R  s”   € Ø�:‰:‹<€DÜ
ˆ4ƒy�A‚~ØˆØ�‰G€EÜ�1”c˜$“i !‘mÓ$ò  ˆØ�‰G�sŠNØ�1�q‘5‰k˜^Ñ+Ø�a˜!‘e‘ Ñ.ØØ˜˜Q™‘‰ð ð �D˜‘HÑ€EØ€Lr(   c                 ó�   — d}d}d}d}| D ]8  }|dk(  r|dv r||z  }|}Œ|s|dv r|}||k(  r| }n|dk(  r|r|dz  }Œ2||z  }|}Œ: |S )	a(  
    The function replace all spaces in the input variable line which are 
    surrounded with quotation marks, with the triplet "@_@".

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

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

    Returns
    -------
    str

    r
   FNú\)r$  r»  ú")r»  r%  r­   ú@_@r'   )r0   ÚfragmentÚinsideÚcurrent_quoteÚescapedr³   s         r)   Úmarkinnerspacesr+  a  s�   € ð  €HØ€FØ€MØ€GØò ˆØ�dŠ?˜qÐ$5Ñ5Ø˜‰MˆHØˆGØÙ˜!˜{Ñ*ØˆMØ�ÒØ�Z‰FØ�#ŠX™&Ø˜ÑˆHØØ�A‰ˆØ‰ðð €Or(   c                 ó|  — d}t        | |«      \  }}}|r¬t        |«      j                  d«      D �cg c]  }|j                  «       ‘Œ }}g }	t	        j
                  d«      }
|D ]Y  }|sŒ|
j                  |«      }|r0|j                  d«      j                  «       }||t        |«      d z   }|	j                  |«       Œ[ |	}t        |«      j                  d«      D �cg c]  }|j                  «       ‘Œ }}g }|D ]u  }t        t        t        |«      «      d¬«      j                  d«      D �cg c]  }|j                  «       ‘Œ c}D ]&  }|sŒ|j                  |j                  dd«      «       Œ( Œw |D �]µ  }t        j                  |«      }|st        d	t!        |«      z  «       Œ3t#        |j                  d
«      «      }i }|t$        t&           d   v �ræt$        t&           d   |   j)                  «       }d|v}|r| |d<   n"| r | |d   k(  st        d|›d|d   ›d| ›d�«       d|vrt)        j(                  |«      |d<   nu|rst+        |j-                  «       «      D ]W  }||d   v r0||   |d   |   k(  s"t        d|›d|›d|d   |   ›d||   ›d�	«       Œ:t)        j(                  ||   «      |d   |<   ŒY d|vr|r|r||d<   nˆt/        d|›d|›d�«       nu|rst+        |j-                  «       «      D ]W  }||d   v r0||   |d   |   k(  s"t        d|›d|›d|d   |   ›d||   ›d�	«       Œ:t)        j(                  ||   «      |d   |<   ŒY d|vr||d<   n"|r |d   |k(  st        d|›d|d   ›d|›d�«       d|vrt)        j(                  |«      |d<   n‹|r‰|D ]  }||d   vsŒ|d   j                  |«       Œ  net)        j(                  | «      |d<   t)        j(                  |«      |d<   t)        j(                  |«      |d<   ||d<   t)        j(                  |«      |d<   d|j1                  d«      xs g v rP|t$        t&           d   v r>dt$        t&           vrg t$        t&           d<   t$        t&           d   j                  |«       |j                  d«      �r&t2        j                  t5        |j                  d«      «      «      }|�rÖ|j7                  «       }d D ]  }||d!z      €Œ||d!z      ||<   ||d!z   = Œ t+        |j-                  «       «      D ]  }||   �t9        ||   «      ||<   Œ||= Œ d"|v ryd#|v ru|d"   d$k(  r|d#   |d"<   |d#= na| d%k(  r*d|vs|d   si |d<   d"|d   v r|d   d"= |d"   |d   d&<   |d"= n2|d#   d'z   |d"   z   |d#<   |d"= t/        d(| ›d|›d)| ›d|›d*|d#   ›d+�«       d"|v rO| d,v rd|vs|d   si |d<   |d"   |d   d&<   |d"= n.| d%k(  r)d|vs|d   si |d<   d"|d   v r|d   d"= |d"   |d   d&<   |d"= d-|v r3d.|v r'|d.   |d-   k(  st        d/|›d|d.   ›d|d-   ›d�«       n|d-   |d.<   d#|v r‚d0|d#   z  }d|vs|d   s|g|d<   nj|d   j                  |«       |d   D ]-  }|dd1 d2k(  sŒ||k7  sŒ|d   d3= t/        d|›d4|›d5|›d�«        n" n t        d6||j                  d«      z   z  «       t+        |j-                  «       «      D ]  }||   rŒ	||= Œ |t$        t&           d   |<   d7t$        t&           v rt$        t&           d7   j                  |«       |}�Œ¸ |S c c}w c c}w c c}w )8zÛ
    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­   ©rg  z@ @r&  z;updatevars: no name pattern found for entity=%s. Skipping.
rq   r.  r4   z+updatevars: attempt to change the type of "r¶  rÁ  z". Ignoring.
rl  z0updatevars: attempt to change the kindselector "r´  rm  zupdatevars:z*: attempt to change empty charselector to r¼   z0updatevars: attempt to change the charselector "ro  z/updatevars: attempt to change the typename of "rk  r  r3  r1  r  )rX   ÚarrayÚinitÚ2rX   r.  r
   r  r   r$  zupdatevars: "z" is mapped to "r4  z)"
©r¸  r7   r  r5   r/  rn  z6updatevars: attempt to change the init expression of "údimension(%s)é	   r  r   z: attempt to change r²  z?updatevars: could not crack entity declaration "%s". Ignoring.
r§  )rÜ  r%  r&  r¦   r¾   r¿   rÒ   rÓ   r¡   rX   r'  r"  r+  rÐ   rÒ  r2   rÎ   rr   r;  r   rÌ  rs  rt  ro   r~  ÚlenarraypatternrT  r  ri  )r4   rð  rk  Ú
entitydeclró  rü  rý  ro  rê  rë   r³   r)  ró   ÚsÚelÚel1r·  Úe1Úenamerò  Únot_has_typespecr{  r^  Úd1ÚlkÚdmÚdm1s                              r)   rÐ  rÐ  †  s8  € ð €IÜ'4°X¸xÓ'HÑ$€J�
˜HáÜ'5°hÓ'?×'EÑ'EÀeÓ'LÖM !�A—G‘G•IÐMˆÐMØˆÜ�J‰JÐ.Ó/ˆØò 	ˆAÙØØ—‘˜“
ˆAÙØ—G‘G˜GÓ$×*Ñ*Ó,�Ø˜œ#˜a›&˜'˜
‘N�Ø�H‰H�Q�Kð	ð ˆÜ+¨JÓ7×=Ñ=¸eÓDÖ	E˜ˆ!�'‰'�)Ð	E€BÐ	EØ
€CØò 3ˆÜ&4´\Ä/ÐRSÓBTÓ5UÐ]`Ô&a×&gÑ&gÐhmÓ&nÖo �1—7‘7•9Òoò 	3ˆBÚØ—
‘
˜2Ÿ:™: e¨SÓ1Õ2ñ	3ð3ð ó EˆÜ×Ñ˜aÓ ˆÙÜØNÔRVÐWXÓRYÑZô\àÜ˜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ò L�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ðLð  UÑ*©zÙ#Ø,6�E˜.Ò)åÚ$¢jð2õ 3áÜ˜jŸo™oÓ/Ó0ò L�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ðLð  Ñ&Ø$,��jÒ!Ù 5¨Ñ#4¸Ò#@ÝÚ˜5 Ó,ªhð8ô 9à Ñ&Ü$(§I¡I¨hÓ$7��jÒ!ÙØ!ò 4�AØ  jÑ 1Ò1Ø˜jÑ)×0Ñ0°Õ3ñ4ô !%§	¡	¨(Ó 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ð)ô ˜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‘=Ø(¨2¨g©;Ñ6�BØ!¨Ñ.°u¸ZÒ7HØ-/¨D˜˜jÒ)à˜jÑ)×0Ñ0°Ô4Ø#(¨Ñ#4ò &˜CØ" 2 A˜w¨+Ó5¸#À»)Ø$)¨*Ñ$5°bÐ$9Ý 'Ú+0²#²rð);ô !<á %ñ&ô ÐZØ˜AŸG™G GÓ,Ñ,ñ.ô /ä�e—j‘j“lÓ#ò 	ˆAØ˜“8Ø˜!‘Hð	ð 38Œ
”<Ñ  Ñ(¨Ñ/Øœ¤LÑ1Ñ1Ü”|Ñ$ ZÑ0×7Ñ7¸Ô>ØŠ	ðKEðL Ðùòq Nùò 
Fùò ps   ±\/Ã\4Ä-\9c                 ót  — d }d }d }|�r+| dv r¢t         j                  |«      }|st        dt        |«      z  «       y |j	                  «       }|d   |d<   |d= t        |j                  «       «      D ]  }||   rŒ	||= Œ t        |j                  «       «      D ]  \  }}t        |«      ||<   Œ �n…| dk(  �rt        j                  |«      }|st        dt        |«      z  «       y |j	                  «       }|d   |d<   |d= |d   rft        j                  t        |d   «      «      }|j	                  «       }d	D ]#  }||d
z      r||d
z      ||<   ||   ||<   ||d
z   = Œ% |d   �|d   |d<   |d= t        |j                  «       «      D ]  }||   rŒ	||= Œ t        |j                  «       «      D ]  \  }}t        |«      ||<   Œ np| dk(  rTt        j                  d|t        j                  «      }|r|j                  d«      }n2t        dt        | |z   «      z  «       nt        dt        |«      z  «       |||fS )Nr1  z4cracktypespec: no kindselector pattern found for %s
Úkind2r   r  z4cracktypespec: no charselector pattern found for %s
ÚcharlenÚlenkind)rX   Úkindr0  Úf2py_lenrh   z\s*\(\s*(?P<name>\w+)\s*\)rq   z'cracktypespec: no typename found in %s
z'cracktypespec: no selector used for %s
)rl  rÒ   r2   rÎ   r  rs  rt  Úitemsrr   rm  Úlenkindpatternr%  r¾   rÀ   rÓ   )	r4   rð  rü  rý  ro  r{  rô  rC  r=  s	            r)   rÜ  rÜ  /  s‡  € Ø€JØ€JØ€HÚØÐ@Ñ@Ü%×+Ñ+¨HÓ5ˆJÙÜØKÌtÐT\Ë~Ñ^ô`àØ#×-Ñ-Ó/ˆJØ(¨Ñ1ˆJ�s‰OØ˜7Ð#Ü˜*Ÿ/™/Ó+Ó,ò &�Ø! !“}Ø" 1™ð&ô ˜Z×-Ñ-Ó/Ó0ò .‘��1Ü *¨1£�
˜1’ò.à˜Ó$Ü%×+Ñ+¨HÓ5ˆJÙÜØKÌtÐT\Ë~Ñ^ô`àØ#×-Ñ-Ó/ˆJØ(¨Ñ3ˆJ�s‰OØ˜9Ð%Ø˜)Ò$Ü(×.Ñ.Ü" :¨iÑ#8Ó9ó;�à!×+Ñ+Ó-�Ø)ò *�BØ˜r C™xÒ(Ø&-¨b°3©hÑ&7˜ ™Ø%,¨R¡[�J˜r‘NØ  S¡Ñ)ð	*ð
 ˜:Ñ&Ð2à-4°ZÑ-@�J˜zÑ*Ø˜9Ð%Ü˜*Ÿ/™/Ó+Ó,ò &�Ø! !“}Ø" 1™ð&ô ˜Z×-Ñ-Ó/Ó0ò .‘��1Ü *¨1£�
˜1’ñ.à˜ÒÜ—x‘xÐ =¸xÌÏÉÓNˆHÙØ#Ÿ>™>¨&Ó1‘äÐBÜ˜h¨Ñ1Ó2ñ4õ 5ô Ð>Ü˜(“^ñ%ô &à�z 8Ð+Ð+r(   c                 ó¤  — | si } |s| S d| vr|g| d<   | S |r| d   j                  |«       || d   v r| S |dk(  rd| d   vr| d   j                  |«       | S |dk(  rd| d   vr| d   j                  |«       | S |dk(  rd| d   vr| d   j                  |«       | S |dk(  rd| d   vr| d   j                  |«       | S | d   j                  |«       | S )Nrk  rJ   Ú	automaticr  r  r  )rx  rñ  rz  s      r)   ru  ru  k  s-  € ÙØˆÙØˆØ˜ÑØ ˜6ˆˆZÑØˆÙØˆZÑ×Ñ Ô%Øˆt�JÑÑØˆØˆxÒ˜K¨t°JÑ/?Ñ?ØˆZÑ×Ñ Ô%ð €Kð 
�Ò	 °°jÑ1AÑ!AØˆZÑ×Ñ Ô%ð €Kð 
�Ò	Ø˜D Ñ,Ñ,Ø�Ñ×#Ñ# DÔ)ð €Kð 
�Ò	Ø˜4 
Ñ+Ñ+Ø�Ñ×#Ñ# DÔ)ð €Kð 	ˆZÑ×Ñ Ô%Ø€Kr(   c                 ó’   — | si } |s| S d| vr|| d<   | S t        |j                  «       «      D ]  }|s|| d   vsŒ||   | d   |<   Œ | S )Nrl  ©rs  rt  ©rx  Úselrz  r{  s       r)   rv  rv  †  sl   € ÙØˆÙØˆØ˜TÑ!Ø"ˆˆ^ÑØˆÜ�#—(‘(“*Óò -ˆÙ�A˜T .Ñ1Ò1Ø&)¨!¡fˆD�Ñ  Ò#ð-ð €Kr(   c                 ó’   — | si } |s| S d| vr|| d<   | S t        |j                  «       «      D ]  }|s|| d   vsŒ||   | d   |<   Œ | S )Nrm  rK  rL  s       r)   rw  rw  ”  sl   € ÙØˆÙØˆØ˜TÑ!Ø"ˆˆ^ÑØˆä�#—(‘(“*Óò -ˆÙ�A˜T .Ñ1Ò1Ø&)¨!¡fˆD�Ñ  Ò#ð-ð €Kr(   c                 ó   — d| v r| d   S |S )Nrq   r'   )r/  Úunknowns     r)   ÚgetblocknamerQ  £  s   € Ø��Ø�V‰}ÐØ€Nr(   c                 ó@   — d| d   ›d| d   ›d�a y # t        $ r Y y w xY w)NzIn: rš  r£  rq   r¹   )r    rÆ   )r/  s    r)   ÚsetmesstextrS  «  s,   € ðØ,1°&«M¸5À»=ÐIÑøÜò Ùðús   � ‘	œc                 ó^   — i }d| v rt        | d   «      }d| v r|j                  | d   «       |S )NÚparent_blockr  )Úget_usedictÚupdate)r/  Úusedicts     r)   rV  rV  ´  s:   € Ø€GØ˜ÑÜ˜e NÑ3Ó4ˆØ��~Ø�‰�u˜U‘|Ô$Ø€Nr(   c           
      óÌ  — |€i }t        | «      }|s|S t        |j                  «       «      D ]´  \  }}|j                  «       }|t        vr"t        d|›d| j                  d«      ›d�«       Œ@t        |   }t        |«      }|sŒW|rt        d|z  «       t        |j                  «       «      D ]2  \  }}||v r$t        dt        |«      ›dt        |«      ›d�«       |||<   Œ4 Œ¶ |S )Nzget_useparameters: no module z info used by rq   r¹   z,get_useparameters: mapping for %s not impl.
z(get_useparameters: overriding parameter z with value from module )
rV  rs  rF  r¡   r   r2   r~  rÓ  ro   rÎ   )	r/  Ú	param_maprX  ÚusenameÚmappingÚmvarsr„  r{  rú  s	            r)   Úget_useparametersr^  ½  sï   € ð ÐØˆ	Ü˜%Ó €GÙØÐÜ  §¡£Ó1ò Ñˆ�Ø—-‘-“/ˆØœ-Ñ'ÝÚ˜eŸi™i¨Õ/ð1ô 2àÜ˜gÑ&ˆÜ Ó&ˆÙØáÜÐCÀwÑOÔPÜ˜Ÿ™›Ó(ò 	‰DˆAˆqØ�I‰~ÝÜ59¸!µW¼dÀ7½mðMô NàˆI�aŠLñ		ðð& Ðr(   c                 óÎ  — t         s| S t        | t        «      r | D �cg c]  }t        ||dz   |¬«      ‘Œ }}|S t	        | «       t        |›d| d   ›d�d«       |€t        | «      }|�Md| v rI| d   }t        |j                  «       «      D ](  }||   }d|v sŒ|d   }d	|v sŒ|d	   }	|	|v sŒ!||	   |d	<   Œ* | d
   D �
cg c]  }
t        |
|dz   |¬«      ‘Œ }}
|| d
<   | S c c}w c c}
w )Nrœ   )ÚtabrZ  úBlock: rq   r¹   r   r.  rl  rD  r-  )r   ræ  rs  Ú
postcrack2rS  r2   r^  rt  )r/  r`  rZ  ÚgÚretr.  rª   ÚvarrD  ÚvalÚbÚnew_bodys               r)   rb  rb  Û  s'  € õ ØˆÜ�%œÔàöØô ˜!  t¡°yÖAð ˆð àˆ
Ü�ÔÜšs E¨&£MÐ2°AÔ6àÐÜ% eÓ,ˆ	àÐ ¨5¡Ø�V‰}ˆÜ�d—i‘i“kÓ"ò 	6ˆAØ�q‘'ˆCØ Ò$Ø˜>Ñ*�Ø˜T’>Ø˜v™,�CØ˜iÒ'Ø'0°¡~˜˜Všð	6ð ˜v™ö(Øô ˜1 #¨¡*¸	ÖBð (€Hð (à€Eˆ&�Mà€Lùò/ùò&(s   �CÂ<C"c                 ó   — t        | t        «      rYg }g }| D ]K  }t        |«       t        ||dz   ¬«      }d|v rd|d   v r|j	                  |«       Œ;|j	                  |«       ŒM ||z   S t        | «       t        | t
        «      sd| vrt        dt        | «      z   «      ‚d| v r| d   dk(  st        |›d| d   ›d	�d
«       t        | «      } t        | «      } t        | «      | d<   t        | d   «      | d<   | j                  d«      r| d   }t        | ||¬«      | d<   g }d| v r:| d   }t        |j                  «       «      D ]  }d|v sŒ|j	                  |«       Œ ni }d}	d| v r| d   }	| j                  d«      �rKg }
d| v r| d   }
t!        j                   | d   «      }|	r|	dz   }nd}||v r!d}d||fz  |v r|dz   }d||fz  |v rŒd||fz  }dg i |	dz   dœ}| d   D ]²  }||
v r�g }d}| d   D ]l  }|dz   }|d   dk(  sŒd}|d   D ]1  }|dz   }d|v sŒ|d   |k(  sŒt!        j                   |«      }|d   |=  n |sŒO|d   s| d   |= |
|
j#                  |«      =  n |d   j	                  |«       Œ”||v sŒ™t%        ||   «      rŒ¨||   |d   |<   Œ´ |d   s|d   r+|
| d<   d|gi || d   dœ}i ||<   t&        j	                  |«       |r|| d<   | S )zi
    TODO:
          function return values
          determine expression types if in argument list
    rœ   ©r`  rq   r±  r/  z0postcrack: Expected block dictionary instead of r¢  ra  r¹   r   r.  Úsortvarsr3  r-  r  r
   r1  r2  Ú__user__routinesÚunknown__user__routinesr   z%s_%irŸ  Ú_user_interface)r/  r-  r.  rq   r   rœ  )r/  r-  r.  rq   r2  )ræ  rs  rS  Ú	postcrackr'  rÊ  rÆ   rÂ   r2   ÚanalyzeargsÚanalyzecommonÚanalyzevarsÚsortvarnamesr~  Úanalyzebodyrt  rÌ  r[   Ú
isexternalr   )r/  r3  r`  ÚgretÚuretrc  ÚuserisdefinedÚuseblockr{  rq   r2  r]  Úmnamerô  rŸ  r·  ÚedefÚjrg  ÚbbÚmblocks                        r)   ro  ro  û  s•  € ô �%œÔØˆØˆØò 	ˆAÜ˜ŒNÜ˜!  t¡Ô,ˆAà˜‰{˜z¨Q¨v©YÑ6Ø—‘˜A•à—‘˜A•ð	ð �d‰{ÐÜ�ÔÜ�eœTÔ" w°eÑ';ÜÐJÜ˜E›
ñ#ó $ð 	$à��˜u V™}Ð0CÒCÜ¢3¨¨f«Ð6¸Ô:Ü˜Ó€EÜ˜%Ó €EÜ Ó&€Eˆ&�MÜ$ U¨6¡]Ó3€Eˆ*ÑØ‡y�y�ÔØ�V‰}ˆÜ  t°Ô5€Eˆ&�Mà€MØ��~Ø˜‘<ˆÜ�h—m‘m“oÓ&ò 	(ˆAØ˜QŠØ×$Ñ$ QÕ'ñ	(ð ˆØ€DØ��Ø�V‰}ˆà‡y�y�ÕØˆ
Ø˜5Ñ Ø˜|Ñ,ˆJÜ—	‘	˜% ™-Ó(ˆÙØÐ-Ñ-‰Eà-ˆEØ�MÑ!ØˆAØ˜U A˜JÑ&¨-Ñ7Ø˜‘E�ð ˜U A˜JÑ&¨-Ò7à˜u a˜jÑ(ˆEØ)°2Ø¨Ð0AÑ)AñCˆ	à�{Ñ#ò 	4ˆAØ�J‰Ø�Ø�Ø˜v™ò "�AØ˜A™�AØ˜‘z [Ó0Ø˜Ø"# F¡)ò &˜BØ ! A¡˜AØ%¨š|°°6±
¸a³Ü'+§y¡y°£} Ø$% f¡I¨a LÙ %ð&ò  Ø#$ V¢9Ø$)¨&¡M°!Ð$4Ø *¨:×+;Ñ+;¸AÓ+>Ð ?Ù!ð"ð ˜&Ñ!×(Ñ(¨Õ.à˜’:¤j°°q±Õ&:Ø+0°©8�I˜fÑ% aÒ(ð-	4ð. �VÒ 	¨&Ò 1Ø",ˆE�,ÑØ.Øð9Ø$&°ÀUÈ;ÑEWñYˆFà ˆH�U‰OÜ×Ñ˜vÔ&ÙØˆˆe‰Ø€Lr(   c                 óÐ  — g }g }t        | j                  «       «      D ]4  }d| |   v r| |   d   r|j                  |«       Œ$|j                  |«       Œ6 t        |«      }d}|r‚|d   }d}|dd  D ]  }|| |   d   v sŒd} n |r;|dd  |gz   }|dz   }||kD  rKt	        ddj                  |«      z   dz   «       ||z   }	 |S |j                  |«       |dd  }t        |«      }d}|rŒ‚|S )Nrr  r   r   zTsortvarnames: failed to compute dependencies because of cyclic dependencies between r½  r¹   )rs  rt  r'  rX   ro   rÛ   )r.  ÚindepÚdeprú  rª   rô  r[  Úws           r)   rs  rs  [  s4  € Ø€EØ
€CÜ�$—)‘)“+Óò ˆØ�t˜A‘wÑ 4¨¡7¨8Ò#4Ø�J‰J�q�Mà�L‰L˜�Oð	ô
 	ˆC‹€AØ	€AÙ
Ø�‰FˆØˆØ�Q�R�ò 	ˆAØ�D˜‘G˜HÑ%Ò%Ø�Ùð	ñ Ø�a�b�'˜Q˜C‘-ˆCØ�A‘ˆAØ�1ŠuÜð ;àŸ)™) C›.ñ)à+/ñ0ô 1ð  ™�Øð €Lð	 �L‰L˜ŒOØ�a�b�'ˆCÜ�C“ˆAØˆAò) ð* €Lr(   c           	      ó   — t        | «      s| S g }t        | d   j                  «       «      D �]ƒ  }g }| d   |   D �]j  }t        j                  d|t        j
                  «      }|�rg }|j                  d«      rDt        |j                  d«      «      j                  d«      D �cg c]  }|j                  «       ‘Œ }}t        |j                  d«      j                  «       «      }|| d   v rVd| d   |   v r-| d   |   d   j                  dd	j                  |«      z  «       nGdd	j                  |«      z  g| d   |   d<   n(|rddd	j                  |«      z  gi| d   |<   ni | d   |<   ||vr&|j                  |«       n|}t        d
|›d|›d�«       |j                  |«       �Œm || d   |<   �Œ† d| vr|| d<   | S | d   |z   | d<   | S c c}w )Nr  z2\A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\ZÚdimsr#  rq   r.  rk  r2  r$  z:analyzecommon: failed to extract "<name>[(<dims>)]" from "z" in common /z/.
Ú
commonvars)Ú	hascommonrs  rt  r¾   rÒ   rÀ   rÓ   r%  r&  r¦   rr   r'  rÛ   ro   )	r/  r…  r{  Úcomvarsr·  ró   r„  rê  rª   s	            r)   rq  rq  }  s  € Ü�UÔØˆØ€JÜ�%˜‘/×&Ñ&Ó(Ó)ó %ˆØˆØ�x‘ Ñ#ó 	ˆAÜ—‘ØEÀqÌ"Ï$É$óPˆAâØ�Ø—7‘7˜6”?ä%3°A·G±G¸F³OÓ%D×%JÑ%JÈ5Ó%QöSØ !ð ŸG™G�Ið S�Dð Sä˜qŸw™w v›×4Ñ4Ó6Ó7�Ø˜˜f™Ñ%Ø! U¨6¡]°1Ñ%5Ñ5Ø˜f™ aÑ(¨Ñ4×;Ñ;Ø+¨s¯x©x¸«~Ñ>õ@ð ,¨s¯x©x¸«~Ñ>ð8@˜˜f™ aÑ(¨Ò4ñ à&¨¸C¿H¹HÀT»NÑ)KÐ(Lð,N˜˜f™ aÒ(ð ,.˜˜f™ aÑ(Ø˜JÑ&Ø×%Ñ% aÕ(à�ÝÚijÒlmÐnôpà�N‰N˜1Öð9	ð: %ˆˆh‰˜Óð?%ð@ ˜5Ñ Ø(ˆˆlÑð €Lð $ LÑ1°JÑ>ˆˆlÑØ€Lùò9Ss   Â$Gc                 ó¬  — t        | «       | d   j                  «       D ��ci c]  \  }}d|vsd|d   vr||“Œ }}}g }| d   D �]  }| |d<   |d   dv rl|�|d   |vrŒ|d	   }|d   |j                  «       v rt        j	                  |d   «       |d   t        v rŒXt
        r|d   t
        vrŒjt        |d
d¬«      |d<   n|}t        |||dz   ¬«      }|d   dv r|d   s|j                  d«      sd|vrŒ±|d   j                  dd«      dk(  rt        j	                  |«       Œß|d   dk(  r|d   t        |d   <   |j	                  |«       �Œ	 |S c c}}w )Nr.  rk  r  r-  rU  r/  r¨  rq   r3  z
      T©Úas_interfaceÚsaved_interfacerœ   rj  r   r³  r  r­   r
   Úpythonmoduler¡  )rS  rF  rt  r#   r'  r$   Úcrack2fortrangenro  r~  rÐ   r   r   )	r/  r3  r`  Úkeyr  Úmaybe_privater-  rg  Úas_s	            r)   rt  rt  ¨  s   € ô �Ôð   ™-×-Ñ-Ó/÷áˆC�Ø˜UÑ" h°e¸JÑ6GÑ&Gð 	ˆU‰
ð€Mñ ð €DØ�6‰]ó ˆØ!ˆˆ.ÑØˆW‰:Ð3Ñ3ØÐ A f¡I°TÑ$9Øà˜‘i�à�‰y˜M×.Ñ.Ó0Ñ0Ü× Ñ   6¡Ô+Ø�‰yœIÑ%ØÝ˜Q˜v™Y¬iÑ7ØÜ#3Ø�>°ô$6ˆAÐÒ ð ˆCÜ�a˜ #¨¡*Ô-ˆØˆW‰:Ð<Ñ<Ø�Šy §¡ Ô!7Ø!¨Ñ*ØØˆW‰:×Ñ˜c 2Ó&¨.Ò8Ü×Ñ˜qÕ!à�‰z˜XÒ%Ø+,¨V©9”˜a ™iÑ(Ø�K‰K˜ŽNð;ð< €KùóKs   ¢Ec                 ó<  — t        | «       t        }i }d| v r‚| d   €)d }t        dkD  rt        dt	        | d   «      z  «       ||fS t        | d   j                  «       «      D ]5  }| d   |   j                  d«      dvr| d   |   ||<   Œ(| d   |   d   ||<   Œ7 ||fS )Nr   r   z6buildimplicitrules: no implicit rules for routine %s.
rq   r4   )rJ   rI  )rS  Údefaultimplicitrulesr   r2   rÎ   rs  rt  r~  )r/  ÚimplicitrulesÚ	attrrulesr{  s       r)   Úbuildimplicitrulesr•  Õ  sÛ   € Ü�ÔÜ(€MØ€IØ�UÑØ�ÑÐ$Ø ˆMÜ˜Š{ÜØMÔPTÐUZÐ[aÑUbÓPcÑcôeð ˜)Ð#Ð#ô ˜% 
Ñ+×0Ñ0Ó2Ó3ò D�Ø˜Ñ$ QÑ'×+Ñ+¨JÓ7Ð?VÑVØ',¨ZÑ'8¸Ñ';�M !Ò$à#(¨Ñ#4°QÑ#7¸
Ñ#C�I˜a’Lð	Dð
 ˜)Ð#Ð#r(   c                 ój   — t        | ||«      }t        |«      t        t        fv r|S t	        d|z  «      ‚)z2 Like `eval` but returns only integers and floats zr=%r)r×  rh   r8   r:   rÖ   )r·  rc  rë   r™   s       r)   Úmyevalr—  è  s3   € äˆQ��1‹€AÜˆAƒw”3œ�,ÑØˆÜ
�V˜q‘\Ó
"Ð"r(   z\A\b\w+\b\Zc                 óÌ  — 	 t        t        | i i «      «      }d|dfS # t        $ r Y nw xY wt        j	                  | «      rdd| fS t        | «      }|D �]  }t        |«      |kD  rŒt        j                  d|z   dz   | «      rŒ0t        j                  d|z   dz   t        j                  «      }|j	                  | «      }|sŒn	 |j	                  | «      }|r<|j                  d«      ›d	d›d
|j                  d«      ›�}|j	                  |«      }|rŒ<t        i i «      }	|j	                  | «      }|r<|j                  d«      ›d	d›d
|j                  d«      ›�}|j	                  |«      }|rŒ<t        |i i «      |	z
  }
|j	                  | «      }|r<|j                  d«      ›d	d›d
|j                  d«      ›�}|j	                  |«      }|rŒ<t        |i i «      }|j	                  | «      }|r<|j                  d«      ›d	d›d
|j                  d«      ›�}|j	                  |«      }|rŒ<t        |i i «      }|
dz  |	z   |k(  r|
dz  |	z   |k(  r|
|	|fc S  y# t        $ r Y  yw xY w y)a  
    Obtain ``a`` and ``b`` when ``e == "a*x+b"``, where ``x`` is a symbol in
    xset.

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

    This can be tricked by sufficiently complex expressions

    >>> getlincoef('(x - 0.5)*(x - 1.5)*(x - 1)*x + 2*x + 3', {'x'})
    (2.0, 3.0, 'x')
    r   Nr   z\w\s*\([^)]*\bú\bú(?P<before>.*?)\bú\b(?P<after>.*)r  r4  r5  r  g      à?g      ø?)NNN)r8   r—  rÆ   Úgetlincoef_re_1rÒ   rX   r¾   rŠ  r¿   rÀ   rÓ   )r·  Úxsetr³   Úlen_erê  r]  ró   r^  Úeerg  r)  Úc2s               r)   Ú
getlincoefr¡  ò  sl  € ð*Ü”�q˜"˜bÓ!Ó"ˆØ�!�TˆzÐøÜò Ùðúä×Ñ˜QÔØ�!�QˆwˆÜ�‹F€EØó 'ˆÜˆq‹6�EŠ>ØÜ�9‰9Ð&¨Ñ*¨UÑ2°AÔ6àÜ�z‰zÐ.°Ñ2Ð5GÑGÌÏÉÓNˆØ�J‰J�q‹MˆÚðØ—Z‘Z “]�ÙàŸ™ Õ*ªA¨r¯x©x¸Ô/@ðB�BàŸ™ B›�Bò ô ˜2˜r 2Ó&�Ø—Z‘Z “]�ÙàŸ™ Õ*ªA¨r¯x©x¸Ô/@ðB�BàŸ™ B›�Bò ô ˜2˜r 2Ó&¨Ñ*�Ø—Z‘Z “]�ÙàŸ™ Õ*ªC°·±¸'Ô1BðD�BàŸ™ B›�Bò ô ˜2˜r 2Ó&�à—Z‘Z “]�ÙàŸ™ Õ*ªC°·±¸'Ô1BðD�BàŸ™ B›�Bò ô ˜B  BÓ'�Ø˜‘G˜a‘K 1Ò$¨¨S©°1©¸Ò):Ø˜a ˜7’Nð Øøô ò ØØØðúðK'ðP s:   ‚ �	)¨)ÃAIÄAIÅ-AIÇAIÈ('IÉ	I!É I!z\b[a-z][\w$]*\bc                 ó®  — | |v r²||    j                  dg «      }d||    v rOt        ||    «      sAt        j                  ||    d   «      D ]#  }||vsŒ||v sŒ|| k7  sŒ|j	                  |«       Œ% |d d  D ]>  }|j                  |g «      xs t        |||«      D ]  }||vsŒ|j	                  |«       Œ Œ@ nt        dt        | «      z  «       g }||| <   |S )Nrr  rn  z,_get_depend_dict: no dependence info for %s
)r~  ÚisstringÚword_patternrâ  r'  Ú_get_depend_dictr2   rÎ   )rq   r.  ÚdepsÚwordsÚwordr‚  s         r)   r¥  r¥  =	  sñ   € Øˆt�|Ø�T‘
—‘˜x¨Ó,ˆà�$�t‘*Ñ¤X¨d°4©jÔ%9Ü$×,Ñ,¨T°$©Z¸©_Ó=ò '�ð ˜uÒ$¨°ª¸$À$»,Ø—L‘L Õ&ð	'ð
 ™!�Hò 	$ˆDØ—X‘X˜d BÓ'ò :Ü'¨¨d°DÓ9ò$�à˜E’>Ø—L‘L •Oñ$ñ	$ô 	Ð?Ä4ÈÃ:ÑNÔOØˆØ€Dˆ�JØ€Lr(   c                 ód   — t        | j                  «       «      }i }|D ]  }t        || |«       Œ |S r,   )rs  rt  r¥  )r.  ru   Údepend_dictrª   s       r)   Ú_calc_depend_dictr«  S	  s8   € Ü�—‘“Ó€EØ€KØò /ˆÜ˜˜D +Õ.ð/àÐr(   c                 óv  — t        | «      }g }t        |j                  «       «      D ]  }||   rŒ	|j                  |«       ||= Œ |rTt        |j	                  «       «      D ]5  \  }}|D �cg c]	  }||v sŒ|‘Œ }}|s|j                  |«       ||= Œ1|||<   Œ7 |rŒT|D �cg c]	  }|| v sŒ|‘Œ c}S c c}w c c}w r,   )r«  rs  rt  r'  rF  )r.  rª  ru   rq   Úlstrª   Únew_lsts          r)   Úget_sorted_namesr¯  [	  sÓ   € Ü# DÓ)€KØ€EÜ�[×%Ñ%Ó'Ó(ò "ˆØ˜4Ó Ø�L‰L˜ÔØ˜DÑ!ð"ñ Ü˜k×/Ñ/Ó1Ó2ò 	,‰IˆD�#Ø"%Ö:˜Q¨¨kÒ)9’qÐ:ˆGÐ:ÙØ—‘˜TÔ"Ø Ñ%à$+�˜DÒ!ð	,ò ð #Ö3�T d¨d¢lŠDÒ3Ð3ùò ;ùò 4s   Á+	B1Á5B1Â 	B6Â*B6c                 ó‚   — | d   dv r| dd } t         j                  | «      ryt        j                  | «      ryd| z   dz   S )	Nr   ú'"r   r   é   é   zkind(r5  )rÕ  rÒ   Úreal8pattern)rc   s    r)   Ú
_kind_funcrµ  m	  sK   € àˆa�y�EÑØ˜˜"�ˆÜ×Ñ˜6Ô"ØÜ	×	Ñ	˜FÔ	#ØØ�VÑ˜cÑ!Ð!r(   c                 óP   — d| z  }|dk  ry|dk  ry|dk  ry|dk  ry	|dd
z  k  ryy)Nr®   é   r   i   r0  l        r³  l            r²  é€   é   r   r'   )r™   ró   s     r)   Ú_selected_int_kind_funcrº  x	  sD   € à
ˆa‰€AØˆF‚{ØØˆG‚|ØØˆG‚|ØØˆG‚|ØØˆA�‰H‚}ØØr(   c                 ó¨   — | dk  ry| dk  ryt        j                  «       j                  «       }|j                  d«      r| dk  ryy	| dk  ry| dk  ryy	)
Né   r³  r¹  r²  )
Úaarch64ÚalphaÚarm64Ú	loongarchÚmipsÚpowerÚppcÚriscvÚs390xÚsparcé!   é   r®   r   )ÚplatformÚmachiner¡   r‹   )Úpr™   ÚradixrÊ  s       r)   Ú_selected_real_kind_funcrÍ  ˆ	  sf   € ð 	ˆ1‚uØØˆ2‚vØÜ×ÑÓ ×&Ñ&Ó(€GØ×ÑÐwÔxØ�Š7Øð ð	 ˆrŠ6ØØ�"ŠWØØr(   c           	      óB  — t        j                   |«      }t        j                   |«      }dt        fdt        fdt        ffD ]  \  }}||vsŒ|||<   Œ g }t	        | «      D ]&  }d| |   v sŒd| |   d   v sŒ|j                  |«       Œ( t        j                  dt        j                  «      }t        j                  dt        j                  «      }	t        j                  dt        j                  «      }
|D �]ñ  }d	| |   v �rÉ| |   d	   }t        | |   «      r&|j                  «       }d
D ]  } |j                  |Ž }Œ |j                  d|«      }|	j                  d|«      }d}d| |   v rAd| |   d   v r7t        |«      }|j                  d| |   d   d   z   d«      }t        |«      |k  }|ss|
j                  |«      sb|j                  d«      }t        |«      dkD  rCdj!                  |d d «      j                  «       j                  |d   j                  «       d«      }t#        | |   «      ržt%        |«      }t&        j)                  |«      D ]i  }t%        ||j+                  «       |j-                  «        j                  «       j                  dd«      «      ||j+                  «       |j-                  «        Œk dj!                  |«      }nt/        | |   «      rt1        d|› d�«       | |   d   D �cg c]2  }|j3                  d«      r|j5                  d«      j7                  «       ‘Œ4 c}xs d gd   }t&        j9                  |«      rd}nt:        j9                  |«      rd}	 t=        ||||¬«      ||<   tA        | |   «      r$tC        ||   tD        «      rtG        ||   «      ||<   |j                  «       }||k7  s�ŒË||   ||<   �ŒÕtI        | |   «       t1        d|›d�«       �Œô |S c c}w # t>        $ r!}|||<   t1        d|› d|›d�«       Y d }~ŒŸd }~ww xY w) NrD  Úselected_int_kindÚselected_real_kindrk  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*\)rn  ))z.false.ÚFalse)z.true.ÚTruez
kind("\1")zselected_int_kind(\1)Frl  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Û   Úisdoublers  rÕ  rÖ  r‹  rý   Ú	iscomplexr2   r‹   Úremoveprefixr¦   rŠ  r´  Ú
param_evalrÆ   r£  ræ  r8   rÞ  r†  )r.  Úglobal_paramsr„  Úg_paramsrq   ÚfuncÚparam_namesrª   Úkind_reÚselected_int_kind_reÚselected_kind_rerú  ÚreplÚis_replacedÚ
orig_v_lenÚv_rù  ró   r6  rÓ  rì   Únls                         r)   rÓ  rÓ  ›	  s0  € Ü�Y‰Y�}Ó%€FÜ�y‰y˜Ó'€HØ¤
Ð+Ø+Ô-DÐEØ,Ô.FÐGðKò "‰
ˆˆdð �xÒØ!ˆH�TŠNð	"ð
 €KÜ˜dÓ#ò "ˆØ˜˜a™Ò  [°D¸±G¸JÑ4GÒ%GØ×Ñ˜qÕ!ð"ô �j‰jÐ<¼b¿d¹dÓC€GÜŸ:™:Ø8¼"¿$¹$ó@Ðä—z‘zØ?ÄÇÁóGÐàó POˆØ�$�q‘'Š>Ø�Q‘˜‘ˆAÜ˜˜a™Ô!Ø—G‘G“I�ðò )�Dð
 "˜Ÿ	™	 4Ð(‘Að)ð —‘˜M¨1Ó-ˆAØ$×(Ñ(Ð)AÀ1ÓEˆAð  ˆKà  a¡Ñ(ð ˜T !™W ^Ñ4Ñ4Ü!$ Q£�JØŸ	™	 #¨¨Q©°Ñ(?ÀÑ(GÑ"GÈÓL�Aô #& a£&¨:Ñ"5�KáØ'×-Ñ-¨aÔ0ØŸ™ ›�Bä˜2“w ’{ØŸG™G B s¨ GÓ,×2Ñ2Ó4×<Ñ<¸RÀ¹V¿\¹\»^ÈRÓP˜ô ˜˜Q™Ô Ü˜!“W�Ü&×/Ñ/°Ó2ò H�AÜ,0Ø˜!Ÿ'™'›) A§E¡E£GÐ,×2Ñ2Ó4×<Ñ<¸SÀ#ÓFó-H�B�q—w‘w“y §¡£Ñ)ðHð —G‘G˜B“K‘ä˜4 ™7Ô#Üð FØFGÀSÈðLô Mð "& a¡¨Ñ!4ö5ØØŸ,™, {Ô3ð Ÿ™ {Ó3×9Ñ9Õ;ò 5ò ?à9=¸ÀñCˆGô ×#Ñ# AÔ&Ø‘Ü×$Ñ$ QÔ'Ø�ðCÜ& q¨(°FÀGÔL��q‘	ô
 ˜˜Q™Ô ¤Z°°q±	¼3Ô%?Ü  q¡	›N��q‘	Ø—‘“ˆBØ�QŒwØ# A™Y��r“
ä�$�q‘'ŒNÜÐ/°¨uÐ4LÐMÖNðaPOðb €Mùò15øô ò CØ��q‘	ÜÐ/°¨u°E¸!¸¸bÐA×BÑBûðCús   Ë67O/Í(O4Ï4	PÏ=PÐPc                 ó$   — | dv ryt        | |«      S )N)z(:)ú(*)r   rè  )Ú_eval_scalar)Úlengthr„  s     r)   Ú_eval_lengthrë   
  s   € ØÐ$Ñ$ØÜ˜ Ó'Ð'r(   z\d+_c                 óX  — t        | «      r| j                  d«      d   } 	 t        | i |«      }  t        | t        «      rt
        nt        | «      } | S # t        t        t        f$ r | cY S t        $ r7}t        d|›d| ›dt        |j                  «       «      ›d�«       Y d }~| S d }~ww xY w)Nrð   r   r%  z" in evaluating z (available names: r±   )Ú_is_kind_numberr&  r×  ræ  rÂ   rÎ   rÙ  rØ  rÚ  rÆ   ro   rs  rt  )r  r„  rì   s      r)   ré  ré  	
  sŸ   € Ü�uÔØ—‘˜CÓ  Ñ#ˆð	5ä�U˜B Ó'ˆØ8œ E¬3Ô/•´S¸%Ó@ˆð €Løô ”{¤IÐ.ò ØŠÜò 5Ýâšœt F§K¡K£MÕ2ð4÷ 	5ð 	5ð €Lûð	5ús   ¡/A ÁB)Á*B)Á2,B$Â$B)c                 óP   ‡?‡@‡A— t        | «       t        | «      \  }}t        j                  | d   «      ŠA| d   dk(  r| d   ‰Avri ‰A| d   <   d| d   v ri‰Ad= d| d   d   v r\| d   d   d   }t        ‰A«      t        d„ | d   D «       «      z  D ]-  }d	D ]&  }||v sŒt	        ‰Aj                  |i «      |«      ‰A|<   Œ( Œ/ g }| d
   }|D ]  }	 ‰A|    |j                  |«       Œ t        ‰Aj                  «       «      D ]  }||vsŒ|j                  |«       Œ t        ‰At        | «      «      }	i }
t        j                  d«      j                  }t        ‰Aj                  «       «      D ]4  } ||«      }|sŒ||j                  «       |j!                  «        }	 |
|    Œ6 |D �
]B  }|d   t        |j                  «       «      v rt	        ‰A|   ||d      «      ‰A|<   d‰A|   vr¹d‰A|   v r
d‰A|   d   v s¨|r�|d   j%                  «       }t        ||   j                  «       «      D ]N  }|dk(  r||   |   dk(  rŒ|‰A|   vr||   |   ‰A|   |<   Œ*|dk(  sŒ0||   |   D ]  }t	        ‰A|   |«      ‰A|<   Œ ŒP n%|| d
   v rt'        dt)        |«      ›d| d   ›d�«       d‰A|   v r7d‰A|   d   v r-‰A|   d   d   }	 t+        t-        |i |	«      «      }|‰A|   d   d<   d‰A|   v r7d‰A|   d   v r-‰A|   d   d   }	 t+        t-        |i |	«      «      }|‰A|   d   d<   i }d‰A|   v �r�‰A|   d   }|j1                  «        g ‰A|   d<   d\  }}}}}|D �]m  }|dd dk(  r|dd j3                  «       dd }nŽ|dd dk(  r|dd j3                  «       dd }no|dd d k(  r|dd j3                  «       dd }nP|dd! d"k(  r|d!d j3                  «       dd }n1|dd# d$k(  r|d#d j3                  «       dd }nt	        ‰A|   |«      ‰A|<   |r€d‰A|   vrg ‰A|   d<   t5        |«      j7                  d%«      D �cg c]  }|j3                  «       ‘Œ c}D ]6  }|j9                  d&d«      }|‰A|   d   vsŒ ‰A|   d   j                  |«       Œ8 d}|rN|j9                  d'd(«      }|j9                  d)d*«      }d$‰A|   vr
|g‰A|   d$<   n‰A|   d$   j                  |«       d}|�wd ‰A|   vrg ‰A|   d <   t;        t5        |«      j7                  d%«      D �cg c]  }|j3                  «       ‘Œ c}«      D ]$  }|‰A|   d    vsŒ‰A|   d    j                  |«       Œ& d}|€�Œ d"‰A|   vrg ‰A|   d"<   t5        |«      j7                  d%«      D �cg c]  }|j3                  «       ‘Œ c}D ]$  }|‰A|   d"   vsŒ‰A|   d"   j                  |«       Œ& d}�Œp |�ròd‰A|   v�rêg ‰A|   d<   t;        t5        |«      j7                  d%«      D �cg c]  }|j3                  «       ‘Œ c}«      D �]Ÿ  }	 t=        ||	«      }|d,k(  rd,nd-}||k(  r|g}nt5        |d,«      j7                  d.«      }tC        |«      d/k(  r	d-|v rd-g}d-}tC        |«      dk(  r|d   |k7  rd0|d   g}tC        |«      d/k(  �rtE        tF        jH                  jJ                  |«      \  }}||z
  dz   }|jM                  tF        jN                  jP                  ¬1«      }i } | d   D ]   }tG        jR                  |«      }!|jU                  |!«      sŒ*	 |jW                  |!«      \  }}"||"fd2„}#t        |jY                  «       «      }$|$j[                  |"jY                  «       «       t        ˆAfd3„|$D «       «      }&|#t        |&«      f| |<   Œ¢ | ||<   ‰A|   d   j                  |«       �Œ¢ d"‰A|   v�r\d
| v �rW|| d
   v �rO‰A|   j                  d g «      }'g }( t_        t`        tb        td        «      ‰A|   «      })tg        ‰A|   «      �rnti        ‰A|   d   «      D �]X  \  }*}|j                  |«      Š?‰?€�ni|)�rf‰?jk                  «       D �]R  \  }\  }+},ˆ?ˆ@fd4„Š@t        «       }- ‰@||-«       ||'v sd5‰A|   v sd ‰A|   v rŒ6|+�€||-vr|d6}. |+tG        jR                  d7|› d8|*› d9�«      «      }/|/jM                  tF        jN                  jP                  ¬1«      }/|/‰A|   d5<   |g|,z   ‰A|   d <   d"‰A|   vrpd7|› d8|*› d:|› �g‰A|   d"<   n]d;}.d‰A|   vrg ‰A|   d<   d<‰A|   d   vr‰A|   d   j                  d<«       |'j                  |«       |(j                  d7|› d8|*› d:|› �«       ‰A|   j                  dg «      }0d=|0v sd>|0v s|0j                  |.rd>nd=«       |0s�ŒK|0‰A|   d<   �ŒU ‰?€�Œ‰‰?jk                  «       D ]½  \  }\  }+},‰A|   j                  d g «      }&‰A|   j                  dg «      D ]V  }1|1jm                  d «      sŒdjo                  |1j7                  «       «      }1|&jq                  |1d?d j7                  d@«      «       ŒX |&rt        t        |&«      «      ‰A|   d <   ||&vsŒ­|'j                  |«       Œ¿ �Œ[ nsts        ‰A|   «      red‰A|   v r^d-‰A|   d   v r!tu        ‰A|   d   d-   |	«      }2|2‰A|   d   d-<   n3d‰A|   d   v r)tu        ‰A|   d   d   |	«      }2‰A|   d   d= |2‰A|   d   d-<   |(r|(‰A|   d"<   |'rt        t        |'«      «      ‰A|   d <   d5‰A|   v s�	Œ}d‰A|   vrg ‰A|   d<   d=‰A|   d   vr!d>‰A|   d   vr‰A|   d   j                  d=«       d ‰A|   vr]g ‰A|   d <   t        |
jk                  «       «      D ]+  \  }} |‰A|   d5   «      sŒ‰A|   d    j                  |«       Œ- ‰A|   d    s‰A|   d = tw        ‰A|   «      s�
Œ+ty        ‰A|   d5   |	«      ‰A|   d5<   �
ŒE t        ‰Aj                  «       «      D �]r  }|| d   k(  sŒd$‰A|   v r‰A|   d$   | d$<   | d   dk(  sŒ(dA| v r| dA   ‰Av rt{        ‰A|   ‰A| dA      «      ‰A|<   dB| v sŒP| dB   }3|3j9                  dCd«      }4|3|4k(   }5|4j9                  dDd«      }3|3|4k(   }6t|        d   j                  |3«      }|rºt        |j�                  dE«      |j�                  dF«      «      \  }7}8}}9tƒ        |7|8«      \  }:};}<|7‰A|   d<   	 | dA   r|7‰A| dA      d<   |:r d|:v r	 t-        |:d   i |	«      |:d<   |:‰A|   d<   |;r|;‰A|   d<   |<r|<‰A|   dG<   |5rt	        ‰A|   dC«      ‰A|<   |6s�ŒEt	        ‰A|   dD«      ‰A|<   �ŒYt'        dHt)        | dB   «      z  «       �Œu | d   dIv�r¨dJ| v rt        j                  | d
   | dJ   z   «      }=nt        j                  | d
   «      }=t        ‰Aj                  «       «      D ]1  } t_        t„        t†        «      ‰A|   «      sŒ!|=j                  |«       Œ3 dK| v ro|=jq                  t        | dK   j                  «       «      «       t        | dK   j                  «       «      D ]%  }| dK   |   D ]  }||=vsŒ|=j                  |«       Œ Œ' | d   dk(  r-dA| v r|=j                  | dA   «       n|=j                  | d   «       | d   dLv r| d   }>|>‰Av rd‰A|>   v r‰A|>   d   | d<   | d   dMk(  r(|=jq                  t        ‰Aj                  «       «      «       t        ‰Aj                  «       «      D ]
  }||=vsŒ‰A|= Œ ‰AS # t        $ r Y �Œkw xY w# t        $ r8 t        j                  d|z  t        j"                  «      j                  |
|<   Y �Œw xY w# t.        $ r Y �Œºw xY w# t.        $ r Y �ŒŒw xY wc c}w c c}w c c}w c c}w # t>        t@        t        f$ r t'        d+|›d*�«       Y �	Œ·w xY w# t\        $ r&}%d}#t        |jY                  «       «      }$Y d}%~%�Œ˜d}%~%ww xY w# t.        $ r Y �Œ!w xY w# t.        $ r Y �Œw xY w)NzH
    Sets correct dimension information for each variable/parameter
    r.  r/  rú   rq   r
   rk  c              3   ó&   K  — | ]	  }|d    –— Œ y­w)rq   Nr'   )r¿  rg  s     r)   rÀ  zanalyzevars.<locals>.<genexpr>)
  s   è ø€ Ò$F°1 Q v¥YÑ$Fùs   ‚r-  r®  r3  z[A-Za-z][\w$]*z.*\b%s\br   r4   r  Ú	undefinedz"analyzevars: typespec of variable z is not defined in routine z.
rm  rX   rl  rD  )NNNNNNr3  r  r   r   r·   r
  rr  r�   rq  r³  rp  r#  r­   z\n\nz

z\n r¹   z4analyzevars: could not parse dimension for variable r£  r   z@:@r0  Ú1)Úlanguagec                 ó   — | |z
  |z  S r,   r'   )r6  r)  rg  s      r)   Úsolve_vzanalyzevars.<locals>.solve_vÅ
  s   € Ø01°A±¸©{Ð(:r(   c              3   óR   •K  — | ]  }|j                   ‰v r|j                   –— Œ  y ­wr,   )r  )r¿  r6  r.  s     €r)   rÀ  zanalyzevars.<locals>.<genexpr>Ò
  s(   øè ø€ ò -7Ø/0Ø'(§v¡v°¡~ð %&§F¥Fñ-7ùs   ƒ$'c                 ó|   •— ‰j                  | d g g«      d   D ]!  }||vsŒ|j                  |«        ‰||«       Œ# y )Nr   )r~  Úadd)rú  r¦  Úv1Úcoeffs_and_depsÚcompute_depss      €€r)   rú  z!analyzevars.<locals>.compute_depsó
  sD   ø€ Ø*9×*=Ñ*=¸aÀ$ÈÀÓ*LÈQÑ*Oò !? BØ')°¢~Ø(,¯©°¬Ù(4°R¸Õ(>ñ!?r(   rn  Fzshape(r½  r5  z) == TÚinr  r  r¼  r$  r©   r¥  ÚpureÚ	recursiver6  r  ro  z'analyzevars: prefix (%s) were not used
)r¡  rŒ  rœ  r›  r…  r  )rü   rú   rh   )DrS  r•  rÌ  r  ru  r~  r'  ÚKeyErrorrs  rt  rÓ  r^  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ÚsymbolsrW  ÚRuntimeErrorÚl_orÚisintent_inÚisintent_inoutÚisintent_inplaceÚisarrayrß  rF  r‹   rÛ   rå  r£  rë  Úisscalarré  r|  rL  rÏ  rÓ   rÜ  Úisintent_callbackÚisintent_aux)Br/  r“  r”  Úgenrª   r{  Úsvarsr3  r)  r„  Údep_matchesÚ
name_matchrú  ró   Úln0rë   Údimension_exprsrñ  Údimr
  rr  rq  rp  rê  r³   Útmpr!  Údim_charr  r<  Úd2ÚdsizeÚsolver_and_depsr6  rg  rô  Úall_symbolsrì   Úv_depsÚn_depsÚn_checksÚ
n_is_inputrô  Úsolverr¦  Úall_depsÚis_requiredr/  Úv_attrÚaarê  ÚprÚpr1ÚispureÚisrecr4   rð  rò  rü  rý  ro  Ú
neededvarsrq   rù  rú  r.  sB                                                                  @@@r)   rr  rr  
  s¿  ú€ ô �ÔÜ1°%Ó8Ñ€M�9Ü�9‰9�U˜6‘]Ó#€DØˆW�~˜Ò#¨¨f©¸TÑ(AØ ˆˆU�6‰]ÑØ	ˆU�6‰]ÑØ�ˆHØ˜˜v™ rÑ*Ñ*Ø˜‘- Ñ# JÑ/ˆCÜ˜“Y¤Ñ$F¸¸f¹Ô$FÓ!FÑFò B�Ø.ò B�AØ˜C’xÜ"-¨d¯h©h°q¸"«o¸qÓ"A˜˜QšñBðBð €EØ�‰=€DØò ˆð	Ø�ŠGØ�L‰L˜�Oðô �$—)‘)“+Óò ˆØ�DŠ=Ø�L‰L˜�Oðô ˜DÔ"3°EÓ":Ó;€Fð €KÜ—‘Ð-Ó.×4Ñ4€JÜ�$—)‘)“+Óò KˆÙ�q‹MˆÚØ�!—'‘'“)˜AŸE™E›GÐ$ˆAðKØ˜A“ðKð ó MBˆØˆQ‰4”4˜	Ÿ™Ó(Ó)Ñ)Ü! $ q¡'¨9°Q°q±T©?Ó;ˆD�‰GØ˜T !™WÑ$Ø  a¡Ñ(¨Z¸4À¹7À:Ñ;NÑ-NÙ Ø˜A™$Ÿ*™*›,�CÜ! -°Ñ"4×"9Ñ"9Ó";Ó<ò B˜Ø 
š?¨}¸SÑ/AÀ!Ñ/DÈÒ/SØ$Ø D¨¡GÑ+Ø)6°sÑ);¸AÑ)>˜D ™G AšJØ *›_Ø%2°3Ñ%7¸Ñ%:ò B Ü*5°d¸1±g¸qÓ*A  Q¢ñBñBð ˜% ™-Ñ'ÝÜ˜Q�  v£ð0ô 1à˜T !™WÑ$Ø˜˜Q™ Ñ/Ñ/Ø˜‘G˜NÑ+¨EÑ2�ðÜœD  B¨Ó/Ó0�Að 23��Q‘˜Ñ'¨Ñ.à˜T !™WÑ$Ø˜˜a™ Ñ0Ñ0Ø˜‘G˜NÑ+¨FÑ3�ðÜœD  B¨Ó/Ó0�Að 34��Q‘˜Ñ'¨Ñ/àˆØ˜˜a™Ò Ø˜‘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ä)¨$¨q©'°1Ó5�D˜‘GÙØ t¨A¡wÑ.Ø,.˜˜Q™ Ñ)Ü1?ÀÓ1G×1MÑ1MÈeÓ1TÖU¨A˜aŸg™g�iÒUò :˜àŸi™i¨¨RÓ0˜Ø d¨1¡g¨hÑ&7Ò7Ø  ™G HÑ-×4Ñ4°SÕ9ð	:ð
 "�FÙØŸ<™<¨°&Ó9�DØŸ<™<¨°Ó5�DØ T¨!¡WÑ,Ø+/¨&˜˜Q™ šà˜Q™ ™×.Ñ.¨tÔ4Ø�DØÐ%Ø t¨A¡wÑ.Ø,.˜˜Q™ Ñ)Ü&¼>È&Ó;Q×;WÑ;WÐX]Ó;^Ö'_°a¨¯©­	Ò'_Ó`ò 8˜Ø D¨¡G¨HÑ$5Ò5Ø  ™G HÑ-×4Ñ4°QÕ7ð8ð "�FØÒ$Ø d¨1¡gÑ-Ø+-˜˜Q™ Ñ(Ü1?ÀÓ1F×1LÑ1LÈUÓ1SÖT¨A˜aŸg™g�iÒTò 7˜Ø D¨¡G¨GÑ$4Ò4Ø  ™G GÑ,×3Ñ3°AÕ6ð7ð !’EðW+!òX �{¨$¨q©'Ò1Ø')��Q‘˜Ñ$Ü"Ü,:¸3Ó,?×,EÑ,EÀeÓ,LÖM q˜Ÿ™�ÒMóó ?3�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¡ò K˜AÜ (× 2Ñ 2°1Ó 5˜AØ$Ÿ~™~¨aÕ0ð!GØ+0×+=Ñ+=¸aÓ+@¡D A qà56¸!ó %;ô 36°a·i±i³kÓ2B KØ$/×$6Ñ$6°q·y±y³{Ô$Cô *-ó -7Ø4?ô-7ó *7 ð 6=¼dÀ6»lÐ5J °Ò 2ð-Kð: .=˜¨Ñ*Ø˜‘G˜KÑ(×/Ñ/°Ö2ð?3ðB ˜$˜q™'Ò! f°¢o¸!¸uÀV¹}Ò:Lð
 ˜!‘W—[‘[ ¨2Ó.ˆFØˆHð0œœk¬>Ü.ó0Ø04°Q±ó9ˆJä�t˜A‘wÕÜ% d¨1¡g¨kÑ&:Ó;ó K1‘D�A�qØ&5×&9Ñ&9¸!Ó&<�OØ&Ð.áÚ#ð 2A×1FÑ1FÓ1Hó 6=Ñ-˜A™~ ¨õ?ô
 (+£u˜HÙ(¨¨HÔ5Ø ! V¡Ø$'¨4°©7¡NØ$,°°Q±Ñ$7ð
 !)Ø%Ð1°a¸xÑ6Gð /4 Ù'-¬h×.@Ñ.@Ø&,¨Q¨C¨r°!°°AÐ$6ó/8ó (9 à'+§}¡}Ü-5×->Ñ->×-@Ñ-@ð (5ó (B à/3  Q¡¨¡ð 67°C¸$±J  Q¡¨Ñ 1Ø#*°$°q±'Ñ#9ð +1°°°2°a°S¸¸a¸SÐ(Að8C D¨¡G¨GÒ$4ð /3 Ø#+°4¸±7Ñ#:Ø8: D¨¡G¨HÑ$5Ø#'¨t°A©w°xÑ/@Ñ#@Ø$(¨¡G¨HÑ$5×$<Ñ$<¸TÔ$Bà &§¡¨aÔ 0Ø (§¡Ø&,¨Q¨C¨r°!°°E¸!¸Ð$=ô!?à%)¨!¡W§[¡[°¸RÓ%@˜FØ$.°&Ñ$8Ø'1°VÑ';Ø &§¡Ù2=¡JÀ:ô!Oã%Ø6<  Q¡¨
Ó 3ðm6=ðn 'Ò2à1@×1FÑ1FÓ1Hò 	1Ñ-˜A™~ ¨Ø%)¨!¡W§[¡[°¸2Ó%>˜FØ&*¨1¡g§k¡k°*¸bÓ&Aò G Ø#%§=¡=°Õ#:Ø)+¯©°·±³Ó)< BØ$*§M¡M°"°Q°r°(·.±.ÀÓ2EÕ$FðGñ  &Ü48¼¸V»Ó4E  Q¡¨Ñ 1Ø ¨šØ &§¡¨aÕ 0ò	1ñEK1ôX ˜$˜q™'Ô"Ø! T¨!¡WÑ,Ø˜d 1™g nÑ5Ñ5Ü!-¨d°1©g°nÑ.EÀcÑ.JØ.4ó"6˜à7=˜˜Q™ Ñ/°Ò4Ø $ q¡'¨.Ñ"9Ñ9Ü!-¨d°1©g°nÑ.EÀeÑ.LØ.4ó"6˜à  ™G NÑ3°EÐ:Ø7=˜˜Q™ Ñ/°Ñ4ÙØ#+��Q‘˜Ñ ÙÜ$(¬¨V«Ó$5��Q‘˜Ñ!à�$�q‘'‹>Ø  a¡Ñ(Ø&(��Q‘˜
Ñ#Ø $ q¡'¨*Ñ"5Ñ5Ø $ q¡'¨*Ñ"5Ñ5Ø�Q‘˜
Ñ#×*Ñ*¨:Ô6Ø˜t A™wÑ&Ø$&��Q‘˜Ñ!Ü  ×!2Ñ!2Ó!4Ó5ò 4‘D�A�qÙ˜˜a™ ™•Ø˜Q™ Ñ)×0Ñ0°Õ3ð4ð ˜A‘w˜xÒ(Ø˜Q™ Ð)Ü˜˜Q™Ö Ü+¨D°©G°C©L¸&ÓA��Q‘˜“ð[MBô^ �$—)‘)“+Óó +`ˆØ��f‘ÓØ˜˜a™Ñ Ø $ Q¡¨¡��f‘Ø�W‰~ Ó+Ø˜uÑ$¨¨x©¸DÑ)@Ü(¨¨a©°$°u¸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˜˜Q™ 
Ñ+ð!Ø$ XšØDL  U¨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°$°q±'¸6Ó&B˜D ™GÛ Ü&1°$°q±'¸;Ó&G˜D ›GäØFÌÈeÐT\ÉoÓI^Ñ^ö`ðU+`ðX ˆW�~ÐVÒVØ˜5Ñ ÜŸ™ 5¨¡=°5¸Ñ3FÑ#FÓG‰JäŸ™ 5¨¡=Ó1ˆJÜ�d—i‘i“kÓ"ò 	%ˆAØ4ŒtÔ%¤|Ó4°T¸!±WÕ=Ø×!Ñ! !Õ$ð	%ð �eÑØ×Ñœd 5¨¡>×#6Ñ#6Ó#8Ó9Ô:Ü˜% ™.×-Ñ-Ó/Ó0ò -�Ø˜w™¨Ñ*ò -�AØ 
Ò*Ø"×)Ñ)¨!Õ,ñ-ð-ð �‰>˜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øôU ò 	Úð	ûô" ò KÜ!#§¡¨K¸1Ñ,=¼r¿t¹tÓ!D×!JÑ!J�˜A”ðKûô2 !ò Úðûô !ò Úðüò4 Vùò" (`ùò Uùò Nøô '¬
´HÐ=ò Üð(Ø() u¨Bð0÷ðûôF (4ò !Gð /3 GÜ25°e·m±m³oÓ2F¦Kûð!GûôD  )ò !Ú ð!ûô (1ò !)Ú$(ð!)ús½   Ã	|$Æ|4Ê4}8Ë2~Ð%~Ó<~Õ2~"×,~'
Ø~,ÜAó#A@ó:A@ü$	|1ü0|1ü4=}5ý4}5ý8	~þ~þ	~þ~þ,#ÿÿ	A@	ÿA@ 	Á@ A@	Á@	A@Á@A@Á@	A@%Á@$A@%z\A[a-z]+[\w$]*\Zc           	      óv  — |€	 t        | ||«      }|S t        |«      dk  s|ddt        |«      dz
  …   dk7  rt	        d|› d	�«      ‚|dd
 j                  d«      }t        |«      dk(  rŠ|d   j                  d«      }t        |«      dk(  r(t        |d   |«      }t        dt        |«      dz   «      }nOt        |d   |«      }t        |d   |«      }	t        t        |«      t        |	«      dz   «      }nt	        d|› d�«      ‚| j                  d«      r| dd n| j                  d«      } g }
| D ]!  }	 t        |||«      }|
j                  |«       Œ# t        t        ||
«      «      }|S # t        $ r}| }t        d|› d| ›d�«       Y d}~|S d}~ww xY w# t        $ r}t        d|› d|›d�«       Y d}~Œud}~ww xY w)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¹   r0  r   re  zparam_eval: dimension z can't be parsedr   r$  r   r£  z.param_eval: multidimensional array parameters z not supportedz(/rž   )r×  rÆ   r2   rX   rÖ   r&  r   rÁ   r8   r‹   r'  rÊ  Úzip)rú  rÜ  r„  rÓ  rË  rì   ÚdimrangeÚboundÚlboundÚuboundÚv_evalÚitems               r)   rÚ  rÚ  £  sñ  € ð& €ð	;Ü�Q˜ &Ó)ˆAð ˆô ˆ7ƒ|�aÒ˜7Ñ#3¤S¨£\°!¡^Ð#3Ñ4¸Ò<ÜÐ1°'°Ð:KÐLÓMÐMØ�q˜ˆ}×"Ñ" 3Ó'€HÜ
ˆ8ƒ}˜Òà˜A‘;×$Ñ$ SÓ)ˆäˆx‹=˜AÒÜ ¨¡¨VÓ4ˆEÜ˜Q¤ E£
¨1¡Ó-‰Hä  ¨!¡¨fÓ5ˆFÜ  ¨!¡¨fÓ5ˆFÜœS ›[¬#¨f«+°a©-Ó8‰HäÐIØ#˜9 Nð4ó 5ð 	5ð —L‘L Ô&ˆˆ1ˆR‰¨A×4Ñ4°SÓ9€AØ€FØò ˆð	>Ü˜˜h¨Ó/ˆDð 	�‰�dÕðô 	ŒS�˜6Ó"Ó#€Aà€HøôK ò 	;ØˆAÜÐ'¨ u¨E°!°°bÐ9×:Ð:Øˆûð	;ûô> ò 	>ÜÐ'¨ u¨E°$°¸Ð<×=Ñ=ûð	>ús/   „E( Ä1FÅ(	FÅ1FÆFÆ	F8ÆF3Æ3F8c                 ó  — d| v r`| d| j                  d«       }| | j                  d«      dz   | j                  d«       }t        t        ||«      «      }t	        ||   |   «      S | |v rt	        ||    «      S |D ]†  }t        j                  d|z   dz   t
        j                  «      }|j                  | «      }|sŒA|j                  d«      t	        ||   «      z   |j                  d«      z   } |j                  | «      }|rŒFŒˆ | S )	aƒ  Recursively parse array dimensions.

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

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

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

    Examples
    --------

    * If the line being analyzed is

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

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

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

    * If the line being analyzed is

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

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

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

    * If the line being analyzed is

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

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

    >>> d = 'pa(1)'
    >>> params = dict(pa={1: 3, 2: 5})
    >>> param_parse(d, params)
    3
    r4  Nr   r5  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˜#“;�ˆØ�!—&‘&˜“+˜a‘- §¡¨£Ð-ˆô ”K  vÓ.Ó/ˆÜ�6˜%‘= Ñ'Ó(Ð(Ø	
ˆf‰Ü�6˜!‘9‹~Ðàò 	"ˆAÜ—:‘:Ø$ qÑ(Ð+=Ñ=¼r¿t¹tóˆDð —
‘
˜1“ˆAÚØ—G‘G˜HÓ%Ü˜˜q™	“Nñ#Ø%&§W¡W¨WÓ%5ñ6�à—J‘J˜q“M�ó ð	"ð ˆr(   c                 ó”  — | }t         j                  | «       }|r™t        |«      \  }}t        | |d   |«      }d}| D ]<  }	|	j	                  «       }	|	t
        j                  t
        j                  z   vrd}	||	z   }Œ> |d   dk(  r|dz   }n|dz   }|} | |d   v s| |d   v r| dz   } | |d   v rŒ| |d   v rŒ| |v r6d	}
| t        |
«      z   |v r|
d	z   }
| t        |
«      z   |v rŒ| t        |
«      z   } |r
|d   | <   | S | |d   vr||d   v r|d   |   |d   | <   ni |d   | <   d
|v r%||d
   |d   z   v rt        |d   |    d«      |d   | <   | S )Nr.  Úe_rð   r   r·  Ú_er3  r™   r   r1  r2  r  )
Úanalyzeargs_re_1rÒ   r•  rÔ  r¡   rc   Úascii_lowercaseÚdigitsrÂ   ru  )r)  r/  r3  Úorig_aÚ	a_is_exprr“  r”  ÚatÚnar³   r{  s              r)   Ú	expr2namerB  1  s»  € Ø€FÜ$×*Ñ*¨1Ó-Ð-€IÙÜ#5°eÓ#<Ñ ˆ�yÜ˜q %¨¡-°Ó?ˆØˆØò 	ˆAØ—‘“	ˆAØœ×.Ñ.´·±Ñ>Ñ>Ø�Ø�a‘‰Bð		ð
 ˆb‰6�SŠ=Ø�c‘‰Bà�d‘ˆBØˆØ�5˜‘=Ñ  A¨¨v©Ñ$6Ø�C‘ˆAð �5˜‘=Ò  A¨¨v©Ò$6àˆD�yØˆØ”#�a“&‰j˜DÑ Ø�A‘ˆAð ”#�a“&‰j˜DÒ à”�A“‰JˆÙØˆˆf‰�aÑð €Hð �E˜&‘MÑ!Ø˜˜v™Ñ&Ø#(¨¡=°Ñ#8��f‘˜aÒ à#%��f‘˜aÑ Ø˜%Ñ F¨e°KÑ.@À5ÈÑCVÑ.VÑ$VÜ*¨5°©=¸Ñ+;¸ZÓHˆE�&‰M˜!ÑØ€Hr(   c                 óÒ  — t        | «       t        | «      \  }}d| vrg | d<   g }| d   D ]   }t        || |«      }|j                  |«       Œ" || d<   d| v r;t	        | d   j                  «       «      D ]  \  }}|D ]  }|| d   vsŒi | d   |<   Œ Œ | d   D ]5  }|d   |v sŒd| vrg | d<   |d   | d   vsŒ| d   j                  |d   «       Œ7 d| v r| d   | d   vri | d   | d   <   | S )Nr3  r  r.  r-  rq   r1  r©   )rS  r•  rB  r'  rs  rF  )r/  r“  rð   r3  r)  r{  Úargs1rg  s           r)   rp  rp  V  sG  € Ü�ÔÜ)¨%Ó0Ñ€M�1Ø�UÑØˆˆf‰Ø€DØ�6‰]ò ˆÜ�a˜ Ó%ˆØ�‰�A�ðð €Eˆ&�MØ�%ÑÜ˜U 7™^×1Ñ1Ó3Ó4ò 	*‰HˆAˆuØò *�Ø˜E &™MÒ)Ø')�E˜&‘M !Ò$ñ*ð	*ð
 �6‰]ò 5ˆØˆV‰9˜ÒØ %Ñ'Ø%'��kÑ"Ø�‰y  kÑ 2Ò2Ø�kÑ"×)Ñ)¨!¨F©)Õ4ð5ð �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                 óÆ   — t        | t        «      rddiS t        | t        «      rddiS t        | t        «      rddiS t        | t        «      r| S t        t        | «      «      ‚)Nr4   r7   r5   r¸  )ræ  r8   r:   r¸  rÊ  ÚAssertionErrorrÎ   )r™   s    r)   Ú_ensure_exprdictrG  x  s_   € Ü�!”SÔØ˜IÐ&Ð&Ü�!”UÔØ˜FÐ#Ð#Ü�!”WÔØ˜IÐ&Ð&Ü�!”TÔØˆÜ
œ˜a›Ó
!Ð!r(   c                 ó  — | |v rt        ||    «      S | j                  «       } t        j                  | «      rddiS t        j                  | «      }|r>d|j                  «       v r(|j                  d«      rt        dt        | «      z  «       ddiS t        j                  | «      }|r>d|j                  «       v r(|j                  d«      rt        dt        | «      z  «       ddiS dD ][  }t        | |¬«      j                  d	|z   d	z   «      D �cg c]  }|j                  «       ‘Œ c}D ]  }||v sŒt        ||   «      c c S  Œ] i }t        j                  | «      rt        | d
d ||«      }ngt        j                  | «      }|rP|j                  d«      }t        |j                  d«      ||«      }|rd|v r|d= |s|d   |v rt        ||d      «      S | d   dv rdddidœS |st        dt        | «      z  «       |S c c}w )Nr4   r¸  rq   z:determineexprtype: selected kind types not supported (%s)
r7   r5   )ú+rº  r   r¼  r-  rf  r   r   rk  r   r±  r  r   )r4   rm  z>determineexprtype: could not determine expressions (%s) type.
)rG  r¦   Údetermineexprtype_re_1rÒ   Údetermineexprtype_re_2r  rÓ   r2   rÎ   Údetermineexprtype_re_3r%  r&  Údetermineexprtype_re_4rÔ  Údetermineexprtype_re_5)	r   r.  Úrulesró   Úoprê  r·  rï  Úrns	            r)   rÔ  rÔ  „  s
  € Øˆt�|Ü  T¡
Ó+Ð+Ø�:‰:‹<€DÜ×#Ñ# DÔ)Ø˜IÐ&Ð&Ü×$Ñ$ TÓ*€AÙØ�Q—[‘[“]Ñ" q§w¡w¨v¤ÜØMÔPTÐUYÓPZÑZô\à˜IÐ&Ð&Ü×$Ñ$ TÓ*€AÙØ�Q—[‘[“]Ñ" q§w¡w¨v¤ÜØMÔPTÐUYÓPZÑZô\à˜FÐ#Ð#Ø"ò 1ˆÜ%3°DÀÔ%C×%IÑ%IÈ#ÐPRÉ(ÐUXÉ.Ó%YÖZ �!—'‘'•)ÒZò 	1ˆAØ�DŠyÜ'¨¨Q©Ó0Ô0ñ	1ð1ð 	€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ÙÜØMÔQUÐVZÓQ[Ñ\ô	^à€Hùò+ [s   ÄG>r¹   c                 ó2  — t        | «       d}t        | t        «      rA| D ]:  }|r%|d   dv r|d   t        v rŒt        r|d   t        vrŒ*|t        |||¬«      z   }Œ< |S d}d}d}| d   }|dk(  ryg }	d| v r| d   }d| v rZ| d   }
| d   D ]/  }t        || |	«      }t        |
|   «      rŒ|	j                  |«       Œ1 | d   d	k(  s|	rd
dj                  |	«      z  }d}d| v r9t        | d   j                  «       «      D ]  }|›|t        z   ›|›d| d   |   ›�}Œ | j                  dg «      d d  }|d	k(  rd|v r|j                  d«       |r"|›|t        z   ›ddj                  |«      ›d|›�}d}d| v rt        | d   |t        z   «      }d}d| v rt        | d   |t        z   «      }|dk(  rd}d}d| v r#d| d   z  }| d   |	vr|	j                  | d   «       t        | d   |t        z   |¬«      }t!        | | d   |	|t        z   |¬«      }
d}d| v r
|sd| d   z  }d| v rNd}t        | d   j#                  «       «      D ](  \  }}|›|t        z   ›d|›ddj                  |«      ›d�}Œ* ||z   }|dk(  r|dk(  rd}|›|›|›d|›|›|›d|›|›|›|
›|›|›|›d |›d|›�}|S )!Nr
   r/  r¨  rq   r‰  r˜  r3  r.  rú   z(%s)r$  r  r­   r
  Úcallbackúintent(z) r  r  r¢  r©   z result (%s)r-  rš  z! in %sr  zentry r4  r5  r›  rž  zend )rS  ræ  rs  r#   r$   r�  rB  r  r'  rÛ   rt  r   r~  rË  Úuse2fortranÚcommon2fortranÚvars2fortranrF  )r/  r`  rŠ  rd  rc  r¥  rq   r3  Ú	blocktypeÚargslr.  r)  r  r{  Ú
intent_lstr  r  r©   r-  ÚmessÚentry_stmtsrô  s                         r)   r�  r�  ±  s>  € ô �ÔØ
€CÜ�%œÔØò 	LˆAÙ�Q�w‘ZÐ#=Ñ=Ø�V‘9¤	Ñ)ØÝ  6¡´)Ñ!;ØØÔ(¨¨C¸lÔKÑK‰Cð	Lð ˆ
Ø€FØ€DØ€DØ�g‘€IØ�IÒØØ€EØ��Ø�V‰}ˆØ��Ø�V‰}ˆØ�v‘ò 	 ˆAÜ˜!˜U EÓ*ˆAÜ$ T¨!¡WÕ-Ø—‘˜Q•ð	 ð �‰>˜ZÒ'©5Ø˜CŸH™H U›OÑ+ˆDØÐØ˜UÑ"Ü�eÐ.Ñ/×4Ñ4Ó6Ó7ò 	RˆAá  #¬¢-²°EÐ:LÑ4MÈaÒ4Pð RÑð	Rð —‘˜8 RÓ(©Ð+€JØ�JÒ :°Ñ#;Ø×Ñ˜*Ô%Ùá,¨c´G«mØŸH™H ZÕ0±$ð8Ðð €CØ��~Ü˜% ™,¨¬g©Ó6ˆØ€FØ�5ÑÜ  h¡°´w±Ó?ˆØÐ"Ò"ØˆØ€FØ�5ÑØ %¨¡/Ñ1ˆØ�‰? %Ñ'Ø�L‰L˜˜x™Ô)Ü˜E &™M¨3´©=À|ÔT€DÜØˆu�V‰}˜e S¬7¡]ÀôO€Dà€DØ��™|Ø˜5 ™=Ñ(ˆØ�%ÑØˆÜ˜˜w™×-Ñ-Ó/Ó0ò 	I‰DˆAˆqá(¨#´«-º¸C¿H¹HÀQ½KðI‰Kð	Ið �kÑ!ˆØ�LÒ  T¨^Ò%;Øˆá‰V’Y¡¡dªF±DÑ:JÉCÑQUÑW]Ñ_cÒehÒjsÑuyð{€Cà€Jr(   c           
      óÄ   — d}t        | j                  «       «      D ]A  }|dk(  r|›|›ddj                  | |   «      ›�}Œ$|›|›d|›ddj                  | |   «      ›�}ŒC |S )Nr
   rÃ  zcommon r$  zcommon /z/ )rs  rt  rÛ   )r  r`  rd  r{  s       r)   rV  rV  ü  se   € Ø
€CÜ�&—+‘+“-Ó ò LˆØ�Š=Ù%(ª#¨s¯x©x¸¸q¹	Ô/BÐC‰Cá*-ªs²A°s·x±xÀÀqÁ	Ô7JÐK‰Cð	Lð
 €Jr(   c                 óœ  — d}t        | j                  «       «      D ]­  }|›|›d|›d�}| |   i k(  r|r|d   dk(  r|d d }Œ%d| |   v r| |   d   rd|z  }d| |   v r]| |   d   rUd}t        | |   d   j                  «       «      D ]1  }|| |   d   |   k(  r|›|›|›�}d}Œ|›|›|›d	| |   d   |   ›�}d}Œ3 |sŒ |d   dk(  sŒ©|d d }Œ¯ |S )
Nr
   zuse r$  r   rÅ  z%s only:rÇ  r­   z=>rK  )r  r`  rd  ró   r³   r{  s         r)   rU  rU    s  € Ø
€CÜ�#—(‘(“*Óò ˆÙ"¢CªÐ+ˆØˆq‰6�RŠ<Ù�s˜2‘w #’~Ø˜#˜2�h�ØØ�S˜‘VÑ  A¡ v¢Ø Ñ$ˆCØ�C˜‘F‰?˜s 1™v eš}ØˆAÜ˜#˜a™& ™-×,Ñ,Ó.Ó/ò �Ø˜˜A™˜u™ aÑ(Ò(Ù&)©1©aÐ0�CØ‘Aá*-©q²!°S¸±V¸E±]À1Ò5EÐF�CØ‘Aðò �3�r‘7˜c“>Ø�c�r�(‰Cð%ð& €Jr(   c                 ó–   — | d   }g }|D ]-  }	 t        «       d|z     } || «      sŒ|j                  |«       Œ/ |S # t        $ r Y Œ=w xY w)Nr
  zisintent_%s)Úglobalsr'  rþ  )re  r­  rd  r
  rc  s        r)   Útrue_intent_listra    se   € Ø
ˆh‰-€CØ
€CØò #ˆð	#Ü“	˜-¨&Ñ0Ñ1ˆAñ ��vØ—
‘
˜6Õ"ð#ð €Jøô ò 	Ùð	ús   Ž<¼	AÁAc           	      óü  — t        | «       d}g }|D ]  }|| d   v sŒ|j                  |«       Œ d| v r3| d   D ]+  }||v r||vsŒ|j                  |«       Œt        d|z  «       Œ- d| v r|j                  | d   «       |s4t	        |j                  «       «      D ]  }||vsŒ|j                  |«       Œ |D �]-  }d||   v r7||   d   D ],  }||v sŒd||   v sŒ|||   d   v sŒt        d|›d|›d	�«       Œ. d
| v rn|| d
   v rgt        ||   «      r	|›|›d|›�}|›|›d|›�}t        ||   «      r	|›|›d|›�}||v rd||   vrŒ�d}	| d   D ]  }
||
d   k(  sŒ|
d   dk(  sŒd}	 n |	rŒ´||vrt        |«       t        d|z  «       ŒÒ|| d   k(  r| d   dk7  s| j                  d«      rŒôd||   vr>d||   v rd||   d   v r||v r	|›|›d|›�}�Œt        ||   «       t        d|z  «       �Œ9||   d   }|dk(  rd||   v r|›d||   d   ›d�}i }d||   v r	||   d   }nd||   v r||   d   }d |v r|d    d!v r|›d"|d    ›d�}n>|›d |d    ›�}n3d#|v r |›d$|d#   ›�}d%|v r|›d&|d%   ›d�}nd'|z  }nd%|v r|›d(|d%   ›d�}d)}d||   v rN||   d   D �cg c]  }|d*vr|‘Œ
 }}|rd+|v rd,|v r|j                  d,«       |r|›d-d.j                  |«      ›�}d.}d/||   v r!|›|›d0d.j                  ||   d/   «      ›d�}d.}d1||   v r+t        ||   «      }|r|›|›d2d.j                  |«      ›d�}d.}d3||   v r!|›|›d4d.j                  ||   d3   «      ›d�}d.}d||   v r!|›|›d5d.j                  ||   d   «      ›d�}d.}d6||   v rF||   d6   }||   d   d7v r)	 t        |«      }d|j                  ›d.|j                   ›d�}|›d8|›d6|›�}n|›d8|›�}|›|›|›�}�Œ0 |S c c}w # t"        $ r Y Œ/w xY w)9Nr
   r.  r…  z7vars2fortran: Confused?!: "%s" is not defined in vars.
r§  rr  z;vars2fortran: Warning: cross-dependence between variables "z" and "rµ  r1  zintent(callback) z	external z	optional r4   r   r-  rq   r/  rú   r   z/vars2fortran: No definition for argument "%s".
r©   rk  r  z-vars2fortran: No typespec for argument "%s".
rh   ro  r4  r5  rl  rm  r   )r   r£  z*(rX   z(len=rD  z,kind=z%s)z(kind=r­   )r  z
intent(in)zintent(out)r½  r$  r  z
dimension(r
  rT  rq  zcheck(zdepend(rn  )r¸  r  z :: )rS  r'  ro   rå  rs  rt  r  Ú
isoptionalÚshowr2   r~  rË  rÛ   ra  r×  r5   ÚimagrÆ   )r/  r.  r3  r`  rŠ  rd  Únoutr)  r!  rá   rg  Úvardefrð  r³   rë   rñ  r­  rú  s                     r)   rW  rW  ,  s<  € Ü�ÔØ
€CØ€DØò ˆØ��f‘ÒØ�K‰K˜�Nðð �uÑØ�|Ñ$ò 	TˆAØ�D‰yØ˜D’=Ø—K‘K •NäØNÐQRÑRõTð	Tð �UÑØ�‰�E˜*Ñ%Ô&ÙÜ�d—i‘i“kÓ"ò 	ˆAØ˜Š}Ø—‘˜A•ð	ð ó g,ˆØ�t˜A‘wÑØ˜!‘W˜XÑ&ò n�Ø˜’9 ¨T°!©WÒ!4¸¸dÀ1¹gÀhÑ>OÒ9OÝÚghÒjkÐlõnðnð ˜%Ñ A¨¨{Ñ);Ñ$;Ü   a¡Ô)Ù36º¹QÐ?�Ù'*ªC±Ð3ˆCÜ˜$˜q™'Ô"Ù+.²±QÐ7�Ø�D‰y˜Z¨t°A©wÑ6ØØˆDØ˜6‘]ò �Ø˜˜&™	“> a¨¡j°JÓ&>Ø�DÙðñ ØØ�D‰=Ü�ŒJÜÐFÈÑJÔKØØ��f‘ÒØ�W‰~ Ò+¨u¯y©y¸Ô/Bð
 Ø˜T !™WÑ$Ø˜T !™WÑ$¨°t¸A±w¸zÑ7JÑ)JØ˜‘9Ù/2²C¹Ð;�CÙÜ��a‘ŒMÜÐDÀqÑHÔIÙØ�a‘˜Ñ$ˆØ�VÒ 
¨d°1©gÑ 5Ú!'¨¨a©°Ó)<Ð=ˆFØˆØ˜T !™WÑ$Ø˜A‘w˜~Ñ.‰HØ˜t A™wÑ&Ø˜A‘w˜~Ñ.ˆHØ�(‰?Ø˜‰} 
Ñ*Ú&,¨h°s«mÐ<‘â$*¨H°SªMÐ:‘à˜Ñ Ú(.°¸²Ð@�Ø˜XÑ%Ú.4°h¸vÓ6FÐG‘Fà" fÑ-‘FØ˜8Ñ#Ú*0°(¸6Ó2BÐC�ØˆØ˜˜a™Ñ Ø# A™w zÑ2ö .˜!Ø Ñ,ò ð .ˆDð .á °Ñ 4¸È$Ñ9Nð —‘˜MÔ*ÙÚ%+¨S¯X©X°d¬^Ð<�Ø�Ø˜$˜q™'Ñ!áš˜3Ÿ8™8 D¨¡G¨KÑ$8Õ9ð;ˆFàˆAØ�t˜A‘wÑÜ" 4¨¡7Ó+ˆCÙÙ-3²Q¸¿¹À½ÐF�ØˆAØ�d˜1‘gÑÙ(.²°3·8±8¸DÀ¹GÀGÑ<LÕ3MÐNˆFØˆAØ�t˜A‘wÑáš˜3Ÿ8™8 D¨¡G¨HÑ$5Õ6ð8ˆFàˆAØ�$�q‘'‰>Ø�Q‘˜‘ˆAØ�A‰w�zÑ"Ð&CÑCðÜ˜Q›‘AØ%&§V£V¨Q¯V«VÐ4�Aò '-ªa±Ð3‰Fâ#)©1Ð-ˆFÙ™s¡FÐ+ŠðOg,ðP €JùòQ.øôD !ò Ùðús   ÊO*Î#(O/Ï/	O;Ï:O;c                 ó4  — t        dd«       t        | t        «       t        dd«       g at	        t
        d   «      }t        dd«       t        D ](  }t        d|j                  › d�d«       t        ||«      }Œ* t        dd«       t        |«      }t        |z   S )NzReading fortran codes...
r   zPost-processing...
z"Applying post-processing hooks...
z  r¹   zPost-processing (stage 2)...
)
r2   rÙ   r9  r   ro  r   Úpost_processing_hooksÚ__name__Útraverserb  )ÚfilesÚpostlistÚhooks      r)   Úcrackfortranro  ²  s–   € ô Ð(¨!Ô,Ü�Eœ9Ô%ÜÐ" AÔ&Ø€KÜœ 1™Ó&€HÜÐ1°1Ô5Ü%ò ,ˆÜ�"�T—]‘]�O 2Ð&¨Ô*Ü˜H dÓ+‰ð,ô Ð,¨aÔ0Ü˜(Ó#€HÜ˜Ñ!Ð!r(   c                 óD   — t        | «      dz   }d}dt        z  }||z   |z   S )Nr¹   zE!    -*- f90 -*-
! Note: the context of this file is case sensitive.
z�
! This file was auto-generated with f2py (version:%s).
! See:
! https://web.archive.org/web/20140822061353/http://cens.ioc.ee/projects/f2py2e
)r�  Úf2py_version)r/  ÚpyfÚheaderÚfooters       r)   Úcrack2fortranru  Ã  s<   € ô ˜5Ó
! DÑ
(€Cð€Fðô ñ	€Fð
 �C‰<˜&Ñ Ð r(   c                 óx   — t        | t        «      xr) t        | «      dk(  xr t        | d   t        t        f«      S )Nr0  r   )ræ  ÚtuplerX   r8   rÂ   )Úobjs    r)   Ú_is_visit_pairry  Ò  s8   € Ü�sœEÓ"ò /Ü�C“˜A‘ò/ä˜3˜q™6¤C¬ :Ó.ð0r(   c                 óô  — t        | «      r1| d   dk(  r| S  || ||g|¢­i |¤Ž}|�t        |«      sJ ‚|S | }| \  }} nd| f}d}t        | t        «      rFg }t        | «      D ]5  \  }	}
t	        |	|
f|g|¢­||gz   |dœ|¤Ž\  }}|€Œ%|j                  |«       Œ7 nYt        | t        «      rGt        «       }| j                  «       D ])  \  }}
t	        ||
f|g|¢­||gz   |dœ|¤Ž\  }}|€Œ%|||<   Œ+ n| }|€|S ||fS )aí  Traverse f2py data structure with the following visit function:

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

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

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

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

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

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

        If the return value is None, the content of obj will be
        traversed, otherwise not.
        """
    r   rU  N)Úparentsr©   )ry  ræ  rs  rß  rk  r'  rÊ  rF  )rx  Úvisitr{  r©   r3  ÚkwargsÚ
new_resultÚparentÚ
result_keyr[   r  Ú	new_indexÚnew_itemrŽ  Únew_keyÚ	new_values                   r)   rk  rk  Ø  s}  € ô8 �cÔØˆq‰6�^Ò#àˆJÙ˜3 ¨ÐA°$ÒA¸&ÑAˆ
ØÐ!Ü! *Ô-Ð-Ð-ØÐØˆØ‰ˆ
‘Cà˜�ˆØˆ
ä�#”tÔØˆ
Ü% c›Nò 	,‰LˆE�5Ü"*¨E°5¨>¸5ð #Kà;?ñ#KØ3:¸f¸XÑ3EØ28ñ#KàCIñ#KÑˆI�xð Ñ$Ø×!Ñ! (Õ+ñ	,ô 
�CœÔ	Ü“Vˆ
ØŸ)™)›+ò 	0‰JˆC�Ü!)¨3°¨,¸ð "Jà:>ñ"JØ29¸V¸HÑ2DØ17ñ"JàBHñ"JÑˆG�Yð Ñ"Ø&/�
˜7Ò#ñ	0ð ˆ
àÐØÐØ�zÐ!Ð!r(   c                 óî  — |d   \  }}| \  }}d„ }	|dv r|d   d   dk(  sJ ‚|d   d   }
n|dk(  r|d	   d   dk(  sJ ‚|d	   d   }
nd
}
d
}|
�0|}|
j                  «       D ]  \  }}t        |«      sŒ |	||«      }Œ nV|dk(  rQ|d	   d   d   }
|}|
j                  «       D ]1  \  }}t        |«      sŒt        j                  d|z   dz   d|z   |«      }Œ3 |�"||k7  rt	        d|› d|› d|› d|› d�	d«       ||fS y
)aü  Previously, Fortran character was incorrectly treated as
    character*1. This hook fixes the usage of the corresponding
    variables in `check`, `dimension`, `=`, and `callstatement`
    expressions.

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

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

    r   c                 óz   — t        j                  d| z   dz   | |«      }t        j                  d| z   dz   | |«      }|S )Nz[*]\s*\br™  z\b\s*[\[]\s*0\s*[\]])r¾   rÖ  )Úvarnamer  s     r)   Ú	fix_usagez8character_backward_compatibility_hook.<locals>.fix_usage,  sB   € Ü—‘�{ WÑ,¨uÑ4°g¸uÓEˆÜ—‘�u˜w‘Ð)@Ñ@Ø ó'ˆàˆr(   )r  rq  éýÿÿÿr   r.  r   rn  rž   NÚcallstatementz
(?<![&])\br™  rŸ   zcharacter_bc_hook[r—  z]: replaced `z` -> `z`
)rF  Úischaracterr¾   rÖ  r2   )r3  r{  r©   r3  r}  Ú
parent_keyÚparent_valuerŽ  r  rˆ  Ú	vars_dictr„  r‡  Úvds                 r)   Ú%character_backward_compatibility_hookr�    sv  € ð  ' r™{Ñ€J�Ø�J€Cˆòð Ð+Ñ+Ø�r‰{˜1‰~ Ò'Ð'Ð'Ø˜B‘K ‘N‰	Ø	�ŠØ�r‰{˜1‰~ Ò'Ð'Ð'Ø˜B‘K ‘N‰	àˆ	à€IØÐØˆ	Ø$Ÿ?™?Ó,ò 	:‰KˆG�RÜ˜2�Ù% g¨yÓ9‘	ñ	:ð 
�Ò	Ø˜B‘K ‘N 6Ñ*ˆ	Øˆ	Ø$Ÿ?™?Ó,ò 	O‰KˆG�RÜ˜2�ô ŸF™FØ! GÑ+¨eÑ3°S¸7±]ÀIóO‘	ð		Oð ÐØ˜Òô
 Ð(¨¨°A°c°Uð ;"Ø"' ¨¨y¨k¸ð>Ø?@ôBà�YÐÐð r(   Ú__main__r£  z-quietz-verboser0  z-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form.
z-skipemptyendsz--ignore-containsz-f77z-f90r°   z-hz-showz-mrº  zUnknown option %s
z	OSError: a    Warning: You have specified module name for non Fortran 77 code that
  should not need one (expect if you are scanning F90 code for non
  module blocks but then you should use flag -skipemptyends and also
  be sure that the files do not contain programs without program
  statement).
z Writing fortran code to file %s
r‚  )r   )r   )r$  )rP  r,   )r
   N)Nr
   )r
   )NN)r   r   )r¹   F)r
   F)×Ú__doc__r-   rc   rÃ   r¾   r†   rÌ  rÉ  rŒ   Úpathlibr   rƒ   ÚImportErrorr
   r   Úauxfuncsr   Úversionrq  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«   rd  rÙ   ÚbeforethisafterÚfortrantypesrL  rÛ  rI  rJ  Úgroupbegins77rÌ   Úgroupbegins90rÍ   Ú	groupendsrG  ÚendifsrF  ÚmoduleproceduresrR  rK  r<  r=  r?  r@  rC  rD  rE  r>  rA  rB  rN  rQ  rU  rM  rO  rP  rH  ÚSr7  r8  rÑ   r*  rS  Úcrackline_bind_1rÎ  r9  rT  r%  ri  r|  r  r…  r‘  r’  r“  rÕ  r´  r  r�  rˆ  rŽ  r•  rV  rç  rÏ  rÒ  rl  rm  rG  r4  r"  r+  rÐ  rÜ  ru  rv  rw  rQ  rS  rV  r^  rb  ro  rs  rq  rt  r•  r—  rœ  r¡  r¤  r¥  r«  r¯  rµ  rº  rÍ  rÓ  rë  rí  ré  rr  r;  rÚ  r   rB  rp  rJ  rK  rL  rM  rN  rG  rÔ  r�  rV  rU  ra  rW  ri  ro  ru  ry  rk  r�  r'  rj  rl  Úfuncsrc  Úf2Úf3ÚshowblocklistÚargvrë   ro   rÎ   r‰   rÝ   ÚOSErrorÚdetailrm  rr  r/   r'   r(   r)   ú<module>r¨     sä  ðñIóT Û Û Û 	Û 	Û Û Û Ý ðÛõ ô
 Ý à×"Ñ"€ð €	Ø€Ø	€Ø
€Ø
€Ø€Ø€Ø€Ø€Ø€Ø
€ð €Ø€Ø€Ø€ØÐ Ø€Ø€
Ø€Ü˜2Ð€	Ø€	Ø€Ø€Ø€	ØÐ Ø€Ø€	Ø€Ø€ò#óLð €„ØÐ Ø	!ò 3€AØ)¨6Ð2Ð˜Òð3à	ò 6€AØ)¨9Ð5Ð˜Òð6à€Ø€ð
ò 
€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ðD€ð D€Øˆr�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€à�B—J‘J˜ð 24ñ  4Ø57·T±Tó;Ø<CðDÐ ð (€Ø�—‘Ø�r˜=¨-¸Ð>Ñ>ÀÇÁóFØGNðO€àØGñHàñ€ð �—‘Ø�r˜=¨-¸Ð>Ñ>ÀÇÁóFØGNðO€ð7€	àˆR�Z‰ZØ�r˜9 i°Ð6Ñ6¸¿¹ó>Ø?DðE€
ð
 €àˆr�z‰zØ�y &¨&°$Ð7Ñ7¸¿¹ó?Ø@GðH€ð )Ð Ø#˜Ÿ™Ø�rÐ+Ð-=¸tÐDÑDÀbÇdÁdóLàðÐ ð �"—*‘*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à�2—:‘:˜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€à�2—:‘:ØÐ:Ñ:¸B¿D¹DóBØCNðOÐ à�—
‘
˜?ð .Qñ QØRT×RVÑRVóXØYaðb€à�2—:‘:ØÐ@Ñ@À"Ç$Á$óHØITðUÐ àˆb�j‰jØÐ0Ñ0°"·$±$ó8Ø9?ð@€àˆb�j‰jØÐ0Ñ0°"·$±$ó8Ø9?ð@€àˆr�z‰zØÐ2Ñ2°B·D±Dó:Ø;BðC€à�—‘ØÐ6Ñ6¸¿¹ó>Ø?HðI€à�—
‘
ØÐ4Ñ4°b·d±dó<Ø=EðF€àˆR�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Ð à�2—:‘:Ø9¸2¿4¹4óAØBMðNÐ òò(ð �—‘ÐAÀ2Ç4Á4ÓH€Ø�2—:‘:ÐAÀ2Ç4Á4ÓHÐ Ø�R—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€ð !�b—j‘jØ@À"Ç$Á$óHÐ à�—
‘
Ø;ó=€àˆr�z‰zØHóJ€ð $˜Ÿ™Ð$AÀ2Ç4Á4ÓHÐ òòò ò ò DòDò(ð4 ˆb�j‰jÐEÀrÇtÁtÓL€Øˆr�z‰zØIÈ2Ï4É4óQ€àˆr�z‰zØ9¸2¿4¹4óA€à�—‘ð2à35·4±4ó9€ð �"—*‘*ð Gð  IK÷  IMñ  IMóN€òò"òJfòR8,óxó6óóòòóó<ó@]ò@òD(óV*òZ$ó&#ð �"—*‘*˜^¨R¯T©TÓ2€òEðP ˆr�z‰zÐ,¨b¯d©dÓ3€òò,ò4ò$"òó ð& (*ó bòJ(ð �"—*‘*˜WÓ%×+Ñ+€òò DðN �2—:‘:Ð1°2·4±4Ó8Ð ó;ò|Mð`  ó "òJð4 $˜Ÿ™Ð$6¸¿¹Ó=Ð Ø#˜Ÿ™Ð$DÀbÇdÁdÓKÐ Ø#˜Ÿ™Ø1°2·4±4ó9Ð à#˜Ÿ™ M°2·4±4Ó8Ð Ø#˜Ÿ™Ð$EÀrÇtÁtÓLÐ ò	"ð )+ó (óZHóVóò0ó}ðF Ð ò"ò"!ò0ð "$¨Dó ?"òD9 õx × Ò ÐBÔ Cð ˆzÓØ€EØ€EØ	€AØ	
€BØ	
€BØ€MØ�XŠX�a�bˆ\ò 1ˆØ�Š7ØØˆq‰T�SŠ[Ø‰AØ�(Š]ØˆEØ‰GØ�*Š_ØˆGØ‰EØ�&Š[ÝÙØVÐXYô[àˆMØ"‰NØÐ"Ò"Ø‰MØÐ%Ò%Ø‰NØ�&Š[ØˆIØ"‰NØ�&Š[ØˆIØ#ˆNØ‰MØ�$ŠYØ‰BØ�'Š\Ø‰MØ�$ŠYØ‰BØˆq‰T�SŠ[ÙÐ)©D°«GÑ3Õ4ÙØˆBØ‰KÙØˆBØ‰MÙð2Ù�Q“—’”Ø—’˜Q•ð �LŠL˜�Oðc1õd �­}Ùð ð ô	ñ ˜EÓ"€HÝÙÐ3±d¼;Ó6GÑGÈÔKÙ˜HÓ%ˆÙ”+˜sÓ#ð 	 qØ�GŠG�CŒL÷	áÙˆX�ð ðQ øðGn ò ØÓðûðpo ò 2Ù˜) F :¨RÐ0×1Ò1ûð2ú÷"	ð 	ús5   ªk è)kê'k<ëkëkëk9ë"k4ë4k9ë<l