bg 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__PythonFortranCf/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib64/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////rct|tsJ|tjurut|trt |dksJt|dt sJt|dt t fs J|n|tjurut|trt |dksJt|dtsJt|dt t fs J|n!|tj ur,t|trt |dksJn|tj urt|trt |dksJt|dt r)|dddt |ddz dvsJt|dt t fs J|n;|tj urt|Jn|tj tjfvrz Expr.__init__..s,??$z$--??????rr1z$unknown op or missing sanity check: )rrr tuplelenintstrr!floatr"r#r%hashr$r)allr+r,dictr'r(r&r-r.rr*NotImplementedErroropdata)rOrrs r__init__z Expr.__init__s"b!!!!!   dE** =s4yyA~~~=d1gs++ + ++d1gSz22 8 8D 8 82 8 27]]dE** =s4yyA~~~=d1gu-- - --d1gSz22 8 8D 8 82 8 2:  dE** =s4yyA~~~=~ 29__dE** =s4yyA~~~=tAw,, IQ 0 0#d1g,,q. 015GGGGHd1gSz22 8 8D 8 82 8 29__::)))) BHbi( ( (dE** * **??$????? E E E E? E BHbj) ) )dD)) ) )) ) 28^^dE** =s4yyA~~~=Q==,,,d1gu-- - --d1gt,, , ,, , 2;  dE** =s4yyA~~~=Q==,,,, 2:  dE** =s4yyA~~~=~ BFBH% % %dD)) ) )) ) 2= dE** =s4yyA~~~=~%;r;;== = rcht|to|j|juo|j|jkSrp)rrrrrOothers r__eq__z Expr.__eq__s65$'',Gux',I+ -rc|jtjtjfvr4t t |j}nd|jtjurJ|jddt t |jdz}n|j}t|j|fSNr ) rrr+r,rsortedritemsr'r)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 ur.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!rrarirerr"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+rrrv 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 ``)rrrrr~rrr()rOindexs r __getitem__zExpr.__getitem__8si%'' FE u::>> LELLL M M MBK$5111rc  |jtjurs|}||St jd|j}|r<|\}}|dvrt|S|dks J||f|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+d t-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+@)\ZROUNDDIVSQUAREROUNDc3BK|]}|VdSrp substituterr symbols_maps rrz"Expr.substitute..VsC'>'>+/(,{'C'C'>'>'>'>'>'>rc3BK|]}|VdSrpr1r3s rrz"Expr.substitute..YsK1H1H59261M1M1H1H1H1H1H1Hrz?substitute: empty TERMS expression interpreted as int-literal 0rzAsubstitute: empty FACTORS expression interpreted as int-literal 1rc3BK|]}|VdSrpr1rrr4s rrz"Expr.substitute..ws/AAqk22AAAAAArc3LK|]\}}||fVdSrpr1)rrsrtr4s rrz"Expr.substitute..xsL66"aall;778666666rc3BK|]}|VdSrpr1r7s rrz"Expr.substitute..s/JJqk22JJJJJJrc3BK|]}|VdSrpr1r7s rrz"Expr.substitute..s/JJ1Q\\+66JJJJJJrzsubstitute method for z: )!rrr%rqrematchrgroupsas_arrayr r!r#r$r"rrr)rr+rr2r~rr,r'rrr(r&r-r.r*r)rOr4rmrparenrrrrrtargetrrfuncoperandsrrrs ` rr2zExpr.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|]}|jgRiVdSrprF)roperandrrrHs rrz Expr.traverse..sT::!(.W-eEdEEEfEE::::::rrc3DK|]\}}||jgRifVdSrprF)rrsrtrrrHs rrz Expr.traverse..sd@@"&!Q !*!*U"DT"D"D"DV"D"DE@@@@@@rr c3:K|]}|jgRiVdSrprF)rr)rrrHs rrz Expr.traverse..sS88 %+EN5B4BBB6BB888888rztraverse method for )rrr r!r#r%r"r$r)r&rrrrr+r,rrGrr'rr(r-r.r*r)rOrHrrresultrrsrtobjrBrC kwoperandsindicesrrrs ``` rrGz 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 rrHzExpr.contains..visits4   Q rr)rGr)rOrrTrHs ` rcontainsz Expr.containssO#       e5zzQrcVt}|fd}|||S)z3Return a set of symbols contained in self. cZ|jtjur||dSdSrp)rrr%add)rSrTs rrHzExpr.symbols..visits,w")## $$#rsetrGrOrTrHs 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,rrGr+r"r'rrSr[r r!rXr()rSrTbrHs rrHz$Expr.polynomial_atoms..visitsw"*$$&&AJJu%%%% w28RZ000w"(""z$)A,'H'H"9Q<7;..IaLO,,U333Kw2:rw/// IIdOOOw2;111 21rrYr[s @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 == )r2ras_numer_denom RuntimeError)rOsymbolr_axrzerors 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 staticmethodrrrrrrrrrrrrrarnrrPrrrrr r rrrrrrr!r&r*r2rGrUr\r`rgrrrrrs2 "*000\0 @@@D--- %%%   BAA777666BBB*4"*PPPPd8  '''R .  LLL222IPIPIPV6D6D6Dp   :rc zt|ts|S|jtjuri}|jD]\}}|dkr |jtjur |dkr||z}d}|jtjur4|jD]\}}t||||zst|||t|dkrtdSt|dkr!|\\}}|dkr|Sttj|S|jtj urVd}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|dkr&t|tsJt|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|||<| ||<t1ttj ||z}t1ttj ||z}|jtj tjfvr|jddkr|St+t"j||S|jtjurE|jdg}|jddD]}|d}|jtjur|jtjur|jdddvr|jdd|jddkrct7|jddd|jdddzt9|jd|jd}||d<||t|dkr|dSttjt=|S|jtjur_tAt0|j\}}}|jtj ur|jdr|n|Sttj|||fS|S)z7Normalize Expr and apply basic evaluation methods. rrNrz"')!rrrrr+rrr"rvrrr, integer_typesr r!rr'rSrZ as_term_coeffrrrr rr)r# as_stringrrrr&r%)rNrrtrurrrr_eb1e1dividenddivisorrrgrrlstrJlastnew_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**e\22 2 22U## # 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. ) rcomplexrrealimagrrrrlreprrr%rrNs rrrs#w.#(CH---#|$$~~#s$c####u(S#&&''' Jrc6ttj|S)zJReturn object as SYMBOL expression (variable or unparsed expression). )rrr%r|s r as_symbolr~s  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) rrrrr rr!rr]rNrs rrrs#s-BJd ,,,#u*BGc4[)))#t 6bj"'* * *J ECEEE F FFrct|trttj||fSt|tr|jtjur|St d|d)z'Return object as INTEGER constant. rz to INTEGER constant)rrrrr rr]rs 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. rrz to REAL constant) rrrrr!rrr rr]rs rrrs#s1BGeCjj$/000#u*BGc4[)))#t= 6RW  J Vrz ! !% "4"4d!;<< < :C::: ; ;;rrc:ttj||fS)zBReturn object as STRING expression (string literal constant). )rrr#rs rrlrls  C; ' ''rcft|tr|f}ttj|S)z8Return object as ARRAY expression (array constant). )rrrr$r|s rr>r>s/#td #  rcnttjt|t|fS)zDReturn object as COMPLEX expression (complex literal constant). )rrr"r)ryrzs rrrs'  WT]]GDMM: ; ;;rc ttj|tt t |t d|DfS)zIReturn object as APPLY expression (function call, constructor, etc.) c3>K|]\}}|t|fVdSrpr$rs rrzas_apply..s0AA$!Qq'!**oAAAAAAr)rrr'rr%rrr)rBrrs 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 rrr)rrrrrr,r+rrrnumberr'rSrZr]r)rNrrs rr r +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. rrrz to term and coeff)rrrrrr rrr!rr+rrr'rSrZrkrr]r)rNrrrmrus rrkrk@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 rz to numer and denom)rrrrrr r!r"r%r(r&rr'rrSrZr%rbr+rrrrr,r]r)rNnumersdenomsrrnrrrrijr_rnbnumerbdenoms rrbrbUs#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  rcifd}tjdddd||}d|vsJd|vsJ|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@)r=COUNTER__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_quotedrr)r;subformat)rJrnew_srrs @reliminate_quotesrs A FAHH ,,I.. a   E e     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 r/r.CURLYr-)rr{r@__f2py_PARENTHESIS_rr)rrcount 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=! rcv|ds J||ddS)Nrrr2) startswithsplit)rJs r_get_parenthesis_kindrs7 <<. / /2222 / 773<<?rc|D]b\}}t|}tdddd|}tdddd |}||||z|z}c|S) z$Inverse of replace_parenthesis. rrrr)r/r.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)rrrrr2r)rOr4rrs rr2z_Pair.substitutesgie dD ! ! 0??;//D eT " " 2$$[11ET5!!!rcPt|jd|jd|jdSr)rr rrrs rrz_Pair.__repr__ s.t**%BB BBTZBBBBrN)r r r rr2rrrrrrsF"""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%%%rrSc t|ttfr%t|fd|DSt|tsJt||ft |\}|}fdd|vr|d}dkr"t|Sdkr/t|dkrt|Stdd|tj d |}|rdks J|\}}}|}|}|}t|||Sjt"jur!tj d |tj}ntj d |}|r|\} } } jt"jurd | zd z} | | f\} } t(| j } t-t.j| | | fStj d|}|rE|\} } | } t3| | Stjd|}t|dkr|dpd}t5|ddd|dddD]P\}}|}|}|dkr||z }C|dksJ||z}Q|Sjt"jur\d|vrX|d}t-t.jt|Stjdjt"jur|n|dd}t|dkr|}jt"jur d|D}|d}t5|ddd|dddD]G\}}|}|}|dkr||z}:|dksJ||z}H|S|ds|dr[t.jt.j d|d}|dd}t-||Sjt"jurd|vr|ttC|d}|d}|ddD]}|}||z}|Stj d"d d!"|}|r\|\} }}|r#|#rtI|}tKtI| |pd#Stj d$"d%d&d!'|}|r|\} }}}|r#|#rtI|}| &} d(| vr3tOtQ| d(d)|pd*StOtQ| |pd#S|j)vr:|d|*d+}tWj)||pdS|vrtY|}||d,krdnd}|d,krt|t,r|S|d-vr't|t,r|f}t[|Stj d.|}|r|\}}}|}|dd/d}t|ts|f}|d,krBt]d0|D}td1|D}t_|g|Ri|S|d2ksJ||Stj d3|}|rta|S1|}ted4|d5j3d6ta|S)7aParse 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,BDII555rrrr)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+) significantrrrrrnrr/r,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%4H4HIQIIIIIIrr.z\A\w[\w\d_]*\Zzfromstring: treating z as symbol (original=r)4rrrrrrstriprrrrrr;r<r=rrKrrIr0rLrrr*rzipr)rrrr.r-reversedrisdigitrrrHrrrrrlrr>rrr~rr~r)rOrJrrrCr?operrrrrrkeynamerrMrrJrrr@rrArrrrs` ` @@rrz_FromStringWorker.processsX  a$ ' ' B477AAAAAqAAAAA A!S!!//DGGQ<//!133? GGII = = = = = = !88wqwws||,,H&  T\\(33444&  x==A%%%t||H'='=>>%HHHQHHJJ J H4a 8 8  2f$$$g$$$!(!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%FF9999g%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%FF9999g%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);!rrrrrrrrrrrrr rkrbrrrrrrrrrLrrrrrrsN& (      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