o 6aTU@sdZddlZddlZddlZddlmZddlmZddlmZgdZ ej Z ej j ZejZiZgZdZdd Zd d Zd d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Z d$d%Z!d&d'Z"d(d)Z#d*d+Z$d,d-Z%d.d/Z&d0d1Z'd2d3Z(d4d5Z)d6d7Z*d8d9Z+d:d;Z,dd?Z.d@dAZ/dBdCZ0dDdEZ1dFdGZ2dHdIZ3dJdKZ4dLdMZ5dNdOZ6dPdQZ7dRdSZ8dTdUZ9dVdWZ:dXdYZ;dZd[Zd`daZ?dbdcZ@dddeZAdfdgZBdhdiZCdjdkZDdldmZEdndoZFdpdqZGdrdsZHdtduZIdvdwZJdxdyZKdzd{ZLd|d}ZMd~dZNddZOddZPddZQddZRddZSddZTddZUddZVddZWddZXeJdeKdeLdeMdePdeOdeGdeTdeVdeWdeXdi ZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbddZcddZdddZeGdddefZgGdddZhddZiddZjddZkdd„ZlddĄZmdddƄZnddȄZoifddʄZpdd̄Zqdd΄ZrddЄZsdd҄ZtddԄZuddքZvdd؄ZwddڄZxdd܄Zyddd߄ZzddZ{ifddZ|dS)aW Auxiliary functions for f2py2e. Copyright 1999,2000 Pearu Peterson all rights reserved, Pearu Peterson Permission to use, modify, and distribute this software is given under the terms of the NumPy (BSD style) LICENSE. NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. $Date: 2005/07/24 19:01:55 $ Pearu Peterson N)reduce) __version__)cfuncs)R applyrules debugcapi dictappenderrmessgentitlegetargs2getcallprotoargumentgetcallstatementgetfortrannamegetpymethoddef getrestdoc getusercode getusercode1hasbodyhascallstatement hascommon hasexternals hasinitvaluehasnote hasresultnote isallocatableisarrayisarrayofstrings iscomplexiscomplexarrayiscomplexfunctioniscomplexfunction_warnisdoubleisdummyroutine isexternal isfunctionisfunction_wrap isint1array isinteger isintent_aux isintent_cisintent_callback isintent_copy isintent_dict isintent_hide isintent_inisintent_inoutisintent_inplaceisintent_nothide isintent_outisintent_overwrite islogicalislogicalfunctionislong_complex islong_doubleislong_doublefunction islong_longislong_longfunctionismoduleismoduleroutine isoptional isprivate isrequired isroutineisscalarissigned_long_longarrayisstring isstringarrayisstringfunction issubroutineissubroutine_wrap isthreadsafe isunsignedisunsigned_charisunsigned_chararrayisunsigned_long_longisunsigned_long_longarrayisunsigned_shortisunsigned_shortarrayl_andl_notl_oroutmessreplaceshow stripcomma throw_errorcCs tddrtj|dSdS)Nverboser)optionsgetsysstdoutwrite)tr_5/usr/lib/python3/dist-packages/numpy/f2py/auxfuncs.pyrS>s rScCsdtvS)Ncapi) debugoptionsvarr_r_r`rCrcCsd|vo|ddkot| S)Ntypespec characterr#rcr_r_r` _isstringGsricCst|ot| SN)rirrcr_r_r`rCLrCcCst|od|vS)N charselectorrCrcr_r_r` ischaracterPrncCst|ot|Srj)rrircr_r_r`rDTrorDcCst|o |dddkS)N dimensionz(*))rDrcr_r_r`rXsrcCsd|vot| SNrprhrcr_r_r`r^rkrcCst|p t|p t| Srj)rrCr#rcr_r_r`rAbsrAcCt|o |ddvSNrf)complexzdouble complexrArZrcr_r_r`rf rcCt|o |ddkS)Nrflogicalrvrcr_r_r`r4kr4cCrx)Nrfintegerrvrcr_r_r`r'orzr'cCrx)Nrfrealrvrcr_r_r`isrealsrzr}c CsHz|ddWSty#z |ddWYSty"YYdSww)N kindselector*kindKeyErrorrcr_r_r`get_kindws  rcCs*t|sdS|ddvrdSt|dkS)Nrrfr{ry8rArZrrcr_r_r`r9  r9cC*t|sdS|ddkrdSt|dkS)Nrrfr{-1rrcr_r_r`rJrrJcCr)Nrrfr{-2rrcr_r_r`rNrrNcCr)Nrrfr{-4rrcr_r_r`rIrrIcCr)Nrrfr{-8rrcr_r_r`rLrrLcC*t|sdS|ddksdSt|dkS)Nrrfr|rrrcr_r_r`r!rr!cCr)Nrrfr|16rrcr_r_r`r7rr7cCst|sdSt|dkS)Nr32)rrrcr_r_r`r6s r6cCrsrt)rrZrcr_r_r`rrwrcCs"t|o|ddkot|dkS)Nrfr{1rrZrrcr_r_r`r& r&cC"t|o|ddvot|dkS)Nrfrrrrcr_r_r`rKrrKcCr)Nrfrrrrcr_r_r`rOrrOcCr)Nrfrrrrcr_r_r`isunsignedarrayrrcCr)Nrfrrrrcr_r_r`rMrrMcCr)Nrfrrrrcr_r_r`issigned_chararrayrrcCr)Nrfr2rrcr_r_r`issigned_shortarrayrrcCr)Nrfr4rrcr_r_r`issigned_arrayrrcCr)Nrfrrrrcr_r_r`rBrrBcCd|vo d|dvS)Nattrspec allocatabler_rcr_r_r`rrcCsd|vpt| Srrrmrcr_r_r` ismutablerkrcCd|vS)N modulenamer_routr_r_r`r<rer<cCd|vo d|dkS)Nblockmoduler_rr_r_r`r;rr;cCr)Nrfunctionr_rr_r_r`r$rr$cCs"t|rdStot|ot| SNr)r) wrapfuncsr$r#rr_r_r`r%sr%cCr)Nr subroutiner_rr_r_r`rF rrFcCst|rdSt|o t|Sr)r)rFhasassumedshaperr_r_r`rGrGcCsV|drdS|dD]}|d|idgD]}|dkr'd|d<dSqq dS)NrTargsvarsrp:FrZ)radr_r_r`rs  rcCt|pt|Srj)r<rrr_r_r`requiresf90wrapper rorcCrrj)r$rFrr_r_r`r@$ror@cCFt|sdSd|vr|d}n|d}||dvr!t|d|SdSNrresultnamer)r$r4rrr_r_r`r5(  r5cCrr)r$r9rr_r_r`r:4rr:cCrr)r$r7rr_r_r`r8@rr8cCrr)r$rrr_r_r`rLrrcCst|r tddSdS)Na ************************************************************** Warning: code with a function returning complex value may not work correctly with your Fortran compiler. Run the following test before using it in your applications: $(f2py install dir)/test-site/{b/runme_scalar,e/runme} When using GNU gcc/g77 compilers, codes should work correctly. ************************************************************** rr)rrSrr_r_r`r Xsr cCrr)r$rCrr_r_r`rEfrrEcCd|vo|dS)N externalsr_rr_r_r`rrrorcCr)Nf2pyenhancements threadsafer_rr_r_r`rHvs rHcCr)Nrr_rr_r_r` hasvariables{rorcCs(d|vod|dvod|dvot|S)Nroptionalrequired)r1rcr_r_r`r=s  r=cCr)Nrexternalr_rcr_r_r`r#rr#cCst| ot|Srj)r=r1rcr_r_r`r?rkr?cCspd|vrdSd|dvrdSd|dvrdSd|dvrdSd|dvr&dSd|dvr.dSd |dvr6dSdS) Nintentrhiderinplaceinoutinoutoutinr_rcr_r_r`r.s      r.cCsDd|vo!d|dvsd|dvo!d|dvo!d|dvo!d|dvS)Nrrrrrrr_rcr_r_r`r/s    r/cCd|dgvS)Nrrrrcr_r_r`r2ror2cCs<d|vod|dvpd|dvod|dvottt| S)Nrrrr)rRr/r0rcr_r_r`r-sr-cCs t| Srj)r-rcr_r_r`r1 r1cCr)Ncrrrcr_r_r`r)ror)cCr)Ncacherrrcr_r_r`isintent_cacherorcCr)Ncopyrrrcr_r_r`r+ror+cCr)N overwriterrrcr_r_r`r3ror3cCr)Ncallbackrrrcr_r_r`r*ror*cCr)Nrrrrcr_r_r`r0ror0cCr)Nauxrrrcr_r_r`r(ror(cCr)Naligned4rrrcr_r_r`isintent_aligned4rorcCr)Naligned8rrrcr_r_r`isintent_aligned8rorcCr)N aligned16rrrcr_r_r`isintent_aligned16ror INTENT_IN INTENT_INOUT INTENT_OUT INTENT_HIDE INTENT_CACHEINTENT_COPTIONALINTENT_INPLACEINTENT_ALIGNED4INTENT_ALIGNED8INTENT_ALIGNED16cCr)Nrprivater_rcr_r_r`r>rr>cCr)N=r_rcr_r_r`rrercCst|sdS|dddvS)Nrr)"')rrcr_r_r`hasinitvalueasstringrrcCr)Nnoter_rcr_r_r`rrercCrr)r$rrr_r_r`rrrcCr)Ncommonr_rr_r_r`rrercCs4t|rdSt|r|dD] }t|rdSqdS)Nrbodyr)rrcontainscommon)rbr_r_r`rs rcCs8t|rdSt|s dS|dD] }t|rdSqdS)Nrrr)r;rcontainsmodule)rrr_r_r`rs rcCr)Nrr_rr_r_r`rrercCs t|duSrj)r rr_r_r`rs rcCdS)Nrr_rcr_r_r`istrue"rcCrrr_rcr_r_r`isfalse&rrc@s eZdZdS) F2PYErrorN)__name__ __module__ __qualname__r_r_r_r`r*src@seZdZddZddZdS)rWcCs ||_dSrj)mess)selfrr_r_r`__init__0rzthrow_error.__init__cCsd||jf}t|)Nz var = %s Message: %s )rr)rrdrr_r_r`__call__3szthrow_error.__call__N)rrrrrr_r_r_r`rW.s rWcGNdg}}tt|D]}d|||f}|d|q td|d|fS)Nlambda v %s,f%d=f[%d]f%d(v)%s:%sz and rangelenappendevaljoinfll2ir_r_r`rP8 rPcGr)Nrrrrz or rrr_r_r`rR@r rRcCstdS)Nzlambda v,f=f:not f(v))r)rr_r_r`rQHrerQcCs(z |dddkWStyYdSw)Nr fortrannamerrrr_r_r`r"Ls  r"cCsTz|dd}|dkr t|std|dtW|Sty)|d}Y|Sw)Nrr r z"Failed to use fortranname from %s r)rr )rrr_r_r`rSs  rcCs z |d|}Wn tyYdSw|sdS|dkr#t|tr#dSt|tr4|t|kr0dS||}|dddkr|rQd|dt|d|dd}n|dd}|dddkry|rq|ddd t|d }|S|dd}|Std |t|f|S) Nrrz'''z /* start z multiline (z) */ z /* end multiline (z)*/z-%s multiline block should end with `'''`: %s )rZr isinstancestrlistrreprr )r blocknamecommentcounterrr_r_r`getmultilineblockasF       rcC t|dS)N callstatementrrr_r_r`r rr c Cst|ddd}|r |St|rtddSddlm}gg}}tttt|r0| ddg|d D]B}|d |}t |rAq4||vrL||d }n%||}tt t t t|r[n t|r`n|d }t|slt|rq|d||q4d ||} | sd} | S)Ncallprotoargumentr)rz      r cCr)Nusercoderrr_r_r`rrrcCst|dddS)Nr)r)rrrr_r_r`rsrcCr)N pymethoddefrrr_r_r`rrrcCsvgg}}d|vr7|d}d|vr3|dD] }||vr ||q|D] }||vr.||q#||fS|d}||fS)Nrsortvars)r)rsortargsrrr_r_r`getargss    r-csgdg}fdddD}|dvrAdD] }|vr.||q#D] }||vr<||q1|fS|d}|fS)Nrcs(g|]}td|r|vr|qS)r)r().0rrrr_r` szgetargs2..rr+)rZkeysr)rr,auxvarsrr_r/r`r s    r cCs<d|vrdSd}|ddkr|d|df}|d|dS)Nf2pymultilinesrz python modulerr)rkr_r_r`rs  rcCs*dt|dd}d|d||dfS)NPz /*%s %s %s*/r)r)rrr_r_r`r sr cCs$t|trttfdd|gS|gS)NcSs |||Srjr_)xyrr_r_r`s zflatlist..)rrrflatlist)rr_r_r`r;s r;cCs |r|ddkr|ddS|S)Nrqrr_)sr_r_r`rVs rVr c sttrfddDSttrfddDSdtD];}|dkr-q&dvr>|dvr>d|}n}t|trWd||t|q&d||q&S)Ncsg|]}t|qSr_rTr._m) defaultseprr_r`r0zreplace..csg|]}t|qSr_r=r>)rr@r_r`r0rAr7 separatorsforz#%s#)rrr1rTrr;)rrr@r4sepr_)rr@rr`rTs   rTcCs(t|tr|D]}t||}q|S|D]|}|ddkrq||vrt||tr0||g||<t||trSt||trI||||||<q||||qt||trt||tr|dkr||D]}|||vr}||||||<qkqt||||||<q||||<q|S)Nr_rB)rrrr1rrdict)rdarrr4k1r_r_r`rs4     rc Csi}t|tr |D]}t|||}t||}d|vr|Sq |Sd|vr,|d|s,|Sd|vrEtd|di||}d|vrEt|d|D]}|dkrV||||<qIt||trgt|||||<nt||trg||<||D]}t||i||} || vr|| | |qvn|ddkrqIt||t rg||<||D]l} t| t j r| |rt||| tr||| D]$}t|t rtd|i||}d|vr|d}nd }|| t||qq||| }t|t r td|i|}d|vr|d}nd }|| t||qn t d t||t||trCt||d kr9||d||<||gkrC||=qI|S) N_break_checkneedneedsrBrrD supertextr zapplyrules: ignoring rule %s. r)rrrrr append_needsr1rrTrrEtypes FunctionTyper rr) rulesrrdretrrrresr4r rGrHr_r_r`rs|            r)rr)r )}__doc__pprintr[rO functoolsrr rr__all__version f2py_versionstderrr]r rUrYrbrrSrrirCrnrDrrrArr4r'r}rr9rJrNrIrLr!r7r6rr&rKrOrrMrrrrBrrr<r;r$r%rFrGrrr@r5r:r8rr rErrHrr=r#r?r.r/r2r-r1r)rr+r3r*r0r(rrrr,r>rrrrrrrrrrr ExceptionrrWrPrRrQr"rrr r rrrr-r rr r;rVrTrrr_r_r_r`s                 $