+
    i$                         R t ^ RIHt ^ RIHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHt  ! R R]]4      t]t ! R R	]4      t]tR
# )z"Finite extensions of ring domains.)Domain)DomainElement)CoercionFailedNotInvertibleGeneratorsError)Poly)DefaultPrintingc                      a  ] tR t^t o RtRtR tR tR tR t	R t
R tR tR	 t]tR
 tR tR t]tR tR tR t]tR t]tR tR tR tR tR tR tR t]t ]!R 4       t"R t#Rt$V t%R# )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.

c                    Wn         W n        R # Nrepext)selfr   r   s   &&&{/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/polys/agca/extensions.py__init__ExtensionElement.__init__   s        c                    V P                   # r   )r   fs   &r   parentExtensionElement.parent   s    uur   c                8    V P                   P                  V 4      # r   )r   to_sympyr   s   &r   as_exprExtensionElement.as_expr   s    uu~~a  r   c                ,    \        V P                  4      # r   )boolr   r   s   &r   __bool__ExtensionElement.__bool__"   s    AEE{r   c                    V # r    r   s   &r   __pos__ExtensionElement.__pos__%   s    r   c                D    \        V P                  ) V P                  4      # r   )ExtElemr   r   r   s   &r   __neg__ExtensionElement.__neg__(   s    vquu%%r   c                    \        V\        4      '       d*   VP                  V P                  8X  d   VP                  # R #  V P                  P	                  V4      pVP                  #   \
         d     R # i ; ir   )
isinstancer'   r   r   convertr   r   gs   &&r   _get_repExtensionElement._get_rep+   s\    a!!uu~uuEEMM!$uu! s   &A( (A76A7c                    V P                  V4      pVe(   \        V P                  V,           V P                  4      # \        # r   r/   r'   r   r   NotImplementedr   r.   r   s   && r   __add__ExtensionElement.__add__8   3    jjm?1553;..!!r   c                    V P                  V4      pVe(   \        V P                  V,
          V P                  4      # \        # r   r2   r4   s   && r   __sub__ExtensionElement.__sub__A   r7   r   c                    V P                  V4      pVe'   \        W P                  ,
          V P                  4      # \        # r   r2   r4   s   && r   __rsub__ExtensionElement.__rsub__H   s1    jjm?3;..!!r   c                    V P                  V4      pVeC   \        V P                  V,          V P                  P                  ,          V P                  4      # \
        # r   )r/   r'   r   r   modr3   r4   s   && r   __mul__ExtensionElement.__mul__O   s@    jjm?AEECK155994aee<<!!r   c                b   V '       g   \        R4      hV P                  P                  '       d   R# V P                  P                  '       dF   V P                  P
                  P                  V P                  P                  4       4      '       d   R# RV  RV P                   R2p\        V4      h)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   s~    //UU^^^UU___!5!5aeehhj!A!A %QCtAEE7 3L LC%c**r   c                \   V P                  4        V P                  P                  '       d1   V P                  P	                  V P                  P
                  4      pM<V P                  P                  pVP                  VP                  V P                  4      p\        WP                  4      # )z]Multiplicative inverse.

Raises
======

NotInvertible
    If the element is a zero divisor.

)
rJ   r   rC   r   invertr?   ringexquooner'   )r   invrepRs   &  r   inverseExtensionElement.inversei   sh     	
55>>>UU\\!%%)),F

AWWQUUAEE*Fvuu%%r   c                    V P                  V4      pVf   \        # \        W P                  4      p VP	                  4       pW,          #   \
         d    \        T  RT 24      hi ; i)Nz / )r/   r3   r'   r   rS   r   ZeroDivisionError)r   r.   r   ginvs   &&  r   __truediv__ExtensionElement.__truediv__}   sg    jjm;!!C	299;D x  	2#qcQCL11	2s   A
 
A&c                x     V P                   P                  V4      pW,          #   \         d
    \        u # i ; ir   r   r,   r   r3   r-   s   &&r   __rtruediv__ExtensionElement.__rtruediv__   9    	"a A u  	"!!	"   % 99c                    V P                  V4      pVf   \        # \        W P                  4      p VP	                  4        V P                  P                  #   \
         d    \        T  RT 24      hi ; i)Nz % )r/   r3   r'   r   rJ   r   rV   zeror4   s   && r   __mod__ExtensionElement.__mod__   sl    jjm;!!C	2KKM
 uuzz	  	2#qcQCL11	2s   A A4c                x     V P                   P                  V4      pW,          #   \         d
    \        u # i ; ir   r[   r-   s   &&r   __rmod__ExtensionElement.__rmod__   r^   r_   c                   \        V\        4      '       g   \        R 4      hV^ 8  d    V P                  4       V) rV P                  pV P                  P                  pV P                  P                  P                  pV^ 8  d9   V^,          '       d   WB,          V,          pW",          V,          pV^,          pK?  \        W@P                  4      #   \         d    \        R4      hi ; i)zexponent of type 'int' expectedznegative powers are not defined)r+   int	TypeErrorrS   rH   
ValueErrorr   r   r?   rP   r'   )r   nbmrs   &&   r   __pow__ExtensionElement.__pow__   s    !S!!=>>q5Dyy{QB1 EEEEIIEEIIMM!e1uuSAI	A!GAq%%   ' D !BCCDs   C C)c                    \        V\        4      '       d;   V P                  VP                  8H  ;'       d    V P                  VP                  8H  # \        # r   )r+   r'   r   r   r3   r-   s   &&r   __eq__ExtensionElement.__eq__   s;    a!!55AEE>44aeequun4!!r   c                    W8X  * # r   r#   r-   s   &&r   __ne__ExtensionElement.__ne__   s
    zr   c                D    \        V P                  V P                  34      # r   )hashr   r   r   s   &r   __hash__ExtensionElement.__hash__   s    QUUAEEN##r   c                :    ^ RI Hp V! V P                  4       4      # )    )sstr)sympy.printing.strr}   r   )r   r}   s   & r   __str__ExtensionElement.__str__   s    +AIIK  r   c                .    V P                   P                  # r   )r   rD   r   s   &r   rD   ExtensionElement.is_ground   s    uur   c                >    V P                   P                  4       w  pV# r   )r   to_list)r   cs   & r   	to_groundExtensionElement.to_ground   s    eemmor   )r   r   Nr   )&__name__
__module____qualname____firstlineno____doc__	__slots__r   r   r   r    r$   r(   r/   r5   __radd__r9   r<   r@   __rmul__rJ   rS   rX   __floordiv__r\   __rfloordiv__rb   re   ro   rr   ru   ry   r   __repr__propertyrD   r   __static_attributes____classdictcell____classdict__s   @r   r
   r
      s     	 I!&" H""" H+"&( L !M!("$! H  r   r
   c                      a  ] tR t^t o RtRt]tR tR t	R t
R tR t]t]R 4       tR	 tRR ltR tR tR tR tR tR tR tR tR tRtV tR
# )MonogenicFiniteExtensional  
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                  a a \        V\        4      '       d   VP                  '       g   \        R 4      hVP	                  RR7      pVP                  4       S n        VS n        VP                  S n	        VP                  ;S n
        pVP                  ! VP                  !  S n        S P                  S P                  P                  4      S n        S P                  S P                  P                   4      S n        S P                  P                  ^ ,          oS P                  P"                  ^ ,          S n        S P                  S4      S n        \(        ;QJ d+    . VV 3R l\+        S P                  4       4       F  NK  	  5M$! VV 3R l\+        S P                  4       4       4      S n        S P                  P.                  S n        R# )z!modulus must be a univariate PolyF)autoc              3   T   <"   T F  pSP                  SV,          4      x  K  	  R # 5ir   r,   ).0igenr   s   & r   	<genexpr>4MonogenicFiniteExtension.__init__.<locals>.<genexpr>  s#     J9IA4<<Q//9Is   %(N)r+   r   is_univariateri   monicdegreerankmodulusr   r?   rE   old_poly_ringgensrN   r,   ra   rP   symbolssymbol	generatortuplerangebasisrC   )r   r?   domr   s   f& @r   r   !MonogenicFiniteExtension.__init__  s+   3%%#*;*;*;?@@ iiUi#JJL	77JJ&c%%sxx0	LL0	<<		.iinnQii''*c*UJtyy9IJUUJtyy9IJJ
 ,,r   c                p    V P                   P                  V4      p\        W P                  ,          V 4      # r   rN   r,   r'   r?   )r   argr   s   && r   newMonogenicFiniteExtension.new$  s)    ii$sXX~t,,r   c                d    \        V\        4      '       g   R # V P                  VP                  8H  # F)r+   FiniteExtensionr   )r   others   &&r   rr   MonogenicFiniteExtension.__eq__(  s%    %11||u}},,r   c                X    \        V P                  P                  V P                  34      # r   )rx   	__class__r   r   r   s   &r   ry   !MonogenicFiniteExtension.__hash__-  s     T^^,,dll;<<r   c                Z    V P                   : R V P                  P                  4       : R2# )z/())rN   r   r   r   s   &r   r    MonogenicFiniteExtension.__str__0  s     IIt||';';'=>>r   c                .    V P                   P                  # r   )rE   has_CharacteristicZeror   s   &r   r   /MonogenicFiniteExtension.has_CharacteristicZero5  s    {{111r   c                6    V P                   P                  4       # r   )rE   characteristicr   s   &r   r   'MonogenicFiniteExtension.characteristic9  s    {{))++r   Nc                p    V P                   P                  W4      p\        W0P                  ,          V 4      # r   r   r   r   baser   s   &&& r   r,    MonogenicFiniteExtension.convert<  )    ii(sXX~t,,r   c                p    V P                   P                  W4      p\        W0P                  ,          V 4      # r   r   r   s   &&& r   convert_from%MonogenicFiniteExtension.convert_from@  r   r   c                L    V P                   P                  VP                  4      # r   )rN   r   r   r   r   s   &&r   r   !MonogenicFiniteExtension.to_sympyD  s    yy!!!%%((r   c                $    V P                  V4      # r   r   r   s   &&r   
from_sympy#MonogenicFiniteExtension.from_sympyG  s    ||Ar   c                Z    V P                   P                  V4      pV P                  V4      # r   )r   
set_domainr   )r   Kr?   s   && r   r   #MonogenicFiniteExtension.set_domainJ  s%    ll%%a(~~c""r   c                    V P                   V9   d   \        R 4      hV P                  P                  ! V!  pV P	                  V4      # )z+Can not drop generator from FiniteExtension)r   r   rE   dropr   )r   r   r   s   &* r   r   MonogenicFiniteExtension.dropN  s=    ;;'!!"OPPKKg&q!!r   c                $    V P                  W4      # r   )rO   )r   r   r.   s   &&&r   quoMonogenicFiniteExtension.quoT  s    zz!r   c                    V P                   P                  VP                  VP                  4      p\        W0P                  ,          V 4      # r   )rN   rO   r   r'   r?   )r   r   r.   r   s   &&& r   rO   MonogenicFiniteExtension.exquoW  s1    iiooaeeQUU+sXX~t,,r   c                    R # r   r#   r   as   &&r   is_negative$MonogenicFiniteExtension.is_negative[  s    r   c                    V P                   '       d   \        V4      # VP                  '       d*   V P                  P	                  VP                  4       4      # R # r   )rC   r   rD   rE   rF   r   r   s   &&r   rF    MonogenicFiniteExtension.is_unit^  s=    ===7N[[[;;&&q{{}55 r   )r   rE   r   rC   r?   r   rP   r   rN   r   ra   r   )r   r   r   r   r   is_FiniteExtensionr
   dtyper   r   rr   ry   r   r   r   r   r   r,   r   r   r   r   r   r   rO   r   rF   r   r   r   s   @r   r   r      s     'P E-8--
=? H2 2,--)#" -6 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6v G6R +r   