K i dZdgZddlZddlZddlmZddlmZGddeZGdd eZ Gd d eZ Gd d eZ Gdde Z GddeZefZeefZdZGddeZdZGddZdZdZdZd9dZd9dZd9dZd:dZdZd;dZ d Z!d!Z"d"Z#d#Z$d$Z%d%Z&d&Z'd'Z(d(Z)d)Z*d*Z+d+Z,d,Z-d-Z.d.Z/e/Z0d/Z1d0Z2d1Z3d2Z4d3Z5ejlfd4Z7Gd5d6Z8Gd7d8Z9y)>=) rrr0EQNELTLEGTGElower)clsslanguages r fromstringzRelOp.fromstringMs x'' '!HHehh!HHehh!HHehh889 C ChhehhUXXhhUXXUXX??@B Brc |tjuretjdtjdtj dtj dtjdtjdi|Stjdtjdtj d tj d tjd tjd i|S) Nr6r7r8r9r:r;r<r=r>r?r@rA) rrr0rBrCrDrErFrGselfrKs rtostringzRelOp.tostringVs x'' 'HHfehhHHfehhHHfehh88<> >$$#uxx#uxx//35 5rN)r r r r rBrCrDrErFrG classmethodrrrLrPrrrr0r0BsP B B B B B B$,JJBB!) 5rr0c,eZdZdZdZdZdZdZdZdZ dZ y ) ArithOpzC Used in Op.APPLY expression to specify the function part. rr r1r2r3r4N) r r r r POSNEGADDSUBMULDIVPOWrrrrSrS`s, C C C C C C CrrSc eZdZy)OpErrorNr r r rrrr]r]mrr]cDeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZy) Precedencez4 Used as Expr.tostring precedence argument. rrr r1r2r4rT r rrN)r r r r ATOMPOWERUNARYPRODUCTSUMrDrBLANDLORr&ASSIGNTUPLENONErrrraraqsJ D E EG C B B D CG F E DrracV|j|}||||<y||z}|r|||<y||=yN)get)dkvcs r _pairs_addrvs9 aAy! E AaD!rc eZdZy) ExprWarningNr^rrrrxrxr_rrxc<tj|tdy)Nr ) stacklevel)warningswarnrx)messages rewarnr~s MM';15rc eZdZdZeej fdZdZdZ dZ dZ dZ dZ d Zd Zd Zej$ej&fd Zd ZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'd Z(d!Z)y")#rzfRepresents a Fortran expression as a op-data pair. Expr instances are hashable and sortable. ct||S)z.Parse a Fortran expression to a Expr. rK)rL)rJrKs rparsez Expr.parses!h//rc@t|tsJ|tjurVt|trt |dk(sJt|dt sJt|dt t fsJ||tjurVt|trt |dk(sJt|dtsJt|dt t fsJ||tjur!t|trt |dk(s}J|tjurrt|trt |dk(sJt|dt r|dddt |ddz dvsJt|dt t fsJ||tjurt|J|tjtjfvr,t|tsJtd|DsJ||tj tj"fvrt|t$sVJ|tj&urZt|trt |dk(sJt|dJt|dtsJt|dt$sJ|tj(ur0t|trt |dk(sJt|dJ|tj*ur t|trt |dk(svJ|tj,tj.fvrt|t0sBJ|tj2ur t|trt |dk(sJt5d|||_||_y)Nr rr)z""z''z@@c3<K|]}t|tywrp) isinstancer).0items r z Expr.__init__..s?$z$-?sr1z$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*s4yA~ ==d1gs+ ++d1gSz2 8D 82 277]dE*s4yA~ ==d1gu- --d1gSz2 8D 82 2:: dE*s4yA~ == 299_dE*s4yA~ ==tAw,Q 2#d1g,"2 237II KJd1gSz2 8D 82 299_:) )) BHHbii( (dE* **?$?? E E? BHHbjj) )dD) )) 288^dE*s4yA~ ==Q=, ,,d1gu- --d1gt, ,, 2;; dE*s4yA~ ==Q=, ,, 2:: dE*s4yA~ == BFFBHH% %dD) )) 2== dE*s4yA~ ==%6rd;= = rct|txr3|j|juxr|j|jk(Srp)rrrrrOothers r__eq__z Expr.__eq__s;5$',GGuxx',II+ -rc|jtjtjfvr-t t |j j}nh|jtjur@|j ddt t |j djz}n |j }t|j|fSNr ) rrr+r,rsortedritemsr'r)rOrs r__hash__z Expr.__hash__s 77rxx, ,  123D WW 99Ra=5 ! 0B0B0D)E#FFD99DTWWdO$$rcht|tr|j|jur-|jj|jjkS|jtj tj fvrYtt|jjtt|jjkS|jtjur|jdd|jddk7r|jdd|jddkStt|jdjtt|jdjkS|j|jkStSr) rrrvaluerr+r,rrrrr'NotImplementedrs r__lt__z Expr.__lt__s8 eT "wwehh&ww}}uxx~~55ww288RZZ00fTYY__%678uzz'7'7'9 :;<=ww"(("99Ra=EJJrN299Ra=5::bq>99VDIIaL$6$6$89:U5::a=..01>33399uzz) )rc||k(xs||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$66rcft|jd|jd|jdSN(, ))typer rrrOs r__repr__z Expr.__repr__s.t*%%&ay499-qAArc"|jSrp)rPrs r__str__z Expr.__str__s}}rc |jtjtjfvrs|jddkrt j nt j}t|jd|jddk7rd|jdndz} n |jtjur>djfd|jD}d|zd z}t j}n|jtjur't j}t|j}no|jtjurH|jd}|jddk7r|jddz|z}t j}n |jtjur>djfd |jD}d |zd z}t j}n|jtjurg}t|jj!D]\}}|dkrd }| }nd}|dk(r"|j#t j }nA|t%dk(r t|}n'|d|j#t j&z}|r|j)|n|d k(r|j)d|j)|dj|xsd}|rt j nt j}n~|jtj*urg} g} t|jj!D]6\} } d}| dk(r"| j#t j&} nt,j.ur| t1ddvr7| j#t j&} dj| g| z} n| t1ddvr,| j#t j&} | | g| zz } | j#t j2} d| d| d } n'| j#t j4d| z} | r| j)|| j)| 9| r | s| dgz } | dddj| d gz } dj| xsd}| rt j&nt j}n|jtj6ur|j\}}}|t8j:ur]t,j.urK|Dcgc]#}|j#t j&%c}\}}|d|}t j&}n |Dcgc]#}|j#t j2%}}||j!Dcgc]*\}}|dz|j#t j<z,c}}z }|ddj|d }t j}ni|jtj>urs|jd}|jddDcgc]#}|j#t j2%}}|d dj|d }t j}n|jtj@ur[|jDcgc]#}|j#t j&%}}dj|}t j&}nc|jtjBur|jDcgc]#}|j#t j2%c}\}}}t,j.ur d|d|d|d }nYt,jDur d|d |d!|d }n:t,jFur d"|d|d|d }ntId#|jd$t j}n|jtjJur@d%|jj#t jLz}t jL}n$|jtjNur?d&|jj#t jLz}t jL}n|jtjPur|j\}}}|tRjTtRjVfvrt jTnt jX}|j#|}|j#|}|j#}|d'|d'|}ntId(|j|jZ|jZkrd|zd zS|Scc}wcc}wcc}}wcc}wcc}wcc}w))z0Return a string representation of Expr. rrr2_rc3`K|]%}|jtj'ywrNrPrarmrrrKs rrz Expr.tostring..,1"-- (8(88-L1+.rrc3`K|]%}|jtj'ywrrrs rrz Expr.tostring..+rr[]z -  + r * -0r rizpow(z ** 1/z / =Nz // ?:z if z else zmerge(z tostring for z and &* ztostring for op ).rrr r!rrarirerr"joinr%r#r$r+rrrP as_numberrhappendr,rrrangermrfr'rSrZrnr(r)r&rrrr-rgr.r*r0rBrCrDr)rOparent_precedencerK precedencertermstermcoeffrfactorstailbaseexpfactornameargskwargsargnumerdenomrsrtacondexpr1expr2ropleftrights ` rrPz Expr.tostrings 77rzz277+ +,0IIaL1,<*..) DIIaL!(, ! (9()1%7?ACA WW " 1&*ii11Aa# A#J WW !#JDIIA WW ! ! Ayy|q IIaL3&*#J WW  1&*ii11Aa# A#J WW E%diioo&78 # e19B"FEBA:==(=KDYq\)u:D#WC=4=="**X,9,??DLL$5[LL% T"# #$%#A+0jooJ WW "GD#DIIOO$56 ' c!8!]]:+=+=4<+>F+eArl*!%z/A/A8@"/"B!&VHsN!;c1 -!%z/A/A8@"/"BC4/ !%z/?/?8@"/"B#'xr#a!8!]]:+;+;4<+>BFse MFNN2&v&1 '2u$GCejj&6<< 'CA/6++JOOJ WW !% D$w{{"x8::'=,0 1$'!$ Z-?-?6>!-!@ 1 ugS('// $() Z%5%5 I))%+\\^5!QS1::joo#>>55fAdiio.a0'__ WW #99Q#-#@"6 D%8::%vQugQugQ/X__,wd4&ugQ7X---UG2eWBtfA6)#DGG9E(<>>#J WW dii(()9)9H(MMA#))J WW dii(()9)9H(MMA#))J WW %#yy Cu+.588UXX2F+F*--)}} ==h=?DNN:NAE,,,1C&#aw'A%(8 &BC C  " "Z%5%5 57S= s 1 )5 . * "6s$(g((g&/g(g =(g%4(g*c|Srprrs r__pos__z Expr.__pos__s rc |dzS)Nrrs r__neg__z Expr.__neg__s byrct|}t|tr|j|jurN|jtj tj fvrMt|jd|jdzt|jd|jdS|jtjur0|j\}}|j\}}t||z||zS|jtjurmt|jt|j}|jjD]\}}t|j||t!|S|jtjur:|jtj tj fvr|t|zS|jtj tj fvr*|jtjurt||zS|jtj ur9|jtj ur|t#||jdzS|jtj ur9|jtj urt#||jd|zSt%|t%|zSt&SNrr)kind)as_exprrrrrr r!rrmaxr" as_complexr+rrrv normalizeas_realas_termsr) rOrr1i1r2i2rrsrts r__add__z Expr.__add__s eT "ww%(("77rzz27733$ ! uzz!}4DIIaL%**Q-8::77bjj(!YYFB"ZZFB%b2grBw7777bhh&TWWd499o6A % 0 0 211"1661a01$Q<'ww"**$bjj"''5J)Jj///RZZ11ehh"**6L!$'%//BGG#BJJ(>ge$))A,???BJJ&588rww+>t%**Q-85@@D>HUO3 3rcJt|trt||zStSrpr number_typesrrrs r__radd__z Expr.__radd__" e\ *U#d* *rc|| zSrprrs r__sub__z Expr.__sub__svrcJt|trt||z StSrprrs r__rsub__z Expr.__rsub__rrct|}t|tr|j|jur|jtj tj fvrMt|jd|jdzt|jd|jdS|jtjur<|j\}}|j\}}t||z||zz ||z||zzS|jtjurmt|jt|j}|jjD]\}}t|j||t!|S|jtj"urt|ji}|jjD]D\} } |jjD]"\} } t|j| | z| | z$Ft!|S|jtjur:|jtj tj fvr|t|zS|jtjur:|jtj tj fvrt||zS|jtj ur9|jtj ur|t%||jdzS|jtj ur9|jtj urt%||jd|zS|jtj"ur|t'|zS|jtj"urt'||zSt)|t)|zSt*Sr)rrrrrr r!rrrr"rr,rrrvrr+rr as_factorsr) rOrrrrrrrsrtt1c1t2c2s r__mul__z Expr.__mul__s eT "ww%(("77rzz27733$TYYq\EJJqM%A%(1uzz!}%EGGWW *!YYFB"ZZFB%b2gR&7b279JKK77bjj(TWWd499o6A % 0 0 211"1661a01$Q<'WW(TWWb)A"&))//"3AB&+jj&6&6&8AFB&qvvrBwR@AA%Q<'ww"**$bjj"''5J)Jj///RZZ'DGG BGG7L,L!$'%//BGG#BJJ(>ge$))A,???BJJ&588rww+>t%**Q-85@@ww"(("huo--RXX%~--d#j&77 7rcJt|trt||zStSrprrs r__rmul__z Expr.__rmul__rrcVt|}t|tr|jtj ur|j d}|dk(r tdS|dk(r|S|dkDr||jtjurUt|ji}|j jD]\}}||z|j |<t|S|||dz zzS|dk7r || zdzSttj||iSttj||StS)Nrrr)rrrrrr rrr,rras_applyrSr[r)rOrexponentrrsrts r__pow__z Expr.__pow__s  eT "xx2::% ::a=q=$Q<'q=Ka<ww"**, "-$(IIOO$55DAq()H AFF1I5(|+4HqL#9::^ hY/B66BJJx(899GKKu5 5rct|}t|tr$tt t j ||StSrp)rrrrr rSrZrrs r __truediv__zExpr.__truediv__s5 eT "Xgkk4?@ @rcNt|}t|tr||z StSrprrrrrs r __rtruediv__zExpr.__rtruediv__!s% eT "4< rct|}t|tr%tttj ||fSt Srp)rrrrrr)rrs r __floordiv__zExpr.__floordiv__'s7 eT "T"))dE];< <rcNt|}t|tr||zStSrprrs r __rfloordiv__zExpr.__rfloordiv__/s% eT "D= rc t|gtt|i|jDcic]\}}|t|c}}Scc}}wrp)r maprr)rOrrrsrts r__call__z Expr.__call__5sM Fs7D1F5;\\^DTQ1gaj=DF FDsA ct|}t|ts|f}t|dkDrt d|dt t j|f|zS)Nrz/C-index should be a single expression but got ``)rrrrr~rrr()rOindexs r __getitem__zExpr.__getitem__>sR%'FE u:> CE7!L MBKK$511rc 8 |jtjurij|}||St j d|j }|r0|j\}}|dvr t|S|dk(s J||f|S|jtjtjtjfvr|S|jtjtjfvr2t|jtfd|j DS|jtj ur;t#t|jtfd|j DS|jtj$urld}|j j'D]3\}}||j)|z}||j)|zz }5|t+dt-dS|S|jtj.urld}|j j'D]3\} } || j)| z}|| j)| zz}5|t+d t-d S|S|jtj0ur|j \} } } t3| tr| j)} tfd | D} | j'Dcic]\}}||j)} }}t#t|j| | | fS|jtj4urt|j d}t3|tr|j)}tfd |j d dD} t#t|j|f| zS|jtj6ur=tfd |j D}t#t|j|S|jtj8tj:fvr8t#t|j|j j)S|jtj<urT|j \}}}|j)}|j)}t#t|j|||fSt?d|jd|cc}}w)zRecursively substitute symbols with values in symbols map. Symbols map is a dictionary of symbol-expression pairs. Nz$\A(@__f2py_PARENTHESIS_(\w+)_\d+@)\ZROUNDDIVSQUAREROUNDc3@K|]}|jywrp substituterr symbols_maps rrz"Expr.substitute..\s"'>+/(,{'C'>c3@K|]}|jywrpr%r's rrz"Expr.substitute.._s$1H59261M1Hr)z?substitute: empty TERMS expression interpreted as int-literal 0rzAsubstitute: empty FACTORS expression interpreted as int-literal 1rc3@K|]}|jywrpr%rrr(s rrz"Expr.substitute..}sAqk2Ar)c3@K|]}|jywrpr%r,s rrz"Expr.substitute..sJqk2Jr)c3@K|]}|jywrpr%r,s rrz"Expr.substitute..sJ1Q\\+6Jr)zsubstitute method for z: ) rrr%rqrematchrgroupsas_arrayr r!r#r$r"rrr)rr+rr&r~rr,r'rr(r&r-r.r*r)rOr(rmrparenrrrrr targetrrrsrtfuncoperandsrrrs ` rr&zExpr.substituteHs= 77bii OOD)E} @$))LA xxz u22#E?*'7%7'L 77rzz277BII6 6K 77rxx, ,'>3799'>">? ? 77bii T$''51H=AYY1H,HIJ J 77bhh A#yy0 > e9 4u y'( |#H 77bjj A"&))//"3 Bh9 4@A5AAA  B y*+ |#H 77bhh #'99 FD&&$'**;7ADAAD&,lln6"ak226F6T$''FD&+ABC C 77bkk !99Q:; ; 77bjj J JJHT$''845 5 77rvvrxx( (T$''499+?+? +LMN N 77bmm ##yy Cu??;/D$$[1ET$''Cu+=>? ?!$:477)2dX"NOO'6s=Tc 6|gi}||S|jtjtjtjtj fvr|S|jtj tjtjtjfvr=tt|jtfd|jDS|jtjtjfvri}|jj!D]T\}}|j"gi}t%|tr|j"gin|}||vr|||z}|||<Vtt|j|S|jtj&ur|jd}t%|tr|j"gin|} tfd|jdD} |jdj!Dcic]\}}||j"gi} }}tt|j| | | fS|jtj(ur}|jd}t%|tr|j"gin|}tfd|jddD} tt|j|f| zS|jtj*tj,fvr=tt|j|jj"giS|jtj.ur^|j\} }}|j"gi}|j"gi}tt|j| ||fSt1d|jcc}}w) 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. Nc3JK|]}|jgiywrptraverse)rrrrvisits rrz Expr.traverse..s.1' e5d5f51' #rc3JK|]}|jgiywrpr:)roperandrrr<s rrz Expr.traverse..s0:!(.W--eEdEfE:r=rr c3JK|]}|jgiywrpr:)rrrrr<s rrz Expr.traverse..s.8 %+ENN5B4B6B8r=ztraverse method for )rrr r!r#r%r"r$r)r&rrrrr+r,rr;rr'r(r-r.r*r)rOr<rrresultrrsrtobjr6r7 kwoperandsindicesrrrs ``` rr;z Expr.traversest-d-f-  M 77rzz277BIIryyA AK WWRXXryy"**E ET$''51' II1','() )WW2::. .D ) 1AJJu6t6v6"1d+ QZZ777129Q! AQ  T$''401 1 WW ))A,C!#t,!CLL88825 :,0IIaL::H+/))A,*<*<*>@"&!QZQZZ????@J@T$''D(J+GHI I WW #))A,C d+ 3<<77714 8)-1288GT$''C6G+;<= = WW* *T$''"4$))"4"4U"LT"LV"LNO O WW %#yy Cu 4==888D"ENN5:4:6:ET$''Cu+=>? ?!$8 "BCC%@s;!PcTg}|ffd }|j|t|dk7S)z&Check if self contains other. c>|r|S|k(r|jd|Sy)Nr)r)exprfoundrs rr<zExpr.contains..visits'  Q rr)r;r)rOrrHr<s ` rcontainsz Expr.containss.#  e5zQrcFt}|fd}|j||S)z3Return a set of symbols contained in self. c`|jtjur|j|yyrp)rrr%add)rGrHs rr<zExpr.symbols..visits"ww"))# $$rsetr;rOrHr<s rsymbolsz Expr.symbolss&#  e rcLt}|ffd |j|S)zFReturn a set of expressions used as atoms in polynomial self. c|jtjur$|jD]}|j |S|jtj tj fvry|jtjur`t|jdtrC|jdtjur#|jddj |Sy|jtjtjfvr|S|j||jtjtjfvr|SyNrr)rrr,rr;r+r"r'rrSr[r r!rLr()rGrHbr<s rr<z$Expr.polynomial_atoms..visitsww"**$&AJJu%& ww288RZZ00ww"(("z$))A,'H99Q<7;;.IIaLO,,U3Kww2::rww// IIdOww2;;11 2rrMrOs @rpolynomial_atomszExpr.polynomial_atomss'# ( e rc |j|tdi}||z }|j|tdi}t||z|z \}}|tdk7rtd|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)rOsymbolrTaxrzerors r linear_solvezExpr.linear_solves OOVYq\2 3 AX MM69Q<0 1 Vb1a 9Q< x0##$#SA3d4& BC C!t rN)*r r r r staticmethodrrrrrrrrrrrrrarnrrPrrrrrrrr rrrrrrrr&r;rIrPrUr\rrrrrs "**00 @D- % B76B*4"**Ob8  'R .  F2IPV6Dp :rc t|ts|S|jtjur i}|j j D]\}}|dk(r |jtjur |dk7r||z}d}|jtjur3|j j D]\}}t||||zt|||t|dk(r tdSt|dk(r|j \\}}|dk(r|Sttj|S|jtjurEd}i}|j j D]8\}}|dk(r |jtjur"t|tr|dkDr |||dz zz}d}|jtjtjfvrA|dk(r||j dz}|dkDr||j d|zz}t||||jtjurX|dkDrDt|tr4|j j D]\} } t|| | |zt|||,t|||;t|dk(s|dk(rt|tsJt|St|dk(rZ|j \\}}|dk(r|}nttj|}|dk(r|Sttj||iS|dk(rttj|Sttjttj||iS|jtj ur|j dt"j$ur|j d\} } t'| \}}t'| \} }t|tr't|trt)||}||z||z}}n||z d}}|jtj urg|j dt"j$urH|j dd|z}|j dd| z|z}t+t"j$||S| jtj urg| j dt"j$urH| j dd|z|z}| j dd|z}t+t"j$||St-t/|j }t/| j j D]\}}t||| ii}}|j D]\}}|dkDr|||<| ||<t1ttj||z}t1ttj||z}|jtjtjfvr|j ddk(r|St+t"j$||S|jtj2ur:|j dg}|j ddD]}|d}|jtj4ur|jtj4ur|j dddvr~|j dd|j ddk(rYt7|j ddd|j dddzt9|j d|j d}||d<|j;|t|dk(r|dSttj2t=|S|jtj>urjtAt0|j \}}}|jtjur|j dr|S|Sttj>|||fS|S)z7Normalize Expr and apply basic evaluation methods. rrNrz"')!rrrrr+rrr"rvrrr, integer_typesr r!rr'rSrZ as_term_coeffrr rrrr)r# as_stringrrrr&r)rBrrtrurrrrTeb1e1dividenddivisorrrgrrlstrJlastnew_lastrrrs rrrs c4   vv HHNN$ $DAqAvttrzz!a1fEttrxxfflln.FBq"b1f-.1a# $ q6Q;Q<  Vq[ggiGFQAvBHHa   vv HHNN$ $DAqAvttrxxJq-$@QUq1u&tt BGG,,6QVVAY&EUQVVAY!^+Eq!Q'#q5Z=9"#&&,,.2B"1b"q&12q!Q'1a#- $. q6Q;%1*e\2 22U# # Vq[ggiGFQAvQ'z1e*- - aZ A& &4 A#6">? ? vvchhqkW[[8HHQK'x(Bw'B b- (ZM-JB A1WbAgB"WaB 55BHH w{{!:GGAJqMB&EGGAJqMB&+EGKK6 6 55BHH w{{!:GGAJqMB&+EGGAJqMB&EGKK6 6 B$$ %rN''--/ !DAq q!aR  !2uGGI DAq1ua2a   $rzz512R7$rzz512R7 88 BGG, ,A!1CL UE22 vvxx{m!" Ar7DGGryy( ) ! Q50q !  ! R(88$TYYq\#2%612%F%(1qvvay%AC"B 1   s8q=q6MBIIuSz** vv CHH5eU 77bjj  IIaL5 3e 3BJJue 455 Jrc6t|tr t|j|jSt|t r t |St|trtt|St|trttt|S|S)z.Convert non-Expr objects to Expr objects. ) rcomplexrrealimagrrrrareprrrrrBs rrrss#w#((CHH--#|$~#sc###uS#&'' Jrc6ttj|S)zJReturn object as SYMBOL expression (variable or unparsed expression). )rrr%rqs r as_symbolrss  3 rcLt|trttj||fSt|t rttj ||fSt|tr.|jtjtj fvr|Std|d)z/Return object as INTEGER or REAL constant. cannot convert z to INTEGER or REAL constant) rrrrr rr!rr]rBrs rrrs#sBJJd ,,#uBGGc4[))#t 66bjj"''* *J OC5(DE FFrct|trttj||fSt|tr|j tjur|St d|d)z'Return object as INTEGER constant. ruz to INTEGER constant)rrrrr rr]rvs r as_integerrxsW#sBJJd ,,#t 66RZZ J OC5(<= >>rct|tr%ttjt ||fSt|t rttj||fSt|trl|j tjur|S|j tjur2ttjt |jd|fStd|d)z$Return object as REAL constant. rruz to REAL constant) rrrrr!rrr rr]rvs rrrs#sBGGeCj$/00#uBGGc4[))#t 66RWW J VVrzz !% "4d!;< < OC5(9: ;;rc:ttj||fS)zBReturn object as STRING expression (string literal constant). )rrr#rvs rraras  C; ''rc\t|tr|f}ttj|S)z8Return object as ARRAY expression (array constant). )rrrr$rqs rr2r2s&#td # rc^ttjt|t|fS)zDReturn object as COMPLEX expression (complex literal constant). )rrr"r)rnros rrrs"  WT]GDM: ;;rc ttj|tt t ||j Dcic]\}}|t |c}}fScc}}w)zIReturn object as APPLY expression (function call, constructor, etc.) )rrr'rrrr)r6rrrsrts rr r sP uS$/0,2LLN;DAq!WQZ-;= >>;sA c<ttj|||fS)z>rc8t|trrt|}|jtj ur|S|jtj urt|jdk(rq|jj\\}}|dk(rttj |diSttj |dtj|diS|jtjurl|jdtjurM|jds>ttj |jddd|jdddiSttj |diStdt|d)z-Return expression as FACTORS expression. rrr rrur)rrrrrr,r+rrrnumberr'rSrZr]r)rBrrs rrr1s/#tn 66RZZ J 66RXX 388}!!$!1 uA: T1I66BJJq$++e2Da(HII FFbhh ! +XXa[ SXXa[^Q A$KL LBJJa)) ODI;n= >>rc<t|trtt|}|jtj ur(t d|jd|jdfS|jtjur(td|jd|jdfS|jtjur;t|jdk(r#|jj\\}}||fS|jtjurj|jdtjurKt!|jdd\}}t#tj||jdd|fS|dfSt%dt'|d)z0Return expression as term-coefficient pair. rrruz to term and coeff)rrrrrr rxrr!rr+rrr'rSrZr`r r]r)rBrrrbrus rr`r`Fs>#tn 66RZZ a!-sxx{: : 66RWW 1chhqk*CHHQK7 7 66RXX 388}!!$!1 uU{" 66RXX #((1+"< !Q0DAqGKKCHHQKN;Q> >Av ODI;.@A BBrct|trt|}|jtj tj tjtjtjtjfvr |tdfS|jtjurq|jdtjurE|jds6t!t"|jd\}}|d|dz|d|dzfS|tdfS|jtj$ur gg}}|jj'D]:\}}t#|\}}||z}|j)||j)|<tdtd}}t+t-|D];} || }t+t-|D]} | | k7s ||| z}||z }||| z}=|jtj tj fvr|jddkr| | }}||fS|jtj.urxtdtd}}|jj'D]A\} } t#| \} }| dkDr|| | zz}||| zz}*| dks0||| zz}|| | zz}C||fSt1dt3|d)z+Return expression as numer-denom pair. rrr ruz to numer and denom)rrrrrr r!r"r%r(r&rr'rrSrZrrWr+rrrrr,r]r)rBnumersdenomsrrnrrrrijrTrcbnumerbdenoms rrWrW[s#tn 66bjj"''2::ryykk2::/ / ! $ $ VVrxx xx{gkk)#((1+!$^SXXa[!Aay6!9,fQi&).CCC ! $ $ VVrxx FF"xx~~/ ! e%d+1I a  a  ! %Q<15E3v;' #1Is6{+'AAvVAY' "  #xxBJJ00UZZ]Q5F %vvu%<  VVrzz !$Q<15E( ,1!/!2q5Vq[(EVq[(EUV^+EV^+E ,%<  ODI;.AB CCrc#$Kd} |dz }| wrSr)counters r_counterrs!G 1   scifd}tjdjddd||}d|vsJd|vsJ|fS) zgReplace quoted substrings of input string. Return a new string and a mapping of replacements. c|jdd\}}|r|dd}ddd|d}|d|dtjd }||<|S) Nr rSINGLEDOUBLE)'"rz@__f2py_QUOTES_r@)r1COUNTER__next__)r3rrprsrrs rreplzeliminate_quotes..replsihhj!n e 9D *58 4fOA3a(8(8(:';1 =!rz+({kind}_|)({single_quoted}|{double_quoted})z \w[\w\d_]*z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))r single_quoted double_quotedrr)r/subformat)rJrnew_srrs @reliminate_quotesrsj A FFAHH ,,I. a  E e   e   !8Orc|jD]5\}}|d|jd}|r|dz }|j|||z}7|S)z!Inverse of eliminate_quotes. Nrr)rfindreplace)rJrrrsrtrs r insert_quotesrsW #1!&&+  CKD IIa " # Hrcd\}}t|}dD](\}}|j|}|dk(r||ks#|}||}}*||ifS|}|j||}|j||dz||j||dz|k7r\|j||dz}|dk(rtd||zd||j||dz||j||dz|k7r\dd d d d |}d |dtj d} ||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% q6D ( v FF5M 7  t8D%D ( |"u  A uaA ''$Aq !QWWUAE1%= = FF5!a%  7|D5L>9I!OP P ''$Aq !QWWUAE1%= = H7*EdKA qc7#3#3#5"6a8A !c$i-A qSZ1 2DAq AaD Ra519q=! rcZ|jdsJ||jddS)Nrrr2) startswithsplit)rJs r_get_parenthesis_kindrs, <<. /22 / 773<?rc|jD]<\}}t|}ddddd|}dddd d|}|j|||z|z}>|S) z$Inverse of replace_parenthesis. rrrr)r#r"rr!rr}r)rrr)rJrrrsrtrrrs runreplace_parenthesisrsm +1 !! $ctLQOsMaP IIaE) * + Hrct|j|}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 rrLrLsD 8,2215A!T (+DQCqI JJrceZdZdZdZdZy)_Pairc ||_||_yrpr)rOrrs rrz_Pair.__init__s  rc|j|j}}t|tr|j |}t|tr|j |}t ||Srp)rrrrr&r)rOr(rrs rr&z_Pair.substitute sRiie dD !??;/D eT "$$[1ET5!!rcft|jd|jd|jdSr)rr rrrs rrz_Pair.__repr__s.t*%%&a {"TZZLBBrN)r r r rr&rrrrrrs"Crrc>eZdZejfdZdZdZddZy)rc.d|_d|_||_yrp)original quotes_maprKrNs rrz_FromStringWorker.__init__s   rc.t||jSrp)rr)rOrJs rfinalize_stringz!_FromStringWorker.finalize_stringsQ00rcX||_t|\}|_|j|Srp)rrrprocess)rOinpunquoteds rrz_FromStringWorker.parses) $4S$9!$/||H%%rc Ht|ttfrt|fd|DSt|tsJt||ft |\}|j }fdd|vrq|jd}dk(rtj|Sdk(r%t|dk(rtj|Stdd|tjd |}|rfdk(sJ|j\}}}j|}j|}j|}t|||Sj t"j$ur&tjd |tj&}ntjd |}|r|j\} } } j t"j$urd | zd z} j| | f\} } t(j+| j } t-t.j0| | | fStjd|}|r6|j\} } | } t3| j| Stjd|}t|dkDr~j|dxsd}t5|ddd|dddD]C\}}j|}|j }|dk(r||z }8|dk(sJ||z}E|Sj t"j$urMd|vrI|jd}t-t.j6tj|Stjdj t"j8ur|n|j;dd}t|dkDr|}j t"j8ur|Dcgc]}|j;dd}}j|d}t5|ddd|dddD]=\}}j|}|j }|dk(r||z}2|dk(sJ||z}?|S|j=drMt.j>t.j@d|d}j|dd}t-||Sj t"j8urcd|vr_ttC|jd}j|d}|ddD]}j|}||z}|StjdjEdd |}|rJ|j\} }}|r|jGr tI|}tKtI| |xsd!Stjd"jEd#d$d%|}|r|j\} }}}|r|jGr tI|}| jM} d&| vr)tOtQ| j;d&d'|xsd(StOtQ| |xsd!S|jRvr1|d|jUd)}tWjR||xsdS|vrftY|}j||d*k(rdnd}|d*k(rt|t,r|S|d+vrt|t,r|f}t[|Stjd,|}|r|j\}}}j|}j|dd-d}t|ts|f}|d*k(rU|Dcic])}t|t2r|j\|j^+}}td.|D}ta|g|i|S|d/k(sJ||Stjd0|}|r tc|Sje|}tgd1|d2jhd3tc|Scc}wcc}w)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. c3BK|]}j|ywrp)r)rs_contextrOs rrz,_FromStringWorker.process../sA4<<G4Asc~t|ttfrt|t |St |Srp)rlistrrrr)rraw_symbols_maprestores rrz*_FromStringWorker.process..restore7s5!dE]+tAws7A//(O< ][=]|[>])\s*(.+)\Z.rz\A(\w[\w\d_]*)\s*[=](.*)\Zz((?.sI1Jq%4HQIsr"z\A\w[\w\d_]*\Zzfromstring: treating z as symbol (original=r)5rrrrrrstriprrrrrr/r0r1rrKrrIr0rLrrr*rzipr)rrrr.r-reversedrisdigitrrxrHrrrrrarr2rrr rsrr~r)rOrJrrr7r3operrrrrrkeynamerrArr?rrr4rr5rrrrrs` ` @@rrz_FromStringWorker.process$sR a$ '47AqAA A!S!/DGQ</!13? GGI = !8qwws|,H& T\\(344& x=A%%t||H'=>>%8 QCHJ J HH4a 8 f$ -g -$!(!4 D%<<%DLL'ELL'EdE51 1 ==H,, ,>244IAJAOA  xxz D#u}} 0 00Ci#o,,we}'=>KD%""3"?C T5'9: : HH2A 6 XXZNGUENE$,,u"56 6882A6 x=1 \\'(1+*<"=>F"8ADqD>8ADqD>B & G,,ww'78XXZ9g%F9$9g%F &M ==H,, ,qwwt}-H dll8457 7886"&--8::"=Q"#))D2H"IL x=1 x(H}}HJJ.+35 '$OO,BDI55\\(1+.F"8ADqD>8ADqD>B & G,,w/XXZ9g%F9$9g%F &M << #xxbff-ad3Bll71QR5>2GG$ $ == *tqyHWQWWT]%;<=H\\(1+.F#AB< +,,w/ F* +M HH5<<%='() + XXZNE1d 4yc%j$)!4 4 HHOf%8"32467  8 ! E1a 4yKKMEe|uU]]3%<=tyqII5<3 3  \affSk?DT__Q/; ;  )!,ELL);!<+0G+;IEeT* L..eT*"HE& HHL  "#((* FD%\\'&/2F<< a 3Vrsf 4 (  t *5D5<  d   i & U|   + 6v v rFR   G? <( < >2   888888 ??*C**DZ *: (V  $:: KCC&WWr