§
    OŠtj¬$  ã                   ó�   — d 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  G d„ dee¦  «        ZeZ G d	„ d
e¦  «        ZeZdS )z"Finite extensions of ring domains.é    )ÚDomain)ÚDomainElement)ÚCoercionFailedÚNotInvertibleÚGeneratorsError)ÚPoly)ÚDefaultPrintingc                   óÊ   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZeZd„ Zd„ Zd„ ZeZd„ Zd„ Zd„ ZeZd„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZeZe d„ ¦   «         Z!d„ Z"dS )ÚExtensionElementa#  
    Element of a finite extension.

    A class of univariate polynomials modulo the ``modulus``
    of the extension ``ext``. It is represented by the
    unique polynomial ``rep`` of lowest degree. Both
    ``rep`` and the representation ``mod`` of ``modulus``
    are of class DMP.

    ©ÚrepÚextc                 ó"   — || _         || _        d S ©Nr   )Úselfr   r   s      úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/polys/agca/extensions.pyÚ__init__zExtensionElement.__init__   s   € ØˆŒØˆŒˆˆó    c                 ó   — | j         S r   )r   ©Úfs    r   ÚparentzExtensionElement.parent   s	   € ØŒuˆr   c                 ó6   — | j                              | ¦  «        S r   )r   Úto_sympyr   s    r   Úas_exprzExtensionElement.as_expr   s   € ØŒu�~Š~˜aÑ Ô Ð r   c                 ó*   — t          | j        ¦  «        S r   )Úboolr   r   s    r   Ú__bool__zExtensionElement.__bool__"   s   € Ý�A”E‰{Œ{Ðr   c                 ó   — | S r   © r   s    r   Ú__pos__zExtensionElement.__pos__%   s   € Øˆr   c                 ó8   — t          | j         | j        ¦  «        S r   )ÚExtElemr   r   r   s    r   Ú__neg__zExtensionElement.__neg__(   s   € Ý˜œ�v˜qœuÑ%Ô%Ð%r   c                 óÄ   — t          |t          ¦  «        r|j        | j        k    r|j        S d S 	 | j                             |¦  «        }|j        S # t
          $ r Y d S w xY wr   )Ú
isinstancer#   r   r   Úconvertr   ©r   Úgs     r   Ú_get_repzExtensionElement._get_rep+   sn   € Ý�a�Ñ!Ô!ð 
	ØŒu˜œŠ~ˆ~Ø”u�à�tðØ”E—M’M !Ñ$Ô$�Ø”u�øÝ!ð ð ð Ø�t�tðøøøs   ° A Á
AÁAc                 óx   — |                       |¦  «        }|�t          | j        |z   | j        ¦  «        S t          S r   ©r*   r#   r   r   ÚNotImplemented©r   r)   r   s      r   Ú__add__zExtensionElement.__add__8   ó4   € Ø�jŠj˜‰mŒmˆØˆ?Ý˜1œ5 3™;¨¬Ñ.Ô.Ð.å!Ð!r   c                 óx   — |                       |¦  «        }|�t          | j        |z
  | j        ¦  «        S t          S r   r,   r.   s      r   Ú__sub__zExtensionElement.__sub__A   r0   r   c                 óx   — |                       |¦  «        }|�t          || j        z
  | j        ¦  «        S t          S r   r,   r.   s      r   Ú__rsub__zExtensionElement.__rsub__H   s4   € Ø�jŠj˜‰mŒmˆØˆ?Ý˜3 ¤™;¨¬Ñ.Ô.Ð.å!Ð!r   c                 ó’   — |                       |¦  «        }|�*t          | j        |z  | j        j        z  | j        ¦  «        S t
          S r   )r*   r#   r   r   Úmodr-   r.   s      r   Ú__mul__zExtensionElement.__mul__O   s=   € Ø�jŠj˜‰mŒmˆØˆ?Ý˜AœE C™K¨1¬5¬9Ñ4°a´eÑ<Ô<Ð<å!Ð!r   c                 ó  — | st          d¦  «        ‚| j        j        rdS | j        j        r8| j        j                             | j                             ¦   «         ¦  «        rdS d| › d| j        › d�}t          |¦  «        ‚)z5Raise if division is not implemented for this divisorzZero divisorTzCan not invert z in z7. Only division by invertible constants is implemented.)	r   r   Úis_Fieldr   Ú	is_groundÚdomainÚis_unitÚLCÚNotImplementedError)r   Úmsgs     r   Ú	_divcheckzExtensionElement._divcheckX   s—   € àð 	+Ý Ñ/Ô/Ð/ØŒUŒ^ð 	+Ø�4ØŒUŒ_ð 		+ ¤¤×!5Ò!5°a´e·h²h±j´jÑ!AÔ!Að 		+Ø�4ðL Qð Lð L¨A¬Eð Lð Lð LˆCå% cÑ*Ô*Ð*r   c                 ó  — |                       ¦   «          | j        j        r%| j                             | j        j        ¦  «        }n,| j        j        }|                     |j        | j        ¦  «        }t          || j        ¦  «        S )z…Multiplicative inverse.

        Raises
        ======

        NotInvertible
            If the element is a zero divisor.

        )
r@   r   r9   r   Úinvertr6   ÚringÚexquoÚoner#   )r   ÚinvrepÚRs      r   ÚinversezExtensionElement.inversei   sh   € ð 	
�Š‰ŒˆàŒ5Œ>ð 	+Ø”U—\’\ !¤%¤)Ñ,Ô,ˆFˆFà””
ˆAØ—W’W˜QœU A¤EÑ*Ô*ˆFå�v˜qœuÑ%Ô%Ð%r   c                 óâ   — |                       |¦  «        }|€t          S t          || j        ¦  «        }	 |                     ¦   «         }n"# t
          $ r t          | › d|› �¦  «        ‚w xY w| |z  S )Nz / )r*   r-   r#   r   rH   r   ÚZeroDivisionError)r   r)   r   Úginvs       r   Ú__truediv__zExtensionElement.__truediv__}   s   € Ø�jŠj˜‰mŒmˆØˆ;Ý!Ð!Ý�C˜œÑÔˆð	2Ø—9’9‘;”;ˆDˆDøÝð 	2ð 	2ð 	2Ý# q L L¨Q L LÑ1Ô1Ð1ð	2øøøð �4‰xˆó   µA
 Á
A)c                 ór   — 	 | j                              |¦  «        }n# t          $ r
 t          cY S w xY w|| z  S r   ©r   r'   r   r-   r(   s     r   Ú__rtruediv__zExtensionElement.__rtruediv__Œ   óL   € ð	"Ø”—’˜aÑ Ô ˆAˆAøÝð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøà�1‰uˆó   ‚ �1°1c                 óð   — |                       |¦  «        }|€t          S t          || j        ¦  «        }	 |                     ¦   «          n"# t
          $ r t          | › d|› �¦  «        ‚w xY w| j        j        S )Nz % )r*   r-   r#   r   r@   r   rJ   Úzeror.   s      r   Ú__mod__zExtensionElement.__mod__•   s€   € Ø�jŠj˜‰mŒmˆØˆ;Ý!Ð!Ý�C˜œÑÔˆð	2Ø�KŠK‰MŒMˆMˆMøÝð 	2ð 	2ð 	2Ý# q L L¨Q L LÑ1Ô1Ð1ð	2øøøð ŒuŒzÐrM   c                 ór   — 	 | j                              |¦  «        }n# t          $ r
 t          cY S w xY w|| z  S r   rO   r(   s     r   Ú__rmod__zExtensionElement.__rmod__£   rQ   rR   c                 ó€  — t          |t          ¦  «        st          d¦  «        ‚|dk     r6	 |                      ¦   «         | }} n# t          $ r t          d¦  «        ‚w xY w| j        }| j        j        }| j        j	        j        }|dk    r |dz  r||z  |z  }||z  |z  }|dz  }|dk    ° t          || j        ¦  «        S )Nzexponent of type 'int' expectedr   znegative powers are not definedé   )r&   ÚintÚ	TypeErrorrH   r>   Ú
ValueErrorr   r   r6   rE   r#   )r   ÚnÚbÚmÚrs        r   Ú__pow__zExtensionElement.__pow__ª   sé   € Ý˜!�SÑ!Ô!ð 	?ÝÐ=Ñ>Ô>Ð>ØˆqŠ5ˆ5ðDØ—y’y‘{”{ Q B�1��øÝ&ð Dð Dð DÝ Ð!BÑCÔCÐCðDøøøð ŒEˆØŒEŒIˆØŒEŒIŒMˆØ�!ŠeˆeØ�1‰uð Ø�q‘S˜A‘I�Ø�1‘˜‘	ˆAØ�!‰GˆAð	 �!Šeˆeõ �q˜!œ%Ñ Ô Ð s   ¬A ÁAc                 óz   — t          |t          ¦  «        r | j        |j        k    o| j        |j        k    S t          S r   )r&   r#   r   r   r-   r(   s     r   Ú__eq__zExtensionElement.__eq__¾   s5   € Ý�a�Ñ!Ô!ð 	"Ø”5˜AœE’>Ð4 a¤e¨q¬u¢nÐ4å!Ð!r   c                 ó   — | |k     S r   r    r(   s     r   Ú__ne__zExtensionElement.__ne__Ä   s   € Ø˜’6ˆzÐr   c                 ó8   — t          | j        | j        f¦  «        S r   )Úhashr   r   r   s    r   Ú__hash__zExtensionElement.__hash__Ç   s   € Ý�Q”U˜AœE�NÑ#Ô#Ð#r   c                 óH   — ddl m}  ||                      ¦   «         ¦  «        S )Nr   )Ússtr)Úsympy.printing.strrj   r   )r   rj   s     r   Ú__str__zExtensionElement.__str__Ê   s,   € Ø+Ð+Ð+Ð+Ð+Ð+Øˆt�A—I’I‘K”KÑ Ô Ð r   c                 ó   — | j         j        S r   )r   r:   r   s    r   r:   zExtensionElement.is_groundÐ   s   € àŒuŒÐr   c                 ó<   — | j                              ¦   «         \  }|S r   )r   Úto_list)r   Úcs     r   Ú	to_groundzExtensionElement.to_groundÔ   s   € ØŒe�mŠm‰oŒo‰ˆØˆr   N)#Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   r   r   r!   r$   r*   r/   Ú__radd__r2   r4   r7   Ú__rmul__r@   rH   rL   Ú__floordiv__rP   Ú__rfloordiv__rU   rW   ra   rc   re   rh   rl   Ú__repr__Úpropertyr:   rq   r    r   r   r   r      sº  € € € € € ð	ð 	ð €Iðð ð ðð ð ð!ð !ð !ðð ð ðð ð ð&ð &ð &ðð ð ð"ð "ð "ð €Hð"ð "ð "ð"ð "ð "ð"ð "ð "ð €Hð+ð +ð +ð"&ð &ð &ð(ð ð ð €Lðð ð ð !€Mðð ð ðð ð ð!ð !ð !ð("ð "ð "ðð ð ð$ð $ð $ð!ð !ð !ð €Hàðð ñ „Xððð ð ð ð r   r   c                   ó–   — e Zd ZdZdZeZd„ Zd„ Zd„ Z	d„ Z
d„ ZeZe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
S )ÚMonogenicFiniteExtensionaà  
    Finite extension generated by an integral element.

    The generator is defined by a monic univariate
    polynomial derived from the argument ``mod``.

    A shorter alias is ``FiniteExtension``.

    Examples
    ========

    Quadratic integer ring $\mathbb{Z}[\sqrt2]$:

    >>> from sympy import Symbol, Poly
    >>> from sympy.polys.agca.extensions import FiniteExtension
    >>> x = Symbol('x')
    >>> R = FiniteExtension(Poly(x**2 - 2)); R
    ZZ[x]/(x**2 - 2)
    >>> R.rank
    2
    >>> R(1 + x)*(3 - 2*x)
    x - 1

    Finite field $GF(5^3)$ defined by the primitive
    polynomial $x^3 + x^2 + 2$ (over $\mathbb{Z}_5$).

    >>> F = FiniteExtension(Poly(x**3 + x**2 + 2, modulus=5)); F
    GF(5)[x]/(x**3 + x**2 + 2)
    >>> F.basis
    (1, x, x**2)
    >>> F(x + 3)/(x**2 + 2)
    -2*x**2 + x + 2

    Function field of an elliptic curve:

    >>> t = Symbol('t')
    >>> FiniteExtension(Poly(t**2 - x**3 - x + 1, t, field=True))
    ZZ(x)[t]/(t**2 - x**3 - x + 1)

    Tc                 óÆ  ‡ ‡— t          |t          ¦  «        r|j        st          d¦  «        ‚|                     d¬¦  «        }|                     ¦   «         ‰ _        |‰ _        |j        ‰ _	        |j
        x‰ _
        } |j        |j        Ž ‰ _        ‰                      ‰ j        j        ¦  «        ‰ _        ‰                      ‰ j        j        ¦  «        ‰ _        ‰ j        j        d         Š‰ j        j        d         ‰ _        ‰                      ‰¦  «        ‰ _        t)          ˆˆ fd„t+          ‰ j        ¦  «        D ¦   «         ¦  «        ‰ _        ‰ j
        j        ‰ _        d S )Nz!modulus must be a univariate PolyF)Úautor   c              3   óH   •K  — | ]}‰                      ‰|z  ¦  «        V — Œd S r   ©r'   )Ú.0ÚiÚgenr   s     €€r   ú	<genexpr>z4MonogenicFiniteExtension.__init__.<locals>.<genexpr>  s3   øè è € ÐJÐJ°A˜4Ÿ<š<¨¨Q©Ñ/Ô/ÐJÐJÐJÐJÐJÐJr   )r&   r   Úis_univariater[   ÚmonicÚdegreeÚrankÚmodulusr   r6   r;   Úold_poly_ringÚgensrC   r'   rT   rE   ÚsymbolsÚsymbolÚ	generatorÚtupleÚrangeÚbasisr9   )r   r6   Údomr…   s   `  @r   r   z!MonogenicFiniteExtension.__init__  s)  øø€ Ý˜3¥Ñ%Ô%ð 	A¨#Ô*;ð 	AÝÐ?Ñ@Ô@Ð@ð �iŠi˜UˆiÑ#Ô#ˆà—J’J‘L”LˆŒ	ØˆŒØ”7ˆŒàœJÐ&ˆŒ�cØ%�CÔ% s¤xÐ0ˆŒ	à—L’L ¤¤Ñ0Ô0ˆŒ	Ø—<’< ¤	¤Ñ.Ô.ˆŒàŒiŒn˜QÔˆØ”iÔ'¨Ô*ˆŒØŸš cÑ*Ô*ˆŒÝÐJÐJÐJÐJÐJ½¸t¼yÑ9IÔ9IÐJÑJÔJÑJÔJˆŒ
ð œÔ,ˆŒˆˆr   c                 óf   — | j                              |¦  «        }t          || j        z  | ¦  «        S r   ©rC   r'   r#   r6   )r   Úargr   s      r   ÚnewzMonogenicFiniteExtension.new$  s-   € ØŒi×Ò Ñ$Ô$ˆÝ�s˜TœX‘~ tÑ,Ô,Ð,r   c                 óP   — t          |t          ¦  «        sdS | j        |j        k    S ©NF)r&   ÚFiniteExtensionr‹   )r   Úothers     r   rc   zMonogenicFiniteExtension.__eq__(  s(   € Ý˜%¥Ñ1Ô1ð 	Ø�5ØŒ|˜uœ}Ò,Ð,r   c                 óB   — t          | j        j        | j        f¦  «        S r   )rg   Ú	__class__rr   r‹   ©r   s    r   rh   z!MonogenicFiniteExtension.__hash__-  s   € Ý�T”^Ô,¨d¬lÐ;Ñ<Ô<Ð<r   c                 óJ   — | j         ›d| j                             ¦   «         ›d�S )Nz/(ú))rC   r‹   r   rŸ   s    r   rl   z MonogenicFiniteExtension.__str__0  s'   € Ø œI˜I˜I t¤|×';Ò';Ñ'=Ô'=Ð'=Ð'=Ð>Ð>r   c                 ó   — | j         j        S r   )r;   Úhas_CharacteristicZerorŸ   s    r   r£   z/MonogenicFiniteExtension.has_CharacteristicZero5  s   € àŒ{Ô1Ð1r   c                 ó4   — | j                              ¦   «         S r   )r;   ÚcharacteristicrŸ   s    r   r¥   z'MonogenicFiniteExtension.characteristic9  s   € ØŒ{×)Ò)Ñ+Ô+Ð+r   Nc                 óh   — | j                              ||¦  «        }t          || j        z  | ¦  «        S r   r–   ©r   r   Úbaser   s       r   r'   z MonogenicFiniteExtension.convert<  ó/   € ØŒi×Ò  4Ñ(Ô(ˆÝ�s˜TœX‘~ tÑ,Ô,Ð,r   c                 óh   — | j                              ||¦  «        }t          || j        z  | ¦  «        S r   r–   r§   s       r   Úconvert_fromz%MonogenicFiniteExtension.convert_from@  r©   r   c                 ó@   — | j                              |j        ¦  «        S r   )rC   r   r   ©r   r   s     r   r   z!MonogenicFiniteExtension.to_sympyD  s   € ØŒy×!Ò! !¤%Ñ(Ô(Ð(r   c                 ó,   — |                       |¦  «        S r   r‚   r­   s     r   Ú
from_sympyz#MonogenicFiniteExtension.from_sympyG  s   € Ø�|Š|˜A‰ŒÐr   c                 ó`   — | j                              |¦  «        }|                      |¦  «        S r   )r‹   Ú
set_domainrž   )r   ÚKr6   s      r   r±   z#MonogenicFiniteExtension.set_domainJ  s)   € ØŒl×%Ò% aÑ(Ô(ˆØ�~Š~˜cÑ"Ô"Ð"r   c                 óz   — | j         |v rt          d¦  «        ‚ | j        j        |Ž }|                      |¦  «        S )Nz+Can not drop generator from FiniteExtension)r�   r   r;   Údropr±   )r   rŽ   r²   s      r   r´   zMonogenicFiniteExtension.dropN  sA   € ØŒ;˜'Ð!Ð!Ý!Ð"OÑPÔPÐPØˆDŒKÔ˜gÐ&ˆØ�Š˜qÑ!Ô!Ð!r   c                 ó.   — |                       ||¦  «        S r   )rD   )r   r   r)   s      r   ÚquozMonogenicFiniteExtension.quoT  s   € Ø�zŠz˜!˜QÑÔÐr   c                 ó|   — | j                              |j        |j        ¦  «        }t          || j        z  | ¦  «        S r   )rC   rD   r   r#   r6   )r   r   r)   r   s       r   rD   zMonogenicFiniteExtension.exquoW  s1   € ØŒi�oŠo˜aœe Q¤UÑ+Ô+ˆÝ�s˜TœX‘~ tÑ,Ô,Ð,r   c                 ó   — dS rš   r    ©r   Úas     r   Úis_negativez$MonogenicFiniteExtension.is_negative[  s   € Øˆur   c                 ó˜   — | j         rt          |¦  «        S |j        r,| j                             |                     ¦   «         ¦  «        S d S r   )r9   r   r:   r;   r<   rq   r¹   s     r   r<   z MonogenicFiniteExtension.is_unit^  sI   € ØŒ=ð 	6Ý˜‘7”7ˆNØŒ[ð 	6Ø”;×&Ò& q§{¢{¡}¤}Ñ5Ô5Ð5ð	6ð 	6r   r   )rr   rs   rt   ru   Úis_FiniteExtensionr   Údtyper   r˜   rc   rh   rl   r{   r|   r£   r¥   r'   r«   r   r¯   r±   r´   r¶   rD   r»   r<   r    r   r   r~   r~   Û   sA  € € € € € ð'ð 'ðP Ðà€Eð-ð -ð -ð8-ð -ð -ð-ð -ð -ð
=ð =ð =ð?ð ?ð ?ð €Hàð2ð 2ñ „Xð2ð,ð ,ð ,ð-ð -ð -ð -ð-ð -ð -ð)ð )ð )ðð ð ð#ð #ð #ð"ð "ð "ð ð  ð  ð-ð -ð -ðð ð ð6ð 6ð 6ð 6ð 6r   r~   N)ru   Úsympy.polys.domains.domainr   Ú!sympy.polys.domains.domainelementr   Úsympy.polys.polyerrorsr   r   r   Úsympy.polys.polytoolsr   Úsympy.printing.defaultsr	   r   r#   r~   r›   r    r   r   ú<module>rÄ      sÿ   ðØ (Ð (à -Ð -Ð -Ð -Ð -Ð -Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð ð ð ð à &Ð &Ð &Ð &Ð &Ð &Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðKð Kð Kð Kð K�} oñ Kô Kð KðZ €ðG6ð G6ð G6ð G6ð G6˜vñ G6ô G6ð G6ðR +€€€r   