ó
    Š*£h¬$  ã                   ó‚   • S r SSKJr  SSKJr  SSKJrJrJr  SSK	J
r
  SSKJr   " S S\\5      r\r " S	 S
\5      r\rg)z"Finite extensions of ring domains.é    )ÚDomain)ÚDomainElement)ÚCoercionFailedÚNotInvertibleÚGeneratorsError)ÚPoly)ÚDefaultPrintingc                   óÊ   • \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS r\rS rS rS r\rS rS rS r\rS r\rS rS rS rS rS rS rS r\r \!S 5       r"S r#Sr$g)ÚExtensionElementé   a  
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                 ó   • Xl         X l        g ©Nr   )Úselfr   r   s      ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/agca/extensions.pyÚ__init__ÚExtensionElement.__init__   s   € ØŒØ�ó    c                 ó   • U R                   $ r   )r   ©Úfs    r   ÚparentÚExtensionElement.parent   s   € Ø�u‰uˆr   c                 ó8   • U R                   R                  U 5      $ r   )r   Úto_sympyr   s    r   Úas_exprÚExtensionElement.as_expr   s   € Ø�u‰u�~‰~˜aÓ Ð r   c                 ó,   • [        U R                  5      $ r   )Úboolr   r   s    r   Ú__bool__ÚExtensionElement.__bool__"   s   € Ü�A—E‘E‹{Ðr   c                 ó   • U $ r   © r   s    r   Ú__pos__ÚExtensionElement.__pos__%   s   € Øˆr   c                 óD   • [        U R                  * U R                  5      $ r   )ÚExtElemr   r   r   s    r   Ú__neg__ÚExtensionElement.__neg__(   s   € Ü˜Ÿ™�v˜qŸu™uÓ%Ð%r   c                 óê   • [        U[        5      (       a'  UR                  U R                  :X  a  UR                  $ g  U R                  R	                  U5      nUR                  $ ! [
         a     g f = fr   )Ú
isinstancer)   r   r   Úconvertr   ©r   Úgs     r   Ú_get_repÚExtensionElement._get_rep+   s\   € Ü�aœ×!Ñ!Ø�u‰u˜Ÿ™‹~Ø—u‘u�àðØ—E‘E—M‘M !Ó$�Ø—u‘u�øÜ!ó Ùðús   ¾&A% Á%
A2Á1A2c                 ó|   • U R                  U5      nUb#  [        U R                  U-   U R                  5      $ [        $ r   ©r1   r)   r   r   ÚNotImplemented©r   r0   r   s      r   Ú__add__ÚExtensionElement.__add__8   ó3   € Ø�j‰j˜‹mˆØ‰?Ü˜1Ÿ5™5 3™;¨¯©Ó.Ð.ä!Ð!r   c                 ó|   • U R                  U5      nUb#  [        U R                  U-
  U R                  5      $ [        $ r   r4   r6   s      r   Ú__sub__ÚExtensionElement.__sub__A   r9   r   c                 óz   • U R                  U5      nUb"  [        X R                  -
  U R                  5      $ [        $ r   r4   r6   s      r   Ú__rsub__ÚExtensionElement.__rsub__H   s1   € Ø�j‰j˜‹mˆØ‰?Ü˜3§¡™;¨¯©Ó.Ð.ä!Ð!r   c                 óª   • U R                  U5      nUb:  [        U R                  U-  U R                  R                  -  U R                  5      $ [
        $ r   )r1   r)   r   r   Úmodr5   r6   s      r   Ú__mul__ÚExtensionElement.__mul__O   s@   € Ø�j‰j˜‹mˆØ‰?Ü˜AŸE™E C™K¨1¯5©5¯9©9Ñ4°a·e±eÓ<Ð<ä!Ð!r   c                 óV  • U (       d  [        S5      eU R                  R                  (       a  gU R                  R                  (       aC  U R                  R
                  R                  U R                  R                  5       5      (       a  gSU  SU R                   S3n[        U5      e)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   Ú	_divcheckÚExtensionElement._divcheckX   sz   € æÜ Ó/Ð/Ø�U‰U�^�^ØØ�U‰U�_�_ §¡§¡×!5Ñ!5°a·e±e·h±h³j×!AÑ!AØð % Q C t¨A¯E©E¨7ð 3Lð LˆCä% cÓ*Ð*r   c                 óZ  • U R                  5         U R                  R                  (       a0  U R                  R	                  U R                  R
                  5      nO<U R                  R                  nUR                  UR                  U R                  5      n[        XR                  5      $ )z]Multiplicative inverse.

Raises
======

NotInvertible
    If the element is a zero divisor.

)
rL   r   rE   r   ÚinvertrA   ÚringÚexquoÚoner)   )r   ÚinvrepÚRs      r   ÚinverseÚExtensionElement.inversei   sf   € ð 	
�‰Œà�5‰5�>�>Ø—U‘U—\‘\ !§%¡%§)¡)Ó,‰Fà—‘—
‘
ˆAØ—W‘W˜QŸU™U A§E¡EÓ*ˆFä�vŸu™uÓ%Ð%r   c                 óÆ   • U R                  U5      nUc  [        $ [        X R                  5      n UR	                  5       nX-  $ ! [
         a    [        U  SU 35      ef = f)Nz / )r1   r5   r)   r   rU   r   ÚZeroDivisionError)r   r0   r   Úginvs       r   Ú__truediv__ÚExtensionElement.__truediv__}   sg   € Ø�j‰j˜‹mˆØ‰;Ü!Ð!Ü�CŸ™Óˆð	2Ø—9‘9“;ˆDð ‰xˆøô ó 	2Ü# q c¨¨Q¨C LÓ1Ð1ð	2ús   ±A ÁA c                 ón   •  U R                   R                  U5      nX-  $ ! [         a	    [        s $ f = fr   ©r   r.   r   r5   r/   s     r   Ú__rtruediv__ÚExtensionElement.__rtruediv__Œ   ó9   € ð	"Ø—‘—‘˜aÓ ˆAð ‰uˆøô ó 	"Ü!Ò!ð	"úó   ‚! ¡4³4c                 óê   • U R                  U5      nUc  [        $ [        X R                  5      n UR	                  5         U R                  R                  $ ! [
         a    [        U  SU 35      ef = f)Nz % )r1   r5   r)   r   rL   r   rX   Úzeror6   s      r   Ú__mod__ÚExtensionElement.__mod__•   sl   € Ø�j‰j˜‹mˆØ‰;Ü!Ð!Ü�CŸ™Óˆð	2Ø�K‰KŒMð
 �u‰u�z‰zÐøô	 ó 	2Ü# q c¨¨Q¨C LÓ1Ð1ð	2ús   ±A ÁA2c                 ón   •  U R                   R                  U5      nX-  $ ! [         a	    [        s $ f = fr   r]   r/   s     r   Ú__rmod__ÚExtensionElement.__rmod__£   r`   ra   c                 óª  • [        U[        5      (       d  [        S5      eUS:  a   U R                  5       U* pU R                  nU R                  R                  nU R                  R                  R                  nUS:”  a%  US-  (       a  XB-  U-  nX"-  U-  nUS-  nUS:”  a  M%  [        X@R                  5      $ ! [         a    [        S5      ef = f)Nzexponent of type 'int' expectedr   znegative powers are not definedé   )r-   ÚintÚ	TypeErrorrU   rJ   Ú
ValueErrorr   r   rA   rR   r)   )r   ÚnÚbÚmÚrs        r   Ú__pow__ÚExtensionElement.__pow__ª   sÆ   € Ü˜!œS×!Ñ!ÜÐ=Ó>Ð>Øˆq‹5ðDØ—y‘y“{ Q B�1ð �E‰EˆØ�E‰E�I‰IˆØ�E‰E�I‰I�M‰MˆØ�!‹eØ�1�uØ‘S˜A‘I�Ø‘˜‘	ˆAØ�!‰GˆAð	 �!�eô �qŸ%™%Ó Ð øô 'ó DÜ Ð!BÓCÐCðDús   ¨B< Â<Cc                 óª   • [        U[        5      (       a9  U R                  UR                  :H  =(       a    U R                  UR                  :H  $ [        $ r   )r-   r)   r   r   r5   r/   s     r   Ú__eq__ÚExtensionElement.__eq__¾   s8   € Ü�aœ×!Ñ!Ø—5‘5˜AŸE™E‘>×4 a§e¡e¨q¯u©u¡nÐ4ä!Ð!r   c                 ó   • X:X  + $ r   r%   r/   s     r   Ú__ne__ÚExtensionElement.__ne__Ä   s
   € ØŠzÐr   c                 óD   • [        U R                  U R                  45      $ r   )Úhashr   r   r   s    r   Ú__hash__ÚExtensionElement.__hash__Ç   s   € Ü�Q—U‘U˜AŸE™E�NÓ#Ð#r   c                 ó:   • SSK Jn  U" U R                  5       5      $ )Nr   )Ússtr)Úsympy.printing.strr   r   )r   r   s     r   Ú__str__ÚExtensionElement.__str__Ê   s   € Ý+Ù�A—I‘I“KÓ Ð r   c                 ó.   • U R                   R                  $ r   )r   rF   r   s    r   rF   ÚExtensionElement.is_groundÐ   s   € à�u‰u�‰Ðr   c                 ó>   • U R                   R                  5       u  nU$ r   )r   Úto_list)r   Úcs     r   Ú	to_groundÚExtensionElement.to_groundÔ   s   € Ø�e‰e�m‰m‹o‰ˆØˆr   )r   r   N)%Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__r   r   r   r"   r&   r*   r1   r7   Ú__radd__r;   r>   rB   Ú__rmul__rL   rU   rZ   Ú__floordiv__r^   Ú__rfloordiv__rd   rg   rr   ru   rx   r|   r�   Ú__repr__ÚpropertyrF   rˆ   Ú__static_attributes__r%   r   r   r   r      s¶   † ñ	ð €Iòòò!òòò&òò"ð €Hò"ò"ò"ð €Hò+ò"&ò(ð €Lòð !€Mòòò!ò("òò$ò!ð €Hàñó ðõr   r   c                   ó˜   • \ rS rSrSrSr\rS rS r	S r
S rS r\r\S	 5       rS
 rSS jrS rS rS rS rS rS rS rS rS rSrg)ÚMonogenicFiniteExtensionéÛ   al  
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                 ó  ^ ^• [        U[        5      (       a  UR                  (       d  [        S5      eUR	                  SS9nUR                  5       T l        UT l        UR                  T l	        UR                  =T l
        nUR                  " UR                  6 T l        T R                  T R                  R                  5      T l        T R                  T R                  R                   5      T l        T R                  R                  S   mT R                  R"                  S   T l        T R                  T5      T l        [)        UU 4S j[+        T R                  5       5       5      T l        T R                  R.                  T l        g )Nz!modulus must be a univariate PolyF)Úautor   c              3   óL   >#   • U  H  nTR                  TU-  5      v •  M     g 7fr   ©r.   )Ú.0ÚiÚgenr   s     €€r   Ú	<genexpr>Ú4MonogenicFiniteExtension.__init__.<locals>.<genexpr>  s#   øé € ÐJÒ9I°A˜4Ÿ<™<¨¨Q©×/Ð/Ò9Iùs   ƒ!$)r-   r   Úis_univariaterl   ÚmonicÚdegreeÚrankÚmodulusr   rA   rG   Úold_poly_ringÚgensrP   r.   rc   rR   ÚsymbolsÚsymbolÚ	generatorÚtupleÚrangeÚbasisrE   )r   rA   Údomr    s   `  @r   r   Ú!MonogenicFiniteExtension.__init__  s  ù€ Ü˜3¤×%Ñ%¨#×*;×*;ÜÐ?Ó@Ð@ð �i‰i˜UˆiÐ#ˆà—J‘J“LˆŒ	ØˆŒØ—7‘7ˆŒàŸJ™JÐ&ˆŒ�cØ×%Ò% s§x¡xÐ0ˆŒ	à—L‘L §¡§¡Ó0ˆŒ	Ø—<‘< §	¡	§¡Ó.ˆŒà�i‰i�n‰n˜QÑˆØ—i‘i×'Ñ'¨Ñ*ˆŒØŸ™ cÓ*ˆŒÜÕJ¼¸t¿y¹yÔ9IÓJÓJˆŒ
ð Ÿ™×,Ñ,ˆ�r   c                 óh   • U R                   R                  U5      n[        X R                  -  U 5      $ r   ©rP   r.   r)   rA   )r   Úargr   s      r   ÚnewÚMonogenicFiniteExtension.new$  s)   € Ø�i‰i×Ñ Ó$ˆÜ�sŸX™X‘~ tÓ,Ð,r   c                 ó`   • [        U[        5      (       d  gU R                  UR                  :H  $ ©NF)r-   ÚFiniteExtensionr§   )r   Úothers     r   ru   ÚMonogenicFiniteExtension.__eq__(  s%   € Ü˜%¤×1Ñ1ØØ�|‰|˜uŸ}™}Ñ,Ð,r   c                 óX   • [        U R                  R                  U R                  45      $ r   )r{   Ú	__class__rŠ   r§   ©r   s    r   r|   Ú!MonogenicFiniteExtension.__hash__-  s    € Ü�T—^‘^×,Ñ,¨d¯l©lÐ;Ó<Ð<r   c                 óZ   • U R                   < SU R                  R                  5       < S3$ )Nz/(Ú))rP   r§   r   r¾   s    r   r�   Ú MonogenicFiniteExtension.__str__0  s   € Ø ŸIœI t§|¡|×';Ñ';Ö'=Ð>Ð>r   c                 ó.   • U R                   R                  $ r   )rG   Úhas_CharacteristicZeror¾   s    r   rÄ   Ú/MonogenicFiniteExtension.has_CharacteristicZero5  s   € à�{‰{×1Ñ1Ð1r   c                 ó6   • U R                   R                  5       $ r   )rG   Úcharacteristicr¾   s    r   rÇ   Ú'MonogenicFiniteExtension.characteristic9  s   € Ø�{‰{×)Ñ)Ó+Ð+r   Nc                 óh   • U R                   R                  X5      n[        X0R                  -  U 5      $ r   r³   ©r   r   Úbaser   s       r   r.   Ú MonogenicFiniteExtension.convert<  ó)   € Ø�i‰i×Ñ Ó(ˆÜ�sŸX™X‘~ tÓ,Ð,r   c                 óh   • U R                   R                  X5      n[        X0R                  -  U 5      $ r   r³   rÊ   s       r   Úconvert_fromÚ%MonogenicFiniteExtension.convert_from@  rÍ   r   c                 óL   • U R                   R                  UR                  5      $ r   )rP   r   r   ©r   r   s     r   r   Ú!MonogenicFiniteExtension.to_sympyD  s   € Ø�y‰y×!Ñ! !§%¡%Ó(Ð(r   c                 ó$   • U R                  U5      $ r   r�   rÒ   s     r   Ú
from_sympyÚ#MonogenicFiniteExtension.from_sympyG  s   € Ø�|‰|˜A‹Ðr   c                 óZ   • U R                   R                  U5      nU R                  U5      $ r   )r§   Ú
set_domainr½   )r   ÚKrA   s      r   rØ   Ú#MonogenicFiniteExtension.set_domainJ  s%   € Ø�l‰l×%Ñ% aÓ(ˆØ�~‰~˜cÓ"Ð"r   c                 óŒ   • U R                   U;   a  [        S5      eU R                  R                  " U6 nU R	                  U5      $ )Nz+Can not drop generator from FiniteExtension)r«   r   rG   ÚdroprØ   )r   rª   rÙ   s      r   rÜ   ÚMonogenicFiniteExtension.dropN  s=   € Ø�;‰;˜'Ó!Ü!Ð"OÓPÐPØ�K‰K×Ò˜gÐ&ˆØ�‰˜qÓ!Ð!r   c                 ó$   • U R                  X5      $ r   )rQ   )r   r   r0   s      r   ÚquoÚMonogenicFiniteExtension.quoT  s   € Ø�z‰z˜!ÓÐr   c                 ó’   • U R                   R                  UR                  UR                  5      n[        X0R                  -  U 5      $ r   )rP   rQ   r   r)   rA   )r   r   r0   r   s       r   rQ   ÚMonogenicFiniteExtension.exquoW  s1   € Ø�i‰i�o‰o˜aŸe™e Q§U¡UÓ+ˆÜ�sŸX™X‘~ tÓ,Ð,r   c                 ó   • gr¸   r%   ©r   Úas     r   Úis_negativeÚ$MonogenicFiniteExtension.is_negative[  s   € Ør   c                 ó°   • U R                   (       a  [        U5      $ UR                  (       a)  U R                  R	                  UR                  5       5      $ g r   )rE   r!   rF   rG   rH   rˆ   rä   s     r   rH   Ú MonogenicFiniteExtension.is_unit^  s9   € Ø�=�=Ü˜“7ˆNØ�[�[Ø—;‘;×&Ñ& q§{¡{£}Ó5Ð5ð r   )r¯   rG   r¬   rE   rA   r§   rR   r¦   rP   r«   rc   r   )rŠ   r‹   rŒ   r�   rŽ   Úis_FiniteExtensionr   Údtyper   rµ   ru   r|   r�   r”   r•   rÄ   rÇ   r.   rÏ   r   rÕ   rØ   rÜ   rß   rQ   ræ   rH   r–   r%   r   r   r˜   r˜   Û   s~   † ñ'ðP Ðà€Eò-ò8-ò-ò
=ò?ð €Hàñ2ó ð2ò,ô-ò-ò)òò#ò"ò ò-òõ6r   r˜   N)rŽ   Ú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ñ      sL   ðÙ (å -Ý ;÷ñ å &Ý 3ôK�} oô KðZ €ôG6˜vô G6ðR +�r   