Ë
    õU.j^S ã                   ó  — 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© ó    úYC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\numpy/f2py/crackfortran.pyÚreset_global_f2py_varsr*   Å   s�   € ð €IØ€NØ€EØ€GØ€GØ€KØ€MØ€MØ€NØ€KØ€Eà€LÜ˜rÐ"€IØ€LØ€KØ€OØ€KØ€MØ€KØÐØ€OØ€MØ€IØ€IØ€MØÑr(   c                 ó¨   — t         sy t        sE|r#t        j                  j	                  t
        «       t        j                  j	                  | «       y y ©N)r   r   ÚsysÚstdoutÚwriter    )ÚlineÚflags     r)   Úoutmessr2   ë   s:   € õ ØÝÙÜ�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   € Ù%*Ó+¡U˜rŒJ�r�N UÑ+Ð+ùÒ+ó   …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           
      ón  — |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}�n||	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'd*|j9                  «       v s|s|j9                  «       n|}n|}|}|}|du}nt]        d+tI        t        «      z  «      ‚d,|j_                  «       dz
  t        |fz  a|jU                  |«      }|rÿ|jW                  d-«      }t.        j0                  ja                  |«      rtc        ||d¬.«       nÈt.        j0                  je                  t        «      gtf        z   }d}|D ]S  }t.        j0                  ji                  ||«      }t.        j0                  ja                  |«      sŒCd}tc        ||d¬.«        n |sAtG        d/tI        |«      ›d0t.        jj                  ji                  |«      ›d1�«       n ||«       |}�Œü|r|j9                  «       }n|}|}d,|j_                  «       dz
  t        |fz  a|jU                  |«      }|rÿ|jW                  d-«      }t.        j0                  ja                  |«      rtc        ||d¬.«       nÈt.        j0                  je                  t        «      gtf        z   }d}|D ]S  }t.        j0                  ji                  ||«      }t.        j0                  ja                  |«      sŒCd}tc        ||d¬.«        n |sAtG        d/tI        |«      ›d0t.        jj                  ji                  |«      ›d1�«       n ||«       da|jm                  «        |r
 |dd«       y\	  a aaaaaaaayc c}w # t$        $ r6}t'        d|j)                  «       › d|j+                  «       › d|› d�«      ‚d}~ww xY w)2zõ
    Read fortran codes from files and
     1) Get rid of comments, line continuations, and empty lines; lower cases.
     2) Call dowithline(line) on every line.
     3) Recursively call itself when statement "include '<filename>'" is met.
    NFr
   z*\s*include\s*(\'|")(?P<name>[^\'"]*)(\'|")z(?P<line>.*)&\s*\Zz(\s*&|)(?P<line>.*)z.*?'''r   )r
   r
   Ú é
   )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
Úintentz6Flag sourcecodeform must be either 'fix' or 'free': %szLine #%d in %s:"%s"
	rq   )Ú
dowithlineÚistopz-readfortrancode: could not find include file z in ú. Ignoring.
)7r   r    r!   r   r   Úbeginpatternr   r   r   ÚreÚcompileÚIÚrangeÚstrÚ	fileinputÚ	FileInputr—   r£   ÚUnicodeDecodeErrorÚ	Exceptionr’   ÚlinenoÚisfirstliner†   r‡   Úsplitextr   r    r¡   ÚCOMMON_FIXED_EXTENSIONSr¥   Ú_has_fix_headerr«   Úbeginpattern77Úbeginpattern90r2   ÚreprÚ
expandtabsÚreplaceÚsplit_by_unquotedr¦   rX   ÚmatchÚgroupro   ÚrstripÚ
ValueErrorÚ
filelinenoÚisfileÚreadfortrancodeÚdirnamer%   ÚjoinÚpathsepÚclose)Úffiler»   r¼   ÚsaveglobalsÚlocaldolowercaseÚcontÚ	finallineÚllÚincludelineÚcont1Úcont2Ú
mline_markÚl1rv   ÚspacedigitsÚfinÚlÚmsgÚextÚis_f2py_directiveÚrlÚ_Úorigfinalliner™   ÚlcÚmÚfnÚinclude_dirsÚ	foundfileÚinc_dirÚfn1s                                  r)   rÙ   rÙ   e  sd  € ñ Ü!Ô#3´_ÄnÔV_Üœ%¤¬+ð6ˆà�‚{ØÜ"Ðð €DØ€IØ	€BÜ—*‘*Ø5´r·t±tó=€Kä�J‰JÐ,Ó-€EÜ�J‰JÐ-Ó.€EÜ—‘˜IÓ&€JÙÙ�2�rÔØ�F€BˆØ�%¬U°2¬YÓ7©Y rœ3˜r�7¨YÑ7Ñ7€KØÐÜ
×
Ñ
˜e¬hÔ
7€CØ
ð	Ø—‘“ˆAñ ÙØ�?‰?ÔØ!ÐØ!Ÿl™l›nˆOØˆKØˆBØˆIØ"ˆNÜ—'‘'×"Ñ"¤?Ó3°AÑ6ˆCÜ”OÓ$×+Ñ+×1Ñ1Ó3Ô7NÑNÜ(¨Ô+¬¸qÔ/AØ‘	Ü¤Ô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�Ø�	Ø "‘á#ð
 /7¸"¿(¹(»*Ñ.DÑL] §¡¤
Ðce‘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Ô!Øˆñ ñB Ø—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ˆÐ% ¸È	Ø˜% ©+ùòI 8øô "ò 	ÜØ+¨C¯L©L«NÐ+;¸1¸S¿Z¹Z»\¸NØ   ð &ðóð ûð	ús   Ã]0Ã<]5 Ý5	^4Ý>1^/Þ/^4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*\(.*?\).*rº   )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)  ®  sV   € Ø
€AÜ˜HÓ%×+Ñ+¨EÖ2ˆÛˆAØ—	‘	˜!˜SÓ!‰Að à	�‰��ð 3ð �8‰8�A‹;Ðr(   z"\s*(?P<result>\b[a-z]+\w*\b)\s*=.*z \s*(?P<bind>\b[a-z]+\w*\b)\s*=.*zH\s*bind\(\s*(?P<lang>[^,]+)\s*,\s*name\s*=\s*"(?P<lang_name>[^"]+)"\s*\)c                 ó¬  — 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)   r8  r8  º  s,  € ô )¨¨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   r3  r   ú@(@r4  ú@)@r'   )r0   rë   Úfr³   s       r)   rS  rS  Y  sl   € Ø
€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   ú()Ú@r3  r   r4  )rÒ   rÏ   )r0   Úcommarë   rb  r  r  s         r)   r$  r$  k  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 )Nr`  r3  ra  r4  )rÑ   )r0   r™   s     r)   Úunmarkouterparenrh  ~  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�Ü" 4¨¨EÓ2‘ñ à�.Ò Ü" 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)Nrj  r   r   )ÚgetÚ_intentcallbackpatternrÓ   )Úvdeclr(  s     r)   Ú_is_intent_callbackr€  ¶  s-   € Ø�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Ñ$4˜q�—‘•Ð$4Ò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   r2  r©   Úschemer3  r4  )r�  rS  Ú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 }?d}/d}@d}A|D ]R  }2|2dyk(  r|/dz   }/Œ|/d5k\  r0@j1                  «       }@|@sdˆ}@|?jE                  @Ag«       |/d&z
  }/d}@d}A|/d&z  r@|2z   }@ŒNA|2z   }AŒT @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 �Œ¨w 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}"~"�Œod}"~"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 �ŒMw 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.
    r5  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  )rj  Ú_BLOCK_DATA_r
   )Ú	interfacerš  rœ  z2analyzeline: No name/args pattern found for line.
r"  z<analyzeline: argument list is malformed (missing argument).
)r  r  r2  r1  rü   rú   r   r/  ©rž  rœ  z&analyzeline: Creating module block %s
Úmoduler0  zDanalyzeline: Creating additional interface block (groupcounter=%s).
rž  Úunknown_interfaceÚ:Úunknown_r­   rð   r  Úprefixr©   é   r  Úvarnamesrj  r  ©rú   rü   ÚbindlangÚlangÚ	lang_namer  Úvariable)r  rº   r  r  r  r  r  r  ú::rº   ra  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
  rm  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"
rk  rl  rn  Ú-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  Ú'Ú/r3  r4  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©W¨˜3 !œ8©Wùs   ‚r   z*analyzeline: changing init expression of "ú") to "r  z//Ú_BLNK_r  zR\A\s*(?P<name>\b\w+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\Zrr  Ú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   r9  r:  r   r¡   r¿   rÓ   rÁ   r‡  Údictr”  rw   r$  r¦   Úremover   r   r   rÏ   rÑ   rr   rr  rs  r&  ÚcopyÚdeepcopyr[   rÇ   r‰  Úcrackline_bindlangr{  rK  Úcracktypespec0Ú
updatevarsÚfindrS  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ð   r2  r©   Ú	bindclineÚxÚ
needmoduleÚneedinterfaceÚitrz  ÚbindcdatÚtr4   ÚselectorÚattrÚedeclÚ	last_namerã   ÚiÚplÚchr¶  r]  ÚapÚinitexprrƒ  ÚttÚvrì   Úimplrw  r^  Ú
kindselectÚ
charselectrn  r™   ÚbegcÚendcÚoÚdlÚilrb  Ú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)   rU  rU  á  sœ  € ð �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Ù'H !ð  Ÿg™g�iØ'HñJó K‰Dð ˆDØ�‰:Ø˜‘*Ø—‘˜B”ð ˜’*äØOôQð ˆ
ØˆàÐ&Ñ&ØˆMØœZ¬Ñ5Ñ5ØØœ:¤lÑ3°FÑ;Ñ;ØÜ¤Ô-�Ø�f‘: Ó%Ùð .ð ”z¤,Ñ/°Ñ=Ñ=ØØ)°jÑAÀ$ÑGˆEÝœ\¨RÒ/´LÀAÒ4EÜ'¨!Ñ+ˆLØˆJØÐ?Ñ?Ø !�ä# aÑ'ˆØ#%Œ
”<Ñ Ø"$Œ	”,ÑÙÜ˜Š{ÜÐAÜœ]Ó+ñ,Ø-.ô0à&.ŒI”lÑ#Ø0?ŒJ”|Ñ$ WÑ-Ü/<ŒJ”|Ñ$ VÑ,Ø/1ŒJ”|Ñ$ VÑ,Ø/1ŒJ”|Ñ$ VÑ,Ø46ŒJ”|Ñ$ [Ñ1Ø57ŒJ”|Ñ$ \Ñ2Ø/1ŒJ”|Ñ$ VÑ,Ü'¨!Ñ+ˆLØ')ŒJ”|Ñ$Ø&(ŒI”lÑ#ÙÜ˜Š{ÜÐ_Ü ñ"Ø#$ô&à&1ŒI”lÑ#Ø0;ŒJ”|Ñ$ WÑ-Ø/BŒJ”|Ñ$ VÑ,äœ<¨!Ñ+Ñ,¨VÓ4´jÄÐPQÑAQÑ6RÐSYÒ6Zð0\ŒJ”|Ñ$ VÑ,à/1ŒJ”|Ñ$ VÑ,Ø46ŒJ”|Ñ$ [Ñ1Ø57ŒJ”|Ñ$ \Ñ2Ø/1ŒJ”|Ñ$ VÑ,Ü'¨!Ñ+ˆLØ')ŒJ”|Ñ$Ø&(ŒI”lÑ#Ø"'Œ	”,ÑØ,1Œ
”<Ñ  Ñ)ÙØ §¡¨c°3Ó 7Ñ7ˆDØ-.¯W©W°XÓ->Œ
”<Ñ  Ñ*Ü+5°dÓ+;Œ
”<Ñ  Ñ(Ø-3Œ
”<Ñ  Ñ*Ü˜1ÒÜ/>ŒJ”|Ñ$ VÒ,å¤°Ò!2äœ|¨aÑ/Ñ0°Ó8½/ð4K”
œ<Ñ(¨Ò0ô œ|¨aÑ/Ñ0°Ó8¼*Ä\ÐTUÑEUÑ:VÐW]Ò:^ð4`”
œ<Ñ(¨Ñ0ä”j¤Ñ.×3Ñ3Ó5Ö6ˆAÜœlÑ+¨AÓ.Üœ|Ñ,¨QÑ/ð 7ð ,0Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø02Œ
”<Ñ  Ñ-Ø13Œ
”<Ñ  Ñ.Ø+-Œ
”<Ñ  Ñ(Ø,.Œ
”<Ñ  Ñ)à�FŠ?Ø35ŒJ”|Ñ$ ZÑ0àÐ&Ñ&Øœ:¤l°QÑ&6Ñ7¸ÑDÑDÜœ<¨!Ñ+Ñ,¨[Ñ9×@Ñ@ÀÔFÜ/3¯}©}Üœ<¨!Ñ+Ñ,¨VÑ4ó06ŒJ”|Ñ$ VÑ,ðÜœ|Ñ,¨VÑ4°TÑ:Üœ|Ñ,¨VÑ4°TÑ:¸:ÑF×LÑLÈZÓXðZð Ð.Ò.áÜŸ9™9Ô%7¸ÓC�ÙØ<@À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Ù+L að #$§'¡'¥)Ø+Lñ"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Ñ%D �!—'‘'•)Ð%DÕEˆ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 Fð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Ö=˜Ü04Ø$ Q§W¡W£Y¨q¯u©u«wÐ7×=Ñ=Ó?×GÑGÈÈSÓQó1S˜˜1Ÿ7™7›9 Q§U¡U£WÑ-ð >ð  "Ÿw™w r›{‘HØ—U‘U˜:Ó&¨)Ò3Ø'¨¨˜|×1Ñ1Ó3×;Ñ;¸CÀÓEß™  WÓ-ð ðÜ˜ 2 vÓ.�ô
 ! ›GˆE�!‰H�S‰MØ˜U 1™XÑ%Ø�a‘˜Ñ$×+Ñ+¨KÕ8à(3 }��a‘˜Ñ$ØŠIðI 1ðJ ,1Œ
”<Ñ  Ñ(ØÐ Ø *¨I´|ÐDÑð !à	�Ó	Ø�7‰7�7Ó×!Ñ!Ó#×)Ñ)Ó+¨vÒ5Ø37ŒJ”|Ñ$ ZÒ0Ø�W‰W�WÕØœ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šñ =ò Hð1 Cð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ˆØˆ	Üˆ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ÑBc¸Q¨q¯w©w­yÐBcÑ.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 gð ðf ,0Œ
”<Ñ  Ñ(ÙØ *¨I´|ÐDÑð à	�Ó	Ø�w‰w�wÓ×%Ñ%Ó'ˆØ�A‰w˜#Š~Ø˜$‘;ˆDØˆØˆØˆØˆÛˆAØ�CŠxØ˜‘E�ØØ�AŠvØ—X‘X“Z�ÙØ!�BØ—	‘	˜2˜r˜(Ô#Ø˜‘E�Ø�Ø�Ø�1ŠuØ˜!‘V‘à˜!‘V‘ð ð  �X‰X‹ZˆÙØˆBØ
�	‰	�2�r�(ÔØˆ	Ø”z¤,Ñ/Ñ/Ü"¤<Ñ0°Ñ:ˆIÛˆAØ�‰t˜9Ñ$Ø"$�	˜!˜A™$‘Ü)7¸¸!¹Ó)=×)CÑ)CÀEÔ)JÓKÑ)J A�a—g‘g•iÐ)JÔK�ÚØ˜a ™d‘O×*Ñ*¨1Õ-ñ Lð ð .7Œ
”<Ñ  Ñ*Ø$ b¬,Ð7ÑØ	�‹Ü�X‰XØaÐcd×cjÑcjÐkrÓcsÔuw×uyÑuyó{ˆâØ—‘“ˆBØœJ¤|Ñ4Ñ4Ø24”
œ<Ñ(¨Ñ/Ø—8‘8˜FÓ#ˆDØ46ŒJ”|Ñ$ UÑ+¨DÑ1ØˆFØ˜‰|  6¡
Ð 6Ø ‘? r¨)¡}Ð'<Ø�FØ@F”
œ<Ñ(¨Ñ/°Ñ5°fÑ=Ø)+¨F©×)9Ñ)9¸#Ô)>Ó?Ñ)> A�a—g‘g•iÐ)>�Ð?Ø�Û�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¸%Ò@ñ ð ä�!—+‘+“-Ô ÜÐ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ð ùòe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Ø(*˜Û%,˜EØ" e™|ð!HØ8=¿¹ÀCÓ8HÑ$5 J°Ø$1×$8Ñ$8¸%¿+¹+»-¸Ì3ÈzË?Ñ9ZÕ$[øÜ'1ò !HØ$1×$8Ñ$8¸¿¹»Ö$Gð!Húð !.× 4Ñ 4°U·[±[³]Õ Cð &-ð #0˜ÙEI˜hŸo™o¨d¯i©i¸Ó.@ÔAÈwÐWZÉ|“Gð#\üòx Lùò& @sA  È0AlÜ7Al ßAAl( á:"Al8 èAmð(Amú>Amý AmýAmý*AmÁCAm>ÁK;An7ÁLAn2ÁL%An7ÁV AoÁY	'AoÁ_AsÁd AsÁl	Al%Ál$Al%Ál(	Al5Ál4Al5Ál8	AmÁmAmÁmAmÁmAm;Ám:Am;Ám>An/ÁnAn*Án*An/Án2An7Án7AoÁoAoÁo&Ar>ÁpA AqÁqAr>Áq(Aq-Áq*Ar>Áq,Aq-Áq-AAr>Ár=Ar>c                 óZ   — d| vri | d<   | d   }||vrg ||<   ||   j                  |«       y )NÚf2pymultilines©r&  )rÔ   Úcontext_nameÚmlr   s       r)   rå  rå  4  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   r5  r  r¬  r   r/  )r¿   rÓ   rÁ   r¦   r¡   ÚselectpatternrS  r2   r  rr  rs  rh  rÏ  )r4   rã   rî  rï  r]  r   rz  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   e  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)  t  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­   ©rf  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.
rk  z0updatevars: attempt to change the kindselector "r³  rl  zupdatevars:z*: attempt to change empty charselector to r½   z0updatevars: attempt to change the charselector "rn  z/updatevars: attempt to change the typename of "rj  r  r2  r0  r  )rX   ÚarrayÚinitÚ2rX   r,  r
   r  r   r#  zupdatevars: "z" is mapped to "r3  z)"
©r·  r7   r  r5   r-  rm  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Ê  rr  rs  ro   r}  ÚlenarraypatternrS  r  rh  )r4   rî  rj  Ú
entitydeclrñ  rú  rû  rn  rè  rë   r³   r(  ró   ÚsÚelÚel1r¶  Úe1Úenamerð  Únot_has_typespecrz  r]  Úd1ÚlkÚdmÚdm1s                              r)   rÎ  rÎ  ™  s  € ð €IÜ'4°X¸xÓ'HÑ$€J�
˜HáÜ'5°hÓ'?×'EÑ'EÀeÔ'LÓMÑ'L !�A—G‘G•IÐ'LˆÐMØˆÜ�J‰JÐ.Ó/ˆÛˆAÙØØ—‘˜“
ˆAÙØ—G‘G˜GÓ$×*Ñ*Ó,�Ø˜œ#˜a›&˜'˜
‘N�Ø�H‰H�Q�Kð ð ˆÜ+¨JÓ7×=Ñ=¸eÔDÓ	EÑD˜ˆ!�'‰'�)ÐD€BÐ	EØ
€CÛˆÜ&4´\Ä/ÐRSÓBTÓ5UÐ]`Ô&a×&gÑ&gÐhmÔ&nÓoÑ&n �1—7‘7•9Ð&nÔoˆBÚØ—
‘
˜2Ÿ:™: e¨SÓ1Õ2ñ pð ô ˆÜ×Ñ˜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�AØ˜E .Ñ1Ñ1¸:Àa¹=ÈEÐR`ÑLaÐbcÑLdÒ;dÝÚšu e¨NÑ&;¸AÓ&>À
È1Ãð!Oõ Pô 48·9±9¸ZÈ¹]Ó3K˜˜nÑ-¨aÒ0ð 1ð  UÑ*©zÙ#Ø,6�E˜.Ò)åÚ$¢jð2õ 3áÜ˜jŸo™oÓ/Ö0�AØ˜E .Ñ1Ñ1¸:Àa¹=ÈEÐR`ÑLaÐbcÑLdÒ;dÝÚšu e¨NÑ&;¸AÓ&>À
È1Ãð!Oõ Pô 48·9±9¸ZÈ¹]Ó3K˜˜nÑ-¨aÒ0ð 1ð  Ñ&Ø$,��jÒ!Ù 5¨Ñ#4¸Ò#@ÝÚ˜5 Ó,ªhð8ô 9à Ñ&Ü$(§I¡I¨hÓ$7��jÒ!ÙÛ!�AØ  jÑ 1Ò1Ø˜jÑ)×0Ñ0°Õ3ñ "ô !%§	¡	¨(Ó 3ˆE�*ÑÜ$(§I¡I¨jÓ$9ˆE�.Ñ!Ü$(§I¡I¨jÓ$9ˆE�.Ñ!Ø (ˆE�*ÑÜ $§	¡	¨(Ó 3ˆE�*ÑØ˜%Ÿ)™) JÓ/Ò5°2Ñ6¸1Ä
Ì<Ñ@XÐY_Ñ@`Ñ;`Ø¤*¬\Ñ":Ñ:Ø8:”
œ<Ñ(¨Ñ5Ü”|Ñ$ [Ñ1×8Ñ8¸Ô;Ø�7‰7�7ÕÜ ×&Ñ&¤~°a·g±g¸gÓ6FÓ'GÓHˆBÚØ—\‘\“^�Û2�BØ˜"˜s™(‘|Ñ/Ø!# B¨¡H¡˜˜2™Ø˜r C™x™Lð 3ô ˜bŸg™g›iž�AØ˜!‘uÐ(Ü 0°°A±Ó 7˜˜1šà˜q™Eð	 )ð ˜B‘; 7¨b¡=Ø˜%‘y B’Ø$& w¡K˜˜5™	Ø˜w™KØ! [Ò0Ø*°%Ñ7ÀÀ~ÒAVØ46˜E .Ñ1Ø  E¨.Ñ$9Ñ9Ø % nÑ 5°eÐ <Ø57¸±Y˜˜nÑ-¨cÑ2Ø˜u™Ià&(¨¡k°CÑ&7¸"¸U¹)Ñ&C˜˜7™Ø˜u˜IÝÚ$¢aª²5¸"¸W»+ð!Gô Hð ˜B‘;ØÐ#LÑLØ*°%Ñ7ÀÀ~ÒAVØ46˜E .Ñ1Ø57¸±Y˜˜nÑ-¨cÑ2Ø˜u™IØ! [Ò0Ø*°%Ñ7ÀÀ~ÒAVØ46˜E .Ñ1Ø  E¨.Ñ$9Ñ9Ø % nÑ 5°eÐ <Ø57¸±Y˜˜nÑ-¨cÑ2Ø˜u˜Ià˜R‘<Ø˜e‘|¨U°3©Z¸2¸f¹:Ò-EÝÚ! 5¨£:¨r°&«zð!;õ <ð &(¨¡Z˜˜c™
à˜b‘=Ø(¨2¨g©;Ñ6�BØ!¨Ñ.°u¸ZÒ7HØ-/¨D˜˜jÒ)à˜jÑ)×0Ñ0°Ô4Ø#(¨Ô#4˜CØ" 2 A˜w¨+Ó5¸#À»)Ø$)¨*Ñ$5°bÐ$9Ý 'Ú+0²#²rð);ô !<á %ñ $5ô ÐZØ˜AŸG™G GÓ,Ñ,ñ.ô /ä�e—j‘j“lÖ#ˆAØ˜“8Ø˜!‘Hð $ð 38Œ
”<Ñ  Ñ(¨Ñ/Øœ¤LÑ1Ñ1Ü”|Ñ$ ZÑ0×7Ñ7¸Ô>ØŠ	ðK ðL Ðùòq Nùò 
Fùò ps   ±\/Ã\4Ä-\9c                 ót  — d }d }d }|�r+| dv 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 )Nr/  z4cracktypespec: no kindselector pattern found for %s
Úkind2r   r  z4cracktypespec: no charselector pattern found for %s
ÚcharlenÚlenkind)rX   Úkindr.  Úf2py_lenrh   z\s*\(\s*(?P<name>\w+)\s*\)rq   z'cracktypespec: no typename found in %s
z'cracktypespec: no selector used for %s
)rk  rÓ   r2   rÏ   r  rr  rs  Úitemsrr   rl  Úlenkindpatternr$  r¿   rÁ   rÔ   )	r4   rî  rú  rû  rn  rz  rò  rA  r;  s	            r)   rÚ  rÚ  B  sn  € Ø€JØ€JØ€HÚØÐ@Ñ@Ü%×+Ñ+¨HÓ5ˆJÙÜØKÌtÐT\Ë~Ñ^ô`àØ#×-Ñ-Ó/ˆJØ(¨Ñ1ˆJ�s‰OØ˜7Ð#Ü˜*Ÿ/™/Ó+Ö,�Ø! !“}Ø" 1™ð -ô ˜Z×-Ñ-Ó/Ö0‘��1Ü *¨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’ñ 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 )Nrj  rJ   Ú	automaticr  r  r  )rw  rï  ry  s      r)   rt  rt  ~  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 )Nrk  ©rr  rs  ©rw  Úselry  rz  s       r)   ru  ru  ™  sg   € ÙØˆÙØˆØ˜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 )Nrl  rI  rJ  s       r)   rv  rv  §  sg   € ÙØˆÙØˆØ˜TÑ!Ø"ˆˆ^ÑØˆä�#—(‘(“*ÖˆÙ�A˜T .Ñ1Ò1Ø&)¨!¡fˆD�Ñ  Ò#ð ð €Kr(   c                 ó   — d| v r| d   S |S )Nrq   r'   )r.  Úunknowns     r)   ÚgetblocknamerO  ¶  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)   ÚsetmesstextrQ  ¾  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)   rT  rT  Ç  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 )
rT  rr  rD  r¡   r   r2   r}  rÑ  ro   rÏ   )	r.  Ú	param_maprV  ÚusenameÚmappingÚmvarsrƒ  rz  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ñ	 )ð 2ð& Ðr(   c                 óÎ  — t         s| S t        | t        «      r | D �cg c]  }t        ||dz   |¬«      ‘Œ }}|S t	        | «       t        |›d| d   ›d�d«       |€t        | «      }|�Md| v rI| d   }t        |j                  «       «      D ](  }||   }d|v sŒ|d   }d	|v sŒ|d	   }	|	|v sŒ!||	   |d	<   Œ* | d
   D �
cg c]  }
t        |
|dz   |¬«      ‘Œ }}
|| d
<   | S c c}w c c}
w )Nrœ   )ÚtabrX  úBlock: rq   r¹   r   r-  rk  rB  r,  )r   rä  rr  Ú
postcrack2rQ  r2   r\  rs  )r.  r^  rX  ÚgÚretr-  rª   ÚvarrB  ÚvalÚbÚnew_bodys               r)   r`  r`  î  s(  € õ ØˆÜ�%œÔáóÙ�1ô ˜!  t¡°yÖAØð 	ð àˆ
Ü�ÔÜšs E¨&£MÐ2°AÔ6àÐÜ% eÓ,ˆ	àÐ ¨5¡Ø�V‰}ˆÜ�d—i‘i“kÖ"ˆAØ�q‘'ˆCØ Ò$Ø˜>Ñ*�Ø˜T’>Ø˜v™,�CØ˜iÒ'Ø'0°¡~˜˜Všð #ð ˜všó(Ù&�Aô ˜1 #¨¡*¸	ÖBØ&ð ð (à€Eˆ&�Mà€Lùò/ùò&(s   �CÂ<C"c                 ó   — t        | t        «      rYg }g }| D ]K  }t        |«       t        ||dz   ¬«      }d|v rd|d   v r|j	                  |«       Œ;|j	                  |«       ŒM ||z   S t        | «       t        | t
        «      sd| vrt        dt        | «      z   «      ‚d| v r| d   dk(  st        |›d| d   ›d	�d
«       t        | «      } t        | «      } t        | «      | d<   t        | d   «      | d<   | 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¡  r_  r¹   r   r-  Úsortvarsr2  r,  r  r
   r0  r1  Ú__user__routinesÚunknown__user__routinesr   z%s_%irž  Ú_user_interface)r.  r,  r-  rq   r   r›  )r.  r,  r-  rq   r1  )rä  rr  rQ  Ú	postcrackr&  rÈ  rÇ   rÃ   r2   ÚanalyzeargsÚanalyzecommonÚanalyzevarsÚsortvarnamesr}  Úanalyzebodyrs  rÊ  r[   Ú
isexternalr   )r.  r2  r^  ÚgretÚuretra  ÚuserisdefinedÚuseblockrz  rq   r1  r[  Úmnamerò  rž  r¶  ÚedefÚjre  ÚbbÚmblocks                        r)   rm  rm    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ˆ	à�{Ô#ˆ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Ò(ð- $ð. �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 )Nrq  r   r   zTsortvarnames: failed to compute dependencies because of cyclic dependencies between r¼  r¹   )rr  rs  r&  rX   ro   rÛ   )r-  ÚindepÚdeprø  rª   rò  rZ  Úws           r)   rq  rq  n  s*  € Ø€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-  rj  r0  r#  z:analyzecommon: failed to extract "<name>[(<dims>)]" from "z" in common /z/.
Ú
commonvars)Ú	hascommonrr  rs  r¿   rÓ   rÁ   rÔ   r$  r%  r¦   rr   r&  rÛ   ro   )	r.  rƒ  rz  Úcomvarsr¶  ró   r‚  rè  rª   s	            r)   ro  ro  �  s  € Ü�UÔØˆØ€JÜ�%˜‘/×&Ñ&Ó(×)ˆØˆØ�x‘ Õ#ˆAÜ—‘ØEÀqÌ"Ï$É$óPˆAâØ�Ø—7‘7˜6”?ä%3°A·G±G¸F³OÓ%D×%JÑ%JÈ5Ô%QóSÙ%Q ð ŸG™G�IØ%Qð ð Sä˜qŸw™w v›×4Ñ4Ó6Ó7�Ø˜˜f™Ñ%Ø! U¨6¡]°1Ñ%5Ñ5Ø˜f™ aÑ(¨Ñ4×;Ñ;Ø+¨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-  rj  r  r,  rS  r.  r§  rq   r2  z
      T©Úas_interfaceÚsaved_interfacerœ   rh  rŸ  r²  r  r­   r
   Úpythonmoduler   )rQ  rD  rs  r#   r&  r$   Úcrack2fortrangenrm  r}  rÑ   r   r   )	r.  r2  r^  Úkeyr
  Úmaybe_privater,  re  Úas_s	            r)   rr  rr  »  sž  € ô �Ôð   ™-×-Ñ-Ô/ôá/‰JˆC�Ø˜UÑ" h°e¸JÑ6GÑ&Gð 	ˆU‰
Ø/ð ñ ð €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   rG  )rQ  Údefaultimplicitrulesr   r2   rÏ   rr  rs  r}  )r.  ÚimplicitrulesÚ	attrrulesrz  s       r)   Úbuildimplicitrulesr“  è  sÔ   € Ü�ÔÜ(€MØ€IØ�UÑØ�ÑÐ$Ø ˆMÜ˜Š{ÜØMÔPTÐUZÐ[aÑUbÓPcÑcôeð ˜)Ð#Ð#ô ˜% 
Ñ+×0Ñ0Ó2Ö3�Ø˜Ñ$ QÑ'×+Ñ+¨JÓ7Ð?VÑVØ',¨ZÑ'8¸Ñ';�M !Ò$à#(¨Ñ#4°QÑ#7¸
Ñ#C�I˜a’Lð	 4ð
 ˜)Ð#Ð#r(   c                 ój   — t        | ||«      }t        |«      t        t        fv r|S t	        d|z  «      ‚)z2 Like `eval` but returns only integers and floats zr=%r)rÕ  rh   r8   r:   rÖ   )r¶  ra  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  r3  r4  r  g      à?g      ø?)NNN)r8   r•  rÇ   Úgetlincoef_re_1rÓ   rX   r¿   r‰  rÀ   rÁ   rÔ   )r¶  Úxsetr³   Úlen_erè  r\  ró   r]  Úeere  r(  Úc2s               r)   Ú
getlincoefrŸ  	  sg  € ð*Ü”�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 )Nrq  rm  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£  P	  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,   )rr  rs  r£  )r-  ru   Údepend_dictrª   s       r)   Ú_calc_depend_dictr©  f	  s3   € Ü�—‘“Ó€EØ€KÛˆÜ˜˜D +Õ.ð àÐr(   c                 óv  — t        | «      }g }t        |j                  «       «      D ]  }||   rŒ	|j                  |«       ||= Œ |rTt        |j	                  «       «      D ]5  \  }}|D �cg c]	  }||v sŒ|‘Œ }}|s|j                  |«       ||= Œ1|||<   Œ7 |rŒT|D �cg c]	  }|| v sŒ|‘Œ c}S c c}w c c}w r,   )r©  rr  rs  r&  rD  )r-  r¨  ru   rq   Úlstrª   Únew_lsts          r)   Úget_sorted_namesr­  n	  sÎ   € Ü# DÓ)€KØ€EÜ�[×%Ñ%Ó'Ö(ˆØ˜4Ó Ø�L‰L˜ÔØ˜DÑ!ð )ñ Ü˜k×/Ñ/Ó1Ö2‰IˆD�#Ù"%Ó:¡#˜Q¨¨kÒ)9’q #ˆGÐ:ÙØ—‘˜TÔ"Ø Ñ%à$+�˜DÒ!ð 3ò ñ #Ó3™U�T d¨d¢lŠD˜UÑ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(r4  )rÓ  rÓ   Úreal8pattern)rc   s    r)   Ú
_kind_funcr³  €	  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   r/  l        r±  l            r°  é€   é   r   r'   )r™   ró   s     r)   Ú_selected_int_kind_funcr¸  ‹	  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) NrB  Úselected_int_kindÚselected_real_kindrj  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*\)rm  ))z.false.ÚFalse)z.true.ÚTruez
kind("\1")zselected_int_kind(\1)Frk  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Û   Úisdoublerr  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ó   r4  rÑ  rì   Únls                         r)   rÑ  rÑ  ®	  s  € Ü�Y‰Y�}Ó%€FÜ�y‰y˜Ó'€HØ¤
Ð+Ø+Ô-DÐEØ,Ô.FÐGóK‰
ˆˆdð �xÒØ!ˆH�TŠNð	Kð
 €KÜ˜dÖ#ˆØ˜˜a™Ò  [°D¸±G¸JÑ4GÒ%GØ×Ñ˜qÕ!ð $ô �j‰jÐ<¼b¿d¹dÓC€GÜŸ:™:Ø8¼"¿$¹$ó@Ðä—z‘zØ?ÄÇÁóGÐäˆØ�$�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�AÜ,0Ø˜!Ÿ'™'›) A§E¡E£GÐ,×2Ñ2Ó4×<Ñ<¸SÀ#ÓFó-H�B�q—w‘w“y §¡£Ñ)ð 3ð —G‘G˜B“K‘ä˜4 ™7Ô#Üð FØFGÀSÈðLô Mð "& a¡¨Ò!4ó5Ù!4˜AØŸ,™, {Ô3ð Ÿ™ {Ó3×9Ñ9Õ;Ø!4ñ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 ð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   rr  rs  )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
   rj  c              3   ó&   K  — | ]	  }|d    –— Œ y­w)rq   Nr'   )r¾  re  s     r)   r¿  zanalyzevars.<locals>.<genexpr><
  s   è ø€ Ð$F¹°1 Q v¥Y¹ùs   ‚r,  r­  r2  z[A-Za-z][\w$]*z.*\b%s\br   r4   r  Ú	undefinedz"analyzevars: typespec of variable z is not defined in routine z.
rl  rX   rk  rB  )NNNNNNr1  r  r   r   r·   rº   rq  r�   rp  r±  ro  r"  r­   z\n\nz

z\n r¹   z4analyzevars: could not parse dimension for variable r¢  r   z@:@r/  Ú1)Úlanguagec                 ó   — | |z
  |z  S r,   r'   )r4  r(  re  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¾  r4  r-  s     €r)   r¿  zanalyzevars.<locals>.<genexpr>å
  s'   øè ø€ ð -7Ù4?¨qØ'(§v¡v°¡~ð %&§F¥F±Kù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  s@   ø€ Ø*9×*=Ñ*=¸aÀ$ÈÀÓ*LÈQÔ*O BØ')°¢~Ø(,¯©°¬Ù(4°R¸Õ(>ñ +Pr(   rm  Fzshape(r¼  r4  z) == TÚinr  r  rº  r#  r©   r¤  ÚpureÚ	recursiver5  r  rn  z'analyzevars: prefix (%s) were not used
)r   rŠ  r›  rš  rƒ  r  )rü   rú   rh   )DrQ  r“  rÊ  r  rt  r}  r&  ÚKeyErrorrr  rs  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ÚsymbolsrU  ÚRuntimeErrorÚl_orÚisintent_inÚisintent_inoutÚisintent_inplaceÚisarrayrÝ  rD  r‹   rÛ   rã  r¡  ré  Úisscalarrç  r{  rK  rÍ  rÔ   rÚ  Úisintent_callbackÚisintent_aux)Br.  r‘  r’  Úgenrª   rz  Úsvarsr2  r(  rƒ  Údep_matchesÚ
name_matchrø  ró   Úln0rë   Údimension_exprsrï  Údimrº   rq  rp  ro  rè  r³   Útmpr   Údim_charrÿ  r:  Úd2ÚdsizeÚsolver_and_depsr4  re  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û  rn  Ú
neededvarsrq   r÷  rø  r-  sB                                                                  @@@r)   rp  rp  ,
  sP  ú€ ô �ÔÜ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�Û.�AØ˜C’xÜ"-¨d¯h©h°q¸"«o¸qÓ"A˜˜Qšñ /ð Gð €EØ�‰=€DÛˆð	Ø�ŠGØ�L‰L˜�Oð ô �$—)‘)“+ÖˆØ�DŠ=Ø�L‰L˜�Oð ô ˜DÔ"3°EÓ":Ó;€Fð €KÜ—‘Ð-Ó.×4Ñ4€JÜ�$—)‘)“+ÖˆÙ�q‹MˆÚØ�!—'‘'“)˜AŸE™E›GÐ$ˆAðKØ˜A“ð ô ˆØˆQ‰4”4˜	Ÿ™Ó(Ó)Ñ)Ü! $ q¡'¨9°Q°q±T©?Ó;ˆD�‰GØ˜T !™WÑ$Ø  a¡Ñ(¨Z¸4À¹7À:Ñ;NÑ-NÙ Ø˜A™$Ÿ*™*›,�CÜ! -°Ñ"4×"9Ñ"9Ó";Ö<˜Ø 
š?¨}¸SÑ/AÀ!Ñ/DÈÒ/SØ$Ø D¨¡GÑ+Ø)6°sÑ);¸AÑ)>˜D ™G AšJØ *›_Ø%2°3Ñ%7¸Ô%: Ü*5°d¸1±g¸qÓ*A  Q¢ñ &;ñ =ð ˜% ™-Ñ'ÝÜ˜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Ñ1T¨A˜aŸg™g�iÐ1TÔU˜àŸi™i¨¨RÓ0˜Ø d¨1¡g¨hÑ&7Ò7Ø  ™G HÑ-×4Ñ4°SÕ9ð	 Vð
 "�FÙØŸ<™<¨°&Ó9�DØŸ<™<¨°Ó5�DØ T¨!¡WÑ,Ø+/¨&˜˜Q™ šà˜Q™ ™×.Ñ.¨tÔ4Ø�DØÐ%Ø t¨A¡wÑ.Ø,.˜˜Q™ Ñ)Ü&¼>È&Ó;Q×;WÑ;WÐX]Ô;^Ó'_Ñ;^°a¨¯©­	Ð;^Ñ'_Ö`˜Ø D¨¡G¨HÑ$5Ò5Ø  ™G HÑ-×4Ñ4°QÕ7ð að "�FØÒ$Ø d¨1¡gÑ-Ø+-˜˜Q™ Ñ(Ü1?ÀÓ1F×1LÑ1LÈUÔ1SÓTÑ1S¨A˜aŸg™g�iÐ1SÔT˜Ø D¨¡G¨GÑ$4Ò4Ø  ™G GÑ,×3Ñ3°AÕ6ð Uð !’EðW òX �{¨$¨q©'Ò1Ø')��Q‘˜Ñ$Ü"Ü,:¸3Ó,?×,EÑ,EÀeÔ,LÓMÑ,L q˜Ÿ™�Ð,LÑM÷�Að
ô (¨¨6Ó2˜ð '(¨3¢h™s°C�HØ˜H’}Ø&˜Z™ä+¨A¨sÓ3×9Ñ9¸%Ó@˜Ü˜2“w !’|¨¨r©	Ø!˜U˜Ø˜Ü˜2“w !’|¨¨1©°Ò(9Ø! 2 a¡5˜\˜Ü˜2“w !“|Ü!$¤X§]¡]×%8Ñ%8¸"Ó!=™˜˜BØ " R¡¨!¡˜Ø!ŸN™N´H×4EÑ4E×4GÑ4G˜NÓH˜ð +-˜Ø!& v¤˜AÜ (× 2Ñ 2°1Ó 5˜AØ$Ÿ~™~¨aÕ0ð!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ð- "/ð: .=˜¨Ñ*Ø˜‘G˜KÑ(×/Ñ/°Ö2ðð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Ñ&:×;‘D�A�qØ&5×&9Ñ&9¸!Ó&<�OØ&Ð.áÚ#ð 2A×1FÑ1F×1HÑ-˜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 2Iðn 'Ò2à1@×1FÑ1FÖ1HÑ-˜A™~ ¨Ø%)¨!¡W§[¡[°¸2Ó%>˜FØ&*¨1¡g§k¡k°*¸bÖ&A Ø#%§=¡=°Õ#:Ø)+¯©°·±³Ó)< BØ$*§M¡M°"°Q°r°(·.±.ÀÓ2EÕ$Fð 'Bñ  &Ü48¼¸V»Ó4E  Q¡¨Ñ 1Ø ¨šØ &§¡¨aÕ 0ò 2IñE <ô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‘D�A�qÙ˜˜a™ ™•Ø˜Q™ Ñ)×0Ñ0°Õ3ð 6ð ˜A‘w˜xÒ(Ø˜Q™ Ð)Ü˜˜Q™Ö Ü+¨D°©G°C©L¸&ÓA��Q‘˜“ð[ ô^ �$—)‘)“+×ˆØ��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Ø 
Ò*Ø"×)Ñ)¨!Õ,ñ +ð 1ð �‰>˜ZÒ'Ø˜5Ñ Ø×!Ñ! %¨¡/Õ2à×!Ñ! %¨¡-Ô0Ø�‰>Ð7Ñ7Ø˜‘=ˆDØ�t‰| ¨D°©JÑ 6Ø"& t¡*¨XÑ"6��h‘Ø�‰>˜VÒ#Ø×Ñœd 4§9¡9£;Ó/Ô0Ü�d—i‘i“kÖ"ˆAØ˜
Ò"Ø˜‘Gð #ð €Køô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¹   r/  r   rd  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
    r3  Nr   r4  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¶  Ú_er2  r™   r   r0  r1  r  )
Úanalyzeargs_re_1rÓ   r“  rÒ  r¡   rc   Úascii_lowercaseÚdigitsrÃ   rt  )r(  r.  r2  Úorig_aÚ	a_is_exprr‘  r’  ÚatÚnar³   rz  s              r)   Ú	expr2namer@  D  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 )Nr2  r  r-  r,  rq   r0  r©   )rQ  r“  r@  r&  rr  rD  )r.  r‘  rð   r2  r(  rz  Úargs1re  s           r)   rn  rn  i  s3  € Ü�ÔÜ)¨%Ó0Ñ€M�1Ø�UÑØˆˆf‰Ø€DØ�6Œ]ˆÜ�a˜ Ó%ˆØ�‰�A�ð ð €Eˆ&�MØ�%ÑÜ˜U 7™^×1Ñ1Ó3Ö4‰HˆAˆuÛ�Ø˜E &™MÒ)Ø')�E˜&‘M !Ò$ñ ð 5ð
 �6Œ]ˆØˆV‰9˜ÒØ %Ñ'Ø%'��kÑ"Ø�‰y  kÑ 2Ò2Ø�kÑ"×)Ñ)¨!¨F©)Õ4ð ð �5Ñ˜U 8™_°E¸&±MÑAØ)+ˆˆf‰�e˜H‘oÑ&Ø€Lr(   z\A\(.+?,.+?\)\Zz\A[+-]?\d+(_(?P<name>\w+)|)\Zz*\A[+-]?[\d.]+[-\d+de.]*(_(?P<name>\w+)|)\Zz
\A\(.*\)\Zz\A(?P<name>\w+)\s*\(.*?\)\s*\Zc                 óÆ   — t        | t        «      rddiS t        | t        «      rddiS t        | t        «      rddiS t        | t        «      r| S t        t        | «      «      ‚)Nr4   r7   r5   r·  )rä  r8   r:   r·  rÈ  ÚAssertionErrorrÏ   )r™   s    r)   Ú_ensure_exprdictrE  ‹  s_   € Ü�!”SÔØ˜IÐ&Ð&Ü�!”UÔØ˜FÐ#Ð#Ü�!”WÔØ˜IÐ&Ð&Ü�!”TÔØˆÜ
œ˜a›Ó
!Ð!r(   c                 ó  — | |v rt        ||    «      S | 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+  re  r   r   rj  r   r¯  r  r   )r4   rl  z>determineexprtype: could not determine expressions (%s) type.
)rE  r¦   Údetermineexprtype_re_1rÓ   Údetermineexprtype_re_2r  rÔ   r2   rÏ   Údetermineexprtype_re_3r$  r%  Údetermineexprtype_re_4rÒ  Údetermineexprtype_re_5)	r  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Ð#Ð#Û"ˆÜ%3°DÀÔ%C×%IÑ%IÈ#ÐPRÉ(ÐUXÉ.Ô%YÓZÑ%Y �!—'‘'•)Ð%YÔZˆAØ�DŠyÜ'¨¨Q©Ó0Ô0ñ [ð #ð 	€AÜ×#Ñ# DÔ)Ü˜d 1 R˜j¨$°Ó6‰ä"×(Ñ(¨Ó.ˆÙØ—‘˜“ˆBÜ! !§'¡'¨&£/°4¸Ó?ˆAÙ�Z 1‘_Ø�j�MÙØ�a‘5˜E‘>Ü+¨E°"°Q±%©LÓ9Ð9ØˆA�w�%ÑØ'¸#¸s¸ÑDÐDÙÜØ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—  r2  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 r3  r4  rš  r�  zend )rQ  rä  rr  r#   r$   r‹  r@  r  r&  rÛ   rs  r   r}  rÉ  Úuse2fortranÚcommon2fortranÚvars2fortranrD  )r.  r^  rˆ  rb  ra  r¤  rq   r2  Ú	blocktypeÚargslr-  r(  r  rz  Ú
intent_lstr  r  r©   r,  ÚmessÚentry_stmtsrò  s                         r)   r‹  r‹  Ä  s$  € ô �ÔØ
€CÜ�%œÔÛˆAÙ�Q�w‘ZÐ#=Ñ=Ø�V‘9¤	Ñ)ØÝ  6¡´)Ñ!;ØØÔ(¨¨C¸lÔKÑK‰Cð ð ˆ
Ø€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ˆAá  #¬¢-²°EÐ:LÑ4MÈaÒ4Pð RÑð 8ð —‘˜8 RÓ(©Ð+€JØ�JÒ :°Ñ#;Ø×Ñ˜*Ô%Ùá,¨c´G«mØŸH™H ZÕ0±$ð8Ðð €CØ��~Ü˜% ™,¨¬g©Ó6ˆØ€FØ�5ÑÜ  h¡°´w±Ó?ˆØÐ"Ò"ØˆØ€FØ�5ÑØ %¨¡/Ñ1ˆØ�‰? %Ñ'Ø�L‰L˜˜x™Ô)Ü˜E &™M¨3´©=À|ÔT€DÜØˆu�V‰}˜e S¬7¡]ÀôO€Dà€DØ��™|Ø˜5 ™=Ñ(ˆØ�%ÑØˆÜ˜˜w™×-Ñ-Ó/Ö0‰DˆAˆqá(¨#´«-º¸C¿H¹HÀQ½KðI‰Kð 1ð �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/ )rr  rs  rÛ   )r  r^  rb  rz  s       r)   rT  rT    s^   € Ø
€CÜ�&—+‘+“-Ö ˆØ�Š=Ù%(ª#¨s¯x©x¸¸q¹	Ô/BÐC‰Cá*-ªs²A°s·x±xÀÀqÁ	Ô7JÐK‰Cð	 !ð
 €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=>rI  )r  r^  rb  ró   r³   rz  s         r)   rS  rS    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ð 0ò �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ü  )rc  r«  rb  rº   rb  s        r)   Útrue_intent_listr_  1  s`   € Ø
ˆ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¦  rq  z;vars2fortran: Warning: cross-dependence between variables "z" and "r´  r0  zintent(callback) z	external z	optional r4   r   r,  rq   r.  rú   r   z/vars2fortran: No definition for argument "%s".
r©   rj  r  z-vars2fortran: No typespec for argument "%s".
rh   rn  r3  r4  rk  rl  r   )r   r¢  z*(rX   z(len=rB  z,kind=z%s)z(kind=r­   )r  z
intent(in)zintent(out)r¼  r#  r  z
dimension(rº   rR  rp  zcheck(zdepend(rm  )r·  r  z :: )rQ  r&  ro   rã  rr  rs  r  Ú
isoptionalÚshowr2   r}  rÉ  rÛ   r_  rÕ  r5   ÚimagrÇ   )r.  r-  r2  r^  rˆ  rb  Únoutr(  r   rá   re  Úvardefrî  r³   rë   rï  r«  rø  s                     r)   rU  rU  ?  s  € Ü�ÔØ
€CØ€DÛˆØ��f‘ÒØ�K‰K˜�Nð ð �uÑØ�|Ô$ˆAØ�D‰yØ˜D’=Ø—K‘K •NäØNÐQRÑRõTð %ð �UÑØ�‰�E˜*Ñ%Ô&ÙÜ�d—i‘i“kÖ"ˆAØ˜Š}Ø—‘˜A•ð #ô ˆØ�t˜A‘wÑØ˜!‘W˜XÔ&�Ø˜’9 ¨T°!©WÒ!4¸¸dÀ1¹gÀhÑ>OÒ9OÝÚghÒjkÐlõ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ó .Ñ2˜!Ø Ñ,ò Ð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 ð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Ù   r8  r   rm  r   Úpost_processing_hooksÚ__name__Útraverser`  )ÚfilesÚpostlistÚhooks      r)   Úcrackfortranrm  Å  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)   Úcrack2fortranrs  Ö  s<   € ô ˜5Ó
! DÑ
(€Cð€Fðô ñ	€Fð
 �C‰<˜&Ñ Ð r(   c                 óx   — t        | t        «      xr) t        | «      dk(  xr t        | d   t        t        f«      S )Nr/  r   )rä  ÚtuplerX   r8   rÃ   )Úobjs    r)   Ú_is_visit_pairrw  å  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   rS  N)Úparentsr©   )rw  rä  rr  rÝ  ri  r&  rÈ  rD  )rv  Úvisitry  r©   r2  ÚkwargsÚ
new_resultÚparentÚ
result_keyr[   r
  Ú	new_indexÚnew_itemrŒ  Únew_keyÚ	new_values                   r)   ri  ri  ë  ss  € ô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ˆ
ØŸ)™)ž+‰JˆC�Ü!)¨3°¨,¸ð "Jà:>ñ"JØ29¸V¸HÑ2DØ17ñ"JàBHñ"JÑˆG�Yð Ñ"Ø&/�
˜7Ò#ñ &ð ˆ
àÐØÐØ�zÐ!Ð!r(   c                 óî  — |d   \  }}| \  }}d„ }	|dv r|d   d   dk(  sJ ‚|d   d   }
n|dk(  r|d	   d   dk(  sJ ‚|d	   d   }
nd
}
d
}|
�0|}|
j                  «       D ]  \  }}t        |«      sŒ |	||«      }Œ nV|dk(  rQ|d	   d   d   }
|}|
j                  «       D ]1  \  }}t        |«      sŒt        j                  d|z   dz   d|z   |«      }Œ3 |�"||k7  rt	        d|› d|› d|› d|› d�	d«       ||fS y
)aü  Previously, Fortran character was incorrectly treated as
    character*1. This hook fixes the usage of the corresponding
    variables in `check`, `dimension`, `=`, and `callstatement`
    expressions.

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

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

    r   c                 óz   — t        j                  d| z   dz   | |«      }t        j                  d| z   dz   | |«      }|S )Nz[*]\s*\br—  z\b\s*[\[]\s*0\s*[\]])r¿   rÔ  )Úvarnamer
  s     r)   Ú	fix_usagez8character_backward_compatibility_hook.<locals>.fix_usage?  sB   € Ü—‘�{ WÑ,¨uÑ4°g¸uÓEˆÜ—‘�u˜w‘Ð)@Ñ@Ø ó'ˆàˆr(   )r  rp  éýÿÿÿr   r-  r   rm  rž   NÚcallstatementz
(?<![&])\br—  rŸ   zcharacter_bc_hook[r–  z]: replaced `z` -> `z`
)rD  Úischaracterr¿   rÔ  r2   )r1  ry  r©   r2  r{  Ú
parent_keyÚparent_valuerŒ  r
  r†  Ú	vars_dictr‚  r…  Úvds                 r)   Ú%character_backward_compatibility_hookrŽ  -  sj  € ð  ' 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Ñ*ˆ	Øˆ	Ø$Ÿ?™?Ö,‰KˆG�RÜ˜2�ô ŸF™FØ! GÑ+¨eÑ3°S¸7±]ÀIóO‘	ð	 -ð ÐØ˜Òô
 Ð(¨¨°A°c°Uð ;"Ø"' ¨¨y¨k¸ð>Ø?@ôBà�YÐÐð r(   Ú__main__r¢  z-quietz-verboser/  z-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form.
z-skipemptyendsz--ignore-containsz-f77z-f90r°   z-hz-showz-mr¹  zUnknown option %s
z	OSError: a    Warning: You have specified module name for non Fortran 77 code that
  should not need one (expect if you are scanning F90 code for non
  module blocks but then you should use flag -skipemptyends and also
  be sure that the files do not contain programs without program
  statement).
z Writing fortran code to file %s
r€  )r   )r   )r#  )rN  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   Úversionro  r   r   r   r   r   r   r   r   r   r   r   r¾   r!   r   r   r    r   r:  r   r   r9  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«   rb  rÙ   ÚbeforethisafterÚfortrantypesrK  rÙ  rH  rI  Úgroupbegins77rÍ   Úgroupbegins90rÎ   Ú	groupendsrF  ÚendifsrE  ÚmoduleproceduresrQ  rJ  r;  r<  r>  r?  rB  rC  rD  r=  r@  rA  rM  rP  rT  rL  rN  rO  rG  ÚSr6  r7  rÒ   r)  rR  Úcrackline_bind_1rÌ  r8  rS  r$  rh  r{  r  r„  r�  r‘  r’  rÓ  r²  r~  r€  r‡  r�  r”  rU  rå  rÍ  rÐ  rk  rl  rE  r2  r   r)  rÎ  rÚ  rt  ru  rv  rO  rQ  rT  r\  r`  rm  rq  ro  rr  r“  r•  rš  rŸ  r¢  r£  r©  r­  r³  r¸  rË  rÑ  ré  rë  rç  rp  r9  rØ  rþ  r@  rn  rH  rI  rJ  rK  rL  rE  rÒ  r‹  rT  rS  r_  rU  rg  rm  rs  rw  ri  rŽ  r&  rh  rj  Úfuncsrb  Úf2Úf3ÚshowblocklistÚargvrë   ro   rÏ   r‰   rÝ   ÚOSErrorÚdetailrk  rp  r/   r'   r(   r)   Ú<module>r¦     sÉ  ðñIóT Û Û Û 	Û 	Û Û Û Ý ðÛõ ô
 Ý à×"Ñ"€ð €	Ø€Ø	€Ø
€Ø
€Ø€Ø€Ø€Ø€Ø€Ø
€ð €Ø€Ø€Ø€ØÐ Ø€Ø€
Ø€Ü˜2Ð€	Ø€	Ø€Ø€Ø€	ØÐ Ø€Ø€	Ø€Ø€ò#óLð €„ØÐ Û	!€AØ)¨6Ð2Ð˜Òð 
"ã	€AØ)¨9Ð5Ð˜Òð 
à€Ø€ó
€Að �e‘)€HˆQ�KØ€K��E‘	Òð
òò,òò1ð �—
‘
Ð3°R·T±TÓ:×AÑA€Ø�"—*‘*Ð1°2·4±4Ó8×?Ñ?€Ø�"—*‘*Ð1°2·4±4Ó8×?Ñ?€Ø�"—*‘*Ð1°2·4±4Ó8×>Ñ>€ò :Ð Ú8Ð ò3ò>ð4 '+°!ó aDðH€ð 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Ð òòò ò ò P	Dòfò(ð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‹\ˆØ�Š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 õd �­}Ùð ð ô	ñ ˜EÓ"€HÝÙÐ3±d¼;Ó6GÑGÈÔKÙ˜HÓ%ˆÙ”+˜sÔ# qØ�GŠG�CŒL÷ $áÙˆX�ð ðQ øðmn ò ØÓðûðVp ò 2Ù˜) F :¨RÐ0×1Ò1ûð2ú÷" $Ð#ús5   ªk è)kê'k<ëkëkëk9ë"k4ë4k9ë<l