ó
    Š*£h@P ã                  ó  • S r SSKJr  SSKJrJrJrJrJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJrJr  SS
KJrJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"J#r#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*  SSK+J,r,  SSK-J.r.  SSK/J0r0J1r1  SSK2J3r3J4r4J5r5J6r6  SSK7J&r8J9r:J;r;  SSK<J=r=J>r>J?r?  SSK@JArA  SSKBJCrCJDrD  SSKEJFrF  SSKGJHrH  \C\04S&S jj5       rI\C\04S j5       rJ\C\04S j5       rK\CS 5       rLS  rM " S! S"\A\5      rN " S# S$\(\A\\O5      rPg%)'zSparse polynomial rings. é    )Úannotations)ÚaddÚmulÚltÚleÚgtÚge)Úreduce)ÚGeneratorType)Úcacheit)ÚExpr)Úigcd)ÚSymbolÚsymbols)ÚCantSympifyÚsympify)Úmultinomial_coefficients)ÚIPolys)Úconstruct_domain)ÚninfÚdmp_to_dictÚdmp_from_dict)ÚDomain)ÚDomainElement©ÚPolynomialRing©Úheugcd)ÚMonomialOps)ÚlexÚMonomialOrder)ÚCoercionFailedÚGeneratorsErrorÚExactQuotientFailedÚMultivariatePolynomialError)r   ÚOrderÚbuild_options)Úexpr_from_dictÚ_dict_reorderÚ_parallel_dict_from_expr)ÚDefaultPrinting)ÚpublicÚsubsets)Úis_sequence)Úpollutec                ó:   • [        XU5      nU4UR                  -   $ )aR  Construct a polynomial ring returning ``(ring, x_1, ..., x_n)``.

Parameters
==========

symbols : str
    Symbol/Expr or sequence of str, Symbol/Expr (non-empty)
domain : :class:`~.Domain` or coercible
order : :class:`~.MonomialOrder` or coercible, optional, defaults to ``lex``

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.orderings import lex

>>> R, x, y, z = ring("x,y,z", ZZ, lex)
>>> R
Polynomial ring in x, y, z over ZZ with lex order
>>> x + y + z
x + y + z
>>> type(_)
<class 'sympy.polys.rings.PolyElement'>

©ÚPolyRingÚgens©r   ÚdomainÚorderÚ_rings       ÚN/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/rings.pyÚringr9   $   s!   € ô8 �W eÓ,€EØˆ8�e—j‘jÑ Ð ó    c                ó4   • [        XU5      nX3R                  4$ )aX  Construct a polynomial ring returning ``(ring, (x_1, ..., x_n))``.

Parameters
==========

symbols : str
    Symbol/Expr or sequence of str, Symbol/Expr (non-empty)
domain : :class:`~.Domain` or coercible
order : :class:`~.MonomialOrder` or coercible, optional, defaults to ``lex``

Examples
========

>>> from sympy.polys.rings import xring
>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.orderings import lex

>>> R, (x, y, z) = xring("x,y,z", ZZ, lex)
>>> R
Polynomial ring in x, y, z over ZZ with lex order
>>> x + y + z
x + y + z
>>> type(_)
<class 'sympy.polys.rings.PolyElement'>

r1   r4   s       r8   Úxringr<   C   s   € ô8 �W eÓ,€EØ—:‘:ÐÐr:   c                óœ   • [        XU5      n[        UR                   Vs/ s H  oDR                  PM     snUR                  5        U$ s  snf )a\  Construct a polynomial ring and inject ``x_1, ..., x_n`` into the global namespace.

Parameters
==========

symbols : str
    Symbol/Expr or sequence of str, Symbol/Expr (non-empty)
domain : :class:`~.Domain` or coercible
order : :class:`~.MonomialOrder` or coercible, optional, defaults to ``lex``

Examples
========

>>> from sympy.polys.rings import vring
>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.orderings import lex

>>> vring("x,y,z", ZZ, lex)
Polynomial ring in x, y, z over ZZ with lex order
>>> x + y + z # noqa:
x + y + z
>>> type(_)
<class 'sympy.polys.rings.PolyElement'>

)r2   r/   r   Únamer3   )r   r5   r6   r7   Úsyms        r8   Úvringr@   b   s=   € ô6 �W eÓ,€EÜ %§-¢-Ó1¢-˜3�hŒh¡-Ñ1°5·:±:Ô>Ø€Lùò 2s    A	c                óª  • Sn[        U 5      (       d  U /Sp0[        [        [        U 5      5      n [	        X5      n[        X5      u  pTUR                  c”  [        U Vs/ s H  n[        UR                  5       5      PM     sn/ 5      n[        XtS9u  Ul        n[        [        Xx5      5      n	U VV
Vs/ s H*  ofR                  5        V
Vs0 s H
  u  p«X©U   _M     snn
PM,     nn
nn[        UR                  UR                  UR                  5      n[        [        UR                   U5      5      nU(       a  XÍS   4$ XÍ4$ s  snf s  snn
f s  snn
nf )a   Construct a ring deriving generators and domain from options and input expressions.

Parameters
==========

exprs : :class:`~.Expr` or sequence of :class:`~.Expr` (sympifiable)
symbols : sequence of :class:`~.Symbol`/:class:`~.Expr`
options : keyword arguments understood by :class:`~.Options`

Examples
========

>>> from sympy import sring, symbols

>>> x, y, z = symbols("x,y,z")
>>> R, f = sring(x + 2*y + 3*z)
>>> R
Polynomial ring in x, y, z over ZZ with lex order
>>> f
x + 2*y + 3*z
>>> type(_)
<class 'sympy.polys.rings.PolyElement'>

FT)Úoptr   )r.   ÚlistÚmapr   r'   r*   r5   ÚsumÚvaluesr   ÚdictÚzipÚitemsr2   r3   r6   Ú	from_dict)Úexprsr   ÚoptionsÚsinglerB   ÚrepsÚrepÚcoeffsÚ
coeffs_domÚ	coeff_mapÚmÚcr7   Úpolyss                 r8   ÚsringrV   �   s  € ð4 €Fä�u×ÑØ˜ ˆvä””W˜eÓ$Ó%€EÜ
˜Ó
)€Cô )¨Ó4�I€Dà
‡z�zÑÜ±TÓ;²T¨c”t˜CŸJ™J›LÖ)±TÑ;¸RÓ@ˆä!1°&Ñ!BÑˆŒ
�Jäœ˜VÓ0Ó1ˆ	ÙEIÕJÂT¸c¯Y©Y¬[Ô9ª[¡T Q�˜a‘L’©[Õ9ÁTˆÒJä�S—X‘X˜sŸz™z¨3¯9©9Ó5€EÜ”�U—_‘_ dÓ+Ó,€EæØ˜Q‘xÐ Ð àˆ~Ðùò <ùó
 :ùÔJs   Á#EÂ4EÃEÃEÅEc                ó.  • [        U [        5      (       a  U (       a
  [        U SS9$ S$ [        U [        5      (       a  U 4$ [	        U 5      (       a;  [        S U  5       5      (       a  [        U 5      $ [        S U  5       5      (       a  U $ [        S5      e)NT)Úseq© c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7f©N)Ú
isinstanceÚstr©Ú.0Úss     r8   Ú	<genexpr>Ú!_parse_symbols.<locals>.<genexpr>¼   s   é € Ð3ª7 aŒz˜!œS×!Ð!ª7ùó   ‚c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr[   )r\   r   r^   s     r8   ra   rb   ¾   s   é € Ð6ªg¨”˜Aœt×$Ð$ªgùrc   zbexpected a string, Symbol or expression or a non-empty sequence of strings, Symbols or expressions)r\   r]   Ú_symbolsr   r.   Úallr#   ©r   s    r8   Ú_parse_symbolsrh   ¶   s�   € Ü�'œ3×ÑÞ.5Œx˜ TÑ*Ð=¸2Ð=Ü	�GœT×	"Ñ	"ØˆzÐÜ	�W×	Ñ	ÜÑ3©7Ó3×3Ñ3Ü˜GÓ$Ð$ÜÑ6©gÓ6×6Ñ6ØˆNä
Ð~Ó
Ðr:   c                  óp  • \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   \4S jrS rS r	S r
S rS rS rS3S jr\S 5       rS r\S 5       r\S 5       rS rS4S jrS rS rS r\rS4S jrS4S  jrS! rS" rS# rS$ r S% r!S& r"S' r#S( r$S) r%\S* 5       r&\S+ 5       r'S, r(S- r)S. r*S/ r+S0 r,S1 r-S2r.g)5r2   éÄ   z*Multivariate distributed polynomial ring. ztuple[PolyElement, ...]r3   ztuple[Expr, ...]r   ÚintÚngensr   r5   r!   r6   c                ól  ^• [        [        U5      5      n[        U5      n[        R                  " U5      n[
        R                  " T5      mU R                  XUT4nUR                  (       a1  [        U5      [        UR                  5      -  (       a  [        S5      e[        R                  U 5      nXVl        [        U5      Ul        Xl	        XFl        X&l        TUl        ['        US5      R(                  Ul        SU-  Ul        UR/                  5       Ul        [        UR0                  5      Ul        UR,                  UR4                  4/Ul        U(       aŸ  [9        U5      nUR;                  5       Ul        UR?                  5       Ul         URC                  5       Ul"        URG                  5       Ul$        URK                  5       Ul&        URO                  5       Ul(        URS                  5       Ul*        O/S nX†l        X†l         S Ul"        X†l$        X†l&        X†l(        X†l*        T[V        L a  [X        Ul-        OU4S jUl-        []        UR                  UR0                  5       HF  u  pš[_        U	[`        5      (       d  M  U	Rb                  n[e        Xk5      (       a  M:  [g        XkU
5        MH     U$ )Nz7polynomial ring and it's ground domain share generatorsrY   ©r   c                ó   • g©NrY   rY   )ÚaÚbs     r8   Ú<lambda>Ú"PolyRing.__new__.<locals>.<lambda>ó   s   €  2r:   c                ó   • grp   rY   )rq   rr   rT   s      r8   rs   rt   ö   s   € °"r:   c                ó   >• [        U TS9$ )N©Úkey)Úmax)Úfr6   s    €r8   rs   rt      s   ø€ ¬¨Q°EÒ):r:   )4Útuplerh   ÚlenÚ	DomainOptÚ
preprocessÚOrderOptÚ__name__Úis_CompositeÚsetr   r#   ÚobjectÚ__new__Ú_hash_tupleÚhashÚ_hashrl   r5   r6   ÚPolyElementÚnewÚdtypeÚ
zero_monomÚ_gensr3   Ú	_gens_setÚoneÚ_oner   r   Úmonomial_mulÚpowÚmonomial_powÚmulpowÚmonomial_mulpowÚldivÚmonomial_ldivÚdivÚmonomial_divÚlcmÚmonomial_lcmÚgcdÚmonomial_gcdr    ry   Úleading_expvrH   r\   r   r>   ÚhasattrÚsetattr)Úclsr   r5   r6   rl   r…   ÚobjÚcodegenÚmonunitÚsymbolÚ	generatorr>   s      `        r8   r„   ÚPolyRing.__new__Í   s  ø€ Üœ wÓ/Ó0ˆÜ�G“ˆÜ×%Ò% fÓ-ˆÜ×#Ò# EÓ*ˆà—|‘| W°V¸UÐCˆà××¤3 w£<´#°f·n±nÓ2E×#EÜ!Ð"[Ó\Ð\ä�n‰n˜SÓ!ˆØ%ŒÜ˜Ó%ˆŒ	ØŒØŒ	ØŒ
ØˆŒ	ä  RÓ(×,Ñ,ˆŒ	à˜e™ˆŒØ—9‘9“;ˆŒÜ˜CŸH™H›ˆŒà—^‘^ V§Z¡ZÐ0Ð1ˆŒæä! %Ó(ˆGØ&Ÿ{™{›}ˆCÔØ&Ÿ{™{›}ˆCÔØ")§.¡.Ó"2ˆCÔØ '§¡£ˆCÔØ&Ÿ{™{›}ˆCÔØ&Ÿ{™{›}ˆCÔØ&Ÿ{™{›}ˆCÕá%ˆGØ&ÔØ&ÔÙ"4ˆCÔØ 'ÔØ&ÔØ&ÔØ&Ôð ”CŠ<Ü"ˆCÕä:ˆCÔä!$ S§[¡[°#·(±(Ö!;ÑˆFÜ˜&¤&×)Ó)Ø—{‘{�ä˜s×)Ó)Ü˜C yÖ1ñ "<ð ˆ
r:   c                óä   • U R                   R                  n/ n[        U R                  5       H5  nU R	                  U5      nU R
                  nXU'   UR                  U5        M7     [        U5      $ )z(Return a list of polynomial generators. )r5   rŽ   Úrangerl   Úmonomial_basisÚzeroÚappendr{   )ÚselfrŽ   rŒ   ÚiÚexpvÚpolys         r8   rŒ   ÚPolyRing._gens  s_   € à�k‰k�o‰oˆØˆÜ�t—z‘zÖ"ˆAØ×&Ñ& qÓ)ˆDØ—9‘9ˆDØ�‰JØ�L‰L˜Öñ	 #ô
 �U‹|Ðr:   c                óH   • U R                   U R                  U R                  4$ r[   )r   r5   r6   ©r¬   s    r8   Ú__getnewargs__ÚPolyRing.__getnewargs__  s   € Ø—‘˜dŸk™k¨4¯:©:Ð6Ð6r:   c                ó†   • U R                   R                  5       nUS	 U H  nUR                  S5      (       d  M  X	 M     U$ )Nr�   Ú	monomial_)Ú__dict__ÚcopyÚ
startswith)r¬   Ústaterx   s      r8   Ú__getstate__ÚPolyRing.__getstate__  sA   € Ø—‘×"Ñ"Ó$ˆØ�.Ð!ãˆCØ�~‰~˜k×*Ó*Ø’Jñ ð ˆr:   c                ó   • U R                   $ r[   )r‡   r²   s    r8   Ú__hash__ÚPolyRing.__hash__#  s   € Ø�z‰zÐr:   c                óê   • [        U[        5      =(       a]    U R                  U R                  U R                  U R
                  4UR                  UR                  UR                  UR
                  4:H  $ r[   )r\   r2   r   r5   rl   r6   ©r¬   Úothers     r8   Ú__eq__ÚPolyRing.__eq__&  sV   € Ü˜%¤Ó*÷ DØ�\‰\˜4Ÿ;™;¨¯
©
°D·J±JÐ?Ø�]‰]˜EŸL™L¨%¯+©+°u·{±{ÐCñDð	Dr:   c                ó   • X:X  + $ r[   rY   rÁ   s     r8   Ú__ne__ÚPolyRing.__ne__+  s   € ØÒ Ð r:   Nc                ól   • Ub   [        U[        5      (       a  [        U5      nU R                  XU5      $ r[   )r\   rC   r{   Ú_clone©r¬   r   r5   r6   s       r8   ÚcloneÚPolyRing.clone.  s.   € àÑ¤:¨g´t×#<Ñ#<Ü˜G“nˆGØ�{‰{˜7¨EÓ2Ð2r:   c                óš   • U R                  U=(       d    U R                  U=(       d    U R                  U=(       d    U R                  5      $ r[   )Ú	__class__r   r5   r6   rÊ   s       r8   rÉ   ÚPolyRing._clone4  s3   € à�~‰~˜g×5¨¯©°v×7LÀÇÁÈe×NaÐW[×WaÑWaÓbÐbr:   c                ó@   • S/U R                   -  nSX!'   [        U5      $ )zReturn the ith-basis element. r   é   )rl   r{   )r¬   r­   Úbasiss      r8   r©   ÚPolyRing.monomial_basis8  s"   € à��D—J‘J‘ˆØˆ‰Ü�U‹|Ðr:   c                ó$   • U R                  / 5      $ r[   )rŠ   r²   s    r8   rª   ÚPolyRing.zero>  s   € à�z‰z˜"‹~Ðr:   c                ó8   • U R                  U R                  5      $ r[   )rŠ   r�   r²   s    r8   rŽ   ÚPolyRing.oneB  s   € à�z‰z˜$Ÿ)™)Ó$Ð$r:   c                óN   • [        U[        5      =(       a    UR                  U :H  $ )zATrue if ``element`` is an element of this ring. False otherwise. )r\   rˆ   r9   ©r¬   Úelements     r8   Ú
is_elementÚPolyRing.is_elementF  s   € ä˜'¤;Ó/×H°G·L±LÀDÑ4HÐHr:   c                ó8   • U R                   R                  X5      $ r[   )r5   Úconvert©r¬   rÚ   Úorig_domains      r8   Ú
domain_newÚPolyRing.domain_newJ  s   € Ø�{‰{×"Ñ" 7Ó8Ð8r:   c                ó:   • U R                  U R                  U5      $ r[   )Úterm_newr‹   )r¬   Úcoeffs     r8   Ú
ground_newÚPolyRing.ground_newM  s   € Ø�}‰}˜TŸ_™_¨eÓ4Ð4r:   c                óV   • U R                  U5      nU R                  nU(       a  X#U'   U$ r[   )rá   rª   )r¬   Úmonområ   r¯   s       r8   rä   ÚPolyRing.term_newP  s(   € Ø—‘ Ó&ˆØ�y‰yˆÞØ�‰KØˆr:   c                ó–  • [        U[        5      (       ap  XR                  :X  a  U$ [        U R                  [        5      (       a5  U R                  R                  UR                  :X  a  U R                  U5      $ [        S5      e[        U[        5      (       a  [        S5      e[        U[        5      (       a  U R                  U5      $ [        U[        5      (       a   U R                  U5      $ [        U[        5      (       a  U R                  U5      $ U R                  U5      $ ! [         a    U R                  U5      s $ f = f)NÚ
conversionÚparsing)r\   rˆ   r9   r5   r   ræ   ÚNotImplementedErrorr]   rG   rJ   rC   Ú
from_termsÚ
ValueErrorÚ	from_listr   Ú	from_exprrÙ   s     r8   Úring_newÚPolyRing.ring_newW  s  € Ü�gœ{×+Ñ+Ø—|‘|Ó#Ø�Ü˜DŸK™K¬×8Ñ8¸T¿[¹[×=MÑ=MÐQX×Q]ÑQ]Ó=]Ø—‘ wÓ/Ð/ä)¨,Ó7Ð7Ü˜¤×%Ñ%Ü% iÓ0Ð0Ü˜¤×&Ñ&Ø—>‘> 'Ó*Ð*Ü˜¤×&Ñ&ð/Ø—‘ wÓ/Ð/ô ˜¤×&Ñ&Ø—>‘> 'Ó*Ð*à—?‘? 7Ó+Ð+øô ó /Ø—~‘~ gÓ.Ò.ð/ús   Ã"D* Ä*EÅEc                ó’   • U R                   nU R                  nUR                  5        H  u  pVU" Xb5      nU(       d  M  XdU'   M     U$ r[   )rá   rª   rI   )r¬   rÚ   rà   rá   r¯   ré   rå   s          r8   rJ   ÚPolyRing.from_dicto  sC   € Ø—_‘_ˆ
Ø�y‰yˆà#ŸM™MžO‰LˆEÙ˜uÓ2ˆEßˆuØ#�U“ñ ,ð
 ˆr:   c                ó8   • U R                  [        U5      U5      $ r[   )rJ   rG   rß   s      r8   rï   ÚPolyRing.from_termsz  s   € Ø�~‰~œd 7›m¨[Ó9Ð9r:   c                óf   • U R                  [        XR                  S-
  U R                  5      5      $ ©NrÑ   )rJ   r   rl   r5   rÙ   s     r8   rñ   ÚPolyRing.from_list}  s$   € Ø�~‰~œk¨'·:±:¸a±<ÀÇÁÓMÓNÐNr:   c                óV   ^ ^^^• T R                   mUUUU 4S jmT" [        U5      5      $ )Nc           	     óâ  >• TR                  U 5      nUb  U$ U R                  (       a-  [        [        [	        [        TU R                  5      5      5      $ U R                  (       a-  [        [        [	        [        TU R                  5      5      5      $ U R                  5       u  p#UR                  (       a  US:”  a  T" U5      [        U5      -  $ TR                  TR                  U 5      5      $ rú   )ÚgetÚis_Addr
   r   rC   rD   ÚargsÚis_Mulr   Úas_base_expÚ
is_Integerrk   ræ   rÞ   )Úexprr¥   ÚbaseÚexpÚ_rebuildr5   Úmappingr¬   s       €€€€r8   r  Ú(PolyRing._rebuild_expr.<locals>._rebuildƒ  s¯   ø€ ØŸ™ DÓ)ˆIàÑ$Ø Ð Ø——Üœc¤4¬¨H°d·i±iÓ(@Ó#AÓBÐBØ——Üœc¤4¬¨H°d·i±iÓ(@Ó#AÓBÐBð !×,Ñ,Ó.‘	�Ø—>—> c¨A£gÙ# D›>¬3¨s«8Ñ3Ð3àŸ?™?¨6¯>©>¸$Ó+?Ó@Ð@r:   )r5   r   )r¬   r  r  r  r5   s   ` `@@r8   Ú_rebuild_exprÚPolyRing._rebuild_expr€  s)   û€ Ø—‘ˆ÷	Að 	Añ$ œ ›Ó&Ð&r:   c                óî   • [        [        [        U R                  U R                  5      5      5      n U R                  X5      nU R                  U5      $ ! [         a    [        SU < SU< 35      ef = f)Nz6expected an expression convertible to a polynomial in z, got )	rG   rC   rH   r   r3   r
  ró   r"   rð   )r¬   r  r  r¯   s       r8   rò   ÚPolyRing.from_expr—  sk   € Ü”tœC §¡¨d¯i©iÓ8Ó9Ó:ˆð	'Ø×%Ñ% dÓ4ˆDð —=‘= Ó&Ð&øô ó 	pÝÓcgÒimÐnÓoÐoð	pús   ´A ÁA4c                óN  • Uc  U R                   (       a  SnU$ Sn U$ [        U[        5      (       aG  UnSU::  a  X R                   :  a   U$ U R                   * U::  a  US::  a  U* S-
  nU$ [        SU-  5      eU R	                  U5      (       a   U R
                  R                  U5      nU$ [        U[        5      (       a   U R                  R                  U5      nU$ [        SU-  5      e! [         a    [        SU-  5      ef = f! [         a    [        SU-  5      ef = f)z+Compute index of ``gen`` in ``self.gens``. r   éÿÿÿÿrÑ   zinvalid generator index: %szinvalid generator: %szEexpected a polynomial generator, an integer, a string or None, got %s)	rl   r\   rk   rð   rÛ   r3   Úindexr]   r   )r¬   Úgenr­   s      r8   r  ÚPolyRing.index¡  sI  € à‰;Ø�z�zØ�ð2 ˆð/ ‘ð. ˆô- ˜œS×!Ñ!ØˆAà�A‹v˜!Ÿj™j›.Øð$ ˆð# —*‘*� Ó! a¨2£gØ�B˜‘F�ð  ˆô !Ð!>ÀÑ!DÓEÐEØ�_‰_˜S×!Ñ!ð@Ø—I‘I—O‘O CÓ(�ð ˆô ˜œS×!Ñ!ð@Ø—L‘L×&Ñ& sÓ+�ð ˆô ÐdÐgjÑjÓkÐkøô ó @Ü Ð!8¸3Ñ!>Ó?Ð?ð@ûô
 ó @Ü Ð!8¸3Ñ!>Ó?Ð?ð@ús   ÂC/ ÃD Ã/DÄD$c                óð   • [        [        U R                  U5      5      n[        U R                  5       VVs/ s H  u  p4X2;  d  M  UPM     nnnU(       d  U R
                  $ U R                  US9$ s  snnf )z,Remove specified generators from this ring. rg   )r‚   rD   r  Ú	enumerater   r5   rË   )r¬   r3   Úindicesr­   r`   r   s         r8   ÚdropÚPolyRing.dropÀ  sa   € ä”c˜$Ÿ*™* dÓ+Ó,ˆÜ"+¨D¯L©LÔ"9ÔOÒ"9™$˜!¸QÑ=M—AÑ"9ˆÑOæØ—;‘;Ðà—:‘: g�:Ð.Ð.ùó Ps   ¸A2ÁA2c                ód   • U R                   U   nU(       d  U R                  $ U R                  US9$ )Nrg   )r   r5   rË   )r¬   rx   r   s      r8   Ú__getitem__ÚPolyRing.__getitem__Ê  s.   € Ø—,‘,˜sÑ#ˆæØ—;‘;Ðà—:‘: g�:Ð.Ð.r:   c                óä   • U R                   R                  (       d  [        U R                   S5      (       a#  U R                  U R                   R                   S9$ [	        SU R                   -  5      e)Nr5   ©r5   z%s is not a composite domain)r5   r�   rž   rË   rð   r²   s    r8   Ú	to_groundÚPolyRing.to_groundÒ  sO   € à�;‰;×#×#¤w¨t¯{©{¸H×'EÑ'EØ—:‘: T§[¡[×%7Ñ%7�:Ð8Ð8äÐ;¸d¿k¹kÑIÓJÐJr:   c                ó   • [        U 5      $ r[   r   r²   s    r8   Ú	to_domainÚPolyRing.to_domainÙ  s   € Ü˜dÓ#Ð#r:   c                ó^   • SSK Jn  U" U R                  U R                  U R                  5      $ )Nr   )Ú	FracField)Úsympy.polys.fieldsr#  r   r5   r6   )r¬   r#  s     r8   Úto_fieldÚPolyRing.to_fieldÜ  s    € Ý0Ù˜Ÿ™ t§{¡{°D·J±JÓ?Ð?r:   c                ó2   • [        U R                  5      S:H  $ rú   ©r|   r3   r²   s    r8   Úis_univariateÚPolyRing.is_univariateà  s   € ä�4—9‘9‹~ Ñ"Ð"r:   c                ó2   • [        U R                  5      S:„  $ rú   r(  r²   s    r8   Úis_multivariateÚPolyRing.is_multivariateä  s   € ä�4—9‘9‹~ Ñ!Ð!r:   c                ó„   • U R                   nU H-  n[        U[        S9(       a  X R                  " U6 -  nM)  X#-  nM/     U$ )a  
Add a sequence of polynomials or containers of polynomials.

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> R, x = ring("x", ZZ)
>>> R.add([ x**2 + 2*i + 3 for i in range(4) ])
4*x**2 + 24
>>> _.factor_list()
(4, [(x**2 + 6, 1)])

©Úinclude)rª   r.   r   r   ©r¬   ÚobjsÚpr¡   s       r8   r   ÚPolyRing.addè  s?   € ð" �I‰IˆãˆCÜ˜3¬×6Ø—X’X˜s�^Ñ#’à‘’ñ	 ð ˆr:   c                ó„   • U R                   nU H-  n[        U[        S9(       a  X R                  " U6 -  nM)  X#-  nM/     U$ )ap  
Multiply a sequence of polynomials or containers of polynomials.

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> R, x = ring("x", ZZ)
>>> R.mul([ x**2 + 2*i + 3 for i in range(4) ])
x**8 + 24*x**6 + 206*x**4 + 744*x**2 + 945
>>> _.factor_list()
(1, [(x**2 + 3, 1), (x**2 + 5, 1), (x**2 + 7, 1), (x**2 + 9, 1)])

r/  )rŽ   r.   r   r   r1  s       r8   r   ÚPolyRing.mul  s?   € ð" �H‰HˆãˆCÜ˜3¬×6Ø—X’X˜s�^Ñ#’à‘’ñ	 ð ˆr:   c                ób  • [        [        U R                  U5      5      n[        U R                  5       VVs/ s H  u  p4X2;  d  M  UPM     nnn[        U R
                  5       VVs/ s H  u  p6X2;  d  M  UPM     nnnU(       d  U $ U R                  XPR                  " U6 S9$ s  snnf s  snnf )zL
Remove specified generators from the ring and inject them into
its domain.
©r   r5   )r‚   rD   r  r  r   r3   rË   r  )r¬   r3   r  r­   r`   r   r  s          r8   Údrop_to_groundÚPolyRing.drop_to_ground  s�   € ô
 ”c˜$Ÿ*™* dÓ+Ó,ˆÜ!*¨4¯<©<Ô!8ÔMÒ!8™˜¸AÑ<L—1Ñ!8ˆÑMÜ"+¨D¯I©IÔ"6ÔKÒ"6™˜¸!Ñ:J—Ñ"6ˆÑKæØˆKà—:‘: g·i²iÀÐ6F�:ÐGÐGùó NùÛKs   ¸B%ÁB%Á(B+Á7B+c                ó®   • X:w  aO  [        U R                  5      R                  [        UR                  5      5      nU R                  [	        U5      S9$ U $ )z+Add the generators of ``other`` to ``self``rg   ©r‚   r   ÚunionrË   rC   )r¬   rÂ   Úsymss      r8   ÚcomposeÚPolyRing.compose,  sC   € à‹=Ü�t—|‘|Ó$×*Ñ*¬3¨u¯}©}Ó+=Ó>ˆDØ—:‘:¤d¨4£j�:Ð1Ð1àˆKr:   c                óŒ   • [        U R                  5      R                  [        U5      5      nU R                  [	        U5      S9$ )z9Add the elements of ``symbols`` as generators to ``self``rg   r<  )r¬   r   r>  s      r8   Úadd_gensÚPolyRing.add_gens4  s4   € ä�4—<‘<Ó ×&Ñ&¤s¨7£|Ó4ˆØ�z‰z¤$ t£*ˆzÐ-Ð-r:   c                ó¦  ^• US:  d  XR                   :”  a  [        SU< SU R                  < 35      eU(       d  U R                  $ U R                  n[        [        U R                   5      [        U5      5       HR  m[        U4S j[        U R                   5       5       5      nX R                  X0R                  R                  5      -  nMT     U$ )zW
Return the elementary symmetric polynomial of degree *n* over
this ring's generators.
r   z.Cannot generate symmetric polynomial of order z for c              3  ó@   >#   • U  H  n[        UT;   5      v •  M     g 7fr[   )rk   )r_   r­   r`   s     €r8   ra   Ú*PolyRing.symmetric_poly.<locals>.<genexpr>E  s   øé € ÐEÒ3D¨aœc ! q¡&Ÿk˜kÒ3Dùó   ƒ)rl   rð   r3   rŽ   rª   r-   r¨   rk   r{   rä   r5   )r¬   Únr¯   ré   r`   s       @r8   Úsymmetric_polyÚPolyRing.symmetric_poly9  s˜   ø€ ð
 ˆq‹5�AŸ
™
“NÝÓZ[Ð]a×]fÓ]fÐgÓhÐhÞØ—8‘8ˆOà—9‘9ˆDÜœU 4§:¡:Ó.´°A³Ö7�ÜÔE´5¸¿¹Ô3DÓEÓE�ØŸ™ e¯[©[¯_©_Ó=Ñ=’ñ 8ð ˆKr:   rY   )NNNr[   )/r€   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r    r„   rŒ   r³   r»   r¾   rÃ   rÆ   rË   r   rÉ   r©   Úpropertyrª   rŽ   rÛ   rá   ræ   rä   ró   Ú__call__rJ   rï   rñ   r
  rò   r  r  r  r  r   r%  r)  r,  r   r   r9  r?  rB  rI  Ú__static_attributes__rY   r:   r8   r2   r2   Ä   s3  ‡ Ù4à
!Ó!ØÓØƒJØƒNØÓà,/ô <ò|	ò7òòòDò
!ô3ð ñcó ðcòð ñó ðð ñ%ó ð%òIô9ò5òò,ð, €Hô	ô:òOò'ò.'òò>/ò/òKò$ò@ð ñ#ó ð#ð ñ"ó ð"òò6ò6Hòò.õ
r:   r2   c                  ó¤  ^ • \ rS rSrSrU 4S jrS rS rS rS r	Sr
S	 rS
 rS rS rS rS rS rS rS rS˜S jrS rS rS rS rS rS rS rS rS rS rS rS r S r!\"S  5       r#\"S! 5       r$\"S" 5       r%\"S# 5       r&\"S$ 5       r'\"S% 5       r(\"S& 5       r)\"S' 5       r*\"S( 5       r+\"S) 5       r,\"S* 5       r-\"S+ 5       r.\"S, 5       r/\"S- 5       r0\"S. 5       r1\"S/ 5       r2\"S0 5       r3S1 r4S2 r5S3 r6S4 r7S5 r8S6 r9S7 r:S8 r;S9 r<S: r=S; r>S< r?S= r@S> rAS? rBS@ rCSA rDSB rESC rFSD rGSE rHSF rISG rJSH rKSI rLSJ rMSK rNS˜SL jrOSM rPS˜SN jrQSO rRSP rSSQ rTSR rUSS rV\"ST 5       rW\"SU 5       rXSV rY\"SW 5       rZSX r[SY r\S˜SZ jr]S˜S[ jr^S˜S\ jr_S] r`S^ raS_ rbS` rcSa rdSb reSc rfSd rgSe rhSf riSg rjSh rkSi rlSj rmSk rnSl ro\orpSm rqSn rrSo rsSp rtSq ruSr rvSs rwSt rxSu rySv rzSw r{Sx r|Sy r}Sz r~S{ rS| r€S} r�S~ r‚S˜S jrƒS˜S€ jr„S� r…S˜S‚ jr†Sƒ r‡S˜S„ jrˆS˜S… jr‰S˜S† jrŠS˜S‡ jr‹S˜Sˆ jrŒS‰ r�SŠ rŽS‹ r�SŒ r�S� r‘SŽ r’S� r“S� r”S‘ r•S’ r–S“ r—S” r˜S™S• jr™S– ršS—r›U =rœ$ )šrˆ   iJ  z5Element of multivariate distributed polynomial ring. c                ó0   >• [         TU ]  U5        Xl        g r[   )ÚsuperÚ__init__r9   )r¬   r9   ÚinitrÎ   s      €r8   rV  ÚPolyElement.__init__M  s   ø€ Ü‰Ñ˜ÔØ�	r:   c                ó¬  • [        U [        5      (       d   e[        U R                  [        5      (       d   eU R                  R                  n[        U[
        5      (       d   eU R                  5        H[  u  p#UR                  U5      (       d   e[        U5      U R                  R                  :X  d   e[        S U 5       5      (       a  M[   e   g )Nc              3  óZ   #   • U  H!  n[        U[        5      =(       a    US :¬  v •  M#     g7f)r   N)r\   rk   )r_   r  s     r8   ra   Ú%PolyElement._check.<locals>.<genexpr>[  s#   é € ÐJÂE¸S”z #¤sÓ+×8°°q±Ô8ÂEùs   ‚)+)r\   rˆ   r9   r2   r5   r   rI   Úof_typer|   rl   rf   )r¬   Údomré   rå   s       r8   Ú_checkÚPolyElement._checkS  s¦   € Ü˜$¤×,Ñ,Ð,Ð,Ü˜$Ÿ)™)¤X×.Ñ.Ð.Ð.Ø�i‰i×ÑˆÜ˜#œv×&Ñ&Ð&Ð&Ø ŸJ™JžL‰LˆEØ—;‘;˜u×%Ñ%Ð%Ð%Ü�u“: §¡§¡Ó0Ð0Ð0ÜÑJÁEÓJ×JÓJÐJÐJò )r:   c                ó:   • U R                  U R                  U5      $ r[   )rÎ   r9   )r¬   rW  s     r8   r‰   ÚPolyElement.new]  s   € Ø�~‰~˜dŸi™i¨Ó.Ð.r:   c                ó6   • U R                   R                  5       $ r[   )r9   r   r²   s    r8   ÚparentÚPolyElement.parent`  s   € Ø�y‰y×"Ñ"Ó$Ð$r:   c                óL   • U R                   [        U R                  5       5      4$ r[   )r9   rC   Ú	itertermsr²   s    r8   r³   ÚPolyElement.__getnewargs__c  s   € Ø—	‘	œ4 §¡Ó 0Ó1Ð2Ð2r:   Nc                óŽ   • U R                   nUc5  [        U R                  [        U R	                  5       5      45      =U l         nU$ r[   )r‡   r†   r9   Ú	frozensetrI   )r¬   r‡   s     r8   r¾   ÚPolyElement.__hash__h  s<   € ð —
‘
ˆØ‰=Ü!% t§y¡y´)¸D¿J¹J»LÓ2IÐ&JÓ!KÐKˆDŒJ˜Øˆr:   c                ó$   • U R                  U 5      $ )aø  Return a copy of polynomial self.

Polynomials are mutable; if one is interested in preserving
a polynomial, and one plans to use inplace operations, one
can copy the polynomial. This method makes a shallow copy.

Examples
========

>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.rings import ring

>>> R, x, y = ring('x, y', ZZ)
>>> p = (x + y)**2
>>> p1 = p.copy()
>>> p2 = p
>>> p[R.zero_monom] = 3
>>> p
x**2 + 2*x*y + y**2 + 3
>>> p1
x**2 + 2*x*y + y**2
>>> p2
x**2 + 2*x*y + y**2 + 3

)r‰   r²   s    r8   r¸   ÚPolyElement.copys  s   € ð4 �x‰x˜‹~Ðr:   c           	     ót  • U R                   U:X  a  U $ U R                   R                  UR                  :w  a^  [        [        [	        X R                   R                  UR                  5      6 5      nUR                  X R                   R                  5      $ UR                  X R                   R                  5      $ r[   )r9   r   rC   rH   r)   rï   r5   rJ   )r¬   Únew_ringÚtermss      r8   Úset_ringÚPolyElement.set_ring�  s‡   € Ø�9‰9˜Ó ØˆKØ�Y‰Y×Ñ (×"2Ñ"2Ó2Üœœm¨D·)±)×2CÑ2CÀX×EUÑEUÓVÐWÓXˆEØ×&Ñ& u¯i©i×.>Ñ.>Ó?Ð?à×%Ñ% d¯I©I×,<Ñ,<Ó=Ð=r:   c                ó  • U(       d  U R                   R                  nOS[        U5      U R                   R                  :w  a0  [	        SU R                   R                  < S[        U5      < 35      e[        U R                  5       /UQ76 $ )Nz"Wrong number of symbols, expected z got )r9   r   r|   rl   rð   r(   Úas_expr_dict)r¬   r   s     r8   Úas_exprÚPolyElement.as_expr˜  sf   € ÞØ—i‘i×'Ñ'‰GÜ�‹\˜TŸY™YŸ_™_Ó,Ýà—‘—”¤# g¥,ð0óð ô
 ˜d×/Ñ/Ó1Ð<°GÒ<Ð<r:   c                ó¤   • U R                   R                  R                  nU R                  5        VVs0 s H  u  p#X!" U5      _M     snn$ s  snnf r[   )r9   r5   Úto_sympyrf  )r¬   rw  ré   rå   s       r8   rs  ÚPolyElement.as_expr_dict£  sC   € Ø—9‘9×#Ñ#×,Ñ,ˆØ;?¿>¹>Ô;KÔLÒ;K©<¨5��x “Ò&Ñ;KÒLÐLùÓLs   ´Ac           	     óÂ  • U R                   R                  nUR                  (       a  UR                  (       d  UR                  U 4$ UR                  5       nUR                  nUR                  nUR                  nU R                  5        H  nU" X5" U5      5      nM     U R                  U R                  5        VVs/ s H  u  pxXxU-  4PM     snn5      n	X94$ s  snnf r[   )r9   r5   Úis_FieldÚhas_assoc_RingrŽ   Úget_ringr™   ÚdenomrF   r‰   rI   )
r¬   r5   Úground_ringÚcommonr™   r}  rå   ÚkÚvr¯   s
             r8   Úclear_denomsÚPolyElement.clear_denoms§  s±   € Ø—‘×!Ñ!ˆà�� f×&;×&;Ø—:‘:˜tÐ#Ð#à—o‘oÓ'ˆØ—‘ˆØ�o‰oˆØ—‘ˆà—[‘[–]ˆEÙ˜  u£Ó.ŠFñ #ð �x‰x°D·J±J´LÔB²L©D¨A˜1 ™h›-±LÒBÓCˆØˆ|Ðùó Cs   Â>C
c                ó^   • [        U R                  5       5       H  u  pU(       a  M  X	 M     g)z+Eliminate monomials with zero coefficient. N©rC   rI   )r¬   r€  r�  s      r8   Ú
strip_zeroÚPolyElement.strip_zero¸  s#   € ä˜Ÿ™›Ö&‰DˆAß�1Ø’Gò 'r:   c                óø   • U(       d  U (       + $ U R                   R                  U5      (       a  [        R                  X5      $ [	        U 5      S:”  a  gU R                  U R                   R                  5      U:H  $ )zøEquality test for polynomials.

Examples
========

>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.rings import ring

>>> _, x, y = ring('x, y', ZZ)
>>> p1 = (x + y)**2 + (x - y)**2
>>> p1 == 4*x*y
False
>>> p1 == 2*(x**2 + y**2)
True

rÑ   F)r9   rÛ   rG   rÃ   r|   rþ   r‹   ©Úp1Úp2s     r8   rÃ   ÚPolyElement.__eq__¾  s^   € ö" Ø”6ˆMØ�W‰W×Ñ ×#Ñ#Ü—;‘;˜rÓ&Ð&Ü�‹W�q‹[Øà—6‘6˜"Ÿ'™'×,Ñ,Ó-°Ñ3Ð3r:   c                ó   • X:X  + $ r[   rY   r‰  s     r8   rÆ   ÚPolyElement.__ne__Ø  s
   € ØŠ|Ðr:   c                ó  • U R                   nUR                  U5      (       ax  [        U R                  5       5      [        UR                  5       5      :w  a  gUR                  R
                  nU R                  5        H  nU" X   X   U5      (       a  M    g   g[        U 5      S:”  a  g UR                  R                  U5      nUR                  R                  U R                  5       X5      $ ! [         a     gf = f)z+Approximate equality test for polynomials. FTrÑ   )
r9   rÛ   r‚   Úkeysr5   Úalmosteqr|   rÞ   Úconstr"   )rŠ  r‹  Ú	tolerancer9   r‘  r€  s         r8   r‘  ÚPolyElement.almosteqÛ  sÎ   € à�w‰wˆà�?‰?˜2×ÑÜ�2—7‘7“9‹~¤ R§W¡W£Y£Ó/Øà—{‘{×+Ñ+ˆHà—W‘W–Y�Ù ¡ r¡u¨i×8Ó8Ù ñ ð Ü�‹W�q‹[ØðGØ—[‘[×(Ñ(¨Ó,�ð —{‘{×+Ñ+¨B¯H©H«J¸ÓFÐFøô "ó Ùðús   Â,C1 Ã1
C>Ã=C>c                ó8   • [        U 5      U R                  5       4$ r[   )r|   ro  r²   s    r8   Úsort_keyÚPolyElement.sort_keyó  s   € Ü�D“	˜4Ÿ:™:›<Ð(Ð(r:   c                ó˜   • U R                   R                  U5      (       a%  U" U R                  5       UR                  5       5      $ [        $ r[   )r9   rÛ   r–  ÚNotImplemented)rŠ  r‹  Úops      r8   Ú_cmpÚPolyElement._cmpö  s6   € Ø�7‰7×Ñ˜b×!Ñ!Ù�b—k‘k“m R§[¡[£]Ó3Ð3ä!Ð!r:   c                ó.   • U R                  U[        5      $ r[   )r›  r   r‰  s     r8   Ú__lt__ÚPolyElement.__lt__ü  ó   € Ø�w‰w�rœ2‹Ðr:   c                ó.   • U R                  U[        5      $ r[   )r›  r   r‰  s     r8   Ú__le__ÚPolyElement.__le__þ  r   r:   c                ó.   • U R                  U[        5      $ r[   )r›  r   r‰  s     r8   Ú__gt__ÚPolyElement.__gt__   r   r:   c                ó.   • U R                  U[        5      $ r[   )r›  r	   r‰  s     r8   Ú__ge__ÚPolyElement.__ge__  r   r:   c                óÄ   • U R                   nUR                  U5      nUR                  S:X  a  X2R                  4$ [	        UR
                  5      nXC	 X2R                  US94$ )NrÑ   rg   )r9   r  rl   r5   rC   r   rË   ©r¬   r  r9   r­   r   s        r8   Ú_dropÚPolyElement._drop  sV   € Ø�y‰yˆØ�J‰J�s‹Oˆà�:‰:˜‹?Ø—k‘k�>Ð!ä˜4Ÿ<™<Ó(ˆGØ�
Ø—j‘j¨�jÐ1Ð1Ð1r:   c                ój  • U R                  U5      u  p#U R                  R                  S:X  a0  U R                  (       a  U R	                  S5      $ [        SU-  5      eUR                  nU R                  5        H5  u  pVXR   S:X  a  [        U5      nXr	 Xd[        U5      '   M)  [        SU-  5      e   U$ )NrÑ   zCannot drop %sr   )
r¬  r9   rl   Ú	is_groundrå   rð   rª   rI   rC   r{   )r¬   r  r­   r9   r¯   r€  r�  ÚKs           r8   r  ÚPolyElement.drop  sœ   € Ø—*‘*˜S“/‰ˆà�9‰9�?‰?˜aÓØ�~�~Ø—z‘z !“}Ð$ä Ð!1°CÑ!7Ó8Ð8à—9‘9ˆDàŸ
™
ž‘�Ø‘4˜1“9Ü˜Q›�AØ˜Ø%&œ˜q›“Nä$Ð%5¸Ñ%;Ó<Ð<ñ %ð ˆKr:   c                ó�   • U R                   nUR                  U5      n[        UR                  5      nXC	 X2R	                  XBU   S94$ )Nr8  )r9   r  rC   r   rË   r«  s        r8   Ú_drop_to_groundÚPolyElement._drop_to_ground%  sC   € Ø�y‰yˆØ�J‰J�s‹Oˆä�t—|‘|Ó$ˆØˆJØ—*‘* W¸!±W�*Ð=Ð=Ð=r:   c                óŠ  • U R                   R                  S:X  a  [        S5      eU R                  U5      u  p#UR                  nUR
                  R                  S   nU R                  5        HQ  u  pVUS U XRS-   S  -   nXt;  a  XU   -  R                  U5      XG'   M1  XG==   XU   -  R                  U5      -  ss'   MS     U$ )NrÑ   z$Cannot drop only generator to groundr   )	r9   rl   rð   r³  rª   r5   r3   rf  Ú
mul_ground)r¬   r  r­   r9   r¯   ré   rå   Úmons           r8   r9  ÚPolyElement.drop_to_ground-  s¹   € Ø�9‰9�?‰?˜aÓÜÐCÓDÐDà×&Ñ& sÓ+‰ˆØ�y‰yˆØ�k‰k×Ñ˜qÑ!ˆà ŸN™NÖ,‰LˆEØ˜˜�)˜e a¡C D˜kÑ)ˆCØ‹Ø ¨¡(™]×6Ñ6°uÓ=�“	à“	˜c¨¡8™m×7Ñ7¸Ó>Ñ>•	ñ -ð ˆr:   c                óp   • [        X R                  R                  S-
  U R                  R                  5      $ rú   )r   r9   rl   r5   r²   s    r8   Úto_denseÚPolyElement.to_dense>  s&   € Ü˜T§9¡9§?¡?°1Ñ#4°d·i±i×6FÑ6FÓGÐGr:   c                ó   • [        U 5      $ r[   )rG   r²   s    r8   Úto_dictÚPolyElement.to_dictA  s   € Ü�D‹zÐr:   c                ó~  • U (       d/  UR                  U R                  R                  R                  5      $ US   nUS   nU R                  nUR                  nUR
                  n	UR                  n
/ nU R                  5        GHt  u  pÍUR                  R                  U5      nU(       a  SOSnUR                  U5        XÊ:X  a4  UR                  U5      nU(       a  UR                  S5      (       a  USS  nO@U(       a  U* nXÐR                  R                  R                  :w  a  UR                  XÕSS9nOS	n/ n[        U	5       H€  nUU   nU(       d  M  UR                  UU   USS9nUS:w  aA  U[        U5      :w  d  US
:  a  UR                  UUSS9nOUnUR                  UUU4-  5        Ml  UR                  SU-  5        M‚     U(       a  U/U-   nUR                  UR                  U5      5        GMw     US
   S;   a)  UR!                  S
5      nUS:X  a  UR#                  S
S5        S	R                  U5      $ )NÚMulÚAtomú - ú + Ú-rÑ   T)ÚstrictÚ r   Fz%s)rÃ  rÂ  )Ú_printr9   r5   rª   r   rl   r‹   ro  Úis_negativer«   r¹   rŽ   Úparenthesizer¨   rk   ÚjoinÚpopÚinsert)r¬   ÚprinterÚ
precedenceÚexp_patternÚ
mul_symbolÚprec_mulÚ	prec_atomr9   r   rl   ÚzmÚsexpvsr®   rå   ÚnegativeÚsignÚscoeffÚsexpvr­   r  r¤   ÚsexpÚheads                          r8   r]   ÚPolyElement.strD  s  € ÞØ—>‘> $§)¡)×"2Ñ"2×"7Ñ"7Ó8Ð8Ø˜eÑ$ˆØ˜vÑ&ˆ	Ø�y‰yˆØ—,‘,ˆØ—
‘
ˆØ�_‰_ˆØˆØŸ:™:Ÿ<‰KˆDØ—{‘{×.Ñ.¨uÓ5ˆHÞ$‘5¨%ˆDØ�M‰M˜$ÔØ‹zØ Ÿ™¨Ó.�Þ × 1Ñ 1°#× 6Ñ 6Ø# A B˜Z�FøæØ"˜F�EØŸI™I×,Ñ,×0Ñ0Ó0Ø$×1Ñ1°%È$Ð1ÐO‘Fà�FØˆEÜ˜5–\�Ø˜1‘g�ÞÙØ ×-Ñ-¨g°a©j¸)ÈDÐ-ÐQ�Ø˜!“8Øœc #›h“¨#°«'Ø&×3Ñ3°C¸È5Ð3ÐQ™à"˜Ø—L‘L °¸¨~Ñ!=Ö>à—L‘L ¨¡Ö/ñ "ö Ø˜ 5Ñ(�Ø�M‰M˜*Ÿ/™/¨%Ó0×1ñ? (ð@ �!‰9˜Ó&Ø—:‘:˜a“=ˆDØ�u‹}Ø—‘˜a Ô%Ø�w‰w�v‹Ðr:   c                ó2   • X R                   R                  ;   $ r[   )r9   r�   r²   s    r8   Úis_generatorÚPolyElement.is_generatort  s   € à—y‘y×*Ñ*Ñ*Ð*r:   c                óz   • U (       + =(       d.    [        U 5      S:H  =(       a    U R                  R                  U ;   $ rú   )r|   r9   r‹   r²   s    r8   r¯  ÚPolyElement.is_groundx  s+   € àŒx×LœC ›I¨™N×K¨t¯y©y×/CÑ/CÀtÑ/KÐLr:   c                óf   • U (       + =(       d$    [        U 5      S:H  =(       a    U R                  S:H  $ rú   )r|   ÚLCr²   s    r8   Úis_monomialÚPolyElement.is_monomial|  s$   € àŒx×<œC ›I¨™N×;¨t¯w©w¸!©|Ð<r:   c                ó   • [        U 5      S:*  $ rú   )r|   r²   s    r8   Úis_termÚPolyElement.is_term€  s   € ä�4‹y˜A‰~Ðr:   c                ó`   • U R                   R                  R                  U R                  5      $ r[   )r9   r5   rÈ  râ  r²   s    r8   rÈ  ÚPolyElement.is_negative„  ó!   € à�y‰y×Ñ×+Ñ+¨D¯G©GÓ4Ð4r:   c                ó`   • U R                   R                  R                  U R                  5      $ r[   )r9   r5   Úis_positiverâ  r²   s    r8   rì  ÚPolyElement.is_positiveˆ  rê  r:   c                ó`   • U R                   R                  R                  U R                  5      $ r[   )r9   r5   Úis_nonnegativerâ  r²   s    r8   rï  ÚPolyElement.is_nonnegativeŒ  ó!   € à�y‰y×Ñ×.Ñ.¨t¯w©wÓ7Ð7r:   c                ó`   • U R                   R                  R                  U R                  5      $ r[   )r9   r5   Úis_nonpositiverâ  r²   s    r8   ró  ÚPolyElement.is_nonpositive�  rñ  r:   c                ó   • U (       + $ r[   rY   ©rz   s    r8   Úis_zeroÚPolyElement.is_zero”  s	   € àŒuˆr:   c                ó2   • X R                   R                  :H  $ r[   )r9   rŽ   rö  s    r8   Úis_oneÚPolyElement.is_one˜  s   € à—F‘F—J‘J‰Ðr:   c                ó`   • U R                   R                  R                  U R                  5      $ r[   )r9   r5   rú  râ  rö  s    r8   Úis_monicÚPolyElement.is_monicœ  s   € à�v‰v�}‰}×#Ñ# A§D¡DÓ)Ð)r:   c                óh   • U R                   R                  R                  U R                  5       5      $ r[   )r9   r5   rú  Úcontentrö  s    r8   Úis_primitiveÚPolyElement.is_primitive   s!   € à�v‰v�}‰}×#Ñ# A§I¡I£KÓ0Ð0r:   c                óB   • [        S U R                  5        5       5      $ )Nc              3  ó>   #   • U  H  n[        U5      S :*  v •  M     g7f©rÑ   N©rE   ©r_   ré   s     r8   ra   Ú(PolyElement.is_linear.<locals>.<genexpr>¦  ó   é € Ð?² u”3�u“: –?²ùó   ‚©rf   Ú
itermonomsrö  s    r8   Ú	is_linearÚPolyElement.is_linear¤  ó   € äÑ?°·±´Ó?Ó?Ð?r:   c                óB   • [        S U R                  5        5       5      $ )Nc              3  ó>   #   • U  H  n[        U5      S :*  v •  M     g7f)é   Nr  r  s     r8   ra   Ú+PolyElement.is_quadratic.<locals>.<genexpr>ª  r	  r
  r  rö  s    r8   Úis_quadraticÚPolyElement.is_quadratic¨  r  r:   c                óp   • U R                   R                  (       d  gU R                   R                  U 5      $ ©NT)r9   rl   Ú	dmp_sqf_prö  s    r8   Úis_squarefreeÚPolyElement.is_squarefree¬  s%   € à�v‰v�|�|ØØ�v‰v×Ñ Ó"Ð"r:   c                óp   • U R                   R                  (       d  gU R                   R                  U 5      $ r  )r9   rl   Údmp_irreducible_prö  s    r8   Úis_irreducibleÚPolyElement.is_irreducible²  s%   € à�v‰v�|�|ØØ�v‰v×'Ñ'¨Ó*Ð*r:   c                ó„   • U R                   R                  (       a  U R                   R                  U 5      $ [        S5      e)Nzcyclotomic polynomial)r9   r)  Údup_cyclotomic_pr%   rö  s    r8   Úis_cyclotomicÚPolyElement.is_cyclotomic¸  s0   € à�6‰6××Ø—6‘6×*Ñ*¨1Ó-Ð-ä-Ð.EÓFÐFr:   c                óz   • U R                  U R                  5        VVs/ s H	  u  pX* 4PM     snn5      $ s  snnf r[   )r‰   rf  )r¬   ré   rå   s      r8   Ú__neg__ÚPolyElement.__neg__¿  s2   € Ø�x‰x¸d¿n¹nÔ>NÔPÒ>N©l¨e˜5 &›/Ñ>NÒPÓQÐQùÓPs   Ÿ7
c                ó   • U $ r[   rY   r²   s    r8   Ú__pos__ÚPolyElement.__pos__Â  s   € Øˆr:   c                ó¾  • U(       d  U R                  5       $ U R                  nUR                  U5      (       ag  U R                  5       nUR                  nUR                  R
                  nUR                  5        H  u  pgU" Xe5      U-   nU(       a  XsU'   M  X6	 M!     U$ [        U[        5      (       a¨  [        UR                  [        5      (       a%  UR                  R                  UR                  :X  a  Od[        UR                  R                  [        5      (       a5  UR                  R                  R                  U:X  a  UR                  U 5      $ [        $  UR                  U5      nU R                  5       nU(       d  U$ UR                  n	X�R                  5       ;  a  XƒU	'   U$ XU	   * :X  a  X9	 U$ X9==   U-  ss'   U$ ! [         a	    [        s $ f = f)zÄAdd two polynomials.

Examples
========

>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.rings import ring

>>> _, x, y = ring('x, y', ZZ)
>>> (x + y)**2 + (x - y)**2
2*x**2 + 2*y**2

)r¸   r9   rÛ   rþ   r5   rª   rI   r\   rˆ   r   Ú__radd__r™  rá   r‹   r�  r"   )
rŠ  r‹  r9   r3  rþ   rª   r€  r�  Úcp2rÓ  s
             r8   Ú__add__ÚPolyElement.__add__Å  s†  € ö Ø—7‘7“9ÐØ�w‰wˆØ�?‰?˜2×ÑØ—‘“	ˆAØ—%‘%ˆCØ—;‘;×#Ñ#ˆDØŸ™ž
‘�Ù˜“L 1Ñ$�ÞØ�a“Dàšñ #ð ˆHÜ˜œK×(Ñ(Ü˜$Ÿ+™+¤~×6Ñ6¸4¿;¹;×;KÑ;KÈrÏwÉwÓ;VØÜ˜BŸG™GŸN™N¬N×;Ñ;ÀÇÁÇÁ×@SÑ@SÐW[Ó@[Ø—{‘{ 2“Ð&ä%Ð%ð	Ø—/‘/ "Ó%ˆCð —‘“	ˆAÞØ�Ø—‘ˆBØŸ™›Ó"Ø�"‘ð ˆHð	 ˜B™%˜“<Ø˜ð ˆHð “E˜S‘L“EØˆHøô ó 	"Ü!Ò!ð	"ús   ÅG	 Ç	GÇGc                ó  • U R                  5       nU(       d  U$ U R                  n UR                  U5      nUR                  nX@R	                  5       ;  a  XU'   U$ XU   * :X  a  X$	 U$ X$==   U-  ss'   U$ ! [
         a	    [        s $ f = fr[   )r¸   r9   rá   r‹   r�  r"   r™  )rŠ  rH  r3  r9   rÓ  s        r8   r*  ÚPolyElement.__radd__û  s˜   € Ø�G‰G‹IˆÞØˆHØ�w‰wˆð	Ø—‘ Ó"ˆAð —‘ˆBØŸ™›Ó"Ø�"‘ð ˆHð	 ˜2™˜“;Ø˜ð ˆHð “E˜Q‘J“EØˆHøô ó 	"Ü!Ò!ð	"ús   §A8 Á8BÂ
Bc                ó¬  • U(       d  U R                  5       $ U R                  nUR                  U5      (       ag  U R                  5       nUR                  nUR                  R
                  nUR                  5        H  u  pgU" Xe5      U-
  nU(       a  XsU'   M  X6	 M!     U$ [        U[        5      (       a¨  [        UR                  [        5      (       a%  UR                  R                  UR                  :X  a  Od[        UR                  R                  [        5      (       a5  UR                  R                  R                  U:X  a  UR                  U 5      $ [        $  UR                  U5      nU R                  5       nUR                  nX€R                  5       ;  a  U* X8'   U$ XU   :X  a  X8	 U$ X8==   U-  ss'   U$ ! [         a	    [        s $ f = f)zÞSubtract polynomial p2 from p1.

Examples
========

>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.rings import ring

>>> _, x, y = ring('x, y', ZZ)
>>> p1 = x + y**2
>>> p2 = x*y + y**2
>>> p1 - p2
-x*y + x

)r¸   r9   rÛ   rþ   r5   rª   rI   r\   rˆ   r   Ú__rsub__r™  rá   r‹   r�  r"   )	rŠ  r‹  r9   r3  rþ   rª   r€  r�  rÓ  s	            r8   Ú__sub__ÚPolyElement.__sub__  s~  € ö  Ø—7‘7“9ÐØ�w‰wˆØ�?‰?˜2×ÑØ—‘“	ˆAØ—%‘%ˆCØ—;‘;×#Ñ#ˆDØŸ™ž
‘�Ù˜“L 1Ñ$�ÞØ�a“Dàšñ #ð ˆHÜ˜œK×(Ñ(Ü˜$Ÿ+™+¤~×6Ñ6¸4¿;¹;×;KÑ;KÈrÏwÉwÓ;VØÜ˜BŸG™GŸN™N¬N×;Ñ;ÀÇÁÇÁ×@SÑ@SÐW[Ó@[Ø—{‘{ 2“Ð&ä%Ð%ð	Ø—‘ Ó$ˆBð —‘“	ˆAØ—‘ˆBØŸ™›Ó"Ø˜�‘ð ˆHð	 ˜2™“;Ø˜ð ˆHð “E˜R‘K“EØˆHøô ó 	"Ü!Ò!ð	"ús   ÅG  Ç GÇGc                ó®   • U R                   n UR                  U5      nUR                  nU  H
  nX   * X4'   M     X1-  nU$ ! [         a	    [        s $ f = f)zÛn - p1 with n convertible to the coefficient domain.

Examples
========

>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.rings import ring

>>> _, x, y = ring('x, y', ZZ)
>>> p = x + y
>>> 4 - p
-x - y + 4

)r9   rá   rª   r"   r™  )rŠ  rH  r9   r3  r®   s        r8   r1  ÚPolyElement.__rsub__E  sc   € ð �w‰wˆð
	Ø—‘ Ó"ˆAð —	‘	ˆAÛ�Ø™8˜)�“ñ à‰FˆAàˆHøô ó 	"Ü!Ò!ð	"ús   ŽA ÁAÁAc                óÈ  • U R                   nUR                  nU (       a  U(       d  U$ UR                  U5      (       a”  UR                  nUR                  R                  nUR
                  n[        UR                  5       5      nU R                  5        H'  u  p‰U H  u  p«U" XŠ5      nU" XÅ5      X›-  -   X<'   M     M)     UR                  5         U$ [        U[        5      (       a¨  [        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  Od[        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $  UR                  U5      nU R                  5        H  u  p‰X‘-  nU(       d  M  XÓU'   M     U$ ! [         a	    [        s $ f = f)zÑMultiply two polynomials.

Examples
========

>>> from sympy.polys.domains import QQ
>>> from sympy.polys.rings import ring

>>> _, x, y = ring('x, y', QQ)
>>> p1 = x + y
>>> p2 = x - y
>>> p1*p2
x**2 - y**2

)r9   rª   rÛ   rþ   r5   r�   rC   rI   r†  r\   rˆ   r   Ú__rmul__r™  rá   r"   )rŠ  r‹  r9   r3  rþ   rª   r�   Úp2itÚexp1Úv1Úexp2Úv2r  r�  s                 r8   Ú__mul__ÚPolyElement.__mul__a  sy  € ð  �w‰wˆØ�I‰IˆÞžØˆHØ�_‰_˜R× Ñ Ø—%‘%ˆCØ—;‘;×#Ñ#ˆDØ×,Ñ,ˆLÜ˜Ÿ™›
Ó#ˆDØŸH™HžJ‘�Û $‘H�DÙ& tÓ2�CÙ  ›^¨b©eÑ3�A“Fó !%ñ 'ð �L‰LŒNàˆHÜ˜œK×(Ñ(Ü˜$Ÿ+™+¤~×6Ñ6¸4¿;¹;×;KÑ;KÈrÏwÉwÓ;VØÜ˜BŸG™GŸN™N¬N×;Ñ;ÀÇÁÇÁ×@SÑ@SÐW[Ó@[Ø—{‘{ 2“Ð&ä%Ð%ð
	Ø—‘ Ó$ˆBð ŸH™HžJ‘�Ø‘E�ß�1Ø�d“Gñ 'ð
 ˆHøô ó 	"Ü!Ò!ð	"ús   ÆG ÇG!Ç G!c                óü   • U R                   R                  nU(       d  U$  UR                   R                  U5      nU R                  5        H  u  p4X-  nU(       d  M  XRU'   M     U$ ! [         a	    [
        s $ f = f)zÖp2 * p1 with p2 in the coefficient domain of p1.

Examples
========

>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.rings import ring

>>> _, x, y = ring('x, y', ZZ)
>>> p = x + y
>>> 4 * p
4*x + 4*y

)r9   rª   rá   rI   r"   r™  )rŠ  r‹  r3  r9  r:  r�  s         r8   r7  ÚPolyElement.__rmul__•  sw   € ð �G‰G�L‰LˆÞØˆHð		Ø—‘×"Ñ" 2Ó&ˆBð ŸH™HžJ‘�Ø‘E�ß�1Ø�d“Gñ 'ð ˆHøô ó 	"Ü!Ò!ð	"ús   ¡A( Á(A;Á:A;c                óð  • [        U[        5      (       d  [        SU-  5      eUS:  a  [        SU-  5      eU R                  nU(       d  U (       a  UR
                  $ [        S5      e[        U 5      S:X  ao  [        U R                  5       5      S   u  p4UR                  nXBR                  R
                  :X  a  XEUR                  X15      '   U$ XA-  XRR                  X15      '   U$ [        U5      nUS:  a  [        S5      eUS:X  a  U R                  5       $ US:X  a  U R                  5       $ US:X  a  X R                  5       -  $ [        U 5      S	::  a  U R                  U5      $ U R                  U5      $ )
zàraise polynomial to power `n`

Examples
========

>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.rings import ring

>>> _, x, y = ring('x, y', ZZ)
>>> p = x + y**2
>>> p**3
x**3 + 3*x**2*y**2 + 3*x*y**4 + y**6

z#exponent must be an integer, got %sr   z/exponent must be a non-negative integer, got %sz0**0rÑ   zNegative exponentr  é   é   )r\   rk   Ú	TypeErrorrð   r9   rŽ   r|   rC   rI   rª   r5   r’   r¸   ÚsquareÚ_pow_multinomialÚ_pow_generic)r¬   rH  r9   ré   rå   r3  s         r8   Ú__pow__ÚPolyElement.__pow__²  sT  € ô ˜!œS×!Ñ!ÜÐAÀAÑEÓFÐFØ�‹UÜÐNÐQRÑRÓSÐSà�y‰yˆæÞØ—x‘x�ä  Ó(Ð(Ü�‹Y˜!‹^Ü §
¡
£Ó-¨aÑ0‰LˆEØ—	‘	ˆAØŸ™Ÿ™Ó'Ø16�$×#Ñ# EÓ-Ñ.ð ˆHð 27±�×#Ñ# EÓ-Ñ.àˆHô �‹FˆØˆq‹5ÜÐ0Ó1Ð1à�!‹VØ—9‘9“;ÐØ�!‹VØ—;‘;“=Ð Ø�!‹VØŸ™›Ñ%Ð%Ü�‹Y˜!‹^Ø×(Ñ(¨Ó+Ð+à×$Ñ$ QÓ'Ð'r:   c                óœ   • U R                   R                  nU n US-  (       a  X#-  nUS-  nU(       d   U$ UR                  5       nUS-  nM4  )NrÑ   r  )r9   rŽ   rE  )r¬   rH  r3  rT   s       r8   rG  ÚPolyElement._pow_genericè  sV   € Ø�I‰I�M‰MˆØˆàØ�1�uØ‘C�Ø�Q‘�ÞØð
 ˆð —‘“
ˆAØ�Q‘ˆAñ r:   c                ó  • [        [        U 5      U5      R                  5       nU R                  R                  nU R                  R
                  nU R                  5       nU R                  R                  R                  nU R                  R                  nU Hp  u  p‰Un
U	n[        X…5       H!  u  nu  pÞU(       d  M  U" X­U5      n
X¾U-  -  nM#     [        U
5      nUnUR                  XÖ5      U-   nU(       a  XçU'   Mg  X×;   d  Mn  X}	 Mr     U$ r[   )r   r|   rI   r9   r”   r‹   r5   rª   rH   r{   rþ   )r¬   rH  Úmultinomialsr”   r‹   ro  rª   r¯   ÚmultinomialÚmultinomial_coeffÚproduct_monomÚproduct_coeffr  ré   rå   s                  r8   rF  ÚPolyElement._pow_multinomialø  sï   € Ü/´°D³	¸1Ó=×CÑCÓEˆØŸ)™)×3Ñ3ˆØ—Y‘Y×)Ñ)ˆ
Ø—
‘
“ˆØ�y‰y×Ñ×$Ñ$ˆØ�y‰y�~‰~ˆã.:Ñ*ˆKØ&ˆMØ-ˆMä'*¨;Ö'>Ñ#�‘^�eß�3Ù$3°MÈ#Ó$N�MØ!¨C¡ZÑ/’Mñ (?ô
 ˜-Ó(ˆEØ!ˆEà—H‘H˜UÓ)¨EÑ1ˆEæØ#�U“Ø•Ø’Kñ# /;ð& ˆr:   c                ó&  • U R                   nUR                  nUR                  n[        U R	                  5       5      nUR
                  R                  nUR                  n[        [        U5      5       H;  nXG   nX   n	[        U5       H!  n
XJ   nU" X‹5      nU" XÅ5      X�U   -  -   X,'   M#     M=     UR                  S5      nUR                  nU R                  5        H  u  pÞU" XÝ5      nU" Xµ5      US-  -   X+'   M     UR                  5         U$ )zÑsquare of a polynomial

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y = ring('x, y', ZZ)
>>> p = x + y**2
>>> p.square()
x**2 + 2*x*y**2 + y**4

r  )r9   rª   rþ   rC   r�  r5   r�   r¨   r|   Úimul_numrI   r†  )r¬   r9   r3  rþ   r�  rª   r�   r­   Úk1ÚpkÚjÚk2r  r€  r�  s                  r8   rE  ÚPolyElement.square  s÷   € ð �y‰yˆØ�I‰IˆØ�e‰eˆÜ�D—I‘I“KÓ ˆØ�{‰{×ÑˆØ×(Ñ(ˆÜ”s˜4“yÖ!ˆAØ‘ˆBØ‘ˆBÜ˜1–X�Ø‘W�Ù" 2Ó*�Ù˜S›¨"°"©X©+Ñ5�“ó ñ "ð �J‰J�q‹MˆØ�e‰eˆØ—J‘J–L‰DˆAÙ˜aÓ#ˆBÙ˜“M A q¡DÑ(ˆA‹Eñ !ð 	
�‰Œàˆr:   c                óš  • U R                   nU(       d  [        S5      eUR                  U5      (       a  U R                  U5      $ [	        U[
        5      (       a¨  [	        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  Od[	        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $  UR                  U5      nU R                  U5      U R                  U5      4$ ! [         a	    [        s $ f = f©Núpolynomial division)r9   ÚZeroDivisionErrorrÛ   r—   r\   rˆ   r5   r   Ú__rdivmod__r™  rá   Ú
quo_groundÚ
rem_groundr"   ©rŠ  r‹  r9   s      r8   Ú
__divmod__ÚPolyElement.__divmod__:  sö   € Ø�w‰wˆæÜ#Ð$9Ó:Ð:Ø�_‰_˜R× Ñ Ø—6‘6˜"“:ÐÜ˜œK×(Ñ(Ü˜$Ÿ+™+¤~×6Ñ6¸4¿;¹;×;KÑ;KÈrÏwÉwÓ;VØÜ˜BŸG™GŸN™N¬N×;Ñ;ÀÇÁÇÁ×@SÑ@SÐW[Ó@[Ø—~‘~ bÓ)Ð)ä%Ð%ð	:Ø—‘ Ó$ˆBð —M‘M "Ó% r§}¡}°RÓ'8Ð9Ð9øô ó 	"Ü!Ò!ð	"ús   ÄD7 Ä7E
Å	E
c                óŒ   • U R                   n UR                  U5      nUR                  U 5      $ ! [         a	    [        s $ f = fr[   )r9   ræ   r—   r"   r™  ra  s      r8   r^  ÚPolyElement.__rdivmod__P  óE   € Ø�w‰wˆð	Ø—‘ Ó$ˆBð —6‘6˜"“:Ðøô ó 	"Ü!Ò!ð	"úó   Ž0 °AÁAc                óx  • U R                   nU(       d  [        S5      eUR                  U5      (       a  U R                  U5      $ [	        U[
        5      (       a¨  [	        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  Od[	        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $  UR                  U5      nU R                  U5      $ ! [         a	    [        s $ f = fr[  )r9   r]  rÛ   Úremr\   rˆ   r5   r   Ú__rmod__r™  rá   r`  r"   ra  s      r8   Ú__mod__ÚPolyElement.__mod__Y  sç   € Ø�w‰wˆæÜ#Ð$9Ó:Ð:Ø�_‰_˜R× Ñ Ø—6‘6˜"“:ÐÜ˜œK×(Ñ(Ü˜$Ÿ+™+¤~×6Ñ6¸4¿;¹;×;KÑ;KÈrÏwÉwÓ;VØÜ˜BŸG™GŸN™N¬N×;Ñ;ÀÇÁÇÁ×@SÑ@SÐW[Ó@[Ø—{‘{ 2“Ð&ä%Ð%ð	%Ø—‘ Ó$ˆBð —=‘= Ó$Ð$øô ó 	"Ü!Ò!ð	"úó   ÄD& Ä&D9Ä8D9c                óŒ   • U R                   n UR                  U5      nUR                  U 5      $ ! [         a	    [        s $ f = fr[   )r9   ræ   ri  r"   r™  ra  s      r8   rj  ÚPolyElement.__rmod__o  rf  rg  c                óx  • U R                   nU(       d  [        S5      eUR                  U5      (       a  U R                  U5      $ [	        U[
        5      (       a¨  [	        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  Od[	        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $  UR                  U5      nU R                  U5      $ ! [         a	    [        s $ f = fr[  )r9   r]  rÛ   Úquor\   rˆ   r5   r   Ú__rtruediv__r™  rá   r_  r"   ra  s      r8   Ú__floordiv__ÚPolyElement.__floordiv__x  sè   € Ø�w‰wˆæÜ#Ð$9Ó:Ð:Ø�_‰_˜R× Ñ Ø—6‘6˜"“:ÐÜ˜œK×(Ñ(Ü˜$Ÿ+™+¤~×6Ñ6¸4¿;¹;×;KÑ;KÈrÏwÉwÓ;VØÜ˜BŸG™GŸN™N¬N×;Ñ;ÀÇÁÇÁ×@SÑ@SÐW[Ó@[Ø—‘ rÓ*Ð*ä%Ð%ð	%Ø—‘ Ó$ˆBð —=‘= Ó$Ð$øô ó 	"Ü!Ò!ð	"úrm  c                óŒ   • U R                   n UR                  U5      nUR                  U 5      $ ! [         a	    [        s $ f = fr[   )r9   ræ   rq  r"   r™  ra  s      r8   Ú__rfloordiv__ÚPolyElement.__rfloordiv__Ž  rf  rg  c                óx  • U R                   nU(       d  [        S5      eUR                  U5      (       a  U R                  U5      $ [	        U[
        5      (       a¨  [	        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  Od[	        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $  UR                  U5      nU R                  U5      $ ! [         a	    [        s $ f = fr[  )r9   r]  rÛ   Úexquor\   rˆ   r5   r   rr  r™  rá   r_  r"   ra  s      r8   Ú__truediv__ÚPolyElement.__truediv__—  sè   € Ø�w‰wˆæÜ#Ð$9Ó:Ð:Ø�_‰_˜R× Ñ Ø—8‘8˜B“<ÐÜ˜œK×(Ñ(Ü˜$Ÿ+™+¤~×6Ñ6¸4¿;¹;×;KÑ;KÈrÏwÉwÓ;VØÜ˜BŸG™GŸN™N¬N×;Ñ;ÀÇÁÇÁ×@SÑ@SÐW[Ó@[Ø—‘ rÓ*Ð*ä%Ð%ð	%Ø—‘ Ó$ˆBð —=‘= Ó$Ð$øô ó 	"Ü!Ò!ð	"úrm  c                óŒ   • U R                   n UR                  U5      nUR                  U 5      $ ! [         a	    [        s $ f = fr[   )r9   ræ   ry  r"   r™  ra  s      r8   rr  ÚPolyElement.__rtruediv__­  sE   € Ø�w‰wˆð	 Ø—‘ Ó$ˆBð —8‘8˜B“<Ðøô ó 	"Ü!Ò!ð	"úrg  c                óî   ^^^• U R                   R                  mU R                   R                  nUR                  mU R                   R                  mUR
                  (       a
  UUU4S jnU$ UUU4S jnU$ )Nc                óR   >• U u  p#Uu  pEUT	:X  a  UnOT" X$5      nUb
  UT" X55      4$ g r[   rY   ©
Ú	a_lm_a_lcÚ	b_lm_b_lcÚa_lmÚa_lcÚb_lmÚb_lcré   Ú
domain_quor˜   rÓ  s
          €€€r8   Úterm_divÚ'PolyElement._term_div.<locals>.term_div½  s@   ø€ Ø&‘
�Ø&‘
�Ø˜2“:Ø ‘Eá(¨Ó4�EØÑ$Ø ¡*¨TÓ"8Ð8Ð8àr:   c                ód   >• U u  p#Uu  pEUT	:X  a  UnOT" X$5      nUb  X5-  (       d
  UT" X55      4$ g r[   rY   r€  s
          €€€r8   rˆ  r‰  É  sC   ø€ Ø&‘
�Ø&‘
�Ø˜2“:Ø ‘Eá(¨Ó4�EØ™¨¯Ø ¡*¨TÓ"8Ð8Ð8àr:   )r9   r‹   r5   rq  r˜   rz  )r¬   r5   rˆ  r‡  r˜   rÓ  s      @@@r8   Ú	_term_divÚPolyElement._term_div¶  sX   ú€ Ø�Y‰Y×!Ñ!ˆØ—‘×!Ñ!ˆØ—Z‘Zˆ
Ø—y‘y×-Ñ-ˆà�?�?÷
 ð0 ˆ÷
 ð ˆr:   c                ó4  • U R                   nSn[        U[        5      (       a  SnU/n[        U5      (       d  [	        S5      eU (       d-  U(       a  UR
                  UR
                  4$ / UR
                  4$ U H  nUR                   U:w  d  M  [        S5      e   [        U5      n[        U5       Vs/ s H  obR
                  PM     nnU R                  5       nUR
                  n	U R                  5       n
U Vs/ s H  o»R                  5       PM     nnU(       a¹  SnSnXe:  ay  US:X  as  UR                  5       nU
" XèU   4XÆ   X   XÆ      45      nUb6  Uu  nnXv   R                  UU45      Xv'   UR                  X   UU* 45      nSnOUS-  nXe:  a  US:X  a  Ms  U(       d'  UR                  5       nU	R                  XèU   45      n	XŽ	 U(       a  M¹  WUR                  :X  a  X˜-  n	U(       a  U(       d  UR
                  U	4$ US   U	4$ Xy4$ s  snf s  snf )aµ  Division algorithm, see [CLO] p64.

fv array of polynomials
   return qv, r such that
   self = sum(fv[i]*qv[i]) + r

All polynomials are required not to be Laurent polynomials.

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y = ring('x, y', ZZ)
>>> f = x**3
>>> f0 = x - y**2
>>> f1 = x - y
>>> qv, r = f.div((f0, f1))
>>> qv[0]
x**2 + x*y**2 + y**4
>>> qv[1]
0
>>> r
y**6

FTr\  z"self and f must have the same ringr   rÑ   )r9   r\   rˆ   rf   r]  rª   rð   r|   r¨   r¸   r‹  r�   Ú_iadd_monomÚ_iadd_poly_monomr‹   )r¬   Úfvr9   Ú
ret_singlerz   r`   r­   Úqvr3  Úrrˆ  ÚfxÚexpvsÚdivoccurredr®   ÚtermÚexpv1rT   s                     r8   r—   ÚPolyElement.div×  s  € ð8 �y‰yˆØˆ
Ü�bœ+×&Ñ&ØˆJØ�ˆBÜ�2�w‰wÜ#Ð$9Ó:Ð:ÞÞØ—y‘y $§)¡)Ð+Ð+à˜4Ÿ9™9�}Ð$ÛˆAØ�v‰v˜�~Ü Ð!EÓFÐFñ ô �‹GˆÜ!& q¤Ó*¢˜A�iŒi¡ˆÐ*Ø�I‰I‹KˆØ�I‰IˆØ—>‘>Ó#ˆÙ-/Ó0ªR r—‘Ö"©RˆÐ0ÞØˆAØˆKØ“%˜K¨1Ó,Ø—~‘~Ó'�Ù ¨¡w °%±(¸B¹EÀ%Á(¹OÐ1LÓM�ØÑ#Ø#‘H�E˜1Ø™E×-Ñ-¨u°a¨jÓ9�B‘EØ×*Ñ*¨2©5°5¸1¸"°+Ó>�AØ"#‘Kà˜‘F�Að “%˜K¨1Õ,ö ØŸ™Ó(�Ø—M‘M 4¨4© /Ó2�Ø�G÷! ˆað" �4—?‘?Ó"Ø‰FˆAÞÞØ—y‘y !�|Ð#à˜!‘u˜a�x�à�5ˆLùò= +ùò 1s   Â4HÃ;Hc                óî  • U n[        U[        5      (       a  U/n[        U5      (       d  [        S5      eUR                  nUR
                  nUR                  nUR                  nUR                  nUR                  5       nUR                  n	UR                  5       nUR                  n
U(       aÄ  U Hz  nU" X›R                  5      nUc  M  Uu  pÞUR                  5        H.  u  nnU" Xý5      nU
" UU5      UU-  -
  nU(       d  UU	 M)  UUU'   M0     UR                  5       nUb  UUU   4n	  O=   U	u  nnUU;   a  UU==   U-  ss'   OUUU'   UU	 UR                  5       nUb  UUU   4n	U(       a  MÄ  U$ r[  )r\   rˆ   rf   r]  r9   r5   rª   r�   r‹  ÚLTr¸   rþ   rf  r�   )r¬   ÚGrz   r9   r5   rª   r�   r“  rˆ  Últfrþ   ÚgÚtqrS   rT   ÚmgÚcgÚm1Úc1ÚltmÚltcs                        r8   ri  ÚPolyElement.rem#  sq  € ØˆÜ�aœ×%Ñ%Ø�ˆAÜ�1�v‰vÜ#Ð$9Ó:Ð:Ø�v‰vˆØ—‘ˆØ�{‰{ˆØ×(Ñ(ˆØ�I‰IˆØ—;‘;“=ˆØ�d‰dˆØ�F‰F‹HˆØ�e‰eˆÞÛ�Ù˜c§4¡4Ó(�Ø“>Ø‘D�AØ"#§+¡+¦-™˜˜BÙ)¨"Ó0˜Ù   T›]¨Q¨r©TÑ1˜Þ!Ø ! "¢à$&˜A˜b›Eñ #0ð Ÿ.™.Ó*�CØ‘Ø! 1 S¡6˜k˜áñ ð" ‘��SØ˜!“8Ø�c“F˜c‘M”Fà �A�c‘FØ�c�FØ—n‘nÓ&�Ø‘?Ø˜q ™v˜+�C÷5 ˆað8 ˆr:   c                ó*   • U R                  U5      S   $ ©Nr   )r—   )rz   rœ  s     r8   rq  ÚPolyElement.quoP  s   € Ø�u‰u�Q‹x˜‰{Ðr:   c                óP   • U R                  U5      u  p#U(       d  U$ [        X5      er[   )r—   r$   )rz   rœ  Úqr“  s       r8   ry  ÚPolyElement.exquoS  s$   € Ø�u‰u�Q‹x‰ˆæØˆHä% aÓ+Ð+r:   c                óÀ   • X R                   R                  ;   a  U R                  5       nOU nUu  p4UR                  U5      nUc  XBU'   U$ XT-  nU(       a  XRU'   U$ X#	 U$ )aõ  add to self the monomial coeff*x0**i0*x1**i1*...
unless self is a generator -- then just return the sum of the two.

mc is a tuple, (monom, coeff), where monomial is (i0, i1, ...)

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y = ring('x, y', ZZ)
>>> p = x**4 + 2*y
>>> m = (1, 2)
>>> p1 = p._iadd_monom((m, 5))
>>> p1
x**4 + 5*x*y**2 + 2*y
>>> p1 is p
True
>>> p = x
>>> p1 = p._iadd_monom((m, 5))
>>> p1
5*x*y**2 + x
>>> p1 is p
False

)r9   r�   r¸   rþ   )r¬   ÚmcÚcpselfr®   rå   rT   s         r8   rŽ  ÚPolyElement._iadd_monom[  sr   € ð8 —9‘9×&Ñ&Ó&Ø—Y‘Y“[‰FàˆFØ‰ˆØ�J‰J�tÓˆØ‰9Ø �4‰Lð ˆð ‰JˆAÞØ �t‘ð ˆð �LØˆr:   c                ób  • U nX3R                   R                  ;   a  UR                  5       nUu  pEUR                  nUR                   R                  R
                  nUR                   R                  nUR                  5        H)  u  pšU" X”5      nU" X·5      X¥-  -   nU(       a  XÃU'   M'  X;	 M+     U$ )aÕ  add to self the product of (p)*(coeff*x0**i0*x1**i1*...)
unless self is a generator -- then just return the sum of the two.

mc is a tuple, (monom, coeff), where monomial is (i0, i1, ...)

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y, z = ring('x, y, z', ZZ)
>>> p1 = x**4 + 2*y
>>> p2 = y + z
>>> m = (1, 2, 3)
>>> p1 = p1._iadd_poly_monom(p2, (m, 3))
>>> p1
x**4 + 3*x*y**3*z**3 + 3*x*y**2*z**4 + 2*y

)r9   r�   r¸   rþ   r5   rª   r�   rI   )r¬   r‹  r®  rŠ  rS   rT   rþ   rª   r�   r€  r�  Úkarå   s                r8   r�  ÚPolyElement._iadd_poly_monom‡  s˜   € ð* ˆØ—‘×"Ñ"Ó"Ø—‘“ˆBØ‰ˆØ�f‰fˆØ�w‰w�~‰~×"Ñ"ˆØ—w‘w×+Ñ+ˆØ—H‘H–J‰DˆAÙ˜aÓ#ˆBÙ˜“M A¡CÑ'ˆEÞØ�2“à’Fñ ð ˆ	r:   c                ó¨   ^• U R                   R                  U5      mU (       d  [        $ TS:  a  g[        U4S jU R	                  5        5       5      $ )zx
The leading degree in ``x`` or the main variable.

Note that the degree of 0 is negative infinity (``float('-inf')``)

r   c              3  ó,   >#   • U  H	  oT   v •  M     g 7fr[   rY   ©r_   ré   r­   s     €r8   ra   Ú%PolyElement.degree.<locals>.<genexpr>º  ó   øé € Ð<ª^ E˜Q–xª^ùó   ƒ)r9   r  r   ry   r  ©rz   Úxr­   s     @r8   ÚdegreeÚPolyElement.degree¬  ó?   ø€ ð �F‰F�L‰L˜‹OˆæÜˆKØ�‹UØäÔ<¨Q¯\©\¬^Ó<Ó<Ð<r:   c                ó¸   • U (       d  [         4U R                  R                  -  $ [        [	        [
        [        [        U R                  5       6 5      5      5      $ )z{
A tuple containing leading degrees in all variables.

Note that the degree of 0 is negative infinity (``float('-inf')``)

)	r   r9   rl   r{   rD   ry   rC   rH   r  rö  s    r8   ÚdegreesÚPolyElement.degrees¼  ó>   € ö Ü�7˜1Ÿ6™6Ÿ<™<Ñ'Ð'äœœS¤$¤s¨A¯L©L«NÐ';Ó"<Ó=Ó>Ð>r:   c                ó¨   ^• U R                   R                  U5      mU (       d  [        $ TS:  a  g[        U4S jU R	                  5        5       5      $ )zu
The tail degree in ``x`` or the main variable.

Note that the degree of 0 is negative infinity (``float('-inf')``)

r   c              3  ó,   >#   • U  H	  oT   v •  M     g 7fr[   rY   r¶  s     €r8   ra   Ú*PolyElement.tail_degree.<locals>.<genexpr>Ö  r¸  r¹  )r9   r  r   Úminr  rº  s     @r8   Útail_degreeÚPolyElement.tail_degreeÈ  r¾  r:   c                ó¸   • U (       d  [         4U R                  R                  -  $ [        [	        [
        [        [        U R                  5       6 5      5      5      $ )zx
A tuple containing tail degrees in all variables.

Note that the degree of 0 is negative infinity (``float('-inf')``)

)	r   r9   rl   r{   rD   rÆ  rC   rH   r  rö  s    r8   Útail_degreesÚPolyElement.tail_degreesØ  rÂ  r:   c                óH   • U (       a  U R                   R                  U 5      $ g)a  Leading monomial tuple according to the monomial ordering.

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y, z = ring('x, y, z', ZZ)
>>> p = x**4 + x**3*y + x**2*z**2 + z**7
>>> p.leading_expv()
(4, 0, 0)

N)r9   r�   r²   s    r8   r�   ÚPolyElement.leading_expvä  s   € ö Ø—9‘9×)Ñ)¨$Ó/Ð/àr:   c                ó`   • U R                  XR                  R                  R                  5      $ r[   )rþ   r9   r5   rª   ©r¬   r®   s     r8   Ú
_get_coeffÚPolyElement._get_coeffø  s!   € Ø�x‰x˜Ÿi™i×.Ñ.×3Ñ3Ó4Ð4r:   c                óz  • US:X  a%  U R                  U R                  R                  5      $ U R                  R                  U5      (       ac  [	        UR                  5       5      n[        U5      S:X  a;  US   u  p4X@R                  R                  R                  :X  a  U R                  U5      $ [        SU-  5      e)a|  
Returns the coefficient that stands next to the given monomial.

Parameters
==========

element : PolyElement (with ``is_monomial = True``) or 1

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y, z = ring("x,y,z", ZZ)
>>> f = 3*x**2*y - x*y*z + 7*z**3 + 23

>>> f.coeff(x**2*y)
3
>>> f.coeff(x*y)
0
>>> f.coeff(1)
23

rÑ   r   zexpected a monomial, got %s)
rÐ  r9   r‹   rÛ   rC   rf  r|   r5   rŽ   rð   )r¬   rÚ   ro  ré   rå   s        r8   rå   ÚPolyElement.coeffû  s˜   € ð4 �a‹<Ø—?‘? 4§9¡9×#7Ñ#7Ó8Ð8Ø�Y‰Y×!Ñ! '×*Ñ*Ü˜×*Ñ*Ó,Ó-ˆEÜ�5‹z˜Q‹Ø$ Q™x‘�ØŸI™I×,Ñ,×0Ñ0Ó0ØŸ?™?¨5Ó1Ð1äÐ6¸Ñ@ÓAÐAr:   c                óL   • U R                  U R                  R                  5      $ )z"Returns the constant coefficient. )rÐ  r9   r‹   r²   s    r8   r’  ÚPolyElement.const   s   € à�‰˜tŸy™y×3Ñ3Ó4Ð4r:   c                ó@   • U R                  U R                  5       5      $ r[   )rÐ  r�   r²   s    r8   râ  ÚPolyElement.LC$  s   € à�‰˜t×0Ñ0Ó2Ó3Ð3r:   c                óX   • U R                  5       nUc  U R                  R                  $ U$ r[   )r�   r9   r‹   rÏ  s     r8   ÚLMÚPolyElement.LM(  s*   € à× Ñ Ó"ˆØ‰<Ø—9‘9×'Ñ'Ð'àˆKr:   c                ó¤   • U R                   R                  nU R                  5       nU(       a"  U R                   R                  R                  X'   U$ )zÕ
Leading monomial as a polynomial element.

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y = ring('x, y', ZZ)
>>> (3*x*y + y**2).leading_monom()
x*y

)r9   rª   r�   r5   rŽ   ©r¬   r3  r®   s      r8   Úleading_monomÚPolyElement.leading_monom0  s>   € ð �I‰I�N‰NˆØ× Ñ Ó"ˆÞØ—i‘i×&Ñ&×*Ñ*ˆA‰GØˆr:   c                ó¸   • U R                  5       nUc6  U R                  R                  U R                  R                  R                  4$ XR                  U5      4$ r[   )r�   r9   r‹   r5   rª   rÐ  rÏ  s     r8   r›  ÚPolyElement.LTE  sL   € à× Ñ Ó"ˆØ‰<Ø—I‘I×(Ñ(¨$¯)©)×*:Ñ*:×*?Ñ*?Ð@Ð@àŸ/™/¨$Ó/Ð0Ð0r:   c                ód   • U R                   R                  nU R                  5       nUb  X   X'   U$ )zÑLeading term as a polynomial element.

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y = ring('x, y', ZZ)
>>> (3*x*y + y**2).leading_term()
3*x*y

)r9   rª   r�   rÜ  s      r8   Úleading_termÚPolyElement.leading_termM  s3   € ð �I‰I�N‰NˆØ× Ñ Ó"ˆØÑØ‘jˆA‰GØˆr:   c                ó¬   ^• Tc  U R                   R                  mO[        R                  " T5      mT[        L a  [        US SS9$ [        UU4S jSS9$ )Nc                ó   • U S   $ r¨  rY   )ré   s    r8   rs   Ú%PolyElement._sorted.<locals>.<lambda>h  s   € °°q²r:   T)rx   Úreversec                ó   >• T" U S   5      $ r¨  rY   )ré   r6   s    €r8   rs   ræ  j  s   ø€ ±°u¸Q±x´r:   )r9   r6   r   r~   r    Úsorted)r¬   rX   r6   s     `r8   Ú_sortedÚPolyElement._sorteda  sL   ø€ Ø‰=Ø—I‘I—O‘O‰Eä×'Ò'¨Ó.ˆEà”CŠ<Ü˜#Ñ#9À4ÑHÐHä˜#Ô#@È$ÑOÐOr:   c                óZ   • U R                  U5       VVs/ s H  u  p#UPM	     snn$ s  snnf )a�  Ordered list of polynomial coefficients.

Parameters
==========

order : :class:`~.MonomialOrder` or coercible, optional

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.orderings import lex, grlex

>>> _, x, y = ring("x, y", ZZ, lex)
>>> f = x*y**7 + 2*x**2*y**3

>>> f.coeffs()
[2, 1]
>>> f.coeffs(grlex)
[1, 2]

©ro  )r¬   r6   Ú_rå   s       r8   rP   ÚPolyElement.coeffsl  s)   € ð0 (,§z¡z°%Ô'8Ô:Ò'8™8˜1“Ñ'8Ò:Ð:ùÓ:ó   •'c                óZ   • U R                  U5       VVs/ s H  u  p#UPM	     snn$ s  snnf )a’  Ordered list of polynomial monomials.

Parameters
==========

order : :class:`~.MonomialOrder` or coercible, optional

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.orderings import lex, grlex

>>> _, x, y = ring("x, y", ZZ, lex)
>>> f = x*y**7 + 2*x**2*y**3

>>> f.monoms()
[(2, 3), (1, 7)]
>>> f.monoms(grlex)
[(1, 7), (2, 3)]

rí  )r¬   r6   ré   rî  s       r8   ÚmonomsÚPolyElement.monoms†  s)   € ð0 (,§z¡z°%Ô'8Ô:Ò'8™8˜5“Ñ'8Ò:Ð:ùÓ:rð  c                óT   • U R                  [        U R                  5       5      U5      $ )a   Ordered list of polynomial terms.

Parameters
==========

order : :class:`~.MonomialOrder` or coercible, optional

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ
>>> from sympy.polys.orderings import lex, grlex

>>> _, x, y = ring("x, y", ZZ, lex)
>>> f = x*y**7 + 2*x**2*y**3

>>> f.terms()
[((2, 3), 2), ((1, 7), 1)]
>>> f.terms(grlex)
[((1, 7), 1), ((2, 3), 2)]

)rê  rC   rI   )r¬   r6   s     r8   ro  ÚPolyElement.terms   s    € ð0 �|‰|œD §¡£Ó.°Ó6Ð6r:   c                ó4   • [        U R                  5       5      $ )z,Iterator over coefficients of a polynomial. )ÚiterrF   r²   s    r8   Ú
itercoeffsÚPolyElement.itercoeffsº  ó   € ä�D—K‘K“MÓ"Ð"r:   c                ó4   • [        U R                  5       5      $ )z)Iterator over monomials of a polynomial. )r÷  r�  r²   s    r8   r  ÚPolyElement.itermonoms¾  ó   € ä�D—I‘I“KÓ Ð r:   c                ó4   • [        U R                  5       5      $ )z%Iterator over terms of a polynomial. )r÷  rI   r²   s    r8   rf  ÚPolyElement.itertermsÂ  ó   € ä�D—J‘J“LÓ!Ð!r:   c                ó4   • [        U R                  5       5      $ )z+Unordered list of polynomial coefficients. )rC   rF   r²   s    r8   Ú
listcoeffsÚPolyElement.listcoeffsÆ  rú  r:   c                ó4   • [        U R                  5       5      $ )z(Unordered list of polynomial monomials. )rC   r�  r²   s    r8   Ú
listmonomsÚPolyElement.listmonomsÊ  rý  r:   c                ó4   • [        U R                  5       5      $ )z$Unordered list of polynomial terms. r…  r²   s    r8   Ú	listtermsÚPolyElement.listtermsÎ  r   r:   c                óš   • X R                   R                  ;   a  X-  $ U(       d  U R                  5         gU  H  nX==   U-  ss'   M     U $ )aš  multiply inplace the polynomial p by an element in the
coefficient ring, provided p is not one of the generators;
else multiply not inplace

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y = ring('x, y', ZZ)
>>> p = x + y**2
>>> p1 = p.imul_num(3)
>>> p1
3*x + 3*y**2
>>> p1 is p
True
>>> p = x
>>> p1 = p.imul_num(3)
>>> p1
3*x
>>> p1 is p
False

N)r9   r�   Úclear)r3  rT   r  s      r8   rT  ÚPolyElement.imul_numÒ  sD   € ð4 —‘× Ñ Ó Ø‘3ˆJÞØ�G‰GŒIØÛˆCØ‹F�a‰K�Fñ àˆr:   c                ó    • U R                   R                  nUR                  nUR                  nU R	                  5        H  nU" X$5      nM     U$ )z*Returns GCD of polynomial's coefficients. )r9   r5   rª   r›   rø  )rz   r5   Úcontr›   rå   s        r8   r   ÚPolyElement.contentõ  sB   € à—‘—‘ˆØ�{‰{ˆØ�j‰jˆà—\‘\–^ˆEÙ�tÓ#ŠDñ $ð ˆr:   c                ó’   • U R                  5       nXR                  R                  R                  :X  a  X4$ XR	                  U5      4$ )z,Returns content and a primitive polynomial. )r   r9   r5   rª   r_  )rz   r  s     r8   Ú	primitiveÚPolyElement.primitive   s;   € à�y‰y‹{ˆØ—6‘6—=‘=×%Ñ%Ó%Ø�9ÐØ—\‘\ $Ó'Ð'Ð'r:   c                óJ   • U (       d  U $ U R                  U R                  5      $ )z5Divides all coefficients by the leading coefficient. )r_  râ  rö  s    r8   ÚmonicÚPolyElement.monic  s   € æØˆHà—<‘< §¡Ó%Ð%r:   c                óº   • U(       d  U R                   R                  $ U R                  5        VVs/ s H  u  p#X#U-  4PM     nnnU R                  U5      $ s  snnf r[   )r9   rª   rf  r‰   )rz   r»  ré   rå   ro  s        r8   r¶  ÚPolyElement.mul_ground  sJ   € ÞØ—6‘6—;‘;Ðà78·{±{´}ÔF²}¡| u�5 ™'Ó"±}ˆÑFØ�u‰u�U‹|Ðùó Gs   ±Ac                ó´   • U R                   R                  nU R                  5        VVs/ s H  u  p4U" X15      U4PM     nnnU R                  U5      $ s  snnf r[   )r9   r�   rI   r‰   )rz   ré   r�   Úf_monomÚf_coeffro  s         r8   Ú	mul_monomÚPolyElement.mul_monom  sQ   € Ø—v‘v×*Ñ*ˆØRS×RYÑRYÔR[Ô]ÒR[Ñ>N¸g‘< Ó/°Ó9ÑR[ˆÑ]Ø�u‰u�U‹|Ðùó ^s   ªAc                ó\  • Uu  p#U (       a  U(       d  U R                   R                  $ X R                   R                  :X  a  U R                  U5      $ U R                   R                  nU R                  5        VVs/ s H  u  pVU" XR5      Xc-  4PM     nnnU R                  U5      $ s  snnf r[   )r9   rª   r‹   r¶  r�   rI   r‰   )rz   r—  ré   rå   r�   r  r  ro  s           r8   Úmul_termÚPolyElement.mul_term  sŒ   € Ø‰ˆæžØ—6‘6—;‘;ÐØ—f‘f×'Ñ'Ó'Ø—<‘< Ó&Ð&à—v‘v×*Ñ*ˆØXY×X_ÑX_ÔXaÔcÒXaÑDTÀG‘< Ó/°±Ó?ÑXaˆÑcØ�u‰u�U‹|Ðùó ds   Á<B(c           	     ó´  • U R                   R                  nU(       d  [        S5      eU (       a  XR                  :X  a  U $ UR                  (       a8  UR
                  nU R                  5        VVs/ s H  u  pEXC" XQ5      4PM     nnnO3U R                  5        VVs/ s H  u  pEXQ-  (       a  M  XEU-  4PM     nnnU R                  U5      $ s  snnf s  snnf r[  )r9   r5   r]  rŽ   rz  rq  rf  r‰   )rz   r»  r5   rq  ré   rå   ro  s          r8   r_  ÚPolyElement.quo_ground&  s¨   € Ø—‘—‘ˆæÜ#Ð$9Ó:Ð:Þ�AŸ™“OØˆHà�?�?Ø—*‘*ˆCØABÇÁÄÔPÂ±°�u˜c %›mÓ,ÁˆEÑPˆEà>?¿k¹k¼mÔ`ºm©l¨eÐTYÕT]Ó)�u q™jÓ)¹mˆEÑ`à�u‰u�U‹|Ðùó	 Qùã`s   Á1CÂCÂ0
Cc                ó†  • Uu  p#U(       d  [        S5      eU (       d  U R                  R                  $ X R                  R                  :X  a  U R	                  U5      $ U R                  5       nU R                  5        Vs/ s H
  oT" XQ5      PM     nnU R                  U Vs/ s H	  oUc  M  UPM     sn5      $ s  snf s  snf r[  )r]  r9   rª   r‹   r_  r‹  rf  r‰   )rz   r—  ré   rå   rˆ  Útro  s          r8   Úquo_termÚPolyElement.quo_term6  s˜   € Ø‰ˆæÜ#Ð$9Ó:Ð:ÞØ—6‘6—;‘;ÐØ—f‘f×'Ñ'Ó'Ø—<‘< Ó&Ð&à—;‘;“=ˆà-.¯[©[¬]Ó<ª]¨�(˜1Ö#©]ˆÐ<Ø�u‰u¡%Ó:¢%˜Q—q¡%Ñ:Ó;Ð;ùò =ùÚ:s   Â B9Â"B>Â,B>c                ój  • U R                   R                  R                  (       a>  / nU R                  5        H'  u  p4XA-  nXAS-  :”  a  XA-
  nUR	                  X445        M)     O(U R                  5        VVs/ s H  u  p4X4U-  4PM     nnnU R                  U5      nUR                  5         U$ s  snnf )Nr  )r9   r5   Úis_ZZrf  r«   r‰   r†  )rz   r3  ro  ré   rå   r¯   s         r8   Útrunc_groundÚPolyElement.trunc_groundE  s–   € Ø�6‰6�=‰=××ØˆEà !§¡¦‘�Ø™	�à ™6“>Ø!™I�Eà—‘˜e˜^Ö,ò !.ð >?¿[¹[¼]ÔLº]©\¨U�u a™iÓ(¹]ˆEÑLà�u‰u�U‹|ˆØ�‰ÔØˆùó	 Ms   Á7B/c                óÜ   • U nUR                  5       nUR                  5       nUR                  R                  R                  X45      nUR	                  U5      nUR	                  U5      nXRU4$ r[   )r   r9   r5   r›   r_  )r¬   rž  rz   ÚfcÚgcr›   s         r8   Úextract_groundÚPolyElement.extract_groundY  s[   € ØˆØ�Y‰Y‹[ˆØ�Y‰Y‹[ˆà�f‰f�m‰m×Ñ Ó'ˆà�L‰L˜ÓˆØ�L‰L˜Óˆà�qˆyÐr:   c                óò   • U (       d   U R                   R                  R                  $ U R                   R                  R                  nU" U R	                  5        Vs/ s H
  o2" U5      PM     sn5      $ s  snf r[   )r9   r5   rª   Úabsrø  )rz   Ú	norm_funcÚ
ground_absrå   s       r8   Ú_normÚPolyElement._norme  sT   € ÞØ—6‘6—=‘=×%Ñ%Ð%àŸ™Ÿ™×*Ñ*ˆJÙ¸a¿l¹l¼nÓNºn°U˜z¨%Ö0¹nÑNÓOÐOùÒNs   ÁA4c                ó,   • U R                  [        5      $ r[   )r3  ry   rö  s    r8   Úmax_normÚPolyElement.max_norml  ó   € Ø�w‰w”s‹|Ðr:   c                ó,   • U R                  [        5      $ r[   )r3  rE   rö  s    r8   Úl1_normÚPolyElement.l1_normo  r8  r:   c                ó\  • U R                   nU /[        U5      -   nS/UR                  -  nU H>  nUR                  5        H'  n[	        U5       H  u  px[        XG   U5      XG'   M     M)     M@     [	        U5       H  u  pyU	(       a  M  SXG'   M     [        U5      n[        S U 5       5      (       a  XC4$ / n
U Hg  nUR                  nUR                  5        H3  u  pÍ[        XÄ5       VVs/ s H	  u  p~X~-  PM     nnnXÛ[        U5      '   M5     U
R                  U5        Mi     XJ4$ s  snnf )Nr   rÑ   c              3  ó*   #   • U  H	  oS :H  v •  M     g7fr  rY   )r_   rr   s     r8   ra   Ú&PolyElement.deflate.<locals>.<genexpr>ƒ  s   é € Ð!šq˜!�AŽvšqùs   ‚)r9   rC   rl   r  r  r   r{   rf   rª   rf  rH   r«   )rz   rœ  r9   rU   ÚJr3  ré   r­   rS   rr   ÚHÚhÚIrå   rW  ÚNs                   r8   ÚdeflateÚPolyElement.deflater  s  € Ø�v‰vˆØ�”d˜1“g‘ˆàˆC�—
‘
‰NˆãˆAØŸ™ž�Ü% eÖ,‘D�AÜ ¡ a›=�A“Dó -ó (ñ ô
 ˜a–L‰DˆAß�1Ø�“ñ !ô �!‹HˆäÑ!™qÓ!×!Ñ!Ø�8ˆOàˆãˆAØ—	‘	ˆAàŸK™KžM‘�Ü),¨Q¬Ô4ª¡ �a”f©�Ñ4Ø#”%˜“(“ñ *ð �H‰H�QŽKñ ð ˆtˆùó 5s   Ã,D(
c                óÌ   • U R                   R                  nU R                  5        H3  u  p4[        X15       VVs/ s H	  u  pVXV-  PM     nnnXB[	        U5      '   M5     U$ s  snnf r[   )r9   rª   rf  rH   r{   )rz   r?  r¯   rB  rå   r­   rW  rC  s           r8   ÚinflateÚPolyElement.inflate“  sT   € Ø�v‰v�{‰{ˆàŸ™ž‰HˆAÜ"% a¤)Ô-¢)™$˜!�!”#¡)ˆAÑ-Ø"”�q“‹Nñ &ð ˆùó .s   ºA c                óf  • U nUR                   R                  nUR                  (       d5  UR                  5       u  pBUR                  5       u  pQUR	                  XE5      nX!-  R                  UR                  U5      5      nUR                  (       d  UR                  W5      $ UR                  5       $ r[   )	r9   r5   rz  r  r™   rq  r›   r¶  r  )r¬   rž  rz   r5   r+  r,  rT   rA  s           r8   r™   ÚPolyElement.lcmœ  s|   € ØˆØ—‘—‘ˆà��Ø—K‘K“M‰EˆBØ—K‘K“M‰EˆBØ—
‘
˜2Ó"ˆAà‰S�I‰I�a—e‘e˜A“hÓˆà��Ø—<‘< “?Ð"à—7‘7“9Ðr:   c                ó*   • U R                  U5      S   $ r¨  )Ú	cofactors©rz   rž  s     r8   r›   ÚPolyElement.gcd¬  s   € Ø�{‰{˜1‹~˜aÑ Ð r:   c                ó"  • U (       d!  U(       d  U R                   R                  nX"U4$ U (       d  U R                  U5      u  p4nX4U4$ U(       d  UR                  U 5      u  p5nX4U4$ [        U 5      S:X  a  U R	                  U5      u  p4nX4U4$ [        U5      S:X  a  UR	                  U 5      u  p5nX4U4$ U R                  U5      u  nu  pU R                  U5      u  p4nUR                  U5      UR                  U5      UR                  U5      4$ rú   )r9   rª   Ú	_gcd_zeror|   Ú
_gcd_monomrD  Ú_gcdrG  )rz   rž  rª   rA  ÚcffÚcfgr?  s          r8   rL  ÚPolyElement.cofactors¯  sð   € ÞžØ—6‘6—;‘;ˆDØ˜tÐ#Ð#ÞØŸ+™+ a›.‰KˆA�CØ˜3�;ÐÞØŸ+™+ a›.‰KˆA�CØ˜3�;ÐÜ�‹V�q‹[ØŸ,™, q›/‰KˆA�CØ˜3�;ÐÜ�‹V�q‹[ØŸ,™, q›/‰KˆA�CØ˜3�;Ðà—I‘I˜a“L‰	ˆ‰6ˆAØ—f‘f˜Q“i‰ˆ�à—	‘	˜!“˜cŸk™k¨!›n¨c¯k©k¸!«nÐ=Ð=r:   c                óŽ   • U R                   R                  U R                   R                  p2UR                  (       a  XU4$ U* X2* 4$ r[   )r9   rŽ   rª   rï  )rz   rž  rŽ   rª   s       r8   rP  ÚPolyElement._gcd_zeroÅ  s:   € Ø—F‘F—J‘J §¡§¡ˆTØ××Ø˜C�<Ðà�2�t˜T�>Ð!r:   c                ó2  • U R                   nUR                  R                  nUR                  R                  nUR                  nUR
                  n[        U R                  5       5      S   u  pxXxp©UR                  5        H  u  p¼U" X›5      n	U" X¬5      n
M     U R                  Xš4/5      nU R                  U" Xy5      U" XŠ5      4/5      nU R                  UR                  5        VVs/ s H  u  p¼U" X¹5      U" XÊ5      4PM     snn5      nXÞU4$ s  snnf r¨  )	r9   r5   r›   rq  rœ   r–   rC   rf  r‰   )rz   rž  r9   Ú
ground_gcdÚ
ground_quorœ   r–   ÚmfÚcfÚ_mgcdÚ_cgcdr   r¡  rA  rS  rT  s                   r8   rQ  ÚPolyElement._gcd_monomÌ  sü   € Ø�v‰vˆØ—[‘[—_‘_ˆ
Ø—[‘[—_‘_ˆ
Ø×(Ñ(ˆØ×*Ñ*ˆÜ�a—k‘k“mÓ$ QÑ'‰ˆØˆuØ—k‘k–m‰FˆBÙ  Ó+ˆEÙ˜uÓ)ŠEñ $ð �E‰E�E�>Ð"Ó#ˆØ�e‰e‘m BÓ.±
¸2Ó0EÐFÐGÓHˆØ�e‰eÐUV×U`ÑU`ÔUbÔcÒUbÉ6È2‘m BÓ.±
¸2Ó0EÓFÑUbÒcÓdˆØ�sˆ{Ðùó ds   Ã+D
c                óì   • U R                   nUR                  R                  (       a  U R                  U5      $ UR                  R                  (       a  U R                  U5      $ UR                  X5      $ r[   )r9   r5   Úis_QQÚ_gcd_QQr'  Ú_gcd_ZZÚdmp_inner_gcd)rz   rž  r9   s      r8   rR  ÚPolyElement._gcdÜ  sR   € Ø�v‰vˆà�;‰;××Ø—9‘9˜Q“<ÐØ�[‰[××Ø—9‘9˜Q“<Ðà×%Ñ% aÓ+Ð+r:   c                ó   • [        X5      $ r[   r   rM  s     r8   rc  ÚPolyElement._gcd_ZZæ  s   € Ü�a‹|Ðr:   c                ód  • U nUR                   nUR                  UR                  R                  5       S9nUR	                  5       u  pRUR	                  5       u  paUR                  U5      nUR                  U5      nUR                  U5      u  pxn	UR                  U5      nUR                  UR                  5       pzUR                  U5      R                  UR                  R                  X¥5      5      nU	R                  U5      R                  UR                  R                  X¦5      5      n	XxU	4$ )Nr  )r9   rË   r5   r|  r‚  rp  rc  râ  r  r¶  rq  )r¬   rž  rz   r9   rn  r\  r¡  rA  rS  rT  rT   s              r8   rb  ÚPolyElement._gcd_QQé  së   € ØˆØ�v‰vˆØ—:‘: T§[¡[×%9Ñ%9Ó%;�:Ð<ˆà—‘Ó ‰ˆØ—‘Ó ‰ˆà�J‰J�xÓ ˆØ�J‰J�xÓ ˆà—i‘i “l‰ˆ�à�J‰J�tÓˆØ�t‰t�Q—W‘W“Yˆ1à�l‰l˜4Ó ×+Ñ+¨D¯K©K¯O©O¸AÓ,BÓCˆØ�l‰l˜4Ó ×+Ñ+¨D¯K©K¯O©O¸AÓ,BÓCˆà�sˆ{Ðr:   c                ó>  • U nUR                   nU(       d  X#R                  4$ UR                  nUR                  (       a  UR                  (       d  UR                  U5      u  pVnOÙUR                  UR                  5       S9nUR                  5       u  p’UR                  5       u  p¡UR                  U5      nUR                  U5      nUR                  U5      u  pVnUR                  R                  X©5      u  pZn	UR                  U5      nUR                  U5      nUR                  U
5      nUR                  U	5      nUR                  5       nX´R                  :X  a   Xg4$ X´R                  * :X  a  U* U* pvXg4$ UR                  U5      nUR                  U5      nXg4$ )zÈ
Cancel common factors in a rational function ``f/g``.

Examples
========

>>> from sympy.polys import ring, ZZ
>>> R, x,y = ring("x,y", ZZ)

>>> (2*x**2 - 2).cancel(x**2 - 2*x + 1)
(2*x + 2, x - 1)

r  )r9   rŽ   r5   rz  r{  rL  rË   r|  r‚  rp  r¶  Úcanonical_unit)r¬   rž  rz   r9   r5   rî  r3  r«  rn  ÚcqÚcpÚus               r8   ÚcancelÚPolyElement.cancelþ  sd  € ð ˆØ�v‰vˆæØ—h‘h�;Ðà—‘ˆà—— F×$9×$9Ø—k‘k !“n‰GˆA‘!à—z‘z¨¯©Ó):�zÐ;ˆHà—N‘NÓ$‰EˆBØ—N‘NÓ$‰EˆBà—
‘
˜8Ó$ˆAØ—
‘
˜8Ó$ˆAà—k‘k !“n‰GˆA�!Ø Ÿ™×1Ñ1°"Ó9‰IˆA�2à—
‘
˜4Ó ˆAØ—
‘
˜4Ó ˆAà—‘˜RÓ ˆAØ—‘˜RÓ ˆAð
 ×ÑÓˆØ—
‘
‹?Øð ˆtˆð —:‘:�+ÓØ�2˜�rˆqð
 ˆtˆð —‘˜Q“ˆAØ—‘˜Q“ˆAàˆtˆr:   c                ód   • U R                   R                  nUR                  U R                  5      $ r[   )r9   r5   rk  râ  )rz   r5   s     r8   rk  ÚPolyElement.canonical_unit6	  s$   € Ø—‘—‘ˆØ×$Ñ$ Q§T¡TÓ*Ð*r:   c                ó  • U R                   nUR                  U5      nUR                  U5      nUR                  nU R	                  5        H9  u  pgXc   (       d  M  UR                  Xd5      nUR                  XvU   -  5      XX'   M;     U$ )zÙComputes partial derivative in ``x``.

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ

>>> _, x, y = ring("x,y", ZZ)
>>> p = x + x**2*y**3
>>> p.diff(x)
2*x*y**3 + 1

)r9   r  r©   rª   rf  r–   rá   )	rz   r»  r9   r­   rS   rž  r®   rå   Úes	            r8   ÚdiffÚPolyElement.diff:	  sy   € ð �v‰vˆØ�J‰J�q‹MˆØ×Ñ Ó"ˆØ�I‰IˆØŸ;™;ž=‰KˆDØ�w‰wØ×&Ñ& tÓ/�Ø—‘ u°!©W¡}Ó5�“ñ )ð ˆr:   c                ó,  • S[        U5      s=:  a  U R                  R                  ::  a;  O  O8U R                  [	        [        U R                  R                  U5      5      5      $ [        SU R                  R                  < S[        U5      < 35      e)Nr   z expected at least 1 and at most z values, got )r|   r9   rl   ÚevaluaterC   rH   r3   rð   )rz   rF   s     r8   rQ  ÚPolyElement.__call__S	  sb   € ØŒs�6‹{Õ*˜aŸf™fŸl™lÖ*Ø—:‘:œd¤3 q§v¡v§{¡{°FÓ#;Ó<Ó=Ð=åÐTU×TZÑTZ×T`ÔT`ÔbeÐflÕbmÐnÓoÐor:   c                óö  • U n[        U[        5      (       ab  Uc_  US   USS  su  pBnUR                  XB5      nU(       d  U$ U VVs/ s H  u  pRUR                  U5      U4PM     nnnUR                  U5      $ UR                  nUR                  U5      nUR                  R                  U5      nUR                  S:X  a<  UR                  R                  nUR                  5        H  u  u  pšXŠX)-  -  -  nM     U$ UR                  U5      R                  nUR                  5        HF  u  pÊXÇ   US U XÇS-   S  -   pÉX¢U	-  -  n
XË;   a  X«U   -   n
U
(       a  X«U'   M5  X¼	 M9  U
(       d  MB  X«U'   MH     U$ s  snnf )Nr   rÑ   )r\   rC   rx  r  r9   r  r5   rÞ   rl   rª   rf  )r¬   r»  rq   rz   ÚXÚYr9   r­   ÚresultrH  rå   r¯   ré   s                r8   rx  ÚPolyElement.evaluateY	  sg  € Øˆä�aœ×Ñ 1¡9Ø˜!™˜a  ˜eˆI‰FˆQ�AØ—
‘
˜1Ó ˆAæØ�á34Ô6²1©¨!�q—v‘v˜a“y !“n±1�Ñ6Ø—z‘z !“}Ð$à�v‰vˆØ�J‰J�q‹MˆØ�K‰K×Ñ Ó"ˆà�:‰:˜‹?Ø—[‘[×%Ñ%ˆFà Ÿ{™{ž}‘‘�Ø ¡™*Ñ$’ñ  -ð ˆMà—9‘9˜Q“<×$Ñ$ˆDà !§¡¦‘�Ø ™8 U¨2¨A Y°¸±s°t°Ñ%<�5Ø ™d™
�à“=Ø!¨¡KÑ/�EæØ&+˜U›à šKç�uØ&+˜U›ñ !.ð ˆKùóA 7s   ÁE5c                ón  • U n[        U[        5      (       a!  Uc  U H  u  pBUR                  XB5      nM     U$ UR                  nUR	                  U5      nUR
                  R                  U5      nUR                  S:X  aK  UR
                  R                  nUR                  5        H  u  u  p‰XyX(-  -  -  nM     UR                  U5      $ UR                  n
UR                  5        HI  u  p¹X¶   US U S-   X¶S-   S  -   p¸X’U-  -  n	Xº;   a  XšU   -   n	U	(       a  XšU'   M8  X«	 M<  U	(       d  ME  XšU'   MK     U
$ )NrÑ   rn   )r\   rC   Úsubsr9   r  r5   rÞ   rl   rª   rf  ræ   )r¬   r»  rq   rz   r{  r9   r­   r}  rH  rå   r¯   ré   s               r8   r€  ÚPolyElement.subs…	  s'  € Øˆä�aœ×Ñ 1¡9Û‘�Ø—F‘F˜1“L’ñ àˆHà�v‰vˆØ�J‰J�q‹MˆØ�K‰K×Ñ Ó"ˆà�:‰:˜‹?Ø—[‘[×%Ñ%ˆFà Ÿ{™{ž}‘‘�Ø ¡™*Ñ$’ñ  -ð —?‘? 6Ó*Ð*à—9‘9ˆDà !§¡¦‘�Ø ™8 U¨2¨A Y°Ñ%5¸À¹c¸d¸Ñ%C�5Ø ™d™
�à“=Ø!¨¡KÑ/�EæØ&+˜U›à šKç�uØ&+˜U›ñ !.ð ˆKr:   c                ó°  ^^^• U R                  5       nUR                  nUR                  nU(       d  XR                  / 4$ [	        U5       Vs/ s H  oBR                  US-   5      PM     snm0 mUU4S jn[        [	        US-
  5      5      n[        [	        USS5      5      nUR                  nU(       aù  Su  pšn[        UR                  5       5       HM  u  nu  mn[        U4S jU 5       5      (       d  M%  [        S [        UT5       5       5      nXÙ:”  d  MH  UTUpºn	MO     U	S:w  a  X«smnOO~/ n[        TTSS S	-   5       H  u  nnUR                  UU-
  5        M     X‚R                  [        U5      U5      -  nUn[        U5       H  u  pCUU" XC5      -  nM     UU-  nU(       a  Mù  [        [        UR                  T5      5      nX�U4$ s  snf )
a  
Rewrite *self* in terms of elementary symmetric polynomials.

Explanation
===========

If this :py:class:`~.PolyElement` belongs to a ring of $n$ variables,
we can try to write it as a function of the elementary symmetric
polynomials on $n$ variables. We compute a symmetric part, and a
remainder for any part we were not able to symmetrize.

Examples
========

>>> from sympy.polys.rings import ring
>>> from sympy.polys.domains import ZZ
>>> R, x, y = ring("x,y", ZZ)

>>> f = x**2 + y**2
>>> f.symmetrize()
(x**2 - 2*y, 0, [(x, x + y), (y, x*y)])

>>> f = x**2 - y**2
>>> f.symmetrize()
(x**2 - 2*y, -2*y**2, [(x, x + y), (y, x*y)])

Returns
=======

Triple ``(p, r, m)``
    ``p`` is a :py:class:`~.PolyElement` that represents our attempt
    to express *self* as a function of elementary symmetric
    polynomials. Each variable in ``p`` stands for one of the
    elementary symmetric polynomials. The correspondence is given
    by ``m``.

    ``r`` is the remainder.

    ``m`` is a list of pairs, giving the mapping from variables in
    ``p`` to elementary symmetric polynomials.

    The triple satisfies the equation ``p.compose(m) + r == self``.
    If the remainder ``r`` is zero, *self* is symmetric. If it is
    nonzero, we were not able to represent *self* as symmetric.

See Also
========

sympy.polys.polyfuncs.symmetrize

References
==========

.. [1] Lauer, E. Algorithms for symmetrical polynomials, Proc. 1976
    ACM Symp. on Symbolic and Algebraic Computing, NY 242-247.
    https://dl.acm.org/doi/pdf/10.1145/800205.806342

rÑ   c                ó6   >• X4T;  a  TU    U-  TX4'   TX4   $ r[   rY   )r­   rH  Úpoly_powersrU   s     €€r8   Úget_poly_powerÚ.PolyElement.symmetrize.<locals>.get_poly_powerñ	  s.   ø€ Øˆv˜[Ó(Ø&+¨A¡h°¡k�˜Q˜FÑ#Ø ˜vÑ&Ð&r:   r   r  )r  NNc              3  ó@   >#   • U  H  nTU   TUS -      :¬  v •  M     g7fr  rY   )r_   r­   ré   s     €r8   ra   Ú)PolyElement.symmetrize.<locals>.<genexpr>ÿ	  s"   øé € ÐAº°A�u˜Q‘x 5¨¨Q©¡<Ö/ºùrG  c              3  ó.   #   • U  H  u  pX-  v •  M     g 7fr[   rY   )r_   rH  rS   s      r8   ra   rˆ   
  s   é € Ð EÒ1D©¨ ¦Ò1Dùs   ‚Nrn   )r¸   r9   rl   rª   r¨   rI  rC   r  ro  rf   ry   rH   r«   rä   r{   r3   )r¬   rz   r9   rH  r­   r…  r  ÚweightsÚ	symmetricÚ_heightÚ_monomÚ_coeffrå   ÚheightÚ	exponentsr¢  Úm2Úproductr  ré   r„  rU   s                      @@@r8   Ú
symmetrizeÚPolyElement.symmetrize¬	  s¼  ú€ ðv �I‰I‹KˆØ�v‰vˆØ�J‰JˆæØ—i‘i Ð#Ð#ä38¸´8Ó<²8¨a×$Ñ$ Q q¡SÖ)±8Ñ<ˆàˆö	'ô
 ”u˜Q ™U“|Ó$ˆÜ”u˜Q  2“Ó'ˆà—I‘Iˆ	æØ&4Ñ#ˆG˜Vä%.¨q¯w©w«yÖ%9Ñ!�‘>�E˜5ÜÔA¹ÓA×AÓAÜ Ñ E´°W¸eÔ1DÓ EÓE�FàÕ'Ø28¸%À¨˜©ñ &:ð ˜"‹}Ø%��‘uààˆIÜ˜e U¨1¨2 Y°Ñ%5Ö6‘��BØ× Ñ   b¡Ö)ñ 7ð Ÿ™¤u¨YÓ'7¸Ó?Ñ?ˆIàˆGÜ! )Ö,‘�Ø™>¨!Ó/Ñ/’ñ -à�‰LˆA÷1 ˆaô4 ”s˜4Ÿ9™9 eÓ,Ó-ˆà˜WÐ$Ð$ùòS =s   ÁGc                ó®  ^• U R                   nUR                  n[        [        UR                  [        UR                  5      5      5      mUb  X4/nO^[        U[        5      (       a  [        U5      nO=[        U[        5      (       a  [        UR                  5       U4S jS9nO[        S5      e[        U5       H   u  nu  pTU   UR                  U5      4XV'   M"     U R                  5        H`  u  p‰[        U5      nUR                  n
U H  u  p·X‹   SsoÈU'   U(       d  M  X§U-  -  n
M      U
R!                  [#        U5      U	45      n
XJ-  nMb     U$ )Nc                ó   >• TU S      $ r¨  rY   )r€  Úgens_maps    €r8   rs   Ú%PolyElement.compose.<locals>.<lambda>$
  s   ø€ ¸xÈÈ!Éº~r:   rw   z9expected a generator, value pair a sequence of such pairsr   )r9   rª   rG   rH   r3   r¨   rl   r\   rC   ré  rI   rð   r  ró   rf  rŽ   r  r{   )rz   r»  rq   r9   r¯   Úreplacementsr€  rž  ré   rå   Úsubpolyr­   rH  r—  s                @r8   r?  ÚPolyElement.compose
  s+  ø€ Ø�v‰vˆØ�y‰yˆÜœ˜DŸI™I¤u¨T¯Z©ZÓ'8Ó9Ó:ˆà‰=Ø˜F˜8‰Lä˜!œT×"Ñ"Ü# A›w‘Ü˜Aœt×$Ñ$Ü% a§g¡g£iÔ5MÑN‘ä Ð!\Ó]Ð]ä" <Ö0‰IˆA‰v�Ø'¨™{¨D¯M©M¸!Ó,<Ð=ˆL‹Oñ 1ð ŸK™KžM‰LˆEÜ˜“KˆEØ—h‘hˆGã$‘�Ø#™h¨��˜‘8ß�1Ø !™t‘O’Gñ %ð
 ×&Ñ&¬¨e«°eÐ'<Ó=ˆGØ‰OŠDñ *ð ˆr:   c                ó–  • U nUR                   R                  U5      nUR                  5        VVs/ s H  u  pVXT   U:X  d  M  XV4PM     nnnU(       d  UR                   R                  $ [	        U6 u  p‰U Vs/ s H  oUSU S-   XTS-   S -   PM     nnUR                   R                  [        [	        X‰5      5      5      $ s  snnf s  snf )am  
Coefficient of ``self`` with respect to ``x**deg``.

Treating ``self`` as a univariate polynomial in ``x`` this finds the
coefficient of ``x**deg`` as a polynomial in the other generators.

Parameters
==========

x : generator or generator index
    The generator or generator index to compute the expression for.
deg : int
    The degree of the monomial to compute the expression for.

Returns
=======

:py:class:`~.PolyElement`
    The coefficient of ``x**deg`` as a polynomial in the same ring.

Examples
========

>>> from sympy.polys import ring, ZZ
>>> R, x, y, z = ring("x, y, z", ZZ)

>>> p = 2*x**4 + 3*y**4 + 10*z**2 + 10*x*z**2
>>> deg = 2
>>> p.coeff_wrt(2, deg) # Using the generator index
10*x + 10
>>> p.coeff_wrt(z, deg) # Using the generator
10*x + 10
>>> p.coeff(z**2) # shows the difference between coeff and coeff_wrt
10

See Also
========

coeff, coeffs

Nrn   rÑ   )r9   r  rf  rª   rH   rJ   rG   )
r¬   r»  Údegr3  r­   rS   rT   ro  rò  rP   s
             r8   Ú	coeff_wrtÚPolyElement.coeff_wrt9
  s²   € ðT ˆØ�F‰F�L‰L˜‹OˆØ$%§K¡K¤MÔA¢M™D˜A°Q±T¸S±[“�!“¡MˆÑAæØ—6‘6—;‘;Ðä˜e˜‰ˆÙ4:Ó;²F¨q�B�Q�%˜$‘,  q¡5 6 Ô*±FˆÐ;Ø�v‰v×Ñ¤¤S¨Ó%8Ó 9Ó:Ð:ùó Bùò <s   ±C ÁC Á8Cc                ó®  • U nUR                   R                  U5      nUR                  U5      nUR                  U5      nUS:  a  [        S5      eX4pvXE:  a  U$ XE-
  S-   nUR	                  X%5      n	UR                   R
                  U   n
 UR	                  X'5      nXu-
  US-
  pŒXi-  nX-  X¬-  -  nXÞ-
  nUR                  U5      nXu:  a  OMC  X˜-  nXo-  $ )ag  
Pseudo-remainder of the polynomial ``self`` with respect to ``g``.

The pseudo-quotient ``q`` and pseudo-remainder ``r`` with respect to
``z`` when dividing ``f`` by ``g`` satisfy ``m*f = g*q + r``,
where ``deg(r,z) < deg(g,z)`` and
``m = LC(g,z)**(deg(f,z) - deg(g,z)+1)``.

See :meth:`pdiv` for explanation of pseudo-division.


Parameters
==========

g : :py:class:`~.PolyElement`
    The polynomial to divide ``self`` by.
x : generator or generator index, optional
    The main variable of the polynomials and default is first generator.

Returns
=======

:py:class:`~.PolyElement`
    The pseudo-remainder polynomial.

Raises
======

ZeroDivisionError : If ``g`` is the zero polynomial.

Examples
========

>>> from sympy.polys import ring, ZZ
>>> R, x, y = ring("x, y", ZZ)

>>> f = x**2 + x*y
>>> g = 2*x + 2
>>> f.prem(g) # first generator is chosen by default if it is not given
-4*y + 4
>>> f.rem(g) # shows the difference between prem and rem
x**2 + x*y
>>> f.prem(g, y) # generator is given
0
>>> f.prem(g, 1) # generator index is given
0

See Also
========

pdiv, pquo, pexquo, sympy.polys.domains.ring.Ring.rem

r   r\  rÑ   ©r9   r  r¼  r]  rž  r3   )r¬   rž  r»  rz   ÚdfÚdgr“  ÚdrrC  Úlc_gÚxpÚlc_rrW  ÚRrœ  rT   s                   r8   ÚpremÚPolyElement.premn
  så   € ðl ˆØ�F‰F�L‰L˜‹OˆØ�X‰X�a‹[ˆØ�X‰X�a‹[ˆà�‹6Ü#Ð$9Ó:Ð:àˆ2à‹7ØˆHà‰G�a‰Kˆà�{‰{˜1Ó!ˆà�V‰V�[‰[˜‰^ˆàà—;‘;˜qÓ%ˆDØ‘7˜A ™Eˆqà‘ˆAØ‘˜2™5Ñ ˆAØ‘ˆAà—‘˜!“ˆBà‹wØñ ð ‰Iˆà‰uˆr:   c                óâ  • U nUR                   R                  U5      nUR                  U5      nUR                  U5      nUS:  a  [        S5      eX#Up‡nXE:  a  Xg4$ XE-
  S-   n	UR	                  X%5      n
UR                   R
                  U   n UR	                  X(5      nX…-
  U	S-
  p�Xj-  nXìX½-  -  -   nXz-  nX-  X½-  -  nUU-
  nUR                  U5      nX…:  a  OMQ  X©-  nUU-  nUU-  nXg4$ )aœ	  
Computes the pseudo-division of the polynomial ``self`` with respect to ``g``.

The pseudo-division algorithm is used to find the pseudo-quotient ``q``
and pseudo-remainder ``r`` such that ``m*f = g*q + r``, where ``m``
represents the multiplier and ``f`` is the dividend polynomial.

The pseudo-quotient ``q`` and pseudo-remainder ``r`` are polynomials in
the variable ``x``, with the degree of ``r`` with respect to ``x``
being strictly less than the degree of ``g`` with respect to ``x``.

The multiplier ``m`` is defined as
``LC(g, x) ^ (deg(f, x) - deg(g, x) + 1)``,
where ``LC(g, x)`` represents the leading coefficient of ``g``.

It is important to note that in the context of the ``prem`` method,
multivariate polynomials in a ring, such as ``R[x,y,z]``, are treated
as univariate polynomials with coefficients that are polynomials,
such as ``R[x,y][z]``. When dividing ``f`` by ``g`` with respect to the
variable ``z``, the pseudo-quotient ``q`` and pseudo-remainder ``r``
satisfy ``m*f = g*q + r``, where ``deg(r, z) < deg(g, z)``
and ``m = LC(g, z)^(deg(f, z) - deg(g, z) + 1)``.

In this function, the pseudo-remainder ``r`` can be obtained using the
``prem`` method, the pseudo-quotient ``q`` can
be obtained using the ``pquo`` method, and
the function ``pdiv`` itself returns a tuple ``(q, r)``.


Parameters
==========

g : :py:class:`~.PolyElement`
    The polynomial to divide ``self`` by.
x : generator or generator index, optional
    The main variable of the polynomials and default is first generator.

Returns
=======

:py:class:`~.PolyElement`
    The pseudo-division polynomial (tuple of ``q`` and ``r``).

Raises
======

ZeroDivisionError : If ``g`` is the zero polynomial.

Examples
========

>>> from sympy.polys import ring, ZZ
>>> R, x, y = ring("x, y", ZZ)

>>> f = x**2 + x*y
>>> g = 2*x + 2
>>> f.pdiv(g) # first generator is chosen by default if it is not given
(2*x + 2*y - 2, -4*y + 4)
>>> f.div(g) # shows the difference between pdiv and div
(0, x**2 + x*y)
>>> f.pdiv(g, y) # generator is given
(2*x**3 + 2*x**2*y + 6*x**2 + 2*x*y + 8*x + 4, 0)
>>> f.pdiv(g, 1) # generator index is given
(2*x**3 + 2*x**2*y + 6*x**2 + 2*x*y + 8*x + 4, 0)

See Also
========

prem
    Computes only the pseudo-remainder more efficiently than
    `f.pdiv(g)[1]`.
pquo
    Returns only the pseudo-quotient.
pexquo
    Returns only an exact pseudo-quotient having no remainder.
div
    Returns quotient and remainder of f and g polynomials.

r   r\  rÑ   r¡  )r¬   rž  r»  rz   r¢  r£  r«  r“  r¤  rC  r¥  r¦  r§  rW  ÚQr¨  rœ  rT   s                     r8   ÚpdivÚPolyElement.pdivÉ
  s  € ð` ˆØ�F‰F�L‰L˜‹Oˆà�X‰X�a‹[ˆØ�X‰X�a‹[ˆà�‹6Ü#Ð$9Ó:Ð:à˜ˆbˆà‹7Ø�4ˆKà‰G�a‰KˆØ�{‰{˜1Ó!ˆà�V‰V�[‰[˜‰^ˆàà—;‘;˜qÓ%ˆDØ‘7˜A ™Eˆqà‘ˆAà˜2™5‘LÑ ˆAà‘ˆAà‘˜2™5Ñ ˆAà�A‘ˆAà—‘˜!“ˆBà‹wØñ% ð( ‰Gˆà�‰EˆØ�‰Eˆàˆtˆr:   c                ó.   • U nUR                  X5      S   $ )a·  
Polynomial pseudo-quotient in multivariate polynomial ring.

Examples
========
>>> from sympy.polys import ring, ZZ
>>> R, x,y = ring("x,y", ZZ)

>>> f = x**2 + x*y
>>> g = 2*x + 2*y
>>> h = 2*x + 2
>>> f.pquo(g)
2*x
>>> f.quo(g) # shows the difference between pquo and quo
0
>>> f.pquo(h)
2*x + 2*y - 2
>>> f.quo(h) # shows the difference between pquo and quo
0

See Also
========

prem, pdiv, pexquo, sympy.polys.domains.ring.Ring.quo

r   )r­  )r¬   rž  r»  rz   s       r8   ÚpquoÚPolyElement.pquoG  s   € ð6 ˆØ�v‰v�a‹|˜A‰Ðr:   c                óh   • U nUR                  X5      u  pEUR                  (       a  U$ [        X15      e)a<  
Polynomial exact pseudo-quotient in multivariate polynomial ring.

Examples
========
>>> from sympy.polys import ring, ZZ
>>> R, x,y = ring("x,y", ZZ)

>>> f = x**2 + x*y
>>> g = 2*x + 2*y
>>> h = 2*x + 2
>>> f.pexquo(g)
2*x
>>> f.exquo(g) # shows the difference between pexquo and exquo
Traceback (most recent call last):
...
ExactQuotientFailed: 2*x + 2*y does not divide x**2 + x*y
>>> f.pexquo(h)
Traceback (most recent call last):
...
ExactQuotientFailed: 2*x + 2 does not divide x**2 + x*y

See Also
========

prem, pdiv, pquo, sympy.polys.domains.ring.Ring.exquo

)r­  r÷  r$   )r¬   rž  r»  rz   r«  r“  s         r8   ÚpexquoÚPolyElement.pexquoe  s/   € ð: ˆØ�v‰v�a‹|‰ˆà�9�9ØˆHä% aÓ+Ð+r:   c                ó   • U nUR                   R                  U5      nUR                  U5      nUR                  U5      nXE:  a  XpXTpTUS:X  a  SS/$ US:X  a  US/$ X1/nXE-
  nSUS-   -  nUR                  X5      n	X˜-  n	UR	                  X%5      n
X§-  nSU/nU* nU	(       aª  U	R                  U5      nUR                  U	5        XXÕU-
  4u  p1pWU
* X·-  -  nUR                  X5      n	U	R                  U5      n	UR	                  X-5      n
US:”  a  U
* U-  nX·S-
  -  nUR                  U5      nOU
* nUR                  U* 5        U	(       a  Mª  U$ )aø  
Computes the subresultant PRS of two polynomials ``self`` and ``g``.

Parameters
==========

g : :py:class:`~.PolyElement`
    The second polynomial.
x : generator or generator index
    The variable with respect to which the subresultant sequence is computed.

Returns
=======

R : list
    Returns a list polynomials representing the subresultant PRS.

Examples
========

>>> from sympy.polys import ring, ZZ
>>> R, x, y = ring("x, y", ZZ)

>>> f = x**2*y + x*y
>>> g = x + y
>>> f.subresultants(g) # first generator is chosen by default if not given
[x**2*y + x*y, x + y, y**3 - y**2]
>>> f.subresultants(g, 0) # generator index is given
[x**2*y + x*y, x + y, y**3 - y**2]
>>> f.subresultants(g, y) # generator is given
[x**2*y + x*y, x + y, x**3 + x**2]

r   rÑ   r  )r9   r  r¼  r©  rž  r«   ry  )r¬   rž  r»  rz   rH  rS   r¨  Údrr   rA  ÚlcrT   ÚSr€  r3  r«  s                   r8   ÚsubresultantsÚPolyElement.subresultantsŠ  si  € ðD ˆØ�F‰F�L‰L˜‹OˆØ�H‰H�Q‹KˆØ�H‰H�Q‹Kˆà‹5ØˆqØˆqà�‹6Ø�q�6ˆMà�‹6Ø�q�6ˆMàˆFˆà‰EˆØ�Q˜‘U‰Oˆð �F‰F�1‹LˆØ‰Eˆð �[‰[˜Óˆà‰Gˆà�ˆFˆàˆBˆæØ—‘˜“ˆAà�H‰H�QŒKØ˜q a¡%˜‰JˆA�!à��a‘f‘ˆAØ—‘�q“ˆAØ—‘˜“
ˆAà—‘˜QÓ"ˆBà�1‹uØ�S˜Q‘J�Ø˜a™%‘L�Ø—G‘G˜A“J‘à�C�à�H‰H�a�RŒL÷' ˆað* ˆr:   c                ó8   • U R                   R                  X5      $ r[   )r9   Údmp_half_gcdexrM  s     r8   Ú
half_gcdexÚPolyElement.half_gcdexç  s   € Ø�v‰v×$Ñ$ QÓ*Ð*r:   c                ó8   • U R                   R                  X5      $ r[   )r9   Ú	dmp_gcdexrM  s     r8   ÚgcdexÚPolyElement.gcdexê  ó   € Ø�v‰v×Ñ Ó%Ð%r:   c                ó8   • U R                   R                  X5      $ r[   )r9   Údmp_resultantrM  s     r8   Ú	resultantÚPolyElement.resultantí  s   € Ø�v‰v×#Ñ# AÓ)Ð)r:   c                ó8   • U R                   R                  U 5      $ r[   )r9   Údmp_discriminantrö  s    r8   ÚdiscriminantÚPolyElement.discriminantð  s   € Ø�v‰v×&Ñ& qÓ)Ð)r:   c                ó„   • U R                   R                  (       a  U R                   R                  U 5      $ [        S5      e)Nzpolynomial decomposition)r9   r)  Údup_decomposer%   rö  s    r8   Ú	decomposeÚPolyElement.decomposeó  s0   € Ø�6‰6××Ø—6‘6×'Ñ'¨Ó*Ð*ä-Ð.HÓIÐIr:   c                ó„   • U R                   R                  (       a  U R                   R                  X5      $ [        S5      e)Nzshift: use shift_list instead)r9   r)  Ú	dup_shiftr%   ©rz   rq   s     r8   ÚshiftÚPolyElement.shiftù  s0   € Ø�6‰6××Ø—6‘6×#Ñ# AÓ)Ð)ä-Ð.MÓNÐNr:   c                ó8   • U R                   R                  X5      $ r[   )r9   Ú	dmp_shiftrÒ  s     r8   Ú
shift_listÚPolyElement.shift_listÿ  rÃ  r:   c                ó„   • U R                   R                  (       a  U R                   R                  U 5      $ [        S5      e)Nzsturm sequence)r9   r)  Ú	dup_sturmr%   rö  s    r8   ÚsturmÚPolyElement.sturm  s0   € Ø�6‰6××Ø—6‘6×#Ñ# AÓ&Ð&ä-Ð.>Ó?Ð?r:   c                ó8   • U R                   R                  U 5      $ r[   )r9   Údmp_gff_liströ  s    r8   Úgff_listÚPolyElement.gff_list  ó   € Ø�v‰v×"Ñ" 1Ó%Ð%r:   c                ó8   • U R                   R                  U 5      $ r[   )r9   Údmp_normrö  s    r8   ÚnormÚPolyElement.norm  s   € Ø�v‰v�‰˜qÓ!Ð!r:   c                ó8   • U R                   R                  U 5      $ r[   )r9   Údmp_sqf_normrö  s    r8   Úsqf_normÚPolyElement.sqf_norm  rá  r:   c                ó8   • U R                   R                  U 5      $ r[   )r9   Údmp_sqf_partrö  s    r8   Úsqf_partÚPolyElement.sqf_part  rá  r:   c                ó4   • U R                   R                  XS9$ )N)rf   )r9   Údmp_sqf_list)rz   rf   s     r8   Úsqf_listÚPolyElement.sqf_list  s   € Ø�v‰v×"Ñ" 1Ð"Ð.Ð.r:   c                ó8   • U R                   R                  U 5      $ r[   )r9   Údmp_factor_liströ  s    r8   Úfactor_listÚPolyElement.factor_list  s   € Ø�v‰v×%Ñ% aÓ(Ð(r:   )r‡   r9   r[   )F)�r€   rK  rL  rM  rN  rV  r^  r‰   rc  r³   r‡   r¾   r¸   rp  rt  rs  r‚  r†  rÃ   rÆ   r‘  r–  r›  rž  r¢  r¥  r¨  r¬  r  r³  r9  rº  r½  r]   rP  rÝ  r¯  rã  ræ  rÈ  rì  rï  ró  r÷  rú  rý  r  r  r  r  r  r!  r$  r'  r,  r*  r2  r1  r=  r7  rH  rG  rF  rE  rb  r^  rk  rj  rs  rv  rz  rr  r‹  r—   ri  rq  ry  rŽ  r�  r¼  rÀ  rÇ  rÊ  r�   rÐ  rå   r’  râ  rÙ  rÝ  r›  râ  rê  rP   rò  ro  rø  r  rf  r  r  r  rT  r   r  r  r¶  r  r  r_  r$  r(  r`  r-  r3  r6  r:  rD  rG  r™   r›   rL  rP  rQ  rR  rc  rb  ro  rk  ru  rQ  rx  r€  r“  r?  rž  r©  r­  r°  r³  r¹  r½  rÁ  rÆ  rÊ  rÎ  rÓ  r×  rÛ  rß  rä  rè  rì  rð  rô  rR  Ú__classcell__)rÎ   s   @r8   rˆ   rˆ   J  sU  ø† Ù?õòKò/ò%ò3ð €Eò	òò8>ò	=òMòò"ò4ò4ôGò0)ò"òòòòò	2òò*>òò"Hòò.ð` ñ+ó ð+ð ñMó ðMð ñ=ó ð=ð ñó ðð ñ5ó ð5ð ñ5ó ð5ð ñ8ó ð8ð ñ8ó ð8ð ñó ðð ñó ðð ñ*ó ð*ð ñ1ó ð1ð ñ@ó ð@ð ñ@ó ð@ð ñ#ó ð#ð
 ñ+ó ð+ð
 ñGó ðGòRòò4òlò(4òlò82òhò:4(òlò ò:#òJ:ò,ò%ò,ò%ò,ò%ò, òòBJòX+òZò,ò*òX#ôJ=ò 
?ô=ò 
?òò(5ò#BòJ5ð ñ4ó ð4ð ñó ðòð* ñ1ó ð1òò(	Pô;ô4;ô47ò4#ò!ò"ò#ò!ò"ò!òF	ò(ò&òòò

òò <òð$ €Jò
òPòòòòBòò !ò>ò,"òò ,òòò*6òp+òò2pô*ôX%òNk%ôZò@3;ôjYôv|ô|ô<#,ôJXòz+ò&ò*ò*òJòOò&ò@ò&ò"ò&ò&ô/÷)ð )r:   rˆ   N)r6   zMonomialOrder | str)QrN  Ú
__future__r   Úoperatorr   r   r   r   r   r	   Ú	functoolsr
   Útypesr   Úsympy.core.cacher   Úsympy.core.exprr   Úsympy.core.intfuncr   Úsympy.core.symbolr   r   re   Úsympy.core.sympifyr   r   Úsympy.ntheory.multinomialr   Úsympy.polys.compatibilityr   Úsympy.polys.constructorr   Úsympy.polys.densebasicr   r   r   Úsympy.polys.domains.domainr   Ú!sympy.polys.domains.domainelementr   Ú"sympy.polys.domains.polynomialringr   Úsympy.polys.heuristicgcdr   Úsympy.polys.monomialsr   Úsympy.polys.orderingsr    r!   Úsympy.polys.polyerrorsr"   r#   r$   r%   Úsympy.polys.polyoptionsr}   r&   r   r'   Úsympy.polys.polyutilsr(   r)   r*   Úsympy.printing.defaultsr+   Úsympy.utilitiesr,   r-   Úsympy.utilities.iterablesr.   Úsympy.utilities.magicr/   r9   r<   r@   rV   rh   r2   rG   rˆ   rY   r:   r8   Ú<module>r     sö   ðÙ å "ç -× -Ý Ý å $Ý  Ý #ß 9ß 3Ý >Ý ,Ý 4ß CÑ CÝ -Ý ;Ý =Ý +Ý -ß 4÷6ó 6÷Gñ G÷=ñ =å 3ß +Ý 1Ý )àØ58õ !ó ð!ð< Ø!$ó ó ðð< Ø!$ó ó ðð< ñ2ó ð2òh@ôCˆ ô CôLN')�- °+¸tõ N')r:   