§
    OŠtjO  ã                   ól   — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 e	 G d„ dee¦  «        ¦   «         Z
dS )	z1Implementation of :class:`PolynomialRing` class. é    )ÚRing)ÚCompositeDomain)ÚCoercionFailedÚGeneratorsError)Úpublicc                   ó,  — e Zd ZdZdxZZdZdZd(d„Zd„ Z	d„ Z
ed„ ¦   «         Zed„ ¦   «         Ze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„ 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S ))ÚPolynomialRingz8A class for representing multivariate polynomial rings. TNc                 ó`  — ddl m} t          ||¦  «        r|€|€|}n ||||¦  «        }|| _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |r2|j        j	        r&|j        j
        rt          |¦  «        dk    rd| _        | j        | _        d S )Nr   )ÚPolyRingé   T)Úsympy.polys.ringsr   Ú
isinstanceÚringÚdtypeÚgensÚngensÚsymbolsÚdomainÚis_FieldÚis_ExactÚlenÚis_PIDÚdom)ÚselfÚdomain_or_ringr   Úorderr   r   s         ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/polys/domains/polynomialring.pyÚ__init__zPolynomialRing.__init__   sÃ   € Ø.Ð.Ð.Ð.Ð.Ð.å�n hÑ/Ô/ð 	<°G°OÈÈØ!ˆDˆDà�8˜G ^°UÑ;Ô;ˆDàˆŒ	Ø”ZˆŒ
à”IˆŒ	Ø”ZˆŒ
Ø”|ˆŒØ”kˆŒð ð 	#ØŒ{Ô#ð #¨¬Ô(<ð #ÅÀWÁÄÈqÂÀØ"�”ð ”;ˆŒˆˆó    c                 ó6   — | j                              |¦  «        S ©N)r   Úring_new©r   Úelements     r   ÚnewzPolynomialRing.new+   s   € ØŒy×!Ò! 'Ñ*Ô*Ð*r   c                 ó6   — | j                              |¦  «        S )z%Check if ``a`` is of type ``dtype``. )r   Ú
is_elementr#   s     r   Úof_typezPolynomialRing.of_type.   s   € àŒy×#Ò# GÑ,Ô,Ð,r   c                 ó   — | j         j        S r!   )r   Úzero©r   s    r   r*   zPolynomialRing.zero2   s   € àŒyŒ~Ðr   c                 ó   — | j         j        S r!   )r   Úoner+   s    r   r-   zPolynomialRing.one6   s   € àŒyŒ}Ðr   c                 ó   — | j         j        S r!   )r   r   r+   s    r   r   zPolynomialRing.order:   s   € àŒyŒÐr   c                 ó’   — t          | j        ¦  «        dz   d                     t          t           | j        ¦  «        ¦  «        z   dz   S )Nú[ú,ú])Ústrr   ÚjoinÚmapr   r+   s    r   Ú__str__zPolynomialRing.__str__>   s9   € Ý�4”;ÑÔ #Ñ%¨¯ªµµS¸$¼,Ñ1GÔ1GÑ(HÔ(HÑHÈ3ÑNÐNr   c                 óZ   — t          | j        j        | j        | j        | j        f¦  «        S r!   )ÚhashÚ	__class__Ú__name__r   r   r   r+   s    r   Ú__hash__zPolynomialRing.__hash__A   s$   € Ý�T”^Ô,¨d¬i¸¼ÀdÄlÐSÑTÔTÐTr   c                 óZ   — t          |t          ¦  «        st          S | j        |j        k    S )z.Returns `True` if two domains are equivalent. )r   r	   ÚNotImplementedr   )r   Úothers     r   Ú__eq__zPolynomialRing.__eq__D   s)   € å˜%¥Ñ0Ô0ð 	"Ý!Ð!ØŒy˜EœJÒ&Ð&r   c                 ót   — |j         sdS | j        }|                     |                     || ¦  «        ¦  «        S )z/Returns ``True`` if ``a`` is a unit of ``self``F)Ú	is_groundr   Úis_unitÚconvert_from)r   ÚaÚKs      r   rB   zPolynomialRing.is_unitJ   s8   € àŒ{ð 	Ø�5ØŒKˆØ�yŠy˜Ÿš¨¨4Ñ0Ô0Ñ1Ô1Ð1r   c                 ót   — | j                              |j        ¦  «        }| j                             |¦  «        S r!   )r   Úcanonical_unitÚLCr   Ú
ground_new)r   rD   Úus      r   rG   zPolynomialRing.canonical_unitQ   s/   € ØŒK×&Ò& q¤tÑ,Ô,ˆØŒy×#Ò# AÑ&Ô&Ð&r   c                 ó*   — |                      ¦   «         S )zConvert `a` to a SymPy object. )Úas_expr©r   rD   s     r   Úto_sympyzPolynomialRing.to_sympyU   s   € à�yŠy‰{Œ{Ðr   c                 ó6   — | j                              |¦  «        S )z'Convert SymPy's expression to `dtype`. )r   Ú	from_exprrM   s     r   Ú
from_sympyzPolynomialRing.from_sympyY   s   € àŒy×"Ò" 1Ñ%Ô%Ð%r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S ©z*Convert a Python `int` object to `dtype`. ©r   Úconvert©ÚK1rD   ÚK0s      r   Úfrom_ZZzPolynomialRing.from_ZZ]   ó$   € àˆr�"”)×#Ò# A rÑ*Ô*Ñ+Ô+Ð+r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S rS   rT   rV   s      r   Úfrom_ZZ_pythonzPolynomialRing.from_ZZ_pythona   rZ   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S ©z/Convert a Python `Fraction` object to `dtype`. rT   rV   s      r   Úfrom_QQzPolynomialRing.from_QQe   rZ   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S r^   rT   rV   s      r   Úfrom_QQ_pythonzPolynomialRing.from_QQ_pythoni   rZ   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S )z(Convert a GMPY `mpz` object to `dtype`. rT   rV   s      r   Úfrom_ZZ_gmpyzPolynomialRing.from_ZZ_gmpym   rZ   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S )z(Convert a GMPY `mpq` object to `dtype`. rT   rV   s      r   Úfrom_QQ_gmpyzPolynomialRing.from_QQ_gmpyq   rZ   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S )z/Convert a `GaussianInteger` object to `dtype`. rT   rV   s      r   Úfrom_GaussianIntegerRingz'PolynomialRing.from_GaussianIntegerRingu   rZ   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S )z0Convert a `GaussianRational` object to `dtype`. rT   rV   s      r   Úfrom_GaussianRationalFieldz)PolynomialRing.from_GaussianRationalFieldy   rZ   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S ©z*Convert a mpmath `mpf` object to `dtype`. rT   rV   s      r   Úfrom_RealFieldzPolynomialRing.from_RealField}   rZ   r   c                 óJ   —  | | j                              ||¦  «        ¦  «        S rk   rT   rV   s      r   Úfrom_ComplexFieldz PolynomialRing.from_ComplexField�   rZ   r   c                 ó€   — | j         |k    r| j                              ||¦  «        }|�|                      |¦  «        S dS )z*Convert an algebraic number to ``dtype``. N)r   rC   r%   rV   s      r   Úfrom_AlgebraicFieldz"PolynomialRing.from_AlgebraicField…   s@   € àŒ9˜Š?ˆ?Ø”	×&Ò& q¨"Ñ-Ô-ˆAØˆ=Ø—6’6˜!‘9”9Ðð ˆ=r   c                 óh   — 	 |                      | j        ¦  «        S # t          t          f$ r Y dS w xY w)z#Convert a polynomial to ``dtype``. N)Úset_ringr   r   r   rV   s      r   Úfrom_PolynomialRingz"PolynomialRing.from_PolynomialRingŒ   sB   € ð	Ø—:’:˜bœgÑ&Ô&Ð&øÝ¥Ð0ð 	ð 	ð 	Ø�4�4ð	øøøs   ‚ œ1°1c                 ó@  — | j         |k    r| j                             |g¦  «        S |                     |¦  «                             |                     |¦  «        ¦  «        \  }}|j        r2|                      ||j        j         	                    ¦   «         ¦  «        S dS )z*Convert a rational function to ``dtype``. N)
r   r   Ú	from_listÚnumerÚdivÚdenomÚis_zerors   ÚfieldÚ	to_domain)rW   rD   rX   ÚqÚrs        r   Úfrom_FractionFieldz!PolynomialRing.from_FractionField“   sƒ   € àŒ9˜Š?ˆ?Ø”7×$Ò$ a SÑ)Ô)Ð)à�xŠx˜‰{Œ{�Š˜rŸxšx¨™{œ{Ñ+Ô+‰ˆˆ1àŒ9ð 	Ø×)Ò)¨!¨R¬X¬]×-DÒ-DÑ-FÔ-FÑGÔGÐGà�4r   c                 óT  ‡ — ‰ j         |j        k    rO|                     ¦   «         }‰ j        |j        k    r ˆ fd„|                     ¦   «         D ¦   «         } ‰ |¦  «        S |j        r>|j        ‰ k    r5‰                      |                     ¦   «         d         |j        ¦  «        S dS dS )z)Convert from old poly ring to ``dtype``. c                 óL   •— i | ] \  }}|‰j                              |¦  «        “Œ!S © rT   )Ú.0ÚmÚcrW   s      €r   ú
<dictcomp>z<PolynomialRing.from_GlobalPolynomialRing.<locals>.<dictcomp>¤   s/   ø€ ÐEÐEÐE±$°!°Q�a˜œ×*Ò*¨1Ñ-Ô-ÐEÐEÐEr   r   N)r   r   Úto_dictr   ÚitemsrA   rC   Úto_list)rW   rD   rX   Úads   `   r   Úfrom_GlobalPolynomialRingz(PolynomialRing.from_GlobalPolynomialRingŸ   s    ø€ àŒ:˜œÒ Ð Ø—’‘”ˆBØŒy˜BœIÒ%Ð%ØEÐEÐEÐE¸"¿(º(¹*¼*ÐEÑEÔE�Ø�2�b‘6”6ˆMØŒ[ð 	>˜RœY¨"š_˜_Ø—?’? 1§9¢9¡;¤;¨q¤>°2´9Ñ=Ô=Ð=ð	>ð 	>˜_˜_r   c                 óX   — | j                              ¦   «                              ¦   «         S )z(Returns a field associated with `self`. )r   Úto_fieldr{   r+   s    r   Ú	get_fieldzPolynomialRing.get_field©   s"   € àŒy×!Ò!Ñ#Ô#×-Ò-Ñ/Ô/Ð/r   c                 ó@   — | j                              |j        ¦  «        S )z%Returns True if `LC(a)` is positive. )r   Úis_positiverH   rM   s     r   r�   zPolynomialRing.is_positive­   ó   € àŒ{×&Ò& q¤tÑ,Ô,Ð,r   c                 ó@   — | j                              |j        ¦  «        S )z%Returns True if `LC(a)` is negative. )r   Úis_negativerH   rM   s     r   r’   zPolynomialRing.is_negative±   r�   r   c                 ó@   — | j                              |j        ¦  «        S )z)Returns True if `LC(a)` is non-positive. )r   Úis_nonpositiverH   rM   s     r   r”   zPolynomialRing.is_nonpositiveµ   ó   € àŒ{×)Ò)¨!¬$Ñ/Ô/Ð/r   c                 ó@   — | j                              |j        ¦  «        S )z)Returns True if `LC(a)` is non-negative. )r   Úis_nonnegativerH   rM   s     r   r—   zPolynomialRing.is_nonnegative¹   r•   r   c                 ó,   — |                      |¦  «        S )zExtended GCD of `a` and `b`. )Úgcdex©r   rD   Úbs      r   r™   zPolynomialRing.gcdex½   s   € à�wŠw�q‰zŒzÐr   c                 ó,   — |                      |¦  «        S )zReturns GCD of `a` and `b`. )Úgcdrš   s      r   r�   zPolynomialRing.gcdÁ   ó   € à�uŠu�Q‰xŒxˆr   c                 ó,   — |                      |¦  «        S )zReturns LCM of `a` and `b`. )Úlcmrš   s      r   r    zPolynomialRing.lcmÅ   rž   r   c                 ó\   — |                       | j                             |¦  «        ¦  «        S )zReturns factorial of `a`. )r   r   Ú	factorialrM   s     r   r¢   zPolynomialRing.factorialÉ   s$   € à�zŠz˜$œ+×/Ò/°Ñ2Ô2Ñ3Ô3Ð3r   )NN)-r:   Ú
__module__Ú__qualname__Ú__doc__Úis_PolynomialRingÚis_PolyÚhas_assoc_RingÚhas_assoc_Fieldr   r%   r(   Úpropertyr*   r-   r   r6   r;   r?   rB   rG   rN   rQ   rY   r\   r_   ra   rc   re   rg   ri   rl   rn   rp   rs   r~   rŠ   r�   r�   r’   r”   r—   r™   r�   r    r¢   r�   r   r   r	   r	   
   sz  € € € € € àBÐBà"&Ð&Ð˜à€NØ€Oðð ð ð ð0+ð +ð +ð-ð -ð -ð ðð ñ „Xðð ðð ñ „Xðð ðð ñ „XððOð Oð OðUð Uð Uð'ð 'ð 'ð2ð 2ð 2ð'ð 'ð 'ðð ð ð&ð &ð &ð,ð ,ð ,ð,ð ,ð ,ð,ð ,ð ,ð,ð ,ð ,ð,ð ,ð ,ð,ð ,ð ,ð,ð ,ð ,ð,ð ,ð ,ð,ð ,ð ,ð,ð ,ð ,ðð ð ðð ð ð
ð 
ð 
ð>ð >ð >ð0ð 0ð 0ð-ð -ð -ð-ð -ð -ð0ð 0ð 0ð0ð 0ð 0ðð ð ðð ð ðð ð ð4ð 4ð 4ð 4ð 4r   r	   N)r¥   Úsympy.polys.domains.ringr   Ú#sympy.polys.domains.compositedomainr   Úsympy.polys.polyerrorsr   r   Úsympy.utilitiesr   r	   r�   r   r   ú<module>r¯      s¥   ðØ 7Ð 7ð *Ð )Ð )Ð )Ð )Ð )Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?à BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ "Ð "Ð "Ð "Ð "Ð "àð@4ð @4ð @4ð @4ð @4�T˜?ñ @4ô @4ñ „ð@4ð @4ð @4r   