Ë
    6Š·j�= ã                   óø  — 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mZ ddl­ 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„Z1i Z2dD ]	  Z3ddie2e3<   Œ dD ]	  Z3ddie2e3<   Œ i Z4i Z5dD ]  Z6e6dz   e4e6<   e6e5e6dz   <   Œ d„ Z7d„ Z8d„ Z9d„ Z: ejv                  dejx                  «      jz                  Z> ejv                  dejx                  «      jz                  Z? ejv                  dejx                  «      jz                  Z@ ejv                  dejx                  «      j‚                  ZBg d¢ZCg d¢ZDd„ ZEd„ ZFeGdfd „ZHd!ZId"ZJ ejv                  eId	eJeJd#fz  ejx                  «      d$fZK ejv                  eId	eJd%z   eJd%z   d#fz  ejx                  «      ZL ejv                  eId&z  ejx                  «      d'fZM ejv                  eId(z  ejx                  «      d'fZNd)ZO ejv                  eId	eOeOd#fz  ejx                  «      d'fZPeOd*z   ZQ ejv                  eId	eQeQd#fz  ejx                  «      d'fZRd+ZS ejv                  eId	eSeSd#fz  ejx                  «      d,fZTd-ZU ejv                  eId.eUeUd#fz  ejx                  «      d/fZVd0ZW ejv                  eId	eWeWd#fz  ejx                  «      d1fZX ejv                  eId2z  ejx                  «      d3fZY ejv                  eId4z  ejx                  «      d5fZZ ejv                  eId6z  ejx                  «      d7fZ[ ejv                  eId8z  ejx                  «      d9fZ\ ejv                  eId:z  ejx                  «      d;fZ] ejv                  eId<z  ejx                  «      d=fZ^ ejv                  eId>z  ejx                  «      d?fZ_ ejv                  eId@z  ejx                  «      dAfZ` ejv                  eIdBz  ejx                  «      dCfZa ejv                  eIdDz  ejx                  «      dEfZb ejv                  eIdFz  ejx                  «      dGfZc ejv                  eIdHz  ejx                  «      dIfZd ejv                  eIdJz  ejx                  «      dKfZe ejv                  eIdLz  ejx                  «      dMfZf ejv                  eIdNz  ejx                  «      dOfZg ejv                  eIdPz  ejx                  «      dQfZh ejv                  eIdRz  ejx                  «      dSfZi ejv                  eIdTz  ejx                  «      dUfZj ejv                  eIdVz  ejx                  ejÖ                  z  «      dWfZl ejv                  dXejÖ                  «      dYfZmdZ„ Znd[„ Zo ejv                  d\ejx                  «      Zp ejv                  d]ejx                  «      Zq ejv                  d^ejx                  «      ZrdÅd_„Zsd`„ ZtdÆda„Zudb„ ZvdÄdc„Zw ejv                  ddejx                  «      Zx ejv                  deejx                  «      Zy ejv                  dfejx                  «      Zz ejv                  dgejx                  «      Z{ ejv                  dhejx                  «      Z| ejv                  di«      Z} ejv                  dj«      Z~ ejv                  dkejx                  «      Zdl„ Z€dm„ Z�dn„ Z‚do„ Zƒdp„ Z„dq„ Z…dr„ Z† ejv                  dsejx                  «      Z‡ ejv                  dtejx                  «      Zˆ ejv                  duejx                  «      Z‰ ejv                  dvejx                  «      ZŠ ejv                  dwejx                  «      Z‹dx„ ZŒdy„ Z�dz„ 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jv                  dŠejx                  «      Zžd‹„ ZŸ ejv                  dŒejx                  «      Z d�„ Z¡dŽ„ Z¢d�„ Z£d�„ Z¤d‘„ Z¥dÍd’„Z¦i fd“„Z§d”„ Z¨ ejv                  d•«      j‚                  Z©d–„ Zªd—„ Z« ejv                  d˜ejx                  «      Z¬dÈd™„Z­dš„ Z®g fd›„Z¯dœ„ Z° ejv                  d�ejx                  «      Z± ejv                  džejx                  «      Z² ejv                  dŸejx                  «      Z³ ejv                  d ejx                  «      Z´ ejv                  d¡ejx                  «      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Â�tz        �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Ì«      › d¤�«       Œš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        rG e1dÂ eÎt0        «      › d¤�d«        e¿eÓ«      ZÔ eÏt0        dÃ«      5 ZÇeÇ�j«                  eÔ«       ddd«       eÊr	 eGeÓ«       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© ó    úM/root/workspace/.venv/lib/python3.12/site-packages/numpy/f2py/crackfortran.pyÚreset_global_f2py_varsr*   È   s�   € ð €IØ€NØ€EØ€GØ€GØ€KØ€MØ€MØ€NØ€KØ€Eà€LÜ˜rÐ"€IØ€LØ€KØ€OØ€KØ€MØ€KØÐØ€OØ€MØ€IØ€IØ€MØÑr(   c                 ó¨   — t         sy t        sE|r#t        j                  j	                  t
        «       t        j                  j	                  | «       y y ©N)r   r   ÚsysÚstdoutÚwriter    )ÚlineÚflags     r)   Úoutmessr2   î   s:   € õ ØÝÙÜ�J‰J×ÑÔ-Ô.Ü�
‰
×Ñ˜Õð r(   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)   Ú
rmbadname1rq     s6   € ØŒxÑÜÐ)¨$¨¨x¼À¹Ð7GÀtÐLÔMÜ˜‰~ÐØ€Kr(   c                 ó>   — | D �cg c]  }t        |«      ‘Œ c}S c c}w r,   )rq   ©ÚnamesÚ_ms     r)   Ú	rmbadnamerv     s   € Ø%*Ö+˜rŒJ�r�NÒ+Ð+ùÒ+ó   …c                 óZ   — | t         v r"t        d| › dt         |    › d�«       t         |    S | S )Nzundo_rmbadname1: Replacing "rk   rl   )Úinvbadnamesrn   ro   s    r)   Úundo_rmbadname1rz     s8   € ØŒ{ÑÜÐ.¨t¨f°H¼[ÈÑ=NÐ<OÈtÐTÔUÜ˜4Ñ Ð Ø€Kr(   c                 ó>   — | D �cg c]  }t        |«      ‘Œ c}S c c}w r,   )rz   rs   s     r)   Úundo_rmbadnamer|     s   € Ø*/Ö0 BŒO˜BÕÒ0Ð0ùÒ0rw   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ª   L  sò   € ð €FÜˆEƒ{×Ñ×ÑÓ!Ô%;Ñ;ØˆÜ	�%˜Ó	ð & Ø×ÑÓ!ˆØˆÜ˜ÔØ‰AÜ˜TÔ"ØˆAØˆFØ�!Še™Ø�A‰w˜#Š~ $§*¡*¤,Ø�Q‘�Ø˜‘G˜t’O¬¸¸R¸a¸Ô(AÀdÈ2ÈbÀkÐUXÒFXØ!�FØØ×#Ñ#Ó%ˆDð �!Šeš÷&ð €M÷&ð €Mús   ºBCÃCc           
      ó  — |s/t         t        t        t        t        t
        t        t        t        f	}| g k(  ryt        }d}d}d}t        j                  dt        j                  «      }t        j                  d«      }	t        j                  d«      }
t        j                  d«      }|r	 |dd«       d	\  }}d
gt        d«      D �cg c]  }t        |«      ‘Œ c}z   }dat        j                  | t         ¬«      }	 	 |j#                  «       }|s�nÄ|j-                  «       rÙda|j)                  «       ada |}dadat.        j0                  j3                  t        «      d   }t5        t        «      j6                  j9                  «       t:        v rt=        |«      st?        |«      sdantA        t        «      rt?        |«      sdat        rtB        antD        atG        dt        ›dt        › t        rdnd› d�«       |jI                  «       jK                  dd
«      }|dk(  s|d   dvrn|dd }|dk(  sŒd}tM        |d«      \  }}|d
z  }|dd j9                  «       dk(  rtM        |dz   |dd z   d«      \  }}d}|jO                  «       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tQ        |«      d#kD  r|dd# }|d   |vrt'        d$|›�«      ‚|rt        r$tQ        |«      dkD  r|d   d
k(  s||d%d z   }d}d}�nu|	jS                  |«      }|r|jU                  d&«      }|r)||
jS                  |«      jU                  d&«      z   }d}d}�n&d"|dd z   }|r|j9                  «       }n|}|}|}�nt        dk(  rß|sbd'k(  r]|jS                  |«      rL|d(z   }	 |j#                  «       }|stW        d)«       n||z   }|jS                  |«      rnŒ6|jY                  «       }|	jS                  |«      }|r|jU                  d&«      }|r(||
jS                  |«      jU                  d&«      z   }d}d}n(|r |rt[        |«      s|j9                  «       n|}n|}|}|}|du}nt]        d*t_        t        «      › �«      ‚d+|ja                  «       dz
  › d,t        › d-|› d.�a|jS                  |«      }|rö|jU                  d/«      }t.        j0                  jc                  |«      rte        ||d¬0«       n¿t.        j0                  jg                  t        «      gth        z   }d}|D ]S  }t.        j0                  jk                  ||«      }t.        j0                  jc                  |«      sŒCd}te        ||d¬0«        n |s8tG        d1|›d,t.        jl                  jk                  |«      › d2�«       n ||«       |}�ŒÙ|r|j9                  «       }n|}|}d+|ja                  «       dz
  › d,t        › d-|› d.�a|jS                  |«      }|rö|jU                  d/«      }t.        j0                  jc                  |«      rte        ||d¬0«       n¿t.        j0                  jg                  t        «      gth        z   }d}|D ]S  }t.        j0                  jk                  ||«      }t.        j0                  jc                  |«      sŒCd}te        ||d¬0«        n |s8tG        d1|›d,t.        jl                  jk                  |«      › d2�«       n ||«       da|jo                  «        |r
 |dd«       y\	  a aaaaaaaayc c}w # t$        $ r6}t'        d|j)                  «       › d|j+                  «       › d|› d�«      ‚d}~ww xY w)3zõ
    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   zvreadfortrancode: Found non-(space,digit) char in the first column.
	Are you sure that this code is in fix form?
	line=é   r0   ú.pyfú
z.Unexpected end of file when reading multiline
z4Flag sourcecodeform must be either 'fix' or 'free': zLine #z in z:"z"
	rp   )Ú
dowithlineÚistopz-readfortrancode: could not find include file ú. Ignoring.
)8r   r    r!   r   r   Úbeginpatternr   r   r   ÚreÚcompileÚIÚrangeÚstrÚ	fileinputÚ	FileInputr–   r¢   ÚUnicodeDecodeErrorÚ	Exceptionr‘   ÚlinenoÚisfirstliner…   r†   Úsplitextr   rŸ   r    ÚCOMMON_FIXED_EXTENSIONSr¤   Ú_has_fix_headerrª   Úbeginpattern77Úbeginpattern90r2   Ú
expandtabsÚreplaceÚsplit_by_unquotedr¥   rW   ÚmatchÚgrouprn   ÚrstripÚiscstyledirectiveÚ
ValueErrorÚreprÚ
filelinenoÚisfileÚreadfortrancodeÚdirnamer%   ÚjoinÚpathsepÚclose)Úffiler¹   rº   ÚsaveglobalsÚlocaldolowercaseÚcontÚ	finallineÚllÚincludelineÚcont1Úcont2Ú
mline_markÚl1ru   ÚspacedigitsÚfinÚlÚmsgÚextÚis_f2py_directiveÚrlÚ_Úorigfinalliner˜   ÚlcÚmÚfnÚinclude_dirsÚ	foundfileÚinc_dirÚfn1s                                  r)   rØ   rØ   f  s˜  € ñ Ü!Ô#3´_ÄnÔV_Üœ%¤¬+ð6ˆà�‚{ØÜ"Ðð €DØ€IØ	€BÜ—*‘*Ø5´r·t±tó=€Kä�J‰JÐ,Ó-€EÜ�J‰JÐ-Ó.€EÜ—‘˜IÓ&€JÙÙ�2�rÔØ�F€BˆØ�%¬U°2«YÖ7 rœ3˜r�7Ò7Ñ7€KØÐÜ
×
Ñ
˜e¬hÔ
7€CØ
ð	Ø—‘“ˆAñ ÙØ�?‰?ÔØ!ÐØ!Ÿl™l›nˆOØˆKØˆBØˆIØ"ˆNÜ—'‘'×"Ñ"¤?Ó3°AÑ6ˆCÜ”OÓ$×+Ñ+×1Ñ1Ó3Ô7NÑNÜ(¨Ô+¬¸qÔ/AØ‘	Ü¤Ô0¼ÈÔ9KØ!'�ÝÜ-‘ä-�Ü�o¤oÐ%8ð 9Ü-Ð.½I©yÈ2Ð.NÈcðSô Tð �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˜;Ñ&Üð !EàEFÀEð!Kó Lð Lñ �I¬C°«F°QªJ¸qÀ¹tÀsº{à˜!˜A˜B˜%‘Z�Ø�	Ø "’à—K‘K “N�ÙØŸ™ ›�AÙØ˜eŸk™k¨!›n×2Ñ2°6Ó:Ñ:�BØ "�IØ$&’Mð   ! A B %™�Aá'Ø$&§H¡H£J™	à$&˜	Ø$&�MØ’Bä˜vÒ%Ù˜C 6šM¨j×.>Ñ.>¸qÔ.AØ˜‘H�ØØŸ™›�BÙÜØMôOàØ˜B™�AØ!×'Ñ'¨Ô+Øð ð —H‘H“J�Ø—‘˜A“ˆAÙØ—G‘G˜F“O�ÙØ˜%Ÿ+™+ a›.×.Ñ.¨vÓ6Ñ6�Ø�	Ø "‘á#ñ 4EÔIZÐ[]ÔI^ §¡¤
Ðeg‘Ià "�IØ "�Ø�Ø˜T�M‰DäØFÄtÌNÓG[ÐF\Ð]ó_ð _à$ S§^¡^Ó%5¸Ñ%9Ð$:ð ;"Ü"1Ð!2°"°R°D¸ð?Ðà×Ñ˜mÓ,ˆÙØ—‘˜“ˆBÜ�w‰w�~‰~˜bÔ!Ü ¨zÀÖCô —G‘G—O‘O¤OÓ4ð 6Ü8Eñ F�à�	Ø+ò �GÜŸ'™'Ÿ,™, w°Ó3�CÜ—w‘w—~‘~ cÕ*Ø$%˜	Ü'¨¸
È!ÕLÙðñ !ÜÐKÈBÈ6ð R"Ü"$§*¡*§/¡/°,Ó"?Ð!@ÀðOõ Pñ �yÔ!Øˆñy ñ| Ø—H‘H“J‰	àˆ	Ø€MØ §¡Ó 0°1Ñ 4Ð5°T¼/Ð9JÈ"ÈRÈDÐPUÐVÐØ×Ñ˜-Ó(€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Ùðñ ÜÐGÈÀvð NÜ Ÿj™jŸo™o¨lÓ;Ð<¸MðKõ Lñ 	�9ÔØÐØ‡I�I„KÙÙ�2�qÕð 9Dñ	6ˆÐ% ¸È	Ø˜% ©+ùòA 8øô "ò 	ÜØ+¨C¯L©L«NÐ+;¸1¸S¿Z¹Z»\¸NØ   ð &ðóð ûð	ús   Ã]Ã<] Ý	^Ý1^Þ^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ú.*rg   z|static|automatic|undefined)z([a-z]+[\w\s(=*+-/)]*?|)Úfunctionrù   rø   Úbegin)z	[a-z\s]*?Ú
subroutinerû   rø   zprogram|block\s*datazM|module(?!\s*procedure)|python\s*module|(abstract|)\s*interface|type(?!\s*\()z\end|endprogram|endblockdata|endmodule|endpythonmodule|endinterface|endsubroutine|endfunctionÚendzDend\s*(if|do|where|select|while|forall|associate|critical|enum|team)z[\w]*?Úendifzmodule\s*procedureÚmoduleprocedure)r
   Úimplicitrÿ   rø   rÿ   )r
   údimension|virtualr   rø   Ú	dimension)r
   Úexternalr  rø   r  )r
   Úoptionalr  rø   r  )r
   Úrequiredr  rø   r  )r
   Úpublicr  rø   r  )r
   Úprivater  rø   r  )r
   Ú	intrinsicr  rø   r  )r
   úintent|depend|note|checkr  z\s*\(.*?\).*Úintent)r
   Ú	parameterr
  z\s*\(.*r
  )r
   Údatar  rø   r  )r
   Úcallr  rø   r  )r
   Úentryr  rø   r  )r
   Úcallfunr  rø   r  )r
   Úcommonr  rø   r  )r
   Úuser  rø   r  )r
   Úcontainsr  r
   r  )r
   Úformatr  rø   r  )r
   úKthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddefr  rø   Úf2pyenhancementsz2\s*(?P<before>''')(?P<this>.*?)(?P<after>''')\s*\ZÚ	multilinec           	      óL  — t        d«      t        |«      z  rJ d«       ‚t        j                  dj                  dt        j                  |«      › d�dt        j                  |«      › d�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("([^"\\]|(\\.))*"))Ú
not_quotedr:   Úsingle_quotedÚdouble_quotedÚbeforeÚafterr
   )Úsetr½   r¾   r  ÚescaperÐ   Ú	groupdict)r0   Ú
charactersr˜   rò   Úds        r)   rÏ   rÏ   ˜  s®   € ô �E“
œS ›_Ò,ÐPÐ/PÓPÐ-Ü
�
‰
ð	!ß!'¡ØœrŸy™y¨Ó4Ð5°QÐ7Ø”R—Y‘Y˜zÓ*Ð+¨1Ð-Ø0Ø0ð	 "(ó "2ó	3€Að 	
�‰�‹€AÙØ�K‰K‹MˆØ�(‘˜Q˜w™ZÐ(Ð(Ø�"ˆ:Ðr(   c                 óº   — g }t        | «      j                  d«      D ],  }dD ]  }|j                  |d«      }Œ |j                  |«       Œ. dj	                  |«      S )Nú@,@z(),rï   ú,)ÚmarkoutercommaÚsplitrÎ   ÚappendrÚ   )ÚargslineÚar©   r˜   s       r)   Ú_simplifyargsr+  ¬  s`   € Ø
€AÜ˜HÓ%×+Ñ+¨EÓ2ò ˆØò 	"ˆAØ—	‘	˜!˜SÓ!‰Að	"à	�‰��ðð �8‰8�A‹;Ðr(   z"\s*(?P<result>\b[a-z]+\w*\b)\s*=.*z \s*(?P<bind>\b[a-z]+\w*\b)\s*=.*zH\s*bind\(\s*(?P<lang>[^,]+)\s*,\s*name\s*=\s*"(?P<lang_name>[^"]+)"\s*\)c                 ól  — 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        ›d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|
› d�tU        | «      tR        jV                  «      }|sŒl|	j                  |jY                  d«      «      }t[        |jY                  d«      «      }|rd|
› d|› d|jY                  d«      › d�} n	d|
› d|› d�} t\        d   j                  | «      }|st        dt	        | «      › d�«        yt_        |d| «        y t`        dkD  s,t`        dk(  r8tb        je                  «       jg                  d«      rda4t        dt        › d �«       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        › d#�«      ‚t8        d   j                  | «      }|rQ|jY                  d$«      t        t           k(  s2tk        d%|jY                  d$«      ›d&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Úblockrp   r   é   zcrackline: groupcounter=z groupname=r¸   zYcrackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
Ú	externalsÚ
interfacedz(?P<before>[^"]*)\bz \b\s*@\(@(?P<args>[^@]*)@\)@.*\Zr  Úargszcallfun ú(z
) result (r¨   ú)z4crackline: could not resolve function call for line=ú.
r  r·   z
crackline:z: No pattern for line
rü   zcrackline: groupcounter(=z#) 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_1ry   r½   Úmarkouterparenr¿   rÑ   r+  ÚcallfunpatternÚanalyzeliner   r!   r    Úendswithr&   rÅ   r    r   r   r   r   )r0   Úresetrï   Úhas_semicolonÚsemicolon_lineÚflr1   Úpatrò   Úre_1rp   Úm1Úm2r*  s                 r)   r;  r;  ¹  sc  € ô )¨¨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ÒÜÐ.¬|Ð.>¸kÌ)ÈÐVXÐYÔZÜØ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Ø*¨4¨&Ð0PÐQÜ" 4Ó(¬"¯$©$ó0�ò ØŸ™ B§H¡H¨XÓ$6Ó7�BÜ% b§h¡h¨vÓ&6Ó7�AÙØ!)¨$¨¨q°°°:¸b¿h¹hÀxÓ>PÐ=QÐQRÐS™à!)¨$¨¨q°°°1Ð5˜Ü& qÑ)×/Ñ/°Ó5�AÙÜØRÔSWÐX\ÓS]ÐR^Ð^aÐbôdáÜ  9¨dÔ3Ùð+ô, �QŠ;œ7 aš<¬O×,AÑ,AÓ,C×,LÑ,LÈVÔ,TØ#ÐÜ�j¤ Ð.EÐFÔGØØ	ˆQ‰�5‹Ø”Ô.¤,Õ.Ü'¨!Ñ+ˆLÜ¤,Ò.ØÜ˜1ÒÜÐ7¼°~ð F0ð 0ó 1ð 1ä˜!‰_×"Ñ" 4Ó(ˆÙ˜Ÿ™ &Ó)¬Y´|Ñ-DÒDÜÐ3°B·H±H¸VÓ4DÐ3Gð HHä(¬Ñ6Ð9¸Ô>NÐ=OðQó Rð Rô œ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   r5  r   ú@(@r6  ú@)@r'   )r0   rê   Úfr²   s       r)   rV  rV  T  sq   € Ø
€AØ	€AØò ˆØ�Š8Ø�A‘ˆAØ�AŠvØ˜‘I�ØØ�#ŠXØ�A‘ˆAØ�AŠvØ˜‘I�ØØ�‰E‰ðð €Hr(   c                 ó  — d}d}t        | |dz   «      \  }}||z  }|rY|d   |k(  r|dk(  r|d|z   dz   z  }n#||d   z  }|d   dk(  r|dz  }n|d   dk(  r|dz  }t        |dd  |dz   «      \  }}||z  }|rŒY|rJ t        || |f«      «       ‚|S )Nr
   r   ú()ú@r5  r   r6  )rÏ   rÕ   )r0   Úcommarê   re  r  r  s         r)   r&  r&  f  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 )Nrc  r5  rd  r6  )rÎ   )r0   r˜   s     r)   Úunmarkouterparenrk  y  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|› d	�«       Œ�t        d
t        |«      z   «      ‚ | S )Nr3   ÚattrspecÚkindselectorÚcharselector)ú=ÚtypenameÚnote)r	  Úcheckr  r  r  Údependzappenddecl: "z" not implemented.
z-appenddecl: Unknown variable definition key: )ÚlistÚkeysÚsetattrspecÚsetkindselectorÚsetcharselectorrn   rÅ   rÁ   )ÚdeclÚdecl2ÚforceÚkrê   s        r)   Ú
appenddeclr~  ~  s  € ÙØˆÙØˆØˆu�}ØˆÜ�%—*‘*“,Óò $ˆØ�
Š?Ù˜ šØ ™(��Q’Ø�*Š_Ø˜1‘Xò 3�Ü" 4¨¨EÓ2‘ñ3à�.Ò Ü" 4¨¨q©°5Ó9‰DØ�.Ò Ü" 4¨¨q©°5Ó9‰DØÐ#Ñ#Ù˜ šØ ™(��Q’Ø�&Š[ØØð )ñ )ä�m A 3Ð&:Ð;Õ<äÐKÜ ›Fñ#ó $ð $ð)$ð, €Kr(   zD\s*(?P<this>(@\(@.*?@\)@|\*[\d*]+|\*\s*@\(@.*?@\)@|))(?P<after>.*)\Zz[(?:,(?P<attributes>[\w(),]+))?(::)?(?P<name>\b[a-z$_][\w$]*\b)(?:\((?P<params>[\w,]*)\))?\Zzª\s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P<bind>(?:(?!@\)@).)*)\s*@\)@))*\s*\ZzF\s*(?P<scheme>(operator|assignment))@\(@\s*(?P<name>[^)]+)\s*@\)@\s*\Zz9\s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Zz4([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)zA([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))zintent\s*\(.*?\bcallback\bc                 ó`   — | j                  dg «      D ]  }t        j                  |«      sŒ y y)Nrm  r   r   )ÚgetÚ_intentcallbackpatternrÐ   )Úvdeclr*  s     r)   Ú_is_intent_callbackrƒ  ²  s2   € Ø�Y‰Y�z 2Ó&ò ˆÜ!×'Ñ'¨Õ*Ùðð r(   c                 ód  — dj                  | j                  «       «      } t        j                  | «      }t	        | |«       |re|j                  d«      }|r-|j                  d«      D �cg c]  }|j                  «       ‘Œ c}ng }|j                  d«      ||j                  d«      fS d g d fS c c}w )Nr
   Ú
attributesr%  rp   Úparams)rÚ   r'  ÚtypedefpatternrÐ   ÚprintrÑ   r    )r0   r`  Úattrsr*  s       r)   Ú_resolvetypedefpatternrŠ  ¹  s“   € Ø�7‰7�4—:‘:“<Ó €DÜ	×	Ñ	˜dÓ	#€BÜ	ˆ$�„OÙ	Ø—‘˜Ó&ˆÙ9> E§K¡K°Ó$4Ö5˜q�—‘•Ó5ÀBˆØ�x‰x˜Ó ¨¯©°Ó(:Ð:Ð:Ø��Tˆ>Ðùò 6s   Á)B-c                 óì   — t        j                  dt         j                  «      }|j                  | «      }d }|r8|j	                  d«      }| d |j                  «        | |j                  «       d  z   } | |fS )NzObind\(\s*(?P<lang>[^,]+)(?:\s*,\s*name\s*=\s*["\'](?P<name>[^"\']+)["\']\s*)?\)r   )r½   r¾   r¿   ÚsearchrÑ   Ústartrü   )r0   ÚpatternrÐ   Úbind_statements       r)   Úparse_name_for_bindr�  Ã  sl   € Ü�j‰jÐkÔmo×mqÑmqÓr€GØ�N‰N˜4Ó €EØ€NÙØŸ™ Q›ˆà�N�U—[‘[“]Ð# d¨5¯9©9«;¨<Ð&8Ñ8ˆØ�ÐÐr(   c                 óÖ  — t        | «      \  } }t        | «      } t        j                  | «      }|r3|j	                  d«      |j	                  d«      |j	                  d«      |fS t
        j                  | «      }|r/|j	                  d«      dz   |j	                  d«      z   dz   }|g d d fS t        j                  | «      }|r$|j	                  d«      |j	                  d«      d d fS d g d d fS )Nrp   r4  r¨   Úschemer5  r6  )r�  rV  ÚnameargspatternrÐ   rÑ   ÚoperatorpatternÚcallnameargspattern)r0   Ú
bind_cnamer`  rp   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                 ón8  — | 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|› d	�«       dat        dz   ad
t        t        <   i t        t        <   g t        t        <   g t        t           d<   i t        t           d<   d
t        t           d<   |t        t           d<   dt        t           d<   da|dv �r¬|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(  r8t'        | j                  d«      «      \  }}}d|i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]  }|j/                  «       ‘Œ c}«      }ng }d|v r%d|v r|j1                  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!œ|   }t2        r#t4        d&k(  rt        dk  rt        d'z   ad}|d(vrd}t        dz   ai t        t        <   g t        t        <   |rÁt6        dkD  rt        d)t2        ›d*�d«       d+t        t        <   dt        t           d<   t2        t        t           d<   dt        t           d<   g t        t           d<   g t        t           d,<   g t        t           d#<   i t        t           d<   t        dz   ai t        t        <   g t        t        <   |rØt6        dkD  rt        d-t        ›d.�d«       d/t        t        <   d/t        t           d<   d0t        t           d<   t        t        dz
     }|d   › d1|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d2|j9                  d3d4«      z   }| j                  d5«      t        t           d6<   t;        |«      t        t           d<   |	t        t           d7<   t        dk(  rt        t        t           d<   net2        r4t        d8k(  r+t        t        dz
     d   › d1t        › �t        t           d<   n+t        t        dz
     }|d   › d1|d   › �t        t           d<   t=        t        t           j?                  «       «      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           d9<   |dk(  rg t        t           d:<   |d!v r£|t        t        d'z
     d,   vr"t        t        d'z
     d,   jA                  |«       tC        jD                  t        t        d'z
     d   «      t        t           d<   	 t        t           d   |   t        t           d   |   d   jG                  d;«      = |d<v �rN
r‰t!        jJ                  tL        |
«      }|rm|i it        t           d=<   |j                  d>«      t        t           d=   |   d><   |j                  d?«      r%|j                  d?«      t        t           d=   |   d<   	 tO        t        t           d   |   t        t        d'z
     d   d   «      t        t           d   |<   |d@k(  rX|	rV|	t        t           d   v rD||	k(  s?tO        t        t           d   |   t        t           d   |	   «      t        t           d   |<   	 t        t        d'z
     d#   jA                  |«       |d%k(  rltP        d   j#                  | j                  d5«      d3z   |z   «      }|r=tS        |j                  d«      |j                  d«      «      \  }}}}tU        ||||«       |d!v r¿t        t        dz
     jA                  t        t           «       t        t           t        t        dz
     d&   d<   t        t        = t        dz
  at        t        dz
     jA                  t        t           «       t        t           t        t        dz
     d&   d<   t        t        = t        dz
  ayy|d9k(  r•t)        | j                  d«      «      \  }}}	}|�s|r@t+        t-        |«      j                  d«      D �cg c]  }|j/                  «       ‘Œ c}«      }ng }|	�J tW        |	«      «       ‚|t        t           d9   |<   d9|t        fayy|dk(  r;tS        || j                  d«      «      \  }}}}tU        ||||«      }|�
dA|t        fayy|dBv �rÛt        t           d   }| j                  d«      j/                  «       }|jY                  dC«      }|dk  r£|dDk(  ržt[        |«      jY                  dE«      d'z
  }|d|dz    dCz   ||dz   d z   }|jY                  dC«      }||d dCk(  rTd"t        t           v rEt        dF| j                  d«      › |d| › d*�«       |dGj]                  t        t           d"   «      z   }|dk  rd}d}n|d| j/                  «       }||d'z   d }t-        |«      j                  d«      }t_        |«      dkD  r&|d   }t        dHdGj]                  |dd «      ›dI�«       d}t-        |«      j                  d«      D �cg c]  }|j/                  «       ‘Œ c}D �]'  }t`        j#                  |«      }|s3|dJv rd}nFtc        | je                  «       «       t        dK|› dL|›dM�«       ŒNt;        |j                  d«      «      }|dJv r|dNv r||j                  d«      z  }||vri ||<   |dOk(  r||j                  d«      z   }|dDk(  rÖ| j                  d«      |z   }tf        j#                  |«      r­|t        t           d"   vrŒt        dkD  rsdPt        t        d'z
     d   vrt        dQ«       |t        t           d   k7  r_t        dR|› dSt        t           d   › dT�«       t        t           d"   jA                  |«       nti        dU|› dV�«       nti        dU|› dW�«       |dXv r|}d||   v r||   d   jA                  «       n	g||   d<   |d;k(  rrt        t           d   d
k(  rt        dY«       �ŒÔ|t        t           d"   vr�Œèd,t        t           vrg t        t           d,<   t        t           d,   jA                  |«       |}�Œ* |t        t           d<   |�
dA|t        fayy|dZk(  rK| j                  d«      j                  dG«      D �cg c]  }|j/                  «       ‘Œ c}t        t           d[<   y|d\k(  �r?t        t           d   }| j                  d«      j/                  «       dd& }d}t-        |«      j                  d«      D �]Ð  }	 |j                  d]«      D �cg c]  }|j/                  «       ‘Œ c}\  }}tk        |«      } t;        |«      }||vri ||<   d]||   v r&||   d]   |k(  st        da|› db||   d]   › dc|› d	�«       tm        || «      }|rù|jo                  dd«      dek(  ržt=        |«      }!tp        js                  |«      D ]i  } t=        || ju                  «       | jw                  «        j                  «       j9                  dfdg«      «      |!| ju                  «       | jw                  «        Œk dj]                  |!«      }nG|jo                  dd«      dhk(  r3|dd j                  «       j9                  dfdg«      j9                  dGdi«      }	 ty        |i | «      }"tW        |"«      ||   d]<   d||   v r||   d   jA                  d\«       n	d\g||   d<   |}�ŒÓ |t        t           d<   |�
dA|t        fayy|dlk(  �rƒ| j                  d«      j/                  «       j                  «       dmk(  rdt        t           dl<   y| j                  d«      �r/t        t           jo                  dli «      }$|$€t        dn«       i }$t-        | j                  d«      «      j                  d«      D �]Å  }i }%t!        j"                  do|t         j$                  «      }|st        dp|› d`�«       Œ=t€        j#                  |j                  d«      «      }&|&st        dq|› d`�«       ŒstS        |&j                  d«      |&j                  d«      «      \  }}}}tƒ        ||«      \  }'}(})||%dd<   |'|%dr<   |(|%ds<   |)|%dt<   t=        |%j?                  «       «      D ]  }|%|   rŒ	|%|= Œ t-        |j                  d«      «      j                  d«      D ]­  }*du|*v r2	 |*j                  du«      D �cg c]  }|j/                  «       ‘Œ c}\  }+},n|*j/                  «       x}+},t_        |+«      t_        |,«      cxk(  rdk(  sn t        dv|*› dx�«       Œzt…        t‡        |+«      t‡        |,«      dz   «      D ]  }-|%|$t‰        |-«      <   Œ Œ¯ �ŒÈ |$t        t           dl<   yy|dyk(  �r÷g }d}.d}/d}0d}1d}2| j                  d«      D ]—  }3|2s|3dzk(  r|1 }1|3d{k(  r|1r|0dz   }0Œ|3d|k(  r|2dz   }2n
|3d}k(  r|2dz
  }2|0dk(  r|.|3z   }.Œ:|0dk(  r|/|3z   }/ŒE|0d'k(  sŒK|.j/                  «       }.|.j‹                  dG«      r|.dd j/                  «       }.|jA                  |.|/g«       |3}.d}/d}0Œ™ |0d'k(  rG|.j/                  «       }.|.j‹                  dG«      r|.dd j/                  «       }.|jA                  |.|/g«       t        t           jo                  di «      }4d}|D �]²  }5|5d   j/                  «       j�                  dG«      |5d   j/                  «       c|5d<   |5d<   |5d   j‹                  d|«      rt        d~|5d   › d�«       Œgt�        t+        t-        |5d   «      j                  d«      D �cg c]  }|j/                  «       ‘Œ c}«      «      D ]þ  \  }6}"|"j‹                  d|«      rt        d~|"› d�«       Œ'd€|5d   v rt        d�|5d   › d�«       ŒA|4j‘                  |"i «       |4|"   jo                  dd«      }7t“        |4|"   «      }8|7dhk(  rt!        j”                  d‚|5d   «      n|5d   j                  dG«      }9	 |8rdƒd„j]                  |9«      › d…�n|9|6   }:|4|"   jo                  d]«      }?|?r|?|:k7  rt        dˆ|"› db|?› d‰|:› d`�«       |:|4|"   d]<   |"}�Œ  �Œµ |4t        t           d<   |r
dA|t        fayy|dŠk(  �r| j                  d«      j/                  «       }|d   d{k(  sd‹|z   }g }@t!        j                  d{|d'¬Œ«      \  }}A}B|Aj/                  «       }A|Asd�}A@jA                  ABg«       i }CdŠt        t           v rt        t           dŠ   }C@D ]i  }3|3d   Cvrg C|3d   <   t-        |3d   «      j                  d«      D �cg c]  }|j/                  «       ‘Œ c}D ]  }|sŒC|3d      jA                  |«       Œ Œk Ct        t           dŠ<   dŠAt        fay|dŽk(  �r·t!        j"                  d�| j                  d«      t         j$                  «      }|�rY|je                  «       }DdŽt        t           vri t        t           dŽ<   |j                  d«      }i t        t           dŽ   |<   d}Ed�Dv �r%Dd�   ��d‘Dv rDd‘   €d}EEt        t           dŽ   |   d’<   Dd�   j                  dG«      D �cg c]  }|j/                  «       ‘Œ }}i }F|D ]¡  }5d]|5v r€t!        j"                  d“|5t         j$                  «      }&|&r@|&j                  dŽ«      j/                  «       F|&j                  d”«      j/                  «       <   nt        d•tW        |5«      › d*�«       n|5F|5<   Ft        t           dŽ   |   d–<   Œ£ ytc        | je                  «       «       t        d—«       yyy|d˜v r«d™t        t           vri t        t           d™<   t        t           d™   }G| j                  d«      dšk(  rDdšGv r@t¡        Gdš   t¢        «      r	Gdš   g|Gdš<   Gdš   jA                  | j                  d«      «       y| j                  d«      G| j                  d«      <   y|dk(  rIt        €t6        rt        d›«       yt        }Ht¥        t        |H   t        dd' | j                  d«      «       yt6        dkD  r%tc        | je                  «       «       t        dœ«       yyc c}w # tH        $ r Y �Œww xY w# tH        $ r Y �Œ´w xY w# tH        $ r Y �ŒDw xY wc c}w c c}w c c}w c c}w # tH        $ r t        d^|› d_|› d`�«       Y �Œçw xY w# tz        t|        t~        f$ r}#ti        dj|›dk|#› d*�«       Y d}#~#�Œd}#~#ww xY wc c}w # tH        $ r t        dv|*› dw�«       Y �ŒŠw xY wc c}w # t–        $ rÐ t™        d†„ |9D «       «      ržg };|9D ]•  }<d‡|<v rp	 |<j                  d‡«      \  }=}>|;j›                  |>j/                  «       gt�        |=«      z  «       ŒI# tž        $ r" |;jA                  |<j/                  «       «       Y Œsw xY w|;jA                  |<j/                  «       «       Œ— |;}9|8rdƒd„j]                  |9«      › d…�n|9|6   }:Y �Œw xY wc c}w c c}w )�a˜  
    Reads each line in the input file in sequence and updates global vars.

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

    At the end of analyzeline, information is filtered into the correct dict
    keys, but parameter values and dimensions are not yet interpreted.
    r8  r  N)rú   r  r  rg   r   ú.r   z=analyzeline: no group yet. Creating program group with name "rl   Úprogramr.  r/  r0  rp   ÚfromskyÚfrom)rú   r  r  zblock\s*dataú
block datazpython\s*moduleúpython modulezabstract\s*interfaceúabstract interfacerg   r  rm  Ú_BLOCK_DATA_r
   )Ú	interfacer�  rŸ  z2analyzeline: No name/args pattern found for line.
r$  z<analyzeline: argument list is malformed (missing argument).
)r  r  r4  r3  rû   rù   r   r1  ©r¡  rŸ  z#analyzeline: Creating module block r¸   Úmoduler2  z?analyzeline: Creating additional interface block (groupcounter=z).
r¡  Úunknown_interfaceú:Úunknown_r¬   rï   r  Úprefixr¨   é   r  Úvarnamesr  ©rù   rû   ÚbindlangÚlangÚ	lang_namer  Úvariable)r  r	  r  r  r  r  r  r  ú::r	  rd  z"All arguments will have attribute r%  zTanalyzeline: cannot handle multiple attributes without type specification. Ignoring r7  ©r  r  z&analyzeline: no name pattern found in z statement for ú. Skipping.
>   ÚoperatorÚ
assignmentr  Ú__user__z8analyzeline: missing __user__ module (could be nothing)
z(analyzeline: appending intent(callback) ú to z arguments
zanalyzeline: intent(callback) z is ignored
z is already in argument list
)r  r  r  r  r  r  z(analyzeline: ignoring program arguments
rþ   Úimplementedbyr
  rp  zAanalyzeline: could not extract name,expr in parameter statement "ú" of "ú"
z1analyzeline: Overwriting the value of parameter "ú" ("z	") with "r3   r4   r"  ÚeÚcomplexz+1j*(z analyzeline: Failed to evaluate z. Ignoring: rÿ   Únonez<analyzeline: Overwriting earlier "implicit none" statement.
z9\s*(?P<this>.*?)\s*(\(\s*(?P<after>[a-z-, ]+)\s*\)\s*|)\Zz@analyzeline: could not extract info of implicit statement part "zIanalyzeline: could not extract types pattern of implicit statement part "rn  ro  rq  ú-z2analyzeline: expected "<char>-<char>" instead of "z&" in range list of implicit statement
z*" in range list of implicit statement (2)
r  ú'ú/r5  r6  zanalyzeline: implied-DO list "z" is not supported. Skipping.
rš   zComment line in declaration "z\(.*?\)ú(/ú, z/)c              3   ó$   K  — | ]  }d |v –— Œ
 y­w)r   Nr'   )Ú.0rò   s     r)   ú	<genexpr>zanalyzeline.<locals>.<genexpr>±  s   è ø€ Ò5¨˜3 !œ8Ñ5ùs   ‚r   z*analyzeline: changing init expression of "ú") to "r  z//)ÚmaxsplitÚ_BLNK_r  zR\A\s*(?P<name>\b\w+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\Zru  ÚnotonlyÚonlyz7\A\s*(?P<local>\b\w+\b)\s*=\s*>\s*(?P<use>\b\w+\b)\s*\ZÚlocalz-analyzeline: Not local=>use pattern found in Úmapz0analyzeline: Could not crack the use statement.
)r  r  Úusercodez-analyzeline: No context for multiline block.
z+analyzeline: No code implemented for line.
)SrÑ   r&   r   r   r   r…   r†   Úbasenamer!   r'  r2   r   r<  r=  r   r    r½   rÐ   r¿   rŠ  r—  rv   r&  r¥   Úremover   r   r   rÎ   rq   ru  rv  r(  ÚcopyÚdeepcopyrZ   rÅ   rŒ  Úcrackline_bindlangr~  rN  Úcracktypespec0Ú
updatevarsrÕ   ÚfindrV  rÚ   rW   Únamepatternrˆ  r   r�  rn   Úget_parametersÚdetermineexprtyper€  Úreal16patternÚfinditerr�  rü   ÚevalÚSyntaxErrorÚ	NameErrorÚ	TypeErrorÚtypespattern4implicitÚcracktypespecrÀ   ÚordÚchrrŠ   ÚremoveprefixÚ	enumerateÚ
setdefaultÚgetdimensionÚfindallÚ
IndexErrorÚanyÚextendr7   rÔ   Ú
isinstancerÁ   Úappendmultiline)Irò   r>   r0   r0  Únewnamerp   r‰  rï   r4  r¨   Ú	bindclineÚxÚ
needmoduleÚneedinterfaceÚitÚ
prev_groupr}  ÚbindcdatÚtr3   ÚselectorÚattrÚedeclÚ	last_namerâ   ÚiÚplÚchrº  r`  ÚapÚinitexprr†  ÚttÚvrë   Úimplrz  ra  Ú
kindselectÚ
charselectrq  r˜   ÚbegcÚendcÚoÚdlÚilre  ÚfcÚinpr²   r/  rê   ÚidxÚvtypeÚvdimÚmatchesÚnew_valÚexpanded_listrÐ   Ú
multiplierÚvalueÚcurrent_valÚclÚbnÚolÚ	commonkeyÚmmÚisonlyrî   r"  ÚgcsI                                                                            r)   rX  rX  Ý  sÌ  € ð �G‰G�F‹O€EØˆ{ÒØÐÝ�tÐ#GÑGÝ¤°Ò!1Ü—'‘'×"Ñ"¤?Ó3×9Ñ9¸#Ó>¸qÑAˆÜØKÈGÈ9ÐTXÐYô	[àˆÜ# aÑ'ˆØ"+Œ	”,ÑØ#%Œ
”<Ñ Ø"$Œ	”,ÑØ+-Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø,5Œ
”<Ñ  Ñ)Ø+2Œ
”<Ñ  Ñ(Ø+4Œ
”<Ñ  Ñ(ØˆØÐ+Ò+à—‘“ˆÜ�8‰8�O U¬B¯D©DÔ1Ø ‰EÜ�X‰XÐ(¨%´·±Ô6Ø#‰EÜ�X‰XÐ-¨u´b·d±dÔ;Ø(ˆEØ�FŠ?Ü3°A·G±G¸GÓ4DÓE‰NˆD�%˜Ø6@À%Ð5HŒJ”|Ñ$ VÑ,¨TÑ2ØˆDØ‰Fä,CÀAÇGÁGÈGÓDTÓ,UÑ)ˆD�$˜ 	Øˆ<Ø˜Ò$Ø%‘à�ØÐMÑMÜÐMÔNà! 4¬Ð6ÐÙÜÜ'5°dÓ';×'AÑ'AÀ%Ó'HöJØ"#ð  Ÿg™g�iò Jó K‰Dð ˆDØ�‰:Ø˜‘*Ø—‘˜B”ð ˜’*äØOôQð ˆ
ØˆàÐ&Ñ&ØˆMØœZ¬Ñ5Ñ5ØØœ:¤lÑ3°FÑ;Ñ;ØÜ¤Ñ-ò �Ø�f‘: Ó%Ùðð ”z¤,Ñ/°Ñ=Ñ=ØØ)°jÑAÀ$ÑGˆEÝœ\¨RÒ/´LÀAÒ4EÜ'¨!Ñ+ˆLØˆJØÐ?Ñ?Ø !�ä# aÑ'ˆØ#%Œ
”<Ñ Ø"$Œ	”,ÑÙÜ˜Š{ÜÐ=¼mÐ=NÈbÐQÐSTÔUØ&.Œ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Ñ#ÙÜ˜Š{Üð *Ü(˜?¨$ð0Ø12ô4à&1ŒI”lÑ#Ø0;ŒJ”|Ñ$ WÑ-Ø/BŒJ”|Ñ$ VÑ,Ü#¤L°1Ñ$4Ñ5ˆJØ2<¸VÑ2DÐ1EÀQÀzÐRXÑGYÐFZÐ/[ŒJ”|Ñ$ VÑ,Ø/1ŒJ”|Ñ$ VÑ,Ø46ŒJ”|Ñ$ [Ñ1Ø57ŒJ”|Ñ$ \Ñ2Ø/1ŒJ”|Ñ$ VÑ,Ü'¨!Ñ+ˆLØ')ŒJ”|Ñ$Ø&(ŒI”lÑ#Ø"'Œ	”,ÑØ,1Œ
”<Ñ  Ñ)ÙØ §¡¨c°3Ó 7Ñ7ˆDØ-.¯W©W°XÓ->Œ
”<Ñ  Ñ*Ü+5°dÓ+;Œ
”<Ñ  Ñ(Ø-3Œ
”<Ñ  Ñ*Ü˜1ÒÜ/>ŒJ”|Ñ$ VÒ,Ýœ|¨qÒ0Ü2<¼\ÈAÑ=MÑ2NÈvÑ2VÐ1WÐWXÔYhÐXiÐ/jŒJ”|Ñ$ VÒ,ä#¤L°1Ñ$4Ñ5ˆJØ2<¸VÑ2DÐ1EÀQÀzÐRXÑGYÐFZÐ/[ŒJ”|Ñ$ VÑ,Ü”j¤Ñ.×3Ñ3Ó5Ó6ò 	0ˆAÜœlÑ+¨AÓ.Üœ|Ñ,¨QÑ/ð	0ð ,0Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø02Œ
”<Ñ  Ñ-Ø13Œ
”<Ñ  Ñ.Ø+-Œ
”<Ñ  Ñ(Ø,.Œ
”<Ñ  Ñ)à�FŠ?Ø35ŒJ”|Ñ$ ZÑ0àÐ&Ñ&Øœ:¤l°QÑ&6Ñ7¸ÑDÑDÜœ<¨!Ñ+Ñ,¨[Ñ9×@Ñ@ÀÔFÜ/3¯}©}Üœ<¨!Ñ+Ñ,¨VÑ4ó06ŒJ”|Ñ$ VÑ,ðÜœ|Ñ,¨VÑ4°TÑ:Üœ|Ñ,¨VÑ4°TÑ:¸:ÑF×LÑLÈZÓXðZð Ð.Ò.áÜŸ9™9Ô%7¸ÓC�ÙØ<@À"¸:”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ð 'ð 
�ŠÜ 7¸¿¹ÀÓ8HÓ IÑˆˆd�F˜AØÐÙÜ Ü+9¸$Ó+?×+EÑ+EÀeÓ+Lö"NØ&'ð #$§'¡'¥)ò "Nó O‘ð �Ø�>Ð/¤4¨£<Ó/�>Ø6:ŒJ”|Ñ$ WÑ-¨dÑ3Ø '¨¬|Ð<Ñð ð 
�ŠÜ*8Ø�1—7‘7˜7Ó#ó+%Ñ'ˆ�(˜D %ä˜x¨°4¸Ó?ˆ	ØÐ Ø *¨I´|ÐDÑð !à	ÐnÒ	nÜœ<Ñ(¨Ñ0ˆØ�W‰W�WÓ×#Ñ#Ó%ˆØ�G‰G�D‹MˆØˆqŠ5�T˜XÒ%Ü˜rÓ"×'Ñ'¨Ó.°Ñ2ˆAØ�F�Q˜‘U�˜dÑ" R¨¨A©¨ ZÑ/ˆBØ—‘˜“ˆAØ�!�"ˆv˜Š~ &¬J´|Ñ,DÑ"DÜÐ<ØŸ7™7 6›?Ð+¨B¨r°¨F¨8°2ð7ô 8à˜#Ÿ(™(¤:¬lÑ#;¸FÑ#CÓDÑD�ØˆqŠ5ØˆAØ‰Bà�B�Q�—‘“ˆBØ�A˜‘E�F�ˆBÜ˜BÓ×%Ñ% eÓ,ˆÜˆr‹7�QŠ;Ø�A‘ˆBÜð 4Ø47·H±H¸RÀÀ¸VÓ4DÐ3GÀsðLô Màˆ	ä%3°BÓ%7×%=Ñ%=¸eÓ%DÖE �!—'‘'•)ÒEó 5	ˆAÜ×"Ñ" 1Ó%ˆBÙØÐ0Ñ0Ø‘Aä˜!Ÿ+™+›-Ô(ÜÐDÀTÀFð K#Ø#$ % }ð6ô 7àä˜rŸx™x¨Ó/Ó0�ØÐ,Ñ,°Ð6PÑ1PØ�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Ü 'Ð*RÐSTÐRUØ*.¬z¼,Ñ/GÈÑ/OÐ.Pð Q6ð)6ô !7ô !+¬<Ñ 8¸Ñ @× GÑ GÈÕ Jä#Ø"@ÀÀÀ=Ð QõSô  Ð"@ÀÀð D6ð !6ô 7àÐ]Ñ]Ø�Ø˜U 1™XÑ%Ø�a‘˜Ñ$×+Ñ+¨BÕ/à(* t��a‘˜Ñ$Ø�zÒ!ÜœlÑ+¨GÑ4¸	ÒAÜÐGÔHÙØœJ¤|Ñ4°VÑ<Ñ<ÙØ¤j´Ñ&>Ñ>Ø<>”Jœ|Ñ,¨[Ñ9Üœ<Ñ(¨Ñ5×<Ñ<¸QÔ?ØŠIðk5	ðl ,1Œ
”<Ñ  Ñ(ØÐ Ø *¨I´|ÐDÑð !à	Ð"Ò	"à !§¡¨Ó 0× 6Ñ 6°sÓ ;Ö<˜1ˆQ�W‰W�YÒ<ô 	”<Ñ  Ò1à	�Ó	Üœ<Ñ(¨Ñ0ˆØ�W‰W�WÓ×#Ñ#Ó% a¨Ð+ˆØˆ	Ü Ó#×)Ñ)¨%Ó0ó $	ˆAðØ23·'±'¸#³,Ö?¨Q˜qŸw™w�yÒ?‘��8ô
 $ EÓ*ˆFÜ˜1“ˆAØ˜‰~Ø��a‘Ø�e˜A‘h‰¨¨a©°©¸Ò(AÜÐKÈAÈ3ð OØ" 1™X c™]˜O¨9°X°J¸dðDô Eä! (¨FÓ3ˆAÙØ—5‘5˜Ó$¨Ò.Ü˜h›�BÜ*×3Ñ3°HÓ=ò S˜Ü04Ø$ Q§W¡W£Y¨q¯u©u«wÐ7×=Ñ=Ó?×GÑGÈÈSÓQó1S˜˜1Ÿ7™7›9 Q§U¡U£WÑ-ðSð  "Ÿw™w r›{‘HØ—U‘U˜:Ó&¨)Ò3Ø'¨¨˜|×1Ñ1Ó3×;Ñ;¸CÀÓEß™  WÓ-ð ðÜ˜ 2 vÓ.�ô
 ! ›GˆE�!‰H�S‰MØ˜U 1™XÑ%Ø�a‘˜Ñ$×+Ñ+¨KÕ8à(3 }��a‘˜Ñ$ØŠIðI$	ðJ ,1Œ
”<Ñ  Ñ(ØÐ Ø *¨I´|ÐDÑð !à	�Ó	Ø�7‰7�7Ó×!Ñ!Ó#×)Ñ)Ó+¨vÒ5Ø37ŒJ”|Ñ$ ZÒ0Ø�W‰W�WÕÜœlÑ+×/Ñ/°
¸BÓ?ˆDØˆ|ÜØSôUà�Ü# A§G¡G¨GÓ$4Ó5×;Ñ;¸EÓBó ',�Ø�Ü—X‘XØPÐRSÔUW×UYÑUYó[�áÜØZÐ[\ÐZ]Ð]aÐbôdàÜ*×0Ñ0°·±¸&Ó1AÓB�ÙÜØcÐdeÐcfÐfjÐkômàÜ2@Ø—H‘H˜VÓ$ b§h¡h¨wÓ&7ó39Ñ/�˜( D¨%ä3@Ø˜hó4(Ñ0�
˜J¨à#+��ZÑ Ø'1��^Ñ$Ø'1��^Ñ$Ø#+��ZÑ Ü˜dŸi™i›kÓ*ò $�AØ ›7Ø  ™Gð$ô (¨¯©°Ó(9Ó:×@Ñ@ÀÓGò ,�AØ˜a‘xð%Ø=>¿W¹WÀS»\Ö)J¸¨!¯'©'­)Ò)J™J˜D¡$ð '(§g¡g£iÐ/˜˜tÜ˜t›9¬¨D«	Ô6°QÔ6ÜØPÐQRÐPSÐS~ÐôAà Ü"¤3 t£9¬c°$«i¸!©mÓ<ò ,˜Ø'+˜œS ›Všñ,ò,ð1',ðP 48ŒJ”|Ñ$ ZÒ0ð] ð^ 
�‹ØˆØˆØˆØˆØˆØˆØ—‘˜Ó!ò 	ˆAÙØ˜’8Ø˜�BØ˜’8¡Ø˜A™�AØØ�CŠxØ˜A‘g‘Ø�c’Ø˜A‘g�Ø�AŠvØ˜!‘V‘Ø�a’Ø˜!‘V‘Ø�a“Ø—X‘X“Z�Ø—=‘= Ô%Ø˜A˜B˜Ÿ™›�BØ—	‘	˜2˜r˜(Ô#Ø�Ø�Ø‘ð-	ð. �Š6Ø—‘“ˆBØ�}‰}˜SÔ!Ø˜˜�V—\‘\“^�Ø�I‰I�r˜2�hÔÜœ,Ñ'×+Ñ+¨F°BÓ7ˆØˆ	Øó 0	ˆAØ˜1™Ÿ™›×2Ñ2°3Ó7¸¸1¹¿¹»ˆJˆAˆa‰D�!�A‘$Ø�‰t�‰˜sÔ#ÜÐ8¸¸1¹¸Ð>]Ð^Ô_ØÜ#¤IÄ.ÐQRÐSTÑQUÓBV×B\ÑB\Ð]bÓBcÖ.d¸Q¨q¯w©w­yÒ.dÓ$eÓfò +‘��QØ—<‘< Ô$ÜÐ<¸Q¸CÐ?^Ð_Ô`ð Ø˜!˜A™$‘;ô Ð;¸A¸a¹D¸6ÐA`ÐaÔbØØ—‘  2Ô&Ø˜Q™Ÿ™ JÓ/�Ü# D¨¡GÓ,�Ø:?À9Ò:Lœ"Ÿ*™* Z°°1±Ô6ÐRSÐTUÑRV×R\ÑR\Ð]`ÓRa�ðTÙ=A  4§9¡9¨WÓ#5Ð"6°bÑ9ÀwÈsÁ|�Gð& # 1™gŸk™k¨#Ó.�Ù K°7Ò$:ÜÐHÈÈÈ4ÐP[È}Ð\cÐdkÐclÐlpÐqÔrØ&��Q‘˜‘Ø’	òW+ð0	ðb ,0Œ
”<Ñ  Ñ(ÙØ *¨I´|ÐDÑð à	�Ó	Ø�w‰w�wÓ×%Ñ%Ó'ˆØ�A‰w˜#Š~Ø˜$‘;ˆDàˆÜ—h‘h˜s D°1Ô5‰ˆˆB�Ø�X‰X‹ZˆÙØˆBØ
�	‰	�2�r�(ÔØˆ	Ø”z¤,Ñ/Ñ/Ü"¤<Ñ0°Ñ:ˆIØò 	.ˆAØ�‰t˜9Ñ$Ø"$�	˜!˜A™$‘Ü)7¸¸!¹Ó)=×)CÑ)CÀEÓ)JÖK A�a—g‘g•iÒKò .�ÚØ˜a ™d‘O×*Ñ*¨1Õ-ñ.ð	.ð .7Œ
”<Ñ  Ñ*Ø$ b¬,Ð7ÑØ	�‹Ü�X‰XØaÐcd×cjÑcjÐkrÓcsÔuw×uyÑuyó{ˆâØ—‘“ˆBØœJ¤|Ñ4Ñ4Ø24”
œ<Ñ(¨Ñ/Ø—8‘8˜FÓ#ˆDØ46ŒJ”|Ñ$ UÑ+¨DÑ1ØˆFØ˜Š|  6¡
Ñ 6Ø ‘? r¨)¡}Ð'<Ø�FØ@F”
œ<Ñ(¨Ñ/°Ñ5°fÑ=Ø)+¨F©×)9Ñ)9¸#Ó)>Ö? A�a—g‘g•iÐ?�Ð?Ø�Øò F�AØ˜a‘xÜŸX™XØVÐXYÔ[]×[_Ñ[_óa˜áØ<>¿H¹HØ %ó='ß',¡u£wð ˜rŸx™x¨Ó0×6Ñ6Ó8Ò9ô $Ø"OÔPTÐUVÓPWÈyÐXZÐ [õ]ð !"˜˜1™ØCE”Jœ|Ñ,¨UÑ3°DÑ9¸%Ò@ñFô �!—+‘+“-Ô ÜÐGÕHð+ !7ˆ|ð, 
Ð%Ñ	%Ø¤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™Ü(¨¨!Ð,ØŸ™ ›õ	)ô 
�1ŠÜˆa�k‰k‹mÔÜÐ>Õ?ð 
ùòmJøôJ ò Úðûô ò Úðûô ò Úðüò."NùòL Fùòv =ùò @øÜò ÜØWÐXYÐWZÐZ`ÐacÐ`dÐdhÐiôkâðûô0  ¤¬IÐ6ò ÜÐ:¸8¸,ð G%Ø%( E¨ð-ô .åûðüòb *KøÜ(ò %Ü#Ø"TÐUVÐTWÐW~Ð ôAâ$ð%üòn /eøô* "ò Tô
 Ñ5¨WÔ5Ô5Ø(*˜Ø%,ò D˜EØ" e™|ð!HØ8=¿¹ÀCÓ8HÑ$5 J°Ø$1×$8Ñ$8¸%¿+¹+»-¸Ì3ÈzË?Ñ9ZÕ$[øÜ'1ò !HØ$1×$8Ñ$8¸¿¹»Ö$Gð!Húð !.× 4Ñ 4°U·[±[³]Õ CðDð #0˜Ù=A  4§9¡9¨WÓ#5Ð"6°bÑ9ÀwÈsÁ|“Gð#TüòV Lùò& @sA  È)Aj	Û,7Aj Þ4AAj á"Aj. ç4Aj>ðAkúAküAkü!Akü8AkÁBAk4ÁKAl-ÁKAl(ÁK0Al-ÁT=AmÁXAmÁ]Ap-Áa4Ap2Áj	AjÁjAjÁj	Aj+Áj*Aj+Áj.	Aj;Áj:Aj;ÁkAkÁkAk1Ák0Ak1Ák4Al%ÁlAl Ál Al%Ál(Al-Ál-Am	ÁmAm	Ám&Ap*Ám8A An9Án8Ap*Án9(Ao$Áo!Ap*Áo#Ao$Áo$AAp*Áp)Ap*c                 óZ   — d| vri | d<   | d   }||vrg ||<   ||   j                  |«       y )NÚf2pymultilines©r(  )rÑ   Úcontext_nameÚmlr"  s       r)   rë  rë    sC   € Ø˜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»  r6   Úlogicalr4   Ú	characterrg   r8  r  r¯  r   r1  )r½   rÐ   r¿   r¥   r    ÚselectpatternrV  r2   r   ru  rv  rk  rÔ  )r3   râ   rõ  rö  r`  r"  r}  rù  s           r)   rÒ  rÒ    s  € Ø€HØ€DÜ	‡x�xÐ# X¬r¯t©tÔ4Ø#‰Ü	�‰Ð'¨´2·4±4Ô	8Ø%‰à—>‘>Ó#×)Ñ)Ó+ˆÜ	×	Ñ	œ^¨BÓ/Ó	0€BÙÜØMô	OàØ
�‰‹€AÜ�!—&‘&“(‹^ò &ˆÜ  !¡Ó%ˆˆ!Šð&àÐQÑQØ�V‘9ˆØˆw‰ZˆØ
�‰�‹€AØˆA‚vØ�"�1ˆv�|‰|‹~ˆØ��A‘�ˆZˆØ�X˜t RÐ'Ð'r(   z)\s*(?P<name>\b\w+\b)\s*(?P<after>.*)\s*\ZzB\s*(\(\s*(kind\s*=)?\s*(?P<kind>.*)\s*\)|\*\s*(?P<kind2>.*?))\s*\Zz2\s*(\((?P<lenkind>.*)\)|\*\s*(?P<charlen>.*))\s*\Zz§\s*(kind\s*=\s*(?P<kind>.*?)\s*(@,@\s*len\s*=\s*(?P<len>.*)|)|(len\s*=\s*|)(?P<len2>.*?)\s*(@,@\s*(kind\s*=\s*|)(?P<kind2>.*)|(f2py_len\s*=\s*(?P<f2py_len>.*))|))\s*\Zz¿\s*(@\(@\s*(?!/)\s*(?P<array>.*?)\s*@\)@\s*\*\s*(?P<len>.*?)|(\*\s*(?P<len2>.*?)|)\s*(@\(@\s*(?!/)\s*(?P<array2>.*?)\s*@\)@|))\s*(=\s*(?P<init>.*?)|(@\(@|)/\s*(?P<init2>.*?)\s*/(@\)@|)|)\s*\Zc                 óä   — | j                  «       } t        | «      dk  r| S | d   }t        dt        | «      dz
  «      D ]'  }| |   dk(  r| |dz      dv s
| |dz
     dv rŒ || |   z   }Œ) || d   z   }|S )Nr   r   r¬   z()[]{}=+-/* r   )r¥   rW   rÀ   )ÚexprÚexpr2rù  s      r)   Úremovespacesr'  F  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)   Úmarkinnerspacesr0  U  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!        |«      › d
�«       Œ4t#        |j                  d«      «      }i }|t$        t&           d   v �rêt$        t&           d   |   j)                  «       }d|v}|r| |d<   n$| r"| |d   k(  s|d   }t        d|› d|› d| › d�«       d|vrt)        j(                  |«      |d<   nw|rut+        |j-                  «       «      D ]Y  }||d   v r2||   |d   |   k(  s$|d   |   }t        d|› d|› d|› d||   › d�	«       Œ<t)        j(                  ||   «      |d   |<   Œ[ 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 r{d$|v rw|d#   d%k(  r|d$   |d#<   |d$= nc| d&k(  r*d|vs|d   si |d<   d#|d   v r|d   d#= |d#   |d   d'<   |d#= n4|d$   d(z   |d#   z   |d$<   |d#= |d$   }t/        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 r7d/|v r+|d/   |d.   k(  s |d/   }|d.   }t        d0|› d|› d|› d�«       n|d.   |d/<   d$|v rƒd1|d$   › d2�}d|vs|d   s|g|d<   nj|d   j                  |«       |d   D ]-  }|dd3 d4k(  sŒ||k7  sŒ|d   d5= t/        d|› d6|›d7|›d�«        n" n t        d8||j                  d «      z   z  «       t+        |j-                  «       «      D ]  }||   rŒ	||= Œ |t$        t&           d   |<   d9t$        t&           v rt$        t&           d9   j                  |«       |}�ŒÄ |S c c}w c c}w c c}w ):zÛ
    Returns last_name, the variable name without special chars, parenthesis
        or dimension specifiers.

    Alters groupcache to add the name, typespec, attrspec (and possibly value)
    of current variable.
    Nr$  z(?P<start>[a-zA-Z]+)r�  r¬   ©ri  z@ @r+  z-updatevars: no name pattern found for entity=r±  rp   r/  r3   z+updatevars: attempt to change the type of "r¹  rÅ  z". Ignoring.
rn  z0updatevars: attempt to change the kindselector "r·  ro  zupdatevars:z*: attempt to change empty charselector to r»   z0updatevars: attempt to change the charselector "rq  z/updatevars: attempt to change the typename of "rm  r  r4  r2  r  )rW   ÚarrayÚinitÚ2rW   r3  r
   r"  r   r%  zupdatevars: "z" is mapped to "r5  z)"
©r»  r6   r!  r4   r4  rp  z6updatevars: attempt to change the init expression of "ú
dimension(r6  é	   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    rW   r(  r'  r0  rÎ   rÕ  r2   rÕ   rq   r=  r   rÏ  ru  rv  rn   r€  ÚlenarraypatternrV  r   rk  ) r3   rõ  rm  Ú
entitydeclrø  r  r  rq  rî  rê   r²   r*  rò   ÚsÚelÚel1rº  Úe1Úenamer÷  Únot_has_typespecÚcurrent_typespecr}  Úcurrent_kindr`  Úd1ÚlkÚ
array_specÚcurrent_initÚnew_initÚdmÚdm1s                                    r)   rÓ  rÓ  z  s	  € ð €IÜ'4°X¸xÓ'HÑ$€J�
˜HáÜ'5°hÓ'?×'EÑ'EÀeÓ'LÖM !�A—G‘G•IÐMˆÐMØˆÜ�J‰JÐ.Ó/ˆØò 	ˆAÙØØ—‘˜“
ˆAÙØ—G‘G˜GÓ$×*Ñ*Ó,�Ø˜œ#˜a›&˜'˜
‘N�Ø�H‰H�Q�Kð	ð ˆÜ+¨JÓ7×=Ñ=¸eÓDÖ	E˜ˆ!�'‰'�)Ð	E€BÐ	EØ
€CØò 3ˆÜ&4´\Ä/ÐRSÓBTÓ5UÐ]`Ô&a×&gÑ&gÐhmÓ&nÖo �1—7‘7•9Òoò 	3ˆBÚØ—
‘
˜2Ÿ:™: e¨SÓ1Õ2ñ	3ð3ð ó MˆÜ×Ñ˜aÓ ˆÙÜØ?ÄÀQÃ¸yÈÐVôXàÜ˜1Ÿ7™7 6›?Ó+ˆØˆØ”Jœ|Ñ,¨VÑ4Ò4Üœ|Ñ,¨VÑ4°UÑ;×@Ñ@ÓBˆEØ)°Ð6ÐÙØ$,��jÒ!Ù 8¨u°ZÑ/@Ò#@Ø#(¨Ñ#4Ð ÜÐEÀeÀWð MØ-Ð.¨g°h°Z¸~ðOô Pà UÑ*Ü(,¯	©	°*Ó(=��nÒ%ÙÜ˜jŸo™oÓ/Ó0ò L�AØ˜E .Ñ1Ñ1¸:Àa¹=ÈEÐR`ÑLaÐbcÑLdÒ;dØ',¨^Ñ'<¸QÑ'?˜Üð !$Ø$% 3 f¨U¨G°4¸°~ð F$Ø$.¨q¡M ?°.ð!Bõ Cô 48·9±9¸ZÈ¹]Ó3K˜˜nÑ-¨aÒ0ðLð  UÑ*©zÙ#Ø,6�E˜.Ò)ä˜k¨%¨ð 1"Ø", ¨}ð>õ ?áÜ˜jŸo™oÓ/Ó0ò L�AØ˜E .Ñ1Ñ1¸:Àa¹=ÈEÐR`ÑLaÐbcÑLdÒ;dÜÐ"RÐSTÐRUð V'Ø', g¨T°%¸Ñ2GÈÑ2JÐ1Kð L$Ø$.¨q¡M ?°.ð!Bõ Cô 48·9±9¸ZÈ¹]Ó3K˜˜nÑ-¨aÒ0ðLð  Ñ&Ø$,��jÒ!Ù 5¨Ñ#4¸Ò#@ÜÐIÈ%Èð QØ" :Ñ.Ð/¨w°x°jÀðPô Qà Ñ&Ü$(§I¡I¨hÓ$7��jÒ!ÙØ!ò 4�AØ  jÑ 1Ò1Ø˜jÑ)×0Ñ0°Õ3ñ4ô !%§	¡	¨(Ó 3ˆE�*ÑÜ$(§I¡I¨jÓ$9ˆE�.Ñ!Ü$(§I¡I¨jÓ$9ˆE�.Ñ!Ø (ˆE�*ÑÜ $§	¡	¨(Ó 3ˆE�*ÑØ˜%Ÿ)™) JÓ/Ò5°2Ñ6¸1Ä
Ì<Ñ@XÐY_Ñ@`Ñ;`Ø¤*¬\Ñ":Ñ:Ø8:”
œ<Ñ(¨Ñ5Ü”|Ñ$ [Ñ1×8Ñ8¸Ô;Ø�7‰7�7ÕÜ ×&Ñ&¤~°a·g±g¸gÓ6FÓ'GÓHˆBÚØ—\‘\“^�Ø2ò )�BØ˜"˜s™(‘|Ñ/Ø!# B¨¡H¡˜˜2™Ø˜r C™x™Lð)ô ˜bŸg™g›i›ò "�AØ˜!‘uÐ(Ü 0°°A±Ó 7˜˜1šà˜q™Eð	"ð ˜B‘; 7¨b¡=Ø˜%‘y B’Ø$& w¡K˜˜5™	Ø˜w™KØ! [Ò0Ø*°%Ñ7ÀÀ~ÒAVØ46˜E .Ñ1Ø  E¨.Ñ$9Ñ9Ø % nÑ 5°eÐ <Ø57¸±Y˜˜nÑ-¨cÑ2Ø˜u™Ià&(¨¡k°CÑ&7¸"¸U¹)Ñ&C˜˜7™Ø˜u˜IØ%'¨¡[˜
Ü -°¨z¸¸1¸#ð >$Ø$, :¨Q¨u¨g°Q°z°lÀ$ð!Hô Ið ˜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Ø',¨S¡z˜Ø#% f¡:˜Üð !$Ø$) 7¨$¨|¨n¸GÀHÀ:ð N.ð!/õ 0ð &(¨¡Z˜˜c™
à˜b‘=Ø% b¨¡k ]°!Ð4�BØ!¨Ñ.°u¸ZÒ7HØ-/¨D˜˜jÒ)à˜jÑ)×0Ñ0°Ô4Ø#(¨Ñ#4ò &˜CØ" 2 A˜w¨+Ó5¸#À»)Ø$)¨*Ñ$5°bÐ$9Ü '¨+°e°WÐ<PØ+.¨'°°b°V¸=ð)Jô !Ká %ñ&ô ÐZØ˜AŸG™G GÓ,Ñ,ñ.ô /ä�e—j‘j“lÓ#ò 	ˆAØ˜“8Ø˜!‘Hð	ð 38Œ
”<Ñ  Ñ(¨Ñ/Øœ¤LÑ1Ñ1Ü”|Ñ$ ZÑ0×7Ñ7¸Ô>ØŠ	ð[Mð\ ÐùòA Nùò 
Fùò ps   ±\;Ã] Ä-]c                 ój  — d }d }d }|�r&| dv r£t         j                  |«      }|st        dt        |«      › d�«       y |j	                  «       }|d   |d<   |d= t        |j                  «       «      D ]  }||   rŒ	||= Œ t        |j                  «       «      D ]  \  }}t        |«      ||<   Œ �n| dk(  �rt        j                  |«      }|st        dt        |«      › d�«       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        |«      ||<   Œ ni| dk(  rLt        j                  d|t        j                  «      }|r|j                  d«      }n+t        d| |z   › d�«       nt        dt        |«      › d�«       |||fS )Nr6  z1cracktypespec: no kindselector pattern found for r¸   Úkind2r   r"  z1cracktypespec: no charselector pattern found for ÚcharlenÚlenkind)rW   Úkindr5  Úf2py_lenrg   z\s*\(\s*(?P<name>\w+)\s*\)rp   z$cracktypespec: no typename found in z$cracktypespec: no selector used for )rn  rÐ   r2   rÕ   r   ru  rv  Úitemsrq   ro  Úlenkindpatternr&  r½   r¿   rÑ   )	r3   rõ  r  r  rq  r}  rù  rM  rD  s	            r)   rß  rß  +  s‹  € Ø€JØ€JØ€HÚØÐ@Ñ@Ü%×+Ñ+¨HÓ5ˆJÙÜØGÌÈXËÐGWÐWYÐZô\àØ#×-Ñ-Ó/ˆJØ(¨Ñ1ˆJ�s‰OØ˜7Ð#Ü˜*Ÿ/™/Ó+Ó,ò &�Ø! !“}Ø" 1™ð&ô ˜Z×-Ñ-Ó/Ó0ò .‘��1Ü *¨1£�
˜1’ò.à˜Ó$Ü%×+Ñ+¨HÓ5ˆJÙÜØGÌÈXËÐGWÐWYÐZô\àØ#×-Ñ-Ó/ˆJØ(¨Ñ3ˆJ�s‰OØ˜9Ð%Ø˜)Ò$Ü(×.Ñ.Ü" :¨iÑ#8Ó9ó;�à!×+Ñ+Ó-�Ø)ò *�BØ˜r C™xÒ(Ø&-¨b°3©hÑ&7˜ ™Ø%,¨R¡[�J˜r‘NØ  S¡Ñ)ð	*ð
 ˜:Ñ&Ð2à-4°ZÑ-@�J˜zÑ*Ø˜9Ð%Ü˜*Ÿ/™/Ó+Ó,ò &�Ø! !“}Ø" 1™ð&ô ˜Z×-Ñ-Ó/Ó0ò .‘��1Ü *¨1£�
˜1’ñ.à˜ÒÜ—x‘xÐ =¸xÌÏÉÓNˆHÙØ#Ÿ>™>¨&Ó1‘äÐ>¸xÈ(Ñ?RÐ>SÐSUÐVÕWäÐ:¼4À»>Ð:JÈ"ÐMÔNØ�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 )Nrm  rI   Ú	automaticr  r  r  )rz  rö  r|  s      r)   rw  rw  e  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 )Nrn  ©ru  rv  ©rz  Úselr|  r}  s       r)   rx  rx  €  sl   € ÙØˆÙØˆØ˜TÑ!Ø"ˆˆ^ÑØˆÜ�#—(‘(“*Óò -ˆÙ�A˜T .Ñ1Ò1Ø&)¨!¡fˆD�Ñ  Ò#ð-ð €Kr(   c                 ó’   — | si } |s| S d| vr|| d<   | S t        |j                  «       «      D ]  }|s|| d   vsŒ||   | d   |<   Œ | S )Nro  rU  rV  s       r)   ry  ry  Ž  sl   € ÙØˆÙØˆØ˜TÑ!Ø"ˆˆ^ÑØˆä�#—(‘(“*Óò -ˆÙ�A˜T .Ñ1Ò1Ø&)¨!¡fˆD�Ñ  Ò#ð-ð €Kr(   c                 ó   — d| v r| d   S |S )Nrp   r'   )r0  Úunknowns     r)   Úgetblocknamer[  �  s   € Ø��Ø�V‰}ÐØ€Nr(   c                 óB   — 	 d| d   › d| d   › d�a y # t        $ r Y y w xY w)NzIn: rœ  r¥  rp   r¸   )r    rÅ   )r0  s    r)   Úsetmesstextr]  ¥  s6   € ðØ! %¨¡- °°%¸±-°ÀÐCÑøÜò Ùðús   ‚ ’	�c                 ó^   — i }d| v rt        | d   «      }d| v r|j                  | d   «       |S )NÚparent_blockr  )Úget_usedictÚupdate)r0  Úusedicts     r)   r`  r`  ®  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|› d�«       t        |j                  «       «      D ]   \  }}||v rt        d|›d|›d�«       |||<   Œ" Œ¥ |S )	Nzget_useparameters: no module z info used by rp   r¸   zget_useparameters: mapping for z not impl.
z(get_useparameters: overriding parameter z with value from module )	r`  ru  rP  r    r   r2   r€  rÖ  rn   )	r0  Ú	param_maprb  ÚusenameÚmappingÚmvarsr†  r}  rÿ  s	            r)   Úget_useparametersrh  ·  s  € ð ÐØˆ	Ü˜%Ó €GÙØÐÜ  §¡£Ó1ò Ñˆ�Ø—-‘-“/ˆØœ-Ñ'ÜÐ3°G°9¸NØ—y‘y Ó(Ð)¨ð-ô .àÜ˜gÑ&ˆÜ Ó&ˆÙØáÜÐ5°g°Y¸lÐKÔLÜ˜Ÿ™›Ó(ò 	‰DˆAˆqØ�I‰~ÜÐBÀ1À%ð H.Ø.5¨[¸ð<ô =àˆI�aŠLñ		ðð& Ðr(   c                 óÎ  — t         s| S t        | t        «      r | D �cg c]  }t        ||dz   |¬«      ‘Œ }}|S t	        | «       t        |› d| d   › d�d«       |€t        | «      }|�Md| v rI| d   }t        |j                  «       «      D ](  }||   }d|v sŒ|d   }d	|v sŒ|d	   }	|	|v sŒ!||	   |d	<   Œ* | d
   D �
cg c]  }
t        |
|dz   |¬«      ‘Œ }}
|| d
<   | S c c}w c c}
w )Nr›   )Útabrd  úBlock: rp   r¸   r   r/  rn  rN  r.  )r   rê  ru  Ú
postcrack2r]  r2   rh  rv  )r0  rj  rd  ÚgÚretr/  r©   ÚvarrN  ÚvalÚbÚnew_bodys               r)   rl  rl  Õ  s/  € õ ØˆÜ�%œÔàöØô ˜!  t¡°yÖAð ˆð àˆ
Ü�ÔÜˆsˆe�7˜5 ™=˜/¨Ð,¨aÔ0àÐÜ% eÓ,ˆ	àÐ ¨5¡Ø�V‰}ˆÜ�d—i‘i“kÓ"ò 	6ˆAØ�q‘'ˆCØ Ò$Ø˜>Ñ*�Ø˜T’>Ø˜v™,�CØ˜iÒ'Ø'0°¡~˜˜Všð	6ð ˜v™ö(Øô ˜1 #¨¡*¸	ÖBð (€Hð (à€Eˆ&�Mà€Lùò/ùò&(s   �CÂ<C"c                 ó   — t        | t        «      rYg }g }| D ]K  }t        |«       t        ||dz   ¬«      }d|v rd|d   v r|j	                  |«       Œ;|j	                  |«       ŒM ||z   S t        | «       t        | t
        «      sd| vrt        dt        | «      z   «      ‚d| v r| d   dk(  st        |› d| d   › d	�d
«       t        | «      } t        | «      } t        | «      | d<   t        | d   «      | d<   | j                  d«      r| d   }t        | ||¬«      | d<   g }d| v r:| d   }t        |j                  «       «      D ]  }d|v sŒ|j	                  |«       Œ ni }d}	d| v r| d   }	| j                  d«      �rKg }
d| v r| d   }
t!        j                   | d   «      }|	r|	dz   }nd}||v r!d}|› d|› �|v r|dz   }|› d|› �|v rŒ|› d|› �}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›   ©rj  rp   r´  r0  z0postcrack: Expected block dictionary instead of r¤  rk  r¸   r   r/  Úsortvarsr4  r.  r  r
   r2  r3  Ú__user__routinesÚunknown__user__routinesr   rï   r¡  Ú_user_interface)r0  r.  r/  rp   r   rž  )r0  r.  r/  rp   r3  )rê  ru  r]  Ú	postcrackr(  ÚdictrÅ   rÁ   r2   ÚanalyzeargsÚanalyzecommonÚanalyzevarsÚsortvarnamesr€  Úanalyzebodyrv  rÏ  rZ   Ú
isexternalr   )r0  r4  rj  ÚgretÚuretrm  ÚuserisdefinedÚuseblockr}  rp   r3  rg  Úmnamerù  r¡  rº  ÚedefÚjrq  ÚbbÚmblocks                        r)   ry  ry  õ  s   € ô �%œÔØˆØˆØò 	ˆAÜ˜ŒNÜ˜!  t¡Ô,ˆAà˜‰{˜z¨Q¨v©YÑ6Ø—‘˜A•à—‘˜A•ð	ð �d‰{ÐÜ�ÔÜ�eœTÔ" w°eÑ';ÜÐJÜ˜E›
ñ#ó $ð 	$à��˜u V™}Ð0CÒCÜ�3�%�w˜u V™}˜o¨RÐ0°!Ô4Ü˜Ó€EÜ˜%Ó €EÜ Ó&€Eˆ&�MÜ$ U¨6¡]Ó3€Eˆ*ÑØ‡y�y�ÔØ�V‰}ˆÜ  t°Ô5€Eˆ&�Mà€MØ��~Ø˜‘<ˆÜ�h—m‘m“oÓ&ò 	(ˆAØ˜QŠØ×$Ñ$ QÕ'ñ	(ð ˆØ€DØ��Ø�V‰}ˆà‡y�y�ÕØˆ
Ø˜5Ñ Ø˜|Ñ,ˆJÜ—	‘	˜% ™-Ó(ˆÙØÐ-Ñ-‰Eà-ˆEØ�MÑ!ØˆAØ�G˜1˜Q˜C�. MÑ1Ø˜‘E�ð �G˜1˜Q˜C�. MÒ1à�g˜Q˜q˜c�NˆEØ)°2Ø¨Ð0AÑ)AñCˆ	à�{Ñ#ò 	0ˆ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Ó+>Ð ?Ù!ð"ð ˜&Ñ!×(Ñ(¨Õ.Ø�e’¤J¨u°Q©xÕ$8Ø',¨Q¡x�	˜&Ñ! !Ò$ð+	0ð, �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 )Nrt  r   r   zTsortvarnames: failed to compute dependencies because of cyclic dependencies between rÁ  r¸   )ru  rv  r(  rW   rn   rÚ   )r/  ÚindepÚdeprÿ  r©   rù  r]  Úws           r)   r~  r~  T  s4  € Ø€EØ
€CÜ�$—)‘)“+Óò ˆØ�t˜A‘wÑ 4¨¡7¨8Ò#4Ø�J‰J�q�Mà�L‰L˜�Oð	ô
 	ˆC‹€AØ	€AÙ
Ø�‰FˆØˆØ�Q�R�ò 	ˆAØ�D˜‘G˜HÑ%Ò%Ø�Ùð	ñ Ø�a�b�'˜Q˜C‘-ˆCØ�A‘ˆAØ�1ŠuÜð ;àŸ)™) C›.ñ)à+/ñ0ô 1ð  ™�Øð €Lð	 �L‰L˜ŒOØ�a�b�'ˆCÜ�C“ˆAØˆAò) ð* €Lr(   c           	      ó¦  — t        | «      s| S g }t        | d   j                  «       «      D �]†  }g }| d   |   D �]m  }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 rXd| d   |   v r.| d   |   d   j                  dd	j                  |«      › d
�«       nIdd	j                  |«      › d
�g| d   |   d<   n)|rddd	j                  |«      › d
�gi| d   |<   ni | d   |<   ||vr&|j                  |«       n|}t        d|› d|› d�«       |j                  |«       �Œp || 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$  rp   r/  rm  r7  r%  r6  z:analyzecommon: failed to extract "<name>[(<dims>)]" from "z" in common /z/.
Ú
commonvars)Ú	hascommonru  rv  r½   rÐ   r¿   rÑ   r&  r'  r¥   rq   r(  rÚ   rn   )	r0  r�  r}  Úcomvarsrº  rò   r�  rî  r©   s	            r)   r|  r|  v  s$  € Ü�UÔØˆØ€JÜ�%˜‘/×&Ñ&Ó(Ó)ó %ˆØˆØ�x‘ Ñ#ó 	ˆAÜ—‘ØEÀqÌ"Ï$É$óPˆAâØ�Ø—7‘7˜6”?ä%3°A·G±G¸F³OÓ%D×%JÑ%JÈ5Ó%QöSØ !ð ŸG™G�Ið S�Dð Sä˜qŸw™w v›×4Ñ4Ó6Ó7�Ø˜˜f™Ñ%Ø! U¨6¡]°1Ñ%5Ñ5Ø˜f™ aÑ(¨Ñ4×;Ñ;Ø(¨¯©°$«Ð(8¸Ð:õ<ð )¨¯©°$«Ð(8¸Ð:ð8<˜˜f™ aÑ(¨Ò4áà" z°#·(±(¸4³.Ð1AÀÐ%CÐ$Dð(F�E˜&‘M !Ò$ð (*�E˜&‘M !Ñ$Ø˜JÑ&Ø×%Ñ% aÕ(à�ÜØPÐQRÐPSÐS`ÐabÐ`cÐcgÐhôjà�N‰N˜1Öð7	ð8 %ˆˆh‰˜Óð=%ð> ˜5Ñ Ø(ˆˆlÑð €Lð $ LÑ1°JÑ>ˆˆlÑØ€Lùò7Ss   Â$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/  rm  r  r.  r_  r0  rª  rp   r4  z
      T©Úas_interfaceÚsaved_interfacer›   rt  r¢  r¶  r  r¬   r
   Úpythonmoduler£  )r]  rP  rv  r#   r(  r$   Úcrack2fortrangenry  r€  rÎ   r   r   )	r0  r4  rj  Úkeyr  Úmaybe_privater.  rq  Úas_s	            r)   r  r     s   € ô �Ôð   ™-×-Ñ-Ó/÷áˆC�Ø˜UÑ" h°e¸JÑ6GÑ&Gð 	ˆU‰
ð€Mñ ð €DØ�6‰]ó ˆØ!ˆˆ.ÑØˆW‰:Ð3Ñ3ØÐ A f¡I°TÑ$9Øà˜‘i�à�‰y˜M×.Ñ.Ó0Ñ0Ü× Ñ   6¡Ô+Ø�‰yœIÑ%ØÝ˜Q˜v™Y¬iÑ7ØÜ#3Ø�>°ô$6ˆAÐÒ ð ˆCÜ�a˜ #¨¡*Ô-ˆØˆW‰:Ð<Ñ<Ø�Šy §¡ Ô!7Ø!¨Ñ*ØØˆW‰:×Ñ˜c 2Ó&¨.Ò8Ü×Ñ˜qÕ!à�‰z˜XÒ%Ø+,¨V©9”˜a ™iÑ(Ø�K‰K˜ŽNð;ð< €KùóKs   ¢Ec                 ó>  — t        | «       t        }i }d| v rƒ| d   €*d }t        dkD  rt        dt	        | d   «      › d�«       ||fS t        | d   j                  «       «      D ]5  }| d   |   j                  d«      dvr| d   |   ||<   Œ(| d   |   d   ||<   Œ7 ||fS )Nrÿ   r   z2buildimplicitrules: no implicit rules for routine rp   r7  r3   )rI   rS  )r]  Údefaultimplicitrulesr   r2   rÕ   ru  rv  r€  )r0  ÚimplicitrulesÚ	attrrulesr}  s       r)   Úbuildimplicitrulesr   Í  sÞ   € Ü�ÔÜ(€MØ€IØ�UÑØ�ÑÐ$Ø ˆMÜ˜Š{ÜØHÌÈeÐTZÉmÓI\ÐH]Ð]`Ðaôcð ˜)Ð#Ð#ô ˜% 
Ñ+×0Ñ0Ó2Ó3ò D�Ø˜Ñ$ QÑ'×+Ñ+¨JÓ7Ð?VÑVØ',¨ZÑ'8¸Ñ';�M !Ò$à#(¨Ñ#4°QÑ#7¸
Ñ#C�I˜a’Lð	Dð
 ˜)Ð#Ð#r(   c                 ój   — t        | ||«      }t        |«      t        t        fv r|S t	        d|›�«      ‚)z2 Like `eval` but returns only integers and floats zr=)rÚ  rg   r7   r9   rÔ   )rº  rm  rê   r˜   s       r)   Úmyevalr¢  à  s5   € äˆQ��1‹€AÜˆAƒw”3œ�,ÑØˆÜ
�r˜!˜�ZÓ
 Ð 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  r5  r6  r  g      à?g      ø?)NNN)r7   r¢  rÅ   Úgetlincoef_re_1rÐ   rW   r½   rŒ  r¾   r¿   rÑ   )rº  Úxsetr²   Úlen_erî  r_  rò   r`  Úeerq  r*  Úc2s               r)   Ú
getlincoefr¬  ë  s�  € ð*Ü”�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 “]�ÙØŸH™H XÓ.Ð/¨q°°°1°R·X±X¸gÓ5FÐ4GÐH�BØŸ™ B›�Bò ô ˜2˜r 2Ó&�Ø—Z‘Z “]�ÙØŸH™H XÓ.Ð/¨q°°°1°R·X±X¸gÓ5FÐ4GÐH�BØŸ™ B›�Bò ô ˜2˜r 2Ó&¨Ñ*�Ø—Z‘Z “]�ÙØŸH™H XÓ.Ð/¨q°°°Q°r·x±xÀÓ7HÐ6IÐJ�BØŸ™ B›�Bò ô ˜2˜r 2Ó&�à—Z‘Z “]�ÙØŸH™H XÓ.Ð/¨q°°°Q°r·x±xÀÓ7HÐ6IÐJ�BØŸ™ B›�Bò ô ˜B  BÓ'�Ø˜‘G˜a‘K 1Ò$¨¨S©°1©¸Ò):Ø˜a ˜7’Nð Øøô ò ØØØðúðC#ðH 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        | «      › d�«       g }||| <   |S )Nrt  rp  z)_get_depend_dict: no dependence info for r¸   )r€  ÚisstringÚword_patternræ  r(  Ú_get_depend_dictr2   rÕ   )rp   r/  ÚdepsÚwordsÚwordr�  s         r)   r°  r°  2	  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ñ$ñ	$ô 	Ð;¼DÀ»J¸<ÀrÐJÔKØˆØ€Dˆ�JØ€Lr(   c                 ód   — t        | j                  «       «      }i }|D ]  }t        || |«       Œ |S r,   )ru  rv  r°  )r/  rt   Údepend_dictr©   s       r)   Ú_calc_depend_dictr¶  H	  s8   € Ü�—‘“Ó€EØ€KØò /ˆÜ˜˜D +Õ.ð/àÐr(   c                 óv  — t        | «      }g }t        |j                  «       «      D ]  }||   rŒ	|j                  |«       ||= Œ |rTt        |j	                  «       «      D ]5  \  }}|D �cg c]	  }||v sŒ|‘Œ }}|s|j                  |«       ||= Œ1|||<   Œ7 |rŒT|D �cg c]	  }|| v sŒ|‘Œ c}S c c}w c c}w r,   )r¶  ru  rv  r(  rP  )r/  rµ  rt   rp   Úlstr©   Únew_lsts          r)   Úget_sorted_namesrº  P	  sÓ   € Ü# DÓ)€KØ€EÜ�[×%Ñ%Ó'Ó(ò "ˆØ˜4Ó Ø�L‰L˜ÔØ˜DÑ!ð"ñ Ü˜k×/Ñ/Ó1Ó2ò 	,‰IˆD�#Ø"%Ö:˜Q¨¨kÒ)9’qÐ:ˆGÐ:ÙØ—‘˜TÔ"Ø Ñ%à$+�˜DÒ!ð	,ò ð #Ö3�T d¨d¢lŠDÒ3Ð3ùò ;ùò 4s   Á+	B1Á5B1Â 	B6Â*B6c                 ó‚   — | d   dv r| dd } t         j                  | «      ryt        j                  | «      ryd| z   dz   S )	Nr   ú'"r   r   é   é   zkind(r6  )rØ  rÐ   Úreal8pattern)rb   s    r)   Ú
_kind_funcrÀ  b	  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   r1  l        r¾  l            r½  é€   é   r   r'   )r˜   rò   s     r)   Ú_selected_int_kind_funcrÅ  m	  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ŠØØ	
ˆbŠØØ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) NrN  Úselected_int_kindÚselected_real_kindrm  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*\)rp  ))z.false.ÚFalse)z.true.ÚTruez
kind("\1")zselected_int_kind(\1)Frn  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Î   ÚsubrW   rÐ   r'  rÚ   Úisdoubleru  rØ  rÙ  r�  rü   Ú	iscomplexr2   rŠ   râ  r¥   rŒ  r¿  Ú
param_evalrÅ   r®  rê  r7   rá  rˆ  )r/  Úglobal_paramsr†  Úg_paramsrp   ÚfuncÚparam_namesr©   Úkind_reÚselected_int_kind_reÚselected_kind_rerÿ  ÚreplÚis_replacedÚ
orig_v_lenÚv_rþ  rò   r;  rÞ  rë   Únls                         r)   rÖ  rÖ  �	  s0  € Ü�Y‰Y�}Ó%€FÜ�y‰y˜Ó'€HØ¤
Ð+Ø+Ô-DÐEØ,Ô.FÐGðKò "‰
ˆˆdð �xÒØ!ˆH�TŠNð	"ð
 €KÜ˜dÓ#ò "ˆØ˜˜a™Ò  [°D¸±G¸JÑ4GÒ%GØ×Ñ˜qÕ!ð"ô �j‰jÐ<¼b¿d¹dÓC€GÜŸ:™:Ø8¼"¿$¹$ó@Ðä—z‘zØ?ÄÇÁóGÐàó POˆØ�$�q‘'Š>Ø�Q‘˜‘ˆAÜ˜˜a™Ô!Ø—G‘G“I�ðò )�Dð
 "˜Ÿ	™	 4Ð(‘Að)ð —‘˜M¨1Ó-ˆAØ$×(Ñ(Ð)AÀ1ÓEˆAð  ˆKà  a¡Ñ(ð ˜T !™W ^Ñ4Ñ4Ü!$ Q£�JØŸ	™	 #¨¨Q©°Ñ(?ÀÑ(GÑ"GÈÓL�Aô #& a£&¨:Ñ"5�KáØ'×-Ñ-¨aÔ0ØŸ™ ›�Bä˜2“w ’{ØŸG™G B s¨ GÓ,×2Ñ2Ó4×<Ñ<¸RÀ¹V¿\¹\»^ÈRÓP˜ô ˜˜Q™Ô Ü˜!“W�Ü&×/Ñ/°Ó2ò H�AÜ,0Ø˜!Ÿ'™'›) A§E¡E£GÐ,×2Ñ2Ó4×<Ñ<¸SÀ#ÓFó-H�B�q—w‘w“y §¡£Ñ)ðHð —G‘G˜B“K‘ä˜4 ™7Ô#Üð FØFGÀSÈðLô Mð "& a¡¨Ñ!4ö5ØØŸ,™, {Ô3ð Ÿ™ {Ó3×9Ñ9Õ;ò 5ò ?à9=¸ÀñCˆGô ×#Ñ# AÔ&Ø‘Ü×$Ñ$ QÔ'Ø�ðCÜ& q¨(°FÀGÔL��q‘	ô
 ˜˜Q™Ô ¤Z°°q±	¼3Ô%?Ü  q¡	›N��q‘	Ø—‘“ˆBØ�QŒwØ# A™Y��r“
ä�$�q‘'ŒNÜÐ/°¨uÐ4LÐMÖNðaPOðb €Mùò15øô ò CØ��q‘	ÜÐ/°¨u°E¸!¸¸bÐA×BÑBûðCús   Ë67O/Í(O4Ï4	PÏ=PÐPc                 ó$   — | dv ryt        | |«      S )N)z(:)ú(*)r   rò  )Ú_eval_scalar)Úlengthr†  s     r)   Ú_eval_lengthrõ  ô	  s   € ØÐ$Ñ$ØÜ˜ Ó'Ð'r(   z\d+_c                 ó<  — t        | «      r| j                  d«      d   } 	 t        | i |«      }  t        | t        «      rt
        nt        | «      } | S # t        t        t        f$ r | cY S t        $ r)}t        d|› d| ›dt        |«      › 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Å   rn   ru  )r  r†  rë   s      r)   ró  ró  ý	  s¨   € Ü�uÔØ—‘˜CÓ  Ñ#ˆð8ä�U˜B Ó'ˆØ8œ E¬3Ô/•´S¸%Ó@ˆð €Løô ”{¤IÐ.ò ØŠÜò 8Ü�!�C�5Ð(¨¨	ð 2%Ü%)¨&£\ N°#ð7÷ 	8ð 	8à€Lûð8ús   ¡/A ÁBÁ*BÁ2BÂBc                 ó|   ‡@‡A— t        | «       t        | «      \  }}t        j                  | d   «      }| d   dk(  r| d   |vri || d   <   d| d   v rj|d= d| d   d   v r]| d   d   d   }t        |«      | d   D �ch c]  }|d   ’Œ	 c}z  D ]-  }dD ]&  }||v sŒt	        |j                  |i «      |«      ||<   Œ( Œ/ g }| d	   }	|	D ]  }
	 ||
    |j                  |
«       Œ t        |j                  «       «      D ]  }||	vsŒ|j                  |«       Œ t        |t        | «      «      }i }t        j                  d
«      j                  }t        |j                  «       «      D ]4  } ||«      }|sŒ||j                  «       |j!                  «        }	 ||    Œ6 |D �
]L  }|d   t        |j                  «       «      v rt	        ||   ||d      «      ||<   d||   vr°d||   v r
d||   d   v sŸ|r�|d   j%                  «       }t        ||   j                  «       «      D ]N  }|dk(  r||   |   dk(  rŒ|||   vr||   |   ||   |<   Œ*|dk(  sŒ0||   |   D ]  }t	        ||   |«      ||<   Œ ŒP n|| d	   v rt'        d|›d| d   › d�«       d||   v r7d||   d   v r-||   d   d   }	 t)        t+        |i |«      «      }|||   d   d<   d||   v r7d||   d   v r-||   d   d   }	 t)        t+        |i |«      «      }|||   d   d<   i }d||   v �r£||   d   }|j/                  «        g ||   d<   d\  }}}}}|D �]m  }
|
dd dk(  r|
dd j1                  «       dd }nŽ|
dd dk(  r|
dd j1                  «       dd }no|
dd d k(  r|
dd j1                  «       dd }nP|
dd! d"k(  r|
d!d j1                  «       dd }n1|
dd# d$k(  r|
d#d j1                  «       dd }nt	        ||   |
«      ||<   |r€d||   vrg ||   d<   t3        |«      j5                  d%«      D �cg c]  }|j1                  «       ‘Œ c}D ]6  }|j7                  d&d«      }|||   d   vsŒ ||   d   j                  |«       Œ8 d}|rN|j7                  d'd(«      }|j7                  d)d*«      }d$||   vr
|g||   d$<   n||   d$   j                  |«       d}|�wd ||   vrg ||   d <   t9        t3        |«      j5                  d%«      D �cg c]  }|j1                  «       ‘Œ c}«      D ]$  }|||   d    vsŒ||   d    j                  |«       Œ& d}|€�Œ d"||   vrg ||   d"<   t3        |«      j5                  d%«      D �cg c]  }|j1                  «       ‘Œ c}D ]$  }|||   d"   vsŒ||   d"   j                  |«       Œ& d}�Œp |�rd||   v�rýg ||   d<   t9        t3        |«      j5                  d%«      D �cg c]  }|j1                  «       ‘Œ c}«      D �]²  }	 t;        ||«      }|d,k(  rd,nd-}||k(  r|g}nt3        |d,«      j5                  d.«      }tA        |«      d/k(  r	d-|v rd-g}d-}tA        |«      dk(  r|d   |k7  rd0|d   g}tA        |«      d/k(  �rtC        tD        jF                  jH                  |«      \  }} | |z
  dz   }!|!jK                  tD        jL                  jN                  ¬1«      }i }"| d   D ]³  }tE        jP                  |«      }#|!jS                  |#«      sŒ*	 |!jU                  |#«      \  }
}|
|fd2„}$t        |
jW                  «       «      }%|%jY                  |jW                  «       «       |%D �#ch c]  }#|#j\                  |v r|#j\                  ’Œ }'}#|$t        |'«      f|"|<   Œµ |"||<   ||   d   j                  |«       �Œµ d"||   v�r\d	| v �rW|| d	   v �rO||   j                  d g «      }(g }) t_        t`        tb        td        «      ||   «      }*tg        ||   «      �rnti        ||   d   «      D �]X  \  }+}|j                  |«      Š@‰@€�ni|*�rf‰@jk                  «       D �]R  \  }\  },}-ˆ@ˆAfd3„ŠAt        «       }. ‰A||.«       ||(v sd4||   v sd ||   v rŒ6|,�€||.vr|d5}/ |,tE        jP                  d6|› d7|+› d8�«      «      }0|0jK                  tD        jL                  jN                  ¬1«      }0|0||   d4<   |g|-z   ||   d <   d"||   vrpd6|› d7|+› d9|› �g||   d"<   n]d:}/d||   vrg ||   d<   d;||   d   vr||   d   j                  d;«       |(j                  |«       |)j                  d6|› d7|+› d9|› �«       ||   j                  dg «      }1d<|1v sd=|1v s|1j                  |/rd=nd<«       |1s�ŒK|1||   d<   �ŒU ‰@€�Œ‰‰@jk                  «       D ]½  \  }\  },}-||   j                  d g «      }'||   j                  dg «      D ]V  }2|2jm                  d «      sŒdjo                  |2j5                  «       «      }2|'jq                  |2d>d j5                  d?«      «       ŒX |'rt        t        |'«      «      ||   d <   ||'vsŒ­|(j                  |«       Œ¿ �Œ[ nsts        ||   «      red||   v r^d-||   d   v r!tu        ||   d   d-   |«      }3|3||   d   d-<   n3d||   d   v r)tu        ||   d   d   |«      }3||   d   d= |3||   d   d-<   |)r|)||   d"<   |(rt        t        |(«      «      ||   d <   d4||   v s�	Œ‡d||   vrg ||   d<   d<||   d   vr!d=||   d   vr||   d   j                  d<«       d ||   vr]g ||   d <   t        |jk                  «       «      D ]+  \  }} |||   d4   «      sŒ||   d    j                  |«       Œ- ||   d    s||   d = tw        ||   «      s�
Œ5ty        ||   d4   |«      ||   d4<   �
ŒO t        |j                  «       «      D �]s  }|| d   k(  sŒd$||   v r||   d$   | d$<   | d   dk(  sŒ(d@| v r| d@   |v rt{        ||   || d@      «      ||<   dA| v sŒP| dA   }4|4j7                  dBd«      }5|4|5k(   }6|5j7                  dCd«      }4|4|5k(   }7t|        d   j                  |4«      }|rºt        |j�                  dD«      |j�                  dE«      «      \  }8}9}}:tƒ        |8|9«      \  };}<}=|8||   d<   	 | d@   r|8|| d@      d<   |;r d|;v r	 t+        |;d   i |«      |;d<   |;||   d<   |<r|<||   d<   |=r|=||   dF<   |6rt	        ||   dB«      ||<   |7s�ŒEt	        ||   dC«      ||<   �ŒYt'        dGt…        | dA   «      › dH�«       �Œv | d   dIv�r¨dJ| v rt        j                  | d	   | dJ   z   «      }>nt        j                  | d	   «      }>t        |j                  «       «      D ]1  } t_        t†        tˆ        «      ||   «      sŒ!|>j                  |«       Œ3 dK| v ro|>jq                  t        | dK   j                  «       «      «       t        | dK   j                  «       «      D ]%  }| dK   |   D ]  }||>vsŒ|>j                  |«       Œ Œ' | d   dk(  r-d@| v r|>j                  | d@   «       n|>j                  | d   «       | d   dLv r| d   }?|?|v rd||?   v r||?   d   | d<   | d   dMk(  r(|>jq                  t        |j                  «       «      «       t        |j                  «       «      D ]
  }||>vsŒ||= Œ |S c c}w # t        $ r Y �Œ{w xY w# t        $ r9 t        j                  d|› d�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# tZ        $ r&}&d}$t        |!jW                  «       «      }%Y d}&~&�Œ²d}&~&ww xY wc c}#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/  r0  rù   rp   r
   rm  r.  r°  r4  z[A-Za-z][\w$]*z.*\br¤  r   r3   r  Ú	undefinedz"analyzevars: typespec of variable z is not defined in routine r7  ro  rW   rn  rN  )NNNNNNr8  r  r   r   r¶   r	  rt  rœ   rs  r¾  rr  r$  r¬   z\n\nz

z\n r¸   z4analyzevars: could not parse dimension for variable r¥  r   z@:@r1  Ú1)Úlanguagec                 ó   — | |z
  |z  S r,   r'   )r;  r*  rq  s      r)   Úsolve_vzanalyzevars.<locals>.solve_v¸
  s   € Ø01°A±¸©{Ð(:r(   c                 ó|   •— ‰j                  | d g g«      d   D ]!  }||vsŒ|j                  |«        ‰||«       Œ# y )Nr   )r€  Úadd)rÿ  r±  Úv1Úcoeffs_and_depsÚcompute_depss      €€r)   r  z!analyzevars.<locals>.compute_depsæ
  sD   ø€ Ø*9×*=Ñ*=¸aÀ$ÈÀÓ*LÈQÑ*Oò !? BØ')°¢~Ø(,¯©°¬Ù(4°R¸Õ(>ñ!?r(   rp  Fzshape(rÁ  r6  z) == TÚinr  r  rÇ  r%  r¨   r§  ÚpureÚ	recursiver8  r  rq  zanalyzevars: prefix (z) were not used
)r£  r—  rž  r�  r�  r  )rû   rù   rg   )Er]  r   rÏ  r  rw  r€  r(  ÚKeyErrorru  rv  rÖ  rh  r½   r¾   rÐ   r�  rü   r¿   r    r2   rÁ   rÚ  rÅ   Úreverser¥   r&  r'  rÎ   rv   Úparam_parserÔ   rç  rW   rË  r   ÚExprÚparseÚtostringÚLanguager³   Ú	as_symbolr  Úlinear_solveÚsymbolsra  ÚRuntimeErrorr  Úl_orÚisintent_inÚisintent_inoutÚisintent_inplaceÚisarrayrã  rP  rŠ   rÚ   ré  r®  rõ  Úisscalarró  r~  rN  rÒ  rÑ   rß  rÕ   Úisintent_callbackÚisintent_aux)Br0  rž  rŸ  r/  Úgenrq  r©   r}  Úsvarsr4  r*  r†  Údep_matchesÚ
name_matchrÿ  rò   Úln0rê   Údimension_exprsrö  Údimr	  rt  rs  rr  rî  r²   Útmpr"  Údim_charr  rC  Úd2ÚdsizeÚsolver_and_depsr;  rý  Úall_symbolsrë   Úv_depsÚn_depsÚn_checksÚ
n_is_inputrù  Úsolverr±  Úall_depsÚis_requiredr4  Úv_attrÚaarô  ÚprÚpr1ÚispureÚisrecr3   rõ  r÷  r  r  rq  Ú
neededvarsrp   r  r  sB                                                                   @@r)   r}  r}  
  s÷  ù€ ô �ÔÜ1°%Ó8Ñ€M�9Ü�9‰9�U˜6‘]Ó#€DØˆW�~˜Ò#¨¨f©¸TÑ(AØ ˆˆU�6‰]ÑØ	ˆU�6‰]ÑØ�ˆHØ˜˜v™ rÑ*Ñ*Ø˜‘- Ñ# JÑ/ˆCÜ˜“Y°U¸6±]Ö!C° ! F£)Ò!CÑCò B�Ø.ò B�AØ˜C’xÜ"-¨d¯h©h°q¸"«o¸qÓ"A˜˜QšñBðBð €EØ�‰=€DØò ˆð	Ø�ŠGØ�L‰L˜�Oðô �$—)‘)“+Óò ˆØ�DŠ=Ø�L‰L˜�Oðô ˜DÔ"3°EÓ":Ó;€Fð €KÜ—‘Ð-Ó.×4Ñ4€JÜ�$—)‘)“+Óò GˆÙ�q‹MˆÚØ�!—'‘'“)˜AŸE™E›GÐ$ˆAðGØ˜A“ðGð ó MBˆØˆQ‰4”4˜	Ÿ™Ó(Ó)Ñ)Ü! $ q¡'¨9°Q°q±T©?Ó;ˆD�‰GØ˜T !™WÑ$Ø $ q¡'Ñ)¨j¸DÀ¹GÀJÑ<OÑ.OÙ Ø˜A™$Ÿ*™*›,�CÜ! -°Ñ"4×"9Ñ"9Ó";Ó<ò B˜Ø 
š?¨}¸SÑ/AÀ!Ñ/DÈÒ/SØ$Ø D¨¡GÑ+Ø)6°sÑ);¸AÑ)>˜D ™G AšJØ *›_Ø%2°3Ñ%7¸Ñ%:ò B Ü*5°d¸1±g¸qÓ*A  Q¢ñBñBð ˜% ™-Ñ'ÜÐ@ÀÀð F*Ø*/°©-¨¸ð=ô >à˜T !™WÑ$Ø˜˜Q™ Ñ/Ñ/Ø˜‘G˜NÑ+¨EÑ2�ðÜœD  B¨Ó/Ó0�Að 23��Q‘˜Ñ'¨Ñ.à˜T !™WÑ$Ø˜˜a™ Ñ0Ñ0Ø˜‘G˜NÑ+¨FÑ3�ðÜœD  B¨Ó/Ó0�Að 34��Q‘˜Ñ'¨Ñ/àˆØ˜˜a™Ò Ø˜‘7˜:Ñ&ˆDØ�L‰LŒNØ"$ˆD�‰G�JÑØ/KÑ,ˆC�˜ ¨Øó +!�Ø�R�a�5˜KÒ'Ø˜Q˜R˜5Ÿ;™;›=¨!¨BÐ/‘CØ�r˜�U˜hÒ&Ø  ˜eŸk™k›m¨Q¨rÐ2‘FØ�r˜�U˜hÒ&Ø  ˜eŸk™k›m¨Q¨rÐ2‘FØ�r˜�U˜gÒ%Ø˜q˜r˜UŸ[™[›]¨A¨bÐ1‘EØ�r˜�U˜f’_Ø˜a˜b˜EŸK™K›M¨1¨RÐ0‘Dä)¨$¨q©'°1Ó5�D˜‘GÙØ t¨A¡wÑ.Ø,.˜˜Q™ Ñ)Ü1?ÀÓ1G×1MÑ1MÈeÓ1TÖU¨A˜aŸg™g�iÒUò :˜àŸi™i¨¨RÓ0˜Ø d¨1¡g¨hÑ&7Ò7Ø  ™G HÑ-×4Ñ4°SÕ9ð	:ð
 "�FÙØŸ<™<¨°&Ó9�DØŸ<™<¨°Ó5�DØ T¨!¡WÑ,Ø+/¨&˜˜Q™ šà˜Q™ ™×.Ñ.¨tÔ4Ø�DØÐ%Ø t¨A¡wÑ.Ø,.˜˜Q™ Ñ)Ü&¼>È&Ó;Q×;WÑ;WÐX]Ó;^Ö'_°a¨¯©­	Ò'_Ó`ò 8˜Ø D¨¡G¨HÑ$5Ò5Ø  ™G HÑ-×4Ñ4°QÕ7ð8ð "�FØÒ$Ø d¨1¡gÑ-Ø+-˜˜Q™ Ñ(Ü1?ÀÓ1F×1LÑ1LÈUÓ1SÖT¨A˜aŸg™g�iÒTò 7˜Ø D¨¡G¨GÑ$4Ò4Ø  ™G GÑ,×3Ñ3°AÕ6ð7ð !’EðW+!òX �{¨$¨q©'Ò1Ø')��Q‘˜Ñ$Ü"Ü,:¸3Ó,?×,EÑ,EÀeÓ,LÖM q˜Ÿ™�ÒMóó ?3�Að
ô (¨¨6Ó2˜ð '(¨3¢h™s°C�HØ˜H’}Ø&˜Z™ä+¨A¨sÓ3×9Ñ9¸%Ó@˜Ü˜2“w !’|¨¨r©	Ø!˜U˜Ø˜Ü˜2“w !’|¨¨1©°Ò(9Ø! 2 a¡5˜\˜Ü˜2“w !“|Ü!$¤X§]¡]×%8Ñ%8¸"Ó!=™˜˜BØ " R¡¨!¡˜Ø!ŸN™N´H×4EÑ4E×4GÑ4G˜NÓH˜ð +-˜Ø!& v¡ò K˜AÜ (× 2Ñ 2°1Ó 5˜AØ$Ÿ~™~¨aÕ0ð!GØ+0×+=Ñ+=¸aÓ+@¡D A qà56¸!ó %;ô 36°a·i±i³kÓ2B KØ$/×$6Ñ$6°q·y±y³{Ô$Cð 5@ö*7Ø/0Ø'(§v¡v°¡~ð %&§F£Fð*7 ð *7ð 6=¼dÀ6»lÐ5J °Ò 2ð-Kð: .=˜¨Ñ*Ø˜‘G˜KÑ(×/Ñ/°Ö2ð?3ðB ˜$˜q™'Ò! f°¢o¸!¸uÀV¹}Ò:Lð
 ˜!‘W—[‘[ ¨2Ó.ˆFØˆHð0œœk¬>Ü.ó0Ø04°Q±ó9ˆJä�t˜A‘wÕÜ% d¨1¡g¨kÑ&:Ó;ó K1‘D�A�qØ&5×&9Ñ&9¸!Ó&<�OØ&Ð.áÚ#ð 2A×1FÑ1FÓ1Hó 6=Ñ-˜A™~ ¨õ?ô
 (+£u˜HÙ(¨¨HÔ5Ø ! V¡Ø$'¨4°©7¡NØ$,°°Q±Ñ$7ð
 !)Ø%Ð1°a¸xÑ6Gð /4 Ù'-¬h×.@Ñ.@Ø&,¨Q¨C¨r°!°°AÐ$6ó/8ó (9 à'+§}¡}Ü-5×->Ñ->×-@Ñ-@ð (5ó (B à/3  Q¡¨¡ð 67°C¸$±J  Q¡¨Ñ 1Ø#*°$°q±'Ñ#9ð +1°°°2°a°S¸¸a¸SÐ(Að8C D¨¡G¨GÒ$4ð /3 Ø#+°4¸±7Ñ#:Ø8: D¨¡G¨HÑ$5Ø#'¨t°A©w°xÑ/@Ñ#@Ø$(¨¡G¨HÑ$5×$<Ñ$<¸TÔ$Bà &§¡¨aÔ 0Ø (§¡Ø&,¨Q¨C¨r°!°°E¸!¸Ð$=ô!?à%)¨!¡W§[¡[°¸RÓ%@˜FØ$.°&Ñ$8Ø'1°VÑ';Ø &§¡Ù2=¡JÀ:ô!Oã%Ø6<  Q¡¨
Ó 3ðm6=ðn 'Ò2à1@×1FÑ1FÓ1Hò 	1Ñ-˜A™~ ¨Ø%)¨!¡W§[¡[°¸2Ó%>˜FØ&*¨1¡g§k¡k°*¸bÓ&Aò G Ø#%§=¡=°Õ#:Ø)+¯©°·±³Ó)< BØ$*§M¡M°"°Q°r°(·.±.ÀÓ2EÕ$FðGñ  &Ü48¼¸V»Ó4E  Q¡¨Ñ 1Ø ¨šØ &§¡¨aÕ 0ò	1ñEK1ôX ˜$˜q™'Ô"Ø! T¨!¡WÑ,Ø˜d 1™g nÑ5Ñ5Ü!-¨d°1©g°nÑ.EÀcÑ.JØ.4ó"6˜à7=˜˜Q™ Ñ/°Ò4Ø $ q¡'¨.Ñ"9Ñ9Ü!-¨d°1©g°nÑ.EÀeÑ.LØ.4ó"6˜à  ™G NÑ3°EÐ:Ø7=˜˜Q™ Ñ/°Ñ4ÙØ#+��Q‘˜Ñ ÙÜ$(¬¨V«Ó$5��Q‘˜Ñ!à�$�q‘'‹>Ø  a¡Ñ(Ø&(��Q‘˜
Ñ#Ø $ q¡'¨*Ñ"5Ñ5Ø $ q¡'¨*Ñ"5Ñ5Ø�Q‘˜
Ñ#×*Ñ*¨:Ô6Ø˜t A™wÑ&Ø$&��Q‘˜Ñ!Ü  ×!2Ñ!2Ó!4Ó5ò 4‘D�A�qÙ˜˜a™ ™•Ø˜Q™ Ñ)×0Ñ0°Õ3ð4ð ˜A‘w˜xÒ(Ø˜Q™ Ð)Ü˜˜Q™Ö Ü+¨D°©G°C©L¸&ÓA��Q‘˜“ð[MBô^ �$—)‘)“+Óó +^ˆØ��f‘ÓØ˜˜a™Ñ Ø $ Q¡¨¡��f‘Ø�W‰~ Ó+Ø˜uÑ$¨¨x©¸DÑ)@Ü(¨¨a©°$°u¸X±Ñ2GÓH�D˜‘GØ˜uÒ$Ø˜x™�BØŸ*™* V¨RÓ0�CØ"$¨¡)˜m�FØŸ™ [°"Ó5�BØ!# s¡˜]�EÜ$ Q™×-Ñ-¨bÓ1�AÙÜ:HØŸG™G F›O¨Q¯W©W°WÓ-=ó;?Ñ7˜ (¨D°%ä;HØ$ hó<0Ñ8˜
 J°à.6˜˜Q™ 
Ñ+ð!Ø$ XšØDL  U¨8¡_Ñ 5°jÑ Añ &Ø%¨Ñ3ð!)Ü9=Ø(2°6Ñ(:¸BÀó:H J¨vÑ$6ð 7A˜D ™G NÑ3Ù%Ø6@˜D ™G NÑ3Ù#Ø2:˜D ™G JÑ/Ù!Ü&1°$°q±'¸6Ó&B˜D ™GÛ Ü&1°$°q±'¸;Ó&G˜D ›GäØ3´D¸¸x¹Ó4IÐ3JÐJ[Ð\ö^ðU+^ðX ˆW�~ÐVÒVØ˜5Ñ ÜŸ™ 5¨¡=°5¸Ñ3FÑ#FÓG‰JäŸ™ 5¨¡=Ó1ˆJÜ�d—i‘i“kÓ"ò 	%ˆAØ4ŒtÔ%¤|Ó4°T¸!±WÕ=Ø×!Ñ! !Õ$ð	%ð �eÑØ×Ñœd 5¨¡>×#6Ñ#6Ó#8Ó9Ô:Ü˜% ™.×-Ñ-Ó/Ó0ò -�Ø˜w™¨Ñ*ò -�AØ 
Ò*Ø"×)Ñ)¨!Õ,ñ-ð-ð �‰>˜ZÒ'Ø˜5Ñ Ø×!Ñ! %¨¡/Õ2à×!Ñ! %¨¡-Ô0Ø�‰>Ð7Ñ7Ø˜‘=ˆDØ�t‰| ¨D°©JÑ 6Ø"& t¡*¨XÑ"6��h‘Ø�‰>˜VÒ#Ø×Ñœd 4§9¡9£;Ó/Ô0Ü�d—i‘i“kÓ"ò 	ˆAØ˜
Ò"Ø˜‘Gð	ð €Kùòi "Døô ò 	Úð	ûô" ò GÜ!#§¡¨t°A°3°b¨M¼2¿4¹4Ó!@×!FÑ!F�˜A”ðGûô2 !ò Úðûô !ò Úðüò4 Vùò" (`ùò Uùò Nøô '¬
´HÐ=ò Üð(Ø() u¨Bð0÷ðûôF (4ò !Gð /3 GÜ25°e·m±m³oÓ2F¦Kûð!Güò*7øôt  )ò !Ú ð!ûô (1ò !)Ú$(ð!)úsÊ   Á;|/Ã	|4Æ}Ê+~	Ë)~Ð~)Ó3~.Õ)~3×#~8
Ø~=ÜA'Ý#!A@
ó-A@ôA@.ü4	}ý }ý>~þ~þ		~þ~þ	~&þ%~&þ=#$ÿ#$ÿ'	A@	ÿ0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¸   r1  r   rg  zparam_eval: dimension z can't be parsedr   r%  r   r¥  z.param_eval: multidimensional array parameters z not supportedrÀ  r�   )rÚ  rÅ   r2   rW   rÔ   r'  r  rÀ   r7   rŠ   r(  rz  Úzip)rÿ  ræ  r†  rÞ  rÖ  rë   ÚdimrangeÚboundÚlboundÚuboundÚv_evalÚitems               r)   rä  rä  –  sò  € ð& €ð	;Ü�Q˜ &Ó)ˆAð ˆô ˆ7ƒ|�aÒ˜7Ñ#5¤S¨£\°AÑ%5Ð#5Ñ6¸$Ò>ÜÐ1°'°Ð:KÐLÓMÐMØ�q˜ˆ}×"Ñ" 3Ó'€HÜ
ˆ8ƒ}˜Òà˜A‘;×$Ñ$ SÓ)ˆäˆx‹=˜AÒÜ ¨¡¨VÓ4ˆEÜ˜Q¤ E£
¨Q¡Ó/‰Hä  ¨!¡¨fÓ5ˆFÜ  ¨!¡¨fÓ5ˆFÜœS ›[¬#¨f«+¸©/Ó:‰HäÐIØ#˜9 Nð4ó 5ð 	5ð —L‘L Ô&ˆˆ1ˆR‰¨A×4Ñ4°SÓ9€AØ€FØò ˆð	>Ü˜˜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
    r5  Nr   r6  r¥  r¦  r  r  )
rÔ  Úrfindr7   r  rÁ   r½   r¾   r¿   rÐ   rÑ   )r"  r†  ÚdnameÚddimsrZ   rÖ  r_  rò   s           r)   r  r  Ô  s  € ðr ˆa�xà�,�1—6‘6˜#“;�ˆØ�!—&‘&˜“+ ‘/ !§'¡'¨#£,Ð/ˆô ”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   j                  |i «      |d   | <   d
|v r%||d
   |d   z   v rt        |d   |    d«      |d   | <   | S )Nr/  Úe_rï   r   rº  Ú_er4  r˜   r   r2  r3  r  )Úanalyzeargs_re_1rÐ   r   r×  r    rb   Úascii_lowercaseÚdigitsrÁ   r€  rw  )r*  r0  r4  Úorig_aÚ	a_is_exprrž  rŸ  ÚatÚnar²   r}  s              r)   Ú	expr2namerJ  $  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™}×0Ñ0°¸Ó<ˆE�&‰M˜!ÑØ˜%Ñ 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 )Nr4  r  r/  r.  rp   r2  r¨   )r]  r   rJ  r(  ru  rP  )r0  rž  rï   r4  r*  r}  Úargs1rq  s           r)   r{  r{  F  sG  € Ü�ÔÜ)¨%Ó0Ñ€M�1Ø�UÑØˆˆf‰Ø€DØ�6‰]ò ˆÜ�a˜ Ó%ˆØ�‰�A�ðð €Eˆ&�MØ�%ÑÜ˜U 7™^×1Ñ1Ó3Ó4ò 	*‰HˆAˆuØò *�Ø˜E &™MÒ)Ø')�E˜&‘M !Ò$ñ*ð	*ð
 �6‰]ò 5ˆØˆV‰9˜ÒØ %Ñ'Ø%'��kÑ"Ø�‰y  kÑ 2Ò2Ø�kÑ"×)Ñ)¨!¨F©)Õ4ð5ð �5Ñ˜U 8™_°E¸&±MÑAØ)+ˆˆf‰�e˜H‘oÑ&Ø€Lr(   z\A\(.+?,.+?\)\Zz\A[+-]?\d+(_(?P<name>\w+)|)\Zz*\A[+-]?[\d.]+[-\d+de.]*(_(?P<name>\w+)|)\Zz
\A\(.*\)\Zz\A(?P<name>\w+)\s*\(.*?\)\s*\Zc                 óÆ   — t        | t        «      rddiS t        | t        «      rddiS t        | t        «      rddiS t        | t        «      r| S t        t        | «      «      ‚)Nr3   r6   r4   r»  )rê  r7   r9   r»  rz  ÚAssertionErrorrÕ   )r˜   s    r)   Ú_ensure_exprdictrO  i  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        | «      › d�«       ddiS t        j                  | «      }|r?d|j                  «       v r)|j                  d«      rt        dt        | «      › d�«       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        | «      › d�«       |S c c}w )Nr3   r»  rp   z6determineexprtype: selected kind types not supported (r°   r6   r4   )ú+r½  r   r¿  r2  rh  r   r   rm  r   r¼  r"  r   )r3   ro  z4determineexprtype: could not determine expressions (z) type.
)rO  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×  u  s  € Øˆt�|Ü  T¡
Ó+Ð+Ø�:‰:‹<€DÜ×#Ñ# DÔ)Ø˜IÐ&Ð&Ü×$Ñ$ TÓ*€AÙØ�Q—[‘[“]Ñ" q§w¡w¨v¤ÜØHÌÈdËÈÐTWÐXôZà˜IÐ&Ð&Ü×$Ñ$ TÓ*€AÙØ�Q—[‘[“]Ñ" q§w¡w¨v¤ÜØHÌÈdËÈÐTWÐXôZà˜FÐ#Ð#Ø"ò 1ˆÜ%3°DÀÔ%C×%IÑ%IÈ#ÐPRÉ(ÐUXÉ.Ó%YÖZ �!—'‘'•)ÒZò 	1ˆAØ�DŠyÜ'¨¨Q©Ó0Ô0ñ	1ð1ð 	€AÜ×#Ñ# DÔ)Ü˜d 1 R˜j¨$°Ó6‰ä"×(Ñ(¨Ó.ˆÙØ—‘˜“ˆBÜ! !§'¡'¨&£/°4¸Ó?ˆAÙ�Z 1‘_Ø�j�MÙØ�a‘5˜E‘>Ü+¨E°"°Q±%©LÓ9Ð9ØˆA�w�%ÑØ'¸#¸s¸ÑDÐDÙÜØBÄ4ÈÃ:À,ÈiÐXô	Zà€Hùò+ [s   ÄHr¸   c                 ó6  — 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 r[| d   }
| d   D ]/  }t        || |	«      }t        |
|   «      rŒ|	j                  |«       Œ1 | d   d	k(  s|	rd
dj                  |	«      › d�}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   › d�}| d   |	vr|	j                  | d   «       t        | d   |t        z   |¬«      }t!        | | d   |	|t        z   |¬«      }
d}d| v r
|sd| d   › �}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
   r0  rª  rp   r”  rš  r4  r/  rù   r5  r%  r6  r  r¬   r	  Úcallbackúintent(z) r  r  r¤  r¨   z	 result (r.  rœ  z! in r  zentry r�  r   zend )r]  rê  ru  r#   r$   r˜  rJ  r  r(  rÚ   rv  r   r€  rÎ  Úuse2fortranÚcommon2fortranÚvars2fortranrP  )r0  rj  r•  rn  rm  r§  rp   r4  Ú	blocktypeÚargslr/  r*  r  r}  Ú
intent_lstr  r  r¨   r.  ÚmessÚentry_stmtsrù  s                         r)   r˜  r˜  ¢  s‘  € ô �ÔØ
€CÜ�%œÔØò 	LˆAÙ�Q�w‘ZÐ#=Ñ=Ø�V‘9¤	Ñ)ØÝ  6¡´)Ñ!;ØØÔ(¨¨C¸lÔKÑK‰Cð	Lð ˆ
Ø€FØ€DØ€DØ�g‘€IØ�IÒØØ€EØ��Ø�V‰}ˆØ��Ø�V‰}ˆØ�v‘ò 	 ˆAÜ˜!˜U EÓ*ˆAÜ$ T¨!¡WÕ-Ø—‘˜Q•ð	 ð �‰>˜ZÒ'©5Ø�s—x‘x “Ð' qÐ)ˆDØÐØ˜UÑ"Ü�eÐ.Ñ/×4Ñ4Ó6Ó7ò 	CˆAØ#3Ð"4°S¼7±]°OÀAÀ3ÀaØ#(Ð);Ñ#<¸QÑ#?Ð"@ð!BÑð	Cð —‘˜8 RÓ(©Ð+€JØ�JÒ :°Ñ#;Ø×Ñ˜*Ô%ÙØ/Ð0°´w±°Ø% c§h¡h¨zÓ&:Ð%;¸2¸d¸VðEÐà
€CØ��~Ü˜% ™,¨¬g©Ó6ˆØ€FØ�5ÑÜ  h¡°´w±Ó?ˆØÐ"Ò"ØˆØ€FØ�5ÑØ˜U 8™_Ð-¨QÐ/ˆØ�‰? %Ñ'Ø�L‰L˜˜x™Ô)Ü˜E &™M¨3´©=À|ÔT€DÜØˆu�V‰}˜e S¬7¡]ÀôO€Dà€DØ��™|Ø�u˜V‘}�oÐ&ˆØ�%ÑØˆÜ˜˜w™×-Ñ-Ó/Ó0ò 	R‰DˆAˆqØ(˜M¨#´©-¨¸¸q¸cÀÀ3Ç8Á8ÈAÃ;À-ÈqÐQ‰Kð	Rà�kÑ!ˆØ�LÒ  T¨^Ò%;ØˆØˆU�6�(˜9˜+ Q t f¨T¨F°6°(¸!ØˆVÐ$Ð% c U¨4¨&°°¸¸¸s¸eÀ4Øˆ[˜˜$˜ð!€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/ )ru  rv  rÚ   )r  rj  rn  r}  s       r)   r^  r^  ì  s{   € Ø
€CÜ�&—+‘+“-Ó ò BˆØ�Š=Ø�E˜#˜˜g c§h¡h¨v°a©yÓ&9Ð%:Ð;‰Cà�E˜#˜˜h q c¨¨C¯H©H°V¸A±YÓ,?Ð+@ÐA‰Cð	Bð
 €Jr(   c                 óœ  — d}t        | j                  «       «      D ]­  }|› |› d|› d�}| |   i k(  r|r|d   dk(  r|d d }Œ%d| |   v r| |   d   r|› d�}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 only:rË  r¬   z=>rU  )r  rj  rn  rò   r²   r}  s         r)   r]  r]  ö  s4  € Ø
€CÜ�#—(‘(“*Óò ˆØ��c�U˜$˜q˜c Ð#ˆØˆq‰6�RŠ<Ù�s˜2‘w #’~Ø˜#˜2�h�ØØ�S˜‘VÑ  A¡ v¢Ø�E˜�.ˆCØ�C˜‘F‰?˜s 1™v eš}ØˆAÜ˜#˜a™& ™-×,Ñ,Ó.Ó/ò �Ø˜˜A™˜u™ aÑ(Ò(Ø ˜E !  Q C˜.�CØ‘Aà ˜E !  Q C r¨#¨a©&°©-¸Ñ*:Ð);Ð<�CØ‘Aðò �3�r‘7˜c“>Ø�c�r�(‰Cð%ð& €Jr(   c                 ó–   — | d   }g }|D ]-  }	 t        «       d|› �   } || «      sŒ|j                  |«       Œ/ |S # t        $ r Y Œ=w xY w)Nr	  Ú	isintent_)Úglobalsr(  r  )ro  r¸  rn  r	  re  s        r)   Útrue_intent_listrj    sg   € Ø
ˆh‰-€CØ
€CØò #ˆð	#Ü“	˜I f XÐ.Ñ/ˆAñ ��vØ—
‘
˜6Õ"ð#ð €Jøô ò 	Ùð	ús   Ž<¼	AÁAc           	      ó  — t        | «       d}g }|D ]  }|| d   v sŒ|j                  |«       Œ d| v r4| d   D ],  }||v r||vsŒ|j                  |«       Œt        d|› d�«       Œ. 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|› d�«       ŒÓ|| 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|› d�«       �Œ;||   d   }|dk(  rd||   v r|› d||   d   › d�}i }d ||   v r	||   d    }nd!||   v r||   d!   }d"|v r|d"   d#v r|› d$|d"   › d�}n>|› d"|d"   › �}n3d%|v r |› d&|d%   › �}d'|v r|› d(|d'   › d�}n|› d�}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/}d0||   v r!|› |› d1d/j                  ||   d0   «      › d�}d/}d2||   v r+t        ||   «      }|r|› |› d3d/j                  |«      › d�}d/}d4||   v r!|› |› d5d/j                  ||   d4   «      › d�}d/}d||   v r!|› |› d6d/j                  ||   d   «      › d�}d/}d7||   v rF||   d7   }||   d   d8v r)	 t        |«      }d|j                  › d/|j                   › d�}|› d9|› d7|› �}n|› d9|› �}|› |› |› �}�Œ2 |S c c}w # t"        $ r Y Œ/w xY w):Nr
   r/  r�  zvars2fortran: Confused?!: "z" is not defined in vars.
r©  rt  z;vars2fortran: Warning: cross-dependence between variables "z" and "r¸  r2  zintent(callback) z	external z	optional r3   r   r.  rp   r0  rù   r   z*vars2fortran: No definition for argument "rl   r¨   rm  r  z(vars2fortran: No typespec for argument "rg   rq  r5  r6  rn  ro  r   )r   r¥  z*(rW   z(len=rN  z,kind=z(kind=r¬   )r  z
intent(in)zintent(out)rÁ  r%  r  r7  r	  r\  rs  zcheck(zdepend(rp  )r»  r   z :: )r]  r(  rn   ré  ru  rv  r  Ú
isoptionalÚshowr2   r€  rÎ  rÚ   rj  rÚ  r4   ÚimagrÅ   )r0  r/  r4  rj  r•  rn  Únoutr*  r"  rà   rq  Úvardefrõ  r²   rê   rö  r¸  rÿ  s                     r)   r_  r_    s÷  € Ü�ÔØ
€CØ€DØò ˆØ��f‘ÒØ�K‰K˜�Nðð �uÑØ�|Ñ$ò 	RˆAØ�D‰yØ˜D’=Ø—K‘K •NäØ1°!°Ð4OÐPõRð	Rð �UÑØ�‰�E˜*Ñ%Ô&ÙÜ�d—i‘i“kÓ"ò 	ˆAØ˜Š}Ø—‘˜A•ð	ð ó d$ˆØ�t˜A‘wÑØ˜!‘W˜XÑ&ò i�Ø˜’9 ¨T°!©WÒ!4¸¸dÀ1¹gÀhÑ>OÒ9OÜØUÐVWÐUXÐX_Ð`aÐ_bÐbfÐgõiðið ˜%Ñ A¨¨{Ñ);Ñ$;Ü   a¡Ô)Ø˜˜c˜UÐ"3°A°3Ð7�Ø�E˜#˜˜i¨ sÐ+ˆCÜ˜$˜q™'Ô"Ø˜˜c˜U )¨A¨3Ð/�Ø�D‰y˜Z¨t°A©wÑ6ØØˆDØ˜6‘]ò �Ø˜˜&™	“> a¨¡j°JÓ&>Ø�DÙðñ ØØ�D‰=Ü�ŒJÜÐ@ÀÀÀ4ÐHÔIØØ��f‘ÒØ�W‰~ Ò+¨u¯y©y¸Ô/Bð
 Ø˜T !™WÑ$Ø˜T !™WÑ$¨°t¸A±w¸zÑ7JÑ)JØ˜‘9Ø ˜E #  i°¨sÐ3�CÙÜ��a‘ŒMÜÐ>¸q¸cÀÐFÔGÙØ�a‘˜Ñ$ˆØ�VÒ 
¨d°1©gÑ 5Ø�x˜q  a¡¨Ñ!4Ð 5°QÐ7ˆFØˆØ˜T !™WÑ$Ø˜A‘w˜~Ñ.‰HØ˜t A™wÑ&Ø˜A‘w˜~Ñ.ˆHØ�(‰?Ø˜‰} 
Ñ*Ø"˜8 2 h¨s¡m _°AÐ6‘à"˜8 1 X¨c¡] OÐ4‘Ø�hÑØ�x˜u X¨e¡_Ð$5Ð6ˆFØ˜Ñ!Ø"˜8 6¨(°6Ñ*:Ð);¸1Ð=‘à"˜8 1˜‘Ø�xÑØ�x˜v h¨vÑ&6Ð%7°qÐ9ˆFØˆØ˜˜a™Ñ Ø# A™w zÑ2ö .˜!Ø Ñ,ò ð .ˆDð .á °Ñ 4¸È$Ñ9Nð —‘˜MÔ*ÙØ"˜8 2 c§h¡h¨t£nÐ%5Ð6�Ø�Ø˜$˜q™'Ñ!Ø�x ˜s *¨S¯X©X°d¸1±g¸kÑ6JÓ-KÐ,LÈAÐNˆFØˆAØ�t˜A‘wÑÜ" 4¨¡7Ó+ˆCÙØ"˜8 A 3 g¨c¯h©h°s«m¨_¸AÐ>�ØˆAØ�d˜1‘gÑØ�x ˜s &¨¯©°$°q±'¸'Ñ2BÓ)CÐ(DÀAÐFˆFØˆAØ�t˜A‘wÑØ�x ˜s '¨#¯(©(°4¸±7¸8Ñ3DÓ*EÐ)FÀaÐHˆFØˆAØ�$�q‘'‰>Ø�Q‘˜‘ˆAØ�A‰w�zÑ"Ð&CÑCðÜ˜Q›�AØ˜AŸF™F˜8 1 Q§V¡V H¨AÐ.�Að �x˜t A 3 a¨ sÐ+‰Fà�x˜t A 3Ð'ˆFØ��c�U˜6˜(Ð#ŠðId$ðJ €JùòM.øô@ !ò Ùðús   ÊO-Î&(O2Ï2	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Ø   r;  r   ry  r   Úpost_processing_hooksÚ__name__Útraverserl  )ÚfilesÚpostlistÚhooks      r)   Úcrackfortranrx  Ÿ  s–   € ô Ð(¨!Ô,Ü�Eœ9Ô%ÜÐ" AÔ&Ø€KÜœ 1™Ó&€HÜÐ1°1Ô5Ü%ò ,ˆÜ�"�T—]‘]�O 2Ð&¨Ô*Ü˜H dÓ+‰ð,ô Ð,¨aÔ0Ü˜(Ó#€HÜ˜Ñ!Ð!r(   c                 óF   — t        | «      dz   }d}dt        › d�}||z   |z   S )Nr¸   zE!    -*- f90 -*-
! Note: the context of this file is case sensitive.
z3
! This file was auto-generated with f2py (version:zZ).
! See:
! https://web.archive.org/web/20140822061353/http://cens.ioc.ee/projects/f2py2e
)r˜  Úf2py_version)r0  ÚpyfÚheaderÚfooters       r)   Úcrack2fortranr~  °  sB   € ô ˜5Ó
! DÑ
(€Cð€Fð3Ü3?°.ð Að€Fð
 �C‰<˜&Ñ Ð r(   c                 óx   — t        | t        «      xr) t        | «      dk(  xr t        | d   t        t        f«      S )Nr1  r   )rê  ÚtuplerW   r7   rÁ   )Úobjs    r)   Ú_is_visit_pairr‚  ¿  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        «      rEg }t        | «      D ]4  \  }	}
t	        |	|
f|||gz   |g|¢­i |¤Ž\  }}|€Œ$|j                  |«       Œ6 nPt        | t        «      r>i }| j                  «       D ](  \  }}
t	        ||
f|||gz   |g|¢­i |¤Ž\  }}|€Œ$|||<   Œ* n| }|€|S ||fS )aí  Traverse f2py data structure with the following visit function:

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

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

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

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

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

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

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

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

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

    r   c                 óz   — t        j                  d| z   dz   | |«      }t        j                  d| z   dz   | |«      }|S )Nz[*]\s*\br¤  z\b\s*[\[]\s*0\s*[\]])r½   rá  )Úvarnamer  s     r)   Ú	fix_usagez8character_backward_compatibility_hook.<locals>.fix_usage  sB   € Ü—‘�{ WÑ,¨uÑ4°g¸uÓEˆÜ—‘�u˜w‘Ð)@Ñ@Ø ó'ˆàˆr(   )r  rs  éýÿÿÿr   r/  r   rp  r�   NÚcallstatementz
(?<![&])\br¤  rž   zcharacter_bc_hook[r™  z]: replaced `z` -> `z`
)rP  Úischaracterr½   rá  r2   )r;  r…  r¨   r4  r†  Ú
parent_keyÚparent_valuer™  r  r‘  Ú	vars_dictr�  r�  Úvds                 r)   Ú%character_backward_compatibility_hookr™    sv  € ð  ' r™{Ñ€J�Ø�J€Cˆòð Ð+Ñ+Ø�r‰{˜1‰~ Ò'Ð'Ð'Ø˜B‘K ‘N‰	Ø	�ŠØ�r‰{˜1‰~ Ò'Ð'Ð'Ø˜B‘K ‘N‰	àˆ	à€IØÐØˆ	Ø$Ÿ?™?Ó,ò 	:‰KˆG�RÜ˜2�Ù% g¨yÓ9‘	ñ	:ð 
�Ò	Ø˜B‘K ‘N 6Ñ*ˆ	Øˆ	Ø$Ÿ?™?Ó,ò 	O‰KˆG�RÜ˜2�ô ŸF™FØ! GÑ+¨eÑ3°S¸7±]ÀIóO‘	ð		Oð ÐØ˜Òô
 Ð(¨¨°A°c°Uð ;"Ø"' ¨¨y¨k¸ð>Ø?@ôBà�YÐÐð r(   Ú__main__r¥  z-quietz-verboser1  z-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form.
z-skipemptyendsz--ignore-containsz-f77z-f90r¯   z-hz-showz-mr½  zUnknown option z	OSError: a    Warning: You have specified module name for non Fortran 77 code that
  should not need one (expect if you are scanning F90 code for non
  module blocks but then you should use flag -skipemptyends and also
  be sure that the files do not contain programs without program
  statement).
zWriting fortran code to file r�  )r   )r   )r%  )rZ  r,   )r
   N)Nr
   )r
   )NN)r   r   )r¸   F)r
   F)ÖÚ__doc__r‹   rÏ  rÂ   r…   rÔ  r½   rb   r-   Úpathlibr   r‚   ÚImportErrorr
   r   r   ÚauxfuncsÚversionrz  r   r   r   r   r   r   r   r   r   r   r   r¼   r!   r   r   r    r   r=  r   r   r<  r%   r   r$   r&   r   r#   r"   r   r*   r2   r�  r²   rm   ry   r©   rq   rv   rz   r|   r¾   r¿   rŒ  r£   r¤   rÊ   rÐ   r¦   r¡   rÉ   r–   rª   rm  rØ   ÚbeforethisafterÚfortrantypesrN  rÞ  rK  rL  Úgroupbegins77rË   Úgroupbegins90rÌ   Ú	groupendsrI  ÚendifsrH  ÚmoduleproceduresrT  rM  r>  r?  rA  rB  rE  rF  rG  r@  rC  rD  rP  rS  rW  rO  rQ  rR  rJ  ÚSr9  r:  rÏ   r+  rU  Úcrackline_bind_1rÑ  r;  rV  r&  rk  r~  r#  r‡  r“  r”  r•  rØ  r¿  r�  rƒ  rŠ  r�  r—  rX  rë  rÒ  rÕ  rn  ro  rQ  r9  r'  r0  rÓ  rß  rw  rx  ry  r[  r]  r`  rh  rl  ry  r~  r|  r  r   r¢  r§  r¬  r¯  r°  r¶  rº  rÀ  rÅ  rØ  rÖ  rõ  r÷  ró  r}  rC  rä  r  rJ  r{  rR  rS  rT  rU  rV  rO  r×  r˜  r^  r]  rj  r_  rr  rx  r~  r‚  rt  r™  r(  rs  ru  Úfuncsre  Úf2Úf3ÚshowblocklistÚargvrê   rn   rÕ   rˆ   rÜ   ÚOSErrorÚdetailrv  r{  r/   r'   r(   r)   ú<module>r°     sÜ  ðñLóZ Û Û Û 	Û Û 	Û Û 
Ý ðÛ÷ $ô
 à×"Ñ"€ð €	Ø€Ø	€Ø
€Ø
€Ø€Ø€Ø€Ø€Ø€Ø
€ð €Ø€Ø€Ø€ØÐ Ø€Ø€
Ø€Ü˜2Ð€	Ø€	Ø€Ø€Ø€	ØÐ Ø€Ø€	Ø€Ø€ò#óLð Ð Ø	!ò 3€AØ)¨6Ð2Ð˜Òð3à	ò 6€AØ)¨9Ð5Ð˜Òð6à€Ø€ð
ò 
€Að �e‘)€HˆQ�KØ€K��E‘	Òð
òò,òò1ð �—
‘
Ð3°R·T±TÓ:×AÑA€Ø�"—*‘*Ð1°2·4±4Ó8×?Ñ?€Ø�"—*‘*Ð1°2·4±4Ó8×?Ñ?€Ø�"—*‘*Ð1°2·4±4Ó8×>Ñ>€ò :Ð Ú8Ð ò3ò>ð4 '+°!ó ]DðB€ð 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€àðñ€ð �—‘Ø�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Ð óX%òvó$ò&ó
ð@ �—
‘
Ø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Ð òòò ò ò t@ònò(ð8 ˆ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nòb6,ótó6óóòòóó<ó@\ò~òD'óT*òZ$ó&!ð �"—*‘*˜^¨R¯T©TÓ2€òAðH ˆr�z‰zÐ,¨b¯d©dÓ3€òò,ò4ò$"òó ð$ (*ó bòJ(ð �"—*‘*˜WÓ%×+Ñ+€òòDðN �2—:‘:Ð1°2·4±4Ó8Ð ó;ò|Mð`  ó òDð6 $˜Ÿ™Ð$6¸¿¹Ó=Ð Ø#˜Ÿ™Ð$DÀbÇdÁdÓKÐ Ø#˜Ÿ™Ø1°2·4±4ó9Ð à#˜Ÿ™ M°2·4±4Ó8Ð Ø#˜Ÿ™Ð$EÀrÇtÁtÓLÐ ò	"ð )+ó (óZGóTóò0ózð@ Ð ò"ò"!ò0ð "$¨Dó ?"òD9 õx × Ò ÐBÔ Cð ˆzÓØ€EØ€EØ	€AØ	
€BØ	
€BØ€MØ�XŠX�a�bˆ\ò 1ˆØ�Š7ØØˆq‰T�SŠ[Ø‰AØ�(Š]ØˆEØ‰GØ�*Š_ØˆGØ‰EØ�&Š[ÝÙØVÐXYô[àˆMØ"‰NØÐ"Ò"Ø‰MØÐ%Ò%Ø‰NØ�&Š[ØˆIØ"‰NØ�&Š[ØˆIØ#ˆNØ‰MØ�$ŠYØ‰BØ�'Š\Ø‰MØ�$ŠYØ‰BØˆq‰T�SŠ[Ù�o¡d¨1£g Y¨bÐ1Õ2ÙØˆBØ‰KÙØˆBØ‰MÙð2Ù�Q“—’”Ø—’˜Q•ð �LŠL˜�Oðc1õd �­}Ùð ð ô	ñ ˜EÓ"€HÝÙÐ/±´[Ó0AÐ/BÀ"ÐEÀqÔIÙ˜HÓ%ˆÙ”+˜sÓ#ð 	 qØ�GŠG�CŒL÷	áÙˆX�ð ðQ øðYm ò ØÓðûðBo ò 2Ù˜) F :¨RÐ0×1Ò1ûð2ú÷"	ð 	ús5   ªk è)kêk0ëkëkëk-ëk(ë(k-ë0k9