K igdZddlmZddlmZddlmZmZddlm Z ddl m Z ddl m Z mZddlmZerdd lmZmZdd lmZdd lmZdd lmZmZ dd ZGddZddZddZddZGddZy)z Puiseux rings. These are used by the ring_series module to represented truncated Puiseux series. Elements of a Puiseux ring are like polynomials except that the exponents can be negative or rational rather than just non-negative integers. ) annotationsQQ)PolyRing PolyElement)Add)Mul)gcdlcm) TYPE_CHECKING)AnyUnpack)Expr)Domain)IterableIteratorc:t||}|f|jzS)acConstruct a Puiseux ring. This function constructs a Puiseux ring with the given symbols and domain. >>> from sympy.polys.domains import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x, y = puiseux_ring('x y', QQ) >>> R PuiseuxRing((x, y), QQ) >>> p = 5*x**QQ(1,2) + 7/y >>> p 7*y**(-1) + 5*x**(1/2) ) PuiseuxRinggens)symbolsdomainrings Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/polys/puiseux.py puiseux_ringr's! w 'D 7TYY c`eZdZdZd dZddZddZddZddZddZ ddZ dd Z dd Z dd Z y )raRing of Puiseux polynomials. A Puiseux polynomial is a truncated Puiseux series. The exponents of the monomials can be negative or rational numbers. This ring is used by the ring_series module: >>> from sympy.polys.domains import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> from sympy.polys.ring_series import rs_exp, rs_nth_root >>> ring, x, y = puiseux_ring('x y', QQ) >>> f = x**2 + y**3 >>> f y**3 + x**2 >>> f.diff(x) 2*x >>> rs_exp(x, x, 5) 1 + x + 1/2*x**2 + 1/6*x**3 + 1/24*x**4 Importantly the Puiseux ring can represent truncated series with negative and fractional exponents: >>> f = 1/x + 1/y**2 >>> f x**(-1) + y**(-2) >>> f.diff(x) -1*x**(-2) >>> rs_nth_root(8*x + x**2 + x**3, 3, x, 5) 2*x**(1/3) + 1/12*x**(4/3) + 23/288*x**(7/3) + -139/20736*x**(10/3) See Also ======== sympy.polys.ring_series.rs_series PuiseuxPoly ct||}|j}|j}||_||_|j|_t |j Dcgc]}|j|c}|_||_|j|j|_|j|j|_ |j|_ |j|_ ycc}wN) rrngens poly_ringrtupler from_polyzeroone zero_monom monomial_mul)selfrrr rgs r__init__zPuiseuxRing.__init__`sWf- !!"  (( innE4>>!,EF  NN9>>2 >>)--0#..%22FsC%c<d|jd|jdS)Nz PuiseuxRing(z, ))rrr's r__repr__zPuiseuxRing.__repr__tsdll^2dkk]!<>> from sympy.polys.domains import QQ >>> from sympy.polys.rings import ring >>> from sympy.polys.puiseux import puiseux_ring >>> R1, x1 = ring('x', QQ) >>> R2, x2 = puiseux_ring('x', QQ) >>> R2.from_poly(x1**2) x**2 ) PuiseuxPoly)r'polys rr"zPuiseuxRing.from_poly|s4&&rc.tj||S)aCreate a Puiseux polynomial from a dictionary of terms. >>> from sympy.polys.domains import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x = puiseux_ring('x', QQ) >>> R.from_dict({(QQ(1,2),): QQ(3)}) 3*x**(1/2) )r5 from_dict)r'termss rr8zPuiseuxRing.from_dicts$$UD11rcB|j|j|S)zCreate a Puiseux polynomial from an integer. >>> from sympy.polys.domains import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x = puiseux_ring('x', QQ) >>> R.from_int(3) 3 )r"r r'ns rfrom_intzPuiseuxRing.from_ints~~dnnQ/00rc8|jj|S)a Create a new element of the domain. >>> from sympy.polys.domains import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x = puiseux_ring('x', QQ) >>> R.domain_new(3) 3 >>> QQ.of_type(_) True )r domain_newr'args rr?zPuiseuxRing.domain_news~~((--rcV|j|jj|S)a-Create a new element from a ground element. >>> from sympy.polys.domains import QQ >>> from sympy.polys.puiseux import puiseux_ring, PuiseuxPoly >>> R, x = puiseux_ring('x', QQ) >>> R.ground_new(3) 3 >>> isinstance(_, PuiseuxPoly) True )r"r ground_newr@s rrCzPuiseuxRing.ground_news"~~dnn77<==rct|tr|j|S|j|j |S)a Coerce an element into the ring. >>> from sympy.polys.domains import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x = puiseux_ring('x', QQ) >>> R(3) 3 >>> R({(QQ(1,2),): QQ(3)}) 3*x**(1/2) )r/dictr8r"r r@s r__call__zPuiseuxRing.__call__s5 c4 >>#& &>>$.."56 6rc8|jj|S)aReturn the index of a generator. >>> from sympy.polys.domains import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x, y = puiseux_ring('x y', QQ) >>> R.index(x) 0 >>> R.index(y) 1 )rindex)r'xs rrHzPuiseuxRing.indexsyyq!!rN)rstr | list[Expr]rrreturnstrr2r rLbool)r6rrLr5)r9dict[tuple[int, ...], Any]rLr5r<intrLr5)rAr rLr )rAr rLr5)rIr5rLrR)__name__ __module__ __qualname____doc__r)r-r3r"r8r=r?rCrFrHrrrr;s;#H3(=M ' 2 1 . >7 "rrc |j}|j}|j|jDcic]\}}||||c}}Scc}}wr)r monomial_divr8r9)r6monomrdivmcs r_div_poly_monomr^H 99D   C >> E13q%=!+E FFEA c |j}|j}|j|jDcic]\}}||||c}}Scc}}wr)rr&r8r9)r6rZrmulr\r]s r_mul_poly_monomrcr_r`c:tdt||DS)Nc3,K|] \}}||z ywrrW.0midis r z_div_monom..s7VRb7r!zip)rZr[s r _div_monomrns 7s5#7 77rcLeZdZUdZded<ded<ded<ded<d6d Ze d7d Ze d7d Zd8d Z e d9d Z e d:dZ e d;dZ ddZd?dZd@dZd>dZdAdZedBdZdCdZe dDdZdEdZdFdZ dGdZdHdZdHdZdIdZdId ZdId!ZdId"Z dId#Z!dId$Z"dId%Z#dId&Z$dId'Z%dJd(Z&dKd)Z'dJd*Z(dKd+Z)dKd,Z*dJd-Z+dKd.Z,dKd/Z-dLd0Z.dLd1Z/dMd2Z0dHd3Z1dNd4Z2y5)Or5aRPuiseux polynomial. Represents a truncated Puiseux series. See the :class:`PuiseuxRing` class for more information. >>> from sympy import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x, y = puiseux_ring('x, y', QQ) >>> p = 5*x**2 + 7*y**3 >>> p 7*y**3 + 5*x**2 The internal representation of a Puiseux polynomial wraps a normal polynomial. To support negative powers the polynomial is considered to be divided by a monomial. >>> p2 = 1/x + 1/y**2 >>> p2.monom # x*y**2 (1, 2) >>> p2.poly x + y**2 >>> (y**2 + x) / (x*y**2) == p2 True To support fractional powers the polynomial is considered to be a function of ``x**(1/nx), y**(1/ny), ...``. The representation keeps track of a monomial and a list of exponent denominators so that the polynomial can be used to represent both negative and fractional powers. >>> p3 = x**QQ(1,2) + y**QQ(2,3) >>> p3.ns (2, 3) >>> p3.poly x + y**2 See Also ======== sympy.polys.puiseux.PuiseuxRing sympy.polys.rings.PolyElement rrrr6tuple[int, ...] | NonerZnsc*|j||ddSr)_new)clsr6rs r__new__zPuiseuxPoly.__new__sxxdD$//rcX|j|||\}}}|j||||Sr) _normalize_new_raw)rtrr6rZrqs rrszPuiseuxPoly._news1..ub9eR||D$r22rchtj|}||_||_||_||_|Sr)objectrurr6rZrq)rtrr6rZrqobjs rrxzPuiseuxPoly._new_raw$s3nnS!  rc2t|trO|j|jk(xr4|j|jk(xr|j|jk(S|j'|j|jj |St Sr)r/r5r6rZrqr3r0r1s rr3zPuiseuxPoly.__eq__3sz e[ ) UZZ'(JJ%++-(GGuxx'  ZZ DGGO99##E* *! !rc"|||ddfS|u|jDcgc]}t|d}}tdt||Drt ||}d}n#t |rt ||}t ||}||j\}\}|j}||ndgt|z} g} g} g} t|||| D]b\} }}}|dk(r t||}n t| ||}| j||z| j||z| j| |zdt d| Dr|j| }|}| t| }td| Drd}n t| }|||fScc}w)Nrc3,K|] \}}||k\ywrrW)rgrirhs rrjz)PuiseuxPoly._normalize..Ks;B28;rkc3&K|] }|dkD ywNrW)rginfls rrjz)PuiseuxPoly._normalize..bs34!83c3&K|] }|dk( ywrrWrgr<s rrjz)PuiseuxPoly._normalize..js*a16*r) tail_degreesmaxallrmr^anyrndeflatedegreeslenr appendinflater!)rtr6rZrqddegs factors_dpoly_drmonom_dns_new monom_new inflationsfinirirhr(s rrwzPuiseuxPoly._normalize?s =RZt# #  '+'8'8':;!C1I;D;;#dE*:;;&tU3T&tT2"5$/ >"&,,. IxllnG$0eqcCL6HGFIJ"%iWg"F +BB7B ABBA bAg&  q)!!"'* +3 33 3D i(*6**6]UBK.ys RZRRBGRRsc3>K|]\}}t||z ywrrrfs rrjz-PuiseuxPoly._monom_fromint..{sFRBGFsc3:K|]\}}t||ywrrrgrhrs rrjz-PuiseuxPoly._monom_fromint..}sABBAc32K|]}t|ywrrrgrhs rrjz-PuiseuxPoly._monom_fromint..s0BB0srlrtrZdmonomrqs r_monom_fromintzPuiseuxPoly._monom_fromintqss  ".R3ufb;QRR R  F3uf3EFF F ^A#eR.AA A0%00 0rc||tdt|||DS|tdt||DS|tdt||DStd|DS)Nc3ZK|]#\}}}t||zj|z%ywrrR numeratorrs rrjz+PuiseuxPoly._monom_toint..s/2<"b"R"W''",-s)+c3RK|]\}}t|j|z!ywrrrfs rrjz+PuiseuxPoly._monom_toint..s"QFBR\\B./Q%'c3RK|]\}}t||zj!ywrrrs rrjz+PuiseuxPoly._monom_toint..s#Ofb"b2g001Orc3FK|]}t|jywrrrs rrjz+PuiseuxPoly._monom_toint..s;rR\\*;s!rlrs r _monom_tointzPuiseuxPoly._monom_toints  ".@CE6SU@V  Qc%>PQQ Q ^OE2OO O;U;; ;rc#K|j|j}}|jjD]}|j |||yw)a@Iterate over the monomials of a Puiseux polynomial. >>> from sympy import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x, y = puiseux_ring('x, y', QQ) >>> p = 5*x**2 + 7*y**3 >>> list(p.itermonoms()) [(2, 0), (0, 3)] >>> p[(2, 0)] 5 N)rZrqr6 itermonomsr)r'rZrqr\s rrzPuiseuxPoly.itermonomssJJJr%%' 4A%%a3 3 4sAAc4t|jS)z7Return a list of the monomials of a Puiseux polynomial.)listrr,s rmonomszPuiseuxPoly.monomssDOO%&&rc"|jSr)rr,s r__iter__zPuiseuxPoly.__iter__s  rcn|j||j|j}|j|Sr)rrZrqr6)r'rZs r __getitem__zPuiseuxPoly.__getitem__s-!!%TWW=yyrc,t|jSr)rr6r,s r__len__zPuiseuxPoly.__len__s499~rc#K|j|j}}|jjD]\}}|j |||}||f yw)a%Iterate over the terms of a Puiseux polynomial. >>> from sympy import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x, y = puiseux_ring('x, y', QQ) >>> p = 5*x**2 + 7*y**3 >>> list(p.iterterms()) [((2, 0), 5), ((0, 3), 7)] N)rZrqr6 itertermsr)r'rZrqr\coeffmqs rrzPuiseuxPoly.itertermssVJJr ++- HAu$$Qr2Be)O sAAc4t|jS)z3Return a list of the terms of a Puiseux polynomial.)rrr,s rr9zPuiseuxPoly.termsDNN$%%rc.|jjS)z7Return True if the Puiseux polynomial is a single term.)r6is_termr,s rrzPuiseuxPoly.is_termsyy   rc4t|jS)z;Return a dictionary representation of a Puiseux polynomial.)rErr,s rto_dictzPuiseuxPoly.to_dictrrc dg|jz}dg|jz}|D]\}t||Dcgc]\}}t||j}}}t||Dcgc]\}}t ||}}}^t |sd}nt dt||D}td|Drd} n t |} |jD cic]\}} |j||| | } }} |jj| } |j|| || Scc}}wcc}}wcc} }w)a^Create a Puiseux polynomial from a dictionary of terms. >>> from sympy import QQ >>> from sympy.polys.puiseux import puiseux_ring, PuiseuxPoly >>> R, x = puiseux_ring('x', QQ) >>> PuiseuxPoly.from_dict({(QQ(1,2),): QQ(3)}, R) 3*x**(1/2) >>> R.from_dict({(QQ(1,2),): QQ(3)}) 3*x**(1/2) rrNc3TK|] \}}t||zj "ywrrrgr\r<s rrjz(PuiseuxPoly.from_dict..s&Kda3A0011Ks&(c3&K|] }|dk( ywrrWrs rrjz(PuiseuxPoly.from_dict..s"!qAv"r) rrmr denominatorminrr!ritemsrr r8rs) rtr9rrqmonmor<r\rZns_finalrterms_pr6s rr8zPuiseuxPoly.from_dicts'S4:: cDJJ 7B47BK@DAq#a'@B@),R6A3q!96C6 73xEKc#rlKKE "r" "HRyHOT{{}]81e3##Auh7>]]~~''0xxdE844#A6^s D/'D5D;c>|j}|j}|j}g}|jD]]\}}|j |}g}t |D]\} } |j || | z|j t|g|_t|S)aOConvert a Puiseux polynomial to :class:`~sympy.core.expr.Expr`. >>> from sympy import QQ, Expr >>> from sympy.polys.puiseux import puiseux_ring >>> R, x = puiseux_ring('x', QQ) >>> p = 5*x**2 + 7*x**3 >>> p.as_expr() 7*x**3 + 5*x**2 >>> isinstance(_, Expr) True ) rrrrto_sympy enumeraterr r) r'rdomrr9rZr coeff_expr monoms_exprir\s ras_exprzPuiseuxPoly.as_exprsyykk,, NN, 8LE5e,JK!%( 41""71:?3 4 LLZ6+6 7  8 E{rc  dd |j}|j}|jDcgc] }t|}}g}t |j D]\}}dj fdt||D}||jk(r&|r|j|M|jd_|s|jt|||j|d|dj |Scc}w)NcT|dk(r|S|dk\rt||k(r|d|S|d|dS)Nrrz**z**(r+)rR)baseexps r format_powerz*PuiseuxPoly.__repr__..format_power sCax c#h#or#''s3%q))r*c3<K|]\}}|s ||ywrrW)rgsers rrjz'PuiseuxPoly.__repr__..s V1TUa!3 Vs 1z + )rrMrrRrLrM) rrrrMsortedr9joinrmr$r) r'rrrsyms terms_strrZr monom_strrs @rr-zPuiseuxPoly.__repr__ s *yykk $ -1A-- "4::<0 9LE5 VD%@P VVI$$Y/$$S)  U,  E7!I;!78 9zz)$$.sDc0|j|j|j}}}|j|j|j}}}||k(r ||k(r||||fS||k(r|}n+||tdt ||D}t ||D cgc] \} } | | z } } } t ||D cgc] \} } | | z } } } |j | }|j | }|tdt || D}|tdt || D}nj|2|}|j |}|Stdt ||D}n6|2|}|j |}|tdt ||D}nJ||k(r|}nq|K|Itdt ||D}t |t||}t |t||}n$||}t ||}n||}t ||}nJ||||fScc} } wcc} } w)z7Bring two Puiseux polynomials to a common monom and ns.c3:K|]\}}t||ywr)r )rgn1n2s rrjz%PuiseuxPoly._unify..5s?vr2s2r{?rc3,K|] \}}||zywrrWrgr\fs rrjz%PuiseuxPoly._unify..;AAq1uArkc3,K|] \}}||zywrrWrs rrjz%PuiseuxPoly._unify..=rrkc3,K|] \}}||zywrrWrs rrjz%PuiseuxPoly._unify..Brrkc3,K|] \}}||zywrrWrs rrjz%PuiseuxPoly._unify..Grrkc3:K|]\}}t||ywr)r)rgm1m2s rrjz%PuiseuxPoly._unify..NsH&"b#b"+Hr)r6rZrqr!rmrrcrn)r'r2poly1monom1ns1poly2monom2ns2rqr<rf1rf2rZs r_unifyzPuiseuxPoly._unify&s! "YY DGGsv"ZZehhsv V s %, , #:B _?S#??B'*2s|4ea!r'4B4'*2s|4ea!r'4B4MM"%EMM"%E!AVRAA!AVRAA _BMM"%E!AVRAA _BMM"%E!AVRAA 5 V E  F$6HC4GHHE#E:eV+DEE#E:eV+DEE  E#E62E  E#E62E 5eUB&&I54s H 2Hc|SrrWr,s r__pos__zPuiseuxPoly.__pos__\s rc||j|j|j |j|jSrrxrr6rZrqr,s r__neg__zPuiseuxPoly.__neg___s)}}TYY DJJHHrct|tr5|j|jk7r td|j |S|jj }t|t r.|j|jt|tS|j|r|j|StS)Nz3Cannot add Puiseux polynomials from different rings) r/r5r ValueError_addrrR _add_ground convert_fromrof_typer0r'r2rs r__add__zPuiseuxPoly.__add__bs e[ )yyEJJ& !VWW99U# #!! eS !##F$7$75 2$FG G ^^E "##E* *! !rc|jj}t|tr.|j |j t |t S|j|r|j |StSr) rrr/rRrrrrr0rs r__radd__zPuiseuxPoly.__radd__o`!! eS !##F$7$75 2$FG G ^^E "##E* *! !rct|tr5|j|jk7r td|j |S|jj }t|t r.|j|jt|tS|j|r|j|StS)Nz8Cannot subtract Puiseux polynomials from different rings) r/r5rr_subrrR _sub_groundrrrr0rs r__sub__zPuiseuxPoly.__sub__x e[ )yyEJJ& N99U# #!! eS !##F$7$75 2$FG G ^^E "##E* *! !rc|jj}t|tr.|j |j t |t S|j|r|j |StSr) rrr/rR _rsub_groundrrrr0rs r__rsub__zPuiseuxPoly.__rsub__s`!! eS !$$V%8%8EB%GH H ^^E "$$U+ +! !rct|tr5|j|jk7r td|j |S|jj }t|t r.|j|jt|tS|j|r|j|StS)Nz8Cannot multiply Puiseux polynomials from different rings) r/r5rr_mulrrR _mul_groundrrrr0rs r__mul__zPuiseuxPoly.__mul__rrc|jj}t|tr.|j |j t |t S|j|r|j |StSr) rrr/rRrrrrr0rs r__rmul__zPuiseuxPoly.__rmul__r rct|tr(|dk\r|j|S|j| St j |r|j |StS)Nr)r/rR _pow_pint _pow_nintrr _pow_rationalr0r1s r__pow__zPuiseuxPoly.__pow__sV eS !z~~e,,~~uf-- ZZ %%e, ,! !rct|trC|j|jk7r td|j |j S|jj }t|tr/|j|jtd|tS|j|r|j|StS)Nz6Cannot divide Puiseux polynomials from different ringsr)r/r5rrr_invrrRrrrr _div_groundr0rs r __truediv__zPuiseuxPoly.__truediv__s e[ )yyEJJ& L99UZZ\* *!! eS !##F$7$71e b$IJ J ^^E "##E* *! !rcVt|trP|jj|jj j t|tS|jj j|r|jj|StSr) r/rRr rrrrrrr0r1s r __rtruediv__zPuiseuxPoly.__rtruediv__st eS !99;**499+;+;+H+HETV+WX X YY   % %e ,99;**51 1! !rcp|j|\}}}}|j|j||z||Srrrsrr'r2rrrZrqs rrzPuiseuxPoly._add6"&++e"4ueRyyEEM5"==rcV|j|jj|Sr)rrrCr'grounds rrzPuiseuxPoly._add_ground yy--f566rcp|j|\}}}}|j|j||z ||Srr&r's rr zPuiseuxPoly._subr(rcV|j|jj|Sr)r rrCr*s rrzPuiseuxPoly._sub_groundr,rcV|jj|j|Sr)rrCr r*s rrzPuiseuxPoly._rsub_grounds"yy##F+0066rc|j|\}}}}|td|D}|j|j||z||S)Nc3&K|] }d|z yw)NrW)rgrs rrjz#PuiseuxPoly._mul..s/A!a%/r)rr!rsrr's rrzPuiseuxPoly._mulsL"&++e"4ueR  ///EyyEEM5"==rc|j|j|j|z|j|jSrrr*s rrzPuiseuxPoly._mul_ground,}}TYY F(:DJJPPrc|j|j|j|z |j|jSrrr*s rr!zPuiseuxPoly._div_groundr4rcdk\sJ|j}|tfd|D}|j|j|jz||j S)Nrc3(K|] }|z ywrrWrs rrjz(PuiseuxPoly._pow_pint..s/A!a%/)rZr!rsrr6rq)r'r<rZs ` rrzPuiseuxPoly._pow_pintsRAv v   ///EyyDIIqL%AArc@|jj|Sr)r rr;s rrzPuiseuxPoly._pow_nintsyy{$$Q''rc6|js td|j\\}}|jj}|j |s tdt fd|D}|jj||jiS)Nz0Only monomials can be raised to a rational powerc3(K|] }|z ywrrWrs rrjz,PuiseuxPoly._pow_rational..s+a!e+r8) rrr9rris_oner!r8r$)r'r<rZrrs ` rrzPuiseuxPoly._pow_rationals}||OP P::<%!!}}U#OP P+U++yy""E6::#677rc>|js td|j\\}}|jj}|j s|j |s tdtd|D}d|z }|jj||iS)NzOnly terms can be invertedz"Cannot invert non-unit coefficientc3"K|]}|  ywrrW)rgr\s rrjz#PuiseuxPoly._inv..s(Qqb(s r) rrr9rris_Fieldr<r!r8)r'rZrrs rr zPuiseuxPoly._invs||9: :::<%!!v}}U';AB B(%((E yy""E5>22rc|j}|j|}i}|jD]6\}}||}|st|}||xxdzcc<||z|t |<8||S)a:Differentiate a Puiseux polynomial with respect to a variable. >>> from sympy import QQ >>> from sympy.polys.puiseux import puiseux_ring >>> R, x, y = puiseux_ring('x, y', QQ) >>> p = 5*x**2 + 7*y**3 >>> p.diff(x) 10*x >>> p.diff(y) 21*y**2 r)rrHrrr!) r'rIrrr(expvrr<rs rdiffzPuiseuxPoly.diffswyy JJqM >>+ (KD%QAJ! #ai%(  ( AwrN)r6rrrrLr5) rrr6rrZrprqrprLr5rN)r6rrZrprqrprLzBtuple[PolyElement, tuple[int, ...] | None, tuple[int, ...] | None])rZtuple[int, ...]rrprqrprLtuple[Any, ...])rZrDrrprqrprLrC)rLzIterator[tuple[Any, ...]])rLzlist[tuple[Any, ...]])rLz%Iterator[tuple[tuple[Any, ...], Any]])rZrCrLr )rLrR)rLz!list[tuple[tuple[Any, ...], Any]])rLrO)rLrP)r9zdict[tuple[Any, ...], Any]rrrLr5)rLrrK)r2r5rLzOtuple[PolyElement, PolyElement, tuple[int, ...] | None, tuple[int, ...] | None])rLr5)r2r rLr5)r2r5rLr5)r+r rLr5rQ)r<r rLr5)rIr5rLr5)3rSrTrUrV__annotations__ru classmethodrsrxr3rwrrrrrrrrr9propertyrrr8rr-rrrrr rrrrrr"r$rrr rrrrr!rrrr rBrWrrr5r5sk'R   !!0333& 3 # 3  33   &  #     "//&/ # / L //b 1 1' 1 # 1  1 1<<'< # <  <<"4 '!  &!!&!5.!56A!5 !5!5F0%:4' 4' 4'lI "" "" "" " "">7>77> QQB(8 3rr5N)rrJrrrLz3tuple[PuiseuxRing, Unpack[tuple[PuiseuxPoly, ...]]])r6rrZ Iterable[int]rLr)rZrHr[rHrLrC)rV __future__rsympy.polys.domainsrsympy.polys.ringsrrsympy.core.addrsympy.core.mulr sympy.external.gmpyr r typingr r rsympy.core.exprrrcollections.abcrrrrr^rcrnr5rWrrrRs{&#"3(!"$*2 '-8(Y"Y"xG G 8ttr