§
    OŠtj@P ã                  ó6  — 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¦  «        ZPd'S ))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)ÚpolluteÚorderúMonomialOrder | strc                ó:   — 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   Údomainr0   Ú_rings       úO/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/polys/rings.pyÚringr:   $   s$   € õ8 �W˜f eÑ,Ô,€EØˆ8�e”jÑ Ð ó    c                ó6   — 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'>

    r3   r6   s       r9   Úxringr=   C   s"   € õ8 �W˜f eÑ,Ô,€EØ�5”:ÐÐr;   c                óp   — t          | ||¦  «        }t          d„ |j        D ¦   «         |j        ¦  «         |S )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'>

    c                ó   — g | ]	}|j         ‘Œ
S © )Úname)Ú.0Úsyms     r9   ú
<listcomp>zvring.<locals>.<listcomp>~   s   € Ð1Ð1Ð1˜3ˆcŒhÐ1Ð1Ð1r;   )r4   r/   r   r5   r6   s       r9   ÚvringrE   b   s=   € õ6 �W˜f eÑ,Ô,€EÝÐ1Ð1 %¤-Ð1Ñ1Ô1°5´:Ñ>Ô>Ð>Ø€Lr;   c                ó(  ‡
— d}t          | ¦  «        s| gd}} t          t          t          | ¦  «        ¦  «        } t	          ||¦  «        }t          | |¦  «        \  }}|j        €^t          d„ |D ¦   «         g ¦  «        }t          ||¬¦  «        \  |_        }t          t          ||¦  «        ¦  «        Š
ˆ
fd„|D ¦   «         }t          |j        |j        |j        ¦  «        }t          t          |j        |¦  «        ¦  «        }	|r
||	d         fS ||	fS )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'>

    FTNc                óP   — g | ]#}t          |                     ¦   «         ¦  «        ‘Œ$S r@   ©ÚlistÚvalues)rB   Úreps     r9   rD   zsring.<locals>.<listcomp>§   s(   € Ð;Ð;Ð;¨c•t˜CŸJšJ™LœLÑ)Ô)Ð;Ð;Ð;r;   )Úoptc                óP   •— g | ]"}ˆfd „|                      ¦   «         D ¦   «         ‘Œ#S )c                ó(   •— i | ]\  }}|‰|         “ŒS r@   r@   )rB   ÚmÚcÚ	coeff_maps      €r9   ú
<dictcomp>z$sring.<locals>.<listcomp>.<dictcomp>¬   s#   ø€ Ð9Ð9Ð9¡T Q¨��I˜a”LÐ9Ð9Ð9r;   )Úitems)rB   rK   rQ   s     €r9   rD   zsring.<locals>.<listcomp>¬   s6   ø€ ÐJÐJÐJ¸cÐ9Ð9Ð9Ð9¨S¯YªY©[¬[Ð9Ñ9Ô9ÐJÐJÐJr;   r   )r.   rI   Úmapr   r'   r*   r7   Úsumr   ÚdictÚzipr4   r5   r0   Ú	from_dict)Úexprsr   ÚoptionsÚsinglerL   ÚrepsÚcoeffsÚ
coeffs_domr8   ÚpolysrQ   s             @r9   Úsringr`   �   s   ø€ ð4 €Få�uÑÔð &Ø˜ ˆvˆå••W˜eÑ$Ô$Ñ%Ô%€EÝ
˜ Ñ
)Ô
)€Cõ )¨°Ñ4Ô4�I€Dˆ#à
„zÐÝÐ;Ð;°TÐ;Ñ;Ô;¸RÑ@Ô@ˆå!1°&¸cÐ!BÑ!BÔ!BÑˆŒ
�Jå�˜V ZÑ0Ô0Ñ1Ô1ˆ	ØJÐJÐJÐJÀTÐJÑJÔJˆå�S”X˜sœz¨3¬9Ñ5Ô5€EÝ•�U”_ dÑ+Ô+Ñ,Ô,€Eàð Ø�u˜Q”xÐ Ð à�uˆ~Ðr;   c                óH  — t          | t          ¦  «        r| rt          | d¬¦  «        ndS t          | t          ¦  «        r| fS t	          | ¦  «        rCt          d„ | D ¦   «         ¦  «        rt          | ¦  «        S t          d„ | D ¦   «         ¦  «        r| S t          d¦  «        ‚)NT)Úseqr@   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S ©N)Ú
isinstanceÚstr©rB   Úss     r9   ú	<genexpr>z!_parse_symbols.<locals>.<genexpr>¼   s,   è è € Ð3Ð3 a�z˜!�SÑ!Ô!Ð3Ð3Ð3Ð3Ð3Ð3r;   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S rd   )re   r   rg   s     r9   ri   z!_parse_symbols.<locals>.<genexpr>¾   s,   è è € Ð6Ð6¨•˜A�tÑ$Ô$Ð6Ð6Ð6Ð6Ð6Ð6r;   zbexpected a string, Symbol or expression or a non-empty sequence of strings, Symbols or expressions)re   rf   Ú_symbolsr   r.   Úallr#   ©r   s    r9   Ú_parse_symbolsrn   ¶   s»   € Ý�'�3ÑÔð Ø.5Ð=�x˜ TÐ*Ñ*Ô*Ð*¸2Ð=Ý	�G�TÑ	"Ô	"ð ØˆzÐÝ	�WÑ	Ô	ð ÝÐ3Ð3¨7Ð3Ñ3Ô3Ñ3Ô3ð 	Ý˜GÑ$Ô$Ð$ÝÐ6Ð6¨gÐ6Ñ6Ô6Ñ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,dS )3r4   z*Multivariate distributed polynomial ring. ztuple[PolyElement, ...]r5   ztuple[Expr, ...]r   ÚintÚngensr   r7   r!   r0   c                ó–  ‡— t          t          |¦  «        ¦  «        }t          |¦  «        }t          j        |¦  «        }t          j        ‰¦  «        Š| j        |||‰f}|j        r3t          |¦  «        t          |j	        ¦  «        z  rt          d¦  «        ‚t                               | ¦  «        }||_        t          |¦  «        |_        ||_	        ||_        ||_        ‰|_        t'          |d¦  «        j        |_        d|z  |_        |                     ¦   «         |_        t          |j        ¦  «        |_        |j        |j        fg|_        |r¿t9          |¦  «        }|                     ¦   «         |_        |                     ¦   «         |_         | !                    ¦   «         |_"        | #                    ¦   «         |_$        | %                    ¦   «         |_&        | '                    ¦   «         |_(        | )                    ¦   «         |_*        n5d„ }||_        ||_         d„ |_"        ||_$        ||_&        ||_(        ||_*        ‰tV          u rtX          |_-        n
ˆfd„|_-        t]          |j	        |j        ¦  «        D ]B\  }	}
t_          |	t`          ¦  «        r(|	j1        }te          ||¦  «        stg          |||
¦  «         ŒC|S )Nz7polynomial ring and it's ground domain share generatorsr@   ©r   c                ó   — dS ©Nr@   r@   )ÚaÚbs     r9   ú<lambda>z"PolyRing.__new__.<locals>.<lambda>ó   s   €  2€ r;   c                ó   — dS ru   r@   )rv   rw   rP   s      r9   rx   z"PolyRing.__new__.<locals>.<lambda>ö   s   € °"€ r;   c                ó&   •— t          | ‰¬¦  «        S )N©Úkey)Úmax)Úfr0   s    €r9   rx   z"PolyRing.__new__.<locals>.<lambda>   s   ø€ ­¨Q°EÐ):Ñ):Ô):€ r;   )4Útuplern   ÚlenÚ	DomainOptÚ
preprocessÚOrderOptÚ__name__Úis_CompositeÚsetr   r#   ÚobjectÚ__new__Ú_hash_tupleÚhashÚ_hashrq   r7   r0   ÚPolyElementÚnewÚdtypeÚ
zero_monomÚ_gensr5   Ú	_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    r}   Úleading_expvrW   re   r   rA   ÚhasattrÚsetattr)Úclsr   r7   r0   rq   r‰   ÚobjÚcodegenÚmonunitÚsymbolÚ	generatorrA   s      `        r9   rˆ   zPolyRing.__new__Í   sx  ø€ Ý� wÑ/Ô/Ñ0Ô0ˆÝ�G‘”ˆÝÔ% fÑ-Ô-ˆÝÔ# EÑ*Ô*ˆà”| W¨e°V¸UÐCˆàÔð 	]¥3 w¡<¤<µ#°f´nÑ2EÔ2EÑ#Eð 	]Ý!Ð"[Ñ\Ô\Ð\å�nŠn˜SÑ!Ô!ˆØ%ˆŒÝ˜Ñ%Ô%ˆŒ	ØˆŒØˆŒ	ØˆŒ
ØˆŒ	å  RÑ(Ô(Ô,ˆŒ	à˜e™ˆŒØ—9’9‘;”;ˆŒÝ˜CœH™œˆŒà”^ V¤ZÐ0Ð1ˆŒàð 	'å! %Ñ(Ô(ˆGØ&Ÿ{š{™}œ}ˆCÔØ&Ÿ{š{™}œ}ˆCÔØ")§.¢.Ñ"2Ô"2ˆCÔØ '§¢¡¤ˆCÔØ&Ÿ{š{™}œ}ˆCÔØ&Ÿ{š{™}œ}ˆCÔØ&Ÿ{š{™}œ}ˆCÔÐà%�oˆGØ&ˆCÔØ&ˆCÔØ"4Ð"4ˆCÔØ 'ˆCÔØ&ˆCÔØ&ˆCÔØ&ˆCÔð •Cˆ<ˆ<Ý"ˆCÔÐà:Ð:Ð:Ð:ˆCÔå!$ S¤[°#´(Ñ!;Ô!;ð 	2ð 	2ÑˆF�IÝ˜&¥&Ñ)Ô)ð 2Ø”{�å˜s DÑ)Ô)ð 2Ý˜C  yÑ1Ô1Ð1øàˆ
r;   c                óÖ   — | j         j        }g }t          | j        ¦  «        D ]8}|                      |¦  «        }| j        }|||<   |                     |¦  «         Œ9t          |¦  «        S )z(Return a list of polynomial generators. )r7   r’   Úrangerq   Úmonomial_basisÚzeroÚappendr   )Úselfr’   r�   ÚiÚexpvÚpolys         r9   r�   zPolyRing._gens  sm   € àŒkŒoˆØˆÝ�t”zÑ"Ô"ð 	ð 	ˆAØ×&Ò& qÑ)Ô)ˆDØ”9ˆDØˆD�‰JØ�LŠL˜ÑÔÐÐÝ�U‰|Œ|Ðr;   c                ó*   — | j         | j        | j        fS rd   )r   r7   r0   ©r¯   s    r9   Ú__getnewargs__zPolyRing.__getnewargs__  s   € Ø”˜dœk¨4¬:Ð6Ð6r;   c                óx   — | j                              ¦   «         }|d= |D ]}|                     d¦  «        r||= Œ|S )Nr¡   Ú	monomial_)Ú__dict__ÚcopyÚ
startswith)r¯   Ústater|   s      r9   Ú__getstate__zPolyRing.__getstate__  sM   € Ø”×"Ò"Ñ$Ô$ˆØ�.Ð!àð 	ð 	ˆCØ�~Š~˜kÑ*Ô*ð Ø˜#�Jøàˆr;   c                ó   — | j         S rd   )r‹   r´   s    r9   Ú__hash__zPolyRing.__hash__#  s
   € ØŒzÐr;   c                ó˜   — t          |t          ¦  «        o5| j        | j        | j        | j        f|j        |j        |j        |j        fk    S rd   )re   r4   r   r7   rq   r0   ©r¯   Úothers     r9   Ú__eq__zPolyRing.__eq__&  sI   € Ý˜%¥Ñ*Ô*ð DØŒ\˜4œ;¨¬
°D´JÐ?ØŒ]˜EœL¨%¬+°u´{ÐCòDð	Dr;   c                ó   — | |k     S rd   r@   rÀ   s     r9   Ú__ne__zPolyRing.__ne__+  s   € Ø˜5’=Ð Ð r;   Nc                ó|   — |�$t          |t          ¦  «        rt          |¦  «        }|                      |||¦  «        S rd   )re   rI   r   Ú_clone©r¯   r   r7   r0   s       r9   ÚclonezPolyRing.clone.  s8   € àÐ¥:¨gµtÑ#<Ô#<ÐÝ˜G‘n”nˆGØ�{Š{˜7 F¨EÑ2Ô2Ð2r;   c                óZ   — |                       |p| j        |p| j        |p| j        ¦  «        S rd   )Ú	__class__r   r7   r0   rÇ   s       r9   rÆ   zPolyRing._clone4  s/   € à�~Š~˜gÐ5¨¬°vÐ7LÀÄÈeÐNaÐW[ÔWaÑbÔbÐbr;   c                ó@   — dg| j         z  }d||<   t          |¦  «        S )zReturn the ith-basis element. r   é   )rq   r   )r¯   r°   Úbasiss      r9   r¬   zPolyRing.monomial_basis8  s$   € à��D”J‘ˆØˆˆa‰Ý�U‰|Œ|Ðr;   c                ó,   — |                       g ¦  «        S rd   )rŽ   r´   s    r9   r­   zPolyRing.zero>  s   € à�zŠz˜"‰~Œ~Ðr;   c                ó6   — |                       | j        ¦  «        S rd   )rŽ   r“   r´   s    r9   r’   zPolyRing.oneB  s   € à�zŠz˜$œ)Ñ$Ô$Ð$r;   c                óB   — t          |t          ¦  «        o
|j        | k    S )zATrue if ``element`` is an element of this ring. False otherwise. )re   rŒ   r:   ©r¯   Úelements     r9   Ú
is_elementzPolyRing.is_elementF  s   € å˜'¥;Ñ/Ô/ÐH°G´LÀDÒ4HÐHr;   c                ó8   — | j                              ||¦  «        S rd   )r7   Úconvert©r¯   rÒ   Úorig_domains      r9   Ú
domain_newzPolyRing.domain_newJ  s   € ØŒ{×"Ò" 7¨KÑ8Ô8Ð8r;   c                ó8   — |                       | j        |¦  «        S rd   )Úterm_newr�   )r¯   Úcoeffs     r9   Ú
ground_newzPolyRing.ground_newM  s   € Ø�}Š}˜Tœ_¨eÑ4Ô4Ð4r;   c                óL   — |                       |¦  «        }| j        }|r|||<   |S rd   )rØ   r­   )r¯   ÚmonomrÛ   r²   s       r9   rÚ   zPolyRing.term_newP  s0   € Ø—’ Ñ&Ô&ˆØŒyˆØð 	 ØˆD�‰KØˆr;   c                ó¦  — t          |t          ¦  «        r`| |j        k    r|S t          | j        t          ¦  «        r*| j        j        |j        k    r|                      |¦  «        S t          d¦  «        ‚t          |t          ¦  «        rt          d¦  «        ‚t          |t          ¦  «        r|  	                    |¦  «        S t          |t          ¦  «        r;	 |                      |¦  «        S # t          $ r |                      |¦  «        cY S w xY wt          |t          ¦  «        r|                      |¦  «        S |                      |¦  «        S )NÚ
conversionÚparsing)re   rŒ   r:   r7   r   rÜ   ÚNotImplementedErrorrf   rV   rX   rI   Ú
from_termsÚ
ValueErrorÚ	from_listr   Ú	from_exprrÑ   s     r9   Úring_newzPolyRing.ring_newW  sC  € Ý�g�{Ñ+Ô+ð 	,Ø�w”|Ò#Ð#Ø�Ý˜DœK­Ñ8Ô8ð 8¸T¼[Ô=MÐQXÔQ]Ò=]Ð=]Ø—’ wÑ/Ô/Ð/å)¨,Ñ7Ô7Ð7Ý˜¥Ñ%Ô%ð 	,Ý% iÑ0Ô0Ð0Ý˜¥Ñ&Ô&ð 
	,Ø—>’> 'Ñ*Ô*Ð*Ý˜¥Ñ&Ô&ð 	,ð/Ø—’ wÑ/Ô/Ð/øÝð /ð /ð /Ø—~’~ gÑ.Ô.Ð.Ð.Ð.ð/øøøå˜¥Ñ&Ô&ð 	,Ø—>’> 'Ñ*Ô*Ð*à—?’? 7Ñ+Ô+Ð+s   ÃC/ Ã/DÄDc                ó|   — | j         }| j        }|                     ¦   «         D ]\  }} |||¦  «        }|r|||<   Œ|S rd   )rØ   r­   rS   )r¯   rÒ   r×   rØ   r²   rÞ   rÛ   s          r9   rX   zPolyRing.from_dicto  sS   € Ø”_ˆ
ØŒyˆà#ŸMšM™OœOð 	$ð 	$‰LˆE�5Ø�J˜u kÑ2Ô2ˆEØð $Ø#��U‘øàˆr;   c                óH   — |                       t          |¦  «        |¦  «        S rd   )rX   rV   rÖ   s      r9   rã   zPolyRing.from_termsz  s   € Ø�~Š~�d 7™mœm¨[Ñ9Ô9Ð9r;   c                ód   — |                       t          || j        dz
  | j        ¦  «        ¦  «        S ©NrÌ   )rX   r   rq   r7   rÑ   s     r9   rå   zPolyRing.from_list}  s(   € Ø�~Š~�k¨'°4´:¸a±<ÀÄÑMÔMÑNÔNÐNr;   c                óX   ‡ ‡‡‡— ‰ j         Šˆˆˆˆ fd„Š ‰t          |¦  «        ¦  «        S )Nc           	     óô  •— ‰                      | ¦  «        }|�|S | j        r5t          t          t	          t          ‰| j        ¦  «        ¦  «        ¦  «        S | j        r5t          t          t	          t          ‰| j        ¦  «        ¦  «        ¦  «        S |  	                    ¦   «         \  }}|j
        r!|dk    r ‰|¦  «        t          |¦  «        z  S ‰                     ‰                     | ¦  «        ¦  «        S rë   )ÚgetÚis_Addr
   r   rI   rT   ÚargsÚis_Mulr   Úas_base_expÚ
is_Integerrp   rÜ   rÕ   )Úexprr©   ÚbaseÚexpÚ_rebuildr7   Úmappingr¯   s       €€€€r9   r÷   z(PolyRing._rebuild_expr.<locals>._rebuildƒ  sß   ø€ ØŸš DÑ)Ô)ˆIàÐ$Ø Ð Ø”ð AÝ�c¥4­¨H°d´iÑ(@Ô(@Ñ#AÔ#AÑBÔBÐBØ”ð 	AÝ�c¥4­¨H°d´iÑ(@Ô(@Ñ#AÔ#AÑBÔBÐBð !×,Ò,Ñ.Ô.‘	��cØ”>ð A c¨A¢g gØ#˜8 D™>œ>­3¨s©8¬8Ñ3Ð3àŸ?š?¨6¯>ª>¸$Ñ+?Ô+?Ñ@Ô@Ð@r;   )r7   r   )r¯   rô   rø   r÷   r7   s   ` `@@r9   Ú_rebuild_exprzPolyRing._rebuild_expr€  sU   øøøø€ Ø”ˆð	Að 	Að 	Að 	Að 	Að 	Að 	Að 	Að$ ˆx� ™œÑ&Ô&Ð&r;   c                ó  — t          t          t          | j        | j        ¦  «        ¦  «        ¦  «        }	 |                      ||¦  «        }|                      |¦  «        S # t          $ r t          d| ›d|›�¦  «        ‚w xY w)Nz6expected an expression convertible to a polynomial in z, got )	rV   rI   rW   r   r5   rù   rç   r"   rä   )r¯   rô   rø   r²   s       r9   ræ   zPolyRing.from_expr—  s”   € Ý•t�C ¤¨d¬iÑ8Ô8Ñ9Ô9Ñ:Ô:ˆð	'Ø×%Ò% d¨GÑ4Ô4ˆDð —=’= Ñ&Ô&Ð&øõ ð 	pð 	pð 	pÝ�*ÐcgÐcgÐcgÐimÐimÐnÑoÔoÐoð	pøøøs   ¶A! Á! Bc                ó8  — |€| j         rd}�nd}�nt          |t          ¦  «        r?|}d|k    r|| j         k     rnß| j          |k    r|dk    r| dz
  }nÆt          d|z  ¦  «        ‚|                      |¦  «        r<	 | j                             |¦  «        }nƒ# t          $ r t          d|z  ¦  «        ‚w xY wt          |t          ¦  «        r<	 | j                             |¦  «        }n2# t          $ r t          d|z  ¦  «        ‚w xY wt          d|z  ¦  «        ‚|S )z+Compute index of ``gen`` in ``self.gens``. Nr   éÿÿÿÿrÌ   zinvalid generator index: %szinvalid generator: %szEexpected a polynomial generator, an integer, a string or None, got %s)	rq   re   rp   rä   rÓ   r5   Úindexrf   r   )r¯   Úgenr°   s      r9   rý   zPolyRing.index¡  sg  € àˆ;ØŒzð Ø�‘à�‘Ý˜�SÑ!Ô!ð 	lØˆAà�AŠvˆv˜!˜dœjš.˜.ØØ”*� Ò!Ð! a¨2¢g gØ�B˜‘F��å Ð!>ÀÑ!DÑEÔEÐEØ�_Š_˜SÑ!Ô!ð 	lð@Ø”I—O’O CÑ(Ô(��øÝð @ð @ð @Ý Ð!8¸3Ñ!>Ñ?Ô?Ð?ð@øøøå˜�SÑ!Ô!ð 	lð@Ø”L×&Ò& sÑ+Ô+��øÝð @ð @ð @Ý Ð!8¸3Ñ!>Ñ?Ô?Ð?ð@øøøõ ÐdÐgjÑjÑkÔkÐkàˆs   Á<B ÂB4ÃC( Ã(Dc                óÆ   ‡— t          t          | j        |¦  «        ¦  «        Šˆfd„t          | j        ¦  «        D ¦   «         }|s| j        S |                      |¬¦  «        S )z,Remove specified generators from this ring. c                ó"   •— g | ]\  }}|‰v¯	|‘ŒS r@   r@   ©rB   r°   rh   Úindicess      €r9   rD   z!PolyRing.drop.<locals>.<listcomp>Ã  s'   ø€ ÐOÐOÐO™$˜!˜Q¸QÀgÐ=MÐ=M�AÐ=MÐ=MÐ=Mr;   rm   )r†   rT   rý   Ú	enumerater   r7   rÈ   ©r¯   r5   r   r  s      @r9   ÚdropzPolyRing.dropÀ  sc   ø€ å•c˜$œ* dÑ+Ô+Ñ,Ô,ˆØOÐOÐOÐO¥)¨D¬LÑ"9Ô"9ÐOÑOÔOˆàð 	/Ø”;Ðà—:’: g�:Ñ.Ô.Ð.r;   c                óZ   — | j         |         }|s| j        S |                      |¬¦  «        S )Nrm   )r   r7   rÈ   )r¯   r|   r   s      r9   Ú__getitem__zPolyRing.__getitem__Ê  s2   € Ø”,˜sÔ#ˆàð 	/Ø”;Ðà—:’: g�:Ñ.Ô.Ð.r;   c                ó²   — | j         j        st          | j         d¦  «        r |                      | j         j         ¬¦  «        S t	          d| j         z  ¦  «        ‚)Nr7   ©r7   z%s is not a composite domain)r7   r…   r¢   rÈ   rä   r´   s    r9   Ú	to_groundzPolyRing.to_groundÒ  sS   € àŒ;Ô#ð 	K¥w¨t¬{¸HÑ'EÔ'Eð 	KØ—:’: T¤[Ô%7�:Ñ8Ô8Ð8åÐ;¸d¼kÑIÑJÔJÐJr;   c                ó    — t          | ¦  «        S rd   r   r´   s    r9   Ú	to_domainzPolyRing.to_domainÙ  s   € Ý˜dÑ#Ô#Ð#r;   c                óF   — ddl m}  || j        | j        | j        ¦  «        S )Nr   )Ú	FracField)Úsympy.polys.fieldsr  r   r7   r0   )r¯   r  s     r9   Úto_fieldzPolyRing.to_fieldÜ  s.   € Ø0Ð0Ð0Ð0Ð0Ð0Øˆy˜œ t¤{°D´JÑ?Ô?Ð?r;   c                ó2   — t          | j        ¦  «        dk    S rë   ©r€   r5   r´   s    r9   Úis_univariatezPolyRing.is_univariateà  s   € å�4”9‰~Œ~ Ò"Ð"r;   c                ó2   — t          | j        ¦  «        dk    S rë   r  r´   s    r9   Úis_multivariatezPolyRing.is_multivariateä  s   € å�4”9‰~Œ~ Ò!Ð!r;   c                óp   — | 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       r9   r   zPolyRing.addè  sS   € ð" ŒIˆàð 	ð 	ˆCÝ˜3­Ð6Ñ6Ô6ð Ø�X�T”X˜s�^Ñ#��à�S‘��àˆr;   c                óp   — | 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       r9   r   zPolyRing.mul  sS   € ð" ŒHˆàð 	ð 	ˆCÝ˜3­Ð6Ñ6Ô6ð Ø�X�T”X˜s�^Ñ#��à�S‘��àˆr;   c                ó  ‡— t          t          | j        |¦  «        ¦  «        Šˆfd„t          | j        ¦  «        D ¦   «         }ˆfd„t          | j        ¦  «        D ¦   «         }|s| S |                      | | j        |Ž ¬¦  «        S )zd
        Remove specified generators from the ring and inject them into
        its domain.
        c                ó"   •— g | ]\  }}|‰v¯	|‘ŒS r@   r@   r  s      €r9   rD   z+PolyRing.drop_to_ground.<locals>.<listcomp>$  s'   ø€ ÐMÐMÐM™˜˜A¸AÀWÐ<LÐ<L�1Ð<LÐ<LÐ<Lr;   c                ó"   •— g | ]\  }}|‰v¯	|‘ŒS r@   r@   )rB   r°   rþ   r  s      €r9   rD   z+PolyRing.drop_to_ground.<locals>.<listcomp>%  s'   ø€ ÐKÐKÐK™˜˜3¸!À7Ð:JÐ:J�Ð:JÐ:JÐ:Jr;   ©r   r7   )r†   rT   rý   r  r   r5   rÈ   r  r  s      @r9   Údrop_to_groundzPolyRing.drop_to_ground  s‘   ø€ õ
 •c˜$œ* dÑ+Ô+Ñ,Ô,ˆØMÐMÐMÐM¥¨4¬<Ñ!8Ô!8ÐMÑMÔMˆØKÐKÐKÐK¥)¨D¬IÑ"6Ô"6ÐKÑKÔKˆàð 	HØˆKà—:’: g°i°d´iÀÐ6F�:ÑGÔGÐGr;   c                óÊ   — | |k    r\t          | j        ¦  «                             t          |j        ¦  «        ¦  «        }|                      t	          |¦  «        ¬¦  «        S | S )z+Add the generators of ``other`` to ``self``rm   ©r†   r   ÚunionrÈ   rI   )r¯   rÁ   Úsymss      r9   ÚcomposezPolyRing.compose,  sQ   € à�5Š=ˆ=Ý�t”|Ñ$Ô$×*Ò*­3¨u¬}Ñ+=Ô+=Ñ>Ô>ˆDØ—:’:¥d¨4¡j¤j�:Ñ1Ô1Ð1àˆKr;   c                ó°   — t          | j        ¦  «                             t          |¦  «        ¦  «        }|                      t	          |¦  «        ¬¦  «        S )z9Add the elements of ``symbols`` as generators to ``self``rm   r#  )r¯   r   r%  s      r9   Úadd_genszPolyRing.add_gens4  s?   € å�4”<Ñ Ô ×&Ò&¥s¨7¡|¤|Ñ4Ô4ˆØ�zŠz¥$ t¡*¤*ˆzÑ-Ô-Ð-r;   c                ó‚  ‡— |dk     s|| j         k    rt          d|›d| j        ›�¦  «        ‚|s| j        S | j        }t          t          | j         ¦  «        t          |¦  «        ¦  «        D ]RŠt          ˆfd„t          | j         ¦  «        D ¦   «         ¦  «        }||  	                    || j
        j        ¦  «        z  }ŒS|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  ó:   •K  — | ]}t          |‰v ¦  «        V — Œd S rd   )rp   )rB   r°   rh   s     €r9   ri   z*PolyRing.symmetric_poly.<locals>.<genexpr>E  s-   øè è € ÐEÐE¨a�c ! q &™kœkÐEÐEÐEÐEÐEÐEr;   )rq   rä   r5   r’   r­   r-   r«   rp   r   rÚ   r7   )r¯   Únr²   rÞ   rh   s       @r9   Úsymmetric_polyzPolyRing.symmetric_poly9  sÉ   ø€ ð
 ˆqŠ5ˆ5�A˜œ
’N�NÝ�*ÐZ[ÐZ[ÐZ[Ð]aÔ]fÐ]fÐgÑhÔhÐhØð 	Ø”8ˆOà”9ˆDÝ�U 4¤:Ñ.Ô.µ°A±´Ñ7Ô7ð >ð >�ÝÐEÐEÐEÐEµ5¸¼Ñ3DÔ3DÐEÑEÔEÑEÔE�Ø˜Ÿš e¨T¬[¬_Ñ=Ô=Ñ=��ØˆKr;   )NNNrd   )-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__rX   rã   rå   rù   ræ   rý   r  r  r
  r  r  r  r  r   r   r!  r&  r(  r,  r@   r;   r9   r4   r4   Ä   sã  € € € € € € Ø4Ð4à!Ð!Ð!Ñ!ØÐÐÑØ€J€J�JØ€N€N�NØÐÐÑà,/ð <ð <ð <ð <ð|	ð 	ð 	ð7ð 7ð 7ðð ð ðð ð ðDð Dð Dð
!ð !ð !ð3ð 3ð 3ð 3ð ðcð cñ „Wðcðð ð ð ðð ñ „Xðð ð%ð %ñ „Xð%ðIð Ið Ið9ð 9ð 9ð 9ð5ð 5ð 5ðð ð ð,ð ,ð ,ð, €Hð	ð 	ð 	ð 	ð:ð :ð :ð :ðOð Oð Oð'ð 'ð 'ð.'ð 'ð 'ðð ð ð>/ð /ð /ð/ð /ð /ðKð Kð Kð$ð $ð $ð@ð @ð @ð ð#ð #ñ „Xð#ð ð"ð "ñ „Xð"ðð ð ð6ð ð ð6Hð Hð Hðð ð ð.ð .ð .ð
ð ð ð ð r;   r4   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                óX   •— t          ¦   «                              |¦  «         || _        d S rd   )ÚsuperÚ__init__r:   )r¯   r:   ÚinitrÊ   s      €r9   r6  zPolyElement.__init__M  s&   ø€ Ý‰Œ×Ò˜ÑÔÐØˆŒ	ˆ	ˆ	r;   c                óˆ  — t          | t          ¦  «        sJ ‚t          | j        t          ¦  «        sJ ‚| j        j        }t          |t
          ¦  «        sJ ‚|                      ¦   «         D ]V\  }}|                     |¦  «        sJ ‚t          |¦  «        | j        j	        k    sJ ‚t          d„ |D ¦   «         ¦  «        sJ ‚ŒWd S )Nc              3  óL   K  — | ]}t          |t          ¦  «        o|d k    V — Œ dS )r   N)re   rp   )rB   rö   s     r9   ri   z%PolyElement._check.<locals>.<genexpr>[  s5   è è € ÐJÐJ¸S•z #¥sÑ+Ô+Ð8°°q²ÐJÐJÐJÐJÐJÐJr;   )re   rŒ   r:   r4   r7   r   rS   Úof_typer€   rq   rl   )r¯   ÚdomrÞ   rÛ   s       r9   Ú_checkzPolyElement._checkS  sÒ   € Ý˜$¥Ñ,Ô,Ð,Ð,Ð,Ý˜$œ)¥XÑ.Ô.Ð.Ð.Ð.ØŒiÔˆÝ˜#�vÑ&Ô&Ð&Ð&Ð&Ø ŸJšJ™LœLð 	Kð 	K‰LˆE�5Ø—;’;˜uÑ%Ô%Ð%Ð%Ð%Ý�u‘:”: ¤¤Ò0Ð0Ð0Ð0ÝÐJÐJÀEÐJÑJÔJÑJÔJÐJÐJÐJÐJð	Kð 	Kr;   c                ó8   — |                       | j        |¦  «        S rd   )rÊ   r:   )r¯   r7  s     r9   r�   zPolyElement.new]  s   € Ø�~Š~˜dœi¨Ñ.Ô.Ð.r;   c                ó4   — | j                              ¦   «         S rd   )r:   r  r´   s    r9   ÚparentzPolyElement.parent`  s   € ØŒy×"Ò"Ñ$Ô$Ð$r;   c                óR   — | j         t          |                      ¦   «         ¦  «        fS rd   )r:   rI   Ú	itertermsr´   s    r9   rµ   zPolyElement.__getnewargs__c  s!   € Ø”	�4 §¢Ñ 0Ô 0Ñ1Ô1Ð2Ð2r;   Nc                ó�   — | j         }|€<t          | j        t          |                      ¦   «         ¦  «        f¦  «        x| _         }|S rd   )r‹   rŠ   r:   Ú	frozensetrS   )r¯   r‹   s     r9   r¾   zPolyElement.__hash__h  s@   € ð ”
ˆØˆ=Ý!% t¤yµ)¸D¿JºJ¹L¼LÑ2IÔ2IÐ&JÑ!KÔ!KÐKˆDŒJ˜Øˆr;   c                ó,   — |                       | ¦  «        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    r9   r¹   zPolyElement.copys  s   € ð4 �xŠx˜‰~Œ~Ðr;   c           	     ó.  — | j         |k    r| S | j         j        |j        k    rTt          t          t	          | | j         j        |j        ¦  «        Ž ¦  «        }|                     || j         j        ¦  «        S |                     | | j         j        ¦  «        S rd   )r:   r   rI   rW   r)   rã   r7   rX   )r¯   Únew_ringÚtermss      r9   Úset_ringzPolyElement.set_ring�  sƒ   € ØŒ9˜Ò Ð ØˆKØŒYÔ (Ô"2Ò2Ð2Ý��m¨D°$´)Ô2CÀXÔEUÑVÔVÐWÑXÔXˆEØ×&Ò& u¨d¬iÔ.>Ñ?Ô?Ð?à×%Ò% d¨D¬IÔ,<Ñ=Ô=Ð=r;   c                óð   — |s| j         j        }nIt          |¦  «        | j         j        k    r,t	          d| j         j        ›dt          |¦  «        ›�¦  «        ‚t          |                      ¦   «         g|¢R Ž S )Nz"Wrong number of symbols, expected z got )r:   r   r€   rq   rä   r(   Úas_expr_dict)r¯   r   s     r9   Úas_exprzPolyElement.as_expr˜  s}   € Øð 	Ø”iÔ'ˆGˆGÝ�‰\Œ\˜TœYœ_Ò,Ð,Ý�*à””��¥# g¡,¤, ,ð0ñô ð õ
 ˜d×/Ò/Ñ1Ô1Ð<°GÐ<Ð<Ð<Ð<r;   c                óf   ‡— | j         j        j        Šˆfd„|                      ¦   «         D ¦   «         S )Nc                ó.   •— i | ]\  }}| ‰|¦  «        “ŒS r@   r@   )rB   rÞ   rÛ   Úto_sympys      €r9   rR   z,PolyElement.as_expr_dict.<locals>.<dictcomp>¥  s'   ø€ ÐLÐLÐL©<¨5°%��x�x ‘”ÐLÐLÐLr;   )r:   r7   rN  rA  )r¯   rN  s    @r9   rJ  zPolyElement.as_expr_dict£  s4   ø€ Ø”9Ô#Ô,ˆØLÐLÐLÐL¸4¿>º>Ñ;KÔ;KÐLÑLÔLÐLr;   c                ób  ‡— | j         j        }|j        r|j        s	|j        | fS |                     ¦   «         }|j        Š|j        }|j        }|                      ¦   «         D ]} |‰ ||¦  «        ¦  «        ŠŒ|  	                    ˆfd„|  
                    ¦   «         D ¦   «         ¦  «        }‰|fS )Nc                ó$   •— g | ]\  }}||‰z  f‘ŒS r@   r@   )rB   ÚkÚvÚcommons      €r9   rD   z,PolyElement.clear_denoms.<locals>.<listcomp>µ  s%   ø€ ÐBÐBÐB©D¨A¨q˜1˜a ™h˜-ÐBÐBÐBr;   )r:   r7   Úis_FieldÚhas_assoc_Ringr’   Úget_ringr�   ÚdenomrJ   r�   rS   )r¯   r7   Úground_ringr�   rW  rÛ   r²   rS  s          @r9   Úclear_denomszPolyElement.clear_denoms§  s¼   ø€ Ø”Ô!ˆàŒð 	$ fÔ&;ð 	$Ø”:˜tÐ#Ð#à—o’oÑ'Ô'ˆØ”ˆØŒoˆØ”ˆà—[’[‘]”]ð 	/ð 	/ˆEØ�S˜   u¡¤Ñ.Ô.ˆFˆFà�xŠxÐBÐBÐBÐB°D·J²J±L´LÐBÑBÔBÑCÔCˆØ�tˆ|Ðr;   c                ó^   — t          |                      ¦   «         ¦  «        D ]
\  }}|s| |= ŒdS )z+Eliminate monomials with zero coefficient. N©rI   rS   )r¯   rQ  rR  s      r9   Ú
strip_zerozPolyElement.strip_zero¸  s?   € å˜Ÿš™œÑ&Ô&ð 	ð 	‰DˆAˆqØð Ø˜�Gøð	ð 	r;   c                óæ   — |s|  S | j                              |¦  «        rt                               | |¦  «        S t	          | ¦  «        dk    rdS |                      | 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)r:   rÓ   rV   rÂ   r€   rî   r�   ©Úp1Úp2s     r9   rÂ   zPolyElement.__eq__¾  so   € ð" ð 	4Ø�6ˆMØŒW×Ò Ñ#Ô#ð 	4Ý—;’;˜r 2Ñ&Ô&Ð&Ý�‰WŒW�qŠ[ˆ[Ø�5à—6’6˜"œ'Ô,Ñ-Ô-°Ò3Ð3r;   c                ó   — | |k     S rd   r@   r^  s     r9   rÄ   zPolyElement.__ne__Ø  s   € Ø˜’8ˆ|Ðr;   c                ó&  — | j         }|                     |¦  «        r‡t          |                      ¦   «         ¦  «        t          |                     ¦   «         ¦  «        k    rdS |j        j        }|                      ¦   «         D ]} || |         ||         |¦  «        s dS ŒdS t          | ¦  «        dk    rdS 	 |j                             |¦  «        }|j                             |                      ¦   «         ||¦  «        S # t          $ r Y dS w xY w)z+Approximate equality test for polynomials. FTrÌ   )
r:   rÓ   r†   Úkeysr7   Úalmosteqr€   rÕ   Úconstr"   )r_  r`  Ú	tolerancer:   rd  rQ  s         r9   rd  zPolyElement.almosteqÛ  s  € àŒwˆà�?Š?˜2ÑÔð 	GÝ�2—7’7‘9”9‰~Œ~¥ R§W¢W¡Y¤Y¡¤Ò/Ð/Ø�uà”{Ô+ˆHà—W’W‘Y”Yð !ð !�Ø�x  1¤ r¨!¤u¨iÑ8Ô8ð !Ø ˜5˜5ð!à�4Ý�‰WŒW�qŠ[ˆ[Ø�5ðGØ”[×(Ò(¨Ñ,Ô,�ð ”{×+Ò+¨B¯HªH©J¬J¸¸IÑFÔFÐFøõ "ð ð ð Ø�u�uðøøøs   Â:D Ä
DÄDc                óH   — t          | ¦  «        |                      ¦   «         fS rd   )r€   rG  r´   s    r9   Úsort_keyzPolyElement.sort_keyó  s   € Ý�D‘	”	˜4Ÿ:š:™<œ<Ð(Ð(r;   c                ó¤   — | j                              |¦  «        r0 ||                      ¦   «         |                     ¦   «         ¦  «        S t          S rd   )r:   rÓ   rh  ÚNotImplemented)r_  r`  Úops      r9   Ú_cmpzPolyElement._cmpö  sB   € ØŒ7×Ò˜bÑ!Ô!ð 	"Ø�2�b—k’k‘m”m R§[¢[¡]¤]Ñ3Ô3Ð3å!Ð!r;   c                ó8   — |                       |t          ¦  «        S rd   )rl  r   r^  s     r9   Ú__lt__zPolyElement.__lt__ü  ó   € Ø�wŠw�r�2‰ŒÐr;   c                ó8   — |                       |t          ¦  «        S rd   )rl  r   r^  s     r9   Ú__le__zPolyElement.__le__þ  ro  r;   c                ó8   — |                       |t          ¦  «        S rd   )rl  r   r^  s     r9   Ú__gt__zPolyElement.__gt__   ro  r;   c                ó8   — |                       |t          ¦  «        S rd   )rl  r	   r^  s     r9   Ú__ge__zPolyElement.__ge__  ro  r;   c                óÀ   — | j         }|                     |¦  «        }|j        dk    r	||j        fS t	          |j        ¦  «        }||= ||                     |¬¦  «        fS )NrÌ   rm   )r:   rý   rq   r7   rI   r   rÈ   ©r¯   rþ   r:   r°   r   s        r9   Ú_dropzPolyElement._drop  s^   € ØŒyˆØ�JŠJ�s‰OŒOˆàŒ:˜Š?ˆ?Ø�d”k�>Ð!å˜4œ<Ñ(Ô(ˆGØ˜�
Ø�d—j’j¨�jÑ1Ô1Ð1Ð1r;   c                óx  — |                       |¦  «        \  }}| j        j        dk    r.| j        r|                      d¦  «        S t          d|z  ¦  «        ‚|j        }|                      ¦   «         D ]G\  }}||         dk    r%t          |¦  «        }||= ||t          |¦  «        <   Œ6t          d|z  ¦  «        ‚|S )NrÌ   zCannot drop %sr   )
rx  r:   rq   Ú	is_groundrÛ   rä   r­   rS   rI   r   )r¯   rþ   r°   r:   r²   rQ  rR  ÚKs           r9   r  zPolyElement.drop  s½   € Ø—*’*˜S‘/”/‰ˆˆ4àŒ9Œ?˜aÒÐØŒ~ð 9Ø—z’z !‘}”}Ð$å Ð!1°CÑ!7Ñ8Ô8Ð8à”9ˆDàŸ
š
™œð =ð =‘��1Ø�Q”4˜1’9�9Ý˜Q™œ�AØ˜!˜Ø%&�D�˜q™œ‘N�Nå$Ð%5¸Ñ%;Ñ<Ô<Ð<àˆKr;   c                ó¦   — | j         }|                     |¦  «        }t          |j        ¦  «        }||= ||                     |||         ¬¦  «        fS )Nr   )r:   rý   rI   r   rÈ   rw  s        r9   Ú_drop_to_groundzPolyElement._drop_to_ground%  sM   € ØŒyˆØ�JŠJ�s‰OŒOˆå�t”|Ñ$Ô$ˆØ�AˆJØ�$—*’* W°T¸!´W�*Ñ=Ô=Ð=Ð=r;   c                ó®  — | j         j        dk    rt          d¦  «        ‚|                      |¦  «        \  }}|j        }|j        j        d         }|                      ¦   «         D ]o\  }}|d |…         ||dz   d …         z   }||vr"|||         z                       |¦  «        ||<   ŒC||xx         |||         z                       |¦  «        z  cc<   Œp|S )NrÌ   z$Cannot drop only generator to groundr   )	r:   rq   rä   r}  r­   r7   r5   rA  Ú
mul_ground)r¯   rþ   r°   r:   r²   rÞ   rÛ   Úmons           r9   r!  zPolyElement.drop_to_ground-  så   € ØŒ9Œ?˜aÒÐÝÐCÑDÔDÐDà×&Ò& sÑ+Ô+‰ˆˆ4ØŒyˆØŒkÔ˜qÔ!ˆà ŸNšNÑ,Ô,ð 	?ð 	?‰LˆE�5Ø˜˜˜”)˜e A a¡C D 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   r:   rq   r7   r´   s    r9   Úto_densezPolyElement.to_dense>  s"   € Ý˜T 4¤9¤?°1Ñ#4°d´iÔ6FÑGÔGÐGr;   c                ó    — t          | ¦  «        S rd   )rV   r´   s    r9   Úto_dictzPolyElement.to_dictA  s   € Ý�D‰zŒzÐr;   c                ó„  — | s$|                      | j        j        j        ¦  «        S |d         }|d         }| j        }|j        }|j        }	|j        }
g }|                      ¦   «         D �]‡\  }}|j                             |¦  «        }|rdnd}| 	                    |¦  «         ||
k    r7|                      |¦  «        }|r| 
                    d¦  «        r
|dd …         }n5|r| }|| j        j        j        k    r|                     ||d¬¦  «        }nd	}g }t          |	¦  «        D ]˜}||         }|sŒ|                     ||         |d¬¦  «        }|dk    rO|t          |¦  «        k    s|d
k     r|                     ||d¬¦  «        }n|}| 	                    |||fz  ¦  «         Œ€| 	                    d|z  ¦  «         Œ™|r|g|z   }| 	                    |                     |¦  «        ¦  «         �Œ‰|d
         dv r1|                     d
¦  «        }|dk    r|                     d
d¦  «         d	                     |¦  «        S )NÚMulÚAtomú - ú + ú-rÌ   T)ÚstrictÚ r   Fz%s)r‰  rˆ  )Ú_printr:   r7   r­   r   rq   r�   rG  Úis_negativer®   rº   r’   Úparenthesizer«   rp   ÚjoinÚpopÚinsert)r¯   ÚprinterÚ
precedenceÚexp_patternÚ
mul_symbolÚprec_mulÚ	prec_atomr:   r   rq   ÚzmÚsexpvsr±   rÛ   ÚnegativeÚsignÚscoeffÚsexpvr°   rö   r¨   ÚsexpÚheads                          r9   rf   zPolyElement.strD  su  € Øð 	9Ø—>’> $¤)Ô"2Ô"7Ñ8Ô8Ð8Ø˜eÔ$ˆØ˜vÔ&ˆ	ØŒyˆØ”,ˆØ”
ˆØŒ_ˆØˆØŸ:š:™<œ<ð 	2ñ 	2‰KˆD�%Ø”{×.Ò.¨uÑ5Ô5ˆHØ$Ð/�5�5¨%ˆDØ�MŠM˜$ÑÔÐØ�rŠzˆzØ Ÿš¨Ñ.Ô.�Øð ( × 1Ò 1°#Ñ 6Ô 6ð (Ø# A B BœZ�Føàð #Ø"˜F�EØ˜DœIÔ,Ô0Ò0Ð0Ø$×1Ò1°%¸È$Ð1ÑOÔO�F�Fà�FØˆEÝ˜5‘\”\ð 0ð 0�Ø˜1”g�Øð ØØ ×-Ò-¨g°a¬j¸)ÈDÐ-ÑQÔQ�Ø˜!’8�8Ø�c #™hœh’�¨#°ª'¨'Ø&×3Ò3°C¸È5Ð3ÑQÔQ˜˜à"˜Ø—L’L °¸¨~Ñ!=Ñ>Ô>Ð>Ð>à—L’L ¨¡Ñ/Ô/Ð/Ð/Øð )Ø˜ 5Ñ(�Ø�MŠM˜*Ÿ/š/¨%Ñ0Ô0Ñ1Ô1Ð1Ñ1Ø�!Œ9˜Ð&Ð&Ø—:’:˜a‘=”=ˆDØ�uŠ}ˆ}Ø—’˜a Ñ%Ô%Ð%Ø�wŠw�v‰ŒÐr;   c                ó   — | | j         j        v S rd   )r:   r‘   r´   s    r9   Úis_generatorzPolyElement.is_generatort  s   € à�t”yÔ*Ð*Ð*r;   c                óJ   — |  p t          | ¦  «        dk    o| j        j        | v S rë   )r€   r:   r�   r´   s    r9   rz  zPolyElement.is_groundx  s(   € àˆxÐL�C ™IœI¨šNÐK¨t¬yÔ/CÀtÐ/KÐLr;   c                óD   — |  pt          | ¦  «        dk    o
| j        dk    S rë   )r€   ÚLCr´   s    r9   Úis_monomialzPolyElement.is_monomial|  s$   € àˆxÐ<�C ™IœI¨šNÐ;¨t¬w¸!ª|Ð<r;   c                ó(   — t          | ¦  «        dk    S rë   )r€   r´   s    r9   Úis_termzPolyElement.is_term€  s   € å�4‰yŒy˜AŠ~Ðr;   c                óJ   — | j         j                             | j        ¦  «        S rd   )r:   r7   rŽ  r¥  r´   s    r9   rŽ  zPolyElement.is_negative„  ó   € àŒyÔ×+Ò+¨D¬GÑ4Ô4Ð4r;   c                óJ   — | j         j                             | j        ¦  «        S rd   )r:   r7   Úis_positiver¥  r´   s    r9   r¬  zPolyElement.is_positiveˆ  rª  r;   c                óJ   — | j         j                             | j        ¦  «        S rd   )r:   r7   Úis_nonnegativer¥  r´   s    r9   r®  zPolyElement.is_nonnegativeŒ  ó   € àŒyÔ×.Ò.¨t¬wÑ7Ô7Ð7r;   c                óJ   — | j         j                             | j        ¦  «        S rd   )r:   r7   Úis_nonpositiver¥  r´   s    r9   r±  zPolyElement.is_nonpositive�  r¯  r;   c                ó   — |  S rd   r@   ©r~   s    r9   Úis_zerozPolyElement.is_zero”  s	   € àˆuˆr;   c                ó"   — | | j         j        k    S rd   )r:   r’   r³  s    r9   Úis_onezPolyElement.is_one˜  s   € à�A”F”JŠÐr;   c                óJ   — | j         j                             | j        ¦  «        S rd   )r:   r7   r¶  r¥  r³  s    r9   Úis_moniczPolyElement.is_monicœ  s   € àŒvŒ}×#Ò# A¤DÑ)Ô)Ð)r;   c                ód   — | j         j                             |                      ¦   «         ¦  «        S rd   )r:   r7   r¶  Úcontentr³  s    r9   Úis_primitivezPolyElement.is_primitive   s"   € àŒvŒ}×#Ò# A§I¢I¡K¤KÑ0Ô0Ð0r;   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó<   K  — | ]}t          |¦  «        d k    V — ŒdS ©rÌ   N©rU   ©rB   rÞ   s     r9   ri   z(PolyElement.is_linear.<locals>.<genexpr>¦  ó,   è è € Ð?Ð? u•3�u‘:”: ’?Ð?Ð?Ð?Ð?Ð?Ð?r;   ©rl   Ú
itermonomsr³  s    r9   Ú	is_linearzPolyElement.is_linear¤  ó'   € åÐ?Ð?°·²±´Ð?Ñ?Ô?Ñ?Ô?Ð?r;   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó<   K  — | ]}t          |¦  «        d k    V — ŒdS )é   Nr¿  rÀ  s     r9   ri   z+PolyElement.is_quadratic.<locals>.<genexpr>ª  rÁ  r;   rÂ  r³  s    r9   Úis_quadraticzPolyElement.is_quadratic¨  rÅ  r;   c                óR   — | j         j        sdS | j                              | ¦  «        S ©NT)r:   rq   Ú	dmp_sqf_pr³  s    r9   Úis_squarefreezPolyElement.is_squarefree¬  s)   € àŒvŒ|ð 	Ø�4ØŒv×Ò Ñ"Ô"Ð"r;   c                óR   — | j         j        sdS | j                              | ¦  «        S rË  )r:   rq   Údmp_irreducible_pr³  s    r9   Úis_irreduciblezPolyElement.is_irreducible²  s)   € àŒvŒ|ð 	Ø�4ØŒv×'Ò'¨Ñ*Ô*Ð*r;   c                ól   — | j         j        r| j                              | ¦  «        S t          d¦  «        ‚)Nzcyclotomic polynomial)r:   r  Údup_cyclotomic_pr%   r³  s    r9   Úis_cyclotomiczPolyElement.is_cyclotomic¸  s5   € àŒ6Ôð 	GØ”6×*Ò*¨1Ñ-Ô-Ð-å-Ð.EÑFÔFÐFr;   c                ód   — |                       d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc                ó   — g | ]
\  }}|| f‘ŒS r@   r@   )rB   rÞ   rÛ   s      r9   rD   z'PolyElement.__neg__.<locals>.<listcomp>À  s"   € ÐPÐPÐP©l¨e°U˜5 5 &˜/ÐPÐPÐPr;   )r�   rA  r´   s    r9   Ú__neg__zPolyElement.__neg__¿  s-   € Ø�xŠxÐPÐP¸d¿nºnÑ>NÔ>NÐPÑPÔPÑQÔQÐQr;   c                ó   — | S rd   r@   r´   s    r9   Ú__pos__zPolyElement.__pos__Â  s   € Øˆr;   c                ó`  — |s|                       ¦   «         S | j        }|                     |¦  «        r]|                       ¦   «         }|j        }|j        j        }|                     ¦   «         D ]\  }} |||¦  «        |z   }|r|||<   Œ||= Œ |S t          |t          ¦  «        r€t          |j        t          ¦  «        r|j        j        |j        k    rnPt          |j        j        t          ¦  «        r*|j        j        j        |k    r| 
                    | ¦  «        S t          S 	 |                     |¦  «        }|                       ¦   «         }|s|S |j        }	|	|                      ¦   «         vr|||	<   n!|||	          k    r||	= n||	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¹   r:   rÓ   rî   r7   r­   rS   re   rŒ   r   Ú__radd__rj  rØ   r�   rc  r"   )
r_  r`  r:   r  rî   r­   rQ  rR  Úcp2r™  s
             r9   Ú__add__zPolyElement.__add__Å  sÍ  € ð ð 	Ø—7’7‘9”9ÐØŒwˆØ�?Š?˜2ÑÔð 	&Ø—’‘	”	ˆAØ”%ˆCØ”;Ô#ˆDØŸš™
œ
ð ð ‘��1Ø�C˜˜4‘L”L 1Ñ$�Øð Ø�A�a‘D�Dà˜!˜˜ØˆHÝ˜�KÑ(Ô(ð 	&Ý˜$œ+¥~Ñ6Ô6ð &¸4¼;Ô;KÈrÌwÒ;VÐ;VØÝ˜BœGœN­NÑ;Ô;ð &ÀÄÄÔ@SÐW[Ò@[Ð@[Ø—{’{ 2‘”Ð&å%Ð%ð	Ø—/’/ "Ñ%Ô%ˆCð —’‘	”	ˆAØð Ø�Ø”ˆBØ˜Ÿš™œÐ"Ð"Ø��"‘�à˜!˜Bœ%˜’<�<Ø˜"˜˜à�b�E�E”E˜S‘L�E�E‘EØˆHøõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøs   Ä&F ÆF-Æ,F-c                ó&  — |                       ¦   «         }|s|S | j        }	 |                     |¦  «        }|j        }||                      ¦   «         vr|||<   n!|||          k    r||= n||xx         |z  cc<   |S # t
          $ r
 t          cY S w xY wrd   )r¹   r:   rØ   r�   rc  r"   rj  )r_  r+  r  r:   r™  s        r9   rÚ  zPolyElement.__radd__û  s»   € Ø�GŠG‰IŒIˆØð 	ØˆHØŒwˆð	Ø—’ Ñ"Ô"ˆAð ”ˆBØ˜Ÿš™œÐ"Ð"Ø��"‘�à˜˜2œ˜’;�;Ø˜"˜˜à�b�E�E”E˜Q‘J�E�E‘EØˆHøõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøs   ¡A< Á<BÂBc                óX  — |s|                       ¦   «         S | j        }|                     |¦  «        r]|                       ¦   «         }|j        }|j        j        }|                     ¦   «         D ]\  }} |||¦  «        |z
  }|r|||<   Œ||= Œ |S t          |t          ¦  «        r€t          |j        t          ¦  «        r|j        j        |j        k    rnPt          |j        j        t          ¦  «        r*|j        j        j        |k    r| 
                    | ¦  «        S t          S 	 |                     |¦  «        }|                       ¦   «         }|j        }||                      ¦   «         vr| ||<   n |||         k    r||= n||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¹   r:   rÓ   rî   r7   r­   rS   re   rŒ   r   Ú__rsub__rj  rØ   r�   rc  r"   )	r_  r`  r:   r  rî   r­   rQ  rR  r™  s	            r9   Ú__sub__zPolyElement.__sub__  sÀ  € ð  ð 	Ø—7’7‘9”9ÐØŒwˆØ�?Š?˜2ÑÔð 	&Ø—’‘	”	ˆAØ”%ˆCØ”;Ô#ˆDØŸš™
œ
ð ð ‘��1Ø�C˜˜4‘L”L 1Ñ$�Øð Ø�A�a‘D�Dà˜!˜˜ØˆHÝ˜�KÑ(Ô(ð 	&Ý˜$œ+¥~Ñ6Ô6ð &¸4¼;Ô;KÈrÌwÒ;VÐ;VØÝ˜BœGœN­NÑ;Ô;ð &ÀÄÄÔ@SÐW[Ò@[Ð@[Ø—{’{ 2‘”Ð&å%Ð%ð	Ø—’ Ñ$Ô$ˆBð —’‘	”	ˆAØ”ˆBØ˜Ÿš™œÐ"Ð"Ø˜��"‘�à˜˜2œ’;�;Ø˜"˜˜à�b�E�E”E˜R‘K�E�E‘EØˆHøõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøs   Ä&F ÆF)Æ(F)c                ó¨   — | 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

        )r:   rØ   r­   r"   rj  )r_  r+  r:   r  r±   s        r9   rß  zPolyElement.__rsub__E  s�   € ð Œwˆð
	Ø—’ Ñ"Ô"ˆAð ”	ˆAØð $ð $�Ø˜dœ8˜)��$‘�Ø�‰FˆAàˆHøõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøs   ‰= ½AÁAc                óP  — | j         }|j        }| r|s|S |                     |¦  «        r”|j        }|j        j        }|j        }t          |                     ¦   «         ¦  «        }|                      ¦   «         D ].\  }}	|D ]&\  }
} |||
¦  «        } |||¦  «        |	|z  z   ||<   Œ'Œ/|                     ¦   «          |S t          |t          ¦  «        r€t          |j        t          ¦  «        r|j        j         |j         k    rnPt          |j         j        t          ¦  «        r*|j         j        j         |k    r|                     | ¦  «        S t          S 	 |                     |¦  «        }|                      ¦   «         D ]\  }}	|	|z  }|r|||<   Œ|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

        )r:   r­   rÓ   rî   r7   r”   rI   rS   r\  re   rŒ   r   Ú__rmul__rj  rØ   r"   )r_  r`  r:   r  rî   r­   r”   Úp2itÚexp1Úv1Úexp2Úv2rö   rR  s                 r9   Ú__mul__zPolyElement.__mul__a  sÒ  € ð  ŒwˆØŒIˆØð 	&˜ð 	&ØˆHØ�_Š_˜RÑ Ô ð 	&Ø”%ˆCØ”;Ô#ˆDØÔ,ˆLÝ˜Ÿš™
œ
Ñ#Ô#ˆDØŸHšH™JœJð 4ð 4‘��bØ $ð 4ð 4‘H�D˜"Ø&˜, t¨TÑ2Ô2�CØ ˜S  d™^œ^¨b°©eÑ3�A�c‘F�Fð4ð �LŠL‰NŒNˆNàˆHÝ˜�KÑ(Ô(ð 	&Ý˜$œ+¥~Ñ6Ô6ð &¸4¼;Ô;KÈrÌwÒ;VÐ;VØÝ˜BœGœN­NÑ;Ô;ð &ÀÄÄÔ@SÐW[Ò@[Ð@[Ø—{’{ 2‘”Ð&å%Ð%ð
	Ø—’ Ñ$Ô$ˆBð ŸHšH™JœJð  ð  ‘��bØ�r‘E�Øð  Ø�A�d‘GøàˆHøõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøs   ÅF ÆF%Æ$F%c                óÖ   — | j         j        }|s|S 	 |j                              |¦  «        }|                      ¦   «         D ]\  }}||z  }|r|||<   Œ|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

        )r:   r­   rØ   rS   r"   rj  )r_  r`  r  rå  ræ  rR  s         r9   rã  zPolyElement.__rmul__•  sš   € ð ŒGŒLˆØð 	ØˆHð		Ø”×"Ò" 2Ñ&Ô&ˆBð ŸHšH™JœJð  ð  ‘��bØ�r‘E�Øð  Ø�A�d‘GøØˆHøõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøs   ’A ÁA(Á'A(c                ó>  — t          |t          ¦  «        st          d|z  ¦  «        ‚|dk     rt          d|z  ¦  «        ‚| j        }|s| r|j        S t          d¦  «        ‚t          | ¦  «        dk    ryt          |                      ¦   «         ¦  «        d         \  }}|j	        }||j
        j        k    r|||                     ||¦  «        <   n||z  ||                     ||¦  «        <   |S t          |¦  «        }|dk     rt          d¦  «        ‚|dk    r|                      ¦   «         S |dk    r|                      ¦   «         S |dk    r| |                      ¦   «         z  S t          | ¦  «        d	k    r|                      |¦  «        S |                      |¦  «        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È  é   é   )re   rp   Ú	TypeErrorrä   r:   r’   r€   rI   rS   r­   r7   r–   r¹   ÚsquareÚ_pow_multinomialÚ_pow_generic)r¯   r+  r:   rÞ   rÛ   r  s         r9   Ú__pow__zPolyElement.__pow__²  sž  € õ ˜!�SÑ!Ô!ð 	TÝÐAÀAÑEÑFÔFÐFØ�ŠUˆUÝÐNÐQRÑRÑSÔSÐSàŒyˆàð 	Øð )Ø”x�å  Ñ(Ô(Ð(Ý�‰YŒY˜!Š^ˆ^Ý §
¢
¡¤Ñ-Ô-¨aÔ0‰LˆE�5Ø”	ˆAØ˜œœÒ'Ð'Ø16��$×#Ò# E¨1Ñ-Ô-Ñ.Ð.à16¸±��$×#Ò# E¨1Ñ-Ô-Ñ.àˆHõ �‰FŒFˆØˆqŠ5ˆ5ÝÐ0Ñ1Ô1Ð1à�!ŠVˆVØ—9’9‘;”;ÐØ�!ŠVˆVØ—;’;‘=”=Ð Ø�!ŠVˆVØ˜Ÿš™œÑ%Ð%Ý�‰YŒY˜!Š^ˆ^Ø×(Ò(¨Ñ+Ô+Ð+à×$Ò$ QÑ'Ô'Ð'r;   c                ó|   — | j         j        }| }	 |dz  r||z  }|dz  }|sn|                     ¦   «         }|dz  }Œ,|S )NTrÌ   rÈ  )r:   r’   rï  )r¯   r+  r  rP   s       r9   rñ  zPolyElement._pow_genericè  s`   € ØŒIŒMˆØˆð	Ø�1‰uð Ø�a‘C�Ø�Q‘�Øð Øà—’‘
”
ˆAØ�Q‘ˆAð	ð ˆr;   c                óà  — t          t          | ¦  «        |¦  «                             ¦   «         }| j        j        }| j        j        }|                      ¦   «         }| j        j        j        }| j        j        }|D ]r\  }}	|}
|	}t          ||¦  «        D ]\  }\  }}|r ||
||¦  «        }
|||z  z  }Œ t          |
¦  «        }|}| 
                    ||¦  «        |z   }|r|||<   Œk||v r||= Œs|S rd   )r   r€   rS   r:   r˜   r�   r7   r­   rW   r   rî   )r¯   r+  Úmultinomialsr˜   r�   rG  r­   r²   ÚmultinomialÚmultinomial_coeffÚproduct_monomÚproduct_coeffrö   rÞ   rÛ   s                  r9   rð  zPolyElement._pow_multinomialø  s  € Ý/µ°D±	´	¸1Ñ=Ô=×CÒCÑEÔEˆØœ)Ô3ˆØ”YÔ)ˆ
Ø—
’
‘”ˆØŒyÔÔ$ˆØŒyŒ~ˆà.:ð 	 ð 	 Ñ*ˆKÐ*Ø&ˆMØ-ˆMå'*¨;¸Ñ'>Ô'>ð 0ð 0Ñ#�‘^�e˜UØð 0Ø$3 O°MÀ5È#Ñ$NÔ$N�MØ! U¨C¡ZÑ/�Møå˜-Ñ(Ô(ˆEØ!ˆEà—H’H˜U DÑ)Ô)¨EÑ1ˆEàð  Ø#��U‘�Ø˜$��Ø˜�Køàˆr;   c                óN  — | j         }|j        }|j        }t          |                      ¦   «         ¦  «        }|j        j        }|j        }t          t          |¦  «        ¦  «        D ]S}||         }| |         }	t          |¦  «        D ]1}
||
         } |||¦  «        } |||¦  «        |	| |         z  z   ||<   Œ2ŒT| 	                    d¦  «        }|j        }|  
                    ¦   «         D ]&\  }} |||¦  «        } |||¦  «        |dz  z   ||<   Œ'|                     ¦   «          |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È  )r:   r­   rî   rI   rc  r7   r”   r«   r€   Úimul_numrS   r\  )r¯   r:   r  rî   rc  r­   r”   r°   Úk1ÚpkÚjÚk2rö   rQ  rR  s                  r9   rï  zPolyElement.square  s9  € ð ŒyˆØŒIˆØŒeˆÝ�D—I’I‘K”KÑ Ô ˆØŒ{ÔˆØÔ(ˆÝ•s˜4‘y”yÑ!Ô!ð 	6ð 	6ˆAØ�a”ˆBØ�b”ˆBÝ˜1‘X”Xð 6ð 6�Ø˜!”W�Ø"�l 2 rÑ*Ô*�Ø˜˜S $™œ¨"¨T°"¬X©+Ñ5��#‘�ð6ð �JŠJ�q‰MŒMˆØŒeˆØ—J’J‘L”Lð 	)ð 	)‰DˆAˆqØ�˜a Ñ#Ô#ˆBØ�C˜˜D‘M”M A q¡DÑ(ˆAˆb‰EˆEØ	�Š‰Œˆàˆr;   c                ó^  — | j         }|st          d¦  «        ‚|                     |¦  «        r|                      |¦  «        S t	          |t
          ¦  «        r€t	          |j        t          ¦  «        r|j        j         |j         k    rnPt	          |j         j        t          ¦  «        r*|j         j        j         |k    r|                     | ¦  «        S t          S 	 | 
                    |¦  «        }|                      |¦  «        |                      |¦  «        fS # t          $ r
 t          cY S w xY w©Núpolynomial division)r:   ÚZeroDivisionErrorrÓ   r›   re   rŒ   r7   r   Ú__rdivmod__rj  rØ   Ú
quo_groundÚ
rem_groundr"   ©r_  r`  r:   s      r9   Ú
__divmod__zPolyElement.__divmod__:  s"  € ØŒwˆàð 
	&Ý#Ð$9Ñ:Ô:Ð:Ø�_Š_˜RÑ Ô ð 	&Ø—6’6˜"‘:”:ÐÝ˜�KÑ(Ô(ð 	&Ý˜$œ+¥~Ñ6Ô6ð &¸4¼;Ô;KÈrÌwÒ;VÐ;VØÝ˜BœGœN­NÑ;Ô;ð &ÀÄÄÔ@SÐW[Ò@[Ð@[Ø—~’~ bÑ)Ô)Ð)å%Ð%ð	:Ø—’ Ñ$Ô$ˆBð —M’M "Ñ%Ô% r§}¢}°RÑ'8Ô'8Ð9Ð9øõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøs   ÃD ÄD,Ä+D,c                ó”   — | j         }	 |                     |¦  «        }|                     | ¦  «        S # t          $ r
 t          cY S w xY wrd   )r:   rÜ   r›   r"   rj  r  s      r9   r  zPolyElement.__rdivmod__P  óZ   € ØŒwˆð	Ø—’ Ñ$Ô$ˆBð —6’6˜"‘:”:Ðøõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøó   ‰3 ³AÁAc                ó4  — | j         }|st          d¦  «        ‚|                     |¦  «        r|                      |¦  «        S t	          |t
          ¦  «        r€t	          |j        t          ¦  «        r|j        j         |j         k    rnPt	          |j         j        t          ¦  «        r*|j         j        j         |k    r|                     | ¦  «        S t          S 	 | 
                    |¦  «        }|                      |¦  «        S # t          $ r
 t          cY S w xY wr  )r:   r  rÓ   Úremre   rŒ   r7   r   Ú__rmod__rj  rØ   r  r"   r  s      r9   Ú__mod__zPolyElement.__mod__Y  s  € ØŒwˆàð 
	&Ý#Ð$9Ñ:Ô:Ð:Ø�_Š_˜RÑ Ô ð 	&Ø—6’6˜"‘:”:ÐÝ˜�KÑ(Ô(ð 	&Ý˜$œ+¥~Ñ6Ô6ð &¸4¼;Ô;KÈrÌwÒ;VÐ;VØÝ˜BœGœN­NÑ;Ô;ð &ÀÄÄÔ@SÐW[Ò@[Ð@[Ø—{’{ 2‘”Ð&å%Ð%ð	%Ø—’ Ñ$Ô$ˆBð —=’= Ñ$Ô$Ð$øõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøó   ÃD ÄDÄDc                ó”   — | j         }	 |                     |¦  «        }|                     | ¦  «        S # t          $ r
 t          cY S w xY wrd   )r:   rÜ   r  r"   rj  r  s      r9   r  zPolyElement.__rmod__o  r
  r  c                ó4  — | j         }|st          d¦  «        ‚|                     |¦  «        r|                      |¦  «        S t	          |t
          ¦  «        r€t	          |j        t          ¦  «        r|j        j         |j         k    rnPt	          |j         j        t          ¦  «        r*|j         j        j         |k    r|                     | ¦  «        S t          S 	 | 
                    |¦  «        }|                      |¦  «        S # t          $ r
 t          cY S w xY wr  )r:   r  rÓ   Úquore   rŒ   r7   r   Ú__rtruediv__rj  rØ   r  r"   r  s      r9   Ú__floordiv__zPolyElement.__floordiv__x  s  € ØŒwˆàð 
	&Ý#Ð$9Ñ:Ô:Ð:Ø�_Š_˜RÑ Ô ð 	&Ø—6’6˜"‘:”:ÐÝ˜�KÑ(Ô(ð 	&Ý˜$œ+¥~Ñ6Ô6ð &¸4¼;Ô;KÈrÌwÒ;VÐ;VØÝ˜BœGœN­NÑ;Ô;ð &ÀÄÄÔ@SÐW[Ò@[Ð@[Ø—’ rÑ*Ô*Ð*å%Ð%ð	%Ø—’ Ñ$Ô$ˆBð —=’= Ñ$Ô$Ð$øõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøør  c                ó”   — | j         }	 |                     |¦  «        }|                     | ¦  «        S # t          $ r
 t          cY S w xY wrd   )r:   rÜ   r  r"   rj  r  s      r9   Ú__rfloordiv__zPolyElement.__rfloordiv__Ž  r
  r  c                ó4  — | j         }|st          d¦  «        ‚|                     |¦  «        r|                      |¦  «        S t	          |t
          ¦  «        r€t	          |j        t          ¦  «        r|j        j         |j         k    rnPt	          |j         j        t          ¦  «        r*|j         j        j         |k    r|                     | ¦  «        S t          S 	 | 
                    |¦  «        }|                      |¦  «        S # t          $ r
 t          cY S w xY wr  )r:   r  rÓ   Úexquore   rŒ   r7   r   r  rj  rØ   r  r"   r  s      r9   Ú__truediv__zPolyElement.__truediv__—  s  € ØŒwˆàð 
	&Ý#Ð$9Ñ:Ô:Ð:Ø�_Š_˜RÑ Ô ð 	&Ø—8’8˜B‘<”<ÐÝ˜�KÑ(Ô(ð 	&Ý˜$œ+¥~Ñ6Ô6ð &¸4¼;Ô;KÈrÌwÒ;VÐ;VØÝ˜BœGœN­NÑ;Ô;ð &ÀÄÄÔ@SÐW[Ò@[Ð@[Ø—’ rÑ*Ô*Ð*å%Ð%ð	%Ø—’ Ñ$Ô$ˆBð —=’= Ñ$Ô$Ð$øõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøør  c                ó”   — | j         }	 |                     |¦  «        }|                     | ¦  «        S # t          $ r
 t          cY S w xY wrd   )r:   rÜ   r  r"   rj  r  s      r9   r  zPolyElement.__rtruediv__­  sZ   € ØŒwˆð	 Ø—’ Ñ$Ô$ˆBð —8’8˜B‘<”<Ðøõ ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøør  c                óŽ   ‡‡‡— | j         j        Š| j         j        }|j        Š| j         j        Š|j        rˆˆˆfd„}nˆˆˆfd„}|S )Nc                óf   •— | \  }}|\  }}|‰	k    r|}n ‰||¦  «        }|�| ‰||¦  «        fS d S rd   r@   ©
Ú	a_lm_a_lcÚ	b_lm_b_lcÚa_lmÚa_lcÚb_lmÚb_lcrÞ   Ú
domain_quorœ   r™  s
          €€€r9   Úterm_divz'PolyElement._term_div.<locals>.term_div½  sX   ø€ Ø&‘
��dØ&‘
��dØ˜2’:�:Ø �E�Eà(˜L¨¨tÑ4Ô4�EØÐ$Ø  * *¨T°4Ñ"8Ô"8Ð8Ð8à˜4r;   c                óp   •— | \  }}|\  }}|‰	k    r|}n ‰||¦  «        }|�||z  s| ‰||¦  «        fS d S rd   r@   r  s
          €€€r9   r&  z'PolyElement._term_div.<locals>.term_divÉ  s_   ø€ Ø&‘
��dØ&‘
��dØ˜2’:�:Ø �E�Eà(˜L¨¨tÑ4Ô4�EØ˜¨°©˜Ø  * *¨T°4Ñ"8Ô"8Ð8Ð8à˜4r;   )r:   r�   r7   r  rœ   rT  )r¯   r7   r&  r%  rœ   r™  s      @@@r9   Ú	_term_divzPolyElement._term_div¶  s†   øøø€ ØŒYÔ!ˆØ”Ô!ˆØ”Zˆ
Ø”yÔ-ˆàŒ?ð 	 ð
 ð 
 ð 
 ð 
 ð 
 ð 
 ð 
 ð 
 ð
 ð 
 ð 
 ð 
 ð 
 ð 
 ð 
 ð ˆ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         ‰k    rt          d¦  «        ‚Œt          |¦  «        }ˆfd„t          |¦  «        D ¦   «         }|  	                    ¦   «         }‰j        }|  
                    ¦   «         }d„ |D ¦   «         }	|räd}
d}|
|k     r¢|dk    rœ|                     ¦   «         } ||||         f|	|
         ||
         |	|
                  f¦  «        }|�G|\  }}||
                              ||f¦  «        ||
<   |                     ||
         || f¦  «        }d	}n|
d	z  }
|
|k     r|dk    °œ|s4|                     ¦   «         }|                     |||         f¦  «        }||= |°ä|‰j        k    r||z  }|r|s	‰j        |fS |d         |fS ||fS )
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 ringc                ó   •— g | ]	}‰j         ‘Œ
S r@   )r­   ©rB   r°   r:   s     €r9   rD   z#PolyElement.div.<locals>.<listcomp>  s   ø€ Ð*Ð*Ð*˜AˆdŒiÐ*Ð*Ð*r;   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r@   )r¡   )rB   Úfxs     r9   rD   z#PolyElement.div.<locals>.<listcomp>  s"   € Ð0Ð0Ð0 r�—’Ñ"Ô"Ð0Ð0Ð0r;   r   NrÌ   )r:   re   rŒ   rl   r  r­   rä   r€   r«   r¹   r(  r¡   Ú_iadd_monomÚ_iadd_poly_monomr�   )r¯   ÚfvÚ
ret_singler~   rh   Úqvr  Úrr&  Úexpvsr°   Údivoccurredr±   ÚtermÚexpv1rP   r:   s                   @r9   r›   zPolyElement.div×  sh  ø€ ð8 ŒyˆØˆ
Ý�b�+Ñ&Ô&ð 	ØˆJØ�ˆBÝ�2‰wŒwð 	;Ý#Ð$9Ñ:Ô:Ð:Øð 	%Øð %Ø”y $¤)Ð+Ð+à˜4œ9�}Ð$Øð 	Gð 	GˆAØŒv˜Š~ˆ~Ý Ð!EÑFÔFÐFð å�‰GŒGˆØ*Ð*Ð*Ð*¥ q¡¤Ð*Ñ*Ô*ˆØ�IŠI‰KŒKˆØŒIˆØ—>’>Ñ#Ô#ˆØ0Ð0¨RÐ0Ñ0Ô0ˆØð 	ØˆAØˆKØ�a’%�%˜K¨1Ò,Ð,Ø—~’~Ñ'Ô'�Ø�x  q¨¤w °%¸´(¸B¸q¼EÀ%ÈÄ(¼OÐ1LÑMÔM�ØÐ#Ø#‘H�E˜1Ø˜qœE×-Ò-¨u°a¨jÑ9Ô9�B�q‘EØ×*Ò*¨2¨a¬5°5¸1¸"°+Ñ>Ô>�AØ"#�K�Kà˜‘F�Að �a’%�%˜K¨1Ò,Ð,ð ð ØŸšÑ(Ô(�Ø—M’M 4¨¨4¬ /Ñ2Ô2�Ø�d�Gð! ð 	ð" �4”?Ò"Ð"Ø�‰FˆAØð 	Øð  Ø”y !�|Ð#à˜!”u˜a�x�à�q�5ˆLr;   c                ó¸  — | }t          |t          ¦  «        r|g}t          |¦  «        st          d¦  «        ‚|j        }|j        }|j        }|j        }|j        }|                     ¦   «         }|j	        }	| 
                    ¦   «         }|j        }
|rÆ|D ]} ||	|j	        ¦  «        }|�j|\  }}|                     ¦   «         D ].\  }} |||¦  «        } |
||¦  «        ||z  z
  }|s||= Œ)|||<   Œ/|                     ¦   «         }|�
|||         f}	 nCŒ€|	\  }}||v r||xx         |z  cc<   n|||<   ||= |                     ¦   «         }|�
|||         f}	|°Æ|S r  )re   rŒ   rl   r  r:   r7   r­   r”   r(  ÚLTr¹   rî   rA  r¡   )r¯   ÚGr~   r:   r7   r­   r”   r3  r&  Últfrî   ÚgÚtqrO   rP   ÚmgÚcgÚm1Úc1ÚltmÚltcs                        r9   r  zPolyElement.rem#  s¹  € ØˆÝ�a�Ñ%Ô%ð 	Ø�ˆAÝ�1‰vŒvð 	;Ý#Ð$9Ñ:Ô:Ð:ØŒvˆØ”ˆØŒ{ˆØÔ(ˆØŒIˆØ—;’;‘=”=ˆØŒdˆØ�FŠF‰HŒHˆØŒeˆØð 	&Øð &ð &�Ø�X˜c 1¤4Ñ(Ô(�Ø�>Ø‘D�A�qØ"#§+¢+¡-¤-ð 'ð '™˜˜BØ)˜\¨"¨aÑ0Ô0˜Ø ˜S  T™]œ]¨Q¨r©TÑ1˜Ø!ð 'Ø ! "  à$&˜A˜b™E˜EØŸ.š.Ñ*Ô*�CØ�Ø! 1 S¤6˜k˜à�Eð "ð ‘��SØ˜!�8�8Ø�c�F�F”F˜c‘M�F�F‘F�Fà �A�c‘FØ�c�FØ—n’nÑ&Ô&�Ø�?Ø˜q œv˜+�Cð5 ð 	&ð8 ˆr;   c                ó8   — |                       |¦  «        d         S ©Nr   )r›   )r~   r:  s     r9   r  zPolyElement.quoP  s   € Ø�uŠu�Q‰xŒx˜Œ{Ðr;   c                óZ   — |                       |¦  «        \  }}|s|S t          | |¦  «        ‚rd   )r›   r$   )r~   r:  Úqr3  s       r9   r  zPolyElement.exquoS  s2   € Ø�uŠu�Q‰xŒx‰ˆˆ1àð 	,ØˆHå% a¨Ñ+Ô+Ð+r;   c                ó´   — | | j         j        v r|                      ¦   «         }n| }|\  }}|                     |¦  «        }|€|||<   n||z  }|r|||<   n||= |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

        )r:   r‘   r¹   rî   )r¯   ÚmcÚcpselfr±   rÛ   rP   s         r9   r.  zPolyElement._iadd_monom[  sz   € ð8 �4”9Ô&Ð&Ð&Ø—Y’Y‘[”[ˆFˆFàˆFØ‰ˆˆeØ�JŠJ�tÑÔˆØˆ9Ø ˆF�4‰LˆLà�‰JˆAØð !Ø ��t‘�à˜4�LØˆr;   c                ó&  — | }||j         j        v r|                     ¦   «         }|\  }}|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

        )r:   r‘   r¹   rî   r7   r­   r”   rS   )r¯   r`  rI  r_  rO   rP   rî   r­   r”   rQ  rR  ÚkarÛ   s                r9   r/  zPolyElement._iadd_poly_monom‡  s±   € ð* ˆØ�”Ô"Ð"Ð"Ø—’‘”ˆBØ‰ˆˆAØŒfˆØŒwŒ~Ô"ˆØ”wÔ+ˆØ—H’H‘J”Jð 	ð 	‰DˆAˆqØ�˜a Ñ#Ô#ˆBØ�C˜˜D‘M”M A a¡CÑ'ˆEØð Ø��2‘�à�r�F�FØˆ	r;   c                ó´   ‡— | j                              |¦  «        Š| st          S ‰dk     rdS t          ˆfd„|                      ¦   «         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  — | ]}|‰         V — Œd S rd   r@   ©rB   rÞ   r°   s     €r9   ri   z%PolyElement.degree.<locals>.<genexpr>º  ó'   øè è € Ð<Ð< E�u˜Q”xÐ<Ð<Ð<Ð<Ð<Ð<r;   )r:   rý   r   r}   rÃ  ©r~   Úxr°   s     @r9   ÚdegreezPolyElement.degree¬  ó\   ø€ ð ŒF�LŠL˜‰OŒOˆàð 	=ÝˆKØ�ŠUˆUØ�1åÐ<Ð<Ð<Ð<¨Q¯\ª\©^¬^Ð<Ñ<Ô<Ñ<Ô<Ð<r;   c                óÀ   — | st           f| j        j        z  S t          t	          t
          t          t          |                      ¦   «         Ž ¦  «        ¦  «        ¦  «        S )z“
        A tuple containing leading degrees in all variables.

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

        )	r   r:   rq   r   rT   r}   rI   rW   rÃ  r³  s    r9   ÚdegreeszPolyElement.degrees¼  óJ   € ð ð 	?Ý�7˜1œ6œ<Ñ'Ð'å��S¥$¥s¨A¯LªL©N¬NÐ';Ñ"<Ô"<Ñ=Ô=Ñ>Ô>Ð>r;   c                ó´   ‡— | j                              |¦  «        Š| st          S ‰dk     rdS t          ˆfd„|                      ¦   «         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  — | ]}|‰         V — Œd S rd   r@   rO  s     €r9   ri   z*PolyElement.tail_degree.<locals>.<genexpr>Ö  rP  r;   )r:   rý   r   ÚminrÃ  rQ  s     @r9   Útail_degreezPolyElement.tail_degreeÈ  rT  r;   c                óÀ   — | st           f| j        j        z  S t          t	          t
          t          t          |                      ¦   «         Ž ¦  «        ¦  «        ¦  «        S )z�
        A tuple containing tail degrees in all variables.

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

        )	r   r:   rq   r   rT   rZ  rI   rW   rÃ  r³  s    r9   Útail_degreeszPolyElement.tail_degreesØ  rW  r;   c                ó>   — | r| j                              | ¦  «        S dS )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)r:   r¡   r´   s    r9   r¡   zPolyElement.leading_expvä  s'   € ð ð 	Ø”9×)Ò)¨$Ñ/Ô/Ð/à�4r;   c                óL   — |                       || j        j        j        ¦  «        S rd   )rî   r:   r7   r­   ©r¯   r±   s     r9   Ú
_get_coeffzPolyElement._get_coeffø  s   € Ø�xŠx˜˜dœiÔ.Ô3Ñ4Ô4Ð4r;   c                óv  — |dk    r|                       | j        j        ¦  «        S | j                             |¦  «        rit	          |                     ¦   «         ¦  «        }t          |¦  «        dk    r5|d         \  }}|| j        j        j        k    r|                       |¦  «        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)
ra  r:   r�   rÓ   rI   rA  r€   r7   r’   rä   )r¯   rÒ   rG  rÞ   rÛ   s        r9   rÛ   zPolyElement.coeffû  sª   € ð4 �aŠ<ˆ<Ø—?’? 4¤9Ô#7Ñ8Ô8Ð8ØŒY×!Ò! 'Ñ*Ô*ð 	2Ý˜×*Ò*Ñ,Ô,Ñ-Ô-ˆEÝ�5‰zŒz˜QŠˆØ$ Qœx‘��uØ˜DœIÔ,Ô0Ò0Ð0ØŸ?š?¨5Ñ1Ô1Ð1åÐ6¸Ñ@ÑAÔAÐAr;   c                ó@   — |                       | j        j        ¦  «        S )z"Returns the constant coefficient. )ra  r:   r�   r´   s    r9   re  zPolyElement.const   s   € à�Š˜tœyÔ3Ñ4Ô4Ð4r;   c                óP   — |                       |                      ¦   «         ¦  «        S rd   )ra  r¡   r´   s    r9   r¥  zPolyElement.LC$  s    € à�Š˜t×0Ò0Ñ2Ô2Ñ3Ô3Ð3r;   c                óJ   — |                       ¦   «         }|€| j        j        S |S rd   )r¡   r:   r�   r`  s     r9   ÚLMzPolyElement.LM(  s(   € à× Ò Ñ"Ô"ˆØˆ<Ø”9Ô'Ð'àˆKr;   c                ór   — | 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

        )r:   r­   r¡   r7   r’   ©r¯   r  r±   s      r9   Úleading_monomzPolyElement.leading_monom0  s<   € ð ŒIŒNˆØ× Ò Ñ"Ô"ˆØð 	+Ø”iÔ&Ô*ˆAˆd‰GØˆr;   c                ó–   — |                       ¦   «         }|€| j        j        | j        j        j        fS ||                      |¦  «        fS rd   )r¡   r:   r�   r7   r­   ra  r`  s     r9   r9  zPolyElement.LTE  sG   € à× Ò Ñ"Ô"ˆØˆ<Ø”IÔ(¨$¬)Ô*:Ô*?Ð@Ð@à˜$Ÿ/š/¨$Ñ/Ô/Ð0Ð0r;   c                ó`   — | 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

        )r:   r­   r¡   rh  s      r9   Úleading_termzPolyElement.leading_termM  s6   € ð ŒIŒ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 rE  r@   )rÞ   s    r9   rx   z%PolyElement._sorted.<locals>.<lambda>h  s
   € °°q´€ r;   T)r|   Úreversec                ó&   •—  ‰| d         ¦  «        S rE  r@   )rÞ   r0   s    €r9   rx   z%PolyElement._sorted.<locals>.<lambda>j  s   ø€ °°°u¸Q´x±´€ r;   )r:   r0   rƒ   r‚   r    Úsorted)r¯   rb   r0   s     `r9   Ú_sortedzPolyElement._sorteda  sd   ø€ Øˆ=Ø”I”OˆEˆEåÔ'¨Ñ.Ô.ˆEà•Cˆ<ˆ<Ý˜#Ð#9Ð#9À4ÐHÑHÔHÐHå˜#Ð#@Ð#@Ð#@Ð#@È$ÐOÑOÔOÐOr;   c                ó@   — d„ |                       |¦  «        D ¦   «         S )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]

        c                ó   — g | ]\  }}|‘ŒS r@   r@   )rB   Ú_rÛ   s      r9   rD   z&PolyElement.coeffs.<locals>.<listcomp>„  s   € Ð:Ð:Ð:™8˜1˜e�Ð:Ð:Ð:r;   ©rG  ©r¯   r0   s     r9   r]   zPolyElement.coeffsl  ó$   € ð0 ;Ð: t§z¢z°%Ñ'8Ô'8Ð:Ñ:Ô:Ð:r;   c                ó@   — d„ |                       |¦  «        D ¦   «         S )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)]

        c                ó   — g | ]\  }}|‘ŒS r@   r@   )rB   rÞ   ru  s      r9   rD   z&PolyElement.monoms.<locals>.<listcomp>ž  s   € Ð:Ð:Ð:™8˜5 !�Ð:Ð:Ð:r;   rv  rw  s     r9   ÚmonomszPolyElement.monoms†  rx  r;   c                ól   — |                       t          |                      ¦   «         ¦  «        |¦  «        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)]

        )rr  rI   rS   rw  s     r9   rG  zPolyElement.terms   s(   € ð0 �|Š|�D §¢¡¤Ñ.Ô.°Ñ6Ô6Ð6r;   c                óD   — t          |                      ¦   «         ¦  «        S )z,Iterator over coefficients of a polynomial. )ÚiterrJ   r´   s    r9   Ú
itercoeffszPolyElement.itercoeffsº  ó   € å�D—K’K‘M”MÑ"Ô"Ð"r;   c                óD   — t          |                      ¦   «         ¦  «        S )z)Iterator over monomials of a polynomial. )r~  rc  r´   s    r9   rÃ  zPolyElement.itermonoms¾  ó   € å�D—I’I‘K”KÑ Ô Ð r;   c                óD   — t          |                      ¦   «         ¦  «        S )z%Iterator over terms of a polynomial. )r~  rS   r´   s    r9   rA  zPolyElement.itertermsÂ  ó   € å�D—J’J‘L”LÑ!Ô!Ð!r;   c                óD   — t          |                      ¦   «         ¦  «        S )z+Unordered list of polynomial coefficients. rH   r´   s    r9   Ú
listcoeffszPolyElement.listcoeffsÆ  r€  r;   c                óD   — t          |                      ¦   «         ¦  «        S )z(Unordered list of polynomial monomials. )rI   rc  r´   s    r9   Ú
listmonomszPolyElement.listmonomsÊ  r‚  r;   c                óD   — t          |                      ¦   «         ¦  «        S )z$Unordered list of polynomial terms. r[  r´   s    r9   Ú	listtermszPolyElement.listtermsÎ  r„  r;   c                ó†   — | | j         j        v r| |z  S |s|                      ¦   «          dS | 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)r:   r‘   Úclear)r  rP   rö   s      r9   rû  zPolyElement.imul_numÒ  sb   € ð4 �”Ô Ð Ð Ø�Q‘3ˆJØð 	Ø�GŠG‰IŒIˆIØˆFØð 	ð 	ˆCØˆcˆFˆFŒF�a‰KˆFˆF‰FˆFØˆr;   c                ó€   — | j         j        }|j        }|j        }|                      ¦   «         D ]} |||¦  «        }Œ|S )z*Returns GCD of polynomial's coefficients. )r:   r7   r­   rŸ   r  )r~   r7   ÚcontrŸ   rÛ   s        r9   rº  zPolyElement.contentõ  sH   € à””ˆØŒ{ˆØŒjˆà—\’\‘^”^ð 	$ð 	$ˆEØ�3�t˜UÑ#Ô#ˆDˆDàˆr;   c                óŠ   — |                       ¦   «         }|| j        j        j        k    r|| fS ||                      |¦  «        fS )z,Returns content and a primitive polynomial. )rº  r:   r7   r­   r  )r~   rŽ  s     r9   Ú	primitivezPolyElement.primitive   sB   € à�yŠy‰{Œ{ˆØ�1”6”=Ô%Ò%Ð%Ø˜!�9ÐØ�Q—\’\ $Ñ'Ô'Ð'Ð'r;   c                ó>   — | s| S |                       | j        ¦  «        S )z5Divides all coefficients by the leading coefficient. )r  r¥  r³  s    r9   ÚmoniczPolyElement.monic  s#   € àð 	&ØˆHà—<’< ¤Ñ%Ô%Ð%r;   c                óŠ   ‡— ‰s| j         j        S ˆfd„|                      ¦   «         D ¦   «         }|                      |¦  «        S )Nc                ó$   •— g | ]\  }}||‰z  f‘ŒS r@   r@   ©rB   rÞ   rÛ   rR  s      €r9   rD   z*PolyElement.mul_ground.<locals>.<listcomp>  s&   ø€ ÐFÐFÐF¡| u¨e�5˜% ™'Ð"ÐFÐFÐFr;   )r:   r­   rA  r�   )r~   rR  rG  s    ` r9   r  zPolyElement.mul_ground  sF   ø€ Øð 	Ø”6”;ÐàFÐFÐFÐF°q·{²{±}´}ÐFÑFÔFˆØ�uŠu�U‰|Œ|Ðr;   c                óŠ   ‡‡— | j         j        Šˆˆfd„|                      ¦   «         D ¦   «         }|                      |¦  «        S )Nc                ó2   •— g | ]\  }} ‰|‰¦  «        |f‘ŒS r@   r@   )rB   Úf_monomÚf_coeffrÞ   r”   s      €€r9   rD   z)PolyElement.mul_monom.<locals>.<listcomp>  s/   ø€ Ð]Ð]Ð]Ñ>N¸gÀw�<�< ¨Ñ/Ô/°Ð9Ð]Ð]Ð]r;   )r:   r”   rS   r�   )r~   rÞ   rG  r”   s    ` @r9   Ú	mul_monomzPolyElement.mul_monom  sG   øø€ Ø”vÔ*ˆØ]Ð]Ð]Ð]Ð]ÐRS×RYÒRYÑR[ÔR[Ð]Ñ]Ô]ˆØ�uŠu�U‰|Œ|Ðr;   c                ó  ‡‡‡— |\  ŠŠ| r‰s| j         j        S ‰| j         j        k    r|                      ‰¦  «        S | j         j        Šˆˆˆfd„|                      ¦   «         D ¦   «         }|                      |¦  «        S )Nc                ó8   •— g | ]\  }} ‰|‰¦  «        |‰z  f‘ŒS r@   r@   )rB   r˜  r™  rÛ   rÞ   r”   s      €€€r9   rD   z(PolyElement.mul_term.<locals>.<listcomp>#  s3   ø€ ÐcÐcÐcÑDTÀGÈW�<�< ¨Ñ/Ô/°¸±Ð?ÐcÐcÐcr;   )r:   r­   r�   r  r”   rS   r�   )r~   r6  rG  rÛ   rÞ   r”   s      @@@r9   Úmul_termzPolyElement.mul_term  s�   øøø€ Ø‰ˆˆuàð 	'˜ð 	'Ø”6”;ÐØ�a”fÔ'Ò'Ð'Ø—<’< Ñ&Ô&Ð&à”vÔ*ˆØcÐcÐcÐcÐcÐcÐXY×X_ÒX_ÑXaÔXaÐcÑcÔcˆØ�uŠu�U‰|Œ|Ðr;   c                ó(  ‡‡— | j         j        }‰st          d¦  «        ‚| r‰|j        k    r| S |j        r)|j        Šˆˆfd„|                      ¦   «         D ¦   «         }n ˆfd„|                      ¦   «         D ¦   «         }|                      |¦  «        S )Nr  c                ó2   •— g | ]\  }}| ‰|‰¦  «        f‘ŒS r@   r@   )rB   rÞ   rÛ   r  rR  s      €€r9   rD   z*PolyElement.quo_ground.<locals>.<listcomp>0  s,   ø€ ÐPÐPÐP±°¸�u˜c˜c %¨™mœmÐ,ÐPÐPÐPr;   c                ó.   •— g | ]\  }}|‰z  °
||‰z  f‘ŒS r@   r@   r•  s      €r9   rD   z*PolyElement.quo_ground.<locals>.<listcomp>2  s2   ø€ Ð`Ð`Ð`©l¨e°UÐTYÐ\]ÑT]Ð`�u˜e q™jÐ)Ð`Ð`Ð`r;   )r:   r7   r  r’   rT  r  rA  r�   )r~   rR  r7   rG  r  s    `  @r9   r  zPolyElement.quo_ground&  s¤   øø€ Ø””ˆàð 	;Ý#Ð$9Ñ:Ô:Ð:Øð 	�A˜œ’O�OØˆHàŒ?ð 	aØ”*ˆCØPÐPÐPÐPÐPÀÇÂÁÄÐPÑPÔPˆEˆEà`Ð`Ð`Ð`¸a¿kºk¹m¼mÐ`Ñ`Ô`ˆEà�uŠu�U‰|Œ|Ðr;   c                ó@  ‡‡— ‰\  }}|st          d¦  «        ‚| s| j        j        S || j        j        k    r|                      |¦  «        S |                      ¦   «         Šˆˆfd„|                      ¦   «         D ¦   «         }|                      d„ |D ¦   «         ¦  «        S )Nr  c                ó(   •— g | ]} ‰|‰¦  «        ‘ŒS r@   r@   )rB   Útr6  r&  s     €€r9   rD   z(PolyElement.quo_term.<locals>.<listcomp>B  s%   ø€ Ð<Ð<Ð<¨�(�(˜1˜dÑ#Ô#Ð<Ð<Ð<r;   c                ó   — g | ]}|®|‘ŒS rd   r@   )rB   r£  s     r9   rD   z(PolyElement.quo_term.<locals>.<listcomp>C  s   € Ð:Ð:Ð:˜Q¨1¨=�q¨=¨=¨=r;   )r  r:   r­   r�   r  r(  rA  r�   )r~   r6  rÞ   rÛ   rG  r&  s    `   @r9   Úquo_termzPolyElement.quo_term6  sª   øø€ Ø‰ˆˆuàð 	'Ý#Ð$9Ñ:Ô:Ð:Øð 	'Ø”6”;ÐØ�a”fÔ'Ò'Ð'Ø—<’< Ñ&Ô&Ð&à—;’;‘=”=ˆà<Ð<Ð<Ð<Ð<¨Q¯[ª[©]¬]Ð<Ñ<Ô<ˆØ�uŠuÐ:Ð: %Ð:Ñ:Ô:Ñ;Ô;Ð;r;   c                óJ  ‡— | j         j        j        rGg }|                      ¦   «         D ]/\  }}|‰z  }|‰dz  k    r|‰z
  }|                     ||f¦  «         Œ0n ˆfd„|                      ¦   «         D ¦   «         }|                      |¦  «        }|                     ¦   «          |S )NrÈ  c                ó$   •— g | ]\  }}||‰z  f‘ŒS r@   r@   )rB   rÞ   rÛ   r  s      €r9   rD   z,PolyElement.trunc_ground.<locals>.<listcomp>Q  s&   ø€ ÐLÐLÐL©\¨U°E�u˜e a™iÐ(ÐLÐLÐLr;   )r:   r7   Úis_ZZrA  r®   r�   r\  )r~   r  rG  rÞ   rÛ   r²   s    `    r9   Útrunc_groundzPolyElement.trunc_groundE  s¸   ø€ ØŒ6Œ=Ôð 	MØˆEà !§¢¡¤ð -ð -‘��uØ ™	�à˜1 ™6’>�>Ø! A™I�Eà—’˜e U˜^Ñ,Ô,Ð,Ð,ð-ð MÐLÐLÐL¸Q¿[º[¹]¼]ÐLÑLÔLˆEà�uŠu�U‰|Œ|ˆØ�ŠÑÔÐØˆr;   c                óô   — | }|                      ¦   «         }|                      ¦   «         }|j        j                             ||¦  «        }|                     |¦  «        }|                     |¦  «        }|||fS rd   )rº  r:   r7   rŸ   r  )r¯   r<  r~   ÚfcÚgcrŸ   s         r9   Úextract_groundzPolyElement.extract_groundY  sh   € ØˆØ�YŠY‰[Œ[ˆØ�YŠY‰[Œ[ˆàŒfŒm×Ò  BÑ'Ô'ˆà�LŠL˜ÑÔˆØ�LŠL˜ÑÔˆà�A�qˆyÐr;   c                óž   ‡— | s| j         j        j        S | j         j        j        Š |ˆfd„|                      ¦   «         D ¦   «         ¦  «        S )Nc                ó&   •— g | ]} ‰|¦  «        ‘ŒS r@   r@   )rB   rÛ   Ú
ground_abss     €r9   rD   z%PolyElement._norm.<locals>.<listcomp>j  s#   ø€ ÐNÐNÐN°U˜z˜z¨%Ñ0Ô0ÐNÐNÐNr;   )r:   r7   r­   Úabsr  )r~   Ú	norm_funcr°  s     @r9   Ú_normzPolyElement._norme  sR   ø€ Øð 	PØ”6”=Ô%Ð%àœœÔ*ˆJØ�9ÐNÐNÐNÐN¸a¿lºl¹n¼nÐNÑNÔNÑOÔOÐOr;   c                ó6   — |                       t          ¦  «        S rd   )r³  r}   r³  s    r9   Úmax_normzPolyElement.max_norml  ó   € Ø�wŠw•s‰|Œ|Ðr;   c                ó6   — |                       t          ¦  «        S rd   )r³  rU   r³  s    r9   Úl1_normzPolyElement.l1_normo  r¶  r;   c                óJ  — | j         }| gt          |¦  «        z   }dg|j        z  }|D ]G}|                     ¦   «         D ]0}t	          |¦  «        D ]\  }}t          ||         |¦  «        ||<   ŒŒ1ŒHt	          |¦  «        D ]\  }}	|	sd||<   Œt          |¦  «        }t          d„ |D ¦   «         ¦  «        r||fS g }
|D ]d}|j        }| 	                    ¦   «         D ]1\  }}d„ t          ||¦  «        D ¦   «         }||t          |¦  «        <   Œ2|
                     |¦  «         Œe||
fS )Nr   rÌ   c              3  ó"   K  — | ]
}|d k    V — ŒdS r¾  r@   )rB   rw   s     r9   ri   z&PolyElement.deflate.<locals>.<genexpr>ƒ  s&   è è € Ð!Ð!˜!ˆq�AŠvÐ!Ð!Ð!Ð!Ð!Ð!r;   c                ó   — g | ]
\  }}||z  ‘ŒS r@   r@   ©rB   r°   rþ  s      r9   rD   z'PolyElement.deflate.<locals>.<listcomp>Œ  s    € Ð4Ð4Ð4¡  A�a˜1‘fÐ4Ð4Ð4r;   )r:   rI   rq   rÃ  r  r   r   rl   r­   rA  rW   r®   )r~   r:  r:   r_   ÚJr  rÞ   r°   rO   rw   ÚHÚhÚIrÛ   ÚNs                  r9   ÚdeflatezPolyElement.deflater  se  € ØŒvˆØ�•d˜1‘g”g‘ˆàˆC�”
‰Nˆàð 	)ð 	)ˆAØŸš™œð )ð )�Ý% eÑ,Ô,ð )ð )‘D�A�qÝ  !¤ a™=œ=�A�a‘D�Dð)ð)õ ˜a‘L”Lð 	ð 	‰DˆAˆqØð Ø��!‘øå�!‰HŒHˆåÐ!Ð!˜qÐ!Ñ!Ô!Ñ!Ô!ð 	Ø�e�8ˆOàˆàð 	ð 	ˆAØ”	ˆAàŸKšK™MœMð $ð $‘��5Ø4Ð4­¨Q°©¬Ð4Ñ4Ô4�Ø#�•%˜‘(”(‘�à�HŠH�Q‰KŒKˆKˆKà�!ˆtˆr;   c                óª   — | j         j        }|                      ¦   «         D ]1\  }}d„ t          ||¦  «        D ¦   «         }||t	          |¦  «        <   Œ2|S )Nc                ó   — g | ]
\  }}||z  ‘ŒS r@   r@   r¼  s      r9   rD   z'PolyElement.inflate.<locals>.<listcomp>—  s    € Ð-Ð-Ð-™$˜!˜Q�!�A‘#Ð-Ð-Ð-r;   )r:   r­   rA  rW   r   )r~   r½  r²   rÀ  rÛ   rÁ  s         r9   ÚinflatezPolyElement.inflate“  sW   € ØŒvŒ{ˆàŸš™œð 	#ð 	#‰HˆAˆuØ-Ð-¥# a¨¡)¤)Ð-Ñ-Ô-ˆAØ"ˆD•�q‘”‰NˆNàˆr;   c                ój  — | }|j         j        }|j        sD|                     ¦   «         \  }}|                     ¦   «         \  }}|                     ||¦  «        }||z                       |                     |¦  «        ¦  «        }|j        s|                     |¦  «        S |                     ¦   «         S rd   )	r:   r7   rT  r�  r�   r  rŸ   r  r’  )r¯   r<  r~   r7   r«  r¬  rP   r¿  s           r9   r�   zPolyElement.lcmœ  s–   € ØˆØ””ˆàŒð 	#Ø—K’K‘M”M‰EˆB�Ø—K’K‘M”M‰EˆB�Ø—
’
˜2˜rÑ"Ô"ˆAàˆq‰S�IŠI�a—e’e˜A‘h”hÑÔˆàŒð 	Ø—<’< ‘?”?Ð"à—7’7‘9”9Ðr;   c                ó8   — |                       |¦  «        d         S rE  )Ú	cofactors©r~   r<  s     r9   rŸ   zPolyElement.gcd¬  s   € Ø�{Š{˜1‰~Œ~˜aÔ Ð r;   c                óT  — | s|s| j         j        }|||fS | s|                      |¦  «        \  }}}|||fS |s|                     | ¦  «        \  }}}|||fS t          | ¦  «        dk    r|                      |¦  «        \  }}}|||fS t          |¦  «        dk    r|                     | ¦  «        \  }}}|||fS |                      |¦  «        \  }\  } }|                      |¦  «        \  }}}|                     |¦  «        |                     |¦  «        |                     |¦  «        fS rë   )r:   r­   Ú	_gcd_zeror€   Ú
_gcd_monomrÂ  Ú_gcdrÅ  )r~   r<  r­   r¿  ÚcffÚcfgr½  s          r9   rÈ  zPolyElement.cofactors¯  s0  € Øð 	˜ð 	Ø”6”;ˆDØ˜˜tÐ#Ð#Øð 	ØŸ+š+ a™.œ.‰KˆAˆs�CØ�c˜3�;ÐØð 	ØŸ+š+ a™.œ.‰KˆAˆs�CØ�c˜3�;ÐÝ�‰VŒV�qŠ[ˆ[ØŸ,š, q™/œ/‰KˆAˆs�CØ�c˜3�;ÐÝ�‰VŒV�qŠ[ˆ[ØŸ,š, q™/œ/‰KˆAˆs�CØ�c˜3�;Ðà—I’I˜a‘L”L‰	ˆ‰6ˆAˆqØ—f’f˜Q‘i”i‰ˆˆ3�à—	’	˜!‘”˜cŸkšk¨!™nœn¨c¯kªk¸!©n¬nÐ=Ð=r;   c                óX   — | j         j        | j         j        }}|j        r|||fS | || fS rd   )r:   r’   r­   r®  )r~   r<  r’   r­   s       r9   rË  zPolyElement._gcd_zeroÅ  s:   € Ø”F”J ¤¤ˆTˆØÔð 	"Ø�d˜C�<Ðà�2�t˜c˜T�>Ð!r;   c                ó$  ‡‡‡‡— | j         }|j        j        }|j        j        Š|j        }|j        Št          |                      ¦   «         ¦  «        d         \  }}||cŠŠ|                     ¦   «         D ]\  }} |‰|¦  «        Š |‰|¦  «        ŠŒ|                      ‰‰fg¦  «        }	|                       ‰|‰¦  «         ‰|‰¦  «        fg¦  «        }
|                      ˆˆˆˆfd„|                     ¦   «         D ¦   «         ¦  «        }|	|
|fS )Nr   c                óF   •— g | ]\  }} ‰|‰¦  «         ‰|‰¦  «        f‘ŒS r@   r@   )rB   r>  r?  Ú_cgcdÚ_mgcdÚ
ground_quorš   s      €€€€r9   rD   z*PolyElement._gcd_monom.<locals>.<listcomp>Ù  s:   ø€ ÐcÐcÐcÉ6È2Èr�m�m B¨Ñ.Ô.°
°
¸2¸uÑ0EÔ0EÐFÐcÐcÐcr;   )	r:   r7   rŸ   r  r    rš   rI   rA  r�   )r~   r<  r:   Ú
ground_gcdr    ÚmfÚcfr>  r?  r¿  rÎ  rÏ  rÓ  rÔ  rÕ  rš   s               @@@@r9   rÌ  zPolyElement._gcd_monomÌ  s(  øøøø€ ØŒvˆØ”[”_ˆ
Ø”[”_ˆ
ØÔ(ˆØÔ*ˆÝ�a—k’k‘m”mÑ$Ô$ QÔ'‰ˆˆBØ˜2ˆˆˆuØ—k’k‘m”mð 	*ð 	*‰FˆB�Ø �L ¨Ñ+Ô+ˆEØ�J˜u bÑ)Ô)ˆEˆEØ�EŠE�E˜5�>Ð"Ñ#Ô#ˆØ�eŠe�m�m B¨Ñ.Ô.°
°
¸2¸uÑ0EÔ0EÐFÐGÑHÔHˆØ�eŠeÐcÐcÐcÐcÐcÐcÐcÐUV×U`ÒU`ÑUbÔUbÐcÑcÔcÑdÔdˆØ�#�sˆ{Ðr;   c                óÀ   — | j         }|j        j        r|                      |¦  «        S |j        j        r|                      |¦  «        S |                     | |¦  «        S rd   )r:   r7   Úis_QQÚ_gcd_QQr¨  Ú_gcd_ZZÚdmp_inner_gcd)r~   r<  r:   s      r9   rÍ  zPolyElement._gcdÜ  sY   € ØŒvˆàŒ;Ôð 	,Ø—9’9˜Q‘<”<ÐØŒ[Ôð 	,Ø—9’9˜Q‘<”<Ðà×%Ò% a¨Ñ+Ô+Ð+r;   c                ó"   — t          | |¦  «        S rd   r   rÉ  s     r9   rÜ  zPolyElement._gcd_ZZæ  s   € Ý�a˜‰|Œ|Ðr;   c                ó¾  — | }|j         }|                     |j                             ¦   «         ¬¦  «        }|                     ¦   «         \  }}|                     ¦   «         \  }}|                     |¦  «        }|                     |¦  «        }|                     |¦  «        \  }}}	|                     |¦  «        }|j        |                     ¦   «         }}
|                     |¦  «         	                    |j         
                    |
|¦  «        ¦  «        }|	                     |¦  «         	                    |j         
                    |
|¦  «        ¦  «        }	|||	fS )Nr	  )r:   rÈ   r7   rV  rY  rH  rÜ  r¥  r’  r  r  )r¯   r<  r~   r:   rF  rØ  r?  r¿  rÎ  rÏ  rP   s              r9   rÛ  zPolyElement._gcd_QQé  s  € ØˆØŒvˆØ—:’: T¤[×%9Ò%9Ñ%;Ô%;�:Ñ<Ô<ˆà—’Ñ Ô ‰ˆˆAØ—’Ñ Ô ‰ˆˆAà�JŠJ�xÑ Ô ˆØ�JŠJ�xÑ Ô ˆà—i’i ‘l”l‰ˆˆ3�à�JŠJ�tÑÔˆØŒt�Q—W’W‘Y”Yˆ1ˆà�lŠl˜4Ñ Ô ×+Ò+¨D¬K¯OªO¸A¸rÑ,BÔ,BÑCÔCˆØ�lŠl˜4Ñ Ô ×+Ò+¨D¬K¯OªO¸A¸rÑ,BÔ,BÑCÔCˆà�#�sˆ{Ðr;   c                ód  — | }|j         }|s	||j        fS |j        }|j        r|j        s|                     |¦  «        \  }}}�n|                     |                     ¦   «         ¬¦  «        }|                     ¦   «         \  }	}|                     ¦   «         \  }
}| 	                    |¦  «        }| 	                    |¦  «        }|                     |¦  «        \  }}}|j                             |
|	¦  «        \  }}
}	| 	                    |¦  «        }| 	                    |¦  «        }| 
                    |
¦  «        }| 
                    |	¦  «        }|                     ¦   «         }||j        k    rn=||j         k    r| | }}n*| 
                    |¦  «        }| 
                    |¦  «        }||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	  )r:   r’   r7   rT  rU  rÈ  rÈ   rV  rY  rH  r  Úcanonical_unit)r¯   r<  r~   r:   r7   ru  r  rG  rF  ÚcqÚcpÚus               r9   ÚcancelzPolyElement.cancelþ  s—  € ð ˆØŒvˆàð 	Ø�d”h�;Ðà”ˆà”ð 	! FÔ$9ð 	!Ø—k’k !‘n”n‰GˆAˆq�!‘!à—z’z¨¯ªÑ):Ô):�zÑ;Ô;ˆHà—N’NÑ$Ô$‰EˆB�Ø—N’NÑ$Ô$‰EˆB�à—
’
˜8Ñ$Ô$ˆAØ—
’
˜8Ñ$Ô$ˆAà—k’k !‘n”n‰GˆAˆq�!Ø œ×1Ò1°"°bÑ9Ô9‰IˆAˆr�2à—
’
˜4Ñ Ô ˆAØ—
’
˜4Ñ Ô ˆAà—’˜RÑ Ô ˆAØ—’˜RÑ Ô ˆAð
 ×ÒÑÔˆØ�”
Š?ˆ?ØØ�6”:�+ÒÐØ�2˜�rˆqˆAˆAà—’˜Q‘”ˆAØ—’˜Q‘”ˆAà�!ˆtˆr;   c                óN   — | j         j        }|                     | j        ¦  «        S rd   )r:   r7   rá  r¥  )r~   r7   s     r9   rá  zPolyElement.canonical_unit6	  s!   € Ø””ˆØ×$Ò$ Q¤TÑ*Ô*Ð*r;   c                ó(  — | j         }|                     |¦  «        }|                     |¦  «        }|j        }|                      ¦   «         D ]D\  }}||         r7|                     ||¦  «        }|                     |||         z  ¦  «        ||<   ŒE|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

        )r:   rý   r¬   r­   rA  rš   rØ   )	r~   rR  r:   r°   rO   r<  r±   rÛ   Úes	            r9   ÚdiffzPolyElement.diff:	  s“   € ð ŒvˆØ�JŠJ�q‰MŒMˆØ×Ò Ñ"Ô"ˆØŒIˆØŸ;š;™=œ=ð 	6ð 	6‰KˆD�%Ø�AŒwð 6Ø×&Ò& t¨QÑ/Ô/�Ø—’ u¨T°!¬W¡}Ñ5Ô5��!‘øØˆr;   c                ó  — dt          |¦  «        cxk     r| j        j        k    r=n n:|                      t	          t          | j        j        |¦  «        ¦  «        ¦  «        S t          d| j        j        ›dt          |¦  «        ›�¦  «        ‚)Nr   z expected at least 1 and at most z values, got )r€   r:   rq   ÚevaluaterI   rW   r5   rä   )r~   rJ   s     r9   r2  zPolyElement.__call__S	  s…   € Ø�s�6‰{Œ{Ð*Ð*Ò*Ð*˜aœfœlÒ*Ð*Ð*Ð*Ð*Ø—:’:�d¥3 q¤v¤{°FÑ#;Ô#;Ñ<Ô<Ñ=Ô=Ð=å�*ÐTUÔTZÔT`ÐT`ÐT`ÕbeÐflÑbmÔbmÐbmÐnÑoÔoÐor;   c                óÈ  ‡— | }t          |t          ¦  «        rU|€S|d         |dd …         c\  Š}}|                     ‰|¦  «        }|s|S ˆfd„|D ¦   «         }|                     |¦  «        S |j        }|                     |¦  «        }|j                             |¦  «        }|j        dk    r5|j        j        }| 	                    ¦   «         D ]\  \  }}||||z  z  z  }Œ|S | 
                    |¦  «        j        }	| 	                    ¦   «         D ]O\  }
}|
|         |
d |…         |
|dz   d …         z   }
}|||z  z  }|
|	v r||	|
         z   }|r||	|
<   ŒD|	|
= ŒH|r||	|
<   ŒP|	S )Nr   rÌ   c                óD   •— g | ]\  }}|                      ‰¦  «        |f‘ŒS r@   )r  )rB   ÚYrv   ÚXs      €r9   rD   z(PolyElement.evaluate.<locals>.<listcomp>c	  s+   ø€ Ð6Ð6Ð6©¨!¨Q�q—v’v˜a‘y”y !�nÐ6Ð6Ð6r;   )re   rI   rë  r:   rý   r7   rÕ   rq   r­   rA  r  )r¯   rR  rv   r~   r:   r°   Úresultr+  rÛ   r²   rÞ   rï  s              @r9   rë  zPolyElement.evaluateY	  s¢  ø€ Øˆå�a�ÑÔð 	% 1 9Ø˜!œ˜a   œeˆI‰FˆQ��AØ—
’
˜1˜aÑ Ô ˆAàð %Ø�à6Ð6Ð6Ð6°1Ð6Ñ6Ô6�Ø—z’z !‘}”}Ð$àŒvˆØ�JŠJ�q‰MŒMˆØŒK×Ò Ñ"Ô"ˆàŒ:˜Š?ˆ?Ø”[Ô%ˆFà Ÿ{š{™}œ}ð %ð %‘‘��eØ˜%  1¡™*Ñ$��àˆMà—9’9˜Q‘<”<Ô$ˆDà !§¢¡¤ð ,ð ,‘��uØ  œ8 U¨2¨A¨2¤Y°°q¸±s°t°t´Ñ%<�5�Ø˜a ™d™
�à˜D�=�=Ø! D¨¤KÑ/�Eàð (Ø&+˜˜U™˜à  ˜K˜Kàð ,Ø&+˜˜U™øàˆKr;   c                óf  — | }t          |t          ¦  «        r"|€ |D ]\  }}|                     ||¦  «        }Œ|S |j        }|                     |¦  «        }|j                             |¦  «        }|j        dk    rH|j        j        }| 	                    ¦   «         D ]\  \  }}	||	||z  z  z  }Œ| 
                    |¦  «        S |j        }
| 	                    ¦   «         D ]R\  }}	||         |d |…         dz   ||dz   d …         z   }}|	||z  z  }	||
v r|	|
|         z   }	|	r|	|
|<   ŒG|
|= ŒK|	r|	|
|<   ŒS|
S )NrÌ   rs   )re   rI   Úsubsr:   rý   r7   rÕ   rq   r­   rA  rÜ   )r¯   rR  rv   r~   rï  r:   r°   rð  r+  rÛ   r²   rÞ   s               r9   rò  zPolyElement.subs…	  so  € Øˆå�a�ÑÔð 	 1 9Øð !ð !‘��1Ø—F’F˜1˜a‘L”L��ØˆHàŒvˆØ�JŠJ�q‰MŒMˆØŒK×Ò Ñ"Ô"ˆàŒ:˜Š?ˆ?Ø”[Ô%ˆFà Ÿ{š{™}œ}ð %ð %‘‘��eØ˜%  1¡™*Ñ$��à—?’? 6Ñ*Ô*Ð*à”9ˆDà !§¢¡¤ð ,ð ,‘��uØ  œ8 U¨2¨A¨2¤Y°Ñ%5¸¸aÀ¹c¸d¸d¼Ñ%C�5�Ø˜a ™d™
�à˜D�=�=Ø! D¨¤KÑ/�Eàð (Ø&+˜˜U™˜à  ˜K˜Kàð ,Ø&+˜˜U™øàˆKr;   c                ó¼  ‡‡‡‡— |                       ¦   «         }|j        Š‰j        }|s
|‰j        g fS ˆfd„t	          |¦  «        D ¦   «         Ši Šˆˆfd„}t          t	          |dz
  ¦  «        ¦  «        }t          t	          |dd¦  «        ¦  «        }‰j        }|�rd\  }}}	t          |                     ¦   «         ¦  «        D ]V\  }
\  Š}t          ˆfd„|D ¦   «         ¦  «        r3t          d„ t          |‰¦  «        D ¦   «         ¦  «        }||k    r|‰|}	}}ŒW|dk    r||	cŠ}nn�g }t          ‰‰dd	…         d
z   ¦  «        D ]\  }}|                     ||z
  ¦  «         Œ|‰                     t          |¦  «        |¦  «        z  }|}t          |¦  «        D ]\  }
}| ||
|¦  «        z  }Œ||z  }|�°t          t          ‰j        ‰¦  «        ¦  «        }|||fS )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

        c                ó@   •— g | ]}‰                      |d z   ¦  «        ‘ŒS )rÌ   )r,  r+  s     €r9   rD   z*PolyElement.symmetrize.<locals>.<listcomp>î	  s+   ø€ Ð<Ð<Ð<¨a�×$Ò$ Q q¡SÑ)Ô)Ð<Ð<Ð<r;   c                óD   •— | |f‰vr‰|          |z  ‰| |f<   ‰| |f         S rd   r@   )r°   r+  Úpoly_powersr_   s     €€r9   Úget_poly_powerz.PolyElement.symmetrize.<locals>.get_poly_powerñ	  s7   ø€ Ø�1ˆv˜[Ð(Ð(Ø&+¨A¤h°¡k�˜Q ˜FÑ#Ø  1˜vÔ&Ð&r;   rÌ   r   rü   )rü   NNc              3  óB   •K  — | ]}‰|         ‰|d z            k    V — ŒdS r¾  r@   )rB   r°   rÞ   s     €r9   ri   z)PolyElement.symmetrize.<locals>.<genexpr>ÿ	  s4   øè è € ÐAÐA°A�u˜Q”x 5¨¨Q©¤<Ò/ÐAÐAÐAÐAÐAÐAr;   c              3  ó&   K  — | ]\  }}||z  V — Œd S rd   r@   )rB   r+  rO   s      r9   ri   z)PolyElement.symmetrize.<locals>.<genexpr> 
  s*   è è € Ð EÐ E©¨¨A  1¡Ð EÐ EÐ EÐ EÐ EÐ Er;   Nrs   )r¹   r:   rq   r­   r«   rI   r  rG  rl   r}   rW   r®   rÚ   r   r5   )r¯   r~   r+  r÷  r  ÚweightsÚ	symmetricÚ_heightÚ_monomÚ_coeffr°   rÛ   ÚheightÚ	exponentsr@  Úm2Úproductrø   rÞ   rö  r_   r:   s                     @@@@r9   Ú
symmetrizezPolyElement.symmetrize¬	  sM  øøøø€ ðv �IŠI‰KŒKˆØŒvˆØŒJˆàð 	$Ø�d”i Ð#Ð#à<Ð<Ð<Ð<µ5¸±8´8Ð<Ñ<Ô<ˆàˆð	'ð 	'ð 	'ð 	'ð 	'ð 	'õ
 •u˜Q ™U‘|”|Ñ$Ô$ˆÝ•u˜Q  2‘”Ñ'Ô'ˆà”Iˆ	àñ 	Ø&4Ñ#ˆG�V˜Vå%.¨q¯wªw©y¬yÑ%9Ô%9ð Gð GÑ!�‘>�E˜5ÝÐAÐAÐAÐA¸ÐAÑAÔAÑAÔAð GÝ Ð EÐ Eµ°W¸eÑ1DÔ1DÐ EÑ EÔ EÑEÔE�Fà Ò'Ð'Ø28¸%À¨ ˜øà˜"Š}ˆ}Ø% v���u�uààˆIÝ˜e U¨1¨2¨2¤Y°Ñ%5Ñ6Ô6ð *ð *‘��BØ× Ò   b¡Ñ)Ô)Ð)Ð)à˜Ÿš¥u¨YÑ'7Ô'7¸Ñ?Ô?Ñ?ˆIàˆGÝ! )Ñ,Ô,ð 0ð 0‘��1Ø˜>˜>¨!¨QÑ/Ô/Ñ/��Ø�‰LˆAð1 ñ 	õ4 •s˜4œ9 eÑ,Ô,Ñ-Ô-ˆà˜!˜WÐ$Ð$r;   c                óÞ  ‡— | j         }|j        }t          t          |j        t          |j        ¦  «        ¦  «        ¦  «        Š|�||fg}npt          |t          ¦  «        rt          |¦  «        }nKt          |t          ¦  «        r't          | 
                    ¦   «         ˆfd„¬¦  «        }nt          d¦  «        ‚t          |¦  «        D ](\  }\  }}‰|         |                     |¦  «        f||<   Œ)|                      ¦   «         D ]d\  }}	t          |¦  «        }|j        }
|D ]\  }}||         dc}||<   |r|
||z  z  }
Œ|
                     t#          |¦  «        |	f¦  «        }
||
z  }Œe|S )Nc                ó    •— ‰| d                  S rE  r@   )rQ  Úgens_maps    €r9   rx   z%PolyElement.compose.<locals>.<lambda>$
  s   ø€ ¸xÈÈ!Ì¼~€ r;   r{   z9expected a generator, value pair a sequence of such pairsr   )r:   r­   rV   rW   r5   r«   rq   re   rI   rq  rS   rä   r  rç   rA  r’   r�  r   )r~   rR  rv   r:   r²   ÚreplacementsrQ  r<  rÞ   rÛ   Úsubpolyr°   r+  r  s                @r9   r&  zPolyElement.compose
  s„  ø€ ØŒvˆØŒyˆÝ�˜DœI¥u¨T¬ZÑ'8Ô'8Ñ9Ô9Ñ:Ô:ˆàˆ=Ø ˜F˜8ˆLˆLå˜!�TÑ"Ô"ð ^Ý# A™wœw��Ý˜A�tÑ$Ô$ð ^Ý% a§g¢g¡i¤iÐ5MÐ5MÐ5MÐ5MÐNÑNÔN��å Ð!\Ñ]Ô]Ð]å" <Ñ0Ô0ð 	>ð 	>‰IˆA‰v��1Ø'¨œ{¨D¯MªM¸!Ñ,<Ô,<Ð=ˆL˜‰OˆOàŸKšK™MœMð 
	ð 
	‰LˆE�5Ý˜‘K”KˆEØ”hˆGà$ð $ð $‘��1Ø# Aœh¨���5˜‘8Øð $Ø˜q !™t‘O�Gøà×&Ò&­¨e©¬°eÐ'<Ñ=Ô=ˆGØ�G‰OˆDˆDàˆr;   c                ó:  ‡‡— | }|j                              |¦  «        Šˆˆfd„|                     ¦   «         D ¦   «         }|s|j         j        S t	          |Ž \  }}ˆfd„|D ¦   «         }|j                              t          t	          ||¦  «        ¦  «        ¦  «        S )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

        c                ó6   •— g | ]\  }}|‰         ‰k    ¯||f‘ŒS r@   r@   )rB   rO   rP   Údegr°   s      €€r9   rD   z)PolyElement.coeff_wrt.<locals>.<listcomp>e
  s*   ø€ ÐAÐAÐA™D˜A˜q°Q°q´T¸S²[°[�!�Q�°[°[°[r;   c                óF   •— g | ]}|d ‰…         dz   |‰dz   d …         z   ‘ŒS )Nrs   rÌ   r@   )rB   rO   r°   s     €r9   rD   z)PolyElement.coeff_wrt.<locals>.<listcomp>k
  s6   ø€ Ð;Ð;Ð;¨q�!�B�Q�B”%˜$‘,  1 q¡5 6 6¤Ñ*Ð;Ð;Ð;r;   )r:   rý   rA  r­   rW   rX   rV   )r¯   rR  r  r  rG  r{  r]   r°   s     `    @r9   Ú	coeff_wrtzPolyElement.coeff_wrt9
  s¡   øø€ ðT ˆØŒF�LŠL˜‰OŒOˆØAÐAÐAÐAÐA A§K¢K¡M¤MÐAÑAÔAˆàð 	Ø”6”;Ðå˜e˜‰ˆ�Ø;Ð;Ð;Ð;°FÐ;Ñ;Ô;ˆØŒv×Ò¥¥S¨°Ñ%8Ô%8Ñ 9Ô 9Ñ:Ô:Ð:r;   c                óê  — | }|j                              |¦  «        }|                     |¦  «        }|                     |¦  «        }|dk     rt          d¦  «        ‚||}}||k     r|S ||z
  dz   }|                     ||¦  «        }	|j         j        |         }
	 |                     ||¦  «        }||z
  |dz
  }}||	z  }||z  |
|z  z  }||z
  }|                     |¦  «        }||k     rnŒR|	|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Ì   ©r:   rý   rS  r  r  r5   )r¯   r<  rR  r~   ÚdfÚdgr3  ÚdrrÁ  Úlc_gÚxpÚlc_rrþ  ÚRr:  rP   s                   r9   ÚpremzPolyElement.premn
  s  € ðl ˆØŒF�LŠL˜‰OŒOˆØ�XŠX�a‰[Œ[ˆØ�XŠX�a‰[Œ[ˆà�Š6ˆ6Ý#Ð$9Ñ:Ô:Ð:à�2ˆ2ˆà�Š7ˆ7ØˆHà�‰G�a‰Kˆà�{Š{˜1˜bÑ!Ô!ˆàŒVŒ[˜Œ^ˆð	à—;’;˜q "Ñ%Ô%ˆDØ˜‘7˜A ™EˆqˆAà�D‘ˆAØ�D‘˜2˜q™5Ñ ˆAØ�A‘ˆAà—’˜!‘”ˆBà�BŠwˆwØð	ð �A‰Iˆà�1‰uˆr;   c                ó$  — | }|j                              |¦  «        }|                     |¦  «        }|                     |¦  «        }|dk     rt          d¦  «        ‚|||}}}||k     r||fS ||z
  dz   }	|                     ||¦  «        }
|j         j        |         }	 |                     ||¦  «        }||z
  |	dz
  }	}||
z  }||||z  z  z   }||
z  }||z  ||z  z  }||z
  }|                     |¦  «        }||k     rnŒb|
|	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<  rR  r~   r  r  rG  r3  r  rÁ  r  r  r  rþ  ÚQr  r:  rP   s                     r9   ÚpdivzPolyElement.pdivÉ
  sK  € ð` ˆØŒF�LŠL˜‰OŒOˆà�XŠX�a‰[Œ[ˆØ�XŠX�a‰[Œ[ˆà�Š6ˆ6Ý#Ð$9Ñ:Ô:Ð:à�a˜ˆbˆ1ˆà�Š7ˆ7Ø�a�4ˆKà�‰G�a‰KˆØ�{Š{˜1˜bÑ!Ô!ˆàŒ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ˆwØð%	ð( �!‰Gˆà�‰EˆØ�‰Eˆà�!ˆtˆr;   c                ó>   — | }|                      ||¦  «        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<  rR  r~   s       r9   ÚpquozPolyElement.pquoG  s   € ð6 ˆØ�vŠv�a˜‰|Œ|˜AŒÐr;   c                ó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<  rR  r~   rG  r3  s         r9   ÚpexquozPolyElement.pexquoe  s=   € ð: ˆØ�vŠv�a˜‰|Œ|‰ˆˆ1àŒ9ð 	,ØˆHå% a¨Ñ+Ô+Ð+r;   c                ó  — | }|j                              |¦  «        }|                     |¦  «        }|                     |¦  «        }||k     r||}}||}}|dk    rddgS |dk    r|dgS ||g}||z
  }d|dz   z  }|                     ||¦  «        }	|	|z  }	|                     ||¦  «        }
|
|z  }d|g}| }|	rÇ|	                     |¦  «        }|                     |	¦  «         ||	|||z
  f\  }}}}|
 ||z  z  }|                     ||¦  «        }	|	                     |¦  «        }	|                     ||¦  «        }
|dk    r$|
 |z  }||dz
  z  }|                     |¦  «        }n|
 }|                     | ¦  «         |	°Ç|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ü   )r:   rý   rS  r  r  r®   r  )r¯   r<  rR  r~   r+  rO   r  Údrw   r¿  ÚlcrP   ÚSrQ  r  rG  s                   r9   ÚsubresultantszPolyElement.subresultantsŠ  s½  € ðD ˆØŒF�LŠL˜‰OŒOˆØ�HŠH�Q‰KŒKˆØ�HŠH�Q‰KŒKˆàˆqŠ5ˆ5Ø�aˆqˆAØ�aˆqˆAà�Š6ˆ6Ø�q�6ˆMà�Š6ˆ6Ø�q�6ˆMà�ˆFˆà�‰EˆØ�Q˜‘U‰Oˆð �FŠF�1�a‰LŒLˆØ�‰Eˆð �[Š[˜˜AÑÔˆà�!‰Gˆà�ˆFˆàˆBˆàð 	Ø—’˜‘”ˆAà�HŠH�Q‰KŒKˆKØ˜A˜q ! a¡%˜‰JˆAˆq�!�Qà��a˜1‘f‘ˆAØ—’�q˜!‘”ˆAØ—’˜‘
”
ˆAà—’˜Q Ñ"Ô"ˆBà�1ŠuˆuØ�S˜Q‘J�Ø˜!˜a™%‘L�Ø—G’G˜A‘J”J��à�C�à�HŠH�a�R‰LŒLˆLð' ð 	ð* ˆr;   c                ó8   — | j                              | |¦  «        S rd   )r:   Údmp_half_gcdexrÉ  s     r9   Ú
half_gcdexzPolyElement.half_gcdexç  s   € ØŒv×$Ò$ Q¨Ñ*Ô*Ð*r;   c                ó8   — | j                              | |¦  «        S rd   )r:   Ú	dmp_gcdexrÉ  s     r9   ÚgcdexzPolyElement.gcdexê  ó   € ØŒv×Ò  1Ñ%Ô%Ð%r;   c                ó8   — | j                              | |¦  «        S rd   )r:   Údmp_resultantrÉ  s     r9   Ú	resultantzPolyElement.resultantí  s   € ØŒv×#Ò# A qÑ)Ô)Ð)r;   c                ó6   — | j                              | ¦  «        S rd   )r:   Údmp_discriminantr³  s    r9   ÚdiscriminantzPolyElement.discriminantð  s   € ØŒv×&Ò& qÑ)Ô)Ð)r;   c                ól   — | j         j        r| j                              | ¦  «        S t          d¦  «        ‚)Nzpolynomial decomposition)r:   r  Údup_decomposer%   r³  s    r9   Ú	decomposezPolyElement.decomposeó  s5   € ØŒ6Ôð 	JØ”6×'Ò'¨Ñ*Ô*Ð*å-Ð.HÑIÔIÐIr;   c                ón   — | j         j        r| j                              | |¦  «        S t          d¦  «        ‚)Nzshift: use shift_list instead)r:   r  Ú	dup_shiftr%   ©r~   rv   s     r9   ÚshiftzPolyElement.shiftù  s7   € ØŒ6Ôð 	OØ”6×#Ò# A qÑ)Ô)Ð)å-Ð.MÑNÔNÐNr;   c                ó8   — | j                              | |¦  «        S rd   )r:   Ú	dmp_shiftr6  s     r9   Ú
shift_listzPolyElement.shift_listÿ  r*  r;   c                ól   — | j         j        r| j                              | ¦  «        S t          d¦  «        ‚)Nzsturm sequence)r:   r  Ú	dup_sturmr%   r³  s    r9   ÚsturmzPolyElement.sturm  s5   € ØŒ6Ôð 	@Ø”6×#Ò# AÑ&Ô&Ð&å-Ð.>Ñ?Ô?Ð?r;   c                ó6   — | j                              | ¦  «        S rd   )r:   Údmp_gff_listr³  s    r9   Úgff_listzPolyElement.gff_list  ó   € ØŒv×"Ò" 1Ñ%Ô%Ð%r;   c                ó6   — | j                              | ¦  «        S rd   )r:   Údmp_normr³  s    r9   ÚnormzPolyElement.norm  s   € ØŒv�Š˜qÑ!Ô!Ð!r;   c                ó6   — | j                              | ¦  «        S rd   )r:   Údmp_sqf_normr³  s    r9   Úsqf_normzPolyElement.sqf_norm  rA  r;   c                ó6   — | j                              | ¦  «        S rd   )r:   Údmp_sqf_partr³  s    r9   Úsqf_partzPolyElement.sqf_part  rA  r;   Fc                ó:   — | j                              | |¬¦  «        S )N)rl   )r:   Údmp_sqf_list)r~   rl   s     r9   Úsqf_listzPolyElement.sqf_list  s   € ØŒv×"Ò" 1¨#Ð"Ñ.Ô.Ð.r;   c                ó6   — | j                              | ¦  «        S rd   )r:   Údmp_factor_listr³  s    r9   Úfactor_listzPolyElement.factor_list  s   € ØŒv×%Ò% aÑ(Ô(Ð(r;   rd   )F)›r„   r-  r.  r/  r6  r<  r�   r?  rµ   r‹   r¾   r¹   rH  rK  rJ  rY  r\  rÂ   rÄ   rd  rh  rl  rn  rq  rs  ru  rx  r  r}  r!  r‚  r„  rf   r1  r¢  rz  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/  rS  rV  r[  r]  r¡   ra  rÛ   re  r¥  rf  ri  r9  rl  rr  r]   r{  rG  r  rÃ  rA  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é  r2  rë  rò  r  r&  r  r  r  r  r  r#  r&  r)  r-  r0  r3  r7  r:  r=  r@  rD  rG  rJ  rM  rP  Ú__classcell__)rÊ   s   @r9   rŒ   rŒ   J  sp
  ø€ € € € € Ø?Ð?ðð ð ð ð ðKð Kð Kð/ð /ð /ð%ð %ð %ð3ð 3ð 3ð €Eð	ð 	ð 	ðð ð ð8>ð >ð >ð	=ð 	=ð 	=ðMð Mð Mðð ð ð"ð ð ð4ð 4ð 4ð4ð ð ðGð Gð Gð Gð0)ð )ð )ð"ð "ð "ðð ð ðð ð ðð ð ðð ð ð	2ð 	2ð 	2ðð ð ð*>ð >ð >ðð ð ð"Hð Hð Hðð ð ð.ð .ð .ð` ð+ð +ñ „Xð+ð ðMð Mñ „XðMð ð=ð =ñ „Xð=ð ðð ñ „Xðð ð5ð 5ñ „Xð5ð ð5ð 5ñ „Xð5ð ð8ð 8ñ „Xð8ð ð8ð 8ñ „Xð8ð ðð ñ „Xðð ðð ñ „Xðð ð*ð *ñ „Xð*ð ð1ð 1ñ „Xð1ð ð@ð @ñ „Xð@ð ð@ð @ñ „Xð@ð ð#ð #ñ „Xð#ð
 ð+ð +ñ „Xð+ð
 ðGð Gñ „XðGðRð Rð Rðð ð ð4ð 4ð 4ðlð ð ð(4ð 4ð 4ðlð ð ð82ð 2ð 2ðhð ð ð:4(ð 4(ð 4(ðlð ð ð ð ð ð:#ð #ð #ðJ:ð :ð :ð,ð ð ð%ð %ð %ð,ð ð ð%ð %ð %ð,ð ð ð%ð %ð %ð, ð  ð  ðð ð ðBJð Jð JðX+ð +ð +ðZð ð ð,ð ,ð ,ð*ð *ð *ðX#ð #ð #ðJ=ð =ð =ð =ð 
?ð 
?ð 
?ð=ð =ð =ð =ð 
?ð 
?ð 
?ðð ð ð(5ð 5ð 5ð#Bð #Bð #BðJ5ð 5ð 5ð ð4ð 4ñ „Xð4ð ðð ñ „Xððð ð ð* ð1ð 1ñ „Xð1ðð ð ð(	Pð 	Pð 	Pð;ð ;ð ;ð ;ð4;ð ;ð ;ð ;ð47ð 7ð 7ð 7ð4#ð #ð #ð!ð !ð !ð"ð "ð "ð#ð #ð #ð!ð !ð !ð"ð "ð "ð!ð !ð !ðF	ð 	ð 	ð(ð (ð (ð&ð &ð &ðð ð ðð ð ð

ð 
ð 
ðð ð ð <ð <ð <ðð ð ð$ €Jð
ð 
ð 
ðPð Pð Pðð ð ðð ð ðð ð ðBð ð ðð ð ð !ð !ð !ð>ð >ð >ð,"ð "ð "ðð ð ð ,ð ,ð ,ðð ð ðð ð ð*6ð 6ð 6ðp+ð +ð +ðð ð ð2pð pð pð*ð *ð *ð *ðX%ð %ð %ð %ðNk%ð k%ð k%ðZð ð ð ð@3;ð 3;ð 3;ðjYð Yð Yð Yðv|ð |ð |ð |ð|ð ð ð ð<#,ð #,ð #,ð #,ðJXð Xð Xð Xðz+ð +ð +ð&ð &ð &ð*ð *ð *ð*ð *ð *ðJð Jð JðOð Oð Oð&ð &ð &ð@ð @ð @ð&ð &ð &ð"ð "ð "ð&ð &ð &ð&ð &ð &ð/ð /ð /ð /ð)ð )ð )ð )ð )ð )ð )r;   rŒ   N)r0   r1   )Qr/  Ú
__future__r   Úoperatorr   r   r   r   r   r	   Ú	functoolsr
   Útypesr   Úsympy.core.cacher   Úsympy.core.exprr   Úsympy.core.intfuncr   Úsympy.core.symbolr   r   rk   Ú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/   r:   r=   rE   r`   rn   r4   rV   rŒ   r@   r;   r9   ú<module>rl     s¨  ðØ Ð à "Ð "Ð "Ð "Ð "Ð "à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ø #Ð #Ð #Ð #Ð #Ð #Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø >Ð >Ð >Ð >Ð >Ð >Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ -Ð -Ð -Ð -Ð -Ð -Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø =Ð =Ð =Ð =Ð =Ð =Ø +Ð +Ð +Ð +Ð +Ð +Ø -Ð -Ð -Ð -Ð -Ð -Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4ð6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ðGð Gð Gð Gð Gð Gð Gð Gð Gð Gð=ð =ð =ð =ð =ð =ð =ð =ð =ð =à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø )Ð )Ð )Ð )Ð )Ð )àØ58ð !ð !ð !ð !ñ „ð!ð< Ø!$ð ð ð ñ „ðð< Ø!$ð ð ð ñ „ðð< ð2ð 2ñ „ð2ðh@ð @ð @ðCð Cð Cð Cð Cˆ ñ Cô Cð CðLN')ð N')ð N')ð N')ð N')�- °+¸tñ N')ô N')ð N')ð N')ð N')r;   