B []BUR@sdZddlmZmZmZddlZddlZddlZddlm Z ddl m Z ddl m Z dd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYgRZ e jZejjZejZiZgZdZdZdUZd[d Zd\d]Zd^dEZd_d`ZdadFZdbdZdcdZdddCZdedZ dfd6Z!dgd)Z"dhdiZ#djdkZ$dld;Z%dmdLZ&dndPZ'dodKZ(dpdNZ)dqd#Z*drd9Z+dsd8Z,dtd Z-dud(Z.dvdMZ/dwdQZ0dxdyZ1dzdOZ2d{d|Z3d}d~Z4ddZ5ddDZ6ddZ7ddZ8dd>Z9dd=Z:dd&Z;dd'ZddZ?ddBZ@dd7ZAdd<ZBdd:ZCdd!ZDdd"ZEddGZFddZGddJZHddZIdd?ZJdd%ZKddAZLdd0ZMdd1ZNdd4ZOdd/ZPdd3ZQdd+ZRddZSdd-ZTdd5ZUdd,ZVdd2ZWdd*ZXddZYddZZddZ[eMdeNdeOdePdeSdeRdeJdeWdeYdeZde[di Z\dd@Z]ddZ^ddZ_ddZ`ddZaddZbddZcddÄZdddZeddZfddDŽZgddɄZhGdd˄deiZjGddYdYekZlddRZmddTZnddSZodd$ZpddZqdddӄZrddZsifddZtddZuddZvddZwddڄZxdd ZyddZzdd Z{dd߄Z|ddXZ}dddVZ~dd ZifddZdS)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 )divisionabsolute_importprint_functionN)reduce) __version__)cfuncs 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_errorcCstddrtj|dS)Nverboser)optionsgetsysstdoutwrite)trb6/tmp/pip-install-svzetoqp/numpy/numpy/f2py/auxfuncs.pyrV@s cCsdtkS)NZcapi) debugoptions)varrbrbrcr EscCsd|ko|ddkot| S)Ntypespec character)r&)rerbrbrc _isstringIsrhcCst|ot| S)N)rhr)rerbrbrcrFNscCst|od|kS)NZ charselector)rF)rerbrbrc ischaracterRsricCst|ot|S)N)rrh)rerbrbrcrGVscCst|o|dddkS)N dimensionz(*))rG)rerbrbrcrZscCsd|kot| S)Nrj)r&)rerbrbrcr`scCst|pt|pt| S)N)rrFr&)rerbrbrcrDdscCst|o|ddkS)Nrf)complexzdouble complex)rDr])rerbrbrcr hscCst|o|ddkS)Nrflogical)rDr])rerbrbrcr7mscCst|o|ddkS)Nrfinteger)rDr])rerbrbrcr*qscCst|o|ddkS)Nrfreal)rDr])rerbrbrcisrealusrpc CsHy |ddStk rBy |ddStk r<YnXYnXdS)NZ kindselector*kind)KeyError)rerbrbrcget_kindys  rtcCs*t|s dS|ddkrdSt|dkS)Nrrf)rnrm8)rDr]rt)rerbrbrcr<s cCs*t|s dS|ddkrdSt|dkS)Nrrfrnz-1)rDr]rt)rerbrbrcrMs cCs*t|s dS|ddkrdSt|dkS)Nrrfrnz-2)rDr]rt)rerbrbrcrQs cCs*t|s dS|ddkrdSt|dkS)Nrrfrnz-4)rDr]rt)rerbrbrcrLs cCs*t|s dS|ddkrdSt|dkS)Nrrfrnz-8)rDr]rt)rerbrbrcrOs cCs*t|s dS|ddksdSt|dkS)Nrrfroru)rDr]rt)rerbrbrcr$s cCs*t|s dS|ddksdSt|dkS)NrrfroZ16)rDr]rt)rerbrbrcr:s cCst|s dSt|dkS)NrZ32)r rt)rerbrbrcr9scCst|o|ddkS)Nrf)rlzdouble complex)rr])rerbrbrcr!scCs"t|o |ddko t|dkS)Nrfrn1)rr]rt)rerbrbrcr)scCs"t|o |ddko t|dkS)Nrf)rnrmz-1)rr]rt)rerbrbrcrNscCs"t|o |ddko t|dkS)Nrf)rnrmz-2)rr]rt)rerbrbrcrRscCs"t|o |ddko t|dkS)Nrf)rnrmz-4)rr]rt)rerbrbrcisunsignedarraysrwcCs"t|o |ddko t|dkS)Nrf)rnrmz-8)rr]rt)rerbrbrcrPscCs"t|o |ddko t|dkS)Nrf)rnrmrv)rr]rt)rerbrbrcissigned_chararraysrxcCs"t|o |ddko t|dkS)Nrf)rnrm2)rr]rt)rerbrbrcissigned_shortarraysrzcCs"t|o |ddko t|dkS)Nrf)rnrm4)rr]rt)rerbrbrcissigned_arraysr|cCs"t|o |ddko t|dkS)Nrf)rnrmru)rr]rt)rerbrbrcrEscCsd|kod|dkS)NattrspecZ allocatablerb)rerbrbrcrscCsd|kpt| S)Nrj)rF)rerbrbrc ismutablesr~cCsd|kS)N modulenamerb)routrbrbrcr?scCsd|kod|dkS)Nblockmodulerb)rrbrbrcr>scCsd|kod|dkS)Nrfunctionrb)rrbrbrcr'scCs"t|r dSto t|o t| S)Nr)r, wrapfuncsr'r&)rrbrbrcr(scCsd|kod|dkS)NrZ subroutinerb)rrbrbrcrI scCst|r dSt|ot|S)Nr)r,rIhasassumedshape)rrbrbrcrJscCsZ|drdSxF|dD]:}x4|d|idgD]}|dkr6d|d<dSq6WqWdS)NrTargsvarsrj:F)r])radrbrbrcrs  rcCst|pt|S)N)r'rI)rrbrbrcrC!scCsFt|s dSd|kr|d}n|d}||dkrBt|d|SdS)Nrresultnamer)r'r7)rrrbrbrcr8%s  cCsFt|s dSd|kr|d}n|d}||dkrBt|d|SdS)Nrrrr)r'r<)rrrbrbrcr=1s  cCsFt|s dSd|kr|d}n|d}||dkrBt|d|SdS)Nrrrr)r'r:)rrrbrbrcr;=s  cCsFt|s dSd|kr|d}n|d}||dkrBt|d|SdS)Nrrrr)r'r )rrrbrbrcr"Is  cCst|rtddSdS)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)r"rV)rrbrbrcr#Us cCsFt|s dSd|kr|d}n|d}||dkrBt|d|SdS)Nrrrr)r'rF)rrrbrbrcrHcs  cCsd|ko|dS)NZ externalsrb)rrbrbrcroscCsd|kod|dkS)Nf2pyenhancementsZ threadsaferb)rrbrbrcrKsscCsd|ko|dS)Nrrb)rrbrbrc hasvariablesxsrcCs(d|ko&d|dko&d|dko&t|S)Nr}optionalrequired)r4)rerbrbrcr@|scCsd|kod|dkS)Nr}Zexternalrb)rerbrbrcr&scCst| ot|S)N)r@r4)rerbrbrcrBscCspd|kr dSd|dkrdSd|dkr,dSd|dkrrcontainsmodule)rrrbrbrcr srcCsd|kS)Nrrb)rrbrbrcrscCs t|dk S)N)r)rrbrbrcrscCsdS)Nrrb)rerbrbrcistruesrcCsdS)Nrrb)rerbrbrcisfalse#src@s eZdZdS) F2PYErrorN)__name__ __module__ __qualname__rbrbrbrcr'src@seZdZddZddZdS)rZcCs ||_dS)N)mess)selfrrbrbrc__init__-szthrow_error.__init__cCsd||jf}t|dS)Nz var = %s Message: %s )rr)rrerrbrbrc__call__0szthrow_error.__call__N)rrrrrrbrbrbrcrZ+scGsRdg}}x0tt|D] }d|||f}|d|qWtd|d|fS)Nzlambda vz %s,f%d=f[%d]zf%d(v)z%s:%sz and )rangelenappendevaljoin)fll2irbrbrcrS5s  cGsRdg}}x0tt|D] }d|||f}|d|qWtd|d|fS)Nzlambda vz %s,f%d=f[%d]zf%d(v)z%s:%sz or )rrrrr)rrrrrbrbrcrU=s  cCstdS)Nzlambda v,f=f:not f(v))r)rrbrbrcrTEscCs*y|dddkStk r$dSXdS)Nr fortrannamer)rs)rrbrbrcr%IscCsVy4|dd}|dkrt|s2td|dtWntk rP|d}YnX|S)Nrrrz"Failed to use fortranname from %s r)rsr )rrrbrbrcrPs  cCsy|d|}Wntk r&dSX|s0dS|dkrFt|trFdSt|trh|t|kr`dS||}|dddkr|rd|dt|d|dd}n |dd}|dddkr|r|ddd t|d }n |dd}ntd |t|f|S) Nrrz'''z /* start z multiline (z) */ z /* end multiline (z)*/z-%s multiline block should end with `'''`: %s )r]rs isinstancestrlistrreprr )rZ blocknamecommentcounterrrbrbrcgetmultilineblock^s.  & rcCs t|dS)NZ callstatement)r)rrbrbrcr|sc Cst|ddd}|r|St|r*tddSddlm}gg}}tttt|r`| ddgx|d D]}|d |}t |rqj||kr||d }nJ||}tt t t t|rnt|rn|d }t|st|r|d||qjWd ||} | s d} | S)NZcallprotoargumentr)rzszgetargs2..rr)r]keysr)rrZauxvarsrrb)rrrcrs  cCs<d|kr dSd}|ddkr,|d|df}|d|dS)NZf2pymultilinesrz python moduler)r])rkrbrbrcrs  cCs*dt|dd}d|d||dfS)NPz /*%s %s %s*/rq)r)rrrbrbrcr scCs$t|trttfdd|gS|gS)NcSs |||S)Nrb)xyrrbrbrczflatlist..)rrrflatlist)rrbrbrcrs rcCs |r|ddkr|ddS|S)Nrkrrb)srbrbrcrYs rc sttrfddDSttr<fddDSxdtD]v}|dkr\qNdkr~|dkr~d|}n}t|trd||t|qNd||qNWS)Ncsg|]}t|qSrb)rW)r_m) defaultseprrbrcrszreplace..csg|]}t|qSrb)rW)rr)rrrbrcrsr separatorsforz#%s#)rrrrWrr)rrrrseprb)rrrrcrWs   cCs@t|tr&x|D]}t||}qW|Sx|D]}|ddkrFq2||kr,t||trl||g||<t||trt||tr||||||<n||||nxt||tr8t||tr8|dkrxL||D]$}|||kr||||||<qWnt||||||<q2||||<q2W|S)Nr_r)rrr rrrdict)rdarrrk1rbrbrcr s.      c Csi}t|tr@x,|D]$}t|||}t||}d|krPqW|Sd|krX|d|sX|Sd|krtd|di||}d|krt|dx |D]}|dkr||||<qt||trt|||||<nt||tr.g||<x:||D].}t||i||} || kr|| | |qWn:|ddkrBqn&t||t rTg||<x||D]} t| t j rh| |rht||| trx||| D]N}t|t rtd|i||}d|kr|d}nd }|| t||qWnR||| }t|t r8td|i|}d|kr4|d}nd }|| t||qhWnt d t||t||trt||d kr||d||<||gkr||=qW|S) N_break_checkZneedZneedsrrrZ supertextrzapplyrules: ignoring rule %s. r)rrr r rZ append_needsrrrWrrtypes FunctionTyper rr) rulesrreretrrrresrrrrrbrbrcr sl              )rr)r)__doc__ __future__rrrpprintr^r functoolsrrrr__all__versionZ f2py_versionstderrr`r rXr\rdrrVr rhrFrirGrrrDr r7r*rprtr<rMrQrLrOr$r:r9r!r)rNrRrwrPrxrzr|rErr~r?r>r'r(rIrJrrCr8r=r;r"r#rHrrKrr@r&rBr1r2r5r0r4r,rr.r6r-r3r+rrrr/rArrrrrrrrrrr ExceptionrobjectrZrSrUrTr%rrrrrrrrrrr rrYrWr r rbrbrbrcs$                    $