B { ` @s dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl Te j a da dadadadadadadadadagadadadaiadadadadatgia da!ga"d a#ga$da%d a&ga'ga(ga)d d Z*dd d Z+de_,iZ-xdD]Z.ddie-e.<qWxdD]Z.ddie-e.<q W[.iZ/iZ0x&dD]Z1e1de/e1<e1e0e1d<q0WddZ2ddZ3ddZ4ddZ5ddZ6e7d ej8j9Z:e7d!ej8j;Ze7d$ej8j9Z?d%d&Z@eAdfd'd(ZBd)ZCd*ZDe7eCdeDeDd+fej8d,fZEe7eCdeDd-eDd-d+fej8ZFe7eCd.ej8d/fZGe7eCd0ej8d/fZHd1ZIe7eCdeIeId+fej8d/fZJeId2ZKe7eCdeKeKd+fej8d/fZLd3ZMe7eCdeMeMd4fej8d5fZNd6ZOe7eCd7eOeOd4fej8d8fZPe7eCd9ej8d:fZQe7eCd;ej8dfZSe7eCd?ej8d@fZTe7eCdAej8dBfZUe7eCdCej8dDfZVe7eCdEej8dFfZWe7eCdGej8dHfZXe7eCdIej8dJfZYe7eCdKej8dLfZZe7eCdMej8dNfZ[e7eCdOej8dPfZ\e7eCdQej8dRfZ]e7eCdSej8dTfZ^e7eCdUej8dVfZ_e7eCdWej8dXfZ`e7eCdYej8dZfZae7eCd[ej8d\fZbe7eCd]ej8ejcBd^fZde7d_ejcd`fZedadbZfdcddZge7deej8ZhddfdgZidhdiZjddkdlZkdmdnZlddodpZme7dqej8Zne7drej8Zoe7dsej8Zpe7dtZqe7duZre7dvej8ZsdwdxZtdydzZud{d|Zvd}d~ZwddZxe7dej8Zye7dej8Zze7dej8Z{e7dej8Z|e7dej8Z}ddZ~ddZddZddZdddZdddZdddZdddZddZddZdddZdddZdddZddZddZdddZddZdddZe7dej8ZddZe7dj9ZdddZe7dej8ZddZddZddZddZddZd ddZifddZdd„Ze7dáj9ZddńZddDŽZe7dej8ZgfddʄZdd̄Ze7dej8Ze7dej8Ze7dej8Ze7dej8Ze7dej8ZddӄZifddՄZd ddلZd ddۄZd dd݄Zdd߄Zd ddZddZddZedk rgZgZdZdZdZdZxejddD]ZedkrqeddkrdZqedkr*dadaqedkr@dadaqedkrft rZe+dddadaqedkrxdaqedkrdanedkrda danedkrda dadanedkrdZnedkrdZnedkrdZneddk redeene rdZeanre r$dZeanbe r|yeeeeWn4ek rxZzedeeWddZ[XYnXn eeqWt st rt se+ddeeZt re+detdeeƒZetdZeeáWdQRXe reAeƒdS(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' 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__)*fixz cCspdadadadadadadadadada ga da t gia da dadagaiadadadagagagagadadS)Nrrrz rr) strictf77sourcecodeformquietverbosetabchar pyffilename f77modulename skipemptyendsignorecontains dolowercasedebug groupcounter grouplist neededmodule expectbeginskipblocksuntil usermodules f90modulevars gotnextfilefilepositiontextcurrentfilename skipfunctions skipfuncs onlyfuncs include_pathsprevious_contextr"r";/tmp/pip-unpacked-wheel-4iou4664/numpy/f2py/crackfortran.pyreset_global_f2py_varss4 r$cCs,tsdSts(|rtjttj|dS)N)r r sysstdoutwriter)lineflagr"r"r#outmesss  r*2zabcdefghopqrstuvwxyz$_typespecrealZijklmninteger)3intdoublefloatcharshortlongvoidcasewhilereturnsignedZunsignedifforZtypedefsizeofunionstructstaticregisternewbreakZdogotoswitchcontinueelseinlineZexterndeleteconstautolenZrankshapeindexslensizeZ_imaxminZflenZfshapestringZcomplex_doubleZ float_doublestdinstderrr&typedefaultZ_bncCs(|tkr$td|t|ft|S|S)Nz&rmbadname1: Replacing "%s" with "%s". )badnameserrmess)namer"r"r# rmbadname1s rZcCsdd|DS)NcSsg|] }t|qSr")rZ).0_mr"r"r# szrmbadname..r")namesr"r"r# rmbadnamesr_cCs(|tkr$td|t|ft|S|S)Nz+undo_rmbadname1: Replacing "%s" with "%s". ) invbadnamesrX)rYr"r"r#undo_rmbadname1s racCsdd|DS)NcSsg|] }t|qSr")ra)r[r\r"r"r#r]sz"undo_rmbadname..r")r^r"r"r#undo_rmbadnamesrbcCsN|d}|dkrdSd||dkr*dSd||dkr>dS||ddS)N.rr\/r)rfind)rYir"r"r# getextensions rhz.*[.](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}|}d}t|r*d}nt|r:d}d}xf|dkr|r|ddkr|r|d8}|ddkrt|dds|d d d krd}P|}q|stttttttttf }|gkr&dSt}d}d}d}t dt j }t d} t d} t d} |rp|ddd \}} d gd d t d D} dat |}x||}|sP|rTda|ada|} dadatjtd}ttr t|s t|s danttr"t|s"datr.tantatdttttrJdpLdf|dd }x,|dks|ddkrP|dd}qfWtst|d\}}|d 7}|dd dkrt|d|ddd\}}|!dkrd}qtdkrf|ddkr>|dd dkr6d|dd}nd}qn tr^t"|dkr^|dd}|d| kr|t#dt||rtrt"|dkr|dd ks||dd}d}d}nts8| $|}|r|%d}|r|| $|%d}d}d}n,d|dd}|r"| }n|}|}|}|dk }n,d|dd}|rX| }n|}|}|}ntdkr6|s|d kr| $|r|d!}x4|}|st&d"P||}| $|rPqW|'}| $|}|r|%d}|r|| $|%d}d}d}n|r | }n|}|}|}|dk }nt(d#ttd$|)dt| fa|$|}|r|%d%}tj*|rt+||dd&nxtj,tgt-}d}x>|D]6}tj.||}tj*|rd}t+||dd&PqW|std't|tj/.|fn|||} qW|r.| }n|}|}d$|)dt| fa|$|}|r|%d%}tj*|rt+||dd&nxtj,tgt-}d}x>|D]6}tj.||}tj*|rd}t+||dd&PqW|std't|tj/.|fn||da|0|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.*?'''r)rr cSsg|] }t|qSr")str)r[r\r"r"r#r]csz#readfortrancode.. rrfreez Reading file %s (format:%s%s) z,strict z rkrmz!f2pyz )rcrkC#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" rY) dowithlineistopzAreadfortrancode: could not find include file %s in %s. Ignoring. )1rrrr r beginpatternr r rrecompileIrange fileinputZ FileInputrqZ isfirstlinefilenameospathsplitext is_f_filers_has_fix_headerrzbeginpattern77beginpattern90r*repr expandtabsreplacesplit_by_unquotedlowerrtrK ExceptionmatchgrouprXrstrip ValueErrorZ filelinenoisfilereadfortrancodedirnamer joinpathsepclose)ffilerrZ saveglobalsZlocaldolowercasecontZ finallinellZ includelineZcont1Zcont2Z mline_markl1Z spacedigitsZfinlextrl_Z origfinallinerilcmfn include_dirsZ foundfileinc_dirZfn1r"r"r#rHsR               (                   rzN\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,=(*)]*\))|bytez.*rUz|static|automatic|undefined)z([a-z]+[\w\s(=*+-/)]*?|)functionrz.*begin)z [a-z\s]*? subroutinerz.*zprogram|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]*?endif)rimplicitrz.*r)rzdimension|virtualzdimension|virtualz.* dimension)rexternalrz.*r)roptionalrz.*r)rrequiredrz.*r)rpublicrz.*r)rprivaterz.*r)r intrinsicrz.*r)rzintent|depend|note|checkzintent|depend|note|checkz \s*\(.*?\).*intent)r parameterrz\s*\(.*r)rdatarz.*r)rcallrz.*r)rentryrz.*r)rcallfunrz.*r)rcommonrz.*r)ruserz.*r)rcontainsrrr)rformatrz.*r)rzKthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddefzKthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddefz.*f2pyenhancementsz2\s*(?P''')(?P.*?)(?P''')\s*\Z multilinec Csvtdt|@rtdtdjdt|dt|ddd}||}|rn|}|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_quotedr2 single_quotedZ double_quotedbeforeafterr)setAssertionErrorrrrescaper groupdict)r( charactersrirdr"r"r#rcs  rcCsJg}x:t|dD](}xdD]}||d}qW||qWd|S)Nz@,@z(),r,)markoutercommasplitrappendr)Zargslinearyrir"r"r# _simplifyargsws  rz&\s*(?P\b[a-z]+[\w]*\b)\s*[=].*cCst|d\}}|rtd|std|s|dksBtt|t|d\}}x(|rxt||t|ddd\}}qRWt||dS|dkrdatdiatiia tgia gt td<it td<dt td<dt td <d a d a dS|dkrd}t r t tkr d }xlt|krvtd ttttftd t tdt tt tt tdd d<t t=tdaq Wt rt tkrt tdt tt tt tdd d<t t=tdat tdt tt tt tdd d<t t=tdad a dS|dkrdSd}x^ttttttttttttttttt t!t"t#t$t%t&ttgD]$}|d|}|rlP|d}qRW|st'} dt krtkrnndSdt tkrxt tdD]} | t(krt(| } dt tkr| t tdkrqt)d| t*|t)j+} | r| | ,d} t-| ,d} | rRd| | | ,df}n d| | f}t.d|}|stdt|dSt/|d|dSqWt0dkst0dkrt123drda4tdtdS|ddkrdt krtkrnntdat tkrdStdkr*t5dttd|} | rv| ,dttksvt5dt| ,dtttt6ft tkrd a t tdt tt tt tdd d<t t=tdat7sda8n|ddkrdt krtkrnn tdadSda9t/||d|da8n~|ddkr,nn|dd krjt:rDdSdt kr\tkrdnndSta n0dt krtkrnndSt/||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]. ;rrNrbodyvarsblockrYrz(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)rwzcallfun %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 %srrr);rf2pyenhancementspatternrmultilinepatternrr crackliner groupname groupcacherrrrr*rdimensionpatternexternalpattern intentpatternoptionalpatternrequiredpatternparameterpattern datapattern publicpatternprivatepatternintrinsicpattern endifpattern endpattern formatpatternrfunctionpatternsubroutinepatternimplicitpattern typespattern commonpattern callpattern usepatterncontainspattern entrypatterncrackline_re_1r`rmarkouterparenrrrcallfunpattern analyzeliner rrendswithr!rrrrrr)r(resetrZ has_semicolonZsemicolon_lineflr)patrre_1rYm1m2rr"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(rrxrr"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|rtt|||f|S)Nrrz()@r rr )rrr)r(commarrxrrr"r"r#r0s      rcCs|dddd}|S)Nz@(@r z@)@r )r)r(rir"r"r#unmarkouterparenCsrcCs|si}|s|S||kr|Sxt|D]}|dkrP|sB||kr||||<q*|dkrxx||D]}t|||}qbWq*|dkrt||||}q*|dkrt||||}q*|dkr|s||kr||||<q*|dkrq*|dkrtd|q*td t|q*W|S) Nr,attrspec kindselector charselector)=typenamenote)rcheckrrrz"appenddecl: "%s" not implemented. z,appenddecl: Unknown variable definition key:)listkeys setattrspecsetkindselectorsetcharselectorrXrr|)declZdecl2forcekrr"r"r# appenddeclHs6  rzF\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"|dgD]}t|rdSqWdS)Nrrr)get_intentcallbackpatternr)Zvdeclrr"r"r#_is_intent_callbackts r!cCslt|}t|}|r:|d|d|d|dfSt|}|r`|d|dddfSdgddfS)NrYrrwbind)rnameargspatternrrcallnameargspattern)r(rr"r"r#_resolvenameargspattern{s $ r%c< Cs^|d}|dkrdatr|dkrtstdkrtjt dd}t d|da tdadt t<it t<gtt<gt td <it td <dt td <|t td <d t td<da|dkrb|}td|tjrd}td|tjrd}t|d\}}}}|dkr4|dkrd}nd}|dkr4t d||tfa|rbtddt| dD}ng}d|krxd|kr|dqrWt dd} d} |dkrd} dt tkrdS|t tdkrdSx$ttD]} | d |krdSqW|t tdkrdSd d!d|}trPtd"krPtdkrPtd#ad} |d$krPd} tdait t<gtt<| rtdkrt d%ttdd&t t<dt td <tt td <dt td<gt td <gt td'<gt td<it td <tdait t<gtt<| rtdkrt d(tdd$t t<d$t td <d)t td <d*t tddt tdd ft td<gt td <gt td'<gt td<it td <tdait t<gtt<|t t<|t td <|sd+|}|d,t td-<t|t td <|t td.<tdkrtt td<n^trJtd/krJd*t tddtft td<n,d*t tddt tdd ft td<x2tt tD]} t t| st t| =qW|t td<gt td <gt td'<gt td<it td <it td0<|d1krgt td2<|dkr|t td#d'kr>t td#d'|t t td#d t td <y,t td |t td |d3!d4=Wnt"k rYnX|d5kry6t#t td |t td#d dt td |<Wnt"k rYnX|d6krR|rR|t td krR||ksRt#t td |t td |t td |<yt td#d|Wnt"k rYnX|d!krt$d|d,d7|} | rt%| d| d\}}}}t&|||||dkrZttdt tttttdd"d <tt=tdattdt tttttdd"d <tt=tdan|d0krt|d\}}}}|dk rZ|rtd8dt| dD}ng}|dkst't||t td0|<d0|tfanr|d1kr0t%||d\}}}}t&||||}|dk rZd9|tfan*|d:k rt td }|d(}|)d;}|dk r|d|d|d|f|d?+t td}|dk rd}d}n |d|(}||d#d}t| d}t,|dk rx|d}t d@d?+|ddd}xdAdt| dDD]}t-|}| s|dBk rd} n$t.|/t dC|t|f qnt|d } | |k ri|| <|dDk r||d}|dt;t|d}!|!st d]|qt%|!d|!d\}}}}t?||\}"}#}$|| dQ<|"| d^<|#| d_<|$| d`<x&t| D]} | | s>| | =q>Wxt|d dD]}%da|%krydbd|% daD\}&}'Wn&t"k rt dc|%wnYnXn |%(}&}'t,|&t,|'krdksnt dd|%qnx,t@tA|&tA|'dD]}(| |tB|(<qWqnWqW|t tdX<n|dekrg}d})d}*d}+d},d}-x|dD]}.|-s|.dfkr|, },|.dgkr|,r|+d}+qx|.dhkr|-d}-n|.dikr|-d}-|+dkr|)|.})n\|+dkr|*|.}*nH|+d#krx|)(})|)Cd?r*|)dd(})||)|*g|.})d}*d}+qxW|+d#kr|)(})|)Cd?rx|)dd(})||)|*gi}/d t tkrt td }/d}x|D]}0djd|0D}0|0ddd?kr|0ddd|0d<|0dddhkrt dk|0dqd}d}1t,|0d}2x0tdldt|0d dDD] }|ddhkrlt dk|qHd},xH||2kr|,s|0d|d?ks|0d|dfkr|, },|d}qrW|d}||/kri|/|<dN|/|kr.|/|dN|0d|1|dks.t dm||/|dN|0d|1|df|0d|1|d|/|dN<|}1|}qHWqW|/t td <|dk rZd9|tfan|dnkr|d(}|ddgksdo|}g}3d}+d}4d}5xz|D]r}.|.dgkr|+d}+q|+d/kr|4(}4|4sdp}4|3|4|5g|+d#}+d}4d}5|+d#r.|4|.}4n|5|.}5qW|4(}4|4sNdp}4|3|4|5gi}6dnt tkrzt tdn}6xh|3D]`}.|.d|6krg|6|.d<x>dqdt|.d dDD]}|r|6|.d|qWqW|6t tdn<dn|4tfan\|drkr^tds|dtj}|rH|/}7drt tkrFit tdr<|d }it tdr|<d}8dt|7kr\|7dtdk r\du|7kr|7dudkrd}8|8t tdr|dv<dwd|7dt d?D}i}9x||D]r}0dN|0kr"tdx|0tj}!|!r|!dr(|9|!dy(<nt dzt|0n|0|9|0<|9t tdr|d{<qWnnt.|/t d|n|d}krd~t tkrit td~<t td~}:|ddkrd|:krtD|:dtEr|:dg|:d<|:d|dn|d|:|d<nh|dkr.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" rrr-cSsg|] }|qSr")rt)r[r*r"r"r#r]szZanalyzeline: expected "-" instead of "%s" in range list of implicit statement z^analyzeline: expected "-" instead of "%s" in range list of implicit statement (2) r'rer r cSsg|] }|qSr")rt)r[r*r"r"r#r]$sz>analyzeline: implied-DO list "%s" is not supported. Skipping. cSsg|] }|qSr")rt)r[r*r"r"r#r].sz=analyzeline: changing init expression of "%s" ("%s") to "%s" rz//_BLNK_cSsg|] }|qSr")rt)r[r*r"r"r#r]isrzT\A\s*(?P\b[\w]+\b)\s*((,(\s*\bonly\b\s*:|(?P))\s*(?P.*))|)\s*\ZrZnotonlyonlycSsg|] }|qSr")rt)r[r*r"r"r#r]|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. )rrZusercodez-analyzeline: No context for multiline block. z+analyzeline: No code implemented for line. )Grr!rrrrrbasenamerrr*rrrrrrrrr%r_rremoverrr rrZrrrcopydeepcopyrMrrrcracktypespec0 updatevarsrrtfindrrrK namepatternprintrr rXget_parametersdetermineexprtyper real16patternfinditerstartrreval SyntaxError NameError TypeErrortypespattern4implicit cracktypespecrordchr startswith isinstancer|appendmultiline)cracktypespec0: no kind/char_selector pattern found for line. )r3r.logicalr- characterrUrrz::rr) rrrrtr selectpatternrr*rrrrrA)r,rrVrWrrrrgr"r"r#r?s.  r?z+\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|}t|dkr|S|d}xTtdt|dD]>}||dkrf||ddks4||ddkrfq4|||}q4W||d}|S)Nrrr{z ()[]{}=+-/* r)rtrKr)exprZexpr2rgr"r"r# removespacess   rocCsd}d}d}d}x|D]}|dkr8|dkr8||}|}q|dkrL|dkrL|}||kr^|d}n,||krp|d}n|dkr|dkr|d }q||}|}qW|S) Nrrr6rd)rdr6")r6rprr{z@_@r")r(rrxcccbrr"r"r#markinnerspacess*   rsc Csd}t||\}}}|rddt|dD}g}td} xL|D]D} | sNqD| | } | r~| d} | | t| d} | | qDW|}ddt|dD} g}xP| D]H}xBddtt t |dd d DD]}|r| | d dqWqWx|D]}t |} | s0td t|qt| d }i}|ttdkrvttd|}d|k}|r||d<n*|r||dkstd||d|fd|krt||d<nz|r>xrt|D]b}||dkr"|||d|ks"td|||d|||fnt|||d|<qWd|krp|rp|r^||d<ntd||fnz|rxrt|D]b}||dkr|||d|kstd|||d|||fnt|||d|<qWd|kr||d<n*|r(|d|ks(td||d|fd|krBt||d<n2|rxl|D]"} | |dkrN|d | qNWn@t||d<t||d<t||d<||d<t||d<| drTtt| d}|r>|}x:dD]2}||ddk r||d||<||d=qWx.z@,@z(?P[a-zA-Z]+)rHcSsg|] }|qSr")rt)r[r*r"r"r#r]scSsg|] }|qSr")rt)r[r*r"r"r#r]sr{)r z@ @z@_@z;updatevars: no name pattern found for entity=%s. Skipping. rYrr,zIupdatevars: attempt to change the type of "%s" ("%s") to "%s". Ignoring. rzVupdatevars: attempt to change the kindselector "%s" of "%s" ("%s") to "%s". Ignoring. rzEupdatevars:%s: attempt to change empty charselector to %r. Ignoring. zVupdatevars: attempt to change the charselector "%s" of "%s" ("%s") to "%s". Ignoring. rzMupdatevars: attempt to change the typename of "%s" ("%s") to "%s". Ignoring. rr)rKarrayinit2rKrtrrz-updatevars: "%s %s" is mapped to "%s %s(%s)" z dimension(%s) rrz5updatevars:%s: attempt to change %r to %r. Ignoring. )r3r.rkr-rrlrurzTupdatevars: attempt to change the init expression of "%s" ("%s") to "%s". Ignoring. z?updatevars: could not crack entity declaration "%s". Ignoring. r/)rNrrrrrrrrKrrorsrrBr*rrZrrr=rrrXlenarraypatternrrr)r,rVrZ entitydeclrYrarbrrrrrselZel1r2e1ZenamerXZnot_has_typespecrrd1lkdmZdm1r"r"r#r@s    *   $ $                    r@c Csd}d}d}|r|dkrt|}|s\w+)\s*\)rYz'cracktypespec: no typename found in %s z'cracktypespec: no selector used for %s )rrr*rrrritemsrZrlenkindpatternrrrr) r,rVrarbrrrgrr}r"r"r#rNsf              rNcCs|si}|s|Sd|kr&|g|d<|S|r8|d|||dkrH|S|dkrld|dkrl|d|nz|dkrd|dkr|d|nV|dkrd|dkr|d|n2|dkrd|dkr|d|n|d||S)Nrr? automaticrr)r)rrWrr"r"r#rs.    rcCs^|si}|s|Sd|kr$||d<|Sx4t|D]$}|sF||dkr2|||d|<q2W|S)Nr)rr)rselrrr"r"r#rsrcCs^|si}|s|Sd|kr$||d<|Sx4t|D]$}|sF||dkr2|||d|<q2W|S)Nr)rr)rrrrr"r"r#rsrunknowncCsd|kr|dS|S)NrYr")rrr"r"r# getblocknamesrcCs2yd|d|dfaWntk r,YnXdS)Nz In: %s:%s r'rY)rr)rr"r"r# setmesstextsrcCs2i}d|krt|d}d|kr.||d|S)N parent_blockr) get_usedictupdate)rusedictr"r"r#rs  rc Cs|dkr i}t|}|s|Sxt|D]\}}|}|tkrZtd||dfq*t|}t|}|spq*|rtd|x@t|D]0\}}||krtdt |t |f|||<qWq*W|S)Nz0get_useparameters: no module %s info used by %s rYz+get_useparameters: mapping for %s not impl.zDget_useparameters: overriding parameter %s with value from module %s) rrrrrr*rrDrXr) r param_maprZusenamemappingmvarsr\rr^r"r"r#get_useparameterss. rc sts|St|tr*fdd|D}|St|td|dfddkrXt|dk rd|kr|d}xPt|D]@}||}d|kr~|d}d|kr~|d}|kr~||d<q~Wfd d|d D} | |d <|S) Ncsg|]}t|ddqS)rl)tabr) postcrack2)r[g)rrr"r#r]=szpostcrack2..z %sBlock: %s rYrrrrcsg|]}t|ddqS)rl)rr)r)r[b)rrr"r#r]Psr)rrRrrr*rr) rrrretrryvarrvalZnew_bodyr")rrr#r7s0    rcCsdt|trjg}g}xN|D]F}t|t||dd}d|krTd|dkrT||q||qW||St|t|tsd|krtdt|d|kr|ddkstd||dfd t |}t |}t ||d <t |d |d <d |kr|d r|d }t |||d|d <g}d|kr\|d}x0t|D]}d|kr<||q||dr>||q||qWt|}d}x|r|d}d}x*|ddD]}|||dkrzd}PqzW|r|dd|g}|d}||krtdd|d||}PqZ|||dd}t|}d}qZW|S)NdependrrzTsortvarnames: failed to compute dependencies because of cyclic dependencies between z, r)rrrrKrXr)rZindepdepr^ryrgrwr"r"r#rs8   rcCst|s |Sg}xXt|dD]B}g}x*|d|D]}td|tj}|r:g}|drddt|ddD}t |d }||dkrd |d|kr|d|d  d d |nd d |g|d|d <n0|rd d d |gi|d|<n i|d|<||krN| |n|}t d ||f| |q>W||d|<q$Wd |kr||d <n|d ||d <|S)Nrz2\A\s*\b(?P.*?)\b\s*(\((?P.*?)\)|)\s*\ZdimscSsg|] }|qSr")rt)r[r*r"r"r#r]sz!analyzecommon..z@,@rYrrz dimension(%s)rzNanalyzecommon: failed to extract "[()]" from "%s" in common /%s/. commonvars)Z hascommonrrrrrrrrrZrtrrrX)rrrZcomvarsr2rrryr"r"r#rsB        rcCst|g}x|dD]}||d<|ddkr|dk rF|d|krFqn|d}|dtkr\qtrn|dtkrnqt|ddd |d <n|}t|||d d }|dd kr|dsd|krq|ddddkrt|q|ddkr|dt|d<||qW|S)Nrrr)rrrYrz T) as_interfaceZsaved_interfacerl)rr)rr{r pythonmoduler+r) rrrcrack2fortrangenrrrrr)rrrrrZas_r"r"r#rs2    rcCst|t}i}d|kr|ddkrFd}tdkrtdt|dnVxTt|dD]@}|d|ddkr|d|||<qX|d|d||<qXW||fS)Nrrz6buildimplicitrules: no implicit rules for routine %s. rYr,)r?r)rdefaultimplicitrulesr r*rrrr)r implicitrules attrrulesrr"r"r#buildimplicitrules&s rcCs8t|||}t|tdtdgkr(|Std|dS)Nrgzr=%r)rIrUr)r2rrrir"r"r#myeval9s rz \A\b\w+\b\Zc Csytt|ii}d|dfStk r.YnXt|rDdd|fSt|}x|D]}t||krhqTtd|d|r~qTtd|dtj }||}|rTyP||}x,|rd| dd| d f}||}qWt|ii} ||}x.|r"d| dd| d f}||}qWt|ii| } ||}x0|rnd| dd | d f}||}q@Wt|ii}||}x0|rd| dd | d f}||}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) r/rrgetlincoef_re_1rrKrsearchrrr) r2ZxsetrZlen_er*rrreerrc2r"r"r# getlincoefBs^            $rz \A[a-z]\w*\Zrc Csg}y|t|diiWn"tk r@||dYnXy|t|diiWn"tk r~||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|d f}|d||d f}|ddkr|d |kr|dkr\d |d|d | f|d d | |dffS|rd |d|d |f|d d ||dffSd|d|d f|d d|dfS|ddkrn|d |krn|dkrd |d |d | f|d d | |d ffS|rDd |d |d |f|d d ||d ffSd|d |d f|d d|d fS|d |d kr,|d |kr,|d|d} | st|ddfS|dkrd | |d | f|d d | | ffS|rd | |d |f|d d || ffSd| |d f|d d| fS|d|dkrLdkrnnt|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)+1)rrrz %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+%srz-%sz%s*%sz+%sz+%s*%sz-%s*%sz%s%sz%s%s-%sz%s%s+%s) rrrrRr/r|rr_varname_matchr*) rdrstarZedlp1rr|Zd2rrrrZc1r"r"r# getarrlenxs    0,& 40*  ($$                                  rz\b[a-z][\w$]*\bcCs||kr||dg}d||krft||sfx4t||dD]}||krD||krD||qDWx^|ddD]8}x2||gpt|||D]}||kr||qWqtWntdt|g}|||<|S)Nrrz,_get_depend_dict: no dependence info for %s )risstring word_patternfindallr_get_depend_dictr*r)rYrdepswordswordrr"r"r#r srcCs.t|}i}x|D]}t|||qW|S)N)rrr)rr^ depend_dictryr"r"r#_calc_depend_dict$ s   rcstg}x,tD]}|s|||=qWxRrxHtD]8\}}fdd|D}|s~|||=qN||<qNWq.csg|]}|kr|qSr"r")r[rY)rr"r#r]= s)rrrrr)rr^rYlstZnew_lstr")rrr#get_sorted_names, s   rcCs@|ddkr|dd}t|r&dSt|r4dSd|dS) Nrz'"rrzkind(r )rFr real8pattern)rRr"r"r# _kind_func@ s    rcCsLd|}|dkrdS|dkr dS|dkr,dS|dkr8d S|dd krHd Sd S) Nr}rirlrlrrr")rirr"r"r#_selected_int_kind_funcK s rcCsX|dkr dS|dkrdSt}|dr<|dkrTdSn|dkrHdS|dkrTdSd S) Nrrr)aarch64powerppcZriscvs390xZsparcr}r)platformmachinerrQ)priradixrr"r"r#_selected_real_kind_func[ s  rc Cs4t|}t|}x2dtfdtfdtfgD]\}}||kr,|||<q,Wg}x6t|D]*}d||krVd||dkrV||qVWtdtj}tdtj} tdtj} x~|D]t}d ||kr||d } t ||r| } xd D]} | j | } qW| d | } | d | } d } d||krpd||dkrpt | }| d||ddd} t | |k} | s| | s| d}t |dkrd|dd |d d} t||r,t| }xHt| D]:}t| || dd|||<qWd|} n@t||rl| ddkrl| ddkrlt| ddd}yt| ||||<Wn@tk r}z | ||<td|t| fWdd}~XYnXt||rt||trt ||||<| }||kr,||||<qt!||tdt|qW|S)NrZselected_int_kindZselected_real_kindrrz \bkind\s*\(\s*(?P.*)\s*\)z-\bselected_int_kind\s*\(\s*(?P.*)\s*\)z4\bselected_(int|real)_kind\s*\(\s*(?P.*)\s*\)r))z.false.False)z.true.Truez kind("\1")zselected_int_kind(\1)Frrrrrrr2rr r z@,@zget_parameters: got "%s" on %s z2get_parameters:parameter %s does not have value?! )"r=rrrrrrrrZ islogicalrrsubrKrrrZisdoublerrFrGrHrZ iscomplexrrIrr*rrrRr/rPrC)rZ global_paramsr\Zg_paramsrYfuncZ param_namesryZkind_reZselected_int_kind_reZselected_kind_rer^replZ is_replacedZ orig_v_lenZv_r]rrr_nlr"r"r#rDn sv            & 8 &  rDcCs|dkr dSt||S)N)z(:)z(*)rz(*)) _eval_scalar)lengthr\r"r"r# _eval_length srz\d+_c Cst|r|dd}ytt|i|}WnTtttfk rD|Stk r~}ztd||t | fWdd}~XYnX|S)Nrrz,"%s" in evaluating %r (available names: %s) ) _is_kind_numberrr|rIrKrJrLrrXrr)valuer\r_r"r"r#r s(rc6 Cst|t|\}}t|d}|ddkrF|d|krFi||d<d|dkr|d=d|ddkr|ddd}x| dddkr| dddd}nt||| ||<|rd||kr*g||d<xRd d!t|d"DD]6}|d#d}|||dkrD||d|qDWd}|r|d$d%}|d&d'}d||kr|g||d<n||d|d}|dk rHd||krg||d<xJtd(d!t|d"DD]*}|||dkr||d|qWd}|dk rd||krlg||d<xFd)d!t|d"DD]*}|||dkr||d|qWd}qW|rd||krg||d<xtd*d!t|d"DD]}d+}|d,krd,}|| kr,t| |}xnt| D]^}t d-|d.t j}| |}x6|r|d/t| ||d0}| |}q`Wq:W||kr|g}nt|d,d1}t|d2krd+|krd+g}d+}t|dkr|d |ksd3|d g}t|d2krt|t|d\}} }|ddd4krP|dd}|rt|d5dd6krt|dd5}| r| |f||<||d|qWd||k rt||rd7} nd7} t || rd||k r||d}d+|k r|d+}t!d8||d9"||d|d9"||d|gf||d|||d=d||k rlg||d<d:||dk r||dd:n t!d;|d||k rd|k r||dk rd||k}!|! rg||d<g||d<d||k rd}"t||d}#xX||dD]}g}$d}%d}&||k r||k rfd<||d}&}%||d }nFxD|dD]8}'|'|k r qpt d=|'d>|t j rp|$|' qpW||k r.d||k rxJ||dD]:}(|(dddk r|$|(ddddd97}$ qWd||k r.|$||d}$|"d}"||k rtd||k rtd?||k rt|||dk rtt#t$t%t&|| rt|g||d<|#dk rd@|&| ||"|%f||d?<ndA|&||%f||d?<d||k r |#dk rdB|&| ||"|%|fg||d<ndC|&||%|fg||d<d||k rt| )D].\} }|||d?r(||d| q(W||dsr||d=t*||rt+||d?| ||d?<qWxt|D]}||dkrd||kr||d|d<|ddkrdG|kr"|dG|kr"t,||||dG||<dH|kr|dH}*d }+d},|*dId}-|*|-k }+|-dJd}*|*|-k },t-d  |*}|rXt.|dK|d0\}.}/}}0t/|.|/\}1}2}3|.||d <|1rd|1kryt|1di| |1d<Wntk rYnX|1||d<|2r|2||d<|3r&|3||dL<|+r>t||dI||<|,rlt||dJ||<ntdMt|dHqW|ddNkr dO|krt|d|dO}4nt|d}4x4t|D]$}t#t0t1||r|4|qWdP|krN|42t|dPxFt|dPD]2}x*|dP|D]}||4kr*|4|q*WqW|ddkrdG|krv|4|dGn|4|d|ddQkr|d}5|5|krd||5kr||5d|d<|ddRkr|42t|x&t|D]}||4kr||=qW|S)SNrrrrYrr)rrrz \w[\w\d_$]*z.*\b%s\brr,rZ undefinedzCanalyzevars: typespec of variable %s is not defined in routine %s. rrKrr)NNNNNrwrrrrrrrmrrrcSsg|] }|qSr")rt)r[r*r"r"r#r]@ szanalyzevars..z@,@r{z\n\nz z\n rcSsg|] }|qSr")rt)r[r*r"r"r#r]Q scSsg|] }|qSr")rt)r[r*r"r"r#r]X scSsg|] }|qSr")rt)r[r*r"r"r#r]^ sr:z(?P.*?)\bz\b(?P.*)rrz@:@r1z1 * z/(1)rLzoanalyzevars: character array "character*%s %s(%s)" is considered as "character %s(%s)"; "intent(c)" is forced. rrz'analyzevars: charselector=%r unhandled.r z.*?\bz\brz %s%s(%s,%s)%sz %slen(%s)%sz%s%s(%s,%i)%s==%sz%slen(%s)%s>=%srr)rrrwr-Zpure recursiverrz'analyzevars: prefix (%s) were not used )r+rz python modulez block datarr)rrrU)3rrr=rrrrKeyErrorrDrrrrrHrrrr*rr|rIrreversertrrrr_rrKrZ isintent_cZ isstringarrayrXrZl_orZ isintent_inZisintent_inoutZisintent_inplacerrrZisscalarrrrr?rNisintent_callbackZ isintent_auxextend)6rrrrgenryrZsvarsrrr\Z dep_matchesZ name_matchr^rZln0rZ savelindimsrWZdimrrrrrtmprrrrrdZdiZ shape_macror)rgniZddepsadpdriZaarprZispureZisrecZpr1r,rVrXrarbrZ neededvarsrYr"r"r#r s~         $            "    &                &       (                             rz\A[a-z]+[\w$]*\Zc Csr|}t| }|rt|\}}t||d|}d}x0|D](} | } | tjtjkrZd} || }q:W|ddkr||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_rrr2_errirrrr) analyzeargs_re_1rrrErrRascii_lowercasedigitsr|r) rrrZorig_aZ a_is_exprrrZatnarrr"r"r# expr2name< s>           rcCs$t|t|\}}d|kr$g|d<g}x&|dD]}t|||}||q2W||d<d|krxBt|dD].\}}x$|D]}||dkri|d|<qWqrWxN|dD]B}|d|krd|krg|d<|d|dkr|d|dqWd|kr |d|dkr i|d|d<|S)NrrrrrYrrw)rrrrrr)rrrrrrZargs1rr"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,r.r-r3)rRr/r1r3rrr)rir"r"r#_ensure_exprdict s    rcCs||krt||S|}t|r.ddiSt|}|rjd|krb|drbtdt|ddiSt |}|rd|kr|drtdt|ddiSxNdD]F}x@dd t ||d  d |d DD]}||krt||SqWqWi}t |rt |d d ||}nft|}|r|d}t |d||}|r^d|kr^|d=|s|d|krt||dS|ddkrdddidS|stdt||S)Nr,r3rYz:determineexprtype: selected kind types not supported (%s) r.r-)+r5rrecSsg|] }|qSr")rt)r[r*r"r"r#r] sz%determineexprtype..)r r rrrrz'"rlr)r,rz>determineexprtype: could not determine expressions (%s) type. )rrtdetermineexprtype_re_1rdetermineexprtype_re_2rrr*rdetermineexprtype_re_3rrdetermineexprtype_re_4rEdetermineexprtype_re_5)rnrrulesropr2rUZrnr"r"r#rE sN     *   rErFcCst|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| | qW|dd ks| rd d | }d} d |krJx6t|d  D]"} d | |t | |d | f} q$W| dgdd}|d kr|d|kr|| d|rd| |t d ||f} d}d|krt|d|t }d}d|krt|d|t }|dkrd}d}d|kr d|d}|d| kr | |dt|d|t }t||d| |t |d} d}d|krl|sld|d}d|krd}x8t|dD]$\} }d||t | d |f}qW||}|dkr|dkrd}d|||||||| || |||||f}|S)Nrr)rrrY)rr&rrrz(%s)rrz %s%s%s %srcallbackz%s%sintent(%s) %srrr,rwz result (%s)rr'z! 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)rrRrrrrrrrrrr rr< use2fortrancommon2fortran vars2fortranr)rrrrrr-rYrZ blocktypeZargslrrrrZ intent_lstrrrwrZmessZ entry_stmtsrgr"r"r#r s                $rc CsZd}xPt|D]@}|dkr8d||d||f}qd|||d||f}qW|S)Nrr7z %s%scommon %srz%s%scommon /%s/ %s)rrr)rrrrr"r"r#r s rcCsd}x t|D]}d|||f}||ikrP|r|ddkr|dd}qd||krp||drpd|}d||kr||drd}xdt||dD]L}|||d|krd |||f}d}qd |||||d|f}d}qW|r|ddkr|dd}qW|S) Nrz %s%suse %s,rrr8z%s only:r:r{z%s%s%sz %s%s%s=>%s)rr)rrrrrrr"r"r#r s(  rc CsX|d}g}xF|D]>}ytd|}Wntk r<YqX||r||qW|S)Nrz isintent_%s)globalsrr)rrrrrxr"r"r#true_intent_list) s rc Cst|d}g}x"|D]}||dkr||qWd|krvx8|dD],}||krf||krr||qFtd|qFWd|kr||d|sx&t|D]}||kr||qWxV|D]L}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|ddksqd ||krvd||kr\d||dkr\||krd |||f}qt||t d|q||d } | dkrd||krd| ||df} i} d||kr||d} nd||kr||d} d| kr$| ddkrd| | df} nd| | df} nZd | krdd!| | d f} d"| krZd#| | d"f} nd$| } nd"| kr~d%| | d"f} d&} d||krd'd(||dD}|rd)| d* |f} d*} d+||krd,| | d* ||d+f} d*} d-||kr(t ||}|r$d.| | d* |f} d*} d/||krVd0| | d* ||d/f} d*} d||krd1| | d* ||df} d*} d2||kr||d2}||d d3kryt |}d4|j |jf}Wntk rYnXd5| ||f} n d6| |f} d7||| f}qW|S)8z& TODO: public sub ... rrrz7vars2fortran: Confused?!: "%s" is not defined in vars. r/rzHvars2fortran: Warning: cross-dependence between variables "%s" and "%s" rz%s%sintent(callback) %sz%s%sexternal %sz%s%soptional %sr,rrrYrrrz/vars2fortran: No definition for argument "%s". rrz-vars2fortran: No typespec for argument "%s". rUrz%s(%s)rrr)rrz%s*(%s)z%s*%srKz %s(len=%srz %s,kind=%s)z%s)z %s(kind=%s)r{cSsg|]}|dkr|qS))rr")r[rr"r"r#r] sz vars2fortran..z%s, %srrz%s%sdimension(%s)rz%s%sintent(%s)rz %s%scheck(%s)z%s%sdepend(%s)r)r3zdouble complexz(%s,%s)z %s :: %s=%sz%s :: %sz%s%s%s)rrrXrrrrZ isoptionalshowr*rrrIr-imagr)rrrrrrZnoutrrrrZvardefrVrrWrr^r"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     rcCs$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-verboserz-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form. z-skipemptyendsz--ignore-containsz-f77z-f90r~z-hz-showz-mr5zUnknown 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 r)r)r)r)r)r)r)r)r)N)rN)Nr)r)NN)r)rr)rF)r)r)rF)__doc__r%rRrrrr=rrrZauxfuncsversionrrr r r r r rrrrrrrrrrrrrrrr rrr!rrrrr$r* _MAXCACHErrrWr`ryrZr_rarbrhrrrrrrrrsrrurzrrZbeforethisafterZ fortrantypesrrMrrZ groupbegins77rZ groupbegins90rZ groupendsrZendifsrrrrrrrrrrrrrrrrrrrSrrrrrrrrrrrmr#r$rFrr r!r%rrSr?rBrrrrxrorsr@rNrrrrrrrrrrrrrrrrrrrrrrrrrrDrrrrrrrrrrrrrrErrrrrrr __name__rfuncsrxf2Zf3Z showblocklistargvrrXrrprrIOErrorZdetailr|rrr'r"r"r"r#sD &     R        '     9       `"+ " 3     Y ^ %  - K  z              $