id DdZdgZddlZddlZddlmZddlmZGddeZGdd eZ Gd d eZ Gd d eZ Gdde Z GddeZefZeefZdZGddeZdZGddZdZdZdZd;dZd;dZd;dZdz{Fortran/C symbolic expressions References: - J3/21-007: Draft Fortran 202x. https://j3-fortran.org/doc/year/21/21-007.pdf ExprN)Enum)gcdceZdZdZdZdZdZdS)Languagez2 Used as Expr.tostring language argument. rN)__name__ __module__ __qualname____doc__PythonFortranCH/opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/f2py/symbolic.pyrrs)FG AAArrcNeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdS)Opz$ Used as Expr op attribute. (di,iii i N)r r r r INTEGERREALCOMPLEXSTRINGARRAYSYMBOLTERNARYAPPLYINDEXINGCONCAT RELATIONALTERMSFACTORSREFDEREFrrrrr&seG DG F E FG EH FJ EG C EEErrcbeZdZdZdZdZdZdZdZdZ e e j fdZ e j fd Zd S) RelOpzH Used in Op.RELATIONAL expression to specify the function part. rr cn|tjur]tjtjtjtjtjtjd| Stjtjtjtjtjtjd|S)N).eq..ne..lt..le..gt..ge.)==!=<<=>>=) rrr0EQNELTLEGTGElower)clsslanguages r fromstringzRelOp.fromstringFs x' ' '!Heh!Heh!Heh8889 C ChehUXhUXUX???@B Brc ^|tjurPtjdtjdtjdtjdtjdtjdi|Stjdtjdtjd tjd tjd tjd i|S) Nr6r7r8r9r:r;r<r=r>r?r@rA) rrr0rBrCrDrErFrGselfrKs rtostringzRelOp.tostringOs x' ' 'HfehHfehHfeh88<> >$$#ux#ux//35 5rN)r r r r rBrCrDrErFrG classmethodrrrLrPrrrr0r0;s B B B B B B$,JBBB[B!) 555555rr0c.eZdZdZdZdZdZdZdZdZ dZ d S) ArithOpzC Used in Op.APPLY expression to specify the function part. rr r1r2r3r4N) r r r r POSNEGADDSUBMULDIVPOWrrrrSrSYs= C C C C C C CCCrrSceZdZdS)OpErrorNr r r rrrr]r]fDrr]cFeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdS) Precedencez4 Used as Expr.tostring precedence argument. rrr r1r2r4rT r rrN)r r r r ATOMPOWERUNARYPRODUCTSUMrDrBLANDLORr&ASSIGNTUPLENONErrrrarajs[ D E EG C B B D CG F E DDDrracd||}||||<dS||z}|r|||<dS||=dSN)get)dkvcs r _pairs_addrvsL aAy! E  AaDDD!rceZdZdS) ExprWarningNr^rrrrxrxr_rrxc>tj|tddS)Nr ) stacklevel)warningswarnrx)messages rewarnr~s M';1555555rc eZdZdZeejfdZdZdZ dZ dZ dZ dZ d Zd Zd Zejejfd Zd ZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'd Z(d!Z)d"S)#rzfRepresents a Fortran expression as a op-data pair. Expr instances are hashable and sortable. c$t||S)z.Parse a Fortran expression to a Expr. rK)rL)rJrKs rparsez Expr.parses!h////rc|tjurn|tjurn|tjurn|tjurn|tjurn|tjtjfvrn|tjtj fvrni|tj urnZ|tj urnK|tj urn<|tj tjfvrn!|tjurnt!d|||_||_dS)Nz$unknown op or missing sanity check: )rr r!r"r#r%r$r)r+r,r'r(r&r-r.r*NotImplementedErroropdata)rOrrs r__init__z Expr.__init__s     27]]] 2:   29___29___BHbi( ( ( (BHbj) ) ) )28^^^2;    2:   BFBH% % % %2= &;r;;== = rcht|to|j|juo|j|jkSrp) isinstancerrrrOothers r__eq__z Expr.__eq__s65$'',Gux',I+ -rc|jtjtjfvr4t t |j}nd|jtjurJ|jddt t |jdz}n|j}t|j|fSNr ) rrr+r,tuplesortedritemsr'hash)rOrs r__hash__z Expr.__hash__s 7rx, , ,  1 12233DD W 9RaR=5 ! 0B0B0D0D)E)E#F#FFDD9DTWdO$$$rcHt|tr|j|jur|jj|jjkS|jtjtjfvrhtt|j tt|j kS|jtj ur|j dd|j ddkr |j dd|j ddkStt|j d tt|j d kS|j |j kStSr) rrrvaluerr+r,rrrrr'NotImplementedrs r__lt__z Expr.__lt__sP eT " " *weh&&w}ux~55w28RZ000fTY__%6%67788uz'7'7'9'9 : :;;<=w"(""9RaR=EJrrN229RaR=5:bqb>99VDIaL$6$6$8$899::U5:a=..0011>3>3339uz) )rc||kp||kSrprrs r__le__z Expr.__le__sDEM$ATE\Arc||k Srprrs r__gt__z Expr.__gt__s$77rc||k Srprrs r__ge__z Expr.__ge__s$66rcPt|jd|jd|jdSN(, ))typer rrrOs r__repr__z Expr.__repr__s.t**%AAAA49AAAArc*|Srp)rPrs r__str__z Expr.__str__ s}}rcl|jtjtjfvri|jddkr t jn t j}t|jd|jddkrd|jdndz}n|jtj urz Expr.tostring..J11"-- (88-LL111111rrrc3ZK|]%}|tjV&dSrrrs rrz Expr.tostring..$rr[]z -  + r * -0r rizpow(z ** 1/cRg|]#}|tj$SrrPrarhrargrKs r z!Expr.tostring..dsF 1 1 1$'!$ Z-?6>!-!@!@ 1 1 1rz / cRg|]#}|tj$Srrrs rrz!Expr.tostring..js<))) Z%5 II)))rc^g|]*\}}|dz|tjz+S)=)rPrarnrrsrts rrz!Expr.tostring..lsC555!QS1::jo#>#>>555rcRg|]#}|tj$Srrrs rrz!Expr.tostring..rs<...LL!1HLEE...rNcRg|]#}|tj$Srrrs rrz!Expr.tostring..ws<***LL!3hLGG***rz // cRg|]#}|tj$Srr)rarKs rrz!Expr.tostring..|sF"6"6"6&'#$**Z-=6>#-#@#@"6"6"6r?:z if z else zmerge(z tostring for z and &* ztostring for op )-rrr r!rrarirestrr"joinr%r#r$r+rrrP as_numberrhappendr,rrrangermrfr'rSrZr(r)r&rrrr-rgr.r*r0rBrCrDr)rOparent_precedencerK precedencertermstermcoeffrfactorstailbaseexpfactornameargskwargsnumerdenomcondexpr1expr2ropleftrights ` rrPz Expr.tostring s  7rz27+ + +,0IaL1,<,<*..) DIaL!!(, ! (9(9&81%7%7%7?ACAA W " " 1111&*i11111Aa# A#JJ W ! !#JDIAA W ! ! ! Ay|q  IaL3&*#JJ W  1111&*i11111Aa# A#JJ W E%dioo&7&788 # # e199B"FEEBA::==(=KKDDy||++"5zz"'}}}t}}&.0=0C0C C&LL$$$$5[[LL%%% T""""%#A+0EjoJJ W " "GD#DIOO$5$566 ' ' c!88!]]:+=4<+>>FF++eArll**!%z/A8@"/"B"B!&VHsN!;!;c1 --!%z/A8@"/"B"BC4/ !%z/?8@"/"B"B!8!8!8#!8!8!8!]]:+;4<+>>@Ls MF'NN2&&&v&&&& =%u$GCejj&6&6<<  'CA/6K++JOJJ W !% D$w{""x8:'='= 1 1 1 1+/ 1 1 1 u(((('/ ))))#')))55%+\\^^555500diioo000'_ W # #9Q>>#JJ W  di(()9H(MMMA#)JJ W di(()9H(MMMA#)JJ W % %#y Cu+.58UX2F+F+F*--)} ==h=??DNN:NAAE,,,11C''#''''AA%&B&B&BCC C  "Z%5 5 57S= rc|Srprrs r__pos__z Expr.__pos__s rc |dzS)Nrrs r__neg__z Expr.__neg__s byrc(t|}t|trg|j|jur'|jtjtjfvrMt|jd|jdzt|jd|jdS|jtj ur*|j\}}|j\}}t||z||zS|jtj urkt|jt|j}|jD]\}}t|j||t!|S|jtj ur1|jtjtjfvr|t|zS|jtjtjfvr%|jtj urt||zS|jtjur2|jtjur|t#||jdzS|jtjur2|jtjurt#||jd|zSt%|t%|zSt&SNrr)kind)as_exprrrrrr r!rrmaxr" as_complexr+dictrrv normalizeas_realas_termsr) rOrr1i1r2i2rrsrts r__add__z Expr.__add__s/ eT " " 4w%(""7rz27333$ ! uz!}4DIaL%*Q-88:::7bj((!YFB"ZFB%b2grBw7777bh&&TWd49oo66A % 0 0 2 2111"161a0000$Q<<'w"*$$bj"'5J)J)Jj////RZ111eh"*6L6L!$''%//BG##BJ(>(>ge$)A,?????BJ&&58rw+>+>t%*Q-8885@@D>>HUOO3 3rc^t|trt||zStSrpr number_typesrrrs r__radd__z Expr.__radd__- e\ * * +U##d* *rc|| zSrprrs r__sub__z Expr.__sub__svrc^t|trt||z StSrprrs r__rsub__z Expr.__rsub__rrct|}t|trN|j|jur|jtjtjfvrMt|jd|jdzt|jd|jdS|jtj ur6|j\}}|j\}}t||z||zz ||z||zzS|jtj urkt|jt|j}|jD]\}}t|j||t!|S|jtjur~t|ji}|jD]@\} } |jD]!\} } t|j| | z| | z"At!|S|jtj ur1|jtjtjfvr|t|zS|jtj ur1|jtjtjfvrt||zS|jtjur2|jtjur|t%||jdzS|jtjur2|jtjurt%||jd|zS|jtjur|t'|zS|jtjurt'||zSt)|t)|zSt*Sr)rrrrrr r!rrrr"rr,rrrvrr+rr as_factorsr) rOrrrrrrrsrtt1c1t2c2s r__mul__z Expr.__mul__s eT " "$ 8w%(""7rz27333$TYq\EJqM%A%(1uz!}%E%EGGGW **!YFB"ZFB%b2gR&7b279JKKK7bj((TWd49oo66A % 0 0 2 2111"161a0000$Q<<'W((TWb))A"&)//"3"3AAB&+j&6&6&8&8AAFB&qvrBwR@@@@A$Q<<'w"*$$bj"'5J)J)Jj////RZ''DG BG7L,L,L!$''%//BG##BJ(>(>ge$)A,?????BJ&&58rw+>+>t%*Q-8885@@w"(""huoo--RX%%~~--d##j&7&77 7rc^t|trt||zStSrprrs r__rmul__z Expr.__rmul__rrcFt|}t|tr|jtjur|jd}|dkrtdS|dkr|S|dkrn|jtjurPt|ji}|j D]\}}||z|j|<t|S|||dz zzS|dkr || zdzSttj||iSttj ||StS)Nrrr)rrrrrr rrr,rras_applyrSr[r)rOrexponentrrsrts r__pow__z Expr.__pow__s! eT " " 6x2:%% :a=q==$Q<<'q==Ka<<w"*,, "--$(IOO$5$555DAq()H AF1II(||+4HqL#9::^^ hY/B66BJx(8999GKu55 5rct|}t|tr(tt t j||StSrp)rrrrrrSrZrrs r __truediv__zExpr.__truediv__sD eT " " AXgk4??@@ @rcbt|}t|tr||z StSrprrrrrs r __rtruediv__zExpr.__rtruediv__s/ eT " " 4< rct|}t|tr)tttj||fSt Srp)rrrrrr)rrs r __floordiv__zExpr.__floordiv__!sE eT " " =T")dE];;<< <rcbt|}t|tr||zStSrprrs r __rfloordiv__zExpr.__rfloordiv__)s/ eT " " !D= rc t|gtt|Ritd|DS)Nc3>K|]\}}|t|fVdSrprrs rrz Expr.__call__..6s0JJ41a71::JJJJJJr)rmaprrr)rOrrs r__call__z Expr.__call__/sa Ls7D11LLLJJ6<<>>JJJJJLL Lrct|}t|ts|f}t|dkrt d|dt t j|f|zS)Nrz/C-index should be a single expression but got ``)rrrlenr~rrr()rOindexs r __getitem__zExpr.__getitem__8si%'' FE u::>> LELLL M M MBK$5111rc  |jtjura|}||St jd|j}|r*|\}}|dvrt|S|S|jtj tj tj fvr|S|jtj tj fvr3t|jtfd|jDS|jtjur@t#t|jtfd|jDS|jtjuryd}|jD];\}}|||z} |||zz }<|t+dt-dS|S|jtjuryd}|jD];\} } || | z} || | zz}<|t+dt-d S|S|jtjur|j\} } } t3| tr| } tfd | D} t5fd | D} t#t|j| | | fS|jtjur|jd}t3|tr|}tfd |jd dD} t#t|j|f| zS|jtjurBtfd |jD}t#t|j|S|jtjtjfvr:t#t|j|jS|jtjurZ|j\}}}|}|}t#t|j|||fStAd|jd|)zRecursively substitute symbols with values in symbols map. Symbols map is a dictionary of symbol-expression pairs. Nz$\A(@__f2py_PARENTHESIS_(\w+)_\d+@)\ZROUNDDIVSQUAREc3BK|]}|VdSrp substituterr symbols_maps rrz"Expr.substitute..VsC'>'>+/(,{'C'C'>'>'>'>'>'>rc3BK|]}|VdSrpr,r.s rrz"Expr.substitute..YsK1H1H59261M1M1H1H1H1H1H1Hrz?substitute: empty TERMS expression interpreted as int-literal 0rzAsubstitute: empty FACTORS expression interpreted as int-literal 1rc3BK|]}|VdSrpr,rrr/s rrz"Expr.substitute..ws/AAqk22AAAAAArc3LK|]\}}||fVdSrpr,)rrsrtr/s rrz"Expr.substitute..xsL66"aall;778666666rc3BK|]}|VdSrpr,r2s rrz"Expr.substitute..s/JJqk22JJJJJJrc3BK|]}|VdSrpr,r2s rrz"Expr.substitute..s/JJ1Q\\+66JJJJJJrzsubstitute method for z: )!rrr%rqrematchrgroupsas_arrayr r!r#r$r"rrr)rr+rr-r~rr,r'rrr(r&r-r.r*r)rOr/rmrparenrrrrrtargetrrfuncoperandsrrrs ` rr-zExpr.substituteBs 7bi  OOD))E} @$)LLA 8 xxzz u222#E??*L 7rz27BI6 6 6K 7rx, , ,'>'>'>'>379'>'>'>">">?? ? 7bi  T$'51H1H1H1H=AY1H1H1H,H,HIIJJ J 7bh  A#y00 > > e9 44u::;; ; 7bj JJJJ JJJJJHT$'84455 5 7rvrx( ( (T$'49+?+? +L+LMMNN N 7bm # ##y Cu??;//D$$[11ET$'Cu+=>>?? ?!"N47"N"Nd"N"NOOOrc R|gRi}||S|jtjtjtjtjfvr|S|jtjtjtjtj fvrBtt|jtfd|j DS|jtjtjfvri}|j D]R\}}|jgRi}t%|tr|jgRin|}||vr |||z}|||<Stt|j|S|jtjur|j d}t%|tr|jgRin|} tfd|j dD} t)fd|j dD} tt|j| | | fS|jtjur|j d}t%|tr|jgRin|}tfd|j ddD} tt|j|f| zS|jtjtjfvr6tt|j|j jgRiS|jtjurR|j \} }}|jgRi}|jgRi}tt|j| ||fSt3d |j) aBTraverse expression tree with visit function. The visit function is applied to an expression with given args and kwargs. Traverse call returns an expression returned by visit when not None, otherwise return a new normalized expression with traverse-visit sub-expressions. Nc3:K|]}|jgRiVdSrptraverse)rrrrvisits rrz Expr.traverse..sS1'1' e5d555f551'1'1'1'1'1'rrc3:K|]}|jgRiVdSrprA)roperandrrrCs rrz Expr.traverse..sT::!(.W-eEdEEEfEE::::::rrc3DK|]\}}||jgRifVdSrprA)rrsrtrrrCs rrz Expr.traverse..sd@@"&!Q !*!*U"DT"D"D"DV"D"DE@@@@@@rr c3:K|]}|jgRiVdSrprA)rr%rrrCs rrz Expr.traverse..sS88 %+EN5B4BBB6BB888888rztraverse method for )rrr r!r#r%r"r$r)r&rrrrr+r,rrBrr'rr(r-r.r*r)rOrCrrresultrrsrtobjr=r> kwoperandsindicesrrrs ``` rrBz Expr.traversesst-d---f--  M 7rz27BIryA A AK WRXry"*E E ET$'51'1'1'1'1'1' I1'1'1',','(()) )W2:. . .D ))  1AJu6t666v66"1d++3ZQZ77777771299Q! AQT$'40011 1 W )A,C!#t,,6LCL888888825 ::::::,0IaL:::::H@@@@@@*.)A,*<*<*>*>@@@@@JT$'D(J+GHHII I W # #)A,C d++5<3<777777714 888888)-12288888GT$'C6G+;<<== = W* * *T$'"4$)"4U"LT"L"L"LV"L"LNNOO O W % %#y Cu 4=888888D"EN5:4:::6::ET$'Cu+=>>?? ?!"B"B"BCCCrcfg}|ffd }||t|dkS)z&Check if self contains other. cJ|r|S|kr|d|SdS)Nr)r)exprfoundrs rrCzExpr.contains..visits4   Q rr)rBr$)rOrrOrCs ` rcontainsz Expr.containssO#       e5zzQrcVt}|fd}|||S)z3Return a set of symbols contained in self. cZ|jtjur||dSdSrp)rrr%add)rNrOs rrCzExpr.symbols..visits,w")## $$#rsetrBrOrOrCs rsymbolsz Expr.symbolss=#     e rc\t}|ffd ||S)zFReturn a set of expressions used as atoms in polynomial self. cL|jtjur!|jD]}||S|jtjtjfvrdS|jtjurct|jdtrC|jdtj ur(|jdd|SdS|jtj tj fvr|S| ||jtjtjfvr|SdS)Nrr)rrr,rrBr+r"r'rrSr[r r!rSr()rNrObrCs rrCz$Expr.polynomial_atoms..visitsw"*$$&&AJJu%%%% w28RZ000w"(""z$)A,'H'H"9Q<7;..IaLO,,U333Kw2:rw/// IIdOOOw2;111 21rrTrVs @rpolynomial_atomszExpr.polynomial_atomssH#      ( e rc 6||tdi}||z }||tdi}t||z|z \}}|tdkrtd|d|d|d|d| ||fS)zReturn a, b such that a * symbol + b == self. If self is not linear with respect to symbol, raise RuntimeError. rrznot a z-linear equation: rrz == )r-ras_numer_denom RuntimeError)rOsymbolrZaxrzerors r linear_solvezExpr.linear_solves OOVYq\\2 3 3 AX MM69Q<<0 1 1 Vb11a 9Q<<   B B B#$ B B)/ B B45 B B;? B BCC C!t rN)*r r r r staticmethodrrrrrrrrrrrrrarnrrPrrrrrrr rrrrrrr!r&r-rBrPrWr[rbrrrrrs2 "*000\0 @@@D--- %%%   BAA777666BBB*4"*PPPPd8  '''R .  LLL222IPIPIPV6D6D6Dp   :rc Lt|ts|S|jtjuri}|jD]\}}|dkr |jtjur |dkr||z}d}|jtjur4|jD]\}}t||||zst|||t|dkrtdSt|dkr!|\\}}|dkr|Sttj|S|jtj ur?d}i}|jD]1\}}|dkr |jtjur(t|tr|dkr |||dz zz}d}|jtj tjfvrC|dkr||jdz}~|dkr||jd|zz}t||||jtj urc|dkrJt|tr5|jD]\} } t|| | |z t||| t|||3t|dks|dkrt|St|dkr`|\\}}|dkr|}nttj |}|dkr|Sttj||iS|dkrttj |Sttjttj ||iS|jtjur|jdt jur|jd\} } t%| \}}t%| \} }t|tr0t|trt'||}||z||z}}n||z d}}|jtjurc|jdt jurJ|jdd|z}|jdd| z|z}t)t j||S| jtjurc| jdt jurJ| jdd|z|z}| jdd|z}t)t j||St+t-|j}t-| jD]\}}t||| ii}}|D]\}}|dkr|||<| ||<t/ttj ||z}t/ttj ||z}|jtj tjfvr|jddkr|St)t j||S|jtjurE|jdg}|jddD]}|d}|jtjur|jtjur|jdddvr|jdd|jddkrct5|jddd|jdddzt7|jd|jd}||d<||t|dkr|dSttjt;|S|jtjur_t?t.|j\}}}|jtj ur|jdr|n|Sttj|||fS|S)z7Normalize Expr and apply basic evaluation methods. rrNrz"') rrrrr+rrr"rvr$rr, integer_typesr r!r'rSrZ as_term_coeffrrrrrr)r# as_stringrrrr&r )rIrrtrur r rrZeb1e1dividenddivisorr r grrlstrJlastnew_lastrrrs rrrs c4   v HNN$$ $ $DAqAvvtrz!!a1ffEtrxfllnn..FBq"b1f----.1a#### q66Q;;Q<<  VVq[[ggiiGFQAvvBHa    v HNN$$ $ $DAqAvvtrxJq-$@$@QUUq1u&t BG,,,66QVAY&EEUUQVAY!^+EEq!Q''''##q55Z=995"#&,,..22B"1b"q&11112q!Q''''1a#### q66Q;;%1**U## # VVq[[ggiiGFQAvvQ''zz1e*-- - aZZ A&& &4 A#6#6">?? ? vchqkW[88HQK'x((Bw''B b- ( ( ZM-J-J B AUBEBBUAB 5BH  w{!:!:GAJqMB&EGAJqMB&+EGK66 6 5BH  w{!:!:GAJqMB&+EGAJqMB&EGK66 6 B$ % %rNN'--// ! !DAq q!aR 2uGGII  DAq1uua2a$rz51122R7$rz51122R7 8 BG, , ,A!1C1CL UE222 vx{m!""  Ar7DGry(( )) ! Q500q !  ! R(888$TYq\#2#%6122%F%(1qvay%A%ACC"B 1 s88q==q6MBIuSzz*** v CH55eU 7bj  IaL355e 3BJue 4555 Jrc|t|trt|j|jSt|t rt |St|trtt|St|tr"ttt|S|S)z.Convert non-Expr objects to Expr objects. ) rcomplexrrealimagrrrrgreprrr rrIs rrrs#w.#(CH---#|$$~~#s$c####u(S#&&''' Jrc6ttj|S)zJReturn object as SYMBOL expression (variable or unparsed expression). )rrr%rws r as_symbolrys  3  rr2cXt|trttj||fSt|t rttj||fSt|tr!|jtjtjfvr|Std|d)z/Return object as INTEGER or REAL constant. cannot convert z to INTEGER or REAL constant) rintrrr floatr!rr]rIrs rrrs#s-BJd ,,,#u*BGc4[)))#t 6bj"'* * *J ECEEE F FFrct|trttj||fSt|tr|jtjur|St d|d)z'Return object as INTEGER constant. r{z to INTEGER constant)rr|rrr rr]r~s r as_integerrsl#s-BJd ,,,#t 6RZ  J =C=== > >>rct|tr)ttjt ||fSt|t rttj||fSt|tr\|jtjur|S|jtjur4ttjt |jd|fStd|d)z$Return object as REAL constant. rr{z to REAL constant) rr|rrr!r}rr rr]r~s rrrs#s1BGeCjj$/000#u*BGc4[)))#t= 6RW  J Vrz ! !% "4"4d!;<< < :C::: ; ;;rrc:ttj||fS)zBReturn object as STRING expression (string literal constant). )rrr#r~s rrgrgs  C; ' ''rcft|tr|f}ttj|S)z8Return object as ARRAY expression (array constant). )rrrr$rws rr9r9s/#td #  rcnttjt|t|fS)zDReturn object as COMPLEX expression (complex literal constant). )rrr"r)rtrus rrrs'  WT]]GDMM: ; ;;rc ttj|tt t |t d|DfS)zIReturn object as APPLY expression (function call, constructor, etc.) c3>K|]\}}|t|fVdSrprrs rrzas_apply..s0AA$!Qq'!**oAAAAAAr)rrr'rr rrr)r=rrs rrrs\ uS$//00AA&,,..AAAAAC D DDrc<ttj|||fS)z >>rc"t|trZt|}|jtjur|S|jtjurt|jdkrv|j \\}}|dkrttj|diSttj|dt |diS|jtj urf|jdtj urM|jds@ttj|jddd|jdddiSttj|diStdt|d)z-Return expression as FACTORS expression. rrr rr{r)rrrrrr,r+r$rrnumberr'rSrZr]r)rIrrs rrr+sI#t*nn 6RZ  J 6RX  38}}!!!$!1!1 uA:: T1I666BJq$++e2D2Da(HIII Vrx  ! ++Xa[, SXa[^Q A$KLL LBJa))) =DII=== > >>rct|trSt|}|jtjur(t d|jd|jdfS|jtjur(td|jd|jdfS|jtj ur:t|jdkr"|j \\}}||fS|jtj urj|jdtjurQt!|jdd\}}t#tj||jdd|fS|dfSt%dt'|d)z0Return expression as term-coefficient pair. rrr{z to term and coeff)rrrrrr rrr!rr+r$rr'rSrZrfrr]r)rIrrrhrus rrfrf@sL#tnn 6RZ  a!--sx{: : 6RW  1chqk**CHQK7 7 6RX  38}}!!!$!1!1 uU{" 6RX  #(1+"<"< !Q00DAqGKCHQKN;;Q> >Av ADIIAAA B BBrct|trt|}|jtjtjtjtjtj tj fvr|tdfS|jtj ur||j dtjurR|j dsEt!t"|j d\}}|d|dz|d|dzfS|tdfS|jtjur#gg}}|j D]F\}}t#|\}}||z}||||Gtdtd}}t+t-|D]J} || }t+t-|D]} | | kr ||| z}||z }||| z}K|jtjtjfvr|j ddkr| | }}||fS|jtjurtdtd}}|j D]F\} } t#| \} }| dkr|| | zz}||| zz}.| dkr||| zz}|| | zz}G||fSt1dt3|d)z+Return expression as numer-denom pair. rrr r{z to numer and denom)rrrrrr r!r"r%r(r&rr'rrSrZr r]r+rrrr$r,r]r)rInumersdenomsrrnrrrrijrZribnumerbdenoms rr]r]Us#t& nn 6bj"'2:ryk2:/ / / ! $ $ Vrx  x{gk))#(1+)!$^SXa[!A!Aay6!9,fQi&).CCC ! $ $ Vrx  FF"x~~// ! ! e%d++1I a    a    $Q<<15E3v;;'' # #1Is6{{++''AAvvVAY "xBJ000UZ]Q5F5F %vvu%<  Vrz ! !$Q<<15E(( , ,1!/!2!2q55Vq[(EVq[(EEUUV^+EV^+E%<  BDIIBBB C CCrc# Kd} |dz }|V )NrTrr)counters r_counterrs'G1  rcrifd}tjdddd||}|fS)zgReplace quoted substrings of input string. Return a new string and a mapping of replacements. c|dd\}}|r |dd}ddd|d}|d|dtd }||<|S) Nr rSINGLEDOUBLE)'"rz@__f2py_QUOTES_r@)r8COUNTER__next__)r:rrprsrrs rreplzeliminate_quotes..replshhjj!n e  9D * *58 4 = =A = =(8(8(:(: = = =!rz+({kind}_|)({single_quoted}|{double_quoted})z \w[\w\d_]*z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))r single_quoted double_quoted)r6subformat)rJrnew_srrs @reliminate_quotesrsj A FAHH ,,I.. a   E !8Orc|D]B\}}|d|d}|r|dz }||||z}C|S)z!Inverse of eliminate_quotes. Nrr)rfindreplace)rJrrrsrtrs r insert_quotesrse ##1!&&++   CKD IIa " " Hrcd\}}t|}dD]-\}}||}|dkr!||kr|}||}}.||ifS|}|||}|||dz||||dz|krm|||dz}|dkrtd||zd||||dz||||dz|kmdd d d d |}d |dtd} ||t|z|} t ||t|zd\} } | | | <|d|| z| z| fS)zzReplace substrings of input that are enclosed in parenthesis. Return a new string and a mapping of replacements. )NN))(//)z()z{}z[]rNrz Mismatch of z parenthesis in ROUNDr*CURLYr))rr{rz@__f2py_PARENTHESIS_rr)r$rcount ValueErrorrrreplace_parenthesis) rJrrmn_ileft_right_rrrrsrtrrrs rrrsKD% q66D ( ( v FF5MM 77  t88D%D |"u  A uaA ''$Aq ! !QWWUAE1%=%= = = FF5!a%  77MDJMMMMNN N ''$Aq ! !QWWUAE1%=%= = = H7*EEdKA8q887#3#3#5#5888A !CII+a-A q3u::/ 0 0DAq AaD RaR519q=! rc8|ddS)Nrr2)split)rJs r_get_parenthesis_kindrs 773<<?rc|D]b\}}t|}tdddd|}tdddd |}||||z|z}c|S) z$Inverse of replace_parenthesis. rrrr)rr*rr)rr}r)rrrr)rJrrrsrtrrrs runreplace_parenthesisrs ++1 !! $ $#ctDDDQG3s#EEEaH IIaE) * * Hrct||}t|tr|St d|d|d)zCreate an expression from a string. This is a "lazy" parser, that is, only arithmetic operations are resolved, non-arithmetic operations are treated as symbols. rzfailed to parse `z` to Expr instance: got `r#)_FromStringWorkerrrrr)rJrKrs rrLrLs[ 8,,,22155A!T IIIQIII J JJrc eZdZdZdZdZdS)_Pairc"||_||_dSrpr)rOrrs rrz_Pair.__init__s  rc|j|j}}t|tr||}t|tr||}t ||Srp)rrrrr-r)rOr/rrs rr-z_Pair.substitutesgie dD ! ! 0??;//D eT " " 2$$[11ET5!!!rcPt|jd|jd|jdSr)rr rrrs rrz_Pair.__repr__ s.t**%BB BBTZBBBBrN)r r r rr-rrrrrrsF"""CCCCCrrc6eZdZejfdZdZdZddZdS)rc0d|_d|_||_dSrp)original quotes_maprKrNs rrz_FromStringWorker.__init__s   rc,t||jSrp)rr)rOrJs rfinalize_stringz!_FromStringWorker.finalize_stringsQ000rch||_t|\}|_||Srp)rrrprocess)rOinpunquoteds rrz_FromStringWorker.parses/ $4S$9$9!$/||H%%%rrNc t|ttfr%t|fd|DSt |\}|}fdd|vr|d}dkr"t|Sdkr/t|dkrt|Stdd|tj d |}|rq| \}}}|}|}|}t|||Sjt jur!tj d |tj}ntj d |}|r| \} } } jt jurd | zd z} | | f\} } t&| j } t+t,j| | | fStj d|}|rE| \} } | } t1| | Stjd|}t|dkr|dpd}t3|ddd|dddD]H\}}|}|}|dkr||z }C||z}I|Sjt jur\d|vrX|d}t+t,jt|Stjdjt jur|n|dd}t|dkr|}jt jur d|D}|d}t3|ddd|dddD]?\}}|}|}|dkr||z}:||z}@|S|ds|dr[t,jt,jd|d}|dd}t+||Sjt jurd|vr|ttA|d}|d}|ddD]}|}||z}|Stj d!dd |}|r\| \} }}|r#|"rtG|}tItG| |pd!Stj d"!d#d$d%|}|r| \} }}}|r#|"rtG|}| %} d&| vr3tMtO| d&d'|pd(StMtO| |pd!S|j(vr:|d|)d)}tUj(||pdS|vrtW|}||d*krdnd}|d*krt|t*r|S|d+vr't|t*r|f}tY|Stj d,|}|r| \}}}|}|dd-d}t|ts|f}|d*krBt[d.|D}td/|D}t]|g|Ri|S||Stj d0|}|rt_|S0|}tcd1|d2j2d3t_|S)4aParse string within the given context. The context may define the result in case of ambiguous expressions. For instance, consider expressions `f(x, y)` and `(x, y) + (a, b)` where `f` is a function and pair `(x, y)` denotes complex number. Specifying context as "args" or "expr", the subexpression `(x, y)` will be parse to an argument list or to a complex number, respectively. c3DK|]}|VdSrp)r)rs_contextrOs rrz,_FromStringWorker.process..)s1AA4<<G44AAAAAArct|ttfr&t|t |St |Srp)rlistrrr r)rraw_symbols_maprestores rrz*_FromStringWorker.process..restore1sG!dE]++ 0tAwws7A///(O<< ][=]|[>])\s*(.+)\Z.rz\A(\w[\w\d_]*)\s*[=](.*)\Zz((?.~s7555 '$OO,BDII555rrr)rrz\A({digit_string})({kind}|)\Zz\d+z_(\d+|\w[\w\d_]*)) digit_stringrr2z7\A({significant}({exponent}|)|\d+{exponent})({kind}|)\Zz[.]\d+|\d+[.]\d*z[edED][+-]?\d+) significantrrrrrirrr(z4\A(.+)\s*(@__f2py_PARENTHESIS_(ROUND|SQUARE)_\d+@)\Zrc3\K|]'}t|t|j|jfV(dSrp)rrrrrrs rrz,_FromStringWorker.process..sM77A!+Au!5!57qvqw/777777rc3DK|]}t|t|VdSrp)rrrs rrz,_FromStringWorker.process..s1II1Jq%4H4HIQIIIIIIrz\A\w[\w\d_]*\Zzfromstring: treating z as symbol (original=r)3rrrrrstriprrr$rrr6r7r8rrKrrIr0rLrrr*rzipr)rr startswithr.r-reversedrisdigitr|rrHrr}rrrgrr9rrryrr~r)rOrJrrr>r:operrrrrrkeynamerrHrrErrr;rr<rrrrs` ` @@rrz_FromStringWorker.processs  a$ ' ' B477AAAAAqAAAAA A 133? GGII = = = = = = !88wqwws||,,H&  T\\(33444&  x==A%%%t||H'='=>>%HHHQHHJJ J H4a 8 8  2!(!4!4 D%<<%%DLL''ELL''EdE511 1 =H, , ,>24IIAAJAOOA  ; xxzz D#u} 000Ci#o,,wwe}'='=>>KD%""3"??C T5'9:: : H2A 6 6  7XXZZNGUGENNE$,,u"5"566 682A66 x==1  \\''(1+*<"="=>>F"8ADqD>8ADqD>BB & & G,,www'7'788XXZZ99g%FFg%FFM =H, , ,wqwwt}}--H dll8445577 786"&-8:"="=QQ"#))D2H"I"ILL x==1  wx((H}HJ..55+3555\\(1+..F"8ADqD>8ADqD>BB & & G,,w//XXZZ99g%FFg%FFM <<   % S 1 1 %xbf--ad3Bll771QRR5>>22GG$$ $ = * *tqyyHWWQWWT]]%;%;<<==H\\(1+..F#ABB< + +,,w// F*M H5<<%=''() + +  5XXZZNE1d !  !4yyc%jj$)!44 4 HOf%8"324467  8 8  4 ! E1a !  !4yyKKMMEe||uU]]3%<%<==tyqIII5<<33 3   \affSkk\?DT_Q/;; ;   )!,,ELL);!rsN& (      t   *55555D555<      d         i   & U|         +   666w w w w w w w w tFFFR       G G G G???? < < < <(((( <<<< DDD222     888888888888888888 ? ? ????*CCC**D*D*DZ (**:   (((V    $: K K K KCCCCCCCC&WWWWWWWWWWr