bgn!dZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z  ddl Z n #e $rdZ YnwxYwddl mZddlTddl mZejadadadadad ad ad adadadagad ad ada ia!d a"da#da$da%tJgia&d a'ga(d a)ga*da+d a,ga-ga.ga/d Z0dd Z1de_2iZ3dD] Z4ddie3e4< dD] Z4ddie3e4< iZ5iZ6dD]Z7e7dze5e7<e7e6e7dz<dZ8dZ9dZ:dZ;ej<dej=j>Z?ej<dej=j>Z@ej<dej=j>ZAej<dej=jBZCgdZDgdZEd ZFd!ZGeHdfd"ZId#ZJd$ZKej<eJd eKeKd%fzej=d&fZLej<eJd eKd'zeKd'zd%fzej=ZMej<eJd(zej=d)fZNej<eJd*zej=d)fZOd+ZPej<eJd ePePd%fzej=d)fZQePd,zd-zZRej<eJd eReRd%fzej=d)fZSd.ZTej<eJd eTeTd%fzej=d/fZUd0ZVej<eJd1eVeVd%fzej=d2fZWd3ZXej<eJd eXeXd%fzej=d4fZYej<eJd5zej=d6fZZej<eJd7zej=d8fZ[ej<eJd9zej=d:fZ\ej<eJd;zej=dfZ^ej<eJd?zej=d@fZ_ej<eJdAzej=dBfZ`ej<eJdCzej=dDfZaej<eJdEzej=dFfZbej<eJdGzej=dHfZcej<eJdIzej=dJfZdej<eJdKzej=dLfZeej<eJdMzej=dNfZfej<eJdOzej=dPfZgej<eJdQzej=dRfZhej<eJdSzej=dTfZiej<eJdUzej=dVfZjej<eJdWzej=dXfZkej<eJdYzej=ejlzdZfZmej<d[ejld\fZnd]Zod^Zpej<d_ej=Zqdd`ZrdaZsddcZtddZuddeZvej<dfej=Zwej<dgej=Zxej<dhej=Zyej<diej=Zzej<djej=Z{ej<dkZ|ej<dlZ}ej<dmej=Z~dnZdoZdpZdqZdrZdsZej<dtej=Zej<duej=Zej<dvej=Zej<dwej=Zej<dxej=ZdyZdzZd{Zd|Zdd}Zdd~ZddZddZdZdZddZddZddZdZdZddZdZddZej<dej=ZdZej<dej=ZdZdZdZdZdZddZifdZdZej<djBZdZdZej<dej=ZgfdZdZej<dej=Zej<dej=Zej<dej=Zej<dej=Zej<dej=ZdZifdZddZddZddZdZddZgadZdZdZgdfdZdZtreedkrgZgZdZdZdZdZejddD]1Zed kr eddkrdZÌedkrdada$edkrdada/edkrt&r e1dddadaMedkrdaVedkrda_edkrdadajedkrdadadawedkrdZČedkrdZƌedkrdZŌeddkredeeȦzerdZeaerdZeaerV eeȦeeȦ#e$rZedeΛdYdZ[ΐdZ[wwxYwe eȦ3t&st2rt4s e1ddeeZt0rfe1det0zdeeϦZet0dĦ5ZeàeЦdddn #1swxYwYereHeϦdSdSdS)a* crackfortran --- read fortran (77,90) code and extract declaration information. Copyright 1999-2004 Pearu Peterson all rights reserved, Pearu Peterson 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. $Date: 2005/09/27 07:13:49 $ Pearu Peterson Usage of crackfortran: ====================== Command line keys: -quiet,-verbose,-fix,-f77,-f90,-show,-h -m ,--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: f2py is read as 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'][]['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':,'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: {:{['only':<0|1>],['map':{:,...}]}} B['note'] --- list of LaTeX comments on the block B['f2pyenhancements'] --- optional dictionary {'threadsafe':'','fortranname':, 'callstatement':|, 'callprotoargument':, 'usercode':|, 'pymethoddef:' } 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'][] = {'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()', '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 = [[]::] = byte | character[] | complex[] | double complex | double precision | integer[] | logical[] | real[] | type() = * | ([len=][,[kind=]]) | (kind=[,len=]) = * | ([kind=]) = 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. = in | out | inout = comma separated list of dimension bounds. = [[*][()] | [()]*] [// | =] [,] 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__)*)symbolicfix c|dadadadadadadadadada ga da tgia da dadagaiadadadagagagagadadS)Nrrrr r r ) strictf77sourcecodeformquietverbosetabchar pyffilename f77modulename skipemptyendsignorecontains dolowercasedebug groupcounter grouplist neededmodule expectbeginskipblocksuntil usermodules f90modulevars gotnextfilefilepositiontextcurrentfilename skipfunctions skipfuncs onlyfuncs include_pathsprevious_contextj/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib64/python3.11/site-packages/numpy/f2py/crackfortran.pyreset_global_f2py_varsr*sIN EGGKMMNK ELr"ILKOKMKOMIIMr(ctsdStsG|r$tjt tj|dSdSN)rrsysstdoutwriter )lineflags r)outmessr2s^    / J  - . . . r(2zabcdefghopqrstuvwxyz$_typespecrealijklmninteger)3intdoublefloatcharshortlongvoidcasewhilereturnsignedunsignediffortypedefsizeofunionstructstaticregisternewbreakdogotoswitchcontinueelseinlineexterndeleteconstautolenrankshapeindexslensize_imaxminflenfshapestringcomplex_double float_doublestdinstderrr.typedefault_bnct|tvr.td|dt|dt|S|S)Nzrmbadname1: Replacing "" with "". )badnameserrmessnames r) rmbadname1rr sF xx~~~' ( ( (~ Kr(cd|DS)Nc,g|]}t|Sr')rr.0_ms r) zrmbadname..s + + +rJrNN + + +r(r'namess r) rmbadnamer{s + +U + + ++r(ct|tvr.td|dt|dt|S|S)Nzundo_rmbadname1: Replacing "rlrm) invbadnamesrorps r)undo_rmbadname1r~sJ {44T***, - - -4  Kr(cd|DS)Nc,g|]}t|Sr')r~rus r)rxz"undo_rmbadname.."s 0 0 0BOB   0 0 0r(r'rys r)undo_rmbadnamer!s 0 0% 0 0 00r(z-\*-\s*fortran\s*-\*-z-\*-\s*f90\s*-\*-z-\*-\s*fix\s*-\*-z[^c*]\s*[^\s\d\t])z.f90z.f95z.f03z.f08)z.forz.ftnz.f77z.fc`t,tj|j}nt dt j|}t|d5}| |}| tj rd}n^| tj tjfrd}n0| tjtjfrd}nd}dddn #1swxYwYt|||S) aNEnsures 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-SIGzUTF-32zUTF-16ascii)encoding)charset_normalizer from_pathbestrr`ospathgetsizeopenread startswithcodecsBOM_UTF8 BOM_UTF32_LE BOM_UTF32_BEBOM_LEBOM_BE)filenamemodernbytesfhandleraws r)openhookr/sB%%/99>>@@IR2233 (D ! ! #W,,v&&C~~fo.. #&!4f6I JKK ## >?? ### # # # # # # # # # # # # # # # $ 2 2 22s1BDDDc(d}t|jtvrd}t |d5}|}d}t |rd}nt|rd}d}|dkrw|ru|ddkrM|r9|dz}|ddkrt|d d s|d d d krd}n|}|dkr|ud d d n #1swxYwY|S)z(Check if file is in free format Fortran.FTrr!r Nr &) rsuffixlowerCOMMON_FREE_EXTENSIONSrreadline _has_f_header_has_f90_headerstrip_free_f90_start)fnameresultrr0ns r)is_free_formatrNsjF E{{!!%;;; %  &!!     AA T " " AF!eeeAw#~~$**,,~QGtOORaR(A(AOd2b5kUXFXFX!F##%%D !eee&&&&&&&&&&&&&&& MsB9DD D c $|s8tttttt t ttf }|gkrdSt}d}d}d}tj dtj }tj d} tj d} tj d} |r |ddd \}} d gd td Dz} datj|t } |}nO#t"$rB}t%d|d|d|dd}~wwxYw|sn |rda|ada|} dadat,jtd}t3tjt8vr!t;|st=|sdan%t?trt=|sdatrt@antBatEdtGtdttrdpdd|$%dd }|dks|ddvrn|dd}|dktsYtM|d\}}|d z }|dddkr!tM|d z|ddzd\}}|'dkrtdkrnd}^tdkr|dd!vr2|ddd"krd#|ddz}n(d}trtQ|d$kr |dd$}|d| vrt%d%tG|z|rtr2tQ|dkr|dd ks||d&dz}d}d}nts| )|}|r|*d'}|r0|| )|*d'z}d}d}n*d#|ddz}|r|}n|}|}|}|du}nTd#|ddz}|r|}n|}|}|}n(tdkr|sw|d(krq| )|r\|d)z} |}|stWd*n||z}| )|rnB|,}| )|}|r|*d'}|r0|| )|*d'z}d}d}n|r|}n|}|}|}|du}n$t[d+tGtzd,|.dz t| fza|)|}|r|*d-}t,j/|rta||d.nt,j1tgtdz}d}|D]W}t,j3||}t,j/|rd}ta||d.nX|s@tEd/tG|d0t,j43|d1n |||} r|r|}n|}|}d,|.dz t| fza|)|}|r|*d-}t,j/|rta||d.nt,j1tgtdz}d}|D]W}t,j3||}t,j/|rd}ta||d.nX|s@tEd/tG|d0t,j43|d1n ||da|5|r|dddS|\ aaaaaaaaadS)2z Read fortran codes from files and 1) Get rid of comments, line continuations, and empty lines; lower cases. 2) Call dowithline(line) on every line. 3) Recursively call itself when statement "include ''" is met. NFr z*\s*include\s*(\'|")(?P[^\'"]*)(\'|")z(?P.*)&\s*\Zz(\s*&|)(?P.*)z.*?'''r )r r  c,g|]}t|Sr')strrus r)rxz#readfortrancode..s777r3r77777r( )rTzreadfortrancode: reading #z failed with zu. It is likely that installing charset_normalizer package will help f2py determine the input file encoding correctly.rrrfreez Reading file z (format:z,strict)  z rrz!f2pyr )rcrCrf2pyz Hzxreadfortrancode: Found non-(space,digit) char in the first column. Are you sure that this code is in fix form? line=%sr0.pyf z.Unexpected end of file when reading multiline z6Flag sourcecodeform must be either 'fix' or 'free': %szLine #%d in %s:"%s" rq) dowithlineistopz-readfortrancode: could not find include file z in . Ignoring. )6rr r!rr beginpatternrrrrecompileIrange fileinput FileInputrrUnicodeDecodeError Exceptionrlineno isfirstlinerrsplitextrrrCOMMON_FIXED_EXTENSIONSr_has_fix_headerrbeginpattern77beginpattern90r2repr expandtabsreplacesplit_by_unquotedrrXmatchgrouprorstrip ValueError filelinenoisfilereadfortrancodedirnamer%joinpathsepclose)ffilerr saveglobalslocaldolowercasecont finallinell includelinecont1cont2 mline_markl1 spacedigitsfinlmsgextrl_ origfinallinerlcmfn include_dirs foundfileinc_dirfn1s r)rrhs  6!#3_nV_ %+6  {{" DI B*5rt==K J, - -E J- . .EI&&J  2r FB%77U2YY7777K  eh 7 7 7Ca  AA!   CLLNNSZZ\\!$      ??   7! !llnnOKBI"N'""?33A6CO$$+11337NNN(++O/>q/A/AO 00 (9K9K (!' .- - GO,,,,nn .Y4"446 7 7 7 LLNN " "63 / /r''uH$$#2#Ar'' D'3//GQ HA"1"v||~~(((Wr!""v)=sCC1 7799??''   U " "t000QqS6<<>>V++!ABB%AA D q66B;;#2#AaDK''!GIMa!QRRR! I! CFFQJJqts{{!ABB%Z "   AA,GGFOO %++a.."6"6v">">>$& (* $aeO++(* II(*I(* TMDD !ABB%A''$&HHJJ $& $&MBB v % % C6MMj.>.>q.A.AMHBMOOOBA!''++HHJJ AA $GGFOO %++a....v666 " ## " II "I " TMDDH4P^K_K__aa a4 NN  q /2877   m , ,  "Bw~~b!! BzCCCCCGOOO44 68E F  +G',,w33Cw~~c**$% ' !LLLL!BGR"*//,"?"?"?"?ABBB Jy ! ! ! CaDHHJJ  M0 1or433-((A WWV__ 7>>"   > B:Q ? ? ? ? ?GOOO<<= MLI'  gll7B//7>>#&& !I#CJaHHHHE >HHHHbjool;;;;=>>>  9IIKKK D 2q9D 6 % %+++s:D E=EEzN\s*(?P%s(?=\s*(\b(%s)\b)))\s*(?P(\b(%s)\b))\s*(?P%s)\s*\Zzqcharacter|logical|integer|real|complex|double\s*(precision\s*(complex|)|complex)|type(?=\s*\([\w\s,=(*)]*\))|byte.*rhz|static|automatic|undefined)z([a-z]+[\w\s(=*+-/)]*?|)functionrrbegin)z [a-z\s]*? subroutinerrzprogram|block\s*dataz@|module(?!\s*procedure)|python\s*module|(abstract|)\s*interface|z type(?!\s*\()z\end|endprogram|endblockdata|endmodule|endpythonmodule|endinterface|endsubroutine|endfunctionendzJend\s*(if|do|where|select|while|forall|associate|block|critical|enum|team)z[\w]*?endifzmodule\s*proceduremoduleprocedure)r implicitrrr)r dimension|virtualrr dimension)r externalrrr)r optionalrrr)r requiredrrr)r publicr rr )r privater rr )r intrinsicr rr )r intent|depend|note|checkr z \s*\(.*?\).*intent)r parameterrz\s*\(.*r)r datarrr)r callrrr)r entryrrr)r callfunrrr)r commonrrr)r userrr)r containsrr r)r formatrrr)r Kthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddefrrf2pyenhancementsz2\s*(?P''')(?P.*?)(?P''')\s*\Z multilinec tdt|zr Jdtjddtj|dtj|dd}||}|r$|}|d |d fS|d fS) 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"'zcannot split by unquoted quoteszR\A(?P({single_quoted}|{double_quoted}|{not_quoted})*)(?P{char}.*)\Zz[^"'{}]z[{}]z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*")) not_quotedr; single_quoted double_quotedbeforeafterr )setrrrescaper groupdict)r0 charactersrrds r)rrs E S__,PP/PPP -  !!'!((:)>)>??ry445500 "("2"2 3 3A  A) KKMM( QwZ(( ":r(cg}t|dD]2}dD]}||d}||3d|S)N@,@z(),r,)markoutercommasplitrappendr)argslinearrs r) _simplifyargsr-sq A H % % + +E 2 2 " "A !S!!AA  88A;;r(z"\s*(?P\b[a-z]+\w*\b)\s*=.*cnt|d\}}|rtd|std|sq|dksJt |t|d\}}|r-t ||t|ddd\}}|-t ||dS|dkrwdat diat iiat gia gtt d<itt d<dtt d<dtt d <d a d a dS|dkr d}trtt krd }t |krtd t t d t tdtdtt dz tt tt tt dz d d<tt =t dz at |ktr tt krtt dz tt tt tt dz d d<tt =t dz att dz tt tt tt dz d d<tt =t dz ad a dS|dkrdSd}tt t"t$t&t(t*t,t.t0t2t4t6t8t:t<t>t@tBtDtFtHtJtttLfD]&}|d|}|rn|dz}'|stN} dtcxkr t krnndSdtt vratt dD]G} | tPvr tP| } dtt vr| tt dvrHtSjd| ztU|tRj+} | r| | ,d} t[| ,d} | r d| d| d| ,dd}n d| d| d}t\d|}|s"tdt |zdSt_|d|dSIt`dks7t`dkrEtb23drda4tdt zdS|ddkrdtcxkr t krnnt dz att krdSt dkrtkdt zt8d|} | r| ,d tt ksZtkd!t | ,d d"t tt d#tltt krd a tt dz tt tt tt dz d d<tt =t dz atnsda8dSdS|dd$krCdtcxkr t krnn t dzadSda9t_||d|da8dS|dd%krdS|dd&krt_||d|dS|dd'kr.ttrdSdtcxkr t krnndSt a dSdtcxkr t krnndSt_||d|dS)(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]. ;rrNr bodyvarsblockrqr zcrackline: groupcounter=z groupname=rzYcrackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement. externals interfacedz5(?P[^"]*)\b%s\b\s*@\(@(?P[^@]*)@\)@.*\Zrargszcallfun (z ) result (r)z8crackline: could not resolve function call for line=%s. rrz"crackline:%d: No pattern for line rz>crackline: groupcounter(=%s) is nonpositive. Check the blocks.thiszcrackline: End group z* does not match with previous Begin group z rrrr);rf2pyenhancementspatternrmultilinepatternr crackliner groupname groupcacherrrrr2r*dimensionpatternexternalpattern intentpatternoptionalpatternrequiredpatternparameterpattern datapattern publicpatternprivatepatternintrinsicpattern endifpattern endpattern formatpatternrfunctionpatternsubroutinepatternimplicitpattern typespattern commonpattern callpattern usepatterncontainspattern entrypatternmoduleprocedurepatterncrackline_re_1r}rmarkouterparenrrr-callfunpattern analyzelinerr!rendswithr&rr rrrr)r0resetr has_semicolonsemicolon_lineflr1patrre_1rqm1m2r,s r)r<r<sQ)s33A} 5a8>>tDD /288>> zzz4;;zzz0s;;n N dE " " "#4^ABB5G#M#M D. N $ qyy !2& "B' !2& +- < (+- < (,. < )+- < (  qyy   \\99BR G,''''i: ; ; ; l n n n lQ& ' . .z,/G H H H6? 6MIlQ& ' +F 3,''!+LR  \\99 lQ& ' . .z,/G H H H6? 6MIlQ& ' +F 3,''!+L lQ& ' . .z,/G H H H6? 6MIlQ& ' +F 3,''!+LL rzz D /=/ +}n jo/@}Z' &  FLL     Eax K%  / / / /< / / / / / F *\2 2 2"<0=  ;&&&t,D:l#;;; S_H`amHn@n@nXLtSUcdhUiUikmkoqqBHHX$6$677B%bhhv&6&677A<< DD!!!RXXh%7%7%7%7 9<4844;&q)//55AWZ^_cZdZddfff9d333FF Q;;7a< > > >KFF#$$ $ Kr(zD\s*(?P(@\(@.*?@\)@|\*[\d*]+|\*\s*@\(@.*?@\)@|))(?P.*)\Zz[(?:,(?P[\w(),]+))?(::)?(?P\b[a-z$_][\w$]*\b)(?:\((?P[\w,]*)\))?\Zz\s*(?P\b[\w$]+\b)\s*(@\(@\s*(?P[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P(?:(?!@\)@).)*)\s*@\)@))*\s*\ZzF\s*(?P(operator|assignment))@\(@\s*(?P[^)]+)\s*@\)@\s*\Zz9\s*(?P\b[\w$]+\b)\s*@\(@\s*(?P.*)\s*@\)@\s*\Zz4([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)zA([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))zintent\s*\(.*?\bcallback\bcr|dgD]}t|rdS dS)Nrmrr)get_intentcallbackpatternr)vdeclr,s r)_is_intent_callbackrsF YYz2 & & ! ' ' * * 11  1r(cxd|}t|}t |||rc|d}|rd|dDng}|d||dfSdgdfS)Nr attributesc6g|]}|Sr')r)rvr,s r)rxz*_resolvetypedefpattern..s 555q555r(r'rqparams)rr)typedefpatternrprintr)r0raattrss r)_resolvetypedefpatternrs 774::<< D   d # #B $OOO ;&&9>F55EKK$4$45555Bxx(:(::: T>r(c>t|}t|}|rR|d|d|d|dfSt|}|r7|ddz|dzdz}|gddfSt |}|r,|d|dddfSdgddfS)Nrqr6rbindschemer7r8)rWnameargspatternrroperatorpatterncallnameargspattern)r0rarqs r)_resolvenameargspatternrs $  D   t $ $B Xxx&!1!1288H3E3ErxxPVGWGWWW   t $ $B $xx!!C'"((6*:*::S@Rt##  " "4 ( (B >xx&!1!14== T4 r(c dB|d}|dkrdatr |dvrtstdkrt jt dd}td|zda tdzadtt<itt<gtt<gttd <ittd <dttd <|ttd <d ttd<da|dv r|}t!jd|t jrd}nEt!jd|t jrd}n"t!jd|t jrd}|dkrTt'|d\}}}t)|ttd |<g}d} n't+|d\}}} }||dkrd}nd}|dvrtd||tfa|r:t-dt/| dD}ng}d|vr,d|vr|dd|vtdd} d} |d vrd} d!ttvrdS|ttd!vrdSttD]} | d |krdS|ttd"vrdSd#d$d |}t2r(t4d%krtdkrtd&zad} |d'vrd} tdzaitt<gtt<| rt6dkr%td(t9t2zdd)tt<dttd <t2ttd <dttd<gttd <gttd*<gttd"<ittd <tdzaitt<gtt<| r$t6dkrtd+tzdd,tt<d,ttd <d-ttd <ttdz dd.ttdz d ttd<gttd <gttd*<gttd"<ittd <tdzaitt<gtt<|tt<|ttd <|sd/|d0d1z}|d2ttd3<t=|ttd <| ttd4<tdkrtttd<nt2rDtd5kr9ttdz dd.tttd<nLttdz dd.ttdz d ttd<t?tt D]-} tt| stt| =.|ttd!<gttd <gttd*<gttd"<ittd <ittd6<|dkrgttd7<|d vr|ttd&z d*vr.ttd&z d*!|tEj#ttd&z d ttd < ttd |ttd |d8$d9=n#tJ$rYnwxYw|d:vr? tMttd |ttd&z d dttd |<n#tJ$rYnwxYw|d;kr| r| ttd vrg|| ksatMttd |ttd | ttd |< ttd&z d"!|n#tJ$rYnwxYw|d$krtNd|d2d0z|z}|rMtQ|d|d\}}}}tS|||||d vrttdz !ttttttdz d%d <tt=tdz attdz !ttttttdz d%d <tt=tdz adSdS|d6krt+|d\}}} }|~|r:t-d<t/| dD}ng}| Jt9| |ttd6|<d6|tfadSdS|dkrJtQ||d\}}}}tS||||}| d=|tfadSdS|d>vr ttd }|d*}|+d?}|dkr|d@krtY|+dAd&z }|d|dzd?z||dzdz}|+d?}||dd?krrd!ttvr^tdB|d|d|dC|dD-ttd!z}|dkrd}d}n)|d|*}||d&zd}t/| d}t]|dkr5|d}tdEdD-|ddzd}dFt/| dDD]}t^|}|sL|dGvrd} ngta|1tdH|dIt9|dJkt=|d } |dGvr$| dKks| dLkr| |dz } | |vri|| <|dMkr||dz}|d@kr|d|z}td|r| ttd!vrtdkrdNttd&z d vrtdO| ttd krWtdP| dQttd dRttd!!| n%tgdS| zntgdT| z|dUvr|}d8|| vr"|| d8!|n |g|| d8<|d9krttd dkrtdVp| ttd!vrd*ttvrgttd*<ttd*!| | }|ttd <| d=|tfadSdS|dWkrGdX|d dDDttdY<dS|dZkr|-dkr|,|0z},J|-d&krb|+*}+|+DdDr|+dd*}+|!|+|,g|0}+d},d}-|-d&kr\|+*}+|+DdDr|+dd*}+|!|+|,gi}1d ttvrttd }1d}|D]}2d~|2D}2|2dddDkr|2ddd|2d<|2ddd|krtd|2dz_d}d}3t]|2d}4t-dt/|2d dDD]}|dd|krtd|z"d}.||4krH|.s|2d|dDks4|2d|dzkr|. }.|dz}||4kr|."|2d|dDk4|dz}||1vri|1|<d\|1|vrY|1|d\|2d|3|dz ks6td|da|1|d\d|2d|3|dz d_|2d|3|dz |1|d\<|}3|}|1ttd <| d=|tfadSdS|dkr|d*}|dd{ksd|z}g}5d}-d}6d}7|D]\}0|0d{kr|-dz}-|-d5kr8|6*}6|6sd}6|5!|6|7g|-d&z }-d}6d}7|-d&zr|6|0z}6W|7|0z}7]|6*}6|6sd}6|5!|6|7gi}8dttvrttd}8|5D]o}0|0d|8vr g|8|0d<dt/|0d dDD]%}|r!|8|0d!|&p|8ttd<d|6tfadS|dkrt!jd|dt j}|r|1}9dttvrittd<|d }ittd|<d}:d|9vr"|9dd|9vr |9dd}:|:ttd|d<d|9d dDD}i};|D]}2d\|2vrt!jd|2t j}#|#rP|#d*|;|#d*<n%tdt9|2zn|2|;|2<|;ttd|d<dSdSta|1tddS|dvrdttvrittd<ttd}<|ddkr[d|. s6JJJ"# ggiiJJJr(r&z.s6"N"N"N&'#$''))"N"N"Nr(variable)rr rrrr r r ::r rez"All arguments will have attribute rr'zXanalyzeline: cannot handle multiple attributes without type specification. Ignoring %r. c6g|]}|Sr'rrs r)rxzanalyzeline..s EEE!''))EEEr(r r z&analyzeline: no name pattern found in z statement for z . Skipping. operator assignmentr__user__z8analyzeline: missing __user__ module (could be nothing) z(analyzeline: appending intent(callback)  to z arguments z,analyzeline: intent(callback) %s is ignored z=analyzeline: intent(callback) %s is already in argument list )rrr rr r z(analyzeline: ignoring program arguments rc6g|]}|Sr'rrs r)rxzanalyzeline..s < < <1QWWYY < < .s ???Qqwwyy???r(rpzAanalyzeline: could not extract name,expr in parameter statement "" of "" z1analyzeline: Overwriting the value of parameter "" ("z ") with "rmr4r5r$ecomplexz+1j*(z analyzeline: Failed to evaluate z . Ignoring: rnonez.*?)\s*(\(\s*(?P[a-z-, ]+)\s*\)\s*|)\ZzDanalyzeline: could not extract info of implicit statement part "%s" zManalyzeline: could not extract types pattern of implicit statement part "%s" rnrorq-c6g|]}|Sr'rrs r)rxzanalyzeline..Os )J)J)J!'')))J)J)Jr(zZanalyzeline: expected "-" instead of "%s" in range list of implicit statement z^analyzeline: expected "-" instead of "%s" in range list of implicit statement (2) r'/r7r8c6g|]}|Sr'rrs r)rxzanalyzeline..s &&&q&&&r(z>analyzeline: implied-DO list "%s" is not supported. Skipping. c6g|]}|Sr'rrs r)rxzanalyzeline..s UUUa UUUr(z*analyzeline: changing init expression of "") to "rz//_BLNK_c6g|]}|Sr'rrs r)rxzanalyzeline..s KKKAaggiiKKKr(rzR\A\s*(?P\b\w+\b)\s*((,(\s*\bonly\b\s*:|(?P))\s*(?P.*))|)\s*\Zrunotonlyonlyc6g|]}|Sr'rrs r)rxzanalyzeline..s ???Aaggii???r(z7\A\s*(?P\b\w+\b)\s*=\s*>\s*(?P\b\w+\b)\s*\Zlocalz0analyzeline: Not local=>use pattern found in %s mapz0analyzeline: Could not crack the use statement. )rrusercodez-analyzeline: No context for multiline block. z+analyzeline: No code implemented for line. )Hrr&rrrrrbasenamer!r)r2rr=r>rrrrrrdictrr{r(removerrrrrrrrurvr*copydeepcopyr[rr~rOcracktypespec0 updatevarsrfindrWrrX namepatternrr"rroget_parametersdetermineexprtyper real16patternfinditerstartreval SyntaxError NameError TypeErrortypespattern4implicit cracktypespecrordchrr isinstancerappendmultiline)>rr?r0r2newnamerqrrr6r needmodule needinterfaceitr}tr4selectorattredeclr last_nameriplchrraapinitexprrttvrimplrzrb kindselect charselectrqrbegcendcodlilrffcinprr1rjllenclbnol commonkeymmisonlyrr$gcs> r)rYrYs" GGFOOE {t#GGGH!-!1!1'""?3399#>>qA QT[ [ ] ] ] #a' "+ ,#% < "$ ,+- < (+- < (,5 < )+2 < (+4 < (  +++  8OUBD 1 1 ) EE X(% 6 6 )#EE X-ubd ; ; )(E F??3AGGG4D4DEEND%59U5K5K5KJ| $V ,T 2DFF$;AGGG-> < *+5d+;+; < (-3 < * 1  />J| $V , , `!2!2|a/0888//4K <(00|a/0888*\TUEU:VW]:^:^4` <(0j.335566 0 0Al+A. 0|,Q/+/ < (+- < (02 < -13 < .+- < (,. < ) F??35J| $Z 0 & & &:lQ&67 DDD>AK&|4V >4<<>>>6:J| $W -d 3 '|<      *8 1777##+%+%'(D%x4??  *I|D    ! n n n<(0 WWW   # # % % GGDMM q55TX%%r""''..2AFQUFd"RAZ/B A!""v~~&J|,D"D"D"RaR&&&2333#((:l#;F#CDDD q55ABBBQBBAEFFB B   % %e , , r77Q;;AB oABB  " # # # EE^B%7%7%=%=e%D%DEEE5 5 A""1%%B 1000AA!++--(((Gd1gggg'(((rxx//00,,,Z1 #4#4RXXg&&&~~a{""BHHW---xWWV__r))//33= < 8 @@@'!++)L1>><>J|,[9<(5<!A$3G3G3M3Me3T3TUUUVV  Q43;;Y\]]___ 4xxbx!Q3tAw#~~!#VAA4xxbx!Q3ED== DG$q'>>$q'#,!A$qQw-*G*GG473<<<1aAg8999 tAa!eG}Q  + ,,0 < (  *I|D    !   www%%''Aw#~~$;D      ACxxEAvvXXZZ"!B 2r(###E1u !V!V XXZZ B 2r( z,/ / /"<0:I . .At9$$"$ !A$KK!)=)=)C)CE)J)JKKK . ..adO**1--- ..7 < *$b,7  X acdcjcjkrcscsuwuy{{  IBJ|44424 <(/88F##D46J| $U +D 1F||6 6??r)}'<F@F <(/5f=??F)9)9#)>)>??? F FAaxxXVXY[][_aa_<>HH %='='',uwwrxx00668899$ SVZ[\V]V] ]____!"1CEJ|,U3D9%@@ F F !++-- G H H H H H % % % Z %= = =;=J| $%7 8 | $%7 8 776??j ( (Z1__!J--- 0!":* jM !1!1 2 2 2 2 2!"!1!1Aaggfoo        # JHIII F  2(!, ) ) ) ) ) Q;; !++-- B C C C C C ;s3Ad ddA$f ff.i iiK"AK#K# ALLALSASSATS0AT T AT^?"A_"_"A``A`cpd|vri|d<|d}||vrg||<|||dS)Nf2pymultilinesr*)r context_namemlr$s r)rr sTu$$"$ A1,lO2 Fr(cd}d}tjd|tjrd}nItjd|tjrd}n&|}t t |}|stddS|}t| D]}t||||<|dvr|d}|d}| d }|d kr)|d|}||d zd}||||fS) Nzdouble\s*complexdouble complexzdouble\s*precisionzdouble precisionz>cracktypespec0: no kind/char_selector pattern found for line. )rr7logicalr5 characterrhr9rrrr3) rrrrr selectpatternrWr2r"rurvrkr)r4rrrrar$r}rs r)rrsSH D x#Xrt44,# '24 8 8,%>>##))++   ^B// 0 0B  M O O O A !&&((^^&&!%%!QQQV9 wZ  AAvv"1"v||~~ AZ XtR ''r(z)\s*(?P\b\w+\b)\s*(?P.*)\s*\ZzB\s*(\(\s*(kind\s*=)?\s*(?P.*)\s*\)|\*\s*(?P.*?))\s*\Zz2\s*(\((?P.*)\)|\*\s*(?P.*))\s*\Zz\s*(kind\s*=\s*(?P.*?)\s*(@,@\s*len\s*=\s*(?P.*)|)|(len\s*=\s*|)(?P.*?)\s*(@,@\s*(kind\s*=\s*|)(?P.*)|(f2py_len\s*=\s*(?P.*))|))\s*\Zz\s*(@\(@\s*(?!/)\s*(?P.*?)\s*@\)@\s*\*\s*(?P.*?)|(\*\s*(?P.*?)|)\s*(@\(@\s*(?!/)\s*(?P.*?)\s*@\)@|))\s*(=\s*(?P.*?)|(@\(@|)/\s*(?P.*?)\s*/(@\)@|)|)\s*\Zc(|}t|dkr|S|d}tdt|dz D]4}||dkr||dzdvs ||dz dvr)|||z}5||dz}|S)Nrrrz ()[]{}=+-/* r )rrXr)exprexpr2rs r) removespacesr;s ::<|d'kr8d|vs|dsi|d<d$|dvr |dd$=|d$|dd&<|d$=d(|vrGd)|vr8|d)|d(ks&td*|d|d)d|d(dn |d(|d)<d$|vr^d+|vrZ|d$d,kr|d+|d$<|d+=n?|d+d-z|d$z|d+<|d$=t-d.|d|d/|d|d0|d+d1 d+|vr|d2|d+z}d|vs|ds|g|d<n|d ||dD]:}|dd3d4kr*||kr$|dd5=t-d|d6|d7|dn;n(td8|| d!zzt)|D] }||s||=|t"t$d |<d9t"t$vr+t"t$d9 ||}|S):Nc6g|]}|Sr'rrs r)rxzupdatevars..us MMM!AGGIIMMMr(r&z(?P[a-zA-Z]+)rc6g|]}|Sr'rrs r)rxzupdatevars..s E E E!'')) E E Er(c6g|]}|Sr'rrs r)rxzupdatevars..s ooo17799ooor(rriz@ @rz;updatevars: no name pattern found for entity=%s. Skipping. rqr1r4z+updatevars: attempt to change the type of "rrz ". Ignoring. rnz0updatevars: attempt to change the kindselector "rroz updatevars:z*: attempt to change empty charselector to rz0updatevars: attempt to change the charselector "rqz/updatevars: attempt to change the typename of "rmrr6r4r)rXarrayinit2rXrr7r r5rrr#rpz6updatevars: attempt to change the init expression of "r"r r'z updatevars: "z" is mapped to "r7z)" dimension(%s) rr z: attempt to change rz?updatevars: could not crack entity declaration "%s". Ignoring. r)rr(r)rrrrrrXr*rrrrr2rrrr>rrrurvrorlenarraypatternrWr"rk)r4rrm entitydeclrrrrqrrr,rselel1re1enamernot_has_typespecr}rad1lkdmdm1s r)rros, I'4Xx'H'H$J H MM~h'?'?'E'Ee'L'LMMM  J. / /  A  A #GGG$$**,,#a&&'' N HHQKKKK E E^J77==eDD E E EB C 33oon\/RSBTBT5U5U]`&a&a&a&g&ghm&n&nooo 3 3B 3 2::eS11222 3~~   a   NRVWXRYRYZ \ \ \ 1776??++ J|,V4 4 4|,V4U;@@BBE)6  9$,j!! 98uZ/@#@#@EE5,,,hhh8999U**(, *(=(=n%% Ljoo//00LLAE.111:a=ER`LabcLd;d;dAAuuueN&;A&>&>&> 1 !OPPPP489Z]3K3Kn-a00U**z*#3,6E.))G$uujjj23333 Ljoo//00LLAE.111:a=ER`LabcLd;d;dAAuuueN&;A&>&>&> 1 !OPPPP489Z]3K3Kn-a00&&$,j!! 95#4#@#@EE5,,,hhh8999&&$(Ih$7$7j!! 4!44Aj 111j)00333 $ ( 3 3E* $(Ij$9$9E. !$(Ij$9$9E. ! (E*  $ ( 3 3E*  %))J//52 6 61 <@XY_@`;`;`*\":::8: <(5 | $[ 1 8 8 ; ; ; 777  < / &&~aggg6F6F'G'GHHB: /\\^^2))B"s(|/!#BH2rCxLbggii""A!u( 0A 7 71qEEB;;#LLL*%77~AV746E.157Yn-c2uII![00*%77~AV746E.1 E.$999 %n 5e <57Yn-c2uIR<<e||U3Z2f:-E-E!EE5:::r&zzz!;<<<<&(Zc B;;7b==%yB$&wK5 wKK&(kC&7"U)&C7 uI$HHaaa555"W+++!GHHHb==(2g;6B!..uZ7H.-/Dj))j)00444#(#4&&C"2A2w+55#))$)*$5b$9 '+055###rrr);!<!<!< %ZAGGG,,,.///ejjll##  A8 !H27 < (/ L1 1 1 | $Z 0 7 7 > > > r(crd}d}d}|r|dvrt|}|s!tdt|zdS|}|d|d<|d=t |D] }||s||=t |D]\}}t|||<n|dkrVt|}|s!tdt|zdS|}|d|d<|d=|drtt|d}|}d D],}||d zr||d z||<||||<||d z=-|d  |d |d <|d=t |D] }||s||=t |D]\}}t|||<n|d kr[tjd |tj }|r|d}nBtdt||zzntdt|z|||fS)Nr%z4cracktypespec: no kindselector pattern found for %s kind2rrz4cracktypespec: no charselector pattern found for %s charlenlenkind)rXkindr$f2py_lenrhz\s*\(\s*(?P\w+)\s*\)rqz'cracktypespec: no typename found in %s z'cracktypespec: no selector used for %s )rnrr2rr"rurvitemsrrrolenkindpatternr(rrr) r4rrrrqr}rr7r1s r)rr s;JJH3& @ @ @%++H55J KtT\~~^```#--//J(1JsO7#*//++,, & &!!}&"1 Z--//00 . .1 *1 1  .  $ $%++H55J KtT\~~^```#--//J(3JsO9%)$ A(..":i#899;;!++--)**BrCx(8&-b3h&7 %,R[JrNS)):&2-4Z-@Jz*9%*//++,, & &!!}&"1 Z--//00 . .1 *1 1  .   x =xNNH 5#>>&11Bh12245555 >(^^% & & & z8 ++r(c|si}|s|Sd|vr|g|d<|S|r|d|||dvr|S|dkr&d|dvr|d|n|dkr&d|dvr|d|ns|dkr&d|dvr|d|nG|dkr&d|dvr|d|n|d||S)NrmrJ automaticr r r)rzrr|s r)rwrwEsb    6Z  & Z%%% tJ  xKtJ/??? Z%%%%   j1A!A!A Z%%%%    D, , ,   # #D ) ) )    4 + + +   # #D ) ) ) Z%%% Kr(c|si}|s|Sd|vr||d<|St|D]}|s ||dvr|||d|< |S)Nrnrurvrzselr|r}s r)rxrx`s   T!!"^ #((**  --  -AT.111&)!fD  # Kr(c|si}|s|Sd|vr||d<|St|D]}|s ||dvr|||d|< |S)Nror?r@s r)ryryns   T!!"^ #((**  --  -AT.111&)!fD  # Kr(unknowncd|vr|dS|S)Nrqr')r2rCs r) getblocknamerE}s V} Nr(cRd|dd|ddadS#t$rYdSwxYw)NzIn: rrrqr)r r)r2s r) setmesstextrGsJ ,1&MMM5===I      s  &&czi}d|vrt|d}d|vr||d|S)N parent_blockr) get_usedictupdate)r2usedicts r)rJrJsHGeN344 ~~uU|$$$ Nr(c 6|i}t|}|s|St|D]\}}|}|tvr*t d|d|ddLt|}t|}|sk|rtd|zt|D]>\}}||vr0t dt|dt|d|||<?|S)Nzget_useparameters: no module z info used by rqrz,get_useparameters: mapping for %s not impl. z(get_useparameters: overriding parameter z with value from module ) rJrur:rrr2rrror) r2 param_maprLusenamemappingmvarsrr}rs r)get_useparametersrRsV %  G  11--// - ' ' GWWeii////1 2 2 2 g&&&    Q CwO P P P((  DAqI~~59!WWWWd7mmmmMNNNIaLL   r(cts|St|trfd|D}|St|t d|dddt |_d|vr[|d}t|D]1}||}d|vr#|d}d|vr|d}|vr ||d<2fd |d D} | |d <|S) Nc:g|]}t|dzSr)tabrN postcrack2)rvgrNrVs r)rxzpostcrack2..s<!tyAAAr(Block: rqrrr1rnr8c:g|]}t|dzSrUrW)rvbrNrVs r)rxzpostcrack2..s<(((1#* BBB(((r(r0)rrrurGr2rRrv) r2rVrNretr1rvarr8valnew_bodys `` r)rXrXsW  %  sssE&MMM 2A666%e,, 5V}diikk"" 6 6Aq'C$$>*T>>v,Ci'''0~V (((((v(((HE&M Lr(ct|trjg}g}|D]^}t|t||dz}d|vr d|dvr||I||_||zSt|t|t s#d|vrt dt|zd|vr(|ddkst|d|dd d t|}t|}t||d <t|d |d <d |vr|d r|d }t||||d<g}d|vrF|d}t|D]}d|vr||ni}d} d|vr|d} d|vr|drg} d|vr|d} tj|d } | r| dz} nd} | |vr d} d| | fz|vr| dz} d| | fz|vd| | fz} dgi| dzd}|dD]}|| vrg}d}|dD]}|dz}|ddkrld} |dD]6}| dz} d|vr+|d|krtj|}|d| =n7|r)|ds |d|=| | |=n|d||| vr&t#| |s| ||d |<|d s|dr3| |d<d|gi| |dd}i|| <t$||r||d<|S)zi TODO: function return values determine expression types if in argument list rrVrqrr2z0postcrack: Expected block dictionary instead of rrZrrr1sortvarsr6r0rr r4r5__user__routinesunknown__user__routinesrz%s_%ir_user_interface)r2r0r1rqr r)r2r0r1rqr5)rrurG postcrackr*rrrr2 analyzeargs analyzecommon analyzevars sortvarnames analyzebodyrvrr[ isexternalr)r2r6rVgreturetrY userisdefineduseblockr}rqr5rQmnamerrredefrr\bbmblocks r)rgrgst%   A NNN!t,,,A{{zQvY66 A Ad{ eT " "$we';';JE #$$ $ uV}0CCC333f 6:::   E % E&&E&M$U6]33E* 5=V}t555E&MM ~~<hmmoo&& ( (AQ$$Q''' ( D V}ek 2 5 |,J %-((  .--EE-E M ! !AUAJ&-77EUAJ&-77uaj(E)20A)ACC {# 4 4AJv""AAAz[00"#F)&&B !AA%||6 a'+y}}$%fIaL %"#$V95$)&M!$4 *:+;+;A+>+> ?!E&!((....::jq&:&::+08If%a( V  ' & 1 '",E, .9$&U;EWYYF HUO   v & & & e Lr(cPg}g}t|D]E}d||vr$||dr||0||Ft|}d}|r|d}d}|ddD]}|||dvrd}n|rH|dd|gz}|dz}||kr.t dd|zdz||z}n3n0|||dd}t|}d}||S)NrtrrzTsortvarnames: failed to compute dependencies because of cyclic dependencies between , r)rurvr*rXror)r1indepdeprrrr^ws r)rkrk5s| E C $))++   tAw  478#4  JJqMMMM LLOOOO CA A  F QRR  ADGH%%%&  abb'QC-CAA1uu;))C..)+/0111   LLOOOabb'CCAA) * Lr(c Bt|s|Sg}t|dD]}g}|d|D]}tjd|tj}|rWg}|dr?dt|ddD}t|d }||dvrwd|d|vr>|d|d d d |zn[d d |zg|d|d<n2|r%dd d |zgi|d|<n i|d|<||vr| |n|}td |d |d | |||d|<d|vr||d<n|d|z|d<|S)Nrz2\A\s*\b(?P.*?)\b\s*(\((?P.*?)\)|)\s*\Zdimsc6g|]}|Sr'rrs r)rxz!analyzecommon..cs6SSS !GGIISSSr(r&rqr1rmr&r'z:analyzecommon: failed to extract "[()]" from "z " in common /z/. commonvars) hascommonrurvrrrrr(r)rrrr*rro)r2r~r}comvarsrrr|rs r)ririWs U   J %/&&(( ) )%%x#  AEq"$PPA p776??SSS%3AGGFOO%D%D%J%J5%Q%QSSSDqwwv446677f %%!U6]1%555f a(4;;+sxx~~>@@@@,sxx~~>8@f a(44.&CHHTNN)K(L,Nf a((,.f a(J&&%%a(((ijijijlmlmlmnppp NN1    $h5  (l#L1J>l Lr(c0t|d|dD}g}|dD]V}||d<|ddvr| |d|vr|d}|d|vr t|d|dtvrst r|dt vrt |d d |d <n|}t|||d z}|ddvr"|ds|dsd|vr|d dddkrt||ddkr|dt|d<||X|S)Nc6i|]\}}d|vs d|dv||S)rmr r')rvkeyvalues r) zanalyzebody..sB C U " "heJ6G&G&G U&G&G&Gr(r1r0rIr2rrqr6z T as_interfacesaved_interfacerrbrrrrr pythonmoduler) rGr:rvr#r*r$crack2fortrangenrgrrrr)r2r6rV maybe_privater0r\as_s r)rlrls---//M D 6]!. W:3 3 3AfIT$9$9iyM..0000  6+++yI%% QvYi77#3>$6$6$6A C a#* - - - W:< < <y =!"!7!7 =!** W:  c2 & &. 8 8   q ! ! ! !zX%%+,V9 ai( KKNNNN Kr(ct|t}i}d|vr|d3d}tdkr%tdt |dznvt |dD]N}|d|ddvr|d|||<7|d|d||<O||fS)Nrrz6buildimplicitrules: no implicit rules for routine %s. rqr4)rJr=)rGdefaultimplicitrulesrr2rrurvr)r2 implicitrules attrrulesr}s r)buildimplicitrulesrs(MIU   $ M{{MPTUZ[aUbPcPcceee% +002233 D D$Q'++J77?VVV',Z'8';M!$$#(#4Q#7 #CIaLL ) ##r(ct|||}t|ttfvr|St d|z)z2 Like `eval` but returns only integers and floats zr=%r)rrhr8r:r)rrYrrs r)myevalrs= Q1 A Aww3, Vq\ " ""r(z \A\b\w+\b\Zc tt|ii}d|dfS#t$rYnwxYwt|rdd|fSt |}|D]b}t ||krt jd|zdz|r3t jd|zdzt j }||}|r ||}|rG| dd dd | d }||}|Gt|ii} ||}|rG| dd dd | d }||}|Gt|ii| z } ||}|rG| dd d d | d }||}|Gt|ii}||}|rG| dd d d | d }||}|Gt|ii} | d z| z|kr| d z| z| kr| | |fcSn#t$rYnwxYwnddS)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') rNrz\w\s*\([^)]*\b\b(?P.*?)\b\b(?P.*)rr7r8rg?g?)NNN) r8rrgetlincoef_re_1rrXrsearchrrr) rxsetrlen_err`rraeer\r,c2s r) getlincoefrs?* q"b!! " "!Tz      Q!Qw FFE '' q66E>>  9&*U2A 6 6  z.25GGNN JJqMM   ZZ]](****AAArxx/@/@/@BBBB(2r2&&ZZ]](****AAArxx/@/@/@BBBB(2r2&&*ZZ]](****CCC'1B1B1BDBBB(2r2&&ZZ]](****CCC'1B1B1BDBBB(BB''GaK1$$S1):):a7NNN     E? @  s"% 22GJ55 KKz\b[a-z][\w$]*\bc ||vr||dg}d||vrat||sLt||dD]%}||vr||vr||kr||&|ddD]E}||gpt |||D]}||vr||Fn!t dt|zg}|||<|S)Nrtrpz,_get_depend_dict: no dependence info for %s )risstring word_patternfindallr*_get_depend_dictr2r)rqr1depswordswordrzs r)rr s1 t||T x,, $t*  Xd4j%9%9 $,,T$Z_== ' 'u$$$$,,LL&&&!!!H $ $DXXdB'':'dD99 $ $E>>LLOOO $ $ ?4::NOOODJ Lr(cxt|}i}|D]}t||||Sr,)rurvr)r1rz depend_dictrs r)_calc_depend_dictr- sF   EK //D+.... r(c~tg}tD]"}|s|||=#rWtD]3\}}fd|D}|s|||=.||<4Wfd|DS)z cg|]}|v| Sr'r')rvrrs r)rxz$get_sorted_names..@ s#:::Qk)9)9q)9)9)9r(cg|]}|v| Sr'r')rvrqr1s r)rxz$get_sorted_names..F s 3 3 3TddllDlllr()rrurvr*r:)r1rzrqlstnew_lstrs` @r)get_sorted_namesr5 s$D))K E[%%''((""4  " LL   D! ,k//1122 , ,ID#::::#:::G , T"""%%$+ D!! , 4 3 3 3U 3 3 33r(c|ddvr |dd}t|rdSt|rdSd|zdzS) Nr'"rr zkind(r8)rr real8pattern)rcs r) _kind_funcrI sd ayE"6""q   F # #q V c !!r(cfd|z}|dkrdS|dkrdS|dkrdS|dkrd S|dd zkrd Sd S) Nrrir3lrlrr r')rrs r)_selected_int_kind_funcrT sZ aAF{{qG||qG||qG||qAH}}r 2r(c|dkrdS|dkrdStj}|dr |dkrdSn|dkrdS|dkrdSd S) Nrrr)aarch64arm64powerppcriscvs390xsparc!rr )platformmachinerr)prradixrs r)_selected_real_kind_funcrd s 1uuq2vvq  &&((GYZZ 772  r662 "WW2 2r(c j tj|}tj|}dtfdtfdtffD]\}}||vr|||<g}t |D]1}d||vr%d||dvr||2t jdt j}t jdt j} t jdt j} |D]}d ||vr{||d } t||r#| } d D] } | j | } | d | } | d | } d } d||vr]d||dvrMt| }| d||ddzd} t| |k} | s| | s| d}t|dkr[d|dd |d d} t#||rt%| }t&| D]}t%| || dd|||<d|} n(t/||rt1d| dt&| rd} nt4| rd} t7| ||||<n?#t8$r2}| ||<t1d|dt;| dYd}~nd}~wwxYwt=||r3t?||t@rtC||||<| }||kr ||||<tE||t1dt;|z|S)Nr8selected_int_kindselected_real_kindrmrz \bkind\s*\(\s*(?P.*)\s*\)z-\bselected_int_kind\s*\(\s*(?P.*)\s*\)z4\bselected_(int|real)_kind\s*\(\s*(?P.*)\s*\)rp))z.false.False)z.true.Truez kind("\1")zselected_int_kind(\1)Frnrr rr r$rzAget_parameters[TODO]: implement evaluation of complex expression rrrzget_parameters: got "z" on z2get_parameters:parameter %s does not have value?! )#rrrrrr*rrr islogicalrrsubrXrr)risdoublerurrrr iscomplexr2rrrrrrrr8rr)r1 global_paramsrg_paramsrqfunc param_namesrkind_reselected_int_kind_reselected_kind_rerrepl is_replaced orig_v_lenv_rrrnls r)rrw s Y} % %Fy''H ++-DE,.FGK"" d x  !HTNK d # #"" a [DGJ4G%G%G   q ! ! !j>Q Aa!! )GGII))D " 4(AA M1--A$(()A1EEA  Ka((T!W^444!$QJ #Q(?(G"GLLA#&a&&:"5K Q'--a00QB2ww{{GGBssG,,2244<|+d?}0|0$tBj%j&7}0|0B| d;<|g|-zB| d<d!B| vrd=|d>|+d@|gB| d!<n{dA}/dB| vr gB| d<dBB| dvr!B| ddB|(| |)d=|d>|+d@|B| dg}1dC|1vsdD|1vs|1|/rdDndC|1r |1B| d<@@3D]\} \},}-B| dg}'B| dgD]n}2|24drWd5|2}2|'6|2dEddFo|'r%tt|'B| d<||'vr|(| ntoB|rdB|vrd/B|dvr4tqB|dd/| }3|3B|dd/<nRdB|dvrBtqB|dd| }3B|dd=|3B|dd/<|)r |)B|d!<|(r%tt|(B|d<d;B|vrdB|vr gB|d<dCB|dvr1dDB|dvr!B|ddCdB|vrgB|d<t| 3D]=\} } | B|d;r!B|d| >B|ds B|d=tsB|r%tuB|d;| B|d;<"tB D]}||dkrd#B|vrB|d#|d#<|ddkrdG|vr/|dGBvr%twB|B|dGB|<dH|vr|dH}4|4dId}5|4|5k }6|5dJd}4|4|5k }7txd |4} | rt{| dK| d3\}8}9}}:t}|8|9\};}<}=|8B|d< |dGr|8B|dGd<n#t.$rYnwxYw|;r;d|;vr, t-|;di| |;d<n#t.$rYnwxYw|;B|d<|ntj|d }>tB D]@}t[t~tB|r|>|AdP|vr|>6t|dP t|dP D],}|dP|D]}||>vr|>|-|ddkr;dG|vr|>|dGn|>|d|ddQvr'|d}?|?BvrdB|?vrB|?d|d<|ddRkr4|>6tB tB D] }||>vrB|= BS)SNr1r2rrqr rmc3&K|] }|dV dS)rqNr')rvr\s r) zanalyzevars.. s&$F$F1QvY$F$F$F$F$F$Fr(r0rr6z[A-Za-z][\w$]*z.*\b%s\brr4r undefinedz"analyzevars: typespec of variable z is not defined in routine z. rorXrnr8)NNNNNr'rrr rr rtrrsrrrc6g|]}|Sr'rrs r)rxzanalyzevars..O s UUUAaggiiUUUr(r&rz\n\nz z\n rc6g|]}|Sr'rrs r)rxzanalyzevars..` s '_'_'_a '_'_'_r(c6g|]}|Sr'rrs r)rxzanalyzevars..g s TTTAaggiiTTTr(c6g|]}|Sr'rrs r)rxzanalyzevars..m s #X#X#X!AGGII#X#X#Xr(rrrrrrz@:@r31)languagec||z |z Sr,r')r*r,r\s r)solve_vzanalyzevars..solve_v s01A{(:r(c38K|]}|jv |jVdSr,)r)rvr*r1s r)rzanalyzevars.. s9-7-7/0'(v~~%&F'5~~~-7-7r(c|dggdD]'}||vr!||||(dS)Nr)radd)rrv1coeffs_and_deps compute_depss r)rz!analyzevars..compute_deps s`*9*=*=a$*L*LQ*O!?!?B')~~(, (4 R(>(>(>!?!?r(rpFzshape(rwr8z) == Tinrrrr'rrpure recursiver9rqz'analyzevars: prefix (%s) were not used )rrrrr~r)rrrh)ArGrrr rwrr*KeyErrorrurvrrRrrrrrrrr2rrrrreverserr(r)rr{rrXrrExprparsetostringLanguager as_symbolr linear_solvesymbolsrK RuntimeErrorl_or isintent_inisintent_inoutisintent_inplaceisarray enumerater:rrextendrrisscalarrr~rOrrisintent_callback isintent_aux)Cr2rrgenrr}svarsr6r,r dep_matches name_matchrrln0rdimension_exprsrdimr rtrsrrrtmpr$starrr`rr0d2dsizesolver_and_depsr*r\r all_symbolsrv_depsn_depsn_checks n_is_inputrsolverrall_deps is_requiredr#v_attraarprpr1ispureisrecr4rrrrrq neededvarsrqrrr1sC @@@r)rjrj s1%88M9 9U6] # #D W~##f T(A(A U6] U6] H vr* * *-#J/CYY$F$Ff $F$F$F!F!FF B B.BBACxx"-dhhq"ooq"A"AQB E =D   GG LLOOOO    D  $))++   D== LLOOO D"3E":": ; ;FK-..4J $))++  KK JqMM  K!''))AEEGG#$A KA K K K!#K1,=rt!D!D!J A K  K JBJB Q44 (()) ) )!$q'9QqT?;;DG T!W $ $a((Z47:;N-N-N 1A$**,,C!-"4"9"9";";<<BB ??}S/A!/D /S/S$DG++)6s);A)>DGAJJ*__%23%7%:BB*5d1gq*A*AQB%-''GQv0111 T!W $ $Q///GN+E2DB//00AA D12Q'. T!W $ $a000GN+F3DB//00AA D23Q'/ a 7:&D LLNNN"$DGJ /K ,C+ !+ !RaR5K''QRR5;;==!B$/CCrrUh&&ekkmmQrT2FFrrUh&&ekkmmQrT2FFrrUg%%qrrU[[]]AbD1EErrUf__abbEKKMM1R40DD)$q'155DG"tAw..,.Q)UU1G1G1M1Me1T1TUUU::iiR00d1gh&777 GH-44S999!F <<&99D<<55DT!W,,+/&QQ..t444D%tAw..,.Q)&'_'_>&;Q;Q;W;WX];^;^'_'_'_``88DGH$555 GH-44Q777!F$d1g--+-Q(TT1F1F1L1LU1S1STTT77DGG$444 GG,33A666 E> 3{$q'11')Q $"#X#X~c7J7J7P7PQV7W7W#X#X#XYY<3<3A"#s((33DF{{q NN#..!z*>*BEW*WY[Y]^^ JJqMM. ! 1 1 #F1I!/121A1A!BA $ 1 A . Dyy"V+As3399%@@2ww!||r !U2ww!||1 !2a5\2ww!||!$X]%8"!=!=B "R! !NNH4E4GNHH+-!&vKKA ( 21 5 5A$~~a00K!G+0+=+=a+@+@DAq56!%;%;%;%;36aiikk2B2BK$/$6$6qyy{{$C$C$C$C'3!G!G!G /3G25emmoo2F2FKKKKKK!G*--7-7-7-74?-7-7-7*7*76=d6ll5J 2.=*GK(//2222 $q' ! !foo!uV}:L:L !W[[2..FH0k>.0004Q99JtAwW >%d1gk&:;;K1K1DAq&5&9&9!&<&-@(5(B(B/3Q 67C$JQ 1#*$q'#9#9)B(A(Aa(A(Aa(A(A8CDGG$4 /3 #+47#:#:8:DGH$5#'tAwx/@#@#@$(GH$5$<$%>F&*1gkk*b&A&AGG#%==#:#:!G)+)<)!T!W,,d1gn555!-d1gn.Ec.J.4"6"67=Q/44$q'."999!-d1gn.Ee.L.4"6"6 GN3E:7=Q/4 ,#+Q  6$(V$5$5Q! $q'>>a((&(Q #$q'*"555$q'*"555Q #**:666tAw&&$&Q! !2!2!4!45544DAqqa4Q)00333Awx(*Q)Q   B+DGCL&AAQ $))++  +`+` f  a  $Qf W~++u$$xD)@)@(a$uX2GHHDGu$$xB**VR00C"$)mF["55B!#s]E$Q--b11A`:HGGFOOQWWW-=-=;?;?7(D%;H$h<0<08 J.6Q +!$XMDLU8_ 5j A(!!! D!%A%33!)9=(26(:B:H:HJv$6$6'0!)!)!)$(D!)6@DGN3%A6@DGN3#;2:DGJ/!C&1$q'6&B&BDG H&1$q';&G&GDGFeT\oI^I^^``` >V V V 5 5=53F#FGGJJ5=11Jdiikk"" % %A4t%|44T!W== %!!!$$$ e     d5>#6#6#8#899 : : :%.--//00 - -w*--A **"))!,,,- >Z ' '5  !!%/2222!!%-000 >7 7 7=Dt||DJ 6 6"&t*X"6h >V # #   d499;;// 0 0 0diikk""  A ""G KsD  D-,D-H  4IIO22 O?>O?Q!! Q.-Q.5A&i j &#j j F=AGG AG$G#AG$G.AH H AHHAHz\A[a-z]+[\w$]*\Zc(|}t| }|rt|\}}t||d|}d}|D]8} | } | t jt jzvrd} || z}9|ddkr|dz}n|dz}|}||dvs ||dvr|dz}||dv||dv||vrAd } |t| z|vr| d z} |t| z|v|t| z}|r ||d|<ns||dvr-||dvr|d||d|<n i|d|<d |vr8||d |d zvr%t|d|d |d|<|S) Nr1e_rr r_er6rrr4r5r) analyzeargs_re_1rrrrrcascii_lowercasedigitsrrw) r,r2r6orig_a a_is_exprrratnarr}s r) expr2namer5n s F$**1---I#5e#<#< y q%- ? ?   A A.>>>aBB b6S==cBBdB 5=  Av$6$6CA5=  Av$6$6Dyy #a&&jD  AA#a&&jD  AJ If a E&M ! !v&&#(=#8f a  #%f a %  FeK.@5CV.V$V$V*5=+;ZHHE&M!  Hr(cHt|t|\}}d|vrg|d<g}|dD](}t|||}||)||d<d|vrGt |dD]\}}|D]}||dvr i|d|< |dD]F}|d|vr:d|vrg|d<|d|dvr!|d|dGd|vr!|d|dvri|d|d<|S)Nr6rr1r0rqr4r)rGrr5r*rur:)r2rrr6r,r}args1r\s r)rhrh s)%00M1 Uf D 6] a % % AE&M%U7^113344 * *HAu * *E&M))')E&M!$ *6]55 V9  %''%'k"yk 222k"))!F)4445U8_E&MAA)+f eHo& Lr(z\A\(.+?,.+?\)\Zz\A[+-]?\d+(_(?P\w+)|)\Zz*\A[+-]?[\d.]+[-\d+de.]*(_(?P\w+)|)\Zz \A\(.*\)\Zz\A(?P\w+)\s*\(.*?\)\s*\Zct|trddiSt|trddiSt|trddiSt|tr|St t |)Nr4r7r5r)rr8r:rrAssertionErrorr)rs r)_ensure_exprdictr: s!S'I&&!U$F##!W'I&&!T a ! !!r(c||vrt||S|}t|rddiSt|}|rNd|vr4|drtdt|zddiSt|}|rNd|vr4|drtdt|zddiSdD]V}dt||  d |zd zDD]}||vrt||ccS Wi}t|rt|d d ||}nt|}|ri|d}t|d||}|rd |vr|d =|s%|d|vrt||dS|ddvrdddidS|stdt|z|S)Nr4rrqz:determineexprtype: selected kind types not supported (%s) r7r5)+rrrc6g|]}|Sr'rrs r)rxz%determineexprtype.. s ZZZ!''))ZZZr(r!rhrr rmrrrr)r4roz>determineexprtype: could not determine expressions (%s) type. )r:rdetermineexprtype_re_1rdetermineexprtype_re_2r"rr2rdetermineexprtype_re_3r(r)determineexprtype_re_4rdetermineexprtype_re_5)rr1rulesroprrrns r)rr s t||T +++ ::<>+E"Q%L999 Aw%'#sDDD ^ MQUVZQ[Q[ \ ^ ^ ^ Hr(rFclt|d}t|trO|D]J}|r1|ddvr'|dtvrtr|dtvr5|t |||z}K|Sd}d}d}|d}|dkrdSg} d|vr|d}d|vrt|d} |dD]=} t | || } t| | s| | >|dd ks| rd d | z}d} d |vrIt|d  D]!} | |tz| d |d | } "| dgdd}|d krd|vr| d|r'| |tzdd |d|} d}d|vrt|d|tz}d}d|vrt|d|tz}|dkrd}d}d|vr0d|dz}|d| vr| |dt |d|tz|}t!||d| |tz|} d}d|vr |s d|dz}d|vr\d}t|dD]-\} }||tzd| dd |d}.||z}|dkr|dkrd}|||d |||d || || |||d |d |}|S)!Nr r2rrqrrr6r1rz(%s)r'rrr callbackintent(z) rrrrz result (%s)r0rz! in %srzentry r7r8rrzend )rGrrur#r$rr5rr*rrvrrr use2fortrancommon2fortran vars2fortranr:)r2rVrr]rYrrqr6 blocktypeargslr1r,rr} intent_lstrrrr0mess entry_stmtsrs r)rr sB C% L LA QwZ#===V9 ))6)!;!;(ClKKKKCC F D DgIIr E V} V}v  A!UE**A$T!W--  Q >Z ' '5 'CHHUOO+DU""e./446677 R RA  #--E:L4Ma4P4P R  8R((+JJ:#;#;*%%%8,,cGmmmHHZ0000$$8 C ~~%,g 66 F5hw?? """ F5%/1 ?% ' ' LLx ) ) ) E&M3=| T T TD  uV}eS7] O O OD D |5=(% w--//00 I IDAq([#---CHHQKKKKIKKk!L  T^%;%; VVYYYddFFFDD:J:JCCQUQUW]W]_c_cehehehjsjsjsuyuy {C Jr(c d}t|D]P}|dkr#||dd||}+||d|dd||}Q|S)Nr rzcommon r'zcommon /z/ )rurvr)rrVr]r}s r)rJrJ9 s C &++-- LL ==%(S###sxxq /B/B/BCCC*-#sssAAAsxxq 7J7J7JKCC Jr(c2d}t|D]}||d|d}||ikr|r|ddkr |dd}1d||vr||drd|z}d||vr||drtd}t||dD]D}|||d|kr |||}d}%|||d ||d|}d}E|r|ddkr |dd}|S) Nr zuse r'r rz%s only:rrz=>r?)rrVr]rrr}s r)rIrIC sa C #((**  "sCCC+ q6R<< s2w#~~#2#h  SV  Av $C CF??s1ve}?A#a&-,,..//  Au a(((&)c11aa0CAA*-#qq!!!SVE]15E5EFCAA  3r7c>>crc(C Jr(c|d}g}|D]J} td|z}||r||;#t$rYGwxYw|S)Nr z isintent_%s)globalsr*r)r^rr]r rfs r)true_intent_listrU[ s h-C C## # -&01Aqvv # 6"""     D  JsA AAc  t|d}g}|D]!}||dvr||"d|vr;|dD]2}||vr||vr|| td|z3d|vr||d|s=t |D]}||vr|||D]}d||vrE||dD]6}||vr0d||vr&|||dvrtd|d|d 7d |vr||d vrt ||r ||d |}||d |}t||r ||d |}||vr d||vrd} |dD]} || dkr| ddkrd} n| r||vr#t|td|z||dkr#|ddks| dr6d||vrRd||vrd||dvr||vr ||d |}it||td|z||d} | dkrd||vr| d||dd} i} d||vr||d} nd||vr||d} d | vr'| d d!vr| d"| d d} nJ| d | d } n. s,...! ,,,,,r(z intent(in)z intent(out)rwr'rz dimension(r rHrszcheck(zdepend(rp)rr z :: )rGr*ror rurvr isoptionalshowr2rrrrUrr5imagr)r2r1r6rVrr]noutr,r$rr\vardefrrrrrs r)rKrKi s  C D  f   KKNNNu|$ T TADyyD==KKNNNNQRRTTTTU E*%&&& diikk""  A}} A g,g, tAw  !WX& n n99T!W!4!4d1gh>O9O9OGghghghjkjkjklnnn %  A{);$;$; a)) @363QQ?'*sCCC3C$q'"" 8+.3QQ7DyyZtAw66D6]  & >>ajJ&>&>DE  D== JJJ FJ K K K  f  W~++uyy/B/B+  T!W $ $T!W$$tAwz7J)J)J99/2sCCC;C aMMM DqH I I I a$ V   d1g 5 5!'a)<)<)<=F T!W $ $Aw~.HH tAw & &Aw~.H (??} **&,ffhsmmm<$*FFHSMM:  (.@X%%.4ffhv6F6F6FGFF"f-FF8##*0&&(62B2B2BC  a ..tAwz2...D +  4 4$9N9N  M*** %+VVSXXd^^^< $q' ! !388DGK$89999;FA tAw  "47++C G-3VQQQ FA d1g  (.388DGG>Q AAwz"&CCCQAA%&VVVQVVV4AA D&,ffaaa3FF#)6611-F#ssFF+ Js"S S Sc|tddt|ttddgat t d}tddt D]+}td|jddt||},tddt|}t|zS)NzReading fortran codes... rzPost-processing... z"Applying post-processing hooks... z rzPost-processing (stage 2)... ) r2rr<rrgrpost_processing_hooks__name__traverserX)filespostlisthooks r) crackfortranrd s (!,,,E9%%% "A&&&K1&&H 11555%,,&T]&&&***Hd++ ,a000(##H  !!r(cNt|dz}d}dtz}||z|zS)NrzE! -*- f90 -*- ! Note: the context of this file is case sensitive. z ! This file was auto-generated with f2py (version:%s). ! See: ! https://web.archive.org/web/20140822061353/http://cens.ioc.ee/projects/f2py2e )r f2py_version)r2pyfheaderfooters r) crack2fortranrj s? 5 ! !D (CF F C<&  r(ct|to4t|dko!t|dttfS)Nr3r)rtuplerXr8r)objs r)_is_visit_pairrn s@ sE " " /CA  /3q6C:..0r(c8t|r9|ddkr|S||||g|Ri|}|t|sJ|S|}|\}}nd|f}d}t|trLg}t|D]9\} } t | | f|g|R||gz|d|\} } | || :ndt|t rMt }|D])\} } t | | f|g|R||gz|d|\}}||||<*n|}||S||fS)aTraverse 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. """ rrIN)parentsr)rnrrur r`r*rr:)rmvisitrprr6kwargs new_resultparent result_keyr[r new_indexnew_itemrnew_key new_values r)r`r` s8c  q6^ # #JU3A$AAA&AA  !!*-- - --  CC #t %cNN , ,LE5"*E5>5#K;?#K#K3:fX3E28#K#KCI#K#K Ix$!!(+++  , C   VV ))++ 0 0JC!)3,"J:>"J"J29VH2D17"J"JBH"J"J GY"&/ 7#  0  z !!r(c b|d\}}|\}}d} |dvr#|dddksJ|dd} n+|dkr#|d ddksJ|d d} nd } d } | 8|} | D] \} } t| r | | | } !nd|d kr^|d dd} |} | D]3\} } t| rtjd | zd zd| z| } 4| '| |krt d|d|d|d| d d|| fSd S)aPreviously, 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 cvtjd|zdz||}tjd|zdz||}|S)Nz[*]\s*\brz\b\s*[\[]\s*0\s*[\]])rr)varnamers r) fix_usagez8character_backward_compatibility_hook..fix_usagen sF{W,u4guEEuw)@@'' r()rrsrr1rrprN callstatementz (? `z` )r: ischaracterrrr2)itemrprr6rr parent_key parent_valuerrr} vars_dictryr|vds r)%character_backward_compatibility_hookr\ s 'r{J JC +++r{1~''''BKN r{1~''''BKN  I $??,, : :KGR2 :%Igy99  :   BKN6*  $??,, O OKGR2 OF!G+e3S7]IOO     >>>c>>"'>>/8>>>?@ B B BYr(__main__rz-quietz-verboser3z-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form. z-skipemptyendsz--ignore-containsz-f77z-f90rz-hz-showz-mrzUnknown option %s z OSError: a Warning: You have specified module name for non Fortran 77 code that should not need one (expect if you are scanning F90 code for non module blocks but then you should use flag -skipemptyends and also be sure that the files do not contain programs without program statement). z Writing fortran code to file %s rz)r)r)r')rCr,)r N)Nr )r )NN)rr)rF)r F)__doc__r-rcrrrrrrpathlibrr ImportErrorr rauxfuncsrversionrfr rrrrrrrrrrrr!rrr rr>rrr=r%rr$r&rr#r"rr*r2 _MAXCACHErrrnr}rrrr{r~rrrrrrrrrrrrrrYrbeforethisafter fortrantypesrOrrLrM groupbegins77r groupbegins90r groupendsrJendifsrImoduleproceduresrUrNr?r@rBrCrFrGrHrArDrErQrTrXrPrRrSrKSr:r;rr-rVr<rWr(rkr~rrrrrrrrrrrrYrrrrnror;r(rrrrrwrxryrErGrJrRrXrgrkrirlrrrrrrrrrrrrrrrrjr.r5rhr>r?r@rArBr:rrrJrIrUrKr^rdrjrnr`rr*r_rafuncsrff2f3 showblocklistargvrrorrrOSErrordetailrbrgr/r'r(r)rsKKX    "                 2          ###L  !33A)62 66A)95     Ae)HQKKE ,,,111 3RT::A "*12488?"*12488?"*12488>:99888333>4'+!bDbDbDbDJD rzr<t<>FFGNOGH r=->>FFGNO7 RZr9i66>>?DE  rzy&&$77??@GH )#r+-=tDDbdLL"*88"$@@AKL2:o1889;??@KL"*88"$@@AKL"*88"$@@AKL"*88"$@@AKL 44bd<<=EF 66>>?HI2:::BDBBCNO ?.QQRTRVXXYab 2:@@"$HHITUbj00"$889?@ bj00"$889?@ rz22BD::;BC 66>>?HI 44bd<<=EF RZ..667<= "*66>>?IJ 44bd<<=EF %"*_8M&MOQOSVXVZOZ[[]oo2:924AABMN(A24HH\%\%\%\%~   $    &   > KRTSS %&(d,,"*rtvtxyy"**+-411!bj@"$HH ;== rzHJJ $$A24HH       nDnDnDb   (((4bjErtLL rzI24QQ rz924AA 235499"*GIKIMNN   """JWWWt8,8,8,x6           <@]]]]@D(((V****Z$$$&####"*^RT22EEEPrz,bd33 ,444("""    &(*[[[[|((( "*W%%+    |||| 2:12488 " " " " J4$$6==#$DbdKK#12499#M2488#$ErtLL " " ")+( ( ( ( ZHHHHV0   BBBBP"""" ! ! !000 "$D?"?"?"?"D9 9 9 xBCCC z E E A B BM Xabb\11 77  qTS[[AA (]]EGG *__GEE &[[ [VXY[[[M"NN " " "MM % % %NN &[[I"NN &[[I#NMM $YYBB '\\MM $YYBB qTS[[ G)DDGG3 4 4 4 4  BKK  BMM   2Q  Q 2 2 20F00011111111 2 LLOOOO }     |E""H3dd;6G6GGKKKmH%% T+s # # q GGCLLL                XSPs6/992bb0b++b06eee