/usr/local/lib64/python3.6/site-packages/numpy/f2py/__pycache__
NameSizeModeActions
auxfuncs.cpython-36.pyc222280644editdlrm
capi_maps.cpython-36.pyc180140644editdlrm
cb_rules.cpython-36.pyc154130644editdlrm
cfuncs.cpython-36.pyc383300644editdlrm
common_rules.cpython-36.pyc48020644editdlrm
crackfortran.cpython-36.pyc772130644editdlrm
diagnose.cpython-36.pyc36850644editdlrm
f2py2e.cpython-36.pyc203300644editdlrm
f2py_testing.cpython-36.pyc13880644editdlrm
f90mod_rules.cpython-36.pyc73110644editdlrm
func2subr.cpython-36.pyc66830644editdlrm
rules.cpython-36.pyc340520644editdlrm
setup.cpython-36.pyc23360644editdlrm
use_rules.cpython-36.pyc30240644editdlrm
__init__.cpython-36.pyc26340644editdlrm
__main__.cpython-36.pyc2000644editdlrm
__version__.cpython-36.pyc3290644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/numpy/f2py/__pycache__/crackfortran.cpython-36.pyc (77213B)
3 Eg3@s dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl Te j a da dadadad"ad ad adadadagad ad adaiad adadadatgia d a!ga"d#a#ga$da%d$a&ga'ga(ga)d d Z*d%d d Z+de_,iZ-xdD]Z.ddie-e.<qWxdD]Z.ddie-e.<qW[.iZ/iZ0x(d&D]Z1e1dGe/e1<e1e0e1dG<q:WdHdIZ2dJdKZ3dLdMZ4dNdOZ5dPdQZ6ej7dRej8j9Z:ej7dSej8j;Zej7dVej8j9Z?dWdXZ@eAdfdYdZZBd(ZCd^ZDej7eCd eDeDd_fej8dEfZEej7eCd eDd`eDd`d_fej8ZFej7eCd)ej8dcfZGej7eCd*ej8dcfZHdfZIej7eCd eIeId_fej8dcfZJeIdgZKej7eCd eKeKd_fej8dcfZLdhZMej7eCd eMeMdifej8djfZNdkZOej7eCdleOeOdifej8dmfZPej7eCd+ej8dnfZQej7eCd,ej8dpfZRej7eCd-ej8dqfZSej7eCd.ej8drfZTej7eCd/ej8dsfZUej7eCd0ej8dtfZVej7eCd1ej8dufZWej7eCd2ej8dvfZXej7eCd3ej8dyfZYej7eCd4ej8dzfZZej7eCd5ej8d|fZ[ej7eCd6ej8d}fZ\ej7eCd7ej8d~fZ]ej7eCd8ej8dfZ^ej7eCd9ej8dfZ_ej7eCd:ej8dfZ`ej7eCd;ej8dfZaej7eCd<ej8dfZbej7eCd=ej8ejcBdfZdej7dejcdfZeddZfddZgej7dej8Zhd>ddZiddZjd?ddZkddZld@ddZmej7dej8Znej7dej8Zoej7dej8Zpej7dZqej7dZrej7dej8ZsddZtddZuddZvddZwddZxej7dej8Zyej7dej8Zzej7dej8Z{ej7dej8Z|ej7dej8Z}ddZ~ddZddZddZdAddZdBddZdCddZdDddZddZddZdEddÄZdFddńZdGddDŽZddɄZdd˄ZdHdd̈́ZddτZdIddфZej7dej8ZddԄZej7dՃj9ZdJdd؄Zej7dej8ZddۄZdd݄Zdd߄ZddZddZdKddZifddZddZej7dj9ZddZddZej7dej8ZgfddZddZej7dej8Zej7dej8Zej7dej8Zej7dej8Zej7dej8ZddZifddZdLddZdMddZdNddZddZdOddZd d Zd d Zed k rgZgZdZdZdZdZxejddD]Zed krXqDeddkrpdZqDedkrdadaqDedkrdadaqDedkrt re+dddadaqDedkrdaqDedkrdaqDedk r da danedk r&da dadanedk r8dZnedk rJdZnedk r\dZneddk redeene rdZeante rdZeande ryeejejeWn6ek rZzedeeWYddZ[XnXn ejeqDWt r,t r,t r,e+ddeeZt rxe+d etdeeƒZetd!ZejeÃWdQRXe reAeƒdS(Pa 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' 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']} (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']) (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) __version__)*fix cCspdadadadadadadadadada ga da t gia da dad agaiadadadagagagagadadS) Nrrrrrrz r ) strictf77sourcecodeformquietverbosetabchar pyffilename f77modulename skipemptyendsignorecontains dolowercasedebug groupcounter grouplist neededmodule expectbeginskipblocksuntil usermodules f90modulevars gotnextfilefilepositiontextcurrentfilename skipfunctions skipfuncs onlyfuncs include_pathsprevious_contextr$r$C/usr/local/lib64/python3.6/site-packages/numpy/f2py/crackfortran.pyreset_global_f2py_varss4 r&cCs,tsdSts(|rtjjttjj|dS)N)r r sysstdoutwriter)lineflagr$r$r%outmesss  r,2zabcdefghopqrstuvwxyz$_typespecrealZijklmnintegerintdoublefloatcharshortlongvoidcasewhilereturnsignedunsignediffortypedefsizeofunionstructstaticregisternewbreakdogotoswitchcontinueelseinlineexterndeleteconstautolenrankshapeindexslensize_imaxminflenfshapestringcomplex_double float_doublestdinstderrr(typedefaultZ_bncCs(|tkr$td|t|ft|S|S)Nz&rmbadname1: Replacing "%s" with "%s". )badnameserrmess)namer$r$r% rmbadname1s rfcCsdd|DS)NcSsg|] }t|qSr$)rf).0_mr$r$r% szrmbadname..r$)namesr$r$r% rmbadnamesrkcCs(|tkr$td|t|ft|S|S)Nz+undo_rmbadname1: Replacing "%s" with "%s". ) invbadnamesrd)rer$r$r%undo_rmbadname1s rmcCsdd|DS)NcSsg|] }t|qSr$)rm)rgrhr$r$r%risz"undo_rmbadname..r$)rjr$r$r%undo_rmbadnamesrncCsN|jd}|dkrdSd||dkr*dSd||dkr>dS||ddS)N.rr\/r )rfind)reir$r$r% getextensions rtz.*[.](for|ftn|f77|f)\Zz-[*]-\s*fortran\s*-[*]-z-[*]-\s*f90\s*-[*]-z-[*]-\s*fix\s*-[*]-z[^c*]\s*[^\s\d\t]c Csd}t|d}|j}d}t|r*d}nt|r:d}d}xf|dkr|r|ddkr|jr|d8}|ddkrt|dds|d d d krd}P|j}q|D]6}tjj.||}tjj*|rd}t+||dd'PqW|s td(t|tj/j.|fn|||} qW|r8|j }n|}|}d%|j)dt| fa|j$|}|r|j%d&}tjj*|rt+||dd'nxtjj,tgt-}d}x>|D]6}tjj.||}tjj*|rd}t+||dd'PqW|std(t|tj/j.|fn||da|j0|r.|ddn|\ aaaaaaaaadS)/z 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. Nrrz*\s*include\s*(\'|")(?P[^\'"]*)(\'|")z(?P.*)&\s*\Zz(\s*&|)(?P.*)z.*?'''rrcSsg|] }t|qSr$)str)rgrhr$r$r%ricsz#readfortrancode.. rfreez Reading file %s (format:%s%s) z,strict z rwryz!f2pyrrcC#Zf2pyz Hzxreadfortrancode: Found non-(space,digit) char in the first column. Are you sure that this code is in fix form? line=%sr*z.pyf z.Unexpected end of file when reading multiline z6Flag sourcecodeform must be either 'fix' or 'free': %szLine #%d in %s:"%s" re) dowithlineistopzAreadfortrancode: could not find include file %s in %s. Ignoring. r )rrr r z )rrrwrr)1rrrr r beginpatternr r rrecompileIrange fileinputZ FileInputr~Z isfirstlinefilenameospathsplitext is_f_filer_has_fix_headerrbeginpattern77beginpattern90r,repr expandtabsreplacesplit_by_unquotedlowerrrQ Exceptionmatchgrouprdrstrip ValueErrorZ filelinenoisfilereadfortrancodedirnamer"joinpathsepclose)ZffilerrZ saveglobalsZlocaldolowercasecontZ finallinellZ includelineZcont1Zcont2Z mline_markl1Z spacedigitsZfinlextrl_Z origfinallinerulcmfn include_dirsZ foundfileinc_dirZfn1r$r$r%rHsR               ,                   rz"\s*(?P%s(?=\s*(\b(%s)\b)))z\s*(?P(\b(%s)\b))z\s*(?P%s)\s*\Zzqcharacter|logical|integer|real|complex|double\s*(precision\s*(complex|)|complex)|type(?=\s*\([\w\s,=(*)]*\))|byte.*z|static|automatic|undefined([a-z]+[\w\s(=*+-/)]*?|)functionbegin [a-z\s]*? subroutinezprogram|block\s*dataz?|module(?!\s*procedure)|python\s*module|interface|type(?!\s*\()z\end|endprogram|endblockdata|endmodule|endpythonmodule|endinterface|endsubroutine|endfunctionz[\w\s]*endz>(end\s*(if|do|where|select|while|forall))|(module\s*procedure)z[\w]*?endifimplicitdimension|virtual dimensionexternaloptionalrequiredpublicprivate intrinsicintent|depend|note|check \s*\(.*?\).*intent parameter\s*\(.*datacallentrycallfuncommonusecontainsformatKthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddeff2pyenhancementsz2\s*(?P''')(?P.*?)(?P''')\s*\Z multilinecCsxtdt|@ stdtjdjdjtj|djtj|ddd}|j|}|rp|j}|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("([^"\\]|(\\.))*"))Z not_quotedr4 single_quotedZ double_quotedbeforeafterr)setAssertionErrorrrrescaper groupdict)r* charactersrurdr$r$r%rcs  rcCsJg}x:t|jdD](}xdD]}|j|d}qW|j|qWdj|S)Nz@,@z(),r,)markoutercommasplitrappendr)Zargslinearrur$r$r% _simplifyargsws  rz&\s*(?P\b[a-z]+[\w]*\b)\s*[=].*cCst|d\}}|rtdj|p,tdj| r|dksDtt|t|d\}}x(|rzt||t|ddd\}}qTWt||dS|dkrdatdiatiia tgia gt td<it td<dt td<dt td <d a d!a dS|dkr d}t r t tkr d }xlt|krxtd ttttftd t tdjt tt tt tdd"d<t t=tdaqWt rt tkrt tdjt tt tt tdd#d<t t=tdat tdjt tt tt tdd$d<t t=tdad%a dS|dkrdSd}x^ttttttttttttttttt t!t"t#t$t%t&ttgD]$}|dj|}|rnP|d}qTW|st'} dt kotknrdSd t tkrxt td D]} | t(krt(| } dt tkr| t tdkrqt)jd| t*|t)j+} | r| j| j,d} t-| j,d} | rTd| | | j,df}n d| | f}t.dj|}|stdt|dSt/|d|dSqWt0dkst0dkrt1j2j3drda4tdtdS|ddkrdt kotknrtdat tkrdStdkr,t5dttdj|} | rz| j,dttk rzt5dt| j,dtttt6ft tkrd&a t tdjt tt tt tdd'd<t t=tdat7sda8n|ddkr dt kotknrtdadSda9t/||d|da8n~|ddkr0nn|ddkrnt:rHdSdt ko\tknrhdSta n0dt kotknrdSt/||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]. ;rrNrbodyvarsblockrerzz(crackline: groupcounter=%s groupname=%s zYcrackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement. externals interfacedz5(?P[^"]*)\b%s\b\s*@\(@(?P[^@]*)@\)@.*\Zrargszcallfun %s(%s) result (%s)rzcallfun %s(%s)z8crackline: could not resolve function call for line=%s. rz.pyfz"crackline:%d: No pattern for line rz>crackline: groupcounter(=%s) is nonpositive. Check the blocks.thiszGcrackline: End group %s does not match with previous Begin group %s %srrrr r r r r r r r );rf2pyenhancementspatternrmultilinepatternrr crackliner groupname groupcacherrrrr,rdimensionpatternexternalpattern intentpatternoptionalpatternrequiredpatternparameterpattern datapattern publicpatternprivatepatternintrinsicpattern endifpattern endpattern formatpatternrfunctionpatternsubroutinepatternimplicitpattern typespattern commonpattern callpattern usepatterncontainspattern entrypatterncrackline_re_1rlrmarkouterparenrrrcallfunpattern analyzeliner rrendswithr#rrrrrr)r*resetrZ has_semicolonZsemicolon_lineflr+patrre_1rem1m2rr$r$r%rs                  $     rcCshd}d}xZ|D]R}|dkr6|d}|dkrX|d}qn"|dkrX|d}|dkrX|d}q||}qW|S)Nrr(rz@(@)z@)@r$)r*rrrr$r$r%rs  rrcCsd}d}t||d\}}||7}x|r|d|krN|dkrN|d|d7}n6||d7}|ddkrp|d7}n|ddkr|d8}t|dd|d\}}||7}q$W| stt|||f|S)Nrrz()@rrr)rrr)r*commarrrrr$r$r%r0s      rcCs|jddjdd}|S)Nz@(@rz@)@r)r)r*rur$r$r%unmarkouterparenCsr cCs|si}|s|S||kr|Sxt|jD]}|dkrP|sB||krN||||<q*|dkrxx||D]}t|||}qbWq*|dkrt||||}q*|dkrt||||}q*|dkr|s||kr||||<q*|dkrq*|dkrtd |q*tdt|q*W|S)Nr.attrspec kindselector charselector=typenamenotercheckrrrz"appenddecl: "%s" not implemented. z,appenddecl: Unknown variable definition key:)r$r%)rr'rrr)listkeys setattrspecsetkindselectorsetcharselectorrdrr)declZdecl2forcekrr$r$r% appenddeclHs6   r0zF\s*(?P(@\(@.*?@\)@|[*][\d*]+|[*]\s*@\(@.*?@\)@|))(?P.*)\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*\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\bcCs(x"|jdgD]}tj|rdSqWdS)Nr!rr)get_intentcallbackpatternr)Zvdeclrr$r$r%_is_intent_callbackts r3cCslt|}tj|}|r:|jd|jd|jd|jdfStj|}|r`|jd|jdddfSdgddfS)Nrerrbind)rnameargspatternrrcallnameargspattern)r*rr$r$r%_resolvenameargspattern{s $ r7c<Csh|jd}|dkrdatr|dkrt rtdkrtjjtj dd }t d |d a tdad t t<it t<gtt<gt td <it td <d t td<|t td<dt td<d a|dkrd|j}tjd|tjrd}tjd|tjrd}t|jd\}}}}|dkr6|dkr d}nd}|dkr6t d||tfa|rdtddt|j dD}ng}d|krxd|kr|jdqtWt dd } d } |dkrd} dt tkrdS|t tdkrdSx$ttD]} | d|krdSqW|t td krdSd!d"d#|}trRtdkrRtdkrRtd$ad} |dkrRd} tdait t<gtt<| rtdkrt d%ttd d&t t<dt td<tt td<dt td<gt td <gt td'<gt td <it td <tdait t<gtt<| rtdkrt d(td dt t<dt td<d)t td<d*t tddt tddft td<gt td <gt td'<gt td <it td <tdait t<gtt<|t t<|t td<|sd+|}|jd,t td-<t|t td<|t td.<tdkrtt td<n^trLtd/krLd*t tddtft td<n,d*t tddt tddft td<x2tt tjD]} t t| st t| =qW|t td<gt td <gt td'<gt td <it td <it td0<|dkr gt td1<|dkr|t td$d'kr@t td$d'j|tj t td$d t td <y,t td |t td |d2j!d3=Wnt"k rYnX|dkry6t#t td |t td$d dt td |<Wnt"k rYnX|dkrT|rT|t td krT||ksTt#t td |t td |t td |<yt td$d j|Wnt"k rYnX|d"krt$d j|jd,d4|} | rt%| jd| jd\}}}}t&|||||dkrdttdjt tttttddd <tt=tdattdjt tttttddd <tt=tdan|d0krt|jd\}}}}|dk rd|rtd5dt|j dD}ng}|dkst't||t td0|<d0|tfanz|dkr2t%||jd\}}}}t&||||}|dk rdd6|tfan2|dk rt td }|jdj(}|j)d>}|d k r|d8k rt*|j)d?d$}|d|dd>||dd}|j)d>}||dd>k rdt tk rt d@|jd|d|f|dAj+t td}|d k rd }d}n |d|j(}||d$d}t|j d}t,|dk rz|d }t dBdAj+|ddd}xdCdt|j dDD]}t-j|}| s|dk rd} n$t.|j/t dD|t|f qnt|jd} | |k ri|| <|d7k r||jd}|d8k r|jd|}t0j| r| t tdk rtdk rdEt td$dk r|t dF| t tdk rt dG| t tdft tdj| n t1dH| n t1dI| |dk r|}d2|| k r|| d2j|n|g|| d2<|d3k r|t tdd k r:t dJ q| t tdk rP qd't tk rjgt td'<t td'j| | } qW|t td <|dk rdd6|tfa n|dKkrt td }|jdj(dd}d}xt|j dD]}ydLd|j dMD\} }Wn*t"k r8t dN||f wYnXt2|}t| } | |k r\i|| <dM|| k r|| dM|k rt dO| || dM|ft3||} | rF| j4dPdQk rt|}xHt5j6|D]:}t||j7|j8jj9dRdS||j7|j8< qWdj+|}n0| j4dPdTk rF|ddjj9dRdSj9dAdU}yt:|i|}Wn>t;tj|jd}!|!st d\|qt%|!jd|!jd\}}}}t?||\}"}#}$|| dP<|"| d]<|#| d^<|$| d_<x&t| jD]} | | sB| | =qBWxt|jdj dD]}%d`|%krydad|%j d`D\}&}'Wn&t"k rt db|%wrYnXn |%j(}&}'t,|&t,|'kodknst dc|%qrx,t@tA|&tA|'dD]}(| |tB|(<qWqrWqW|t tdW<n|ddkrg}d})d}*d }+d},d }-x|jdD]}.|-s|.dekr|, },|.dfkr|,r|+d}+q~|.dgkr|-d}-n|.dhkr|-d}-|+d kr|)|.})n\|+dkr|*|.}*nH|+d$kr~|)j(})|)jCdAr0|)ddj(})|j|)|*g|.})d}*d }+q~W|+d$kr|)j(})|)jCdAr~|)ddj(})|j|)|*gi}/d t tkrt td }/d}x|D]}0did|0D}0|0d d dAkr|0d dd|0d <|0d d dgkrt dj|0d qd }d }1t,|0d}2x4tdkdt|0d j dDD]}|d dgkrrt dj|qNd },xJ||2kr|,s|0d|dAk r|0d|dekr|, },|d}qxW|d}||/kri|/|<dM|/|kr8|/|dM|0d|1|dk r8t dl||/|dM|0d|1|df|0d|1|d|/|dM<|}1|}qNWqW|/t td <|dk rdd6|tfan|dmkr|jdj(}|d dfksdn|}g}3d }+d}4d}5xz|D]r}.|.dfkr|+d}+q|+d/kr$|4j(}4|4sdo}4|3j|4|5g|+d$}+d}4d}5|+d$r8|4|.}4n|5|.}5qW|4j(}4|4sXdo}4|3j|4|5gi}6dmt tkrt tdm}6xh|3D]`}.|.d |6krg|6|.d <x>dpdt|.dj dDD]}|r|6|.d j|qWqW|6t tdm<dm|4tfan\|dqkrhtjdr|jdtj}|rR|j/}7dqt tkrPit tdq<|jd}it tdq|<d }8ds|7krf|7dsdk rfdt|7kr|7dtdkrd}8|8t tdq|du<dvd|7dsj dAD}i}9x||D]r}0dM|0kr,tjdw|0tj}!|!r|!jdqj(|9|!jdxj(<nt dyt|0n|0|9|0<|9t tdq|dz<qWnnt.|j/t d{n|dkrd|t tkrit td|<t td|}:|jdd}krd}|:krtD|:d}tEr|:d}g|:d}<|:d}j|jdn|jd|:|jd<nh|dkrFtdkr"trt d~dSt};tFt |;tdd$|jdntdkrdt.|j/t ddS)NrrrrrrarrorzBanalyzeline: no group yet. Creating program group with name "%s". programrrrreZfromskyfromz block\s*data block datazpython\s*modulez python moduler _BLOCK_DATA_r interfacez2analyzeline: No name/args pattern found for line. cSsg|] }|jqSr$)r)rgxr$r$r%riszanalyzeline..z@,@z.*?)\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" r"r#r%-cSsg|] }|jqSr$)r)rgr=r$r$r%riszZanalyzeline: expected "-" instead of "%s" in range list of implicit statement z^analyzeline: expected "-" instead of "%s" in range list of implicit statement (2) r'rqrrcSsg|] }|jqSr$)r)rgr=r$r$r%ri$sz>analyzeline: implied-DO list "%s" is not supported. Skipping. cSsg|] }|jqSr$)r)rgr=r$r$r%ri.sz=analyzeline: changing init expression of "%s" ("%s") to "%s" rz//_BLNK_cSsg|] }|jqSr$)r)rgr=r$r$r%riisrzT\A\s*(?P\b[\w]+\b)\s*((,(\s*\bonly\b\s*:|(?P))\s*(?P.*))|)\s*\Zr(ZnotonlyonlycSsg|] }|jqSr$)r)rgr=r$r$r%ri|sz;\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. rZusercodez-analyzeline: No context for multiline block. z+analyzeline: No code implemented for line. )rrrra)rrr)r<r:)rrr )rr)rr)rrr r )rrrrrrrr)rr)rrrrrrr )r)Grr#rrrrrbasenamerrr,rrrrrrrrr7rkrremoverrr rrfr(r)rcopydeepcopyrTrr0r cracktypespec0 updatevarsrrfindrrrQ namepatternprintrr2rdget_parametersdetermineexprtyper1 real16patternfinditerstartrreval SyntaxError NameError TypeErrortypespattern4implicit cracktypespecrordchr startswith isinstancerappendmultiline)cracktypespec0: no kind/char_selector pattern found for line. rFr0logicalr/ characterrarrz::rrz)rFr0r~r/rra) rrrrr selectpatternrr,rr(r)r rT)r.rrirjrrr/rsr$r$r%rRs.  rRz+\s*(?P\b[\w]+\b)\s*(?P.*)\s*\ZzC\s*(\(\s*(kind\s*=)?\s*(?P.*)\s*\)|[*]\s*(?P.*?))\s*\Zz3\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.*)|))\s*\Zz\s*(@\(@\s*(?!/)\s*(?P.*?)\s*@\)@\s*[*]\s*(?P.*?)|([*]\s*(?P.*?)|)\s*(@\(@\s*(?!/)\s*(?P.*?)\s*@\)@|))\s*(=\s*(?P.*?)|(@\(@|)/\s*(?P.*?)\s*/(@\)@|)|)\s*\ZcCs|j}t|dkr|S|d}xTtdt|dD]>}||dkrf||ddks4||ddkrfq4|||}q4W||d}|S)Nrrrz ()[]{}=+-/* r )rrQr)exprZexpr2rsr$r$r% removespacess   rcCsd}d}d}d}x|D]}|dkr8|d kr8||}|}q|dkrL|d krL|}||kr^|d}n,||krp|d}n|dkr|dkr|d}q||}|}qW|S) NrrrIrp"rrz@_@)rprIr)rIrr$)r*rrcccbrr$r$r%markinnerspacess*   rc Csd}t||\}}}|rddt|jdD}g}tjd} xL|D]D} | sNqD| j| } | r~| jdj} | | t| d} |j | qDW|}ddt|jdD} g}xP| D]H}xBddtt t |dd jd DD]}|r|j |j d dqWqWx|D]}t j|} | s0td t|qt| jd }i}|ttdkr~ttd|j}d|k}|r||d<n,|r||dk rtd||d|fd|krtj||d<n||rBxtt|jD]d}||dkr&|||d|k r&td|||d|||fntj|||d|<qWd|krt|rt|rb||d<ntd||fn||rxtt|jD]d}||dkr|||d|k rtd|||d|||fntj|||d|<qWd|kr||d<n,|r0|d|k r0td||d|fd|krJtj||d<n2|rxl|D]"} | |dkrV|dj | qVWn@tj||d<tj||d<tj||d<||d<tj||d<| jdrdtjt| jd}|rN|j}x:d0D]2}||ddk r||d||<||d=qWx.z@,@z(?P[a-zA-Z]+)r[cSsg|] }|jqSr$)r)rgr=r$r$r%riscSsg|] }|jqSr$)r)rgr=r$r$r%risr)rz@ @z@_@z;updatevars: no name pattern found for entity=%s. Skipping. rerr.zIupdatevars: attempt to change the type of "%s" ("%s") to "%s". Ignoring. r"zVupdatevars: attempt to change the kindselector "%s" of "%s" ("%s") to "%s". Ignoring. r#zEupdatevars:%s: attempt to change empty charselector to %r. Ignoring. zVupdatevars: attempt to change the charselector "%s" of "%s" ("%s") to "%s". Ignoring. r%zMupdatevars: attempt to change the typename of "%s" ("%s") to "%s". Ignoring. r!rrQarrayinit2rrz-updatevars: "%s %s" is mapped to "%s %s(%s)" z dimension(%s) rrz5updatevars:%s: attempt to change %r to %r. Ignoring. rFr0r~r/rrr$zTupdatevars: attempt to change the init expression of "%s" ("%s") to "%s". Ignoring. z?updatevars: could not crack entity declaration "%s". Ignoring. rB)rQrrr )rFr0r~r/)rarrrrrrrrQrrrrrUr,rrfrrrPr(r)rdlenarraypatternrrr )r.rir!Z entitydeclrlrtrur%rrrrselZel1rEe1ZenamerkZnot_has_typespecr/rd1lkdmZdm1r$r$r%rSs    *   & &                    rSc Csd}d}d}|r|dkrtj|}|s\w+)\s*\)rez'cracktypespec: no typename found in %s z'cracktypespec: no selector used for %s )rFr0r~r/)rQr)r"rr,rrr(r)itemsrfr#lenkindpatternrrrr) r.rirtrur%r/rsrrr$r$r%rasf              racCs|si}|s|Sd|kr&|g|d<|S|r8|dj|||dkrH|S|dkrld|dkrl|dj|nz|dkrd|dkr|dj|nV|dkrd|dkr|dj|n2|dkrd|dkr|dj|n|dj||S)Nr!rC automaticrr)r)r-rjr.r$r$r%r*s.    r*cCs^|si}|s|Sd|kr$||d<|Sx4t|jD]$}|sF||dkr2|||d|<q2W|S)Nr")r(r))r-selr.r/r$r$r%r+sr+cCs^|si}|s|Sd|kr$||d<|Sx4t|jD]$}|sF||dkr2|||d|<q2W|S)Nr#)r(r))r-rr.r/r$r$r%r,sr,unknowncCsd|kr|dS|S)Nrer$)rrr$r$r% getblocknamesrc Cs2yd|d|dfaWntk r,YnXdS)Nz In: %s:%s r9re)rr)rr$r$r% setmesstextsrcCs2i}d|krt|d}d|kr.|j|d|S)N parent_blockr) get_usedictupdate)rusedictr$r$r%rs  rc Cs|dkr i}t|}|s|Sxt|jD]\}}|j}|tkrZtd||jdfq*t|}t|}|spq*|rtd|x@t|jD]0\}}||krtdt |t |f|||<qWq*W|S)Nz0get_useparameters: no module %s info used by %s rez+get_useparameters: mapping for %s not impl.zDget_useparameters: overriding parameter %s with value from module %s) rr(rrrr,r1rWrdr) r param_maprZusenamemappingmvarsror/rqr$r$r%get_useparameterss. rc sts|St|tr*fdd|D}|St|td|dfddkrXt|dk rd|kr|d}xPt|jD]@}||}d|kr~|d}d|kr~|d}|kr~||d<q~Wfd d|d D} | |d <|S) Ncsg|]}t|ddqS)rx)tabr) postcrack2)rgg)rrr$r%ri=szpostcrack2..z %sBlock: %s rerrr"rcsg|]}t|ddqS)rx)rr)r)rgb)rrr$r%riPsr)rrer(rr,rr)) rrrretrrvarrvalZnew_bodyr$)rrr%r7s0    rcCsjt|trjg}g}xN|D]F}t|t||dd}d|krTd|dkrT|j|q|j|qW||St|t|t rd|krtdt|d|kr|ddk rtd||dfd t |}t |}t ||d <t |d |d <d |ko|d r|d }t |||d|d <g}d|kr^|d}x0t|jD]}d|kr>|j|q>Wni}d} d|krx|d} d|krX|drXg} d|kr|d} tj|d } | r| d} nd} | |krd} x d| | f|kr| d} qWd| | f} dgi| dd}x|dD]}|| krg}d}x|d D]}|d}|ddkr>d} xH|d D]<}| d} d|krf|d|krftj|}|d | =PqfW|r>|d s|d |=| | j|=Pq>W|d j|n*|| krt| | r| ||d |<qW|d s(|d rX| |d<d|gi| |dd}i|| <tj||rf||d<|S)zi TODO: function return values determine expression types if in argument list rx)rrerDrz0postcrack: Expected block dictionary instead of r?z %sBlock: %s rrZsortvarsrrrrrrZ__user__routinesZunknown__user__routinesrz%s_%ir<Z_user_interface)rrrrez python module)rrrrerr r )rer(r postcrackrdictrrr, analyzeargs analyzecommon analyzevars sortvarnames analyzebodyr)rPrTZ isexternalr)rrrZgretZuretrZ userisdefinedZuseblockr/rerrZmnamersr<rEZedefryrZbbZmblockr$r$r%rWs                   rcCs g}g}xBt|jD]2}d||kr>||dr>|j|q|j|qWt|}d}x|r|d}d}x*|ddD]}|||dkrzd}PqzW|r|dd|g}|d}||krtddj|d||}PqZ|j||dd}t|}d}qZW|S)NdependrrzTsortvarnames: failed to compute dependencies because of cyclic dependencies between z, r)r(r)rrQrdr)rZindepdeprqrrsrwr$r$r%rs8   rcCst|s |Sg}xXt|djD]B}g}x*|d|D]}tjd|tj}|r:g}|jdrddt|jdjdD}t |jdj }||dkrd |d|kr|d|d j d d j |nd d j |g|d|d <n0|rd d d j |gi|d|<n i|d|<||krN|j |n|}t d ||f|j |q>W||d|<q$Wd |kr||d <n|d ||d <|S)Nrz2\A\s*\b(?P.*?)\b\s*(\((?P.*?)\)|)\s*\ZdimscSsg|] }|jqSr$)r)rgr=r$r$r%risz!analyzecommon..z@,@rerr!z dimension(%s)rzNanalyzecommon: failed to extract "[()]" from "%s" in common /%s/. commonvars)Z hascommonr(r)rrrrrrrfrrrrd)rrr/ZcomvarsrErrrr$r$r%rsB        rcCs t|g}x|dD]}||d<|ddkr|dk rH|d|krHqn|d}|dtkr^qtrp|dtkrpqt|dd d |d <n|}t|||dd}|ddkr|d rd|krq|djd ddkrtj|q|ddkr|dt|d<|j|qW|S)NrrrrrrerrrrT) as_interfaceZsaved_interfacerx)rr<rr pythonmoduler>r)rrz z ) rr r!crack2fortrangenrrrrr)rrrrrZas_r$r$r%rs2   rcCst|t}i}d|kr|ddkrFd}tdkrtdt|dnVxTt|djD]@}|d|jddkr|d|||<qX|d|d||<qXW||fS) Nrrz6buildimplicitrules: no implicit rules for routine %s. rer.rCr)rCr)rdefaultimplicitrulesr r,rr(r)r1)r implicitrules attrrulesr/r$r$r%buildimplicitrules&s rcCs8t|||}t|tdtdgkr(|Std|dS)Nrgzr=%r)r\rar)rErrrur$r$r%myeval9s rz \A\b\w+\b\Zc Csytt|ii}d|dfStk r.YnXtj|rDdd|fSt|}x|D]}t||krhqTtjd|d|r~qTtjd|dtj }|j|}|rTyP|j|}x,|rd|j dd|j d f}|j|}qWt|ii} |j|}x.|r"d|j dd|j d f}|j|}qWt|ii| } |j|}x0|rnd|j dd |j d f}|j|}q@Wt|ii}|j|}x0|rd|j dd |j d f}|j|}qWt|ii} | d | |kr| d | | kr| | |fSWntk r YnXPqTWd S) Nrrz\w\s*\([^)]*\bz\bz(?P.*?)\bz\b(?P.*)z%s(%s)%srrg?g?)NNN) r1rrgetlincoef_re_1rrQrsearchrrr) rEZxsetrZlen_er=rrreerrc2r$r$r% getlincoefBs^            $rz \A[a-z]\w*\Zrc Csg}y|jt|diiWn"tk r@|j|dYnXy|jt|diiWn"tk r~|j|dYnXt|dtrd|d}|dkrt|d}n,|dkrd|d| f}nd|d|f}nZt|dtr$d|d}|dkrd|d}nd||df}nd|d|df}ytt|iiddfStk rdYnXt|d|t|d|}}d|d|dgkr|d|dfdkrt|d|ddddfS|d|dd}|dd|df}|d||df}|ddkr|d|kr|dkr\d |d|d| f|dd | |dffS|rd |d|d|f|dd ||dffSd |d|df|dd|dfS|ddkrn|d|krn|dkrd |d |d| f|dd | |d ffS|rDd |d |d|f|dd ||d ffSd |d |df|dd|d fS|d|dkr,|d|kr,|d|d} | st|ddfS|dkrd | |d| f|dd | | ffS|rd | |d|f|dd || ffSd | |df|dd| fS|d|dkoHdknrt|d} | |krt| r|t d| d| } |dkrd|d| f}n2|dkrd|d| | f}nd|d| |f}n|ddkrt|d} | |krt| rt d| d| } |ddkr(n(|ddkr@d| } nd|d| f} |dkr`| }n&|dkrzd| | f}n d| |f}n"|ddkrht|d} | |krt| rt d| d| } |ddkrd| } nJ|ddkrd| } n2|ddkrd|d | f} nd|d| f} |dkr>| }n&|dkrXd| | f}n d| |f}nDt|d} | |krt| rt d| d| } |ddkrd| } nJ|ddkrd| } n2|ddkrd|d | f} nd|d| f} t|d} | |kr2t| r*t d| d| } |ddkrBn(|ddkrZd| } nd|d| f} |dkrd| | f}n*|dkrd| | | f}nd| | |f}|ddfS) Nrrz%s-%sz%s+%sz-(%s)z%s-(%s)z %s-(%s)+1rzz %s * %s - %sz +%s)/(%s)z %s * %s + %sz -%s)/(%s)z%s * %sz)/(%s)z# getarrlen:variable "%s" undefined z(%s)z%s-%s-%sz%s-%s+%sz-%sz%s*%sz+%sz+%s*%sz-%s*%sz%s%sz%s%s-%sz%s%s+%s)rrr r r r ) rrrrer1rrr_varname_matchr,) rwrstarZedlp1rrZd2rrrrc1r$r$r% getarrlenxs    0,& 40*  ($$                                  rz\b[a-z][\w$]*\bcCs||kr||jdg}d||krht|| rhx4tj||dD]}||krF||krF|j|qFWx^|ddD]8}x2|j|gpt|||D]}||kr|j|qWqvWntdt|g}|||<|S)Nrr$z,_get_depend_dict: no dependence info for %s )r1isstring word_patternfindallr_get_depend_dictr,r)rerdepswordswordrr$r$r%r srcCs.t|j}i}x|D]}t|||qW|S)N)r(r)r)rrj depend_dictrr$r$r%_calc_depend_dict$ s   rcstg}x,tjD]}|s|j||=qWxRrxHtjD]8\}}fdd|D}|s~|j||=qN||<qNWq.csg|]}|kr|qSr$r$)rgre)rr$r%ri= s)rr(r)rr)rrjrelstZnew_lstr$)rrr%get_sorted_names, s   rcCs@|ddkr|dd}tj|r&dStj|r4dSd|dS) Nrz'"rrzkind(rr )rYr real8pattern)r\r$r$r% _kind_func@ s    rcCsLd|}|d krdS|d kr dS|d kr,dS|d kr8dS|dd krHdSdS)Nrrzrr r?illr r$)rurr$r$r%_selected_int_kind_funcK s rcCsX|dkr dS|dkrdStjj}|jdr<|d krTdSn|d krHd S|d krTdSdS)Nrrraarch64powerppcriscvs390xsparcrr)rrrrrrr )platformmachinerrd)pruradixrr$r$r%_selected_real_kind_func[ s  rcCs4tj|}tj|}x2dtfdtfdtfgD]\}}||kr,|||<q,Wg}x6t|D]*}d||krVd||dkrV|j|qVWtjdtj}tjdtj} tjdtj} x~|D]t}d ||kr||d } t ||r| j } xdD]} | j | } qW|j d| } | j d| } d} d||krpd||dkrpt | }| j d||ddd} t | |k} | s| j| s| jd}t |dkrdj|dd j j |d!j d} t||r,t| }xHtj| D]:}t| |j|jj j dd||j|j<qWdj|} n@t||rl| ddkrl| d"dkrlt| dd#jd}yt| ||||<Wn@tk r}z"| ||<td|t| fWYdd}~XnXt||rt||trt ||||<|j }||kr,||||<qt!||tdt|qW|S)$NrZselected_int_kindZselected_real_kindr!rz \bkind\s*\(\s*(?P.*)\s*\)z-\bselected_int_kind\s*\(\s*(?P.*)\s*\)z4\bselected_(int|real)_kind\s*\(\s*(?P.*)\s*\)r$.false.False.true.Truez kind("\1")zselected_int_kind(\1)Fr"rrrrrErrrz@,@zget_parameters: got "%s" on %s z2get_parameters:parameter %s does not have value?! rrrr)rrr r r r )"rPrrrrrrrrZ islogicalrrsubrQrrrZisdoubler(rYrZr[rZ iscomplexrr\rr,rrrer1rcrV)rZ global_paramsroZg_paramsrefuncZ param_namesrZkind_reZselected_int_kind_reZselected_kind_rerqreplZ is_replacedZ orig_v_lenZv_rprrrrnlr$r$r%rWn sz           & 8 &  rWcCs|dkr dSt||S)N(:)(*)r)rrr) _eval_scalar)lengthror$r$r% _eval_length srz\d+_cCst|r|jdd}ytt|i|}WnTtttfk rD|Stk r~}z td||t |j fWYdd}~XnX|S)Nrrz,"%s" in evaluating %r (available names: %s) ) _is_kind_numberrrr\r^r]r_rrdr(r))valuerorrr$r$r%r s(rc6Cst|t|\}}tj|d}|ddkrF|d|krFi||d<d|dkr|d=d|ddkr|ddd}x| dddkr| ddjddY}nt||| ||<|rd||kr*g||d<xRdd t|jd!DD]6}|jd"d}|||dkrD||dj|qDWd}|r|jd#d$}|jd%d&}d||kr|g||d<n||dj|d}|dk rHd||krg||d<xJtd'd t|jd!DD]*}|||dkr||dj|qWd}|dk rd||krlg||d<xFd(d t|jd!DD]*}|||dkr||dj|qWd}qW|rd||krg||d<xtd)d t|jd!DD]}d*}|d+krd+}|| kr,t| |}xnt| jD]^}t j d,|d-t j}|j |}x6|r|jd.t| ||jd/}|j |}q`Wq:W||kr|g}nt|d+jd0}t|d1krd*|krd*g}d*}t|dkr |d |k r d2|d g}t|d1krt|t|dj\}} }|ddd3krR|dd}|rv|dZdd4krv|dd[}| r| |f||<||dj|qWd||k rt||rd5} nd5} t || rd||k r||d}d*|k r|d*}t!d6||d7j"||d|d7j"||d|gf||dj|||d=d||k rng||d<d8||dk r||djd8n t!d9|d||k rd |k r||d k rd||k}!|! rg||d<g||d<d||k rd\}"t||d}#x^||dD]}g}$d}%d}&||k r||k rhd:||d}&}%||d }nFxD|d D]8}'|'|k r qrt j d;|'d<|t j rr|$j|' qrW||k r0d||k rxJ||dD]:}(|(dddk r|$|(ddjdd]jd77}$ qWd||k r0|$||d}$|"d}"||k r|d||k r|d=||k r||||dk r|t#t$t%t&|| r||g||d<|#dk rd>|&| ||"|%f||d=<nd?|&||%f||d=<d r(d||k r(|#dk rd@|&| ||"|%|fg||d<ndA|&||%|fg||d<d||k rDdBg||d<dB||dk rdC||dk r||djdBnP|d^k r"|! r"||k r||$k r||dj|n||d|$||d< q"Wnt'|| rtd2})d||k rtd*||dk r.t(||dd*| })|)||dd*<nFd||dk rtt(||dd| })||dd=|)||dd*<||d s||d=|! r||d r||d=d=||krd||k rg||d<dB||dkr dC||dkr ||djdBd||kr|g||d<x>t| j)D].\} }|||d=r2||dj| q2W||ds|||d=t*||rt+||d=| ||d=<qWxt|jD]}||dkrd||kr||d|d<|ddkrdD|kr,|dD|kr,t,||||dD||<dE|kr|dE}*d }+d},|*jdFd}-|*|-k }+|-jdGd}*|*|-k },t-d j |*}|rbt.|jdH|jd/\}.}/}}0t/|.|/\}1}2}3|.||d <|1r d|1kryt|1di| |1d<Wntk rYnX|1||d<|2r|2||d<|3r0|3||dI<|+rHt||dF||<|,rvt||dG||<ntdJt|dEqW|dd_krdO|krtj|d |dO}4ntj|d }4x4t|jD]$}t#t0t1||r|4j|qWdP|krX|4j2t|dPjxFt|dPjD]2}x*|dP|D]}||4kr4|4j|q4Wq"W|ddkrdD|kr|4j|dDn|4j|d|dd`kr|d}5|5|krd||5kr||5d|d<|ddRkr|4j2t|jx&t|jD]}||4kr||=qW|S)aNrrrrerr!rrrz \w[\w\d_$]*z.*\b%s\brr.rZ undefinedzCanalyzevars: typespec of variable %s is not defined in routine %s. r#rQr"rrrrrrrryr'rr&cSsg|] }|jqSr$)r)rgr=r$r$r%ri@ szanalyzevars..z@,@rz\n\nz z\n rcSsg|] }|jqSr$)r)rgr=r$r$r%riQ scSsg|] }|jqSr$)r)rgr=r$r$r%riX scSsg|] }|jqSr$)r)rgr=r$r$r%ri^ sr:z(?P.*?)\bz\b(?P.*)rrz@:@rz1z1 * z/(1)rSzoanalyzevars: character array "character*%s %s(%s)" is considered as "character %s(%s)"; "intent(c)" is forced. rrz'analyzevars: charselector=%r unhandled.rz.*?\bz\br$z %s%s(%s,%s)%sz %slen(%s)%sz%s%s(%s,%i)%s==%sz%slen(%s)%s>=%srrrr@Zpure recursiverr%z'analyzevars: prefix (%s) were not used r>r python module block datarrrra)rr)NNNNNr r r r r rr r )rr)r>rrr)rr)3rrrPr(r)r*rKeyErrorrWrrrrr[rrrr,rrr\rreverserrrrrkrrQrZ isintent_cZ isstringarrayrdrZl_orZ isintent_inZisintent_inoutZisintent_inplacerrrZisscalarrr0r rRraisintent_callbackZ isintent_auxextend)6rrrrgenrr/ZsvarsrrroZ dep_matchesZ name_matchrqrZln0rZ savelindimsrjZdimrrr'r&rtmprrrrrwZdiZ shape_macror+rsniZddepsadpdruZaarprZispureZisrecZpr1r.rirkrtrur%Z neededvarsrer$r$r%r s~         $            "    &                &       (                             rz\A[a-z]+[\w$]*\Zc Csr|}tj| }|rt|\}}t||d|}d}x0|D](} | j} | tjtjkrZd} || }q:W|d dkr||d}n|d}|}x$||dks||dkr|d}qW||krd} x|t| |kr| d} qW|t| }|r||d|<nx||dkr4||dkr(|d||d|<n i|d|<d |krn||d |d krnt |d|d |d|<|S) NrZe_rrrE_errurrrr ) analyzeargs_re_1rrrXrr\ascii_lowercasedigitsrr*) rrrZorig_aZ a_is_exprrrZatnarr/r$r$r% expr2name< s>           rcCs$t|t|\}}d|kr$g|d<g}x&|dD]}t|||}|j|q2W||d<d|krxBt|djD].\}}x$|D]}||dkri|d|<qWqrWxN|dD]B}|d|krd|krg|d<|d|dkr|dj|dqWd|kr |d|dkr i|d|d<|S)Nrrrrrerr)rrrrr(r)rrrrrr/Zargs1rr$r$r%ra s.     rz\A\(.+?[,].+?\)\Zz\A[+-]?\d+(_(?P[\w]+)|)\Zz-\A[+-]?[\d.]+[\d+\-de.]*(_(?P[\w]+)|)\Zz \A\(.*\)\Zz\A(?P\w+)\s*\(.*?\)\s*\ZcCsTt|trddiSt|tr$ddiSt|tr6ddiSt|trD|Stt|dS)Nr.r0r/rF)rer1r3rFrrr)rur$r$r%_ensure_exprdict s    rcCs||krt||S|j}tj|r.ddiStj|}|rjd|jkrb|jdrbtdt|ddiSt j|}|rd|jkr|jdrtdt|ddiSxNdD]F}x@d d t ||d j d|dDD]}||krt||SqWqWi}t j|rt |dd||}nftj|}|r|jd}t |jd||}|r^d|kr^|d=|s|d|krt||dS|ddkrdd d idS|stdt||S)Nr.rFrez:determineexprtype: selected kind types not supported (%s) r0r/+rHrrqcSsg|] }|jqSr$)r)rgr=r$r$r%ri sz%determineexprtype..)rrrr!rz'"r)r.r#z>determineexprtype: could not determine expressions (%s) type. )rrHrrqr )rrdetermineexprtype_re_1rdetermineexprtype_re_2rrr,rdetermineexprtype_re_3rrdetermineexprtype_re_4rXdetermineexprtype_re_5)rrrulesroprErhZrnr$r$r%rX sN     *   rXrFcCst|d}t|trjxN|D]F}|rP|ddkrP|dtkr>qtrP|dtkrPq|t|||d}qW|Sd}d}d}|d}|dkrdSg} d|kr|d}d|kr|d } x2|dD]&} t| || } t| | s| j| qW|ddks| rd d j | }d} d |krJx6t|d j D]"} d | |t | |d | f} q$W|j dgdd}|dkr|d|kr||j d|rd| |t d j ||f} d}d|krt|d|t }d}d|krt|d|t }|dkrd}d}d|kr d|d}|d| kr | j|dt|d|t }t||d | |t |d} d}d|krn| rnd|d}d|krd}x8t|djD]$\} }d||t | d j |f}qW||}|dkr|dkrd}d|||||||| || |||||f}|S)Nrrrrre)rr8rrz(%s)rrz %s%s%s %srcallbackz%s%sintent(%s) %srrr?rz result (%s)rr9z! in %srz%s%sentry %s(%s)z block datar;z%%s%s%s %s%s%s %s%s%s%s%s%s%send %s %s)rr)rrer(r r!rrrrrr)rr1rO use2fortrancommon2fortran vars2fortranr)rrrrrr@rerZ blocktypeZargslrrrr/Z intent_lstrrrrZmessZ entry_stmtsrsr$r$r%r s                $rcCsZd}xPt|jD]@}|dkr8d||dj||f}qd|||dj||f}qW|S)NrrJz %s%scommon %srz%s%scommon /%s/ %s)r(r)r)rrrr/r$r$r%r s rcCsd}x t|jD]}d|||f}||ikrR|r|d dkr|dd }qd||krr||drrd|}d||kr||drd}xdt||djD]L}|||d|krd |||f}d}qd |||||d|f}d}qW|r|d dkr|dd}qW|S)Nrz %s%suse %s,rrrKz%s only:rMrz%s%s%sz %s%s%s=>%sr r r r )r(r))rrrrrr/r$r$r%r s(  rc CsX|d}g}xF|D]>}ytd|}Wntk r<YqX||r|j|qW|S)Nrz isintent_%s)globalsrr)rrrrrr$r$r%true_intent_list) s rc Cst|d}g}x"|D]}||dkr|j|qWd|krvx8|dD],}||krf||krr|j|qFtd|qFWd|kr|j|d|sx&t|jD]}||kr|j|qWxX|D]N}d||krxH||dD]8}||krd||kr|||dkrtd||fqWd|kr||dkrt||rRd |||f}d |||f}t||r|d |||f}||krd ||krqd } x4|dD](} || dkr| ddkrd} PqW| rq||krt|t d|q||dkr|ddk rqd ||krxd||kr^d||dkr^||krd |||f}qt||t d|q||d } | dkrd||krd| ||df} i} d||kr||d} nd||kr||d} d| kr&| dd9krd| | df} nd| | df} nZd | krfd!| | d f} d"| kr\d#| | d"f} nd$| } nd"| krd%| | d"f} d&} d||krd'd(||dD}|rd)| d*j |f} d*} d+||krd,| | d*j ||d+f} d*} d-||kr*t ||}|r&d.| | d*j |f} d*} d/||krXd0| | d*j ||d/f} d*} d||krd1| | d*j ||df} d*} d2||kr||d2}||d d:kryt |}d5|j |jf}Wntk rYnXd6| ||f} n d7| |f} d8||| f}qW|S);z& TODO: public sub ... rrrz7vars2fortran: Confused?!: "%s" is not defined in vars. rBrzHvars2fortran: Warning: cross-dependence between variables "%s" and "%s" rz%s%sintent(callback) %sz%s%sexternal %sz%s%soptional %sr.rrrerrrz/vars2fortran: No definition for argument "%s". r!rz-vars2fortran: No typespec for argument "%s". rar%z%s(%s)r"r#rrz%s*(%s)z%s*%srQz %s(len=%srz %s,kind=%s)z%s)z %s(kind=%s)rcSsg|]}|dkr|qS)r)rr$)rgrr$r$r%ri sz vars2fortran..z%s, %srrz%s%sdimension(%s)rz%s%sintent(%s)r'z %s%scheck(%s)z%s%sdepend(%s)r$rFdouble complexz(%s,%s)z %s :: %s=%sz%s :: %sz%s%s%s)rr)rFr )rrrdrr(r)rZ isoptionalshowr,rrr\r/imagr)rrrrrrZnoutrrrrZvardefrirrjrrqr$r$r%r7 s   $               rcCsHtddt|ttddgattd}tddt|}t|S)NzReading fortran codes... rzPost-processing... zPost-processing (stage 2)... )r,rrrrrr)filespostlistr$r$r% crackfortran s     r%cCs$t|d}d}dt}|||S)NrzE! -*- f90 -*- ! Note: the context of this file is case sensitive. zb ! This file was auto-generated with f2py (version:%s). ! See http://cens.ioc.ee/projects/f2py2e/ )r f2py_version)rpyfheaderfooterr$r$r% crack2fortran s r*__main__rz-quietz-verboserzz-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form. z-skipemptyendsz--ignore-containsz-f77z-f90rz-hz-showz-mrHzUnknown option %s z IOError: %s 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)3r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr[r\r]r^r_r`r(rarbz9\s*(?P%s(?=\s*(\b(%s)\b)))\s*(?P(\b(%s)\b))zN\s*(?P%s(?=\s*(\b(%s)\b)))\s*(?P(\b(%s)\b))\s*(?P%s)\s*\Z)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)r)r)r)r)r)r)r)N)rN)Nr)r)NN)r)rr)rF)r)r)rF)__doc__r'r\rrrrPrrrZauxfuncsversionr&r r r r rrrrrrrrrrrrrrrrrr"rr!r#rr rrr&r, _MAXCACHErrrcrlrrfrkrmrnrtrrrrrrrrrrr!rZbeforethisafterZ fortrantypesr r`rr Z groupbegins77rZ groupbegins90rZ groupendsrZendifsrr rrrrrrrrrrr rrr rrrSrrrrrrrrr r0rr5r6rYrr2r3r7rrfrRrUr"r#rrrrrSrar*r+r,rrrrrrrrrrrrrrrrrrrrrrrWrrrrr rrrrrrrrrXrrrrrr%r*__name__r#funcsrf2Zf3Z showblocklistargvrrdrr}rrIOErrorZdetailrr$r'r)r$r$r$r%sV &      R       '     9       `"+ " 3     Y ^ %  -K  z              &