Ë
    O/æjîF ã                  ó  — U d Z ddlm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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/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z6m7Z8m9Z9 ddl:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZAmBZB ddlCmDZD ddlEmFZF eAe.fd„«       ZGeAe.fd„«       ZHeAe.fd„«       ZIeAd„ «       ZJd„ ZKi ZLd eMd!<    G d"„ d#e?e«      ZN G d$„ d%e&e?eeO«      ZPy&)'zSparse polynomial rings. é    )Úannotations)ÚAny)ÚaddÚmulÚltÚleÚgtÚge)Úreduce)ÚGeneratorType)ÚExpr)Úigcd)ÚSymbolÚsymbols)ÚCantSympifyÚsympify)Úmultinomial_coefficients)ÚIPolys)Úconstruct_domain)ÚninfÚdmp_to_dictÚdmp_from_dict)ÚDomainElement©ÚPolynomialRing©Úheugcd)ÚMonomialOps)Úlex)ÚCoercionFailedÚGeneratorsErrorÚExactQuotientFailedÚMultivariatePolynomialError)ÚDomainÚOrderÚbuild_options)Úexpr_from_dictÚ_dict_reorderÚ_parallel_dict_from_expr)ÚDefaultPrinting)ÚpublicÚsubsets)Úis_sequence)Úpollutec                ó<   — t        | ||«      }|f|j                  z   S )až  Construct a polynomial ring returning ``(ring, x_1, ..., x_n)``.

    Parameters
    ==========

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

    Examples
    ========

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

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

    ©ÚPolyRingÚgens©r   ÚdomainÚorderÚ_rings       úT/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/sympy/polys/rings.pyÚringr8   #   s#   € ô8 �W˜f eÓ,€EØˆ8�e—j‘jÑ Ð ó    c                ó8   — t        | ||«      }||j                  fS )a¤  Construct a polynomial ring returning ``(ring, (x_1, ..., x_n))``.

    Parameters
    ==========

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

    Examples
    ========

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

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

    r0   r3   s       r7   Úxringr;   B   s!   € ô8 �W˜f eÓ,€EØ�5—:‘:ÐÐr9   c                óš   — t        | ||«      }t        |j                  D �cg c]  }|j                  ‘Œ c}|j                  «       |S c c}w )a¤  Construct a polynomial ring and inject ``x_1, ..., x_n`` into the global namespace.

    Parameters
    ==========

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

    Examples
    ========

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

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

    )r1   r.   r   Únamer2   )r   r4   r5   r6   Úsyms        r7   Úvringr?   a   s=   € ô6 �W˜f eÓ,€EÜ %§-¡-Ö1˜3ˆc�h‹hÒ1°5·:±:Ô>Ø€Lùò 2s   ¡Ac                óž  — d}t        | «      s| gd}} t        t        t        | «      «      } t	        ||«      }t        | |«      \  }}|j                  €“t        |D �cg c]  }t        |j                  «       «      ‘Œ c}g «      }t        ||¬«      \  |_        }t        t        ||«      «      }	|D ��
�cg c])  }|j                  «       D �
�ci c]  \  }
}|
|	|   “Œ c}}
‘Œ+ }}
}}t        |j                  |j                  |j                  «      }t        t        |j                   |«      «      }|r||d   fS ||fS c c}w c c}}
w c c}}
}w )ad  Construct a ring deriving generators and domain from options and input expressions.

    Parameters
    ==========

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

    Examples
    ========

    >>> from sympy import sring, symbols

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

    FT)Úoptr   )r-   ÚlistÚmapr   r&   r)   r4   ÚsumÚvaluesr   ÚdictÚzipÚitemsr1   r2   r5   Ú	from_dict)Úexprsr   ÚoptionsÚsinglerA   ÚrepsÚrepÚcoeffsÚ
coeffs_domÚ	coeff_mapÚmÚcr6   Úpolyss                 r7   ÚsringrU   €   s&  € ð4 €Fä�uÔØ˜ ˆvˆä””W˜eÓ$Ó%€EÜ
˜ Ó
)€Cô )¨°Ó4�I€Dˆ#à
‡z�zÐÜ°TÖ;¨c”t˜CŸJ™J›LÕ)Ò;¸RÓ@ˆä!1°&¸cÔ!BÑˆŒ
�Jäœ˜V ZÓ0Ó1ˆ	ØEI×JÐJ¸c¨S¯Y©Y«[×9¡T Q¨��I˜a‘L‘Õ9ÐJˆÒJä�S—X‘X˜sŸz™z¨3¯9©9Ó5€EÜ”�U—_‘_ dÓ+Ó,€EáØ�u˜Q‘xÐ Ð à�uˆ~Ðùò <ùó
 :ùÔJs   Á D=Â4EÃEÃEÅEc                óø   — t        | t        «      r| rt        | d¬«      S dS t        | t        «      r| fS t	        | «      r1t        d„ | D «       «      rt        | «      S t        d„ | D «       «      r| S t        d«      ‚)NT)Úseq© c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)Ú
isinstanceÚstr©Ú.0Úss     r7   ú	<genexpr>z!_parse_symbols.<locals>.<genexpr>»   s   è ø€ Ò3 aŒz˜!œS×!Ñ3ùó   ‚c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wrZ   )r[   r   r]   s     r7   r`   z!_parse_symbols.<locals>.<genexpr>½   s   è ø€ Ò6¨”˜Aœt×$Ñ6ùra   zbexpected a string, Symbol or expression or a non-empty sequence of strings, Symbols or expressions)r[   r\   Ú_symbolsr   r-   Úallr!   ©r   s    r7   Ú_parse_symbolsrf   µ   sr   € Ü�'œ3ÔÙ.5Œx˜ TÔ*Ð=¸2Ð=Ü	�GœTÔ	"ØˆzÐÜ	�WÔ	ÜÑ3¨7Ô3Ô3Ü˜GÓ$Ð$ÜÑ6¨gÔ6Ô6ØˆNä
Ð~Ó
Ðr9   zdict[Any, Any]Ú_ring_cachec                  ó  — e Zd ZdZefd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd%d
„Zd„ Zed„ «       Zed„ «       Zd&d„Zd„ Zd„ Zd„ Ze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 ed„ «       Z!ed„ «       Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'd$„ Z(y	)'r1   z*Multivariate distributed polynomial ring. c                ó„  ‡— t        t        |«      «      }t        |«      }t        j                  |«      }t        j                  ‰«      Š| j                  |||‰f}t        j                  |«      }|�€L|j                  r,t        |«      t        |j                  «      z  rt        d«      ‚t        j                  | «      }||_        t!        |«      |_        t%        dt&        fd|i«      |_        ||_        ||_        ||_        ‰|_        d|z  |_        |j3                  «       |_        t        |j4                  «      |_        |j0                  |j8                  fg|_        |rŸt=        |«      }|j?                  «       |_         |jC                  «       |_"        |jG                  «       |_$        |jK                  «       |_&        |jO                  «       |_(        |jS                  «       |_*        |jW                  «       |_,        n5d„ }||_         ||_"        d„ |_$        ||_&        ||_(        ||_*        ||_,        ‰tZ        u rt\        |_/        n
ˆfd„|_/        ta        |j                  |j4                  «      D ]<  \  }	}
tc        |	td        «      sŒ|	jf                  }ti        ||«      rŒ0tk        |||
«       Œ> |t        |<   |S )Nz7polynomial ring and it's ground domain share generatorsÚPolyElementr8   ©r   c                 ó   — y©NrX   rX   )ÚaÚbs     r7   ú<lambda>z"PolyRing.__new__.<locals>.<lambda>î   ó   � r9   c                 ó   — yrm   rX   )rn   ro   rS   s      r7   rp   z"PolyRing.__new__.<locals>.<lambda>ñ   rq   r9   c                ó   •— t        | ‰¬«      S )N©Úkey)Úmax)Úfr5   s    €r7   rp   z"PolyRing.__new__.<locals>.<lambda>û   s   ø€ ¬S°¸Ô->€ r9   )6Útuplerf   ÚlenÚ	DomainOptÚ
preprocessÚOrderOptÚ__name__rg   ÚgetÚis_CompositeÚsetr   r!   ÚobjectÚ__new__Ú_hash_tupleÚhashÚ_hashÚtyperj   ÚdtypeÚngensr4   r5   Ú
zero_monomÚ_gensr2   Ú	_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   rv   Úleading_expvrG   r[   r   r=   ÚhasattrÚsetattr)Úclsr   r4   r5   rˆ   rƒ   ÚobjÚcodegenÚmonunitÚsymbolÚ	generatorr=   s      `        r7   r‚   zPolyRing.__new__Ç   s?  ø€ Üœ wÓ/Ó0ˆÜ�G“ˆÜ×%Ñ% fÓ-ˆÜ×#Ñ# EÓ*ˆà—|‘| W¨e°V¸UÐCˆÜ�o‰o˜kÓ*ˆà‰;Ø×"Ò"¤s¨7£|´c¸&¿.¹.Ó6IÒ'IÜ%Ð&_Ó`Ð`ä—.‘. Ó%ˆCØ)ˆCŒOÜ˜[Ó)ˆCŒIÜ˜]¬[¨N¸VÀS¸MÓJˆCŒIØ!ˆCŒKØˆCŒIØˆCŒJØˆCŒIà! %™ZˆCŒNØ—y‘y“{ˆCŒHÜ §¡›MˆCŒMàŸ™¨¯©Ð4Ð5ˆCŒHáä% eÓ,�Ø#*§;¡;£=�Ô Ø#*§;¡;£=�Ô Ø&-§n¡nÓ&6�Ô#Ø$+§L¡L£N�Ô!Ø#*§;¡;£=�Ô Ø#*§;¡;£=�Ô Ø#*§;¡;£=�Õ á)�Ø#*�Ô Ø#*�Ô Ù&8�Ô#Ø$+�Ô!Ø#*�Ô Ø#*�Ô Ø#*�Ô ð œ‰|Ü#&�Õ ã#>�Ô ä%(¨¯©°c·h±hÓ%?ò 6Ñ!�˜	Ü˜f¤fÕ-Ø!Ÿ;™;�Dä" 3¨Õ-Ü  T¨9Õ5ð6ð (+ŒK˜Ñ$àˆ
r9   c                óâ   — | j                   j                  }g }t        | j                  «      D ]5  }| j	                  |«      }| j
                  }|||<   |j                  |«       Œ7 t        |«      S )z(Return a list of polynomial generators. )r4   rŒ   Úrangerˆ   Úmonomial_basisÚzeroÚappendrx   )ÚselfrŒ   rŠ   ÚiÚexpvÚpolys         r7   rŠ   zPolyRing._gens  sf   € à�k‰k�o‰oˆØˆÜ�t—z‘zÓ"ò 	ˆAØ×&Ñ& qÓ)ˆDØ—9‘9ˆDØˆD�‰JØ�L‰L˜Õð		ô
 �U‹|Ðr9   c                óH   — | j                   | j                  | j                  fS rZ   )r   r4   r5   ©r©   s    r7   Ú__getnewargs__zPolyRing.__getnewargs__  s   € Ø—‘˜dŸk™k¨4¯:©:Ð6Ð6r9   c                óx   — | j                   j                  «       }|d= |D ]  }|j                  d«      sŒ||= Œ |S )Nr›   Ú	monomial_)Ú__dict__ÚcopyÚ
startswith)r©   Ústateru   s      r7   Ú__getstate__zPolyRing.__getstate__  sE   € Ø—‘×"Ñ"Ó$ˆØ�.Ð!àò 	ˆCØ�~‰~˜kÕ*Ø˜#‘Jð	ð ˆr9   c                ó   — | j                   S rZ   )r…   r®   s    r7   Ú__hash__zPolyRing.__hash__   s   € Ø�z‰zÐr9   c                óà   — t        |t        «      xr] | j                  | j                  | j                  | j
                  f|j                  |j                  |j                  |j
                  fk(  S rZ   )r[   r1   r   r4   rˆ   r5   ©r©   Úothers     r7   Ú__eq__zPolyRing.__eq__#  sV   € Ü˜%¤Ó*ò DØ�\‰\˜4Ÿ;™;¨¯
©
°D·J±JÐ?Ø�]‰]˜EŸL™L¨%¯+©+°u·{±{ÐCñDð	Dr9   c                ó   — | |k(   S rZ   rX   rº   s     r7   Ú__ne__zPolyRing.__ne__(  s   € Ø˜5‘=Ð Ð r9   Nc                ó|   — | j                  |xs | j                  |xs | j                  |xs | j                  «      S rZ   )Ú	__class__r   r4   r5   )r©   r   r4   r5   s       r7   ÚclonezPolyRing.clone+  s3   € Ø�~‰~˜gÒ5¨¯©°vÒ7LÀÇÁÈeÒNaÐW[×WaÑWaÓbÐbr9   c                óB   — dg| j                   z  }d||<   t        |«      S )zReturn the ith-basis element. r   é   )rˆ   rx   )r©   rª   Úbasiss      r7   r¦   zPolyRing.monomial_basis.  s$   € à��D—J‘J‘ˆØˆˆa‰Ü�U‹|Ðr9   c                ó"   — | j                  «       S rZ   )r‡   r®   s    r7   r§   zPolyRing.zero4  s   € à�z‰z‹|Ðr9   c                ó8   — | j                  | j                  «      S rZ   )r‡   r�   r®   s    r7   rŒ   zPolyRing.one8  s   € à�z‰z˜$Ÿ)™)Ó$Ð$r9   c                ó:   — | j                   j                  ||«      S rZ   )r4   Úconvert©r©   ÚelementÚorig_domains      r7   Ú
domain_newzPolyRing.domain_new<  s   € Ø�{‰{×"Ñ" 7¨KÓ8Ð8r9   c                ó:   — | j                  | j                  |«      S rZ   )Úterm_newr‰   )r©   Úcoeffs     r7   Ú
ground_newzPolyRing.ground_new?  s   € Ø�}‰}˜TŸ_™_¨eÓ4Ð4r9   c                óN   — | j                  |«      }| j                  }|r|||<   |S rZ   )rÌ   r§   )r©   ÚmonomrÏ   r¬   s       r7   rÎ   zPolyRing.term_newB  s*   € Ø—‘ Ó&ˆØ�y‰yˆÙØˆD�‰KØˆr9   c                óV  — t        |t        «      rj| |j                  k(  r|S t        | j                  t        «      r4| j                  j                  |j                  k(  r| j                  |«      S t        d«      ‚t        |t        «      rt        d«      ‚t        |t        «      r| j                  |«      S t        |t        «      r	 | j                  |«      S t        |t        «      r| j                  |«      S | j                  |«      S # t        $ r | j                  |«      cY S w xY w)NÚ
conversionÚparsing)r[   rj   r8   r4   r   rÐ   ÚNotImplementedErrorr\   rF   rI   rB   Ú
from_termsÚ
ValueErrorÚ	from_listr   Ú	from_expr©r©   rÊ   s     r7   Úring_newzPolyRing.ring_newI  só   € Ü�gœ{Ô+Ø�w—|‘|Ò#Ø�Ü˜DŸK™K¬Ô8¸T¿[¹[×=MÑ=MÐQX×Q]ÑQ]Ò=]Ø—‘ wÓ/Ð/ä)¨,Ó7Ð7Ü˜¤Ô%Ü% iÓ0Ð0Ü˜¤Ô&Ø—>‘> 'Ó*Ð*Ü˜¤Ô&ð/Ø—‘ wÓ/Ð/ô ˜¤Ô&Ø—>‘> 'Ó*Ð*à—?‘? 7Ó+Ð+øô ò /Ø—~‘~ gÓ.Ò.ð/ús   ÃD ÄD(Ä'D(c                óˆ   — | j                   }| j                  }|j                  «       D ]  \  }} |||«      }|sŒ|||<   Œ |S rZ   )rÌ   r§   rH   )r©   rÊ   rË   rÌ   r¬   rÒ   rÏ   s          r7   rI   zPolyRing.from_dicta  sL   € Ø—_‘_ˆ
Ø�y‰yˆà#ŸM™M›Oò 	$‰LˆE�5Ù˜u kÓ2ˆEÚØ#��U’ð	$ð
 ˆr9   c                ó8   — | j                  t        |«      |«      S rZ   )rI   rF   rÉ   s      r7   r×   zPolyRing.from_termsl  s   € Ø�~‰~œd 7›m¨[Ó9Ð9r9   c                óh   — | j                  t        || j                  dz
  | j                  «      «      S ©NrÃ   )rI   r   rˆ   r4   rÛ   s     r7   rÙ   zPolyRing.from_listo  s&   € Ø�~‰~œk¨'°4·:±:¸a±<ÀÇÁÓMÓNÐNr9   c                óT   ‡ ‡‡‡— ‰ j                   Šˆˆˆˆ fd„Š ‰t        |«      «      S )Nc           	     óÂ  •— ‰j                  | «      }|�|S | j                  r-t        t        t	        t        ‰| j                  «      «      «      S | j                  r-t        t        t	        t        ‰| j                  «      «      «      S | j                  «       \  }}|j                  r|dkD  r ‰|«      t        |«      z  S ‰j                  ‰j                  | «      «      S rà   )r~   Úis_Addr   r   rB   rC   ÚargsÚis_Mulr   Úas_base_expÚ
is_IntegerÚintrÐ   rÈ   )Úexprr£   ÚbaseÚexpÚ_rebuildr4   Úmappingr©   s       €€€€r7   rì   z(PolyRing._rebuild_expr.<locals>._rebuildu  s±   ø€ ØŸ™ DÓ)ˆIàÐ$Ø Ð Ø—’Üœc¤4¬¨H°d·i±iÓ(@Ó#AÓBÐBØ—’Üœc¤4¬¨H°d·i±iÓ(@Ó#AÓBÐBð !×,Ñ,Ó.‘	��cØ—>’> c¨A¢gÙ# D›>¬3¨s«8Ñ3Ð3àŸ?™?¨6¯>©>¸$Ó+?Ó@Ð@r9   )r4   r   )r©   ré   rí   rì   r4   s   ` `@@r7   Ú_rebuild_exprzPolyRing._rebuild_exprr  s#   û€ Ø—‘ˆ÷	Añ$ œ ›Ó&Ð&r9   c                óê   — t        t        t        | j                  | j                  «      «      «      }	 | j                  ||«      }| j                  |«      S # t        $ r t        d| ›d|›�«      ‚w xY w)Nz6expected an expression convertible to a polynomial in z, got )	rF   rB   rG   r   r2   rî   rÜ   r    rØ   )r©   ré   rí   r¬   s       r7   rÚ   zPolyRing.from_expr‰  sm   € Ü”tœC §¡¨d¯i©iÓ8Ó9Ó:ˆð	'Ø×%Ñ% d¨GÓ4ˆDð —=‘= Ó&Ð&øô ò 	pÝÒcgÑimÐnÓoÐoð	pús   ´A ÁA2c                ó"  — |€| j                   rd}|S d}|S t        |t        «      rD|}d|k  r|| j                   k  r	 |S | j                    |k  r|dk  r| dz
  }|S t        d|z  «      ‚t        || j                  «      r	 | j
                  j                  |«      }|S t        |t        «      r	 | j                  j                  |«      }|S t        d|z  «      ‚# t        $ r t        d|z  «      ‚w xY w# t        $ r t        d|z  «      ‚w xY w)z+Compute index of ``gen`` in ``self.gens``. r   éÿÿÿÿrÃ   zinvalid generator index: %szinvalid generator: %szEexpected a polynomial generator, an integer, a string or None, got %s)	rˆ   r[   rè   rØ   r‡   r2   Úindexr\   r   )r©   Úgenrª   s      r7   rò   zPolyRing.index“  sD  € àˆ;Ø�zŠzØ�ð2 ˆð/ �ð. ˆô- ˜œSÔ!ØˆAà�AŠv˜!˜dŸj™jš.Øð$ ˆð# —*‘*� Ò! a¨2¢gØ�B˜‘F�ð  ˆô !Ð!>ÀÑ!DÓEÐEÜ˜˜TŸZ™ZÔ(ð@Ø—I‘I—O‘O CÓ(�ð ˆô ˜œSÔ!ð@Ø—L‘L×&Ñ& sÓ+�ð ˆô ÐdÐgjÑjÓkÐkøô ò @Ü Ð!8¸3Ñ!>Ó?Ð?ð@ûô
 ò @Ü Ð!8¸3Ñ!>Ó?Ð?ð@ús   ÂC Â0C6 ÃC3Ã6Dc                óä   — t        t        | j                  |«      «      }t        | j                  «      D ��cg c]  \  }}||vsŒ|‘Œ }}}|s| j
                  S | j                  |¬«      S c c}}w )z,Remove specified generators from this ring. re   )r€   rC   rò   Ú	enumerater   r4   rÁ   )r©   r2   Úindicesrª   r_   r   s         r7   ÚdropzPolyRing.drop²  sb   € ä”c˜$Ÿ*™* dÓ+Ó,ˆÜ"+¨D¯L©LÓ"9×O™$˜!˜Q¸QÀgÒ=M’AÐOˆÑOáØ—;‘;Ðà—:‘: g�:Ó.Ð.ùó Ps   ¸A,ÁA,c                ó`   — | j                   |   }|s| j                  S | j                  |¬«      S )Nre   )r   r4   rÁ   )r©   ru   r   s      r7   Ú__getitem__zPolyRing.__getitem__¼  s.   € Ø—,‘,˜sÑ#ˆáØ—;‘;Ðà—:‘: g�:Ó.Ð.r9   c                óÖ   — | j                   j                  st        | j                   d«      r&| j                  | j                   j                   ¬«      S t	        d| j                   z  «      ‚)Nr4   ©r4   z%s is not a composite domain)r4   r   rœ   rÁ   rØ   r®   s    r7   Ú	to_groundzPolyRing.to_groundÄ  sL   € à�;‰;×#Ò#¤w¨t¯{©{¸HÔ'EØ—:‘: T§[¡[×%7Ñ%7�:Ó8Ð8äÐ;¸d¿k¹kÑIÓJÐJr9   c                ó   — t        | «      S rZ   r   r®   s    r7   Ú	to_domainzPolyRing.to_domainË  s   € Ü˜dÓ#Ð#r9   c                ó^   — ddl m}  || j                  | j                  | j                  «      S )Nr   )Ú	FracField)Úsympy.polys.fieldsr   r   r4   r5   )r©   r   s     r7   Úto_fieldzPolyRing.to_fieldÎ  s    € Ý0Ù˜Ÿ™ t§{¡{°D·J±JÓ?Ð?r9   c                ó2   — t        | j                  «      dk(  S rà   ©ry   r2   r®   s    r7   Úis_univariatezPolyRing.is_univariateÒ  s   € ä�4—9‘9‹~ Ñ"Ð"r9   c                ó2   — t        | j                  «      dkD  S rà   r  r®   s    r7   Úis_multivariatezPolyRing.is_multivariateÖ  s   € ä�4—9‘9‹~ Ñ!Ð!r9   c                ó~   — | j                   }|D ]+  }t        |t        ¬«      r| | j                  |Ž z  }Œ'||z  }Œ- |S )aw  
        Add a sequence of polynomials or containers of polynomials.

        Examples
        ========

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

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

        ©Úinclude)r§   r-   r   r   ©r©   ÚobjsÚprŸ   s       r7   r   zPolyRing.addÚ  sJ   € ð" �I‰Iˆàò 	ˆCÜ˜3¬Õ6Ø�X�T—X‘X˜s�^Ñ#‘à�S‘‘ð		ð ˆr9   c                ó~   — | j                   }|D ]+  }t        |t        ¬«      r| | j                  |Ž z  }Œ'||z  }Œ- |S )aÈ  
        Multiply a sequence of polynomials or containers of polynomials.

        Examples
        ========

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

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

        r	  )rŒ   r-   r   r   r  s       r7   r   zPolyRing.mulõ  sJ   € ð" �H‰Hˆàò 	ˆCÜ˜3¬Õ6Ø�X�T—X‘X˜s�^Ñ#‘à�S‘‘ð		ð ˆr9   c                óP  — t        t        | j                  |«      «      }t        | j                  «      D ��cg c]  \  }}||vsŒ|‘Œ }}}t        | j
                  «      D ��cg c]  \  }}||vsŒ|‘Œ }}}|s| S | j                  | | j                  |Ž ¬«      S c c}}w c c}}w )zd
        Remove specified generators from the ring and inject them into
        its domain.
        ©r   r4   )r€   rC   rò   rõ   r   r2   rÁ   r÷   )r©   r2   rö   rª   r_   r   ró   s          r7   Údrop_to_groundzPolyRing.drop_to_ground  s–   € ô
 ”c˜$Ÿ*™* dÓ+Ó,ˆÜ!*¨4¯<©<Ó!8×M™˜˜A¸AÀWÒ<L’1ÐMˆÑMÜ"+¨D¯I©IÓ"6×K™˜˜3¸!À7Ò:J’ÐKˆÑKáØˆKà—:‘: g°i°d·i±iÀÐ6F�:ÓGÐGùó NùÛKs   ¸BÁBÁ$B"Á1B"c                ó´   — | |k7  rRt        | j                  «      j                  t        |j                  «      «      }| j                  t	        |«      ¬«      S | S )z+Add the generators of ``other`` to ``self``re   ©r€   r   ÚunionrÁ   rB   )r©   r»   Úsymss      r7   ÚcomposezPolyRing.compose  sE   € à�5Š=Ü�t—|‘|Ó$×*Ñ*¬3¨u¯}©}Ó+=Ó>ˆDØ—:‘:¤d¨4£j�:Ó1Ð1àˆKr9   c                ó’   — t        | j                  «      j                  t        |«      «      }| j                  t	        |«      ¬«      S )z9Add the elements of ``symbols`` as generators to ``self``re   r  )r©   r   r  s      r7   Úadd_genszPolyRing.add_gens&  s4   € ä�4—<‘<Ó ×&Ñ&¤s¨7£|Ó4ˆØ�z‰z¤$ t£*ˆzÓ-Ð-r9   c                ó”  ‡— |dk  s|| j                   kD  rt        d|›d| j                  ›�«      ‚|s| j                  S | j                  }t        t        | j                   «      t        |«      «      D ]R  Št        ˆfd„t        | j                   «      D «       «      }|| j                  || j                  j                  «      z  }ŒT |S )zo
        Return the elementary symmetric polynomial of degree *n* over
        this ring's generators.
        r   z.Cannot generate symmetric polynomial of order z for c              3  ó8   •K  — | ]  }t        |‰v «      –— Œ y ­wrZ   )rè   )r^   rª   r_   s     €r7   r`   z*PolyRing.symmetric_poly.<locals>.<genexpr>7  s   øè ø€ ÒE¨aœc ! q &ŸkÑEùs   ƒ)rˆ   rØ   r2   rŒ   r§   r,   r¥   rè   rx   rÎ   r4   )r©   Únr¬   rÒ   r_   s       @r7   Úsymmetric_polyzPolyRing.symmetric_poly+  s£   ø€ ð
 ˆqŠ5�A˜Ÿ
™
’NÝÒZ[Ð]a×]fÒ]fÐgÓhÐhÙØ—8‘8ˆOà—9‘9ˆDÜœU 4§:¡:Ó.´°A³Ó7ò >�ÜÓE´5¸¿¹Ó3DÔEÓE�Ø˜Ÿ™ e¨T¯[©[¯_©_Ó=Ñ=‘ð>ð ˆKr9   )NNNrZ   ))r}   Ú
__module__Ú__qualname__Ú__doc__r   r‚   rŠ   r¯   r¶   r¸   r¼   r¾   rÁ   r¦   Úpropertyr§   rŒ   rÌ   rÐ   rÎ   rÜ   Ú__call__rI   r×   rÙ   rî   rÚ   rò   r÷   rù   rü   rþ   r  r  r  r   r   r  r  r  r  rX   r9   r7   r1   r1   Ä   sü   „ Ù4à,/ó ?òB	ò7òòòDò
!ócòð ñó ðð ñ%ó ð%ó9ò5òò,ð, €Hó	ó:òOò'ò.'òò>/ò/òKò$ò@ð ñ#ó ð#ð ñ"ó ð"òò6ò6Hòò.ó
r9   r1   c                  ó`  — e 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„ 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+„ «       Z.ed,„ «       Z/ed-„ «       Z0d.„ Z1d/„ Z2d0„ Z3d1„ Z4d2„ Z5d3„ Z6d4„ Z7d5„ Z8d6„ Z9d7„ Z:d8„ Z;d9„ Z<d:„ Z=d;„ Z>d<„ Z?d=„ Z@d>„ ZAd?„ ZBeAZCeBZDd@„ ZEdA„ ZFdB„ ZGdC„ ZHdD„ ZIdE„ ZJdF„ ZKd’dG„ZLdH„ ZMd’dI„ZNdJ„ ZOdK„ ZPdL„ ZQdM„ ZRdN„ ZSedO„ «       ZTedP„ «       ZUdQ„ ZVedR„ «       ZWdS„ ZXdT„ ZYd’dU„ZZd’dV„Z[d’dW„Z\dX„ Z]dY„ Z^dZ„ Z_d[„ Z`d\„ Zad]„ Zbd^„ Zcd_„ Zdd`„ Zeda„ Zfdb„ Zgdc„ Zhdd„ Zide„ Zjdf„ Zkdg„ ZlelZmdh„ Zndi„ Zodj„ Zpdk„ Zqdl„ Zrdm„ Zsdn„ Ztdo„ Zudp„ Zvdq„ Zwdr„ Zxds„ Zydt„ Zzdu„ Z{dv„ Z|dw„ Z}dx„ Z~dy„ Zd’dz„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—y)”rj   z5Element of multivariate distributed polynomial ring. c                ó$   — | j                  |«      S rZ   )rÀ   )r©   Úinits     r7   ÚnewzPolyElement.new?  s   € Ø�~‰~˜dÓ#Ð#r9   c                ó6   — | j                   j                  «       S rZ   )r8   rþ   r®   s    r7   ÚparentzPolyElement.parentB  s   € Ø�y‰y×"Ñ"Ó$Ð$r9   c                óL   — | j                   t        | j                  «       «      fS rZ   )r8   rB   Ú	itertermsr®   s    r7   r¯   zPolyElement.__getnewargs__E  s   € Ø—	‘	œ4 §¡Ó 0Ó1Ð2Ð2r9   Nc                óŒ   — | j                   }|€5t        | j                  t        | j	                  «       «      f«      x| _         }|S rZ   )r…   r„   r8   Ú	frozensetrH   )r©   r…   s     r7   r¸   zPolyElement.__hash__J  s<   € ð —
‘
ˆØˆ=Ü!% t§y¡y´)¸D¿J¹J»LÓ2IÐ&JÓ!KÐKˆDŒJ˜Øˆr9   c                ó$   — | j                  | «      S )a�  Return a copy of polynomial self.

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

        Examples
        ========

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

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

        )r%  r®   s    r7   r³   zPolyElement.copyU  s   € ð4 �x‰x˜‹~Ðr9   c           	     óv  — | j                   |k(  r| S | j                   j                  |j                  k7  r`t        t        t	        | | j                   j                  |j                  «      Ž «      }|j                  || j                   j                  «      S |j                  | | j                   j                  «      S rZ   )r8   r   rB   rG   r(   r×   r4   rI   )r©   Únew_ringÚtermss      r7   Úset_ringzPolyElement.set_ringq  s�   € Ø�9‰9˜Ò ØˆKØ�Y‰Y×Ñ (×"2Ñ"2Ò2Üœœm¨D°$·)±)×2CÑ2CÀX×EUÑEUÓVÐWÓXˆEØ×&Ñ& u¨d¯i©i×.>Ñ.>Ó?Ð?à×%Ñ% d¨D¯I©I×,<Ñ,<Ó=Ð=r9   c                ó  — |s| j                   j                  }nPt        |«      | j                   j                  k7  r.t	        d| j                   j                  ›dt        |«      ›�«      ‚t        | j                  «       g|¢­Ž S )Nz"Wrong number of symbols, expected z got )r8   r   ry   rˆ   rØ   r'   Úas_expr_dict)r©   r   s     r7   Úas_exprzPolyElement.as_exprz  sf   € ÙØ—i‘i×'Ñ'‰GÜ�‹\˜TŸY™YŸ_™_Ò,Ýà—‘—“¤# g¤,ð0óð ô
 ˜d×/Ñ/Ó1Ð<°GÒ<Ð<r9   c                ó¢   — | j                   j                  j                  }| j                  «       D ��ci c]  \  }}| ||«      “Œ c}}S c c}}w rZ   )r8   r4   Úto_sympyr)  )r©   r5  rÒ   rÏ   s       r7   r2  zPolyElement.as_expr_dict…  s?   € Ø—9‘9×#Ñ#×,Ñ,ˆØ;?¿>¹>Ó;K×L©<¨5°%�‘x “Ñ&ÓLÐLùÓLs   ´Ac           	     ó¬  — | j                   j                  }|j                  r|j                  s|j                  | fS |j                  «       }|j                  }|j                  }|j                  }| j                  «       D ]  } || ||«      «      }Œ | j                  | j                  «       D ��cg c]  \  }}|||z  f‘Œ c}}«      }	||	fS c c}}w rZ   )r8   r4   Úis_FieldÚhas_assoc_RingrŒ   Úget_ringr—   ÚdenomrE   r%  rH   )
r©   r4   Úground_ringÚcommonr—   r:  rÏ   ÚkÚvr¬   s
             r7   Úclear_denomszPolyElement.clear_denoms‰  s¸   € Ø—‘×!Ñ!ˆà�Š f×&;Ò&;Ø—:‘:˜tÐ#Ð#à—o‘oÓ'ˆØ—‘ˆØ�o‰oˆØ—‘ˆà—[‘[“]ò 	/ˆEÙ˜¡ u£Ó.‰Fð	/ð �x‰x°D·J±J³L×B©D¨A¨q˜1˜a ™hš-ÓBÓCˆØ�tˆ|Ðùó Cs   Â3C
c                óR   — t        | j                  «       «      D ]  \  }}|rŒ	| |= Œ y)z+Eliminate monomials with zero coefficient. N©rB   rH   )r©   r=  r>  s      r7   Ú
strip_zerozPolyElement.strip_zeroš  s*   € ä˜Ÿ™›Ó&ò 	‰DˆAˆqÚØ˜‘Gñ	r9   c                óø   — |s|  S t        |t        «      r/|j                  | j                  k(  rt        j	                  | |«      S t        | «      dkD  ry| j                  | j                  j                  «      |k(  S )aP  Equality test for polynomials.

        Examples
        ========

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

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

        rÃ   F)r[   rj   r8   rF   r¼   ry   r~   r‰   ©Úp1Úp2s     r7   r¼   zPolyElement.__eq__   sd   € ñ" Ø�6ˆMÜ˜œKÔ(¨R¯W©W¸¿¹Ò-?Ü—;‘;˜r 2Ó&Ð&Ü�‹W�qŠ[Øà—6‘6˜"Ÿ'™'×,Ñ,Ó-°Ñ3Ð3r9   c                ó   — | |k(   S rZ   rX   rD  s     r7   r¾   zPolyElement.__ne__º  s   € Ø˜‘8ˆ|Ðr9   c                óô  — | j                   }t        ||j                  «      rrt        | j	                  «       «      t        |j	                  «       «      k7  ry|j
                  j                  }| j	                  «       D ]  } || |   ||   |«      rŒ y yt        | «      dkD  ry	 |j
                  j                  |«      }|j
                  j                  | j                  «       ||«      S # t        $ r Y yw xY w)z+Approximate equality test for polynomials. FTrÃ   )r8   r[   r‡   r€   Úkeysr4   Úalmosteqry   rÈ   Úconstr    )rE  rF  Ú	tolerancer8   rJ  r=  s         r7   rJ  zPolyElement.almosteq½  sÕ   € à�w‰wˆä�b˜$Ÿ*™*Ô%Ü�2—7‘7“9‹~¤ R§W¡W£Y£Ò/Øà—{‘{×+Ñ+ˆHà—W‘W“Yò !�Ù  1¡ r¨!¡u¨iÕ8Ù ð!ð Ü�‹W�qŠ[ØðGØ—[‘[×(Ñ(¨Ó,�ð —{‘{×+Ñ+¨B¯H©H«J¸¸IÓFÐFøô "ò Ùðús   Â%C+ Ã+	C7Ã6C7c                ó8   — t        | «      | j                  «       fS rZ   )ry   r/  r®   s    r7   Úsort_keyzPolyElement.sort_keyÕ  s   € Ü�D“	˜4Ÿ:™:›<Ð(Ð(r9   c                ó˜   — t        || j                  j                  «      r% || j                  «       |j                  «       «      S t        S rZ   )r[   r8   r‡   rN  ÚNotImplemented)rE  rF  Úops      r7   Ú_cmpzPolyElement._cmpØ  s3   € Ü�b˜"Ÿ'™'Ÿ-™-Ô(Ù�b—k‘k“m R§[¡[£]Ó3Ð3ä!Ð!r9   c                ó.   — | j                  |t        «      S rZ   )rR  r   rD  s     r7   Ú__lt__zPolyElement.__lt__Þ  ó   € Ø�w‰w�rœ2‹Ðr9   c                ó.   — | j                  |t        «      S rZ   )rR  r   rD  s     r7   Ú__le__zPolyElement.__le__à  rU  r9   c                ó.   — | j                  |t        «      S rZ   )rR  r	   rD  s     r7   Ú__gt__zPolyElement.__gt__â  rU  r9   c                ó.   — | j                  |t        «      S rZ   )rR  r
   rD  s     r7   Ú__ge__zPolyElement.__ge__ä  rU  r9   c                óÎ   — | j                   }|j                  |«      }|j                  dk(  r||j                  fS t	        |j
                  «      }||= ||j                  |¬«      fS )NrÃ   re   )r8   rò   rˆ   r4   rB   r   rÁ   ©r©   ró   r8   rª   r   s        r7   Ú_dropzPolyElement._dropç  s\   € Ø�y‰yˆØ�J‰J�s‹Oˆà�:‰:˜Š?Ø�d—k‘k�>Ð!ä˜4Ÿ<™<Ó(ˆGØ˜�
Ø�d—j‘j¨�jÓ1Ð1Ð1r9   c                ób  — | j                  |«      \  }}| j                  j                  dk(  r+| j                  r| j	                  d«      S t        d|z  «      ‚|j                  }| j                  «       D ]7  \  }}||   dk(  rt        |«      }||= ||t        |«      <   Œ+t        d|z  «      ‚ |S )NrÃ   zCannot drop %sr   )
r^  r8   rˆ   Ú	is_groundrÏ   rØ   r§   rH   rB   rx   )r©   ró   rª   r8   r¬   r=  r>  ÚKs           r7   r÷   zPolyElement.dropò  s«   € Ø—*‘*˜S“/‰ˆˆ4à�9‰9�?‰?˜aÒØ�~Š~Ø—z‘z !“}Ð$ä Ð!1°CÑ!7Ó8Ð8à—9‘9ˆDàŸ
™
›ò =‘��1Ø�Q‘4˜1’9Ü˜Q›�AØ˜!˜Ø%&�Dœ˜q›’Nä$Ð%5¸Ñ%;Ó<Ð<ð=ð ˆKr9   c                óœ   — | j                   }|j                  |«      }t        |j                  «      }||= ||j	                  |||   ¬«      fS )Nr  )r8   rò   rB   r   rÁ   r]  s        r7   Ú_drop_to_groundzPolyElement._drop_to_ground  sI   € Ø�y‰yˆØ�J‰J�s‹Oˆä�t—|‘|Ó$ˆØ�AˆJØ�$—*‘* W°T¸!±W�*Ó=Ð=Ð=r9   c                óŽ  — | j                   j                  dk(  rt        d«      ‚| j                  |«      \  }}|j                  }|j
                  j                  d   }| j                  «       D ]T  \  }}|d | ||dz   d  z   }||vr|||   z  j                  |«      ||<   Œ3||xx   |||   z  j                  |«      z  cc<   ŒV |S )NrÃ   z$Cannot drop only generator to groundr   )	r8   rˆ   rØ   rc  r§   r4   r2   r)  Ú
mul_ground)r©   ró   rª   r8   r¬   rÒ   rÏ   Úmons           r7   r  zPolyElement.drop_to_ground  sÎ   € Ø�9‰9�?‰?˜aÒÜÐCÓDÐDà×&Ñ& sÓ+‰ˆˆ4Ø�y‰yˆØ�k‰k×Ñ˜qÑ!ˆà ŸN™NÓ,ò 	?‰LˆE�5Ø˜˜�)˜e A a¡C D˜kÑ)ˆCØ˜$‰Ø  %¨¡(™]×6Ñ6°uÓ=��S’	à�S“	˜c 5¨¡8™m×7Ñ7¸Ó>Ñ>”	ð	?ð ˆr9   c                ór   — t        | | j                  j                  dz
  | j                  j                  «      S rà   )r   r8   rˆ   r4   r®   s    r7   Úto_densezPolyElement.to_dense   s(   € Ü˜T 4§9¡9§?¡?°1Ñ#4°d·i±i×6FÑ6FÓGÐGr9   c                ó   — t        | «      S rZ   )rF   r®   s    r7   Úto_dictzPolyElement.to_dict#  s   € Ü�D‹zÐr9   c                ó6  — | s/|j                  | j                  j                  j                  «      S |d   }|d   }| j                  }|j                  }|j
                  }	|j                  }
g }| j                  «       D �]Y  \  }}|j                  j                  |«      }|rdnd}|j                  |«       ||
k(  r*|j                  |«      }|rV|j                  d«      rE|dd  }n?|r| }|| j                  j                  j                  k7  r|j                  ||d¬«      }nd	}g }t        |	«      D ]{  }||   }|sŒ|j                  ||   |d¬«      }|dk7  rA|t        |«      k7  s|d
k  r|j                  ||d¬«      }n|}|j                  |||fz  «       Œh|j                  d|z  «       Œ} |r|g|z   }|j                  |j                  |«      «       �Œ\ |d
   dv r(|j!                  d
«      }|dk(  r|j#                  d
d«       d	j                  |«      S )NÚMulÚAtomú - ú + ú-rÃ   T)ÚstrictÚ r   Fz%s)ro  rn  )Ú_printr8   r4   r§   r   rˆ   r‰   r/  Úis_negativer¨   r´   rŒ   Úparenthesizer¥   rè   ÚjoinÚpopÚinsert)r©   ÚprinterÚ
precedenceÚexp_patternÚ
mul_symbolÚprec_mulÚ	prec_atomr8   r   rˆ   ÚzmÚsexpvsr«   rÏ   ÚnegativeÚsignÚscoeffÚsexpvrª   rë   r¢   ÚsexpÚheads                          r7   r\   zPolyElement.str&  s  € ÙØ—>‘> $§)¡)×"2Ñ"2×"7Ñ"7Ó8Ð8Ø˜eÑ$ˆØ˜vÑ&ˆ	Ø�y‰yˆØ—,‘,ˆØ—
‘
ˆØ�_‰_ˆØˆØŸ:™:›<ó 	2‰KˆD�%Ø—{‘{×.Ñ.¨uÓ5ˆHÙ$‘5¨%ˆDØ�M‰M˜$ÔØ�rŠzØ Ÿ™¨Ó.�Ù × 1Ñ 1°#Ô 6Ø# A B˜Z‘FáØ"˜F�EØ˜DŸI™I×,Ñ,×0Ñ0Ò0Ø$×1Ñ1°%¸È$Ð1ÓO‘Fà�FØˆEÜ˜5“\ò 0�Ø˜1‘g�ÙØØ ×-Ñ-¨g°a©j¸)ÈDÐ-ÓQ�Ø˜!’8Øœc #›h’¨#°ª'Ø&×3Ñ3°C¸È5Ð3ÓQ™à"˜Ø—L‘L °¸¨~Ñ!=Õ>à—L‘L ¨¡Õ/ð0ñ Ø˜ 5Ñ(�Ø�M‰M˜*Ÿ/™/¨%Ó0Ö1ð?	2ð@ �!‰9˜Ñ&Ø—:‘:˜a“=ˆDØ�uŠ}Ø—‘˜a Ô%Ø�w‰w�v‹Ðr9   c                ó2   — | | j                   j                  v S rZ   )r8   r‹   r®   s    r7   Úis_generatorzPolyElement.is_generatorV  s   € à�t—y‘y×*Ñ*Ð*Ð*r9   c                ó\   — |  xs( t        | «      dk(  xr | j                  j                  | v S rà   )ry   r8   r‰   r®   s    r7   r`  zPolyElement.is_groundZ  s+   € àˆxÒLœC ›I¨™NÒK¨t¯y©y×/CÑ/CÀtÐ/KÐLr9   c                óJ   — |  xs t        | «      dk(  xr | j                  dk(  S rà   )ry   ÚLCr®   s    r7   Úis_monomialzPolyElement.is_monomial^  s$   € àˆxÒ<œC ›I¨™NÒ;¨t¯w©w¸!©|Ð<r9   c                ó   — t        | «      dk  S rà   )ry   r®   s    r7   Úis_termzPolyElement.is_termb  s   € ä�4‹y˜A‰~Ðr9   c                ó`   — | j                   j                  j                  | j                  «      S rZ   )r8   r4   rt  r‹  r®   s    r7   rt  zPolyElement.is_negativef  ó!   € à�y‰y×Ñ×+Ñ+¨D¯G©GÓ4Ð4r9   c                ó`   — | j                   j                  j                  | j                  «      S rZ   )r8   r4   Úis_positiver‹  r®   s    r7   r’  zPolyElement.is_positivej  r�  r9   c                ó`   — | j                   j                  j                  | j                  «      S rZ   )r8   r4   Úis_nonnegativer‹  r®   s    r7   r”  zPolyElement.is_nonnegativen  ó!   € à�y‰y×Ñ×.Ñ.¨t¯w©wÓ7Ð7r9   c                ó`   — | j                   j                  j                  | j                  «      S rZ   )r8   r4   Úis_nonpositiver‹  r®   s    r7   r—  zPolyElement.is_nonpositiver  r•  r9   c                ó   — |  S rZ   rX   ©rw   s    r7   Úis_zerozPolyElement.is_zerov  s	   € àˆuˆr9   c                ó4   — | | j                   j                  k(  S rZ   )r8   rŒ   r™  s    r7   Úis_onezPolyElement.is_onez  s   € à�A—F‘F—J‘J‰Ðr9   c                ó`   — | j                   j                  j                  | j                  «      S rZ   )r8   r4   rœ  r‹  r™  s    r7   Úis_moniczPolyElement.is_monic~  s   € à�v‰v�}‰}×#Ñ# A§D¡DÓ)Ð)r9   c                óh   — | j                   j                  j                  | j                  «       «      S rZ   )r8   r4   rœ  Úcontentr™  s    r7   Úis_primitivezPolyElement.is_primitive‚  s!   € à�v‰v�}‰}×#Ñ# A§I¡I£KÓ0Ð0r9   c                óB   — t        d„ | j                  «       D «       «      S )Nc              3  ó8   K  — | ]  }t        |«      d k  –— Œ y­w©rÃ   N©rD   ©r^   rÒ   s     r7   r`   z(PolyElement.is_linear.<locals>.<genexpr>ˆ  ó   è ø€ Ò? u”3�u“: •?Ñ?ùó   ‚©rd   Ú
itermonomsr™  s    r7   Ú	is_linearzPolyElement.is_linear†  ó   € äÑ?°·±³Ô?Ó?Ð?r9   c                óB   — t        d„ | j                  «       D «       «      S )Nc              3  ó8   K  — | ]  }t        |«      d k  –— Œ y­w)é   Nr¥  r¦  s     r7   r`   z+PolyElement.is_quadratic.<locals>.<genexpr>Œ  r§  r¨  r©  r™  s    r7   Úis_quadraticzPolyElement.is_quadraticŠ  r¬  r9   c                óf   — | j                   j                  sy| j                   j                  | «      S ©NT)r8   rˆ   Ú	dmp_sqf_pr™  s    r7   Úis_squarefreezPolyElement.is_squarefreeŽ  s%   € à�v‰v�|Š|ØØ�v‰v×Ñ Ó"Ð"r9   c                óf   — | j                   j                  sy| j                   j                  | «      S r²  )r8   rˆ   Údmp_irreducible_pr™  s    r7   Úis_irreduciblezPolyElement.is_irreducible”  s%   € à�v‰v�|Š|ØØ�v‰v×'Ñ'¨Ó*Ð*r9   c                óz   — | j                   j                  r| j                   j                  | «      S t        d«      ‚)Nzcyclotomic polynomial)r8   r  Údup_cyclotomic_pr#   r™  s    r7   Úis_cyclotomiczPolyElement.is_cyclotomicš  s0   € à�6‰6×ÒØ—6‘6×*Ñ*¨1Ó-Ð-ä-Ð.EÓFÐFr9   c                óx   — | j                  | j                  «       D ��cg c]
  \  }}|| f‘Œ c}}«      S c c}}w rZ   )r%  r)  )r©   rÒ   rÏ   s      r7   Ú__neg__zPolyElement.__neg__¡  s0   € Ø�x‰x¸d¿n¹nÓ>N×P©l¨e°U˜5 5 &š/ÓPÓQÐQùÓPs   Ÿ6
c                ó   — | S rZ   rX   r®   s    r7   Ú__pos__zPolyElement.__pos__¤  s   € Øˆr9   c                ó‚  — |s| j                  «       S | j                  }t        ||j                  «      rc| j                  «       }|j                  }|j
                  j                  }|j                  «       D ]  \  }} |||«      |z   }|r|||<   Œ||= Œ |S t        |t        «      rœt        |j
                  t        «      r$|j
                  j                  |j                  k(  rn^t        |j                  j
                  t        «      r4|j                  j
                  j                  |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  «       }|s|S |j                  }	|	| j                  «       vr|||	<   |S |||	    k(  r||	= |S ||	xx   |z  cc<   |S # t        $ r	 t        cY S w xY w)a  Add two polynomials.

        Examples
        ========

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

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

        )r³   r8   r[   r‡   r~   r4   r§   rH   rj   r   Ú__radd__rP  rÌ   r‰   rI  r    )
rE  rF  r8   r  r~   r§   r=  r>  Úcp2r  s
             r7   Ú__add__zPolyElement.__add__§  s“  € ñ Ø—7‘7“9ÐØ�w‰wˆÜ�b˜$Ÿ*™*Ô%Ø—‘“	ˆAØ—%‘%ˆCØ—;‘;×#Ñ#ˆDØŸ™›
ò ‘��1Ù˜˜4“L 1Ñ$�ÙØ�A�a’Dà˜!™ðð ˆHÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—{‘{ 2“Ð&ä%Ð%ð	Ø—/‘/ "Ó%ˆCð —‘“	ˆAÙØ�Ø—‘ˆBØ˜Ÿ™›Ñ"Ø��"‘ð ˆHð	 ˜!˜B™%˜’<Ø˜"˜ð ˆHð �b“E˜S‘L“EØˆHøô ò 	"Ü!Ò!ð	"ús   ÅF, Æ,F>Æ=F>c                ó  — | j                  «       }|s|S | j                  }	 |j                  |«      }|j                  }|| j	                  «       vr|||<   |S |||    k(  r||= |S ||xx   |z  cc<   |S # t
        $ r	 t        cY S w xY wrZ   )r³   r8   rÌ   r‰   rI  r    rP  )rE  r  r  r8   r  s        r7   rÀ  zPolyElement.__radd__Ý  s¢   € Ø�G‰G‹IˆÙØˆHØ�w‰wˆð	Ø—‘ Ó"ˆAð —‘ˆBØ˜Ÿ™›Ñ"Ø��"‘ð ˆHð	 ˜˜2™˜’;Ø˜"˜ð ˆHð �b“E˜Q‘J“EØˆHøô ò 	"Ü!Ò!ð	"ús   ¢A5 Á5BÂBc                óz  — |s| j                  «       S | j                  }t        ||j                  «      rc| j                  «       }|j                  }|j
                  j                  }|j                  «       D ]  \  }} |||«      |z
  }|r|||<   Œ||= Œ |S t        |t        «      rœt        |j
                  t        «      r$|j
                  j                  |j                  k(  rn^t        |j                  j
                  t        «      r4|j                  j
                  j                  |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  «       }|j                  }|| j                  «       vr| ||<   |S |||   k(  r||= |S ||xx   |z  cc<   |S # t        $ r	 t        cY S w xY w)a.  Subtract polynomial p2 from p1.

        Examples
        ========

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

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

        )r³   r8   r[   r‡   r~   r4   r§   rH   rj   r   Ú__rsub__rP  rÌ   r‰   rI  r    )	rE  rF  r8   r  r~   r§   r=  r>  r  s	            r7   Ú__sub__zPolyElement.__sub__ñ  s‹  € ñ  Ø—7‘7“9ÐØ�w‰wˆÜ�b˜$Ÿ*™*Ô%Ø—‘“	ˆAØ—%‘%ˆCØ—;‘;×#Ñ#ˆDØŸ™›
ò ‘��1Ù˜˜4“L 1Ñ$�ÙØ�A�a’Dà˜!™ðð ˆHÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—{‘{ 2“Ð&ä%Ð%ð	Ø—‘ Ó$ˆBð —‘“	ˆAØ—‘ˆBØ˜Ÿ™›Ñ"Ø˜��"‘ð ˆHð	 ˜˜2™’;Ø˜"˜ð ˆHð �b“E˜R‘K“EØˆHøô ò 	"Ü!Ò!ð	"ús   ÅF( Æ(F:Æ9F:c                ó®   — | j                   }	 |j                  |«      }|j                  }| D ]  }| |    ||<   Œ ||z  }|S # t        $ r	 t        cY S w xY w)a#  n - p1 with n convertible to the coefficient domain.

        Examples
        ========

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

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

        )r8   rÌ   r§   r    rP  )rE  r  r8   r  r«   s        r7   rÅ  zPolyElement.__rsub__'  sn   € ð �w‰wˆð		Ø—‘ Ó"ˆAð —	‘	ˆAØò $�Ø˜d™8˜)��$’ð$à�‰FˆAØˆHøô ò 	"Ü!Ò!ð	"ús   ŽA ÁAÁAc                óŠ  — | j                   }|j                  }| r|s|S t        ||j                  «      r–|j                  }|j
                  j                  }|j                  }t        |j                  «       «      }| j                  «       D ]*  \  }}	|D ]   \  }
} |||
«      } |||«      |	|z  z   ||<   Œ" Œ, |j                  «        |S t        |t        «      rœt        |j
                  t        «      r$|j
                  j                   |j                   k(  rn^t        |j                   j
                  t        «      r4|j                   j
                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  «       D ]  \  }}	|	|z  }|sŒ|||<   Œ |S # t        $ r	 t        cY S w xY w)a!  Multiply two polynomials.

        Examples
        ========

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

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

        )r8   r§   r[   r‡   r~   r4   rŽ   rB   rH   rB  rj   r   Ú__rmul__rP  rÌ   r    )rE  rF  r8   r  r~   r§   rŽ   Úp2itÚexp1Úv1Úexp2Úv2rë   r>  s                 r7   Ú__mul__zPolyElement.__mul__B  sŽ  € ð  �w‰wˆØ�I‰IˆÙ™ØˆHÜ˜˜DŸJ™JÔ'Ø—%‘%ˆCØ—;‘;×#Ñ#ˆDØ×,Ñ,ˆLÜ˜Ÿ™›
Ó#ˆDØŸH™H›Jò 4‘��bØ $ò 4‘H�D˜"Ù& t¨TÓ2�CÙ   d›^¨b°©eÑ3�A�c’Fñ4ð4ð �L‰LŒNØˆHÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—{‘{ 2“Ð&ä%Ð%ð		Ø—‘ Ó$ˆBð ŸH™H›Jò  ‘��bØ�r‘E�ÚØ�A�d’Gð ð ˆHøô ò 	"Ü!Ò!ð	"ús   Å8F0 Æ0GÇGc                óæ   — | j                   j                  }|s|S 	 |j                   j                  |«      }| j                  «       D ]  \  }}||z  }|sŒ|||<   Œ |S # t        $ r	 t
        cY S w xY w)a  p2 * p1 with p2 in the coefficient domain of p1.

        Examples
        ========

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

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

        )r8   r§   rÌ   rH   r    rP  )rE  rF  r  rË  rÌ  r>  s         r7   rÉ  zPolyElement.__rmul__t  s€   € ð �G‰G�L‰LˆÙØˆHð		Ø—‘×"Ñ" 2Ó&ˆBð ŸH™H›Jò  ‘��bØ�r‘E�ÚØ�A�d’Gð ð ˆHøô ò 	"Ü!Ò!ð	"ús   œA ÁA0Á/A0c                óp  — | j                   }|s| r|j                  S t        d«      ‚t        | «      dk(  rut	        | j                  «       «      d   \  }}|j                  }||j                  j                  k(  r|||j                  ||«      <   |S ||z  ||j                  ||«      <   |S t        |«      }|dk  rt        d«      ‚|dk(  r| j                  «       S |dk(  r| j                  «       S |dk(  r| | j                  «       z  S t        | «      dk  r| j                  |«      S | j                  |«      S )a(  raise polynomial to power `n`

        Examples
        ========

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

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

        z0**0rÃ   r   zNegative exponentr¯  é   é   )r8   rŒ   rØ   ry   rB   rH   r§   r4   r�   rè   r³   ÚsquareÚ_pow_multinomialÚ_pow_generic)r©   r  r8   rÒ   rÏ   r  s         r7   Ú__pow__zPolyElement.__pow__‘  s-  € ð �y‰yˆáÙØ—x‘x�ä  Ó(Ð(Ü�‹Y˜!Š^Ü §
¡
£Ó-¨aÑ0‰LˆE�5Ø—	‘	ˆAØ˜Ÿ™Ÿ™Ò'Ø16��$×#Ñ# E¨1Ó-Ñ.ð ˆHð 27¸±��$×#Ñ# E¨1Ó-Ñ.ØˆHô �‹FˆØˆqŠ5ÜÐ0Ó1Ð1à�!ŠVØ—9‘9“;ÐØ�!ŠVØ—;‘;“=Ð Ø�!ŠVØ˜Ÿ™›Ñ%Ð%Ü�‹Y˜!Š^Ø×(Ñ(¨Ó+Ð+à×$Ñ$ QÓ'Ð'r9   c                óˆ   — | j                   j                  }| }	 |dz  r||z  }|dz  }|s	 |S |j                  «       }|dz  }Œ*)NrÃ   r¯  )r8   rŒ   rÔ  )r©   r  r  rS   s       r7   rÖ  zPolyElement._pow_genericÁ  sX   € Ø�I‰I�M‰MˆØˆàØ�1ŠuØ�a‘C�Ø�Q‘�ÙØð
 ˆð —‘“
ˆAØ�Q‘ˆAð r9   c                ó  — t        t        | «      |«      j                  «       }| j                  j                  }| j                  j
                  }| j                  «       }| j                  j                  j                  }| j                  j                  }|D ]g  \  }}	|}
|	}t        ||«      D ]  \  }\  }}|sŒ ||
||«      }
|||z  z  }Œ t        |
«      }|}|j                  ||«      |z   }|r|||<   Œ`||v sŒe||= Œi |S rZ   )r   ry   rH   r8   r’   r‰   r4   r§   rG   rx   r~   )r©   r  Úmultinomialsr’   r‰   r/  r§   r¬   ÚmultinomialÚmultinomial_coeffÚproduct_monomÚproduct_coeffrë   rÒ   rÏ   s                  r7   rÕ  zPolyElement._pow_multinomialÑ  s
  € Ü/´°D³	¸1Ó=×CÑCÓEˆØŸ)™)×3Ñ3ˆØ—Y‘Y×)Ñ)ˆ
Ø—
‘
“ˆØ�y‰y×Ñ×$Ñ$ˆØ�y‰y�~‰~ˆà.:ò 	 Ñ*ˆKÐ*Ø&ˆMØ-ˆMä'*¨;¸Ó'>ò 0Ñ#�‘^�e˜UÚÙ$3°MÀ5È#Ó$N�MØ! U¨C¡ZÑ/‘Mð0ô
 ˜-Ó(ˆEØ!ˆEà—H‘H˜U DÓ)¨EÑ1ˆEáØ#��U’Ø˜$’Ø˜‘Kð#	 ð& ˆr9   c                ó0  — | j                   }|j                  }|j                  }t        | j	                  «       «      }|j
                  j                  }|j                  }t        t        |«      «      D ]?  }||   }| |   }	t        |«      D ]%  }
||
   } |||«      } |||«      |	| |   z  z   ||<   Œ' ŒA |j                  d«      }|j                  }| j                  «       D ]   \  }} |||«      } |||«      |dz  z   ||<   Œ" |j                  «        |S )a  square of a polynomial

        Examples
        ========

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

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

        r¯  )r8   r§   r~   rB   rI  r4   rŽ   r¥   ry   Úimul_numrH   rB  )r©   r8   r  r~   rI  r§   rŽ   rª   Úk1ÚpkÚjÚk2rë   r=  r>  s                  r7   rÔ  zPolyElement.squareî  s  € ð �y‰yˆØ�I‰IˆØ�e‰eˆÜ�D—I‘I“KÓ ˆØ�{‰{×ÑˆØ×(Ñ(ˆÜ”s˜4“yÓ!ò 	6ˆAØ�a‘ˆBØ�b‘ˆBÜ˜1“Xò 6�Ø˜!‘W�Ù" 2 rÓ*�Ù˜S $›¨"¨T°"©X©+Ñ5��#’ñ6ð	6ð �J‰J�q‹MˆØ�e‰eˆØ—J‘J“Lò 	)‰DˆAˆqÙ˜a Ó#ˆBÙ˜˜D“M A q¡DÑ(ˆAˆbŠEð	)ð 	
�‰ŒØˆr9   c                ól  — | j                   }|st        d«      ‚t        ||j                  «      r| j	                  |«      S t        |t
        «      rœt        |j                  t        «      r$|j                  j                   |j                   k(  rn^t        |j                   j                  t        «      r4|j                   j                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  |«      | j                  |«      fS # t        $ r	 t        cY S w xY w©Núpolynomial division)r8   ÚZeroDivisionErrorr[   r‡   r•   rj   r4   r   Ú__rdivmod__rP  rÌ   Ú
quo_groundÚ
rem_groundr    ©rE  rF  r8   s      r7   Ú
__divmod__zPolyElement.__divmod__  sì   € Ø�w‰wˆáÜ#Ð$9Ó:Ð:Ü˜˜DŸJ™JÔ'Ø—6‘6˜"“:ÐÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—~‘~ bÓ)Ð)ä%Ð%ð	:Ø—‘ Ó$ˆBð —M‘M "Ó% r§}¡}°RÓ'8Ð9Ð9øô ò 	"Ü!Ò!ð	"ús   Ã.D! Ä!D3Ä2D3c                ó   — t         S rZ   ©rP  rD  s     r7   ré  zPolyElement.__rdivmod__(  ó   € ÜÐr9   c                óJ  — | j                   }|st        d«      ‚t        ||j                  «      r| j	                  |«      S t        |t
        «      rœt        |j                  t        «      r$|j                  j                   |j                   k(  rn^t        |j                   j                  t        «      r4|j                   j                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  |«      S # t        $ r	 t        cY S w xY wræ  )r8   rè  r[   r‡   Úremrj   r4   r   Ú__rmod__rP  rÌ   rë  r    rì  s      r7   Ú__mod__zPolyElement.__mod__+  sÝ   € Ø�w‰wˆáÜ#Ð$9Ó:Ð:Ü˜˜DŸJ™JÔ'Ø—6‘6˜"“:ÐÜ˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—{‘{ 2“Ð&ä%Ð%ð	%Ø—‘ Ó$ˆBð —=‘= Ó$Ð$øô ò 	"Ü!Ò!ð	"ús   Ã.D ÄD"Ä!D"c                ó   — t         S rZ   rï  rD  s     r7   ró  zPolyElement.__rmod__A  rð  r9   c                ór  — | j                   }|st        d«      ‚t        ||j                  «      r%|j                  r| |dz  z  S | j                  |«      S t        |t        «      rœt        |j                  t        «      r$|j                  j                   |j                   k(  rn^t        |j                   j                  t        «      r4|j                   j                  j                   |k(  r|j                  | «      S t        S 	 |j                  |«      }| j                  |«      S # t        $ r	 t        cY S w xY w)Nrç  rñ   )r8   rè  r[   r‡   rŒ  Úquorj   r4   r   Ú__rtruediv__rP  rÌ   rê  r    rì  s      r7   Ú__truediv__zPolyElement.__truediv__D  só   € Ø�w‰wˆáÜ#Ð$9Ó:Ð:Ü˜˜DŸJ™JÔ'Ø�~Š~Ø˜2 ™8‘}Ð$à—v‘v˜b“zÐ!Ü˜œKÔ(Ü˜$Ÿ+™+¤~Ô6¸4¿;¹;×;KÑ;KÈrÏwÉwÒ;VØÜ˜BŸG™GŸN™N¬NÔ;ÀÇÁÇÁ×@SÑ@SÐW[Ò@[Ø—‘ rÓ*Ð*ä%Ð%ð	%Ø—‘ Ó$ˆBð —=‘= Ó$Ð$øô ò 	"Ü!Ò!ð	"ús   ÄD$ Ä$D6Ä5D6c                ó   — t         S rZ   rï  rD  s     r7   rø  zPolyElement.__rtruediv__]  rð  r9   c                óà   ‡‡‡— | j                   j                  Š| j                   j                  }|j                  Š| j                   j                  Š|j
                  r	ˆˆˆfd„}|S ˆˆˆfd„}|S )Nc                óV   •— | \  }}|\  }}|‰	k(  r|}n	 ‰||«      }|�| ‰||«      fS y rZ   rX   ©
Ú	a_lm_a_lcÚ	b_lm_b_lcÚa_lmÚa_lcÚb_lmÚb_lcrÒ   Ú
domain_quor–   r  s
          €€€r7   Úterm_divz'PolyElement._term_div.<locals>.term_divl  sH   ø€ Ø&‘
��dØ&‘
��dØ˜2’:Ø ‘Eá(¨¨tÓ4�EØÐ$Ø ¡*¨T°4Ó"8Ð8Ð8àr9   c                ó`   •— | \  }}|\  }}|‰	k(  r|}n	 ‰||«      }|�||z  s| ‰||«      fS y rZ   rX   rý  s
          €€€r7   r  z'PolyElement._term_div.<locals>.term_divx  sM   ø€ Ø&‘
��dØ&‘
��dØ˜2’:Ø ‘Eá(¨¨tÓ4�EØ˜¨°ªØ ¡*¨T°4Ó"8Ð8Ð8àr9   )r8   r‰   r4   r÷  r–   r7  )r©   r4   r  r  r–   r  s      @@@r7   Ú	_term_divzPolyElement._term_dive  sX   ú€ Ø�Y‰Y×!Ñ!ˆØ—‘×!Ñ!ˆØ—Z‘Zˆ
Ø—y‘y×-Ñ-ˆà�?Š?ö
 ð0 ˆö
 ð ˆr9   c                óÖ  — | j                   }d}t        |t        «      rd}|g}t        |«      st	        d«      ‚| s(|r|j
                  |j
                  fS g |j
                  fS |D ]  }|j                   |k7  sŒt        d«      ‚ t        |«      }t        |«      D �cg c]  }|j
                  ‘Œ }}| j                  «       }|j
                  }	| j                  «       }
|D �cg c]  }|j                  «       ‘Œ }}|r³d}d}||k  r||dk(  rw|j                  «       } |
|||   f||   ||   ||      f«      }|�9|\  }}||   j                  ||f«      ||<   |j                  ||   || f«      }d}n|dz  }||k  r|dk(  rŒw|s)|j                  «       }|	j                  |||   f«      }	||= |rŒ³|j                  k(  r|	|z  }	|r|s|j
                  |	fS |d   |	fS ||	fS c c}w c c}w )aU  Division algorithm, see [CLO] p64.

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

        All polynomials are required not to be Laurent polynomials.

        Examples
        ========

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

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

        FTrç  z"self and f must have the same ringr   rÃ   )r8   r[   rj   rd   rè  r§   rØ   ry   r¥   r³   r  r›   Ú_iadd_monomÚ_iadd_poly_monomr‰   )r©   Úfvr8   Ú
ret_singlerw   r_   rª   Úqvr  Úrr  ÚfxÚexpvsÚdivoccurredr«   ÚtermÚexpv1rS   s                     r7   r•   zPolyElement.div†  s  € ð8 �y‰yˆØˆ
Ü�bœ+Ô&ØˆJØ�ˆBÜ�2ŒwÜ#Ð$9Ó:Ð:ÙÙØ—y‘y $§)¡)Ð+Ð+à˜4Ÿ9™9�}Ð$Øò 	GˆAØ�v‰v˜‹~Ü Ð!EÓFÐFð	Gô �‹GˆÜ!& q£Ö*˜Aˆd�i‹iÐ*ˆÐ*Ø�I‰I‹KˆØ�I‰IˆØ—>‘>Ó#ˆØ-/Ö0 r�—‘Õ"Ð0ˆÐ0ÙØˆAØˆKØ�a’%˜K¨1Ò,Ø—~‘~Ó'�Ù  q¨¡w °%¸±(¸B¸q¹EÀ%ÈÁ(¹OÐ1LÓM�ØÐ#Ø#‘H�E˜1Ø˜q™E×-Ñ-¨u°a¨jÓ9�B�q‘EØ×*Ñ*¨2¨a©5°5¸1¸"°+Ó>�AØ"#‘Kà˜‘F�Að �a’%˜K¨1Ó,ñ ØŸ™Ó(�Ø—M‘M 4¨¨4© /Ó2�Ø�d�Gò! ð" �4—?‘?Ò"Ø�‰FˆAÙÙØ—y‘y !�|Ð#à˜!‘u˜a�x�à�q�5ˆLùò= +ùò 1s   ÂG!Ã"G&c                ó¬  — | }t        |t        «      r|g}t        |«      st        d«      ‚|j                  }|j
                  }|j                  }|j                  }|j                  }|j                  «       }|j                  }	|j                  «       }|j                  }
|r²|D ]r  } ||	|j                  «      }|€Œ|\  }}|j                  «       D ](  \  }} |||«      } |
||«      ||z  z
  }|s||= Œ$|||<   Œ* |j                  «       }|�|||   f}	 n9 |	\  }}||v r||xx   |z  cc<   n|||<   ||= |j                  «       }|�|||   f}	|rŒ²|S ræ  )r[   rj   rd   rè  r8   r4   r§   rŽ   r  ÚLTr³   r~   r)  r›   )r©   ÚGrw   r8   r4   r§   rŽ   r  r  Últfr~   ÚgÚtqrR   rS   ÚmgÚcgÚm1Úc1ÚltmÚltcs                        r7   rò  zPolyElement.remÒ  sz  € ØˆÜ�aœÔ%Ø�ˆAÜ�1ŒvÜ#Ð$9Ó:Ð:Ø�v‰vˆØ—‘ˆØ�{‰{ˆØ×(Ñ(ˆØ�I‰IˆØ—;‘;“=ˆØ�d‰dˆØ�F‰F‹HˆØ�e‰eˆÙØò &�Ù˜c 1§4¡4Ó(�Ø‘>Ø‘D�A�qØ"#§+¡+£-ò '™˜˜BÙ)¨"¨aÓ0˜Ù   T›]¨Q¨r©TÑ1˜Ù!Ø ! "¡à$&˜A˜bšEð'ð Ÿ.™.Ó*�CØ�Ø! 1 S¡6˜k˜áð&ð" ‘��SØ˜!‘8Ø�c“F˜c‘M”Fà �A�c‘FØ�c�FØ—n‘nÓ&�Ø�?Ø˜q ™v˜+�Cò5 ð8 ˆr9   c                ó*   — | j                  |«      d   S ©Nr   )r•   )rw   r  s     r7   r÷  zPolyElement.quoÿ  s   € Ø�u‰u�Q‹x˜‰{Ðr9   c                óJ   — | j                  |«      \  }}|s|S t        | |«      ‚rZ   )r•   r"   )rw   r  Úqr  s       r7   ÚexquozPolyElement.exquo  s(   € Ø�u‰u�Q‹x‰ˆˆ1áØˆHä% a¨Ó+Ð+r9   c                ó¼   — | | j                   j                  v r| j                  «       }n| }|\  }}|j                  |«      }|€|||<   |S ||z  }|r|||<   |S ||= |S )a�  add to self the monomial coeff*x0**i0*x1**i1*...
        unless self is a generator -- then just return the sum of the two.

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

        Examples
        ========

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

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

        )r8   r‹   r³   r~   )r©   ÚmcÚcpselfr«   rÏ   rS   s         r7   r	  zPolyElement._iadd_monom
  s~   € ð8 �4—9‘9×&Ñ&Ñ&Ø—Y‘Y“[‰FàˆFØ‰ˆˆeØ�J‰J�tÓˆØˆ9Ø ˆF�4‰Lð ˆð �‰JˆAÙØ ��t‘ð ˆð ˜4�LØˆr9   c                ó^  — | }||j                   j                  v r|j                  «       }|\  }}|j                  }|j                   j                  j
                  }|j                   j                  }|j                  «       D ](  \  }	}
 ||	|«      } |||«      |
|z  z   }|r|||<   Œ&||= Œ* |S )aE  add to self the product of (p)*(coeff*x0**i0*x1**i1*...)
        unless self is a generator -- then just return the sum of the two.

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

        Examples
        ========

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

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

        )r8   r‹   r³   r~   r4   r§   rŽ   rH   )r©   rF  r&  rE  rR   rS   r~   r§   rŽ   r=  r>  ÚkarÏ   s                r7   r
  zPolyElement._iadd_poly_monom6  s­   € ð* ˆØ�—‘×"Ñ"Ñ"Ø—‘“ˆBØ‰ˆˆAØ�f‰fˆØ�w‰w�~‰~×"Ñ"ˆØ—w‘w×+Ñ+ˆØ—H‘H“Jò 	‰DˆAˆqÙ˜a Ó#ˆBÙ˜˜D“M A a¡CÑ'ˆEÙØ��2’à�r‘Fð	ð ˆ	r9   c                óš   ‡— | j                   j                  |«      Š| st        S ‰dk  ryt        ˆfd„| j	                  «       D «       «      S )z�
        The leading degree in ``x`` or the main variable.

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

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

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

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

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

        r   c              3  ó(   •K  — | ]	  }|‰   –— Œ y ­wrZ   rX   r,  s     €r7   r`   z*PolyElement.tail_degree.<locals>.<genexpr>…  r-  r.  )r8   rò   r   Úminrª  r/  s     @r7   Útail_degreezPolyElement.tail_degreew  r2  r9   c                ó®   — | st         f| j                  j                  z  S t        t	        t
        t        t        | j                  «       Ž «      «      «      S )z�
        A tuple containing tail degrees in all variables.

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

        )	r   r8   rˆ   rx   rC   r8  rB   rG   rª  r™  s    r7   Útail_degreeszPolyElement.tail_degrees‡  r5  r9   c                ó>   — | r| j                   j                  | «      S y)aT  Leading monomial tuple according to the monomial ordering.

        Examples
        ========

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

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

        N)r8   r›   r®   s    r7   r›   zPolyElement.leading_expv“  s   € ñ Ø—9‘9×)Ñ)¨$Ó/Ð/àr9   c                ób   — | j                  || j                  j                  j                  «      S rZ   )r~   r8   r4   r§   ©r©   r«   s     r7   Ú
_get_coeffzPolyElement._get_coeff§  s#   € Ø�x‰x˜˜dŸi™i×.Ñ.×3Ñ3Ó4Ð4r9   c                óx  — |dk(  r%| j                  | j                  j                  «      S t        || j                  j                  «      rct        |j                  «       «      }t        |«      dk(  r<|d   \  }}|| j                  j                  j                  k(  r| j                  |«      S t        d|z  «      ‚)a  
        Returns the coefficient that stands next to the given monomial.

        Parameters
        ==========

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

        Examples
        ========

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

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

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

        rÃ   r   zexpected a monomial, got %s)r?  r8   r‰   r[   r‡   rB   r)  ry   r4   rŒ   rØ   )r©   rÊ   r/  rÒ   rÏ   s        r7   rÏ   zPolyElement.coeffª  s™   € ð4 �aŠ<Ø—?‘? 4§9¡9×#7Ñ#7Ó8Ð8Ü˜ §¡§¡Ô1Ü˜×*Ñ*Ó,Ó-ˆEÜ�5‹z˜QŠØ$ Q™x‘��uØ˜DŸI™I×,Ñ,×0Ñ0Ò0ØŸ?™?¨5Ó1Ð1äÐ6¸Ñ@ÓAÐAr9   c                óL   — | j                  | j                  j                  «      S )z"Returns the constant coefficient. )r?  r8   r‰   r®   s    r7   rK  zPolyElement.constÏ  s   € à�‰˜tŸy™y×3Ñ3Ó4Ð4r9   c                ó@   — | j                  | j                  «       «      S rZ   )r?  r›   r®   s    r7   r‹  zPolyElement.LCÓ  s   € à�‰˜t×0Ñ0Ó2Ó3Ð3r9   c                óV   — | j                  «       }|€| j                  j                  S |S rZ   )r›   r8   r‰   r>  s     r7   ÚLMzPolyElement.LM×  s*   € à× Ñ Ó"ˆØˆ<Ø—9‘9×'Ñ'Ð'àˆKr9   c                óœ   — | j                   j                  }| j                  «       }|r#| j                   j                  j                  ||<   |S )a  
        Leading monomial as a polynomial element.

        Examples
        ========

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

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

        )r8   r§   r›   r4   rŒ   ©r©   r  r«   s      r7   Úleading_monomzPolyElement.leading_monomß  s@   € ð �I‰I�N‰NˆØ× Ñ Ó"ˆÙØ—i‘i×&Ñ&×*Ñ*ˆAˆd‰GØˆr9   c                ó¸   — | j                  «       }|€6| j                  j                  | j                  j                  j                  fS || j                  |«      fS rZ   )r›   r8   r‰   r4   r§   r?  r>  s     r7   r  zPolyElement.LTô  sN   € à× Ñ Ó"ˆØˆ<Ø—I‘I×(Ñ(¨$¯)©)×*:Ñ*:×*?Ñ*?Ð@Ð@à˜$Ÿ/™/¨$Ó/Ð0Ð0r9   c                óf   — | j                   j                  }| j                  «       }|�| |   ||<   |S )a  Leading term as a polynomial element.

        Examples
        ========

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

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

        )r8   r§   r›   rF  s      r7   Úleading_termzPolyElement.leading_termü  s7   € ð �I‰I�N‰NˆØ× Ñ Ó"ˆØÐØ˜4‘jˆAˆd‰GØˆr9   c                ó°   ‡— ‰€| j                   j                  Šnt        j                  ‰«      Š‰t        u rt        |d„ d¬«      S t        |ˆfd„d¬«      S )Nc                ó   — | d   S r!  rX   )rÒ   s    r7   rp   z%PolyElement._sorted.<locals>.<lambda>  s
   € °°q±€ r9   T)ru   Úreversec                ó   •—  ‰| d   «      S r!  rX   )rÒ   r5   s    €r7   rp   z%PolyElement._sorted.<locals>.<lambda>  s   ø€ ±°u¸Q±x³€ r9   )r8   r5   r|   r{   r   Úsorted)r©   rW   r5   s     `r7   Ú_sortedzPolyElement._sorted  sL   ø€ Øˆ=Ø—I‘I—O‘O‰Eä×'Ñ'¨Ó.ˆEà”C‰<Ü˜#Ñ#9À4ÔHÐHä˜#Ó#@È$ÔOÐOr9   c                óV   — | j                  |«      D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )aù  Ordered list of polynomial coefficients.

        Parameters
        ==========

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

        Examples
        ========

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

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

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

        ©r/  )r©   r5   Ú_rÏ   s       r7   rO   zPolyElement.coeffs  s%   € ð0 (,§z¡z°%Ó'8×:™8˜1˜e’Ó:Ð:ùÓ:ó   •%c                óV   — | j                  |«      D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )a
  Ordered list of polynomial monomials.

        Parameters
        ==========

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

        Examples
        ========

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

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

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

        rR  )r©   r5   rÒ   rS  s       r7   ÚmonomszPolyElement.monoms5  s%   € ð0 (,§z¡z°%Ó'8×:™8˜5 !’Ó:Ð:ùÓ:rT  c                óT   — | j                  t        | j                  «       «      |«      S )a  Ordered list of polynomial terms.

        Parameters
        ==========

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

        Examples
        ========

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

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

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

        )rP  rB   rH   )r©   r5   s     r7   r/  zPolyElement.termsO  s    € ð0 �|‰|œD §¡£Ó.°Ó6Ð6r9   c                ó4   — t        | j                  «       «      S )z,Iterator over coefficients of a polynomial. )ÚiterrE   r®   s    r7   Ú
itercoeffszPolyElement.itercoeffsi  ó   € ä�D—K‘K“MÓ"Ð"r9   c                ó4   — t        | j                  «       «      S )z)Iterator over monomials of a polynomial. )rY  rI  r®   s    r7   rª  zPolyElement.itermonomsm  ó   € ä�D—I‘I“KÓ Ð r9   c                ó4   — t        | j                  «       «      S )z%Iterator over terms of a polynomial. )rY  rH   r®   s    r7   r)  zPolyElement.itertermsq  ó   € ä�D—J‘J“LÓ!Ð!r9   c                ó4   — t        | j                  «       «      S )z+Unordered list of polynomial coefficients. )rB   rE   r®   s    r7   Ú
listcoeffszPolyElement.listcoeffsu  r[  r9   c                ó4   — t        | j                  «       «      S )z(Unordered list of polynomial monomials. )rB   rI  r®   s    r7   Ú
listmonomszPolyElement.listmonomsy  r]  r9   c                ó4   — t        | j                  «       «      S )z$Unordered list of polynomial terms. rA  r®   s    r7   Ú	listtermszPolyElement.listterms}  r_  r9   c                óŽ   — | | j                   j                  v r| |z  S |s| j                  «        y| D ]  }| |xx   |z  cc<   Œ | S )a:  multiply inplace the polynomial p by an element in the
        coefficient ring, provided p is not one of the generators;
        else multiply not inplace

        Examples
        ========

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

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

        N)r8   r‹   Úclear)r  rS   rë   s      r7   rà  zPolyElement.imul_num�  sO   € ð4 �—‘× Ñ Ñ Ø�Q‘3ˆJÙØ�G‰GŒIØØò 	ˆCØˆc‹F�a‰KŒFð	àˆr9   c                óž   — | j                   j                  }|j                  }|j                  }| j	                  «       D ]  } |||«      }Œ |S )z*Returns GCD of polynomial's coefficients. )r8   r4   r§   r™   rZ  )rw   r4   Úcontr™   rÏ   s        r7   r   zPolyElement.content¤  sI   € à—‘—‘ˆØ�{‰{ˆØ�j‰jˆà—\‘\“^ò 	$ˆEÙ�t˜UÓ#‰Dð	$ð ˆr9   c                óH   — | j                  «       }|| j                  |«      fS )z,Returns content and a primitive polynomial. )r   rê  )rw   ri  s     r7   Ú	primitivezPolyElement.primitive¯  s!   € à�y‰y‹{ˆØ�Q—\‘\ $Ó'Ð'Ð'r9   c                ó@   — | s| S | j                  | j                  «      S )z5Divides all coefficients by the leading coefficient. )rê  r‹  r™  s    r7   ÚmoniczPolyElement.monic´  s   € áØˆHà—<‘< §¡Ó%Ð%r9   c                ó®   — |s| j                   j                  S | j                  «       D ��cg c]  \  }}|||z  f‘Œ }}}| j                  |«      S c c}}w rZ   )r8   r§   r)  r%  )rw   r0  rÒ   rÏ   r/  s        r7   re  zPolyElement.mul_ground»  sM   € ÙØ—6‘6—;‘;Ðà78·{±{³}×F¡| u¨e�5˜% ™'Ò"ÐFˆÑFØ�u‰u�U‹|Ðùó Gs   ¬Ac                ó²   — | j                   j                  }| j                  «       D ��cg c]  \  }} |||«      |f‘Œ }}}| j                  |«      S c c}}w rZ   )r8   rŽ   rH   r%  )rw   rÒ   rŽ   Úf_monomÚf_coeffr/  s         r7   Ú	mul_monomzPolyElement.mul_monomÂ  sR   € Ø—v‘v×*Ñ*ˆØRS×RYÑRYÓR[×]Ñ>N¸gÀw‘< ¨Ó/°Ò9Ð]ˆÑ]Ø�u‰u�U‹|Ðùó ^s   ªAc                óJ  — |\  }}| r|s| j                   j                  S || j                   j                  k(  r| j                  |«      S | j                   j                  }| j                  «       D ��cg c]  \  }} |||«      ||z  f‘Œ }}}| j                  |«      S c c}}w rZ   )r8   r§   r‰   re  rŽ   rH   r%  )rw   r  rÒ   rÏ   rŽ   rp  rq  r/  s           r7   Úmul_termzPolyElement.mul_termÇ  s“   € Ø‰ˆˆuá™Ø—6‘6—;‘;ÐØ�a—f‘f×'Ñ'Ò'Ø—<‘< Ó&Ð&à—v‘v×*Ñ*ˆØXY×X_ÑX_ÓXa×cÑDTÀGÈW‘< ¨Ó/°¸±Ò?ÐcˆÑcØ�u‰u�U‹|Ðùó ds   Á3Bc           	     óŠ  — | j                   j                  }|st        d«      ‚| r||j                  k(  r| S |j                  r8|j
                  }| j                  «       D ��cg c]  \  }}| |||«      f‘Œ }}}n-| j                  «       D ��cg c]  \  }}||z  rŒ|||z  f‘Œ }}}| j                  |«      S c c}}w c c}}w ræ  )r8   r4   rè  rŒ   r7  r÷  r)  r%  )rw   r0  r4   r÷  rÒ   rÏ   r/  s          r7   rê  zPolyElement.quo_groundÓ  s®   € Ø—‘—‘ˆáÜ#Ð$9Ó:Ð:Ù�A˜Ÿ™’OØˆHà�?Š?Ø—*‘*ˆCØABÇÁÃ×P±°¸�u™c %¨›mÒ,ÐPˆEÒPà>?¿k¹k»m×`©l¨e°UÐTYÐ\]ÓT]�u˜e q™jÒ)Ð`ˆEÑ`à�u‰u�U‹|Ðùó	 Qùã`s   Á"B9ÂB?Â	B?c                ój  — |\  }}|st        d«      ‚| s| j                  j                  S || j                  j                  k(  r| j	                  |«      S | j                  «       }| j                  «       D �cg c]  } |||«      ‘Œ }}| j                  |D �cg c]  }|€Œ|‘Œ	 c}«      S c c}w c c}w ræ  )rè  r8   r§   r‰   rê  r  r)  r%  )rw   r  rÒ   rÏ   r  Útr/  s          r7   Úquo_termzPolyElement.quo_termã  s�   € Ø‰ˆˆuáÜ#Ð$9Ó:Ð:ÙØ—6‘6—;‘;ÐØ�a—f‘f×'Ñ'Ò'Ø—<‘< Ó&Ð&à—;‘;“=ˆà-.¯[©[«]Ö<¨‘(˜1˜dÕ#Ð<ˆÐ<Ø�u‰u %Ö:˜Q¨1©=’qÒ:Ó;Ð;ùò =ùÚ:s   Á7B+ÂB0Â B0c                ób  — | j                   j                  j                  r@g }| j                  «       D ]*  \  }}||z  }||dz  kD  r||z
  }|j	                  ||f«       Œ, n'| j                  «       D ��cg c]  \  }}|||z  f‘Œ }}}| j                  |«      }|j                  «        |S c c}}w )Nr¯  )r8   r4   Úis_ZZr)  r¨   r%  rB  )rw   r  r/  rÒ   rÏ   r¬   s         r7   Útrunc_groundzPolyElement.trunc_groundò  s¨   € Ø�6‰6�=‰=×ÒØˆEà !§¡£ò -‘��uØ ™	�à˜1 ™6’>Ø! A™I�Eà—‘˜e U˜^Õ,ñ-ð >?¿[¹[»]×L©\¨U°E�u˜e a™iÒ(ÐLˆEÑLà�u‰u�U‹|ˆØ�‰ÔØˆùó	 Ms   Á4B+c                óà   — | }|j                  «       }|j                  «       }|j                  j                  j                  ||«      }|j	                  |«      }|j	                  |«      }|||fS rZ   )r   r8   r4   r™   rê  )r©   r  rw   ÚfcÚgcr™   s         r7   Úextract_groundzPolyElement.extract_ground  s_   € ØˆØ�Y‰Y‹[ˆØ�Y‰Y‹[ˆà�f‰f�m‰m×Ñ  BÓ'ˆà�L‰L˜ÓˆØ�L‰L˜Óˆà�A�qˆyÐr9   c                óä   — | s | j                   j                  j                  S | j                   j                  j                  } || j	                  «       D �cg c]
  } ||«      ‘Œ c}«      S c c}w rZ   )r8   r4   r§   ÚabsrZ  )rw   Ú	norm_funcÚ
ground_absrÏ   s       r7   Ú_normzPolyElement._norm  sP   € ÙØ—6‘6—=‘=×%Ñ%Ð%àŸ™Ÿ™×*Ñ*ˆJÙ¸a¿l¹l»nÖN°U™z¨%Õ0ÒNÓOÐOùÒNs   ÁA-c                ó,   — | j                  t        «      S rZ   )r„  rv   r™  s    r7   Úmax_normzPolyElement.max_norm  ó   € Ø�w‰w”s‹|Ðr9   c                ó,   — | j                  t        «      S rZ   )r„  rD   r™  s    r7   Úl1_normzPolyElement.l1_norm  r‡  r9   c                ó@  — | j                   }| gt        |«      z   }dg|j                  z  }|D ]<  }|j                  «       D ]'  }t	        |«      D ]  \  }}t        ||   |«      ||<   Œ Œ) Œ> t	        |«      D ]  \  }}	|	rŒ	d||<   Œ t        |«      }t        d„ |D «       «      r||fS g }
|D ]f  }|j                  }|j                  «       D ]4  \  }}t        ||«      D ��cg c]
  \  }}||z  ‘Œ }}}||t        |«      <   Œ6 |
j                  |«       Œh ||
fS c c}}w )Nr   rÃ   c              3  ó&   K  — | ]	  }|d k(  –— Œ y­wr¤  rX   )r^   ro   s     r7   r`   z&PolyElement.deflate.<locals>.<genexpr>0  s   è ø€ Ò!˜!ˆq�A�vÑ!ùs   ‚)r8   rB   rˆ   rª  rõ   r   rx   rd   r§   r)  rG   r¨   )rw   r  r8   rT   ÚJr  rÒ   rª   rR   ro   ÚHÚhÚIrÏ   rã  ÚNs                   r7   ÚdeflatezPolyElement.deflate  s@  € Ø�v‰vˆØ�”d˜1“g‘ˆàˆC�—
‘
‰Nˆàò 	)ˆAØŸ™›ò )�Ü% eÓ,ò )‘D�A�qÜ  !¡ a›=�A�a’Dñ)ñ)ð	)ô
 ˜a“Lò 	‰DˆAˆqÚØ��!’ð	ô �!‹HˆäÑ!˜qÔ!Ô!Ø�e�8ˆOàˆàò 	ˆAØ—	‘	ˆAàŸK™K›Mò $‘��5Ü),¨Q°«×4¡  A�a˜1“fÐ4�Ñ4Ø#�”%˜“(’ð$ð �H‰H�Q�Kð	ð �!ˆtˆùó 5s   Ã!D
c                óÌ   — | j                   j                  }| j                  «       D ]4  \  }}t        ||«      D ��cg c]
  \  }}||z  ‘Œ }}}||t	        |«      <   Œ6 |S c c}}w rZ   )r8   r§   r)  rG   rx   )rw   rŒ  r¬   r�  rÏ   rª   rã  r�  s           r7   ÚinflatezPolyElement.inflate@  sb   € Ø�v‰v�{‰{ˆàŸ™›ò 	#‰HˆAˆuÜ"% a¨£)×-™$˜!˜Q�!�A“#Ð-ˆAÑ-Ø"ˆD”�q“ŠNð	#ð ˆùó .s   ¼A c                óZ  — | }|j                   j                  }|j                  s8|j                  «       \  }}|j                  «       \  }}|j	                  ||«      }||z  j                  |j                  |«      «      }|j                  s|j                  «      S |j                  «       S rZ   )	r8   r4   r7  rk  r—   r÷  r™   re  rm  )r©   r  rw   r4   r}  r~  rS   rŽ  s           r7   r—   zPolyElement.lcmI  s„   € ØˆØ—‘—‘ˆà�ŠØ—K‘K“M‰EˆB�Ø—K‘K“M‰EˆB�Ø—
‘
˜2˜rÓ"ˆAàˆq‰S�I‰I�a—e‘e˜A“hÓˆà�ŠØ—<‘< “?Ð"à—7‘7“9Ðr9   c                ó*   — | j                  |«      d   S r!  )Ú	cofactors©rw   r  s     r7   r™   zPolyElement.gcdY  s   € Ø�{‰{˜1‹~˜aÑ Ð r9   c                ó  — | s|s| j                   j                  }|||fS | s| j                  |«      \  }}}|||fS |s|j                  | «      \  }}}|||fS t        | «      dk(  r| j	                  |«      \  }}}|||fS t        |«      dk(  r|j	                  | «      \  }}}|||fS | j                  |«      \  }\  } }| j                  |«      \  }}}|j                  |«      |j                  |«      |j                  |«      fS rà   )r8   r§   Ú	_gcd_zerory   Ú
_gcd_monomr‘  Ú_gcdr“  )rw   r  r§   rŽ  ÚcffÚcfgrŒ  s          r7   r–  zPolyElement.cofactors\  s  € Ù™Ø—6‘6—;‘;ˆDØ˜˜tÐ#Ð#ÙØŸ+™+ a›.‰KˆAˆs�CØ�c˜3�;ÐÙØŸ+™+ a›.‰KˆAˆs�CØ�c˜3�;ÐÜ�‹V�qŠ[ØŸ,™, q›/‰KˆAˆs�CØ�c˜3�;ÐÜ�‹V�qŠ[ØŸ,™, q›/‰KˆAˆs�CØ�c˜3�;Ðà—I‘I˜a“L‰	ˆ‰6ˆAˆqØ—f‘f˜Q“i‰ˆˆ3�à—	‘	˜!“˜cŸk™k¨!›n¨c¯k©k¸!«nÐ=Ð=r9   c                óŠ   — | j                   j                  | j                   j                  }}|j                  r|||fS | || fS rZ   )r8   rŒ   r§   r”  )rw   r  rŒ   r§   s       r7   r™  zPolyElement._gcd_zeror  s@   € Ø—F‘F—J‘J §¡§¡ˆTˆØ×ÒØ�d˜C�<Ðà�2�t˜c˜T�>Ð!r9   c                óB  — | j                   }|j                  j                  }|j                  j                  }|j                  }|j
                  }t        | j                  «       «      d   \  }}||}
}	|j                  «       D ]  \  }} ||	|«      }	 ||
|«      }
Œ | j                  |	|
fg«      }| j                   |||	«       |||
«      fg«      }| j                  |j                  «       D ��cg c]  \  }} |||	«       |||
«      f‘Œ c}}«      }|||fS c c}}w r!  )	r8   r4   r™   r÷  rš   r”   rB   r)  r%  )rw   r  r8   Ú
ground_gcdÚ
ground_quorš   r”   ÚmfÚcfÚ_mgcdÚ_cgcdr  r  rŽ  rœ  r�  s                   r7   rš  zPolyElement._gcd_monomy  s  € Ø�v‰vˆØ—[‘[—_‘_ˆ
Ø—[‘[—_‘_ˆ
Ø×(Ñ(ˆØ×*Ñ*ˆÜ�a—k‘k“mÓ$ QÑ'‰ˆˆBØ˜2ˆuˆØ—k‘k“mò 	*‰FˆB�Ù  ¨Ó+ˆEÙ˜u bÓ)‰Eð	*ð �E‰E�E˜5�>Ð"Ó#ˆØ�e‰e‘m B¨Ó.±
¸2¸uÓ0EÐFÐGÓHˆØ�e‰eÐUV×U`ÑU`ÓUb×cÉ6È2Èr‘m B¨Ó.±
¸2¸uÓ0EÒFÓcÓdˆØ�#�sˆ{Ðùó ds   Ã2D
c                óÚ   — | j                   }|j                  j                  r| j                  |«      S |j                  j                  r| j                  |«      S |j                  | |«      S rZ   )r8   r4   Úis_QQÚ_gcd_QQrz  Ú_gcd_ZZÚdmp_inner_gcd)rw   r  r8   s      r7   r›  zPolyElement._gcd‰  sT   € Ø�v‰vˆà�;‰;×ÒØ—9‘9˜Q“<ÐØ�[‰[×ÒØ—9‘9˜Q“<Ðà×%Ñ% a¨Ó+Ð+r9   c                ó   — t        | |«      S rZ   r   r—  s     r7   r©  zPolyElement._gcd_ZZ“  s   € Ü�a˜‹|Ðr9   c                óx  — | }|j                   }|j                  |j                  j                  «       ¬«      }|j	                  «       \  }}|j	                  «       \  }}|j                  |«      }|j                  |«      }|j                  |«      \  }}}	|j                  |«      }|j                  |j                  «       }}
|j                  |«      j                  |j                  j                  |
|«      «      }|	j                  |«      j                  |j                  j                  |
|«      «      }	|||	fS )Nrû   )r8   rÁ   r4   r9  r?  r0  r©  r‹  rm  re  r÷  )r©   r  rw   r8   r.  r£  r  rŽ  rœ  r�  rS   s              r7   r¨  zPolyElement._gcd_QQ–  sù   € ØˆØ�v‰vˆØ—:‘: T§[¡[×%9Ñ%9Ó%;�:Ó<ˆà—‘Ó ‰ˆˆAØ—‘Ó ‰ˆˆAà�J‰J�xÓ ˆØ�J‰J�xÓ ˆà—i‘i “l‰ˆˆ3�à�J‰J�tÓˆØ�t‰t�Q—W‘W“Yˆ1ˆà�l‰l˜4Ó ×+Ñ+¨D¯K©K¯O©O¸A¸rÓ,BÓCˆØ�l‰l˜4Ó ×+Ñ+¨D¯K©K¯O©O¸A¸rÓ,BÓCˆà�#�sˆ{Ðr9   c                óB  — | }|j                   }|s||j                  fS |j                  }|j                  r|j                  s|j                  |«      \  }}}ná|j                  |j                  «       ¬«      }|j                  «       \  }	}|j                  «       \  }
}|j                  |«      }|j                  |«      }|j                  |«      \  }}}|j                  j                  |
|	«      \  }}
}	|j                  |«      }|j                  |«      }|j                  |
«      }|j                  |	«      }|j                  «       }||j                  k(  r||}}||fS ||j                   k(  r
| | }}||fS |j                  |«      }|j                  |«      }||fS )a  
        Cancel common factors in a rational function ``f/g``.

        Examples
        ========

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

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

        rû   )r8   rŒ   r4   r7  r8  r–  rÁ   r9  r?  r0  re  Úcanonical_unit)r©   r  rw   r8   r4   rS  r  r#  r.  ÚcqÚcpÚus               r7   ÚcancelzPolyElement.cancel«  s„  € ð ˆØ�v‰vˆáØ�d—h‘h�;Ðà—‘ˆà—’ F×$9Ò$9Ø—k‘k !“n‰GˆAˆq‘!à—z‘z¨¯©Ó):�zÓ;ˆHà—N‘NÓ$‰EˆB�Ø—N‘NÓ$‰EˆB�à—
‘
˜8Ó$ˆAØ—
‘
˜8Ó$ˆAà—k‘k !“n‰GˆAˆq�!Ø Ÿ™×1Ñ1°"°bÓ9‰IˆAˆr�2à—
‘
˜4Ó ˆAØ—
‘
˜4Ó ˆAà—‘˜RÓ ˆAØ—‘˜RÓ ˆAð
 ×ÑÓˆØ�—
‘
Š?Ø�aˆqˆAð �!ˆtˆð �6—:‘:�+ÒØ�2˜�rˆqˆAð
 �!ˆtˆð —‘˜Q“ˆAØ—‘˜Q“ˆAà�!ˆtˆr9   c                ód   — | j                   j                  }|j                  | j                  «      S rZ   )r8   r4   r®  r‹  )rw   r4   s     r7   r®  zPolyElement.canonical_unitã  s$   € Ø—‘—‘ˆØ×$Ñ$ Q§T¡TÓ*Ð*r9   c                ó  — | j                   }|j                  |«      }|j                  |«      }|j                  }| j	                  «       D ]7  \  }}||   sŒ|j                  ||«      }|j                  |||   z  «      ||<   Œ9 |S )a!  Computes partial derivative in ``x``.

        Examples
        ========

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

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

        )r8   rò   r¦   r§   r)  r”   rÌ   )	rw   r0  r8   rª   rR   r  r«   rÏ   Úes	            r7   ÚdiffzPolyElement.diffç  s†   € ð �v‰vˆØ�J‰J�q‹MˆØ×Ñ Ó"ˆØ�I‰IˆØŸ;™;›=ò 	6‰KˆD�%Ø�A‹wØ×&Ñ& t¨QÓ/�Ø—‘ u¨T°!©W¡}Ó5��!’ð	6ð ˆr9   c                ó$  — dt        |«      cxk  r| j                  j                  k  r;n n8| j                  t	        t        | j                  j                  |«      «      «      S t        d| j                  j                  ›dt        |«      ›�«      ‚)Nr   z expected at least 1 and at most z values, got )ry   r8   rˆ   ÚevaluaterB   rG   r2   rØ   )rw   rE   s     r7   r!  zPolyElement.__call__ 	  sb   € ØŒs�6‹{Ô*˜aŸf™fŸl™lÕ*Ø—:‘:œd¤3 q§v¡v§{¡{°FÓ#;Ó<Ó=Ð=åÐTU×TZÑTZ×T`ÓT`ÔbeÐflÔbmÐnÓoÐor9   c                óÒ  — | }t        |t        «      r\|€Z|d   |dd  c\  }}}|j                  ||«      }|s|S |D ��cg c]  \  }}|j                  |«      |f‘Œ }}}|j                  |«      S |j                  }|j                  |«      }|j                  j                  |«      }|j                  dk(  r=|j                  j                  }|j                  «       D ]  \  \  }	}
||
||	z  z  z  }Œ |S |j                  |«      j                  }|j                  «       D ]@  \  }}
||   |d | ||dz   d  z   }}	|
||	z  z  }
||v r|
||   z   }
|
r|
||<   Œ5||= Œ9|
sŒ<|
||<   ŒB |S c c}}w )Nr   rÃ   )r[   rB   r¸  r÷   r8   rò   r4   rÈ   rˆ   r§   r)  )r©   r0  rn   rw   ÚXÚYr8   rª   Úresultr  rÏ   r¬   rÒ   s                r7   r¸  zPolyElement.evaluate	  s‹  € Øˆä�aœÔ 1 9Ø˜!™˜a  ˜eˆI‰FˆQ��AØ—
‘
˜1˜aÓ ˆAáØ�à34×6©¨!¨Q�q—v‘v˜a“y !’nÐ6�Ñ6Ø—z‘z !“}Ð$à�v‰vˆØ�J‰J�q‹MˆØ�K‰K×Ñ Ó"ˆà�:‰:˜Š?Ø—[‘[×%Ñ%ˆFà Ÿ{™{›}ò %‘‘��eØ˜%  1¡™*Ñ$‘ð%ð ˆMà—9‘9˜Q“<×$Ñ$ˆDà !§¡£ò ,‘��uØ  ™8 U¨2¨A Y°°q¸±s°t°Ñ%<�5�Ø˜a ™d™
�à˜D‘=Ø! D¨¡KÑ/�EáØ&+˜˜Ušà  ™KâØ&+˜˜Ušð,ð ˆKùóA 7s   ¾E#c                óT  — | }t        |t        «      r |€|D ]  \  }}|j                  ||«      }Œ |S |j                  }|j	                  |«      }|j
                  j                  |«      }|j                  dk(  rL|j
                  j                  }|j                  «       D ]  \  \  }}	||	||z  z  z  }Œ |j                  |«      S |j                  }
|j                  «       D ]C  \  }}	||   |d | dz   ||dz   d  z   }}|	||z  z  }	||
v r|	|
|   z   }	|	r|	|
|<   Œ8|
|= Œ<|	sŒ?|	|
|<   ŒE |
S )NrÃ   rk   )r[   rB   Úsubsr8   rò   r4   rÈ   rˆ   r§   r)  rÐ   )r©   r0  rn   rw   rº  r8   rª   r¼  r  rÏ   r¬   rÒ   s               r7   r¾  zPolyElement.subs2	  sO  € Øˆä�aœÔ 1 9Øò !‘��1Ø—F‘F˜1˜a“L‘ð!àˆHà�v‰vˆØ�J‰J�q‹MˆØ�K‰K×Ñ Ó"ˆà�:‰:˜Š?Ø—[‘[×%Ñ%ˆFà Ÿ{™{›}ò %‘‘��eØ˜%  1¡™*Ñ$‘ð%ð —?‘? 6Ó*Ð*à—9‘9ˆDà !§¡£ò ,‘��uØ  ™8 U¨2¨A Y°Ñ%5¸¸aÀ¹c¸d¸Ñ%C�5�Ø˜a ™d™
�à˜D‘=Ø! D¨¡KÑ/�EáØ&+˜˜Ušà  ™KâØ&+˜˜Ušð,ð ˆKr9   c                ó|  ‡‡‡— | j                  «       }|j                  }|j                  }|s||j                  g fS t	        |«      D �cg c]  }|j                  |dz   «      ‘Œ c}Ši Šˆˆfd„}t        t	        |dz
  «      «      }t        t	        |dd«      «      }|j                  }|rêd\  }	}
}t        |j                  «       «      D ]E  \  }\  Š}t        ˆfd„|D «       «      sŒt        d„ t        |‰«      D «       «      }||	kD  sŒ@|‰|}}
}	ŒG |	dk7  r|
|cŠ}nnwg }t        ‰‰dd d	z   «      D ]  \  }}|j                  ||z
  «       Œ ||j                  t        |«      |«      z  }|}t        |«      D ]  \  }}| |||«      z  }Œ ||z  }|rŒêt        t        |j                  ‰«      «      }|||fS c c}w )
aX  
        Rewrite *self* in terms of elementary symmetric polynomials.

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

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

        Examples
        ========

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

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

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

        Returns
        =======

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

            ``r`` is the remainder.

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

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

        See Also
        ========

        sympy.polys.polyfuncs.symmetrize

        References
        ==========

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

        rÃ   c                ó8   •— | |f‰vr‰|    |z  ‰| |f<   ‰| |f   S rZ   rX   )rª   r  Úpoly_powersrT   s     €€r7   Úget_poly_powerz.PolyElement.symmetrize.<locals>.get_poly_powerž	  s4   ø€ Ø�1ˆv˜[Ñ(Ø&+¨A¡h°¡k�˜Q ˜FÑ#Ø  1˜vÑ&Ð&r9   r   rñ   )rñ   NNc              3  ó:   •K  — | ]  }‰|   ‰|d z      k\  –— Œ y­wr¤  rX   )r^   rª   rÒ   s     €r7   r`   z)PolyElement.symmetrize.<locals>.<genexpr>¬	  s"   øè ø€ ÒA°A�u˜Q‘x 5¨¨Q©¡<Õ/ÑAùs   ƒc              3  ó,   K  — | ]  \  }}||z  –— Œ y ­wrZ   rX   )r^   r  rR   s      r7   r`   z)PolyElement.symmetrize.<locals>.<genexpr>­	  s   è ø€ Ò E©¨¨A  1¥Ñ Eùs   ‚Nrk   )r³   r8   rˆ   r§   r¥   r  rB   rõ   r/  rd   rv   rG   r¨   rÎ   rx   r2   )r©   rw   r8   r  rª   rÂ  rö   ÚweightsÚ	symmetricÚ_heightÚ_monomÚ_coeffrÏ   ÚheightÚ	exponentsr  Úm2Úproductrí   rÒ   rÁ  rT   s                      @@@r7   Ú
symmetrizezPolyElement.symmetrizeY	  sÖ  ú€ ðv �I‰I‹KˆØ�v‰vˆØ�J‰JˆáØ�d—i‘i Ð#Ð#ä38¸³8Ö<¨a�×$Ñ$ Q q¡SÕ)Ò<ˆàˆõ	'ô
 ”u˜Q ™U“|Ó$ˆÜ”u˜Q  2“Ó'ˆà—I‘Iˆ	áØ&4Ñ#ˆG�V˜Vä%.¨q¯w©w«yÓ%9ò GÑ!�‘>�E˜5ÜÓA¸ÔAÕAÜ Ñ E´°W¸eÓ1DÔ EÓE�Fà Ó'Ø28¸%À¨ ™ðGð ˜"Š}Ø% v��‘uààˆIÜ˜e U¨1¨2 Y°Ñ%5Ó6ò *‘��BØ× Ñ   b¡Õ)ð*ð ˜Ÿ™¤u¨YÓ'7¸Ó?Ñ?ˆIàˆGÜ! )Ó,ò 0‘��1Ø™>¨!¨QÓ/Ñ/‘ð0à�‰LˆAò1 ô4 ”s˜4Ÿ9™9 eÓ,Ó-ˆà˜!˜WÐ$Ð$ùòS =s   Á
F9c                ó–  ‡— | j                   }|j                  }t        t        |j                  t        |j                  «      «      «      Š|�||fg}nVt        |t        «      rt        |«      }n:t        |t        «      rt        |j                  «       ˆfd„¬«      }nt        d«      ‚t        |«      D ]!  \  }\  }}‰|   |j                  |«      f||<   Œ# | j                  «       D ]]  \  }}	t        |«      }|j                  }
|D ]  \  }}||   dc}||<   |sŒ|
||z  z  }
Œ |
j!                  t#        |«      |	f«      }
||
z  }Œ_ |S )Nc                ó   •— ‰| d      S r!  rX   )r=  Úgens_maps    €r7   rp   z%PolyElement.compose.<locals>.<lambda>Ñ	  s   ø€ ¸xÈÈ!É¹~€ r9   rt   z9expected a generator, value pair a sequence of such pairsr   )r8   r§   rF   rG   r2   r¥   rˆ   r[   rB   rO  rH   rØ   rõ   rÜ   r)  rŒ   rt  rx   )rw   r0  rn   r8   r¬   Úreplacementsr=  r  rÒ   rÏ   Úsubpolyrª   r  rÑ  s                @r7   r  zPolyElement.composeÆ	  sD  ø€ Ø�v‰vˆØ�y‰yˆÜœ˜DŸI™I¤u¨T¯Z©ZÓ'8Ó9Ó:ˆàˆ=Ø ˜F˜8‰Lä˜!œTÔ"Ü# A›w‘Ü˜AœtÔ$Ü% a§g¡g£iÓ5MÔN‘ä Ð!\Ó]Ð]ä" <Ó0ò 	>‰IˆA‰v��1Ø'¨™{¨D¯M©M¸!Ó,<Ð=ˆL˜ŠOð	>ð ŸK™K›Mò 
	‰LˆE�5Ü˜“KˆEØ—h‘hˆGà$ò $‘��1Ø# A™h¨���5˜‘8ÚØ˜q !™t‘O‘Gð$ð
 ×&Ñ&¬¨e«°eÐ'<Ó=ˆGØ�G‰O‰Dð
	ð ˆr9   c                óŠ  — | }|j                   j                  |«      }|j                  «       D ��cg c]  \  }}||   |k(  sŒ||f‘Œ }}}|s|j                   j                  S t	        |Ž \  }}	|D �cg c]  }|d| dz   ||dz   d z   ‘Œ }}|j                   j                  t        t	        ||	«      «      «      S c c}}w c c}w )aU  
        Coefficient of ``self`` with respect to ``x**deg``.

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

        Parameters
        ==========

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

        Returns
        =======

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

        Examples
        ========

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

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

        See Also
        ========

        coeff, coeffs

        Nrk   rÃ   )r8   rò   r)  r§   rG   rI   rF   )
r©   r0  Údegr  rª   rR   rS   r/  rV  rO   s
             r7   Ú	coeff_wrtzPolyElement.coeff_wrtæ	  s¼   € ðT ˆØ�F‰F�L‰L˜‹OˆØ$%§K¡K£M×A™D˜A˜q°Q°q±T¸S³[�!�Q’ÐAˆÑAáØ—6‘6—;‘;Ðä˜e˜‰ˆ�Ø4:Ö;¨q�!�B�Q�%˜$‘,  1 q¡5 6 Ó*Ð;ˆÐ;Ø�v‰v×Ñ¤¤S¨°Ó%8Ó 9Ó:Ð:ùó Bùò <s   ±B:ÁB:Á2C c                óÄ  — | }|j                   j                  |«      }|j                  |«      }|j                  |«      }|dk  rt        d«      ‚||}}||k  r|S ||z
  dz   }|j	                  ||«      }	|j                   j
                  |   }
	 |j	                  ||«      }||z
  |dz
  }}||	z  }||z  |
|z  z  }||z
  }|j                  |«      }||k  rnŒI|	|z  }||z  S )aŽ  
        Pseudo-remainder of the polynomial ``self`` with respect to ``g``.

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

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


        Parameters
        ==========

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

        Returns
        =======

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

        Raises
        ======

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

        Examples
        ========

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

        >>> f = x**2 + x*y
        >>> g = 2*x + 2
        >>> f.prem(g) # first generator is chosen by default if it is not given
        -4*y + 4
        >>> f.rem(g) # shows the differnce 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Ã   ©r8   rò   r1  rè  rÖ  r2   )r©   r  r0  rw   ÚdfÚdgr  Údrr�  Úlc_gÚxpÚlc_rrã  ÚRr  rS   s                   r7   ÚpremzPolyElement.prem
  s  € ðl ˆØ�F‰F�L‰L˜‹OˆØ�X‰X�a‹[ˆØ�X‰X�a‹[ˆà�Š6Ü#Ð$9Ó:Ð:à�2ˆ2ˆà�Š7ØˆHà�‰G�a‰Kˆà�{‰{˜1˜bÓ!ˆà�V‰V�[‰[˜‰^ˆàà—;‘;˜q "Ó%ˆDØ˜‘7˜A ™EˆqˆAà�D‘ˆAØ�D‘˜2˜q™5Ñ ˆAØ�A‘ˆAà—‘˜!“ˆBà�BŠwØð ð �A‰Iˆà�1‰uˆr9   c                óþ  — | }|j                   j                  |«      }|j                  |«      }|j                  |«      }|dk  rt        d«      ‚|||}}}||k  r||fS ||z
  dz   }	|j	                  ||«      }
|j                   j
                  |   }	 |j	                  ||«      }||z
  |	dz
  }	}||
z  }||||z  z  z   }||
z  }||z  ||z  z  }||z
  }|j                  |«      }||k  rnŒY|
|	z  }||z  }||z  }||fS )a|  
        Computes the pseudo-division of the polynomial ``self`` with respect to ``g``.

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

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

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

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

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


        Parameters
        ==========

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

        Returns
        =======

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

        Raises
        ======

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

        Examples
        ========

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

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

        See Also
        ========

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

        r   rç  rÃ   rØ  )r©   r  r0  rw   rÙ  rÚ  r#  r  rÛ  r�  rÜ  rÝ  rÞ  rã  ÚQrß  r  rS   s                     r7   ÚpdivzPolyElement.pdivv
  s8  € ð` ˆØ�F‰F�L‰L˜‹Oˆà�X‰X�a‹[ˆØ�X‰X�a‹[ˆà�Š6Ü#Ð$9Ó:Ð:à�a˜ˆbˆ1ˆà�Š7Ø�a�4ˆKà�‰G�a‰KˆØ�{‰{˜1˜bÓ!ˆà�V‰V�[‰[˜‰^ˆàà—;‘;˜q "Ó%ˆDØ˜‘7˜A ™EˆqˆAà�D‘ˆAà�T˜2˜q™5‘LÑ ˆAà�D‘ˆAà�D‘˜2˜q™5Ñ ˆAà�A‘ˆAà—‘˜!“ˆBà�BŠwØð% ð( �!‰Gˆà�‰EˆØ�‰Eˆà�!ˆtˆr9   c                ó0   — | }|j                  ||«      d   S )aW  
        Polynomial pseudo-quotient in multivariate polynomial ring.

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

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

        See Also
        ========

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

        r   )rã  )r©   r  r0  rw   s       r7   ÚpquozPolyElement.pquoô
  s   € ð6 ˆØ�v‰v�a˜‹|˜A‰Ðr9   c                ód   — | }|j                  ||«      \  }}|j                  r|S t        ||«      ‚)aë  
        Polynomial exact pseudo-quotient in multivariate polynomial ring.

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

        >>> f = x**2 + x*y
        >>> g = 2*x + 2*y
        >>> h = 2*x + 2
        >>> f.pexquo(g)
        2*x
        >>> f.exquo(g) # shows the differnce 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  r0  rw   r#  r  s         r7   ÚpexquozPolyElement.pexquo  s5   € ð: ˆØ�v‰v�a˜‹|‰ˆˆ1à�9Š9ØˆHä% a¨Ó+Ð+r9   c                ó¨  — | }|j                   j                  |«      }|j                  |«      }|j                  |«      }||k  r||}}||}}|dk(  rddgS |dk(  r|dgS ||g}||z
  }d|dz   z  }|j                  ||«      }	|	|z  }	|j	                  ||«      }
|
|z  }d|g}| }|	r«|	j                  |«      }|j                  |	«       ||	|||z
  f\  }}}}|
 ||z  z  }|j                  ||«      }	|	j                  |«      }	|j	                  ||«      }
|dkD  r |
 |z  }||dz
  z  }|j                  |«      }n|
 }|j                  | «       |	rŒ«|S )a¸  
        Computes the subresultant PRS of two polynomials ``self`` and ``g``.

        Parameters
        ==========

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

        Returns
        =======

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

        Examples
        ========

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

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

        r   rÃ   rñ   )r8   rò   r1  rà  rÖ  r¨   r$  )r©   r  r0  rw   r  rR   rß  Údro   rŽ  ÚlcrS   ÚSr=  r  r#  s                   r7   ÚsubresultantszPolyElement.subresultants7  s�  € ðD ˆØ�F‰F�L‰L˜‹OˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆàˆqŠ5Ø�aˆqˆAØ�aˆqˆAà�Š6Ø�q�6ˆMà�Š6Ø�q�6ˆMà�ˆFˆà�‰EˆØ�Q˜‘U‰Oˆð �F‰F�1�a‹LˆØ�‰Eˆð �[‰[˜˜AÓˆà�!‰Gˆà�ˆFˆàˆBˆáØ—‘˜“ˆAà�H‰H�QŒKØ˜A˜q ! a¡%˜‰JˆAˆq�!�Qà��a˜1‘f‘ˆAØ—‘�q˜!“ˆAØ—‘˜“
ˆAà—‘˜Q Ó"ˆBà�1ŠuØ�S˜Q‘J�Ø˜!˜a™%‘L�Ø—G‘G˜A“J‘à�C�à�H‰H�a�RŒLò' ð* ˆr9   c                ó:   — | j                   j                  | |«      S rZ   )r8   Údmp_half_gcdexr—  s     r7   Ú
half_gcdexzPolyElement.half_gcdex”  s   € Ø�v‰v×$Ñ$ Q¨Ó*Ð*r9   c                ó:   — | j                   j                  | |«      S rZ   )r8   Ú	dmp_gcdexr—  s     r7   ÚgcdexzPolyElement.gcdex—  ó   € Ø�v‰v×Ñ  1Ó%Ð%r9   c                ó:   — | j                   j                  | |«      S rZ   )r8   Údmp_resultantr—  s     r7   Ú	resultantzPolyElement.resultantš  s   € Ø�v‰v×#Ñ# A qÓ)Ð)r9   c                ó8   — | j                   j                  | «      S rZ   )r8   Údmp_discriminantr™  s    r7   ÚdiscriminantzPolyElement.discriminant�  s   € Ø�v‰v×&Ñ& qÓ)Ð)r9   c                óz   — | j                   j                  r| j                   j                  | «      S t        d«      ‚)Nzpolynomial decomposition)r8   r  Údup_decomposer#   r™  s    r7   Ú	decomposezPolyElement.decompose   s0   € Ø�6‰6×ÒØ—6‘6×'Ñ'¨Ó*Ð*ä-Ð.HÓIÐIr9   c                ó|   — | j                   j                  r| j                   j                  | |«      S t        d«      ‚)Nzshift: use shift_list instead)r8   r  Ú	dup_shiftr#   ©rw   rn   s     r7   ÚshiftzPolyElement.shift¦  s2   € Ø�6‰6×ÒØ—6‘6×#Ñ# A qÓ)Ð)ä-Ð.MÓNÐNr9   c                ó:   — | j                   j                  | |«      S rZ   )r8   Ú	dmp_shiftrÿ  s     r7   Ú
shift_listzPolyElement.shift_list¬  ró  r9   c                óz   — | j                   j                  r| j                   j                  | «      S t        d«      ‚)Nzsturm sequence)r8   r  Ú	dup_sturmr#   r™  s    r7   ÚsturmzPolyElement.sturm¯  s0   € Ø�6‰6×ÒØ—6‘6×#Ñ# AÓ&Ð&ä-Ð.>Ó?Ð?r9   c                ó8   — | j                   j                  | «      S rZ   )r8   Údmp_gff_listr™  s    r7   Úgff_listzPolyElement.gff_listµ  ó   € Ø�v‰v×"Ñ" 1Ó%Ð%r9   c                ó8   — | j                   j                  | «      S rZ   )r8   Údmp_normr™  s    r7   ÚnormzPolyElement.norm¸  s   € Ø�v‰v�‰˜qÓ!Ð!r9   c                ó8   — | j                   j                  | «      S rZ   )r8   Údmp_sqf_normr™  s    r7   Úsqf_normzPolyElement.sqf_norm»  r
  r9   c                ó8   — | j                   j                  | «      S rZ   )r8   Údmp_sqf_partr™  s    r7   Úsqf_partzPolyElement.sqf_part¾  r
  r9   c                ó<   — | j                   j                  | |¬«      S )N)rd   )r8   Údmp_sqf_list)rw   rd   s     r7   Úsqf_listzPolyElement.sqf_listÁ  s   € Ø�v‰v×"Ñ" 1¨#Ð"Ó.Ð.r9   c                ó8   — | j                   j                  | «      S rZ   )r8   Údmp_factor_listr™  s    r7   Úfactor_listzPolyElement.factor_listÄ  s   € Ø�v‰v×%Ñ% aÓ(Ð(r9   rZ   )F)˜r}   r  r  r  r%  r'  r¯   r…   r¸   r³   r0  r3  r2  r?  rB  r¼   r¾   rJ  rN  rR  rT  rW  rY  r[  r^  r÷   rc  r  rh  rj  r\   r   rˆ  r`  rŒ  rŽ  rt  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ø  Ú__floordiv__Ú__rfloordiv__r  r•   rò  r÷  r$  r	  r
  r1  r4  r9  r;  r›   r?  rÏ   rK  r‹  rD  rG  r  rJ  rP  rO   rV  r/  rZ  rª  r)  ra  rc  re  rà  r   rk  rm  re  rr  rt  rê  rx  r{  rë  r  r„  r†  r‰  r‘  r“  r—   r™   r–  r™  rš  r›  r©  r¨  r²  r®  r¶  r!  r¸  r¾  rÎ  r  rÖ  rà  rã  rå  rç  rì  rï  rò  rö  rù  rü  r   r  r  r	  r  r  r  r  r  rX   r9   r7   rj   rj   <  sF  „ Ù?ò$ò%ò3ð €Eò	òò8>ò	=òMòò"ò4ò4óGò0)ò"òòòòò	2òò*>òò"Hòò.ð` ñ+ó ð+ð ñMó ðMð ñ=ó ð=ð ñó ðð ñ5ó ð5ð ñ5ó ð5ð ñ8ó ð8ð ñ8ó ð8ð ñó ðð ñó ðð ñ*ó ð*ð ñ1ó ð1ð ñ@ó ð@ð ñ@ó ð@ð ñ#ó ð#ð
 ñ+ó ð+ð
 ñGó ðGòRòò4òlò(4òlò60òdò:.(ò`ò ò:"òH:ò,ò%ò,ò%ò2ð €LØ €MòòBJòX+òZò,ò*òX#óJ=ò 
?ó=ò 
?òò(5ò#BòJ5ð ñ4ó ð4ð ñó ðòð* ñ1ó ð1òò(	Pó;ó4;ó47ò4#ò!ò"ò#ò!ò"ò!òF	ò(ò
&òòò

òò <òð$ €Jò
òPòòòòBòò !ò>ò,"òò ,òòò*6òp+òò2pó*óX%òNk%óZò@3;ójYóv|ó|ó<#,óJXòz+ò&ò*ò*òJòOò&ò@ò&ò"ò&ò&ó/ó)r9   rj   N)Qr  Ú
__future__r   Útypingr   Úoperatorr   r   r   r   r	   r
   Ú	functoolsr   Útypesr   Úsympy.core.exprr   Úsympy.core.intfuncr   Úsympy.core.symbolr   r   rc   Úsympy.core.sympifyr   r   Úsympy.ntheory.multinomialr   Úsympy.polys.compatibilityr   Úsympy.polys.constructorr   Úsympy.polys.densebasicr   r   r   Ú!sympy.polys.domains.domainelementr   Ú"sympy.polys.domains.polynomialringr   Úsympy.polys.heuristicgcdr   Úsympy.polys.monomialsr   Úsympy.polys.orderingsr   Úsympy.polys.polyerrorsr    r!   r"   r#   Úsympy.polys.polyoptionsr$   rz   r%   r|   r&   Úsympy.polys.polyutilsr'   r(   r)   Úsympy.printing.defaultsr*   Úsympy.utilitiesr+   r,   Úsympy.utilities.iterablesr-   Úsympy.utilities.magicr.   r8   r;   r?   rU   rf   rg   Ú__annotations__r1   rF   rj   rX   r9   r7   ú<module>r6     sÿ   ðÚ å "Ý ç -× -Ý Ý å  Ý #ß 9ß 3Ý >Ý ,Ý 4ß CÑ CÝ ;Ý =Ý +Ý -Ý %÷6ó 6÷Gñ G÷=ñ =å 3ß +Ý 1Ý )àØ #ò !ó ð!ð< Ø!$ò ó ðð< Ø!$ò ó ðð< ñ2ó ð2òh@ð !€ˆ^Ó  ôuˆ ô uôpI&)�- °+¸tõ I&)r9   