Ë
    7^(h@P ã                  ó  — d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 ddl7m&Z8m9Z:m;Z; ddl<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZD ddlEmFZF ddlGmHZH eCe0fd&d„«       ZIeCe0fd„«       ZJeCe0fd„«       ZKeCd„ «       ZLd „ ZM G d!„ d"eAe«      ZN G d#„ d$e(eAeeO«      ZPy%)'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                ó<   — t        | ||«      }|f|j                  z   S )až  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       úO/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/polys/rings.pyÚringr9   $   s#   € ô8 �W˜f eÓ,€EØˆ8�e—j‘jÑ Ð ó    c                ó8   — t        | ||«      }||j                  fS )a¤  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˜f eÓ,€EØ�5—:‘:ÐÐr:   c                óš   — t        | ||«      }t        |j                  D �cg c]  }|j                  ‘Œ c}|j                  «       |S c c}w )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˜f eÓ,€EÜ %§-¡-Ö1˜3ˆc�h‹hÒ1°5·:±:Ô>Ø€Lùò 2s   ¡Ac                óž  — d}t        | «      s| gd}} t        t        t        | «      «      } t	        ||«      }t        | |«      \  }}|j                  €“t        |D �cg c]  }t        |j                  «       «      ‘Œ c}g «      }t        ||¬«      \  |_        }t        t        ||«      «      }	|D ��
�cg c])  }|j                  «       D �
�ci c]  \  }
}|
|	|   “Œ c}}
‘Œ+ }}
}}t        |j                  |j                  |j                  «      }t        t        |j                   |«      «      }|r||d   fS ||fS c c}w c c}}
w c c}}
}w )ad  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Ö;¨c”t˜CŸJ™J›LÕ)Ò;¸RÓ@ˆä!1°&¸cÔ!BÑˆŒ
�Jäœ˜V ZÓ0Ó1ˆ	ØEI×JÐJ¸c¨S¯Y©Y«[×9¡T Q¨��I˜a‘L‘Õ9ÐJˆÒJä�S—X‘X˜sŸz™z¨3¯9©9Ó5€EÜ”�U—_‘_ dÓ+Ó,€EáØ�u˜Q‘xÐ Ð à�uˆ~Ðùò <ùó
 :ùÔJs   Á D=Â4EÃEÃEÅEc                óø   — t        | t        «      r| rt        | d¬«      S dS t        | t        «      r| fS t	        | «      r1t        d„ | D «       «      rt        | «      S t        d„ | D «       «      r| S t        d«      ‚)NT)Úseq© c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)Ú
isinstanceÚstr©Ú.0Úss     r8   ú	<genexpr>z!_parse_symbols.<locals>.<genexpr>¼   s   è ø€ Ò3 aŒz˜!œS×!Ñ3ùó   ‚c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr[   )r\   r   r^   s     r8   ra   z!_parse_symbols.<locals>.<genexpr>¾   s   è ø€ Ò6¨”˜Aœt×$Ñ6ùrb   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_symbolsrg   ¶   sr   € Ü�'œ3ÔÙ.5Œx˜ TÔ*Ð=¸2Ð=Ü	�GœTÔ	"ØˆzÐÜ	�WÔ	ÜÑ3¨7Ô3Ô3Ü˜GÓ$Ð$ÜÑ6¨gÔ6Ô6ØˆNä
Ð~Ó
Ðr:   c                  ó^  — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   efd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd1d„Zed„ «       Zd„ Zed„ «       Zed„ «       Zd„ Zd2d„Zd„ Zd„ Zd„ ZeZd2d„Zd2d„Zd „ Zd!„ Zd"„ Zd#„ Zd$„ Z d%„ Z!d&„ Z"d'„ Z#d(„ Z$ed)„ «       Z%ed*„ «       Z&d+„ Z'd,„ Z(d-„ Z)d.„ Z*d/„ Z+d0„ Z,y)3r2   z*Multivariate distributed polynomial ring. ztuple[PolyElement, ...]r3   ztuple[Expr, ...]r   ÚintÚngensr   r5   r!   r6   c                óF  ‡— t        t        |«      «      }t        |«      }t        j                  |«      }t        j                  ‰«      Š| j                  |||‰f}|j                  r,t        |«      t        |j                  «      z  rt        d«      ‚t        j                  | «      }||_        t        |«      |_        ||_	        ||_        ||_        ‰|_        t'        |d«      j(                  |_        d|z  |_        |j/                  «       |_        t        |j0                  «      |_        |j,                  |j4                  fg|_        |rŸt9        |«      }|j;                  «       |_        |j?                  «       |_         |jC                  «       |_"        |jG                  «       |_$        |jK                  «       |_&        |jO                  «       |_(        |jS                  «       |_*        n5d„ }||_        ||_         d„ |_"        ||_$        ||_&        ||_(        ||_*        ‰tV        u rtX        |_-        n
ˆfd„|_-        t]        |j                  |j0                  «      D ]<  \  }	}
t_        |	t`        «      sŒ|	jb                  }te        ||«      rŒ0tg        |||
«       Œ> |S )Nz7polynomial ring and it's ground domain share generatorsrY   ©r   c                 ó   — y©NrY   rY   )ÚaÚbs     r8   ú<lambda>z"PolyRing.__new__.<locals>.<lambda>ó   ó   � r:   c                 ó   — yrn   rY   )ro   rp   rT   s      r8   rq   z"PolyRing.__new__.<locals>.<lambda>ö   rr   r:   c                ó   •— t        | ‰¬«      S )N©Úkey)Úmax)Úfr6   s    €r8   rq   z"PolyRing.__new__.<locals>.<lambda>   s   ø€ ¬¨Q°EÔ):€ r:   )4Útuplerg   ÚlenÚ	DomainOptÚ
preprocessÚOrderOptÚ__name__Úis_CompositeÚsetr   r#   ÚobjectÚ__new__Ú_hash_tupleÚhashÚ_hashrj   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    rw   Úleading_expvrH   r\   r   r>   ÚhasattrÚsetattr)Úclsr   r5   r6   rj   rƒ   ÚobjÚcodegenÚmonunitÚsymbolÚ	generatorr>   s      `        r8   r‚   zPolyRing.__new__Í   s   ø€ Üœ wÓ/Ó0ˆÜ�G“ˆÜ×%Ñ% fÓ-ˆÜ×#Ñ# EÓ*ˆà—|‘| W¨e°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Ø&ˆCÔØ&ˆCÔÙ"4ˆCÔØ 'ˆCÔØ&ˆCÔØ&ˆCÔØ&ˆCÔð ”C‰<Ü"ˆCÕã:ˆCÔä!$ S§[¡[°#·(±(Ó!;ò 	2ÑˆF�IÜ˜&¤&Õ)Ø—{‘{�ä˜s DÕ)Ü˜C  yÕ1ð	2ð ˆ
r:   c                óâ   — | j                   j                  }g }t        | j                  «      D ]5  }| j	                  |«      }| j
                  }|||<   |j                  |«       Œ7 t        |«      S )z(Return a list of polynomial generators. )r5   rŒ   Úrangerj   Úmonomial_basisÚzeroÚappendry   )ÚselfrŒ   rŠ   ÚiÚexpvÚpolys         r8   rŠ   zPolyRing._gens  sf   € à�k‰k�o‰oˆØˆÜ�t—z‘zÓ"ò 	ˆAØ×&Ñ& qÓ)ˆDØ—9‘9ˆDØˆD�‰JØ�L‰L˜Õð		ô
 �U‹|Ðr:   c                óH   — | j                   | j                  | j                  fS r[   )r   r5   r6   ©r©   s    r8   Ú__getnewargs__zPolyRing.__getnewargs__  s   € Ø—‘˜dŸk™k¨4¯:©:Ð6Ð6r:   c                óx   — | j                   j                  «       }|d= |D ]  }|j                  d«      sŒ||= Œ |S )Nr›   Ú	monomial_)Ú__dict__ÚcopyÚ
startswith)r©   Ústaterv   s      r8   Ú__getstate__zPolyRing.__getstate__  sE   € Ø—‘×"Ñ"Ó$ˆØ�.Ð!àò 	ˆCØ�~‰~˜kÕ*Ø˜#‘Jð	ð ˆr:   c                ó   — | j                   S r[   )r…   r®   s    r8   Ú__hash__zPolyRing.__hash__#  s   € Ø�z‰zÐr:   c                óà   — t        |t        «      xr] | j                  | j                  | j                  | j
                  f|j                  |j                  |j                  |j
                  fk(  S r[   )r\   r2   r   r5   rj   r6   ©r©   Úothers     r8   Ú__eq__zPolyRing.__eq__&  sV   € Ü˜%¤Ó*ò DØ�\‰\˜4Ÿ;™;¨¯
©
°D·J±JÐ?Ø�]‰]˜EŸL™L¨%¯+©+°u·{±{ÐCñDð	Dr:   c                ó   — | |k(   S r[   rY   rº   s     r8   Ú__ne__zPolyRing.__ne__+  s   € Ø˜5‘=Ð Ð r:   Nc                ób   — |�t        |t        «      rt        |«      }| j                  |||«      S r[   )r\   rC   ry   Ú_clone©r©   r   r5   r6   s       r8   ÚclonezPolyRing.clone.  s-   € àÐ¤:¨g´tÔ#<Ü˜G“nˆGØ�{‰{˜7 F¨EÓ2Ð2r:   c                ó|   — | j                  |xs | j                  |xs | j                  |xs | j                  «      S r[   )Ú	__class__r   r5   r6   rÁ   s       r8   rÀ   zPolyRing._clone4  s3   € à�~‰~˜gÒ5¨¯©°vÒ7LÀÇÁÈeÒNaÐW[×WaÑWaÓbÐbr:   c                óB   — dg| j                   z  }d||<   t        |«      S )zReturn the ith-basis element. r   é   )rj   ry   )r©   rª   Úbasiss      r8   r¦   zPolyRing.monomial_basis8  s$   € à��D—J‘J‘ˆØˆˆa‰Ü�U‹|Ðr:   c                ó$   — | j                  g «      S r[   )rˆ   r®   s    r8   r§   zPolyRing.zero>  s   € à�z‰z˜"‹~Ðr:   c                ó8   — | j                  | j                  «      S r[   )rˆ   r�   r®   s    r8   rŒ   zPolyRing.oneB  s   € à�z‰z˜$Ÿ)™)Ó$Ð$r:   c                óD   — t        |t        «      xr |j                  | k(  S )zATrue if ``element`` is an element of this ring. False otherwise. )r\   r†   r9   ©r©   Úelements     r8   Ú
is_elementzPolyRing.is_elementF  s   € ä˜'¤;Ó/ÒH°G·L±LÀDÑ4HÐHr:   c                ó:   — | j                   j                  ||«      S r[   )r5   Úconvert©r©   rÌ   Úorig_domains      r8   Ú
domain_newzPolyRing.domain_newJ  s   € Ø�{‰{×"Ñ" 7¨KÓ8Ð8r:   c                ó:   — | j                  | j                  |«      S r[   )Úterm_newr‰   )r©   Úcoeffs     r8   Ú
ground_newzPolyRing.ground_newM  s   € Ø�}‰}˜TŸ_™_¨eÓ4Ð4r:   c                óN   — | j                  |«      }| j                  }|r|||<   |S r[   )rÒ   r§   )r©   ÚmonomrÕ   r¬   s       r8   rÔ   zPolyRing.term_newP  s*   € Ø—‘ Ó&ˆØ�y‰yˆÙØˆD�‰KØˆr:   c                óV  — t        |t        «      rj| |j                  k(  r|S t        | j                  t        «      r4| j                  j                  |j                  k(  r| j                  |«      S t        d«      ‚t        |t        «      rt        d«      ‚t        |t        «      r| j                  |«      S t        |t        «      r	 | j                  |«      S t        |t        «      r| j                  |«      S | j                  |«      S # t        $ r | j                  |«      cY S w xY w)NÚ
conversionÚparsing)r\   r†   r9   r5   r   rÖ   ÚNotImplementedErrorr]   rG   rJ   rC   Ú
from_termsÚ
ValueErrorÚ	from_listr   Ú	from_exprrË   s     r8   Úring_newzPolyRing.ring_newW  só   € Ü�gœ{Ô+Ø�w—|‘|Ò#Ø�Ü˜DŸK™K¬Ô8¸T¿[¹[×=MÑ=MÐQX×Q]ÑQ]Ò=]Ø—‘ wÓ/Ð/ä)¨,Ó7Ð7Ü˜¤Ô%Ü% iÓ0Ð0Ü˜¤Ô&Ø—>‘> 'Ó*Ð*Ü˜¤Ô&ð/Ø—‘ wÓ/Ð/ô ˜¤Ô&Ø—>‘> 'Ó*Ð*à—?‘? 7Ó+Ð+øô ò /Ø—~‘~ gÓ.Ò.ð/ús   ÃD ÄD(Ä'D(c                óˆ   — | j                   }| j                  }|j                  «       D ]  \  }} |||«      }|sŒ|||<   Œ |S r[   )rÒ   r§   rI   )r©   rÌ   rÑ   rÒ   r¬   rØ   rÕ   s          r8   rJ   zPolyRing.from_dicto  sL   € Ø—_‘_ˆ
Ø�y‰yˆà#ŸM™M›Oò 	$‰LˆE�5Ù˜u kÓ2ˆEÚØ#��U’ð	$ð
 ˆr:   c                ó8   — | j                  t        |«      |«      S r[   )rJ   rG   rÐ   s      r8   rÝ   zPolyRing.from_termsz  s   € Ø�~‰~œd 7›m¨[Ó9Ð9r:   c                óh   — | j                  t        || j                  dz
  | j                  «      «      S ©NrÆ   )rJ   r   rj   r5   rË   s     r8   rß   zPolyRing.from_list}  s&   € Ø�~‰~œk¨'°4·:±:¸a±<ÀÇÁÓMÓNÐNr:   c                óT   ‡ ‡‡‡— ‰ j                   Šˆˆˆˆ fd„Š ‰t        |«      «      S )Nc           	     óÂ  •— ‰j                  | «      }|�|S | j                  r-t        t        t	        t        ‰| j                  «      «      «      S | j                  r-t        t        t	        t        ‰| j                  «      «      «      S | j                  «       \  }}|j                  r|dkD  r ‰|«      t        |«      z  S ‰j                  ‰j                  | «      «      S rå   )ÚgetÚis_Addr
   r   rC   rD   ÚargsÚis_Mulr   Úas_base_expÚ
is_Integerri   rÖ   rÏ   )Úexprr£   ÚbaseÚexpÚ_rebuildr5   Úmappingr©   s       €€€€r8   rñ   z(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Ø—>’> c¨A¢gÙ# D›>¬3¨s«8Ñ3Ð3àŸ?™?¨6¯>©>¸$Ó+?Ó@Ð@r:   )r5   r   )r©   rî   rò   rñ   r5   s   ` `@@r8   Ú_rebuild_exprzPolyRing._rebuild_expr€  s#   û€ Ø—‘ˆ÷	Añ$ œ ›Ó&Ð&r:   c                óê   — t        t        t        | j                  | j                  «      «      «      }	 | j                  ||«      }| j                  |«      S # t        $ r t        d| ›d|›�«      ‚w xY w)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à   zPolyRing.from_expr—  sm   € Ü”tœC §¡¨d¯i©iÓ8Ó9Ó:ˆð	'Ø×%Ñ% d¨GÓ4ˆDð —=‘= Ó&Ð&øô ò 	pÝÒcgÑimÐnÓoÐoð	pús   ´A ÁA2c                ó  — |€| j                   rd}|S d}|S t        |t        «      rD|}d|k  r|| j                   k  r	 |S | j                    |k  r|dk  r| dz
  }|S t        d|z  «      ‚| j	                  |«      r	 | j
                  j                  |«      }|S t        |t        «      r	 | j                  j                  |«      }|S t        d|z  «      ‚# t        $ r t        d|z  «      ‚w xY w# t        $ r t        d|z  «      ‚w xY w)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)	rj   r\   ri   rÞ   rÍ   r3   Úindexr]   r   )r©   Úgenrª   s      r8   r÷   zPolyRing.index¡  sB  € àˆ;Ø�zŠzØ�ð2 ˆð/ �ð. ˆô- ˜œSÔ!ØˆAà�AŠv˜!˜dŸ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 Â+C1 ÃC.Ã1D	c                óä   — t        t        | j                  |«      «      }t        | j                  «      D ��cg c]  \  }}||vsŒ|‘Œ }}}|s| j
                  S | j                  |¬«      S c c}}w )z,Remove specified generators from this ring. rf   )r€   rD   r÷   Ú	enumerater   r5   rÂ   )r©   r3   Úindicesrª   r`   r   s         r8   ÚdropzPolyRing.dropÀ  sb   € ä”c˜$Ÿ*™* dÓ+Ó,ˆÜ"+¨D¯L©LÓ"9×O™$˜!˜Q¸QÀgÒ=M’AÐOˆÑOáØ—;‘;Ðà—:‘: g�:Ó.Ð.ùó Ps   ¸A,ÁA,c                ó`   — | j                   |   }|s| j                  S | j                  |¬«      S )Nrf   )r   r5   rÂ   )r©   rv   r   s      r8   Ú__getitem__zPolyRing.__getitem__Ê  s.   € Ø—,‘,˜sÑ#ˆáØ—;‘;Ðà—:‘: g�:Ó.Ð.r:   c                óÖ   — | j                   j                  st        | j                   d«      r&| j                  | j                   j                   ¬«      S t	        d| j                   z  «      ‚)Nr5   ©r5   z%s is not a composite domain)r5   r   rœ   rÂ   rÞ   r®   s    r8   Ú	to_groundzPolyRing.to_groundÒ  sL   € à�;‰;×#Ò#¤w¨t¯{©{¸HÔ'EØ—:‘: T§[¡[×%7Ñ%7�:Ó8Ð8äÐ;¸d¿k¹kÑIÓJÐJr:   c                ó   — t        | «      S r[   r   r®   s    r8   Ú	to_domainzPolyRing.to_domainÙ  s   € Ü˜dÓ#Ð#r:   c                ó^   — ddl m}  || j                  | j                  | j                  «      S )Nr   )Ú	FracField)Úsympy.polys.fieldsr  r   r5   r6   )r©   r  s     r8   Úto_fieldzPolyRing.to_fieldÜ  s    € Ý0Ù˜Ÿ™ t§{¡{°D·J±JÓ?Ð?r:   c                ó2   — t        | j                  «      dk(  S rå   ©rz   r3   r®   s    r8   Úis_univariatezPolyRing.is_univariateà  s   € ä�4—9‘9‹~ Ñ"Ð"r:   c                ó2   — t        | j                  «      dkD  S rå   r	  r®   s    r8   Úis_multivariatezPolyRing.is_multivariateä  s   € ä�4—9‘9‹~ Ñ!Ð!r:   c                ó~   — | j                   }|D ]+  }t        |t        ¬«      r| | j                  |Ž z  }Œ'||z  }Œ- |S )aw  
        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   zPolyRing.addè  sJ   € ð" �I‰Iˆàò 	ˆCÜ˜3¬Õ6Ø�X�T—X‘X˜s�^Ñ#‘à�S‘‘ð		ð ˆr:   c                ó~   — | j                   }|D ]+  }t        |t        ¬«      r| | j                  |Ž z  }Œ'||z  }Œ- |S )aÈ  
        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   r  s       r8   r   zPolyRing.mul  sJ   € ð" �H‰Hˆàò 	ˆCÜ˜3¬Õ6Ø�X�T—X‘X˜s�^Ñ#‘à�S‘‘ð		ð ˆr:   c                óP  — t        t        | j                  |«      «      }t        | j                  «      D ��cg c]  \  }}||vsŒ|‘Œ }}}t        | j
                  «      D ��cg c]  \  }}||vsŒ|‘Œ }}}|s| S | j                  | | j                  |Ž ¬«      S c c}}w c c}}w )zd
        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_groundzPolyRing.drop_to_ground  s–   € ô
 ”c˜$Ÿ*™* dÓ+Ó,ˆÜ!*¨4¯<©<Ó!8×M™˜˜A¸AÀWÒ<L’1ÐMˆÑMÜ"+¨D¯I©IÓ"6×K™˜˜3¸!À7Ò:J’ÐKˆÑKáØˆKà—:‘: g°i°d·i±iÀÐ6F�:ÓGÐGùó NùÛKs   ¸BÁBÁ$B"Á1B"c                ó´   — | |k7  rRt        | j                  «      j                  t        |j                  «      «      }| j                  t	        |«      ¬«      S | S )z+Add the generators of ``other`` to ``self``rf   ©r€   r   ÚunionrÂ   rC   )r©   r»   Úsymss      r8   ÚcomposezPolyRing.compose,  sE   € à�5Š=Ü�t—|‘|Ó$×*Ñ*¬3¨u¯}©}Ó+=Ó>ˆDØ—:‘:¤d¨4£j�:Ó1Ð1àˆKr:   c                ó’   — t        | j                  «      j                  t        |«      «      }| j                  t	        |«      ¬«      S )z9Add the elements of ``symbols`` as generators to ``self``rf   r  )r©   r   r  s      r8   Úadd_genszPolyRing.add_gens4  s4   € ä�4—<‘<Ó ×&Ñ&¤s¨7£|Ó4ˆØ�z‰z¤$ t£*ˆzÓ-Ð-r:   c                ó”  ‡— |dk  s|| j                   kD  rt        d|›d| j                  ›�«      ‚|s| j                  S | j                  }t        t        | j                   «      t        |«      «      D ]R  Št        ˆfd„t        | j                   «      D «       «      }|| j                  || j                  j                  «      z  }ŒT |S )zo
        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  ó8   •K  — | ]  }t        |‰v «      –— Œ y ­wr[   )ri   )r_   rª   r`   s     €r8   ra   z*PolyRing.symmetric_poly.<locals>.<genexpr>E  s   øè ø€ ÒE¨aœc ! q &ŸkÑEùs   ƒ)rj   rÞ   r3   rŒ   r§   r-   r¥   ri   ry   rÔ   r5   )r©   Únr¬   rØ   r`   s       @r8   Úsymmetric_polyz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¨T¯[©[¯_©_Ó=Ñ=‘ð>ð ˆKr:   )NNNr[   )-r~   Ú
__module__Ú__qualname__Ú__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   r  r  r  r!  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                  ó|  ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ ZdZ	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd–d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z e!d„ «       Z"e!d „ «       Z#e!d!„ «       Z$e!d"„ «       Z%e!d#„ «       Z&e!d$„ «       Z'e!d%„ «       Z(e!d&„ «       Z)e!d'„ «       Z*e!d(„ «       Z+e!d)„ «       Z,e!d*„ «       Z-e!d+„ «       Z.e!d,„ «       Z/e!d-„ «       Z0e!d.„ «       Z1e!d/„ «       Z2d0„ Z3d1„ Z4d2„ Z5d3„ Z6d4„ Z7d5„ Z8d6„ Z9d7„ Z:d8„ Z;d9„ Z<d:„ Z=d;„ Z>d<„ Z?d=„ Z@d>„ ZAd?„ ZBd@„ ZCdA„ ZDdB„ ZEdC„ ZFdD„ ZGdE„ ZHdF„ ZIdG„ ZJdH„ ZKdI„ ZLdJ„ ZMd–dK„ZNdL„ ZOd–dM„ZPdN„ ZQdO„ ZRdP„ ZSdQ„ ZTdR„ ZUe!dS„ «       ZVe!dT„ «       ZWdU„ ZXe!dV„ «       ZYdW„ ZZdX„ Z[d–dY„Z\d–dZ„Z]d–d[„Z^d\„ Z_d]„ Z`d^„ Zad_„ Zbd`„ Zcda„ Zddb„ Zedc„ Zfdd„ Zgde„ Zhdf„ Zidg„ Zjdh„ Zkdi„ Zldj„ Zmdk„ ZnenZodl„ Zpdm„ Zqdn„ Zrdo„ Zsdp„ Ztdq„ Zudr„ Zvds„ Zwdt„ Zxdu„ Zydv„ Zzdw„ Z{dx„ Z|dy„ Z}dz„ Z~d{„ Zd|„ Z€d}„ Z�d–d~„Z‚d–d„Zƒd€„ Z„d–d�„Z…d‚„ Z†d–dƒ„Z‡d–d„„Zˆd–d…„Z‰d–d†„ZŠd–d‡„Z‹dˆ„ ZŒd‰„ Z�dŠ„ ZŽd‹„ Z�dŒ„ Z�d�„ Z‘dŽ„ Z’d�„ Z“d�„ Z”d‘„ Z•d’„ Z–d“„ Z—d—d”„Z˜d•„ Z™ˆ xZšS )˜r†   z5Element of multivariate distributed polynomial ring. c                ó2   •— t         ‰| �  |«       || _        y r[   )ÚsuperÚ__init__r9   )r©   r9   ÚinitrÄ   s      €r8   r+  zPolyElement.__init__M  s   ø€ Ü‰Ñ˜ÔØˆ�	r:   c                óv  — t        | t        «      sJ ‚t        | j                  t        «      sJ ‚| j                  j                  }t        |t
        «      sJ ‚| j                  «       D ]P  \  }}|j                  |«      sJ ‚t        |«      | j                  j                  k(  sJ ‚t        d„ |D «       «      rŒPJ ‚ y )Nc              3  óJ   K  — | ]  }t        |t        «      xr |d k\  –— Œ y­w)r   N)r\   ri   )r_   rð   s     r8   ra   z%PolyElement._check.<locals>.<genexpr>[  s#   è ø€ ÒJ¸S”z #¤sÓ+Ò8°°q±Ó8ÑJùs   ‚!#)r\   r†   r9   r2   r5   r   rI   Úof_typerz   rj   re   )r©   ÚdomrØ   rÕ   s       r8   Ú_checkzPolyElement._checkS  s    € Ü˜$¤Ô,Ð,Ð,Ü˜$Ÿ)™)¤XÔ.Ð.Ð.Ø�i‰i×ÑˆÜ˜#œvÔ&Ð&Ð&Ø ŸJ™J›Lò 	K‰LˆE�5Ø—;‘;˜uÔ%Ð%Ð%Ü�u“: §¡§¡Ò0Ð0Ð0ÜÑJÀEÔJÕJÐJÐJñ	Kr:   c                ó:   — | j                  | j                  |«      S r[   )rÄ   r9   )r©   r,  s     r8   r‡   zPolyElement.new]  s   € Ø�~‰~˜dŸi™i¨Ó.Ð.r:   c                ó6   — | j                   j                  «       S r[   )r9   r  r®   s    r8   ÚparentzPolyElement.parent`  s   € Ø�y‰y×"Ñ"Ó$Ð$r:   c                óL   — | j                   t        | j                  «       «      fS r[   )r9   rC   Ú	itertermsr®   s    r8   r¯   zPolyElement.__getnewargs__c  s   € Ø—	‘	œ4 §¡Ó 0Ó1Ð2Ð2r:   Nc                óŒ   — | j                   }|€5t        | j                  t        | j	                  «       «      f«      x| _         }|S r[   )r…   r„   r9   Ú	frozensetrI   )r©   r…   s     r8   r¸   zPolyElement.__hash__h  s<   € ð —
‘
ˆØˆ=Ü!% t§y¡y´)¸D¿J¹J»LÓ2IÐ&JÓ!KÐKˆDŒJ˜Øˆr:   c                ó$   — | j                  | «      S )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³   zPolyElement.copys  s   € ð4 �x‰x˜‹~Ðr:   c           	     óv  — | j                   |k(  r| S | j                   j                  |j                  k7  r`t        t        t	        | | j                   j                  |j                  «      Ž «      }|j                  || j                   j                  «      S |j                  | | j                   j                  «      S r[   )r9   r   rC   rH   r)   rÝ   r5   rJ   )r©   Únew_ringÚtermss      r8   Úset_ringzPolyElement.set_ring�  s�   € Ø�9‰9˜Ò ØˆKØ�Y‰Y×Ñ (×"2Ñ"2Ò2Üœœm¨D°$·)±)×2CÑ2CÀX×EUÑEUÓVÐWÓXˆEØ×&Ñ& u¨d¯i©i×.>Ñ.>Ó?Ð?à×%Ñ% d¨D¯I©I×,<Ñ,<Ó=Ð=r:   c                ó  — |s| j                   j                  }nPt        |«      | j                   j                  k7  r.t	        d| j                   j                  ›dt        |«      ›�«      ‚t        | j                  «       g|¢­Ž S )Nz"Wrong number of symbols, expected z got )r9   r   rz   rj   rÞ   r(   Úas_expr_dict)r©   r   s     r8   Úas_exprzPolyElement.as_expr˜  sf   € ÙØ—i‘i×'Ñ'‰GÜ�‹\˜TŸY™YŸ_™_Ò,Ýà—‘—“¤# g¤,ð0óð ô
 ˜d×/Ñ/Ó1Ð<°GÒ<Ð<r:   c                ó¢   — | j                   j                  j                  }| j                  «       D ��ci c]  \  }}| ||«      “Œ c}}S c c}}w r[   )r9   r5   Úto_sympyr6  )r©   rB  rØ   rÕ   s       r8   r?  zPolyElement.as_expr_dict£  s?   € Ø—9‘9×#Ñ#×,Ñ,ˆØ;?¿>¹>Ó;K×L©<¨5°%�‘x “Ñ&ÓLÐLùÓLs   ´Ac           	     ó¬  — | j                   j                  }|j                  r|j                  s|j                  | fS |j                  «       }|j                  }|j                  }|j                  }| j                  «       D ]  } || ||«      «      }Œ | j                  | j                  «       D ��cg c]  \  }}|||z  f‘Œ c}}«      }	||	fS c c}}w r[   )r9   r5   Úis_FieldÚhas_assoc_RingrŒ   Úget_ringr—   ÚdenomrF   r‡   rI   )
r©   r5   Úground_ringÚcommonr—   rG  rÕ   ÚkÚvr¬   s
             r8   Úclear_denomszPolyElement.clear_denoms§  s¸   € Ø—‘×!Ñ!ˆà�Š f×&;Ò&;Ø—:‘:˜tÐ#Ð#à—o‘oÓ'ˆØ—‘ˆØ�o‰oˆØ—‘ˆà—[‘[“]ò 	/ˆEÙ˜¡ u£Ó.‰Fð	/ð �x‰x°D·J±J³L×B©D¨A¨q˜1˜a ™hš-ÓBÓCˆØ�tˆ|Ðùó Cs   Â3C
c                óR   — t        | j                  «       «      D ]  \  }}|rŒ	| |= Œ y)z+Eliminate monomials with zero coefficient. N©rC   rI   )r©   rJ  rK  s      r8   Ú
strip_zerozPolyElement.strip_zero¸  s*   € ä˜Ÿ™›Ó&ò 	‰DˆAˆqÚØ˜‘Gñ	r:   c                óÜ   — |s|  S | j                   j                  |«      rt        j                  | |«      S t	        | «      dkD  ry| j                  | j                   j                  «      |k(  S )aP  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¼   rz   rè   r‰   ©Úp1Úp2s     r8   r¼   zPolyElement.__eq__¾  s]   € ñ" Ø�6ˆMØ�W‰W×Ñ Ô#Ü—;‘;˜r 2Ó&Ð&Ü�‹W�qŠ[Øà—6‘6˜"Ÿ'™'×,Ñ,Ó-°Ñ3Ð3r:   c                ó   — | |k(   S r[   rY   rQ  s     r8   r¾   zPolyElement.__ne__Ø  s   € Ø˜‘8ˆ|Ðr:   c                óê  — | j                   }|j                  |«      rrt        | j                  «       «      t        |j                  «       «      k7  ry|j                  j
                  }| j                  «       D ]  } || |   ||   |«      rŒ y yt        | «      dkD  ry	 |j                  j                  |«      }|j                  j                  | j                  «       ||«      S # t        $ r Y yw xY w)z+Approximate equality test for polynomials. FTrÆ   )
r9   rÍ   r€   Úkeysr5   Úalmosteqrz   rÏ   Úconstr"   )rR  rS  Ú	tolerancer9   rW  rJ  s         r8   rW  zPolyElement.almosteqÛ  sÓ   € à�w‰wˆà�?‰?˜2ÔÜ�2—7‘7“9‹~¤ R§W¡W£Y£Ò/Øà—{‘{×+Ñ+ˆHà—W‘W“Yò !�Ù  1¡ r¨!¡u¨iÕ8Ù ð!ð Ü�‹W�qŠ[ØðGØ—[‘[×(Ñ(¨Ó,�ð —{‘{×+Ñ+¨B¯H©H«J¸¸IÓFÐFøô "ò Ùðús   Â C& Ã&	C2Ã1C2c                ó8   — t        | «      | j                  «       fS r[   )rz   r<  r®   s    r8   Úsort_keyzPolyElement.sort_keyó  s   € Ü�D“	˜4Ÿ:™:›<Ð(Ð(r:   c                óŽ   — | j                   j                  |«      r% || j                  «       |j                  «       «      S t        S r[   )r9   rÍ   r[  ÚNotImplemented)rR  rS  Úops      r8   Ú_cmpzPolyElement._cmpö  s3   € Ø�7‰7×Ñ˜bÔ!Ù�b—k‘k“m R§[¡[£]Ó3Ð3ä!Ð!r:   c                ó.   — | j                  |t        «      S r[   )r_  r   rQ  s     r8   Ú__lt__zPolyElement.__lt__ü  ó   € Ø�w‰w�rœ2‹Ðr:   c                ó.   — | j                  |t        «      S r[   )r_  r   rQ  s     r8   Ú__le__zPolyElement.__le__þ  rb  r:   c                ó.   — | j                  |t        «      S r[   )r_  r   rQ  s     r8   Ú__gt__zPolyElement.__gt__   rb  r:   c                ó.   — | j                  |t        «      S r[   )r_  r	   rQ  s     r8   Ú__ge__zPolyElement.__ge__  rb  r:   c                óÎ   — | j                   }|j                  |«      }|j                  dk(  r||j                  fS t	        |j
                  «      }||= ||j                  |¬«      fS )NrÆ   rf   )r9   r÷   rj   r5   rC   r   rÂ   ©r©   rø   r9   rª   r   s        r8   Ú_dropzPolyElement._drop  s\   € Ø�y‰yˆØ�J‰J�s‹Oˆà�:‰:˜Š?Ø�d—k‘k�>Ð!ä˜4Ÿ<™<Ó(ˆGØ˜�
Ø�d—j‘j¨�jÓ1Ð1Ð1r:   c                ób  — | j                  |«      \  }}| j                  j                  dk(  r+| j                  r| j	                  d«      S t        d|z  «      ‚|j                  }| j                  «       D ]7  \  }}||   dk(  rt        |«      }||= ||t        |«      <   Œ+t        d|z  «      ‚ |S )NrÆ   zCannot drop %sr   )
rk  r9   rj   Ú	is_groundrÕ   rÞ   r§   rI   rC   ry   )r©   rø   rª   r9   r¬   rJ  rK  ÚKs           r8   rü   zPolyElement.drop  s«   € Ø—*‘*˜S“/‰ˆˆ4à�9‰9�?‰?˜aÒØ�~Š~Ø—z‘z !“}Ð$ä Ð!1°CÑ!7Ó8Ð8à—9‘9ˆDàŸ
™
›ò =‘��1Ø�Q‘4˜1’9Ü˜Q›�AØ˜!˜Ø%&�Dœ˜q›’Nä$Ð%5¸Ñ%;Ó<Ð<ð=ð ˆKr:   c                óœ   — | j                   }|j                  |«      }t        |j                  «      }||= ||j	                  |||   ¬«      fS )Nr  )r9   r÷   rC   r   rÂ   rj  s        r8   Ú_drop_to_groundzPolyElement._drop_to_ground%  sI   € Ø�y‰yˆØ�J‰J�s‹Oˆä�t—|‘|Ó$ˆØ�AˆJØ�$—*‘* W°T¸!±W�*Ó=Ð=Ð=r:   c                óŽ  — | j                   j                  dk(  rt        d«      ‚| j                  |«      \  }}|j                  }|j
                  j                  d   }| j                  «       D ]T  \  }}|d | ||dz   d  z   }||vr|||   z  j                  |«      ||<   Œ3||xx   |||   z  j                  |«      z  cc<   ŒV |S )NrÆ   z$Cannot drop only generator to groundr   )	r9   rj   rÞ   rp  r§   r5   r3   r6  Ú
mul_ground)r©   rø   rª   r9   r¬   rØ   rÕ   Úmons           r8   r  zPolyElement.drop_to_ground-  sÎ   € Ø�9‰9�?‰?˜aÒÜÐCÓDÐDà×&Ñ& sÓ+‰ˆˆ4Ø�y‰yˆØ�k‰k×Ñ˜qÑ!ˆà ŸN™NÓ,ò 	?‰LˆE�5Ø˜˜�)˜e A a¡C D˜kÑ)ˆCØ˜$‰Ø  %¨¡(™]×6Ñ6°uÓ=��S’	à�S“	˜c 5¨¡8™m×7Ñ7¸Ó>Ñ>”	ð	?ð ˆr:   c                ór   — t        | | j                  j                  dz
  | j                  j                  «      S rå   )r   r9   rj   r5   r®   s    r8   Úto_densezPolyElement.to_dense>  s(   € Ü˜T 4§9¡9§?¡?°1Ñ#4°d·i±i×6FÑ6FÓGÐGr:   c                ó   — t        | «      S r[   )rG   r®   s    r8   Úto_dictzPolyElement.to_dictA  s   € Ü�D‹zÐr:   c                ó6  — | s/|j                  | j                  j                  j                  «      S |d   }|d   }| j                  }|j                  }|j
                  }	|j                  }
g }| j                  «       D �]Y  \  }}|j                  j                  |«      }|rdnd}|j                  |«       ||
k(  r*|j                  |«      }|rV|j                  d«      rE|dd  }n?|r| }|| j                  j                  j                  k7  r|j                  ||d¬«      }nd	}g }t        |	«      D ]{  }||   }|sŒ|j                  ||   |d¬«      }|dk7  rA|t        |«      k7  s|d
k  r|j                  ||d¬«      }n|}|j                  |||fz  «       Œh|j                  d|z  «       Œ} |r|g|z   }|j                  |j                  |«      «       �Œ\ |d
   dv r(|j!                  d
«      }|dk(  r|j#                  d
d«       d	j                  |«      S )NÚMulÚAtomú - ú + ú-rÆ   T)ÚstrictÚ r   Fz%s)r|  r{  )Ú_printr9   r5   r§   r   rj   r‰   r<  Úis_negativer¨   r´   rŒ   Úparenthesizer¥   ri   ÚjoinÚpopÚinsert)r©   ÚprinterÚ
precedenceÚexp_patternÚ
mul_symbolÚprec_mulÚ	prec_atomr9   r   rj   ÚzmÚsexpvsr«   rÕ   ÚnegativeÚsignÚscoeffÚsexpvrª   rð   r¢   ÚsexpÚheads                          r8   r]   zPolyElement.strD  s  € ÙØ—>‘> $§)¡)×"2Ñ"2×"7Ñ"7Ó8Ð8Ø˜eÑ$ˆØ˜vÑ&ˆ	Ø�y‰yˆØ—,‘,ˆØ—
‘
ˆØ�_‰_ˆØˆØŸ:™:›<ó 	2‰KˆD�%Ø—{‘{×.Ñ.¨uÓ5ˆHÙ$‘5¨%ˆDØ�M‰M˜$ÔØ�rŠzØ Ÿ™¨Ó.�Ù × 1Ñ 1°#Ô 6Ø# A B˜Z‘FáØ"˜F�EØ˜DŸI™I×,Ñ,×0Ñ0Ò0Ø$×1Ñ1°%¸È$Ð1ÓO‘Fà�FØˆEÜ˜5“\ò 0�Ø˜1‘g�ÙØØ ×-Ñ-¨g°a©j¸)ÈDÐ-ÓQ�Ø˜!’8Øœc #›h’¨#°ª'Ø&×3Ñ3°C¸È5Ð3ÓQ™à"˜Ø—L‘L °¸¨~Ñ!=Õ>à—L‘L ¨¡Õ/ð0ñ Ø˜ 5Ñ(�Ø�M‰M˜*Ÿ/™/¨%Ó0Ö1ð?	2ð@ �!‰9˜Ñ&Ø—:‘:˜a“=ˆDØ�uŠ}Ø—‘˜a Ô%Ø�w‰w�v‹Ðr:   c                ó2   — | | j                   j                  v S r[   )r9   r‹   r®   s    r8   Úis_generatorzPolyElement.is_generatort  s   € à�t—y‘y×*Ñ*Ð*Ð*r:   c                ó\   — |  xs( t        | «      dk(  xr | j                  j                  | v S rå   )rz   r9   r‰   r®   s    r8   rm  zPolyElement.is_groundx  s+   € àˆxÒLœC ›I¨™NÒK¨t¯y©y×/CÑ/CÀtÐ/KÐLr:   c                óJ   — |  xs t        | «      dk(  xr | j                  dk(  S rå   )rz   ÚLCr®   s    r8   Úis_monomialzPolyElement.is_monomial|  s$   € àˆxÒ<œC ›I¨™NÒ;¨t¯w©w¸!©|Ð<r:   c                ó   — t        | «      dk  S rå   )rz   r®   s    r8   Úis_termzPolyElement.is_term€  s   € ä�4‹y˜A‰~Ðr:   c                ó`   — | j                   j                  j                  | j                  «      S r[   )r9   r5   r�  r˜  r®   s    r8   r�  zPolyElement.is_negative„  ó!   € à�y‰y×Ñ×+Ñ+¨D¯G©GÓ4Ð4r:   c                ó`   — | j                   j                  j                  | j                  «      S r[   )r9   r5   Úis_positiver˜  r®   s    r8   rŸ  zPolyElement.is_positiveˆ  r�  r:   c                ó`   — | j                   j                  j                  | j                  «      S r[   )r9   r5   Úis_nonnegativer˜  r®   s    r8   r¡  zPolyElement.is_nonnegativeŒ  ó!   € à�y‰y×Ñ×.Ñ.¨t¯w©wÓ7Ð7r:   c                ó`   — | j                   j                  j                  | j                  «      S r[   )r9   r5   Úis_nonpositiver˜  r®   s    r8   r¤  zPolyElement.is_nonpositive�  r¢  r:   c                ó   — |  S r[   rY   ©rx   s    r8   Úis_zerozPolyElement.is_zero”  s	   € àˆuˆr:   c                ó4   — | | j                   j                  k(  S r[   )r9   rŒ   r¦  s    r8   Úis_onezPolyElement.is_one˜  s   € à�A—F‘F—J‘J‰Ðr:   c                ó`   — | j                   j                  j                  | j                  «      S r[   )r9   r5   r©  r˜  r¦  s    r8   Úis_moniczPolyElement.is_monicœ  s   € à�v‰v�}‰}×#Ñ# A§D¡DÓ)Ð)r:   c                óh   — | j                   j                  j                  | j                  «       «      S r[   )r9   r5   r©  Úcontentr¦  s    r8   Úis_primitivezPolyElement.is_primitive   s!   € à�v‰v�}‰}×#Ñ# A§I¡I£KÓ0Ð0r:   c                óB   — t        d„ | j                  «       D «       «      S )Nc              3  ó8   K  — | ]  }t        |«      d k  –— Œ y­w©rÆ   N©rE   ©r_   rØ   s     r8   ra   z(PolyElement.is_linear.<locals>.<genexpr>¦  ó   è ø€ Ò? u”3�u“: •?Ñ?ùó   ‚©re   Ú
itermonomsr¦  s    r8   Ú	is_linearzPolyElement.is_linear¤  ó   € äÑ?°·±³Ô?Ó?Ð?r:   c                óB   — t        d„ | j                  «       D «       «      S )Nc              3  ó8   K  — | ]  }t        |«      d k  –— Œ y­w)é   Nr²  r³  s     r8   ra   z+PolyElement.is_quadratic.<locals>.<genexpr>ª  r´  rµ  r¶  r¦  s    r8   Úis_quadraticzPolyElement.is_quadratic¨  r¹  r:   c                óf   — | j                   j                  sy| j                   j                  | «      S ©NT)r9   rj   Ú	dmp_sqf_pr¦  s    r8   Úis_squarefreezPolyElement.is_squarefree¬  s%   € à�v‰v�|Š|ØØ�v‰v×Ñ Ó"Ð"r:   c                óf   — | j                   j                  sy| j                   j                  | «      S r¿  )r9   rj   Údmp_irreducible_pr¦  s    r8   Úis_irreduciblezPolyElement.is_irreducible²  s%   € à�v‰v�|Š|ØØ�v‰v×'Ñ'¨Ó*Ð*r:   c                óz   — | j                   j                  r| j                   j                  | «      S t        d«      ‚)Nzcyclotomic polynomial)r9   r
  Údup_cyclotomic_pr%   r¦  s    r8   Úis_cyclotomiczPolyElement.is_cyclotomic¸  s0   € à�6‰6×ÒØ—6‘6×*Ñ*¨1Ó-Ð-ä-Ð.EÓFÐFr:   c                óx   — | j                  | j                  «       D ��cg c]
  \  }}|| f‘Œ c}}«      S c c}}w r[   )r‡   r6  )r©   rØ   rÕ   s      r8   Ú__neg__zPolyElement.__neg__¿  s0   € Ø�x‰x¸d¿n¹nÓ>N×P©l¨e°U˜5 5 &š/ÓPÓQÐQùÓPs   Ÿ6
c                ó   — | S r[   rY   r®   s    r8   Ú__pos__zPolyElement.__pos__Â  s   € Øˆr:   c                óx  — |s| j                  «       S | j                  }|j                  |«      rc| j                  «       }|j                  }|j                  j
                  }|j                  «       D ]  \  }} |||«      |z   }|r|||<   Œ||= Œ |S t        |t        «      rœt        |j                  t        «      r$|j                  j                  |j                  k(  rn^t        |j                  j                  t        «      r4|j                  j                  j                  |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  «       }|s|S |j                  }	|	| j                  «       vr|||	<   |S |||	    k(  r||	= |S ||	xx   |z  cc<   |S # t        $ r	 t        cY S w xY w)a  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‰   rV  r"   )
rR  rS  r9   r  rè   r§   rJ  rK  Úcp2rŒ  s
             r8   Ú__add__zPolyElement.__add__Å  s‘  € ñ Ø—7‘7“9ÐØ�w‰wˆØ�?‰?˜2ÔØ—‘“	ˆAØ—%‘%ˆCØ—;‘;×#Ñ#ˆDØŸ™›
ò ‘��1Ù˜˜4“L 1Ñ$�ÙØ�A�a’Dà˜!™ðð ˆHÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—{‘{ 2“Ð&ä%Ð%ð	Ø—/‘/ "Ó%ˆCð —‘“	ˆAÙØ�Ø—‘ˆBØ˜Ÿ™›Ñ"Ø��"‘ð ˆHð	 ˜!˜B™%˜’<Ø˜"˜ð ˆHð �b“E˜S‘L“EØˆHøô ò 	"Ü!Ò!ð	"ús   Å F' Æ'F9Æ8F9c                ó  — | j                  «       }|s|S | j                  }	 |j                  |«      }|j                  }|| j	                  «       vr|||<   |S |||    k(  r||= |S ||xx   |z  cc<   |S # t
        $ r	 t        cY S w xY wr[   )r³   r9   rÒ   r‰   rV  r"   r]  )rR  r   r  r9   rŒ  s        r8   rÍ  zPolyElement.__radd__û  s¢   € Ø�G‰G‹IˆÙØˆHØ�w‰wˆð	Ø—‘ Ó"ˆAð —‘ˆBØ˜Ÿ™›Ñ"Ø��"‘ð ˆHð	 ˜˜2™˜’;Ø˜"˜ð ˆHð �b“E˜Q‘J“EØˆHøô ò 	"Ü!Ò!ð	"ús   ¢A5 Á5BÂBc                óp  — |s| j                  «       S | j                  }|j                  |«      rc| j                  «       }|j                  }|j                  j
                  }|j                  «       D ]  \  }} |||«      |z
  }|r|||<   Œ||= Œ |S t        |t        «      rœt        |j                  t        «      r$|j                  j                  |j                  k(  rn^t        |j                  j                  t        «      r4|j                  j                  j                  |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  «       }|j                  }|| j                  «       vr| ||<   |S |||   k(  r||= |S ||xx   |z  cc<   |S # t        $ r	 t        cY S w xY w)a.  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‰   rV  r"   )	rR  rS  r9   r  rè   r§   rJ  rK  rŒ  s	            r8   Ú__sub__zPolyElement.__sub__  s‰  € ñ  Ø—7‘7“9ÐØ�w‰wˆØ�?‰?˜2ÔØ—‘“	ˆAØ—%‘%ˆCØ—;‘;×#Ñ#ˆDØŸ™›
ò ‘��1Ù˜˜4“L 1Ñ$�ÙØ�A�a’Dà˜!™ðð ˆHÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—{‘{ 2“Ð&ä%Ð%ð	Ø—‘ Ó$ˆBð —‘“	ˆAØ—‘ˆBØ˜Ÿ™›Ñ"Ø˜��"‘ð ˆHð	 ˜˜2™’;Ø˜"˜ð ˆHð �b“E˜R‘K“EØˆHøô ò 	"Ü!Ò!ð	"ús   Å F# Æ#F5Æ4F5c                ó®   — | j                   }	 |j                  |«      }|j                  }| D ]  }| |    ||<   Œ ||z  }|S # t        $ r	 t        cY S w xY w)a#  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]  )rR  r   r9   r  r«   s        r8   rÒ  zPolyElement.__rsub__E  sn   € ð �w‰wˆð
	Ø—‘ Ó"ˆAð —	‘	ˆAØò $�Ø˜d™8˜)��$’ð$à�‰FˆAàˆHøô ò 	"Ü!Ò!ð	"ús   ŽA ÁAÁAc                ó€  — | j                   }|j                  }| r|s|S |j                  |«      r–|j                  }|j                  j                  }|j
                  }t        |j                  «       «      }| j                  «       D ]*  \  }}	|D ]   \  }
} |||
«      } |||«      |	|z  z   ||<   Œ" Œ, |j                  «        |S t        |t        «      rœt        |j                  t        «      r$|j                  j                   |j                   k(  rn^t        |j                   j                  t        «      r4|j                   j                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  «       D ]  \  }}	|	|z  }|sŒ|||<   Œ |S # t        $ r	 t        cY S w xY w)a!  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   rO  r\   r†   r   Ú__rmul__r]  rÒ   r"   )rR  rS  r9   r  rè   r§   rŽ   Úp2itÚexp1Úv1Úexp2Úv2rð   rK  s                 r8   Ú__mul__zPolyElement.__mul__a  sŒ  € ð  �w‰wˆØ�I‰IˆÙ™ØˆHØ�_‰_˜RÔ Ø—%‘%ˆCØ—;‘;×#Ñ#ˆDØ×,Ñ,ˆLÜ˜Ÿ™›
Ó#ˆDØŸH™H›Jò 4‘��bØ $ò 4‘H�D˜"Ù& t¨TÓ2�CÙ   d›^¨b°©eÑ3�A�c’Fñ4ð4ð �L‰LŒNàˆHÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—{‘{ 2“Ð&ä%Ð%ð
	Ø—‘ Ó$ˆBð ŸH™H›Jò  ‘��bØ�r‘E�ÚØ�A�d’Gð ð
 ˆHøô ò 	"Ü!Ò!ð	"ús   Å3F+ Æ+F=Æ<F=c                óæ   — | j                   j                  }|s|S 	 |j                   j                  |«      }| j                  «       D ]  \  }}||z  }|sŒ|||<   Œ |S # t        $ r	 t
        cY S w xY w)a  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]  )rR  rS  r  rØ  rÙ  rK  s         r8   rÖ  zPolyElement.__rmul__•  s€   € ð �G‰G�L‰LˆÙØˆHð		Ø—‘×"Ñ" 2Ó&ˆBð ŸH™H›Jò  ‘��bØ�r‘E�ÚØ�A�d’Gð ð ˆHøô ò 	"Ü!Ò!ð	"ús   œA ÁA0Á/A0c                óÒ  — t        |t        «      st        d|z  «      ‚|dk  rt        d|z  «      ‚| j                  }|s| r|j
                  S t        d«      ‚t        | «      dk(  rut        | j                  «       «      d   \  }}|j                  }||j                  j
                  k(  r|||j                  ||«      <   |S ||z  ||j                  ||«      <   |S t        |«      }|dk  rt        d«      ‚|dk(  r| j                  «       S |dk(  r| j                  «       S |dk(  r| | j                  «       z  S t        | «      d	k  r| j                  |«      S | j                  |«      S )
a(  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\   ri   Ú	TypeErrorrÞ   r9   rŒ   rz   rC   rI   r§   r5   r�   r³   ÚsquareÚ_pow_multinomialÚ_pow_generic)r©   r   r9   rØ   rÕ   r  s         r8   Ú__pow__zPolyElement.__pow__²  sa  € ô ˜!œSÔ!ÜÐAÀAÑEÓFÐFØ�ŠUÜÐNÐQRÑRÓSÐSà�y‰yˆáÙØ—x‘x�ä  Ó(Ð(Ü�‹Y˜!Š^Ü §
¡
£Ó-¨aÑ0‰LˆE�5Ø—	‘	ˆAØ˜Ÿ™Ÿ™Ò'Ø16��$×#Ñ# E¨1Ó-Ñ.ð ˆHð 27¸±��$×#Ñ# E¨1Ó-Ñ.àˆHô �‹FˆØˆqŠ5ÜÐ0Ó1Ð1à�!ŠVØ—9‘9“;ÐØ�!ŠVØ—;‘;“=Ð Ø�!ŠVØ˜Ÿ™›Ñ%Ð%Ü�‹Y˜!Š^Ø×(Ñ(¨Ó+Ð+à×$Ñ$ QÓ'Ð'r:   c                óˆ   — | j                   j                  }| }	 |dz  r||z  }|dz  }|s	 |S |j                  «       }|dz  }Œ*)NrÆ   r¼  )r9   rŒ   râ  )r©   r   r  rT   s       r8   rä  zPolyElement._pow_genericè  sX   € Ø�I‰I�M‰MˆØˆàØ�1ŠuØ�a‘C�Ø�Q‘�ÙØð
 ˆð —‘“
ˆAØ�Q‘ˆAð r:   c                ó  — t        t        | «      |«      j                  «       }| j                  j                  }| j                  j
                  }| j                  «       }| j                  j                  j                  }| j                  j                  }|D ]g  \  }}	|}
|	}t        ||«      D ]  \  }\  }}|sŒ ||
||«      }
|||z  z  }Œ t        |
«      }|}|j                  ||«      |z   }|r|||<   Œ`||v sŒe||= Œi |S r[   )r   rz   rI   r9   r’   r‰   r5   r§   rH   ry   rè   )r©   r   Úmultinomialsr’   r‰   r<  r§   r¬   ÚmultinomialÚmultinomial_coeffÚproduct_monomÚproduct_coeffrð   rØ   rÕ   s                  r8   rã  zPolyElement._pow_multinomialø  s
  € Ü/´°D³	¸1Ó=×CÑCÓEˆØŸ)™)×3Ñ3ˆØ—Y‘Y×)Ñ)ˆ
Ø—
‘
“ˆØ�y‰y×Ñ×$Ñ$ˆØ�y‰y�~‰~ˆà.:ò 	 Ñ*ˆKÐ*Ø&ˆMØ-ˆMä'*¨;¸Ó'>ò 0Ñ#�‘^�e˜UÚÙ$3°MÀ5È#Ó$N�MØ! U¨C¡ZÑ/‘Mð0ô
 ˜-Ó(ˆEØ!ˆEà—H‘H˜U DÓ)¨EÑ1ˆEáØ#��U’Ø˜$’Ø˜‘Kð#	 ð& ˆr:   c                ó0  — | j                   }|j                  }|j                  }t        | j	                  «       «      }|j
                  j                  }|j                  }t        t        |«      «      D ]?  }||   }| |   }	t        |«      D ]%  }
||
   } |||«      } |||«      |	| |   z  z   ||<   Œ' ŒA |j                  d«      }|j                  }| j                  «       D ]   \  }} |||«      } |||«      |dz  z   ||<   Œ" |j                  «        |S )a  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   rV  r5   rŽ   r¥   rz   Úimul_numrI   rO  )r©   r9   r  rè   rV  r§   rŽ   rª   Úk1ÚpkÚjÚk2rð   rJ  rK  s                  r8   râ  zPolyElement.square  s  € ð �y‰yˆØ�I‰IˆØ�e‰eˆÜ�D—I‘I“KÓ ˆØ�{‰{×ÑˆØ×(Ñ(ˆÜ”s˜4“yÓ!ò 	6ˆAØ�a‘ˆBØ�b‘ˆBÜ˜1“Xò 6�Ø˜!‘W�Ù" 2 rÓ*�Ù˜S $›¨"¨T°"©X©+Ñ5��#’ñ6ð	6ð �J‰J�q‹MˆØ�e‰eˆØ—J‘J“Lò 	)‰DˆAˆqÙ˜a Ó#ˆBÙ˜˜D“M A q¡DÑ(ˆAˆbŠEð	)ð 	
�‰Œàˆr:   c                ób  — | j                   }|st        d«      ‚|j                  |«      r| j                  |«      S t	        |t
        «      rœt	        |j                  t        «      r$|j                  j                   |j                   k(  rn^t	        |j                   j                  t        «      r4|j                   j                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  |«      | j                  |«      fS # t        $ r	 t        cY S w xY w©Núpolynomial division)r9   ÚZeroDivisionErrorrÍ   r•   r\   r†   r5   r   Ú__rdivmod__r]  rÒ   Ú
quo_groundÚ
rem_groundr"   ©rR  rS  r9   s      r8   Ú
__divmod__zPolyElement.__divmod__:  sê   € Ø�w‰wˆáÜ#Ð$9Ó:Ð:Ø�_‰_˜RÔ Ø—6‘6˜"“:ÐÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô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   Ã)D ÄD.Ä-D.c                óŠ   — | j                   }	 |j                  |«      }|j                  | «      S # t        $ r	 t        cY S w xY wr[   )r9   rÖ   r•   r"   r]  rú  s      r8   r÷  zPolyElement.__rdivmod__P  óE   € Ø�w‰wˆð	Ø—‘ Ó$ˆBð —6‘6˜"“:Ðøô ò 	"Ü!Ò!ð	"úó   Ž0 °AÁAc                ó@  — | j                   }|st        d«      ‚|j                  |«      r| j                  |«      S t	        |t
        «      rœt	        |j                  t        «      r$|j                  j                   |j                   k(  rn^t	        |j                   j                  t        «      r4|j                   j                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  |«      S # t        $ r	 t        cY S w xY wrô  )r9   rö  rÍ   Úremr\   r†   r5   r   Ú__rmod__r]  rÒ   rù  r"   rú  s      r8   Ú__mod__zPolyElement.__mod__Y  sÛ   € Ø�w‰wˆáÜ#Ð$9Ó:Ð:Ø�_‰_˜RÔ Ø—6‘6˜"“:ÐÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—{‘{ 2“Ð&ä%Ð%ð	%Ø—‘ Ó$ˆBð —=‘= Ó$Ð$øô ò 	"Ü!Ò!ð	"úó   Ã)D ÄDÄDc                óŠ   — | j                   }	 |j                  |«      }|j                  | «      S # t        $ r	 t        cY S w xY wr[   )r9   rÖ   r   r"   r]  rú  s      r8   r  zPolyElement.__rmod__o  rý  rþ  c                ó@  — | j                   }|st        d«      ‚|j                  |«      r| j                  |«      S t	        |t
        «      rœt	        |j                  t        «      r$|j                  j                   |j                   k(  rn^t	        |j                   j                  t        «      r4|j                   j                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  |«      S # t        $ r	 t        cY S w xY wrô  )r9   rö  rÍ   Úquor\   r†   r5   r   Ú__rtruediv__r]  rÒ   rø  r"   rú  s      r8   Ú__floordiv__zPolyElement.__floordiv__x  sÜ   € Ø�w‰wˆáÜ#Ð$9Ó:Ð:Ø�_‰_˜RÔ Ø—6‘6˜"“:ÐÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—‘ rÓ*Ð*ä%Ð%ð	%Ø—‘ Ó$ˆBð —=‘= Ó$Ð$øô ò 	"Ü!Ò!ð	"úr  c                óŠ   — | j                   }	 |j                  |«      }|j                  | «      S # t        $ r	 t        cY S w xY wr[   )r9   rÖ   r  r"   r]  rú  s      r8   Ú__rfloordiv__zPolyElement.__rfloordiv__Ž  rý  rþ  c                ó@  — | j                   }|st        d«      ‚|j                  |«      r| j                  |«      S t	        |t
        «      rœt	        |j                  t        «      r$|j                  j                   |j                   k(  rn^t	        |j                   j                  t        «      r4|j                   j                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  |«      S # t        $ r	 t        cY S w xY wrô  )r9   rö  rÍ   Úexquor\   r†   r5   r   r  r]  rÒ   rø  r"   rú  s      r8   Ú__truediv__zPolyElement.__truediv__—  sÜ   € Ø�w‰wˆáÜ#Ð$9Ó:Ð:Ø�_‰_˜RÔ Ø—8‘8˜B“<ÐÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—‘ rÓ*Ð*ä%Ð%ð	%Ø—‘ Ó$ˆBð —=‘= Ó$Ð$øô ò 	"Ü!Ò!ð	"úr  c                óŠ   — | j                   }	 |j                  |«      }|j                  | «      S # t        $ r	 t        cY S w xY wr[   )r9   rÖ   r  r"   r]  rú  s      r8   r  zPolyElement.__rtruediv__­  sE   € Ø�w‰wˆð	 Ø—‘ Ó$ˆBð —8‘8˜B“<Ðøô ò 	"Ü!Ò!ð	"úrþ  c                óà   ‡‡‡— | j                   j                  Š| j                   j                  }|j                  Š| j                   j                  Š|j
                  r	ˆˆˆfd„}|S ˆˆˆfd„}|S )Nc                óV   •— | \  }}|\  }}|‰	k(  r|}n	 ‰||«      }|�| ‰||«      fS y r[   rY   ©
Ú	a_lm_a_lcÚ	b_lm_b_lcÚa_lmÚa_lcÚb_lmÚb_lcrØ   Ú
domain_quor–   rŒ  s
          €€€r8   Úterm_divz'PolyElement._term_div.<locals>.term_div½  sH   ø€ Ø&‘
��dØ&‘
��dØ˜2’:Ø ‘Eá(¨¨tÓ4�EØÐ$Ø ¡*¨T°4Ó"8Ð8Ð8àr:   c                ó`   •— | \  }}|\  }}|‰	k(  r|}n	 ‰||«      }|�||z  s| ‰||«      fS y r[   rY   r  s
          €€€r8   r  z'PolyElement._term_div.<locals>.term_divÉ  sM   ø€ Ø&‘
��dØ&‘
��dØ˜2’:Ø ‘Eá(¨¨tÓ4�EØ˜¨°ªØ ¡*¨T°4Ó"8Ð8Ð8àr:   )r9   r‰   r5   r  r–   rD  )r©   r5   r  r  r–   rŒ  s      @@@r8   Ú	_term_divzPolyElement._term_div¶  sX   ú€ Ø�Y‰Y×!Ñ!ˆØ—‘×!Ñ!ˆØ—Z‘Zˆ
Ø—y‘y×-Ñ-ˆà�?Š?ö
 ð0 ˆö
 ð ˆr:   c                óÖ  — | j                   }d}t        |t        «      rd}|g}t        |«      st	        d«      ‚| s(|r|j
                  |j
                  fS g |j
                  fS |D ]  }|j                   |k7  sŒt        d«      ‚ t        |«      }t        |«      D �cg c]  }|j
                  ‘Œ }}| j                  «       }|j
                  }	| j                  «       }
|D �cg c]  }|j                  «       ‘Œ }}|r³d}d}||k  r||dk(  rw|j                  «       } |
|||   f||   ||   ||      f«      }|�9|\  }}||   j                  ||f«      ||<   |j                  ||   || f«      }d}n|dz  }||k  r|dk(  rŒw|s)|j                  «       }|	j                  |||   f«      }	||= |rŒ³|j                  k(  r|	|z  }	|r|s|j
                  |	fS |d   |	fS ||	fS c c}w c c}w )aU  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†   re   rö  r§   rÞ   rz   r¥   r³   r  r›   Ú_iadd_monomÚ_iadd_poly_monomr‰   )r©   Úfvr9   Ú
ret_singlerx   r`   rª   Úqvr  Úrr  ÚfxÚexpvsÚdivoccurredr«   ÚtermÚexpv1rT   s                     r8   r•   zPolyElement.div×  s  € ð8 �y‰yˆØˆ
Ü�bœ+Ô&ØˆJØ�ˆBÜ�2ŒwÜ#Ð$9Ó:Ð:ÙÙØ—y‘y $§)¡)Ð+Ð+à˜4Ÿ9™9�}Ð$Øò 	GˆAØ�v‰v˜‹~Ü Ð!EÓFÐFð	Gô �‹GˆÜ!& q£Ö*˜Aˆd�i‹iÐ*ˆÐ*Ø�I‰I‹KˆØ�I‰IˆØ—>‘>Ó#ˆØ-/Ö0 r�—‘Õ"Ð0ˆÐ0ÙØˆAØˆKØ�a’%˜K¨1Ò,Ø—~‘~Ó'�Ù  q¨¡w °%¸±(¸B¸q¹EÀ%ÈÁ(¹OÐ1LÓM�ØÐ#Ø#‘H�E˜1Ø˜q™E×-Ñ-¨u°a¨jÓ9�B�q‘EØ×*Ñ*¨2¨a©5°5¸1¸"°+Ó>�AØ"#‘Kà˜‘F�Að �a’%˜K¨1Ó,ñ ØŸ™Ó(�Ø—M‘M 4¨¨4© /Ó2�Ø�d�Gò! ð" �4—?‘?Ò"Ø�‰FˆAÙÙØ—y‘y !�|Ð#à˜!‘u˜a�x�à�q�5ˆLùò= +ùò 1s   ÂG!Ã"G&c                ó¬  — | }t        |t        «      r|g}t        |«      st        d«      ‚|j                  }|j
                  }|j                  }|j                  }|j                  }|j                  «       }|j                  }	|j                  «       }|j                  }
|r²|D ]r  } ||	|j                  «      }|€Œ|\  }}|j                  «       D ](  \  }} |||«      } |
||«      ||z  z
  }|s||= Œ$|||<   Œ* |j                  «       }|�|||   f}	 n9 |	\  }}||v r||xx   |z  cc<   n|||<   ||= |j                  «       }|�|||   f}	|rŒ²|S rô  )r\   r†   re   rö  r9   r5   r§   rŽ   r  ÚLTr³   rè   r6  r›   )r©   ÚGrx   r9   r5   r§   rŽ   r"  r  Últfrè   ÚgÚtqrS   rT   ÚmgÚcgÚm1Úc1ÚltmÚltcs                        r8   r   zPolyElement.rem#  sz  € ØˆÜ�aœÔ%Ø�ˆAÜ�1ŒvÜ#Ð$9Ó:Ð:Ø�v‰vˆØ—‘ˆØ�{‰{ˆØ×(Ñ(ˆØ�I‰IˆØ—;‘;“=ˆØ�d‰dˆØ�F‰F‹HˆØ�e‰eˆÙØò &�Ù˜c 1§4¡4Ó(�Ø‘>Ø‘D�A�qØ"#§+¡+£-ò '™˜˜BÙ)¨"¨aÓ0˜Ù   T›]¨Q¨r©TÑ1˜Ù!Ø ! "¡à$&˜A˜bšEð'ð Ÿ.™.Ó*�CØ�Ø! 1 S¡6˜k˜áð&ð" ‘��SØ˜!‘8Ø�c“F˜c‘M”Fà �A�c‘FØ�c�FØ—n‘nÓ&�Ø�?Ø˜q ™v˜+�Cò5 ð8 ˆr:   c                ó*   — | j                  |«      d   S ©Nr   )r•   )rx   r*  s     r8   r  zPolyElement.quoP  s   € Ø�u‰u�Q‹x˜‰{Ðr:   c                óJ   — | j                  |«      \  }}|s|S t        | |«      ‚r[   )r•   r$   )rx   r*  Úqr"  s       r8   r  zPolyElement.exquoS  s(   € Ø�u‰u�Q‹x‰ˆˆ1áØˆHä% a¨Ó+Ð+r:   c                ó¼   — | | j                   j                  v r| j                  «       }n| }|\  }}|j                  |«      }|€|||<   |S ||z  }|r|||<   |S ||= |S )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  zPolyElement._iadd_monom[  s~   € ð8 �4—9‘9×&Ñ&Ñ&Ø—Y‘Y“[‰FàˆFØ‰ˆˆeØ�J‰J�tÓˆØˆ9Ø ˆF�4‰Lð ˆð �‰JˆAÙØ ��t‘ð ˆð ˜4�LØˆr:   c                ó^  — | }||j                   j                  v r|j                  «       }|\  }}|j                  }|j                   j                  j
                  }|j                   j                  }|j                  «       D ](  \  }	}
 ||	|«      } |||«      |
|z  z   }|r|||<   Œ&||= Œ* |S )aE  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©   rS  r9  rR  rS   rT   rè   r§   rŽ   rJ  rK  ÚkarÕ   s                r8   r  zPolyElement._iadd_poly_monom‡  s­   € ð* ˆØ�—‘×"Ñ"Ñ"Ø—‘“ˆBØ‰ˆˆAØ�f‰fˆØ�w‰w�~‰~×"Ñ"ˆØ—w‘w×+Ñ+ˆØ—H‘H“Jò 	‰DˆAˆqÙ˜a Ó#ˆBÙ˜˜D“M A a¡CÑ'ˆEÙØ��2’à�r‘Fð	ð ˆ	r:   c                óš   ‡— | j                   j                  |«      Š| st        S ‰dk  ryt        ˆfd„| j	                  «       D «       «      S )z�
        The leading degree in ``x`` or the main variable.

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

        r   c              3  ó(   •K  — | ]	  }|‰   –— Œ y ­wr[   rY   ©r_   rØ   rª   s     €r8   ra   z%PolyElement.degree.<locals>.<genexpr>º  ó   øè ø€ Ò< E�u˜Q•xÑ<ùó   ƒ)r9   r÷   r   rw   r·  ©rx   Úxrª   s     @r8   ÚdegreezPolyElement.degree¬  ó?   ø€ ð �F‰F�L‰L˜‹OˆáÜˆKØ�ŠUØäÓ<¨Q¯\©\«^Ô<Ó<Ð<r:   c                ó®   — | st         f| j                  j                  z  S t        t	        t
        t        t        | j                  «       Ž «      «      «      S )z“
        A tuple containing leading degrees in all variables.

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

        )	r   r9   rj   ry   rD   rw   rC   rH   r·  r¦  s    r8   ÚdegreeszPolyElement.degrees¼  ó>   € ñ Ü�7˜1Ÿ6™6Ÿ<™<Ñ'Ð'äœœS¤$¤s¨A¯L©L«NÐ';Ó"<Ó=Ó>Ð>r:   c                óš   ‡— | j                   j                  |«      Š| st        S ‰dk  ryt        ˆfd„| j	                  «       D «       «      S )z�
        The tail degree in ``x`` or the main variable.

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

        r   c              3  ó(   •K  — | ]	  }|‰   –— Œ y ­wr[   rY   r?  s     €r8   ra   z*PolyElement.tail_degree.<locals>.<genexpr>Ö  r@  rA  )r9   r÷   r   Úminr·  rB  s     @r8   Útail_degreezPolyElement.tail_degreeÈ  rE  r:   c                ó®   — | st         f| j                  j                  z  S t        t	        t
        t        t        | j                  «       Ž «      «      «      S )z�
        A tuple containing tail degrees in all variables.

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

        )	r   r9   rj   ry   rD   rK  rC   rH   r·  r¦  s    r8   Útail_degreeszPolyElement.tail_degreesØ  rH  r:   c                ó>   — | r| j                   j                  | «      S y)aT  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›   zPolyElement.leading_expvä  s   € ñ Ø—9‘9×)Ñ)¨$Ó/Ð/àr:   c                ób   — | j                  || j                  j                  j                  «      S r[   )rè   r9   r5   r§   ©r©   r«   s     r8   Ú
_get_coeffzPolyElement._get_coeffø  s#   € Ø�x‰x˜˜dŸi™i×.Ñ.×3Ñ3Ó4Ð4r:   c                ón  — |dk(  r%| j                  | j                  j                  «      S | j                  j                  |«      rct	        |j                  «       «      }t        |«      dk(  r<|d   \  }}|| j                  j                  j                  k(  r| j                  |«      S t        d|z  «      ‚)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)
rR  r9   r‰   rÍ   rC   r6  rz   r5   rŒ   rÞ   )r©   rÌ   r<  rØ   rÕ   s        r8   rÕ   zPolyElement.coeffû  s™   € ð4 �aŠ<Ø—?‘? 4§9¡9×#7Ñ#7Ó8Ð8Ø�Y‰Y×!Ñ! 'Ô*Ü˜×*Ñ*Ó,Ó-ˆEÜ�5‹z˜QŠØ$ Q™x‘��uØ˜DŸI™I×,Ñ,×0Ñ0Ò0ØŸ?™?¨5Ó1Ð1äÐ6¸Ñ@ÓAÐAr:   c                óL   — | j                  | j                  j                  «      S )z"Returns the constant coefficient. )rR  r9   r‰   r®   s    r8   rX  zPolyElement.const   s   € à�‰˜tŸy™y×3Ñ3Ó4Ð4r:   c                ó@   — | j                  | j                  «       «      S r[   )rR  r›   r®   s    r8   r˜  zPolyElement.LC$  s   € à�‰˜t×0Ñ0Ó2Ó3Ð3r:   c                óV   — | j                  «       }|€| j                  j                  S |S r[   )r›   r9   r‰   rQ  s     r8   ÚLMzPolyElement.LM(  s*   € à× Ñ Ó"ˆØˆ<Ø—9‘9×'Ñ'Ð'àˆKr:   c                óœ   — | j                   j                  }| j                  «       }|r#| j                   j                  j                  ||<   |S )a  
        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©   r  r«   s      r8   Úleading_monomzPolyElement.leading_monom0  s@   € ð �I‰I�N‰NˆØ× Ñ Ó"ˆÙØ—i‘i×&Ñ&×*Ñ*ˆAˆd‰GØˆr:   c                ó¸   — | j                  «       }|€6| j                  j                  | j                  j                  j                  fS || j                  |«      fS r[   )r›   r9   r‰   r5   r§   rR  rQ  s     r8   r)  zPolyElement.LTE  sN   € à× Ñ Ó"ˆØˆ<Ø—I‘I×(Ñ(¨$¯)©)×*:Ñ*:×*?Ñ*?Ð@Ð@à˜$Ÿ/™/¨$Ó/Ð0Ð0r:   c                óf   — | j                   j                  }| j                  «       }|�| |   ||<   |S )a  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›   rY  s      r8   Úleading_termzPolyElement.leading_termM  s7   € ð �I‰I�N‰NˆØ× Ñ Ó"ˆØÐØ˜4‘jˆAˆd‰GØˆr:   c                ó°   ‡— ‰€| j                   j                  Šnt        j                  ‰«      Š‰t        u rt        |d„ d¬«      S t        |ˆfd„d¬«      S )Nc                ó   — | d   S r5  rY   )rØ   s    r8   rq   z%PolyElement._sorted.<locals>.<lambda>h  s
   € °°q±€ r:   T)rv   Úreversec                ó   •—  ‰| d   «      S r5  rY   )rØ   r6   s    €r8   rq   z%PolyElement._sorted.<locals>.<lambda>j  s   ø€ ±°u¸Q±x³€ r:   )r9   r6   r}   r|   r    Úsorted)r©   rX   r6   s     `r8   Ú_sortedzPolyElement._sorteda  sL   ø€ Øˆ=Ø—I‘I—O‘O‰Eä×'Ñ'¨Ó.ˆEà”C‰<Ü˜#Ñ#9À4ÔHÐHä˜#Ó#@È$ÔOÐOr:   c                óV   — | j                  |«      D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )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]

        ©r<  )r©   r6   Ú_rÕ   s       r8   rP   zPolyElement.coeffsl  s%   € ð0 (,§z¡z°%Ó'8×:™8˜1˜e’Ó:Ð:ùÓ:ó   •%c                óV   — | j                  |«      D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )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)]

        re  )r©   r6   rØ   rf  s       r8   ÚmonomszPolyElement.monoms†  s%   € ð0 (,§z¡z°%Ó'8×:™8˜5 !’Ó:Ð:ùÓ:rg  c                óT   — | j                  t        | j                  «       «      |«      S )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)]

        )rc  rC   rI   )r©   r6   s     r8   r<  zPolyElement.terms   s    € ð0 �|‰|œD §¡£Ó.°Ó6Ð6r:   c                ó4   — t        | j                  «       «      S )z,Iterator over coefficients of a polynomial. )ÚiterrF   r®   s    r8   Ú
itercoeffszPolyElement.itercoeffsº  ó   € ä�D—K‘K“MÓ"Ð"r:   c                ó4   — t        | j                  «       «      S )z)Iterator over monomials of a polynomial. )rl  rV  r®   s    r8   r·  zPolyElement.itermonoms¾  ó   € ä�D—I‘I“KÓ Ð r:   c                ó4   — t        | j                  «       «      S )z%Iterator over terms of a polynomial. )rl  rI   r®   s    r8   r6  zPolyElement.itertermsÂ  ó   € ä�D—J‘J“LÓ!Ð!r:   c                ó4   — t        | j                  «       «      S )z+Unordered list of polynomial coefficients. )rC   rF   r®   s    r8   Ú
listcoeffszPolyElement.listcoeffsÆ  rn  r:   c                ó4   — t        | j                  «       «      S )z(Unordered list of polynomial monomials. )rC   rV  r®   s    r8   Ú
listmonomszPolyElement.listmonomsÊ  rp  r:   c                ó4   — t        | j                  «       «      S )z$Unordered list of polynomial terms. rN  r®   s    r8   Ú	listtermszPolyElement.listtermsÎ  rr  r:   c                óŽ   — | | j                   j                  v r| |z  S |s| j                  «        y| D ]  }| |xx   |z  cc<   Œ | S )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)r  rT   rð   s      r8   rî  zPolyElement.imul_numÒ  sO   € ð4 �—‘× Ñ Ñ Ø�Q‘3ˆJÙØ�G‰GŒIØØò 	ˆCØˆc‹F�a‰KŒFð	àˆr:   c                óž   — | j                   j                  }|j                  }|j                  }| j	                  «       D ]  } |||«      }Œ |S )z*Returns GCD of polynomial's coefficients. )r9   r5   r§   r™   rm  )rx   r5   Úcontr™   rÕ   s        r8   r­  zPolyElement.contentõ  sI   € à—‘—‘ˆØ�{‰{ˆØ�j‰jˆà—\‘\“^ò 	$ˆEÙ�t˜UÓ#‰Dð	$ð ˆr:   c                ó–   — | j                  «       }|| j                  j                  j                  k(  r|| fS || j	                  |«      fS )z,Returns content and a primitive polynomial. )r­  r9   r5   r§   rø  )rx   r|  s     r8   Ú	primitivezPolyElement.primitive   sA   € à�y‰y‹{ˆØ�1—6‘6—=‘=×%Ñ%Ò%Ø˜!�9ÐØ�Q—\‘\ $Ó'Ð'Ð'r:   c                ó@   — | s| S | j                  | j                  «      S )z5Divides all coefficients by the leading coefficient. )rø  r˜  r¦  s    r8   ÚmoniczPolyElement.monic  s   € áØˆHà—<‘< §¡Ó%Ð%r:   c                ó®   — |s| j                   j                  S | j                  «       D ��cg c]  \  }}|||z  f‘Œ }}}| j                  |«      S c c}}w r[   )r9   r§   r6  r‡   )rx   rC  rØ   rÕ   r<  s        r8   rr  zPolyElement.mul_ground  sM   € ÙØ—6‘6—;‘;Ðà78·{±{³}×F¡| u¨e�5˜% ™'Ò"ÐFˆÑFØ�u‰u�U‹|Ðùó Gs   ¬Ac                ó²   — | j                   j                  }| j                  «       D ��cg c]  \  }} |||«      |f‘Œ }}}| j                  |«      S c c}}w r[   )r9   rŽ   rI   r‡   )rx   rØ   rŽ   Úf_monomÚf_coeffr<  s         r8   Ú	mul_monomzPolyElement.mul_monom  sR   € Ø—v‘v×*Ñ*ˆØRS×RYÑRYÓR[×]Ñ>N¸gÀw‘< ¨Ó/°Ò9Ð]ˆÑ]Ø�u‰u�U‹|Ðùó ^s   ªAc                óJ  — |\  }}| r|s| j                   j                  S || j                   j                  k(  r| j                  |«      S | j                   j                  }| j                  «       D ��cg c]  \  }} |||«      ||z  f‘Œ }}}| j                  |«      S c c}}w r[   )r9   r§   r‰   rr  rŽ   rI   r‡   )rx   r&  rØ   rÕ   rŽ   rƒ  r„  r<  s           r8   Úmul_termzPolyElement.mul_term  s“   € Ø‰ˆˆuá™Ø—6‘6—;‘;ÐØ�a—f‘f×'Ñ'Ò'Ø—<‘< Ó&Ð&à—v‘v×*Ñ*ˆØXY×X_ÑX_ÓXa×cÑDTÀGÈW‘< ¨Ó/°¸±Ò?ÐcˆÑcØ�u‰u�U‹|Ðùó ds   Á3Bc           	     óŠ  — | j                   j                  }|st        d«      ‚| r||j                  k(  r| S |j                  r8|j
                  }| j                  «       D ��cg c]  \  }}| |||«      f‘Œ }}}n-| j                  «       D ��cg c]  \  }}||z  rŒ|||z  f‘Œ }}}| j                  |«      S c c}}w c c}}w rô  )r9   r5   rö  rŒ   rD  r  r6  r‡   )rx   rC  r5   r  rØ   rÕ   r<  s          r8   rø  zPolyElement.quo_ground&  s®   € Ø—‘—‘ˆáÜ#Ð$9Ó:Ð:Ù�A˜Ÿ™’OØˆHà�?Š?Ø—*‘*ˆCØABÇÁÃ×P±°¸�u™c %¨›mÒ,ÐPˆEÒPà>?¿k¹k»m×`©l¨e°UÐTYÐ\]ÓT]�u˜e q™jÒ)Ð`ˆEÑ`à�u‰u�U‹|Ðùó	 Qùã`s   Á"B9ÂB?Â	B?c                ój  — |\  }}|st        d«      ‚| s| j                  j                  S || j                  j                  k(  r| j	                  |«      S | j                  «       }| j                  «       D �cg c]  } |||«      ‘Œ }}| j                  |D �cg c]  }|€Œ|‘Œ	 c}«      S c c}w c c}w rô  )rö  r9   r§   r‰   rø  r  r6  r‡   )rx   r&  rØ   rÕ   r  Útr<  s          r8   Úquo_termzPolyElement.quo_term6  s�   € Ø‰ˆˆuáÜ#Ð$9Ó:Ð:ÙØ—6‘6—;‘;ÐØ�a—f‘f×'Ñ'Ò'Ø—<‘< Ó&Ð&à—;‘;“=ˆà-.¯[©[«]Ö<¨‘(˜1˜dÕ#Ð<ˆÐ<Ø�u‰u %Ö:˜Q¨1©=’qÒ:Ó;Ð;ùò =ùÚ:s   Á7B+ÂB0Â B0c                ób  — | j                   j                  j                  r@g }| j                  «       D ]*  \  }}||z  }||dz  kD  r||z
  }|j	                  ||f«       Œ, n'| j                  «       D ��cg c]  \  }}|||z  f‘Œ }}}| j                  |«      }|j                  «        |S c c}}w )Nr¼  )r9   r5   Úis_ZZr6  r¨   r‡   rO  )rx   r  r<  rØ   rÕ   r¬   s         r8   Útrunc_groundzPolyElement.trunc_groundE  s¨   € Ø�6‰6�=‰=×ÒØˆEà !§¡£ò -‘��uØ ™	�à˜1 ™6’>Ø! A™I�Eà—‘˜e U˜^Õ,ñ-ð >?¿[¹[»]×L©\¨U°E�u˜e a™iÒ(ÐLˆEÑLà�u‰u�U‹|ˆØ�‰ÔØˆùó	 Ms   Á4B+c                óà   — | }|j                  «       }|j                  «       }|j                  j                  j                  ||«      }|j	                  |«      }|j	                  |«      }|||fS r[   )r­  r9   r5   r™   rø  )r©   r,  rx   ÚfcÚgcr™   s         r8   Úextract_groundzPolyElement.extract_groundY  s_   € ØˆØ�Y‰Y‹[ˆØ�Y‰Y‹[ˆà�f‰f�m‰m×Ñ  BÓ'ˆà�L‰L˜ÓˆØ�L‰L˜Óˆà�A�qˆyÐr:   c                óä   — | s | j                   j                  j                  S | j                   j                  j                  } || j	                  «       D �cg c]
  } ||«      ‘Œ c}«      S c c}w r[   )r9   r5   r§   Úabsrm  )rx   Ú	norm_funcÚ
ground_absrÕ   s       r8   Ú_normzPolyElement._norme  sP   € ÙØ—6‘6—=‘=×%Ñ%Ð%àŸ™Ÿ™×*Ñ*ˆJÙ¸a¿l¹l»nÖN°U™z¨%Õ0ÒNÓOÐOùÒNs   ÁA-c                ó,   — | j                  t        «      S r[   )r—  rw   r¦  s    r8   Úmax_normzPolyElement.max_norml  ó   € Ø�w‰w”s‹|Ðr:   c                ó,   — | j                  t        «      S r[   )r—  rE   r¦  s    r8   Úl1_normzPolyElement.l1_normo  rš  r:   c                ó@  — | j                   }| gt        |«      z   }dg|j                  z  }|D ]<  }|j                  «       D ]'  }t	        |«      D ]  \  }}t        ||   |«      ||<   Œ Œ) Œ> t	        |«      D ]  \  }}	|	rŒ	d||<   Œ t        |«      }t        d„ |D «       «      r||fS g }
|D ]f  }|j                  }|j                  «       D ]4  \  }}t        ||«      D ��cg c]
  \  }}||z  ‘Œ }}}||t        |«      <   Œ6 |
j                  |«       Œh ||
fS c c}}w )Nr   rÆ   c              3  ó&   K  — | ]	  }|d k(  –— Œ y­wr±  rY   )r_   rp   s     r8   ra   z&PolyElement.deflate.<locals>.<genexpr>ƒ  s   è ø€ Ò!˜!ˆq�A�vÑ!ùs   ‚)r9   rC   rj   r·  rú   r   ry   re   r§   r6  rH   r¨   )rx   r*  r9   rU   ÚJr  rØ   rª   rS   rp   ÚHÚhÚIrÕ   rñ  ÚNs                   r8   ÚdeflatezPolyElement.deflater  s@  € Ø�v‰vˆØ�”d˜1“g‘ˆàˆC�—
‘
‰Nˆàò 	)ˆAØŸ™›ò )�Ü% eÓ,ò )‘D�A�qÜ  !¡ a›=�A�a’Dñ)ñ)ð	)ô
 ˜a“Lò 	‰DˆAˆqÚØ��!’ð	ô �!‹HˆäÑ!˜qÔ!Ô!Ø�e�8ˆOàˆàò 	ˆAØ—	‘	ˆAàŸK™K›Mò $‘��5Ü),¨Q°«×4¡  A�a˜1“fÐ4�Ñ4Ø#�”%˜“(’ð$ð �H‰H�Q�Kð	ð �!ˆtˆùó 5s   Ã!D
c                óÌ   — | j                   j                  }| j                  «       D ]4  \  }}t        ||«      D ��cg c]
  \  }}||z  ‘Œ }}}||t	        |«      <   Œ6 |S c c}}w r[   )r9   r§   r6  rH   ry   )rx   rŸ  r¬   r¢  rÕ   rª   rñ  r£  s           r8   ÚinflatezPolyElement.inflate“  sb   € Ø�v‰v�{‰{ˆàŸ™›ò 	#‰HˆAˆuÜ"% a¨£)×-™$˜!˜Q�!�A“#Ð-ˆAÑ-Ø"ˆD”�q“ŠNð	#ð ˆùó .s   ¼A c                óZ  — | }|j                   j                  }|j                  s8|j                  «       \  }}|j                  «       \  }}|j	                  ||«      }||z  j                  |j                  |«      «      }|j                  s|j                  «      S |j                  «       S r[   )	r9   r5   rD  r~  r—   r  r™   rr  r€  )r©   r,  rx   r5   r�  r‘  rT   r¡  s           r8   r—   zPolyElement.lcmœ  s„   € ØˆØ—‘—‘ˆà�ŠØ—K‘K“M‰EˆB�Ø—K‘K“M‰EˆB�Ø—
‘
˜2˜rÓ"ˆAàˆq‰S�I‰I�a—e‘e˜A“hÓˆà�ŠØ—<‘< “?Ð"à—7‘7“9Ðr:   c                ó*   — | j                  |«      d   S r5  )Ú	cofactors©rx   r,  s     r8   r™   zPolyElement.gcd¬  s   € Ø�{‰{˜1‹~˜aÑ Ð r:   c                ó  — | s|s| j                   j                  }|||fS | s| j                  |«      \  }}}|||fS |s|j                  | «      \  }}}|||fS t        | «      dk(  r| j	                  |«      \  }}}|||fS t        |«      dk(  r|j	                  | «      \  }}}|||fS | j                  |«      \  }\  } }| j                  |«      \  }}}|j                  |«      |j                  |«      |j                  |«      fS rå   )r9   r§   Ú	_gcd_zerorz   Ú
_gcd_monomr¤  Ú_gcdr¦  )rx   r,  r§   r¡  ÚcffÚcfgrŸ  s          r8   r©  zPolyElement.cofactors¯  s  € Ù™Ø—6‘6—;‘;ˆDØ˜˜tÐ#Ð#ÙØŸ+™+ a›.‰KˆAˆs�CØ�c˜3�;ÐÙØŸ+™+ a›.‰KˆAˆs�CØ�c˜3�;ÐÜ�‹V�qŠ[ØŸ,™, q›/‰KˆAˆs�CØ�c˜3�;ÐÜ�‹V�qŠ[ØŸ,™, q›/‰KˆAˆs�CØ�c˜3�;Ðà—I‘I˜a“L‰	ˆ‰6ˆAˆqØ—f‘f˜Q“i‰ˆˆ3�à—	‘	˜!“˜cŸk™k¨!›n¨c¯k©k¸!«nÐ=Ð=r:   c                óŠ   — | j                   j                  | j                   j                  }}|j                  r|||fS | || fS r[   )r9   rŒ   r§   r¡  )rx   r,  rŒ   r§   s       r8   r¬  zPolyElement._gcd_zeroÅ  s@   € Ø—F‘F—J‘J §¡§¡ˆTˆØ×ÒØ�d˜C�<Ðà�2�t˜c˜T�>Ð!r:   c                óB  — | j                   }|j                  j                  }|j                  j                  }|j                  }|j
                  }t        | j                  «       «      d   \  }}||}
}	|j                  «       D ]  \  }} ||	|«      }	 ||
|«      }
Œ | j                  |	|
fg«      }| j                   |||	«       |||
«      fg«      }| j                  |j                  «       D ��cg c]  \  }} |||	«       |||
«      f‘Œ c}}«      }|||fS c c}}w r5  )	r9   r5   r™   r  rš   r”   rC   r6  r‡   )rx   r,  r9   Ú
ground_gcdÚ
ground_quorš   r”   ÚmfÚcfÚ_mgcdÚ_cgcdr.  r/  r¡  r¯  r°  s                   r8   r­  zPolyElement._gcd_monomÌ  s  € Ø�v‰vˆØ—[‘[—_‘_ˆ
Ø—[‘[—_‘_ˆ
Ø×(Ñ(ˆØ×*Ñ*ˆÜ�a—k‘k“mÓ$ QÑ'‰ˆˆBØ˜2ˆuˆØ—k‘k“mò 	*‰FˆB�Ù  ¨Ó+ˆEÙ˜u bÓ)‰Eð	*ð �E‰E�E˜5�>Ð"Ó#ˆØ�e‰e‘m B¨Ó.±
¸2¸uÓ0EÐFÐGÓHˆØ�e‰eÐUV×U`ÑU`ÓUb×cÉ6È2Èr‘m B¨Ó.±
¸2¸uÓ0EÒFÓcÓdˆØ�#�sˆ{Ðùó ds   Ã2D
c                óÚ   — | j                   }|j                  j                  r| j                  |«      S |j                  j                  r| j                  |«      S |j                  | |«      S r[   )r9   r5   Úis_QQÚ_gcd_QQr�  Ú_gcd_ZZÚdmp_inner_gcd)rx   r,  r9   s      r8   r®  zPolyElement._gcdÜ  sT   € Ø�v‰vˆà�;‰;×ÒØ—9‘9˜Q“<ÐØ�[‰[×ÒØ—9‘9˜Q“<Ðà×%Ñ% a¨Ó+Ð+r:   c                ó   — t        | |«      S r[   r   rª  s     r8   r¼  zPolyElement._gcd_ZZæ  s   € Ü�a˜‹|Ðr:   c                óx  — | }|j                   }|j                  |j                  j                  «       ¬«      }|j	                  «       \  }}|j	                  «       \  }}|j                  |«      }|j                  |«      }|j                  |«      \  }}}	|j                  |«      }|j                  |j                  «       }}
|j                  |«      j                  |j                  j                  |
|«      «      }|	j                  |«      j                  |j                  j                  |
|«      «      }	|||	fS )Nr   )r9   rÂ   r5   rF  rL  r=  r¼  r˜  r€  rr  r  )r©   r,  rx   r9   r;  r¶  r/  r¡  r¯  r°  rT   s              r8   r»  zPolyElement._gcd_QQé  sù   € ØˆØ�v‰vˆØ—:‘: T§[¡[×%9Ñ%9Ó%;�:Ó<ˆà—‘Ó ‰ˆˆAØ—‘Ó ‰ˆˆAà�J‰J�xÓ ˆØ�J‰J�xÓ ˆà—i‘i “l‰ˆˆ3�à�J‰J�tÓˆØ�t‰t�Q—W‘W“Yˆ1ˆà�l‰l˜4Ó ×+Ñ+¨D¯K©K¯O©O¸A¸rÓ,BÓCˆØ�l‰l˜4Ó ×+Ñ+¨D¯K©K¯O©O¸A¸rÓ,BÓCˆà�#�sˆ{Ðr:   c                ó<  — | }|j                   }|s||j                  fS |j                  }|j                  r|j                  s|j                  |«      \  }}}ná|j                  |j                  «       ¬«      }|j                  «       \  }	}|j                  «       \  }
}|j                  |«      }|j                  |«      }|j                  |«      \  }}}|j                  j                  |
|	«      \  }}
}	|j                  |«      }|j                  |«      }|j                  |
«      }|j                  |	«      }|j                  «       }||j                  k(  r	 ||fS ||j                   k(  r
| | }}||fS |j                  |«      }|j                  |«      }||fS )a  
        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   rD  rE  r©  rÂ   rF  rL  r=  rr  Úcanonical_unit)r©   r,  rx   r9   r5   rf  r  r7  r;  ÚcqÚcpÚus               r8   ÚcancelzPolyElement.cancelþ  s~  € ð ˆØ�v‰vˆáØ�d—h‘h�;Ðà—‘ˆà—’ F×$9Ò$9Ø—k‘k !“n‰GˆAˆq‘!à—z‘z¨¯©Ó):�zÓ;ˆHà—N‘NÓ$‰EˆB�Ø—N‘NÓ$‰EˆB�à—
‘
˜8Ó$ˆAØ—
‘
˜8Ó$ˆAà—k‘k !“n‰GˆAˆq�!Ø Ÿ™×1Ñ1°"°bÓ9‰IˆAˆr�2à—
‘
˜4Ó ˆAØ—
‘
˜4Ó ˆAà—‘˜RÓ ˆAØ—‘˜RÓ ˆAð
 ×ÑÓˆØ�—
‘
Š?Øð �!ˆtˆð �6—:‘:�+ÒØ�2˜�rˆqˆAð
 �!ˆtˆð —‘˜Q“ˆAØ—‘˜Q“ˆAà�!ˆtˆr:   c                ód   — | j                   j                  }|j                  | j                  «      S r[   )r9   r5   rÁ  r˜  )rx   r5   s     r8   rÁ  zPolyElement.canonical_unit6	  s$   € Ø—‘—‘ˆØ×$Ñ$ Q§T¡TÓ*Ð*r:   c                ó  — | j                   }|j                  |«      }|j                  |«      }|j                  }| j	                  «       D ]7  \  }}||   sŒ|j                  ||«      }|j                  |||   z  «      ||<   Œ9 |S )a!  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§   r6  r”   rÒ   )	rx   rC  r9   rª   rS   r,  r«   rÕ   Úes	            r8   ÚdiffzPolyElement.diff:	  s†   € ð �v‰vˆØ�J‰J�q‹MˆØ×Ñ Ó"ˆØ�I‰IˆØŸ;™;›=ò 	6‰KˆD�%Ø�A‹wØ×&Ñ& t¨QÓ/�Ø—‘ u¨T°!©W¡}Ó5��!’ð	6ð ˆr:   c                ó$  — dt        |«      cxk  r| j                  j                  k  r;n n8| j                  t	        t        | j                  j                  |«      «      «      S t        d| j                  j                  ›dt        |«      ›�«      ‚)Nr   z expected at least 1 and at most z values, got )rz   r9   rj   ÚevaluaterC   rH   r3   rÞ   )rx   rF   s     r8   r'  z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                óÒ  — | }t        |t        «      r\|€Z|d   |dd  c\  }}}|j                  ||«      }|s|S |D ��cg c]  \  }}|j                  |«      |f‘Œ }}}|j                  |«      S |j                  }|j                  |«      }|j                  j                  |«      }|j                  dk(  r=|j                  j                  }|j                  «       D ]  \  \  }	}
||
||	z  z  z  }Œ |S |j                  |«      j                  }|j                  «       D ]@  \  }}
||   |d | ||dz   d  z   }}	|
||	z  z  }
||v r|
||   z   }
|
r|
||<   Œ5||= Œ9|
sŒ<|
||<   ŒB |S c c}}w )Nr   rÆ   )r\   rC   rË  rü   r9   r÷   r5   rÏ   rj   r§   r6  )r©   rC  ro   rx   ÚXÚYr9   rª   Úresultr   rÕ   r¬   rØ   s                r8   rË  zPolyElement.evaluateY	  s‹  € Øˆä�aœÔ 1 9Ø˜!™˜a  ˜eˆI‰FˆQ��AØ—
‘
˜1˜aÓ ˆAáØ�à34×6©¨!¨Q�q—v‘v˜a“y !’nÐ6�Ñ6Ø—z‘z !“}Ð$à�v‰vˆØ�J‰J�q‹MˆØ�K‰K×Ñ Ó"ˆà�:‰:˜Š?Ø—[‘[×%Ñ%ˆFà Ÿ{™{›}ò %‘‘��eØ˜%  1¡™*Ñ$‘ð%ð ˆMà—9‘9˜Q“<×$Ñ$ˆDà !§¡£ò ,‘��uØ  ™8 U¨2¨A Y°°q¸±s°t°Ñ%<�5�Ø˜a ™d™
�à˜D‘=Ø! D¨¡KÑ/�EáØ&+˜˜Ušà  ™KâØ&+˜˜Ušð,ð ˆKùóA 7s   ¾E#c                óT  — | }t        |t        «      r |€|D ]  \  }}|j                  ||«      }Œ |S |j                  }|j	                  |«      }|j
                  j                  |«      }|j                  dk(  rL|j
                  j                  }|j                  «       D ]  \  \  }}	||	||z  z  z  }Œ |j                  |«      S |j                  }
|j                  «       D ]C  \  }}	||   |d | dz   ||dz   d  z   }}|	||z  z  }	||
v r|	|
|   z   }	|	r|	|
|<   Œ8|
|= Œ<|	sŒ?|	|
|<   ŒE |
S )NrÆ   rl   )r\   rC   Úsubsr9   r÷   r5   rÏ   rj   r§   r6  rÖ   )r©   rC  ro   rx   rÍ  r9   rª   rÏ  r   rÕ   r¬   rØ   s               r8   rÑ  zPolyElement.subs…	  sO  € Øˆä�aœÔ 1 9Øò !‘��1Ø—F‘F˜1˜a“L‘ð!àˆHà�v‰vˆØ�J‰J�q‹MˆØ�K‰K×Ñ Ó"ˆà�:‰:˜Š?Ø—[‘[×%Ñ%ˆFà Ÿ{™{›}ò %‘‘��eØ˜%  1¡™*Ñ$‘ð%ð —?‘? 6Ó*Ð*à—9‘9ˆDà !§¡£ò ,‘��uØ  ™8 U¨2¨A Y°Ñ%5¸¸aÀ¹c¸d¸Ñ%C�5�Ø˜a ™d™
�à˜D‘=Ø! D¨¡KÑ/�EáØ&+˜˜Ušà  ™KâØ&+˜˜Ušð,ð ˆKr:   c                ó|  ‡‡‡— | j                  «       }|j                  }|j                  }|s||j                  g fS t	        |«      D �cg c]  }|j                  |dz   «      ‘Œ c}Ši Šˆˆfd„}t        t	        |dz
  «      «      }t        t	        |dd«      «      }|j                  }|rêd\  }	}
}t        |j                  «       «      D ]E  \  }\  Š}t        ˆfd„|D «       «      sŒt        d„ t        |‰«      D «       «      }||	kD  sŒ@|‰|}}
}	ŒG |	dk7  r|
|cŠ}nnwg }t        ‰‰dd d	z   «      D ]  \  }}|j                  ||z
  «       Œ ||j                  t        |«      |«      z  }|}t        |«      D ]  \  }}| |||«      z  }Œ ||z  }|rŒêt        t        |j                  ‰«      «      }|||fS c c}w )
aX  
        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                ó8   •— | |f‰vr‰|    |z  ‰| |f<   ‰| |f   S r[   rY   )rª   r   Úpoly_powersrU   s     €€r8   Úget_poly_powerz.PolyElement.symmetrize.<locals>.get_poly_powerñ	  s4   ø€ Ø�1ˆv˜[Ñ(Ø&+¨A¡h°¡k�˜Q ˜FÑ#Ø  1˜vÑ&Ð&r:   r   rö   )rö   NNc              3  ó:   •K  — | ]  }‰|   ‰|d z      k\  –— Œ y­wr±  rY   )r_   rª   rØ   s     €r8   ra   z)PolyElement.symmetrize.<locals>.<genexpr>ÿ	  s"   øè ø€ ÒA°A�u˜Q‘x 5¨¨Q©¡<Õ/ÑAùs   ƒc              3  ó,   K  — | ]  \  }}||z  –— Œ y ­wr[   rY   )r_   r   rS   s      r8   ra   z)PolyElement.symmetrize.<locals>.<genexpr> 
  s   è ø€ Ò E©¨¨A  1¥Ñ Eùs   ‚Nrl   )r³   r9   rj   r§   r¥   r!  rC   rú   r<  re   rw   rH   r¨   rÔ   ry   r3   )r©   rx   r9   r   rª   rÕ  rû   ÚweightsÚ	symmetricÚ_heightÚ_monomÚ_coeffrÕ   ÚheightÚ	exponentsr0  Úm2Úproductrò   rØ   rÔ  rU   s                      @@@r8   Ú
symmetrizezPolyElement.symmetrize¬	  sÖ  ú€ ðv �I‰I‹KˆØ�v‰vˆØ�J‰JˆáØ�d—i‘i Ð#Ð#ä38¸³8Ö<¨a�×$Ñ$ Q q¡SÕ)Ò<ˆàˆõ	'ô
 ”u˜Q ™U“|Ó$ˆÜ”u˜Q  2“Ó'ˆà—I‘Iˆ	áØ&4Ñ#ˆG�V˜Vä%.¨q¯w©w«yÓ%9ò GÑ!�‘>�E˜5ÜÓA¸ÔAÕAÜ Ñ E´°W¸eÓ1DÔ EÓE�Fà Ó'Ø28¸%À¨ ™ðGð ˜"Š}Ø% v��‘uààˆIÜ˜e U¨1¨2 Y°Ñ%5Ó6ò *‘��BØ× Ñ   b¡Õ)ð*ð ˜Ÿ™¤u¨YÓ'7¸Ó?Ñ?ˆIàˆGÜ! )Ó,ò 0‘��1Ø™>¨!¨QÓ/Ñ/‘ð0à�‰LˆAò1 ô4 ”s˜4Ÿ9™9 eÓ,Ó-ˆà˜!˜WÐ$Ð$ùòS =s   Á
F9c                ó–  ‡— | j                   }|j                  }t        t        |j                  t        |j                  «      «      «      Š|�||fg}nVt        |t        «      rt        |«      }n:t        |t        «      rt        |j                  «       ˆfd„¬«      }nt        d«      ‚t        |«      D ]!  \  }\  }}‰|   |j                  |«      f||<   Œ# | j                  «       D ]]  \  }}	t        |«      }|j                  }
|D ]  \  }}||   dc}||<   |sŒ|
||z  z  }
Œ |
j!                  t#        |«      |	f«      }
||
z  }Œ_ |S )Nc                ó   •— ‰| d      S r5  rY   )rJ  Úgens_maps    €r8   rq   z%PolyElement.compose.<locals>.<lambda>$
  s   ø€ ¸xÈÈ!É¹~€ r:   ru   z9expected a generator, value pair a sequence of such pairsr   )r9   r§   rG   rH   r3   r¥   rj   r\   rC   rb  rI   rÞ   rú   rá   r6  rŒ   r‡  ry   )rx   rC  ro   r9   r¬   ÚreplacementsrJ  r,  rØ   rÕ   Úsubpolyrª   r   rä  s                @r8   r  zPolyElement.compose
  sD  ø€ Ø�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��1Ø'¨™{¨D¯M©M¸!Ó,<Ð=ˆL˜ŠOð	>ð ŸK™K›Mò 
	‰LˆE�5Ü˜“KˆEØ—h‘hˆGà$ò $‘��1Ø# A™h¨���5˜‘8ÚØ˜q !™t‘O‘Gð$ð
 ×&Ñ&¬¨e«°eÐ'<Ó=ˆGØ�G‰O‰Dð
	ð ˆr:   c                óŠ  — | }|j                   j                  |«      }|j                  «       D ��cg c]  \  }}||   |k(  sŒ||f‘Œ }}}|s|j                   j                  S t	        |Ž \  }}	|D �cg c]  }|d| dz   ||dz   d z   ‘Œ }}|j                   j                  t        t	        ||	«      «      «      S c c}}w c c}w )aU  
        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

        Nrl   rÆ   )r9   r÷   r6  r§   rH   rJ   rG   )
r©   rC  Údegr  rª   rS   rT   r<  ri  rP   s
             r8   Ú	coeff_wrtzPolyElement.coeff_wrt9
  s¼   € ðT ˆØ�F‰F�L‰L˜‹OˆØ$%§K¡K£M×A™D˜A˜q°Q°q±T¸S³[�!�Q’ÐAˆÑAáØ—6‘6—;‘;Ðä˜e˜‰ˆ�Ø4:Ö;¨q�!�B�Q�%˜$‘,  1 q¡5 6 Ó*Ð;ˆÐ;Ø�v‰v×Ñ¤¤S¨°Ó%8Ó 9Ó:Ð:ùó Bùò <s   ±B:ÁB:Á2C c                óÄ  — | }|j                   j                  |«      }|j                  |«      }|j                  |«      }|dk  rt        d«      ‚||}}||k  r|S ||z
  dz   }|j	                  ||«      }	|j                   j
                  |   }
	 |j	                  ||«      }||z
  |dz
  }}||	z  }||z  |
|z  z  }||z
  }|j                  |«      }||k  rnŒI|	|z  }||z  S )a�  
        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÷   rD  rö  ré  r3   )r©   r,  rC  rx   ÚdfÚdgr"  Údrr£  Úlc_gÚxpÚlc_rrñ  ÚRr*  rT   s                   r8   ÚpremzPolyElement.premn
  s  € ðl ˆØ�F‰F�L‰L˜‹OˆØ�X‰X�a‹[ˆØ�X‰X�a‹[ˆà�Š6Ü#Ð$9Ó:Ð:à�2ˆ2ˆà�Š7ØˆHà�‰G�a‰Kˆà�{‰{˜1˜bÓ!ˆà�V‰V�[‰[˜‰^ˆàà—;‘;˜q "Ó%ˆDØ˜‘7˜A ™EˆqˆAà�D‘ˆAØ�D‘˜2˜q™5Ñ ˆAØ�A‘ˆAà—‘˜!“ˆBà�BŠwØð ð �A‰Iˆà�1‰uˆr:   c                óþ  — | }|j                   j                  |«      }|j                  |«      }|j                  |«      }|dk  rt        d«      ‚|||}}}||k  r||fS ||z
  dz   }	|j	                  ||«      }
|j                   j
                  |   }	 |j	                  ||«      }||z
  |	dz
  }	}||
z  }||||z  z  z   }||
z  }||z  ||z  z  }||z
  }|j                  |«      }||k  rnŒY|
|	z  }||z  }||z  }||fS )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,  rC  rx   rì  rí  r7  r"  rî  r£  rï  rð  rñ  rñ  ÚQrò  r*  rT   s                     r8   ÚpdivzPolyElement.pdivÉ
  s8  € ð` ˆØ�F‰F�L‰L˜‹Oˆà�X‰X�a‹[ˆØ�X‰X�a‹[ˆà�Š6Ü#Ð$9Ó:Ð:à�a˜ˆbˆ1ˆà�Š7Ø�a�4ˆKà�‰G�a‰KˆØ�{‰{˜1˜bÓ!ˆà�V‰V�[‰[˜‰^ˆàà—;‘;˜q "Ó%ˆDØ˜‘7˜A ™EˆqˆAà�D‘ˆAà�T˜2˜q™5‘LÑ ˆAà�D‘ˆAà�D‘˜2˜q™5Ñ ˆAà�A‘ˆAà—‘˜!“ˆBà�BŠwØð% ð( �!‰Gˆà�‰EˆØ�‰Eˆà�!ˆtˆr:   c                ó0   — | }|j                  ||«      d   S )aW  
        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,  rC  rx   s       r8   ÚpquozPolyElement.pquoG  s   € ð6 ˆØ�v‰v�a˜‹|˜A‰Ðr:   c                ód   — | }|j                  ||«      \  }}|j                  r|S t        ||«      ‚)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,  rC  rx   r7  r"  s         r8   ÚpexquozPolyElement.pexquoe  s5   € ð: ˆØ�v‰v�a˜‹|‰ˆˆ1à�9Š9ØˆHä% a¨Ó+Ð+r:   c                ó¨  — | }|j                   j                  |«      }|j                  |«      }|j                  |«      }||k  r||}}||}}|dk(  rddgS |dk(  r|dgS ||g}||z
  }d|dz   z  }|j                  ||«      }	|	|z  }	|j	                  ||«      }
|
|z  }d|g}| }|	r«|	j                  |«      }|j                  |	«       ||	|||z
  f\  }}}}|
 ||z  z  }|j                  ||«      }	|	j                  |«      }	|j	                  ||«      }
|dkD  r |
 |z  }||dz
  z  }|j                  |«      }n|
 }|j                  | «       |	rŒ«|S )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÷   rD  ró  ré  r¨   r  )r©   r,  rC  rx   r   rS   rò  Údrp   r¡  ÚlcrT   ÚSrJ  r  r7  s                   r8   ÚsubresultantszPolyElement.subresultantsŠ  s�  € ðD ˆØ�F‰F�L‰L˜‹OˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆàˆqŠ5Ø�aˆqˆAØ�aˆqˆAà�Š6Ø�q�6ˆMà�Š6Ø�q�6ˆMà�ˆFˆà�‰EˆØ�Q˜‘U‰Oˆð �F‰F�1�a‹LˆØ�‰Eˆð �[‰[˜˜AÓˆà�!‰Gˆà�ˆFˆàˆBˆáØ—‘˜“ˆAà�H‰H�QŒKØ˜A˜q ! a¡%˜‰JˆAˆq�!�Qà��a˜1‘f‘ˆAØ—‘�q˜!“ˆAØ—‘˜“
ˆAà—‘˜Q Ó"ˆBà�1ŠuØ�S˜Q‘J�Ø˜!˜a™%‘L�Ø—G‘G˜A“J‘à�C�à�H‰H�a�RŒLò' ð* ˆr:   c                ó:   — | j                   j                  | |«      S r[   )r9   Údmp_half_gcdexrª  s     r8   Ú
half_gcdexzPolyElement.half_gcdexç  s   € Ø�v‰v×$Ñ$ Q¨Ó*Ð*r:   c                ó:   — | j                   j                  | |«      S r[   )r9   Ú	dmp_gcdexrª  s     r8   ÚgcdexzPolyElement.gcdexê  ó   € Ø�v‰v×Ñ  1Ó%Ð%r:   c                ó:   — | j                   j                  | |«      S r[   )r9   Údmp_resultantrª  s     r8   Ú	resultantzPolyElement.resultantí  s   € Ø�v‰v×#Ñ# A qÓ)Ð)r:   c                ó8   — | j                   j                  | «      S r[   )r9   Údmp_discriminantr¦  s    r8   ÚdiscriminantzPolyElement.discriminantð  s   € Ø�v‰v×&Ñ& qÓ)Ð)r:   c                óz   — | j                   j                  r| j                   j                  | «      S t        d«      ‚)Nzpolynomial decomposition)r9   r
  Údup_decomposer%   r¦  s    r8   Ú	decomposezPolyElement.decomposeó  s0   € Ø�6‰6×ÒØ—6‘6×'Ñ'¨Ó*Ð*ä-Ð.HÓIÐIr:   c                ó|   — | j                   j                  r| j                   j                  | |«      S t        d«      ‚)Nzshift: use shift_list instead)r9   r
  Ú	dup_shiftr%   ©rx   ro   s     r8   ÚshiftzPolyElement.shiftù  s2   € Ø�6‰6×ÒØ—6‘6×#Ñ# A qÓ)Ð)ä-Ð.MÓNÐNr:   c                ó:   — | j                   j                  | |«      S r[   )r9   Ú	dmp_shiftr  s     r8   Ú
shift_listzPolyElement.shift_listÿ  r  r:   c                óz   — | j                   j                  r| j                   j                  | «      S t        d«      ‚)Nzsturm sequence)r9   r
  Ú	dup_sturmr%   r¦  s    r8   ÚsturmzPolyElement.sturm  s0   € Ø�6‰6×ÒØ—6‘6×#Ñ# AÓ&Ð&ä-Ð.>Ó?Ð?r:   c                ó8   — | j                   j                  | «      S r[   )r9   Údmp_gff_listr¦  s    r8   Úgff_listzPolyElement.gff_list  ó   € Ø�v‰v×"Ñ" 1Ó%Ð%r:   c                ó8   — | j                   j                  | «      S r[   )r9   Údmp_normr¦  s    r8   ÚnormzPolyElement.norm  s   € Ø�v‰v�‰˜qÓ!Ð!r:   c                ó8   — | j                   j                  | «      S r[   )r9   Údmp_sqf_normr¦  s    r8   Úsqf_normzPolyElement.sqf_norm  r  r:   c                ó8   — | j                   j                  | «      S r[   )r9   Údmp_sqf_partr¦  s    r8   Úsqf_partzPolyElement.sqf_part  r  r:   c                ó<   — | j                   j                  | |¬«      S )N)re   )r9   Údmp_sqf_list)rx   re   s     r8   Úsqf_listzPolyElement.sqf_list  s   € Ø�v‰v×"Ñ" 1¨#Ð"Ó.Ð.r:   c                ó8   — | j                   j                  | «      S r[   )r9   Údmp_factor_listr¦  s    r8   Úfactor_listzPolyElement.factor_list  s   € Ø�v‰v×%Ñ% aÓ(Ð(r:   r[   )F)›r~   r"  r#  r$  r+  r1  r‡   r4  r¯   r…   r¸   r³   r=  r@  r?  rL  rO  r¼   r¾   rW  r[  r_  ra  rd  rf  rh  rk  rü   rp  r  ru  rw  r]   r&  r•  rm  r™  r›  r�  rŸ  r¡  r¤  r§  r©  r«  r®  r¸  r½  rÁ  rÄ  rÇ  rÉ  rË  rÏ  rÍ  rÓ  rÒ  rÜ  rÖ  rå  rä  rã  râ  rû  r÷  r  r  r  r
  r  r  r  r•   r   r  r  r  r  rD  rG  rL  rN  r›   rR  rÕ   rX  r˜  rW  rZ  r)  r]  rc  rP   ri  r<  rm  r·  r6  rt  rv  rx  rî  r­  r~  r€  rr  r…  r‡  rø  r‹  rŽ  rù  r’  r—  r™  rœ  r¤  r¦  r—   r™   r©  r¬  r­  r®  r¼  r»  rÅ  rÁ  rÉ  r'  rË  rÑ  rá  r  ré  ró  rö  rø  rú  rÿ  r  r  r	  r  r  r  r  r  r  r   r#  r&  r)  r,  Ú__classcell__)rÄ   s   @r8   r†   r†   J  sP  ø„ Ù?ôò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)Qr$  Ú
__future__r   Úoperatorr   r   r   r   r   r	   Ú	functoolsr
   Útypesr   Úsympy.core.cacher   Úsympy.core.exprr   Úsympy.core.intfuncr   Úsympy.core.symbolr   r   rd   Ú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   rg   r2   rG   r†   rY   r:   r8   ú<module>rH     sö   ðÙ å "ç -× -Ý Ý å $Ý  Ý #ß 9ß 3Ý >Ý ,Ý 4ß CÑ CÝ -Ý ;Ý =Ý +Ý -ß 4÷6ó 6÷Gñ G÷=ñ =å 3ß +Ý 1Ý )àØ58ó !ó ð!ð< Ø!$ò ó ðð< Ø!$ò ó ðð< ñ2ó ð2òh@ôCˆ ô CôLN')�- °+¸tõ N')r:   