§
    OŠtj  ã                   ó„   — 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¦  «        ¦   «         Z
 G d„ d	e¦  «        Zd
S )z.Implementation of :class:`QuotientRing` class.é    ©ÚFreeModuleQuotientRing)ÚRing)ÚNotReversibleÚCoercionFailed)Úpublicc                   ól   — e Zd ZdZd„ Zd„ ZeZd„ Zd„ ZeZ	d„ Z
d„ Zd„ Zd	„ ZeZd
„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚQuotientRingElementzº
    Class representing elements of (commutative) quotient rings.

    Attributes:

    - ring - containing ring
    - data - element of ring.ring (i.e. base ring) representing self
    c                 ó"   — || _         || _        d S ©N)ÚringÚdata)Úselfr   r   s      ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/polys/domains/quotientring.pyÚ__init__zQuotientRingElement.__init__   s   € ØˆŒ	ØˆŒ	ˆ	ˆ	ó    c                 ó¦   — ddl m} | j        j                             | j        ¦  «        } ||¦  «        dz   t          | j        j        ¦  «        z   S )Nr   )Ússtrz + )Úsympy.printing.strr   r   Úto_sympyr   ÚstrÚ
base_ideal)r   r   r   s      r   Ú__str__zQuotientRingElement.__str__   sR   € Ø+Ð+Ð+Ð+Ð+Ð+ØŒyŒ~×&Ò& t¤yÑ1Ô1ˆØˆt�D‰zŒz˜EÑ!¥C¨¬	Ô(<Ñ$=Ô$=Ñ=Ð=r   c                 ó8   — | j                              | ¦  «         S r   )r   Úis_zero©r   s    r   Ú__bool__zQuotientRingElement.__bool__$   s   € Ø”9×$Ò$ TÑ*Ô*Ð*Ð*r   c                 ó  — t          || j        ¦  «        r|j        | j        k    r:	 | j                             |¦  «        }n# t          t
          f$ r
 t          cY S w xY w|                      | j        |j        z   ¦  «        S r   ©Ú
isinstanceÚ	__class__r   ÚconvertÚNotImplementedErrorr   ÚNotImplementedr   ©r   Úoms     r   Ú__add__zQuotientRingElement.__add__'   s‡   € Ý˜"˜dœnÑ-Ô-ð 	&°´¸D¼IÒ1EÐ1Eð&Ø”Y×&Ò& rÑ*Ô*��øÝ'­Ð8ð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøà�yŠy˜œ R¤WÑ,Ñ-Ô-Ð-s   §A ÁAÁAc                 óv   — |                       | j        | j         j                              d¦  «        z  ¦  «        S )Néÿÿÿÿ)r   r   r"   r   s    r   Ú__neg__zQuotientRingElement.__neg__1   s-   € Ø�yŠy˜œ 4¤9¤>×#9Ò#9¸"Ñ#=Ô#=Ñ=Ñ>Ô>Ð>r   c                 ó.   — |                       | ¦  «        S r   ©r'   r%   s     r   Ú__sub__zQuotientRingElement.__sub__4   s   € Ø�|Š|˜R˜CÑ Ô Ð r   c                 ó.   — |                        |¦  «        S r   r,   r%   s     r   Ú__rsub__zQuotientRingElement.__rsub__7   s   € Ø��Š˜rÑ"Ô"Ð"r   c                 óä   — t          || j        ¦  «        s:	 | j                             |¦  «        }n# t          t
          f$ r
 t          cY S w xY w|                      | j        |j        z  ¦  «        S r   r   ©r   Úos     r   Ú__mul__zQuotientRingElement.__mul__:   sy   € Ý˜!˜Tœ^Ñ,Ô,ð 	&ð&Ø”I×%Ò% aÑ(Ô(��øÝ'­Ð8ð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøà�yŠy˜œ 1¤6Ñ)Ñ*Ô*Ð*ó   —2 ²AÁAc                 ó<   — | j                              | ¦  «        |z  S r   )r   Úrevertr1   s     r   Ú__rtruediv__z QuotientRingElement.__rtruediv__D   s   € ØŒy×Ò Ñ%Ô% aÑ'Ð'r   c                 óÚ   — t          || j        ¦  «        s:	 | j                             |¦  «        }n# t          t
          f$ r
 t          cY S w xY w| j                             |¦  «        | z  S r   )r    r!   r   r"   r#   r   r$   r6   r1   s     r   Ú__truediv__zQuotientRingElement.__truediv__G   sy   € Ý˜!˜Tœ^Ñ,Ô,ð 	&ð&Ø”I×%Ò% aÑ(Ô(��øÝ'­Ð8ð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøàŒy×Ò Ñ"Ô" 4Ñ'Ð'r4   c                 ó„   — |dk     r| j                              | ¦  «        | z  S |                       | j        |z  ¦  «        S )Nr   )r   r6   r   )r   Úoths     r   Ú__pow__zQuotientRingElement.__pow__O   sA   € Ø�Š7ˆ7Ø”9×#Ò# DÑ)Ô)¨c¨TÑ1Ð1Ø�yŠy˜œ cÑ)Ñ*Ô*Ð*r   c                 óŠ   — t          || j        ¦  «        r|j        | j        k    rdS | j                             | |z
  ¦  «        S )NF)r    r!   r   r   r%   s     r   Ú__eq__zQuotientRingElement.__eq__T   sC   € Ý˜"˜dœnÑ-Ô-ð 	°´¸D¼IÒ1EÐ1EØ�5ØŒy× Ò  ¨¡Ñ+Ô+Ð+r   c                 ó   — | |k     S r   © r%   s     r   Ú__ne__zQuotientRingElement.__ne__Y   s   € Ø˜2’:ˆ~Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__repr__r   r'   Ú__radd__r*   r-   r/   r3   Ú__rmul__r7   r9   r<   r>   rA   r@   r   r   r
   r
      sö   € € € € € ðð ðð ð ð>ð >ð >ð
 €Hð+ð +ð +ð.ð .ð .ð €Hð?ð ?ð ?ð!ð !ð !ð#ð #ð #ð+ð +ð +ð €Hð(ð (ð (ð(ð (ð (ð+ð +ð +ð
,ð ,ð ,ð
ð ð ð ð r   r
   c                   óŽ   — e Zd ZdZdZdZeZd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ ZeZeZeZeZeZeZeZd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚQuotientRingaa  
    Class representing (commutative) quotient rings.

    You should not usually instantiate this by hand, instead use the constructor
    from the base ring in the construction.

    >>> from sympy.abc import x
    >>> from sympy import QQ
    >>> I = QQ.old_poly_ring(x).ideal(x**3 + 1)
    >>> QQ.old_poly_ring(x).quotient_ring(I)
    QQ[x]/<x**3 + 1>

    Shorter versions are possible:

    >>> QQ.old_poly_ring(x)/I
    QQ[x]/<x**3 + 1>

    >>> QQ.old_poly_ring(x)/[x**3 + 1]
    QQ[x]/<x**3 + 1>

    Attributes:

    - ring - the base ring
    - base_ideal - the ideal used to form the quotient
    TFc                 óÊ   — |j         |k    st          d|›d|›�¦  «        ‚|| _         || _         | | j         j        ¦  «        | _         | | j         j        ¦  «        | _        d S )NzIdeal must belong to z, got )r   Ú
ValueErrorr   ÚzeroÚone)r   r   Úideals      r   r   zQuotientRing.__init__|   sf   € ØŒz˜TÒ!Ð!Ý�*À$À$À$ÈÈÐNÑOÔOÐOØˆŒ	ØˆŒØ�D˜œœÑ(Ô(ˆŒ	Ø�4˜œ	œÑ&Ô&ˆŒˆˆr   c                 óZ   — t          | j        ¦  «        dz   t          | j        ¦  «        z   S )Nú/)r   r   r   r   s    r   r   zQuotientRing.__str__„   s$   € Ý�4”9‰~Œ~ Ñ#¥c¨$¬/Ñ&:Ô&:Ñ:Ð:r   c                 óZ   — t          | j        j        | j        | j        | j        f¦  «        S r   )Úhashr!   rB   Údtyper   r   r   s    r   Ú__hash__zQuotientRing.__hash__‡   s$   € Ý�T”^Ô,¨d¬j¸$¼)ÀTÄ_ÐUÑVÔVÐVr   c                 ó¼   — t          || j        j        ¦  «        s|                      |¦  «        }|                      | | j                             |¦  «        ¦  «        S )z4Construct an element of ``self`` domain from ``a``. )r    r   rT   r   Úreduce_element©r   Úas     r   ÚnewzQuotientRing.newŠ   sK   € å˜!˜TœYœ_Ñ-Ô-ð 	Ø—	’	˜!‘”ˆAà�zŠz˜$ ¤× >Ò >¸qÑ AÔ AÑBÔBÐBr   c                 ól   — t          |t          ¦  «        o| j        |j        k    o| j        |j        k    S )z0Returns ``True`` if two domains are equivalent. )r    rJ   r   r   )r   Úothers     r   r>   zQuotientRing.__eq__‘   s:   € å˜%¥Ñ.Ô.ð LØŒI˜œÒ#ðLØ(,¬¸5Ô;KÒ(Kð	Lr   c                 óJ   —  | | j                              ||¦  «        ¦  «        S )z.Convert a Python ``int`` object to ``dtype``. )r   r"   )ÚK1rY   ÚK0s      r   Úfrom_ZZzQuotientRing.from_ZZ–   s"   € àˆr�"”'—/’/ ! RÑ(Ô(Ñ)Ô)Ð)r   c                 óH   —  | | j                              |¦  «        ¦  «        S r   )r   Ú
from_sympyrX   s     r   rb   zQuotientRing.from_sympy¢   s"   € Øˆt�D”I×(Ò(¨Ñ+Ô+Ñ,Ô,Ð,r   c                 ó@   — | j                              |j        ¦  «        S r   )r   r   r   rX   s     r   r   zQuotientRing.to_sympy¥   s   € ØŒy×!Ò! !¤&Ñ)Ô)Ð)r   c                 ó   — || k    r|S d S r   r@   )r   rY   r_   s      r   Úfrom_QuotientRingzQuotientRing.from_QuotientRing¨   s   € Ø�Š:ˆ:ØˆHð ˆ:r   c                 ó    — t          d¦  «        ‚)z*Returns a polynomial ring, i.e. ``K[X]``. únested domains not allowed©r#   ©r   Úgenss     r   Ú	poly_ringzQuotientRing.poly_ring¬   ó   € å!Ð">Ñ?Ô?Ð?r   c                 ó    — t          d¦  «        ‚)z)Returns a fraction field, i.e. ``K(X)``. rg   rh   ri   s     r   Ú
frac_fieldzQuotientRing.frac_field°   rl   r   c                 óÞ   — | j                              |j        ¦  «        | j        z   }	  | |                     d¦  «        d         ¦  «        S # t
          $ r t          |›d| ›�¦  «        ‚w xY w)z/
        Compute a**(-1), if possible.
        é   r   z not a unit in )r   rO   r   r   Úin_terms_of_generatorsrL   r   )r   rY   ÚIs      r   r6   zQuotientRing.revert´   s�   € ð ŒI�OŠO˜AœFÑ#Ô# d¤oÑ5ˆð	CØ�4˜×0Ò0°Ñ3Ô3°AÔ6Ñ7Ô7Ð7øÝð 	Cð 	Cð 	CÝ¸¸¸¸D¸DÐ AÑBÔBÐBð	Cøøøs   ©#A ÁA,c                 ó@   — | j                              |j        ¦  «        S r   )r   Úcontainsr   rX   s     r   r   zQuotientRing.is_zero¾   s   € ØŒ×'Ò'¨¬Ñ/Ô/Ð/r   c                 ó"   — t          | |¦  «        S )zè
        Generate a free module of rank ``rank`` over ``self``.

        >>> from sympy.abc import x
        >>> from sympy import QQ
        >>> (QQ.old_poly_ring(x)/[x**2 + 1]).free_module(2)
        (QQ[x]/<x**2 + 1>)**2
        r   )r   Úranks     r   Úfree_modulezQuotientRing.free_moduleÁ   s   € õ & d¨DÑ1Ô1Ð1r   N)rB   rC   rD   rE   Úhas_assoc_RingÚhas_assoc_Fieldr
   rT   r   r   rU   rZ   r>   r`   Úfrom_ZZ_pythonÚfrom_QQ_pythonÚfrom_ZZ_gmpyÚfrom_QQ_gmpyÚfrom_RealFieldÚfrom_GlobalPolynomialRingÚfrom_FractionFieldrb   r   re   rk   rn   r6   r   rw   r@   r   r   rJ   rJ   ]   s:  € € € € € ðð ð4 €NØ€OØ€Eð'ð 'ð 'ð;ð ;ð ;ðWð Wð WðCð Cð CðLð Lð Lð
*ð *ð *ð €NØ#€NØ!€LØ!€LØ#€NØ .ÐØ'Ðð-ð -ð -ð*ð *ð *ðð ð ð@ð @ð @ð@ð @ð @ðCð Cð Cð0ð 0ð 0ð	2ð 	2ð 	2ð 	2ð 	2r   rJ   N)rE   Úsympy.polys.agca.modulesr   Úsympy.polys.domains.ringr   Úsympy.polys.polyerrorsr   r   Úsympy.utilitiesr   r
   rJ   r@   r   r   ú<module>r…      sÖ   ðØ 4Ð 4ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø )Ð )Ð )Ð )Ð )Ð )Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø "Ð "Ð "Ð "Ð "Ð "ð ðKð Kð Kð Kð Kñ Kô Kñ „ðKð\m2ð m2ð m2ð m2ð m2�4ñ m2ô m2ð m2ð m2ð m2r   