+
    i]                        R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^R	IHtHt ^R
IHt ^RIHtHt ^RIHtHt R t ! R R]4      tR t]R 4       tRR lt R t!R t"R t#R t$]RR l4       t%R# )zPrime ideals in number fields. )Poly)FF)QQ)ZZ)DomainMatrix)CoercionFailed)IntegerPowerable)public)	round_twonilradical_mod_p)StructureError)ModuleEndomorphismfind_min_poly)coeff_searchsupplement_a_subspacec                    RpRpV P                  4       '       g   RpM1V P                  4       '       g   RpMV P                  4       '       g   RpVe   \        W,           4      hR# )a  
Several functions in this module accept an argument which is to be a
:py:class:`~.Submodule` representing the maximal order in a number field,
such as returned by the :py:func:`~sympy.polys.numberfields.basis.round_two`
algorithm.

We do not attempt to check that the given ``Submodule`` actually represents
a maximal order, but we do check a basic set of formal conditions that the
``Submodule`` must satisfy, at a minimum. The purpose is to catch an
obviously ill-formed argument.
z4The submodule representing the maximal order should Nz'be a direct submodule of a power basis.zhave 1 as its first generator.z<have square matrix, of maximal rank, in Hermite Normal Form.)is_power_basis_submodulestarts_with_unityis_sq_maxrank_HNFr   )	submoduleprefixconds   &  /Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/polys/numberfields/primes.py*_check_formal_conditions_for_maximal_orderr      sc     DFD--//8((**/((**MV]++     c                      a  ] tR t^)t o RtRR ltR t]R 4       tRR lt	R 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RtV tR# )
PrimeIdealz0
A prime ideal in a ring of algebraic integers.
Nc                    \        V4       Wn        W n        W0n        W@n        RV n        Ve	   WPn        R# V P                  W!,          4      V n        R# )a  
Parameters
==========

ZK : :py:class:`~.Submodule`
    The maximal order where this ideal lives.
p : int
    The rational prime this ideal divides.
alpha : :py:class:`~.PowerBasisElement`
    Such that the ideal is equal to ``p*ZK + alpha*ZK``.
f : int
    The inertia degree.
e : int, ``None``, optional
    The ramification index, if already known. If ``None``, we will
    compute it here.

N)r   ZKpalphaf_test_factor	valuatione)selfr   r   r    r!   r$   s   &&&&&&r   __init__PrimeIdeal.__init__.   sB    $ 	326
 m)?r   c                    V P                   '       d   R V P                   R2# R V P                   RV P                  P                  4        R2# )(), )is_inertr   r    as_exprr%   s   &r   __str__PrimeIdeal.__str__H   sD    ===tvvha= 466("TZZ//12!44r   c                H    V P                   V P                  P                  8H  # )z^
Say whether the rational prime we divide is inert, i.e. stays prime in
our ring of integers.
)r!   r   nr.   s   &r   r,   PrimeIdeal.is_inertM   s     vv""r   c                   T;'       g+    V P                   P                  P                  P                  pV P                  V P
                  V P                  V P                  3w  r4rV\        VP                  VR7      P                  4       4      pVP                  ^8  d   RV RVP                   2pRV RV R2pV'       d   V# RV RV RV R	2# )
a2  
Print a representation of this prime ideal.

Examples
========

>>> from sympy import cyclotomic_poly, QQ
>>> from sympy.abc import x, zeta
>>> T = cyclotomic_poly(7, x)
>>> K = QQ.algebraic_field((T, zeta))
>>> P = K.primes_above(11)
>>> print(P[0].repr())
[ (11, x**3 + 5*x**2 + 4*x - 1) e=1, f=3 ]
>>> print(P[0].repr(field_gen=zeta))
[ (11, zeta**3 + 5*zeta**2 + 4*zeta - 1) e=1, f=3 ]
>>> print(P[0].repr(field_gen=zeta, just_gens=True))
(11, zeta**3 + 5*zeta**2 + 4*zeta - 1)

Parameters
==========

field_gen : :py:class:`~.Symbol`, ``None``, optional (default=None)
    The symbol to use for the generator of the field. This will appear
    in our representation of ``self.alpha``. If ``None``, we use the
    variable of the defining polynomial of ``self.ZK``.
just_gens : bool, optional (default=False)
    If ``True``, just print the "(p, alpha)" part, showing "just the
    generators" of the prime ideal. Otherwise, print a string of the
    form "[ (p, alpha) e=..., f=... ]", giving the ramification index
    and inertia degree, along with the generators.

)xr)   z)/r+   r*   z[ z e=z, f=z ])r   parentTgenr   r    r$   r!   str	numeratorr-   denom)	r%   	field_gen	just_gensr   r    r$   r!   	alpha_repgenss	   &&&      r   reprPrimeIdeal.reprU   s    B 55!1!1!5!5	TVVTVV;!)4<<>?	;;?I;b6I1#R	{!$KD6QCtA3b))r   c                "    V P                  4       # N)r@   r.   s   &r   __repr__PrimeIdeal.__repr__   s    yy{r   c                    V P                   V P                  ,          V P                  V P                  ,          ,           pRVn        RVn        V# )a  
Represent this prime ideal as a :py:class:`~.Submodule`.

Explanation
===========

The :py:class:`~.PrimeIdeal` class serves to bundle information about
a prime ideal, such as its inertia degree, ramification index, and
two-generator representation, as well as to offer helpful methods like
:py:meth:`~.PrimeIdeal.valuation` and
:py:meth:`~.PrimeIdeal.test_factor`.

However, in order to be added and multiplied by other ideals or
rational numbers, it must first be converted into a
:py:class:`~.Submodule`, which is a class that supports these
operations.

In many cases, the user need not perform this conversion deliberately,
since it is automatically performed by the arithmetic operator methods
:py:meth:`~.PrimeIdeal.__add__` and :py:meth:`~.PrimeIdeal.__mul__`.

Raising a :py:class:`~.PrimeIdeal` to a non-negative integer power is
also supported.

Examples
========

>>> from sympy import Poly, cyclotomic_poly, prime_decomp
>>> T = Poly(cyclotomic_poly(7))
>>> P0 = prime_decomp(7, T)[0]
>>> print(P0**6 == 7*P0.ZK)
True

Note that, on both sides of the equation above, we had a
:py:class:`~.Submodule`. In the next equation we recall that adding
ideals yields their GCD. This time, we need a deliberate conversion
to :py:class:`~.Submodule` on the right:

>>> print(P0 + 7*P0.ZK == P0.as_submodule())
True

Returns
=======

:py:class:`~.Submodule`
    Will be equal to ``self.p * self.ZK + self.alpha * self.ZK``.

See Also
========

__add__
__mul__

FT)r   r   r    _starts_with_unity_is_sq_maxrank_HNF)r%   Ms   & r   as_submodulePrimeIdeal.as_submodule   s>    n FFTWWtzzDGG33$#r   c                |    \        V\        4      '       d"   V P                  4       VP                  4       8H  # \        # rC   )
isinstancer   rJ   NotImplementedr%   others   &&r   __eq__PrimeIdeal.__eq__   s2    eZ(($$&%*<*<*>>>r   c                0    V P                  4       V,           # )zt
Convert to a :py:class:`~.Submodule` and add to another
:py:class:`~.Submodule`.

See Also
========

as_submodule

rJ   rO   s   &&r   __add__PrimeIdeal.__add__          "U**r   c                0    V P                  4       V,          # )z
Convert to a :py:class:`~.Submodule` and multiply by another
:py:class:`~.Submodule` or a rational number.

See Also
========

as_submodule

rT   rO   s   &&r   __mul__PrimeIdeal.__mul__   rW   r   c                    V P                   # rC   )r   r.   s   &r   _zeroth_powerPrimeIdeal._zeroth_power   s    wwr   c                    V # rC    r.   s   &r   _first_powerPrimeIdeal._first_power   s    r   c                    V P                   f2   \        V P                  V P                  .V P                  4      V n         V P                   # )a  
Compute a test factor for this prime ideal.

Explanation
===========

Write $\mathfrak{p}$ for this prime ideal, $p$ for the rational prime
it divides. Then, for computing $\mathfrak{p}$-adic valuations it is
useful to have a number $\beta \in \mathbb{Z}_K$ such that
$p/\mathfrak{p} = p \mathbb{Z}_K + \beta \mathbb{Z}_K$.

Essentially, this is the same as the number $\Psi$ (or the "reagent")
from Kummer's 1847 paper (*Ueber die Zerlegung...*, Crelle vol. 35) in
which ideal divisors were invented.
)r"   _compute_test_factorr   r    r   r.   s   &r   test_factorPrimeIdeal.test_factor   s;      $ 4TVVdjj\477 SD   r   c                    \        W4      # )z
Compute the $\mathfrak{p}$-adic valuation of integral ideal I at this
prime ideal.

Parameters
==========

I : :py:class:`~.Submodule`

See Also
========

prime_valuation

)prime_valuation)r%   Is   &&r   r#   PrimeIdeal.valuation   s      q''r   c                @    V P                  4       P                  V4      # )aP  
Reduce a :py:class:`~.PowerBasisElement` to a "small representative"
modulo this prime ideal.

Parameters
==========

elt : :py:class:`~.PowerBasisElement`
    The element to be reduced.

Returns
=======

:py:class:`~.PowerBasisElement`
    The reduced element.

See Also
========

reduce_ANP
reduce_alg_num
.Submodule.reduce_element

)rJ   reduce_element)r%   elts   &&r   rk   PrimeIdeal.reduce_element  s    2   "11#66r   c                    V P                   P                  P                  V4      pV P                  V4      pVP	                  4       # )a+  
Reduce an :py:class:`~.ANP` to a "small representative" modulo this
prime ideal.

Parameters
==========

elt : :py:class:`~.ANP`
    The element to be reduced.

Returns
=======

:py:class:`~.ANP`
    The reduced element.

See Also
========

reduce_element
reduce_alg_num
.Submodule.reduce_element

)r   r6   element_from_ANPrk   to_ANPr%   arl   reds   &&  r   
reduce_ANPPrimeIdeal.reduce_ANP*  s8    2 ggnn--a0!!#&zz|r   c                    V P                   P                  P                  V4      pV P                  V4      pVP	                  \        \        VP                  P                  4       4      4      4      # )aK  
Reduce an :py:class:`~.AlgebraicNumber` to a "small representative"
modulo this prime ideal.

Parameters
==========

elt : :py:class:`~.AlgebraicNumber`
    The element to be reduced.

Returns
=======

:py:class:`~.AlgebraicNumber`
    The reduced element.

See Also
========

reduce_element
reduce_ANP
.Submodule.reduce_element

)	r   r6   element_from_alg_numrk   field_elementlistreversedQQ_colflatrq   s   &&  r   reduce_alg_numPrimeIdeal.reduce_alg_numG  sP    2 ggnn11!4!!#&tHSZZ__->$?@AAr   )r   r"   r    r$   r!   r   rC   )NF)__name__
__module____qualname____firstlineno____doc__r&   r/   propertyr,   r@   rD   rJ   rQ   rU   __radd__rY   __rmul__r\   r`   rd   r#   rk   rt   r}   __static_attributes____classdictcell__)__classdict__s   @r   r   r   )   s     @45
 # #)*V;z
+ H+ H!(($76:B Br   r   c                   \        V4       VP                  4       pV Uu. uF#  qCP                  V4      P                  V R7      NK%  	  pp\        P
                  ! ^ VP                  3\        V 4      4      P                  ! V!  pVP                  4       R,          P                  4       pVP                  VP                  VP                  \        4      ,          VP                  R7      pV# u upi )a  
Compute the test factor for a :py:class:`~.PrimeIdeal` $\mathfrak{p}$.

Parameters
==========

p : int
    The rational prime $\mathfrak{p}$ divides

gens : list of :py:class:`PowerBasisElement`
    A complete set of generators for $\mathfrak{p}$ over *ZK*, EXCEPT that
    an element equivalent to rational *p* can and should be omitted (since
    it has no effect except to waste time).

ZK : :py:class:`~.Submodule`
    The maximal order where the prime ideal $\mathfrak{p}$ lives.

Returns
=======

:py:class:`~.PowerBasisElement`

References
==========

.. [1] Cohen, H. *A Course in Computational Algebraic Number Theory.*
(See Proposition 4.8.15.)

modulusr;   )    NNN)r   endomorphism_ringinner_endomorphismmatrixr   zerosr2   r   vstack	nullspace	transposer6   
convert_tor   r;   )	r   r?   r   EgmatricesBr5   betas	   &&&      r   rc   rc   e  s    < /r2
ACGH4a$$Q'..q.94HHArtt9be,33X>A 	
d%%'A99RYYb!119BDK Is   )C-c                   VP                   VP                  r2VP                  VP                  VP                  repVP                  \        4      P                  4       V P                  ,          V,          V P                  ,          pVP                  \        4      pVP                  4       pW,          ^ 8w  d   ^ # VP                  4       p	Wd,          VP                  4       ,          p
W,          ^ 8H  p^ p WW,          p\        V4       Fd  pVP                  VRV3,          VR7      pW,          pVP                  V4      P                  4       p\        V4       F  pW,          WV3&   K  	  Kf  	  Wt^,
          V^,
          3,          P                  V,          ^ 8w  d    V# Wr,          pV'       d    VP                  \        4      pMVP                  \        4      pV^,          pK    \          d     T# i ; i)a  
Compute the *P*-adic valuation for an integral ideal *I*.

Examples
========

>>> from sympy import QQ
>>> from sympy.polys.numberfields import prime_valuation
>>> K = QQ.cyclotomic_field(5)
>>> P = K.primes_above(5)
>>> ZK = K.maximal_order()
>>> print(prime_valuation(25*ZK, P[0]))
8

Parameters
==========

I : :py:class:`~.Submodule`
    An integral ideal whose valuation is desired.

P : :py:class:`~.PrimeIdeal`
    The prime at which to compute the valuation.

Returns
=======

int

See Also
========

.PrimeIdeal.valuation

References
==========

.. [1] Cohen, H. *A Course in Computational Algebraic Number Theory.*
   (See Algorithm 4.8.17.)

r   r   )r   r   r2   r   r;   r   r   invr   detrd   ranger6   	representr|   elementr   )rh   Pr   r   r2   WdADr   r!   need_complete_testvjcis   &&              r   rg   rg     s   T CCrddBIIrxx!A	R)A-7A 	
RA	Auz==?D	!%%'A%1*	A
 EqA		!AqD'	+AIAQ$$&A1X$Q$   UAE\?""Q&!+ H E LL$
 R A	Q " 
 Hs   3G) )G87G8Nc                  a \        V4       VP                  pVP                  p\        ;QJ d    V3R lV  4       F  '       d   K   RM	  RM! V3R lV  4       4      '       d   VP	                  4       # VfA   Ve   SV,          pM2\        VP                  V 4      P                  P                  4       4      pVP                  4       pVR,           Uu. uF  pSV,          NK  	  p	pW,          p	\        \        V	4      ^4      p
V
 FO  p\        R \        W4       4       4      pVP                  V4      V,          pVS,          ^ 8w  g   KF  VS,          u # 	  R# u upi )a  
Given a set of *ZK*-generators of a prime ideal, compute a set of just two
*ZK*-generators for the same ideal, one of which is *p* itself.

Parameters
==========

gens : list of :py:class:`PowerBasisElement`
    Generators for the prime ideal over *ZK*, the ring of integers of the
    field $K$.

ZK : :py:class:`~.Submodule`
    The maximal order in $K$.

p : int
    The rational prime divided by the prime ideal.

f : int, optional
    The inertia degree of the prime ideal, if known.

Np : int, optional
    The norm $p^f$ of the prime ideal, if known.
    NOTE: There is no reason to supply both *f* and *Np*. Either one will
    save us from having to compute the norm *Np* ourselves. If both are known,
    *Np* is preferred since it saves one exponentiation.

Returns
=======

:py:class:`~.PowerBasisElement` representing a single algebraic integer
alpha such that the prime ideal is equal to ``p*ZK + alpha*ZK``.

References
==========

.. [1] Cohen, H. *A Course in Computational Algebraic Number Theory.*
(See Algorithm 4.7.10.)

c              3   R   <"   T F  qS,          P                  ^ 4      x  K  	  R# 5i)r   N)equiv).0r   r   s   & r   	<genexpr>_two_elt_rep.<locals>.<genexpr>  s     
*TE==T   $'FTN:   NNc              3   6   "   T F  w  rW,          x  K  	  R # 5irC   r_   )r   cibetais   &  r   r   r   '  s     ;lBHHls   )r   r6   r7   allzeroabssubmodule_from_gensr   r   basis_element_pullbacksr   lensumzipnorm)r?   r   r   r!   Nppbr7   omegaomr   searchr   r    r2   s   &&f&&         r   _two_elt_repr     s   P /r2	B
A s
*T
*sss
*T
***wwy	z=ABR++D188<<>?B&&(E 9%9RAbDD9D%LD#d)Q'F;c!l;; JJqMRq5A:19  &s   Ec                   VP                   P                  p\        W R7      pVP                  4       w  rE\	        V4      ^8X  dG   V^ ,          ^,          ^8X  d2   \        WVP                   P                  4       VP                  ^4      .# V UUu. uFI  w  rg\        WVP                   P                  \        V\        R7      4      VP                  4       V4      NKK  	  upp# u uppi )a'  
Compute the decomposition of rational prime *p* in the ring of integers
*ZK* (given as a :py:class:`~.Submodule`), in the "easy case", i.e. the
case where *p* does not divide the index of $\theta$ in *ZK*, where
$\theta$ is the generator of the ``PowerBasis`` of which *ZK* is a
``Submodule``.
r   domain)r6   r7   r   factor_listr   r   r   r2   element_from_polyr   degree)r   r   r7   T_barlcfltr$   s   &&      r   _prime_decomp_easy_caser   1  s     			AE FB
2w!|1aA2")).."2BDD!<==   ryy224"3EFxxz1&   s   AC#c                F  a V P                   pVP                  w  rEV^ 8X  d   VP                  V\        4      pM,VP	                  VP                  V\        4      R,          4      pVP                  ^,          V8  d7   \        VP                  \        S4      4      4      P                  \        4      pVP                  V4      pVP                  4        VP                  V4      p\        VV3R l4      pVP                  SR7      p	V	P                  4       '       g   Q hW3# )a  
Parameters
==========

I : :py:class:`~.Module`
    An ideal of ``ZK/pZK``.
p : int
    The rational prime being factored.
ZK : :py:class:`~.Submodule`
    The maximal order.

Returns
=======

Pair ``(N, G)``, where:

    ``N`` is a :py:class:`~.Module` representing the kernel of the map
    ``a |--> a**p - a`` on ``(O/pO)/I``, guaranteed to be a module with
    unity.

    ``G`` is a :py:class:`~.Module` representing a basis for the separable
    algebra ``A = O/I`` (see Cohen).

c                 $   < V S,          V ,
          # rC   r_   )r5   r   s   &r   <lambda>._prime_decomp_compute_kernel.<locals>.<lambda>s  s    !Q$(r   r   )r   r   )r   shapeeyer   hstackr   r   r   submodule_from_matrixcompute_mult_tabdiscard_beforer   kernelr   )
rh   r   r   r   r2   rr   GphiNs
   &f&       r   _prime_decomp_compute_kernelr   D  s    2 	
A77DA 	AvEE!RLHHQUU1b\$'(wwqzA~!!,,r!u"56AA"E
  #A
 	A
Q 2
3C

1
A    4Kr   c                T   V P                   P                  w  r4W4,
          pVP                   V P                   ,          p\        VP                  ^,          4       Uu. uF(  qrP                  VRV3,          VP                  R7      NK*  	  pp\        WWR7      p	\        W!W4      # u upi )a}  
We have reached the case where we have a maximal (hence prime) ideal *I*,
which we know because the quotient ``O/I`` is a field.

Parameters
==========

I : :py:class:`~.Module`
    An ideal of ``O/pO``.
p : int
    The rational prime being factored.
ZK : :py:class:`~.Submodule`
    The maximal order.

Returns
=======

:py:class:`~.PrimeIdeal` instance representing this prime

r   r   )r!   )r   r   r   r6   r;   r   r   )
rh   r   r   mr2   r!   r   r   r?   r    s
   &&&       r   _prime_decomp_maximal_idealr   y  s    * 88>>DA	A
		AHHA8=aggaj8IJ8I1IIa1gRXXI.8IDJ1*EbU&& Ks   .B%c                J  aa V P                   V8X  d!   VP                   VJ d   VP                   VJ g   Q hV! ^4      P                  4       pVP                  VJ g   Q h. o\        V\	        V4      SR7      pVP                  4       w  rxV^ ,          ^ ,          p	VP                  V	4      p
V	P                  V
4      w  rpV^8X  g   Q h\        \        \        W,          \        R7      P                  P                  4       4      4      o\        VV3R l\        \!        S4      4       4       4      p^V,
          pW.p. pV F  pVP                  4       pVP                  VJ g   Q hV P"                  P%                  \	        V4      4      P&                  ! VP)                  4        Uu. uF%  pVV,          P+                  \	        V4      R7      NK'  	  up!  pVP-                  4       P%                  \        4      pVP/                  V4      pVP1                  V4       K  	  V# u upi )z
Perform the step in the prime decomposition algorithm where we have determined
the quotient ``ZK/I`` is _not_ a field, and we want to perform a non-trivial
factorization of *I* by locating an idempotent element of ``ZK/I``.
)powersr   c              3   R   <"   T F  pSV,          SV,          ,          x  K  	  R # 5irC   r_   )r   r   r   alpha_powerss   & r   r   ,_prime_decomp_split_ideal.<locals>.<genexpr>  s!     ;]qtLO##]r   )r6   	to_parentmoduler   r   r   quogcdexry   rz   r   r   repto_listr   r   r   r   r   r   basis_elementscolumncolumnspacer   append)rh   r   r   r   r   r    r   r   r   m1m2UVr   eps1eps2idempsfactorsepsr$   r   r   r   Hr   r   s   &&&&&                   @@r   _prime_decomp_split_idealr     s    88r>ahh"nQ>>
 aDNNE<<1LeRU<8A ]]_FB	AqB	
rBhhrlGA!6M6Xd16"-1199;<=A;U3q6];;Dt8D\FGMMOxx2~~HH1&--464E4E4G0
4GbQVOO2a5O)4G0
  MMO&&r*$$Q'q  N0
s   %+H 
c                f   Vf   Vf   \        R4      hVe   \        V4       Vf   VP                  P                  p/ pVe   Vf   \	        WR7      w  r#VP                  4       pWc,          pWp,          ^ 8w  d   \        W4      # T;'       g%    VP                  V 4      ;'       g    \        W 4      pV.p. p	V'       dr   VP                  4       p
\        WV4      w  rVP                  ^8X  d    \        WV4      pV	P                  V4       KV  \        WWV4      w  rVP                  W.4       Ky  V	# )a  
Compute the decomposition of rational prime *p* in a number field.

Explanation
===========

Ordinarily this should be accessed through the
:py:meth:`~.AlgebraicField.primes_above` method of an
:py:class:`~.AlgebraicField`.

Examples
========

>>> from sympy import Poly, QQ
>>> from sympy.abc import x, theta
>>> T = Poly(x ** 3 + x ** 2 - 2 * x + 8)
>>> K = QQ.algebraic_field((T, theta))
>>> print(K.primes_above(2))
[[ (2, x**2 + 1) e=1, f=1 ], [ (2, (x**2 + 3*x + 2)/2) e=1, f=1 ],
 [ (2, (3*x**2 + 3*x)/2) e=1, f=1 ]]

Parameters
==========

p : int
    The rational prime whose decomposition is desired.

T : :py:class:`~.Poly`, optional
    Monic irreducible polynomial defining the number field $K$ in which to
    factor. NOTE: at least one of *T* or *ZK* must be provided.

ZK : :py:class:`~.Submodule`, optional
    The maximal order for $K$, if already known.
    NOTE: at least one of *T* or *ZK* must be provided.

dK : int, optional
    The discriminant of the field $K$, if already known.

radical : :py:class:`~.Submodule`, optional
    The nilradical mod *p* in the integers of $K$, if already known.

Returns
=======

List of :py:class:`~.PrimeIdeal` instances.

References
==========

.. [1] Cohen, H. *A Course in Computational Algebraic Number Theory.*
   (See Algorithm 6.2.9.)

z)At least one of T or ZK must be provided.)radicals)
ValueErrorr   r6   r7   r
   discriminantr   getr   popr   r2   r   r   r   extend)r   r7   r   dKradicalr   dT	f_squaredstackprimesrh   r   r   r   I1I2s   &&&&&           r   prime_decompr    s   n 	yRZDEE	~226yIIKKH	zRZ10	
	BI}&q--CCaCC,<R,CGIEF
IIK+A"533!8+A"5AMM!.qQ2>FBLL""Mr   )NN)NNNN)&r   sympy.polys.polytoolsr   sympy.polys.domains.finitefieldr   !sympy.polys.domains.rationalfieldr   sympy.polys.domains.integerringr   !sympy.polys.matrices.domainmatrixr   sympy.polys.polyerrorsr   sympy.polys.polyutilsr   sympy.utilities.decoratorr	   basisr
   r   
exceptionsr   modulesr   r   	utilitiesr   r   r   r   rc   rg   r   r   r   r   r   r  r_   r   r   <module>r     s    % & . 0 . : 1 2 , . & 6 :,0yB! yBx	+\ U UpBJ&2j':'T O Or   