
    \h]                        S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  S
SKJrJr  S
SKJr  S
SKJrJr  S
SKJrJr  S r " S S\5      rS r\S 5       rSS jr S r!S r"S r#S r$\SS j5       r%g)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                     SnSnU R                  5       (       d  SnO/U R                  5       (       d  SnOU R                  5       (       d  SnUb  [        X-   5      eg)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      W/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/numberfields/primes.py*_check_formal_conditions_for_maximal_orderr      sc     DFD--//8((**/((**MV]++     c                       \ rS rSrSrSS jrS r\S 5       rSS jr	S 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Srg)
PrimeIdeal)   z0
A prime ideal in a ring of algebraic integers.
Nc                     [        U5        Xl        X l        X0l        X@l        SU l        Ub  XPl        gU R                  X!-  5      U l        g)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                     U R                   (       a  SU R                   S3$ SU R                   SU R                  R                  5        S3$ )N(), )is_inertr"   r#   as_exprr(   s    r   __str__PrimeIdeal.__str__H   sB    ==tvvha= 466("TZZ//12!44r   c                 H    U R                   U R                  R                  :H  $ )z^
Say whether the rational prime we divide is inert, i.e. stays prime in
our ring of integers.
)r$   r!   nr1   s    r   r/   PrimeIdeal.is_inertM   s     vv""r   c                    U=(       d*    U R                   R                  R                  R                  nU R                  U R
                  U R                  U R                  4u  p4pV[        UR                  US9R                  5       5      nUR                  S:  a  SU SUR                   3nSU SU S3nU(       a  U$ SU SU S	U S
3$ )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   r,   z)/r.   r-   z[ z e=z, f=z ])r!   parentTgenr"   r#   r'   r$   str	numeratorr0   denom)	r(   	field_gen	just_gensr"   r#   r'   r$   	alpha_repgenss	            r   reprPrimeIdeal.reprU   s    B 5!1!1!5!5	TVVTVV;!)4<<>?	;;?I;b6I1#R	{!$KD6QCtA3b))r   c                 "    U R                  5       $ N)rC   r1   s    r   __repr__PrimeIdeal.__repr__   s    yy{r   c                     U R                   U R                  -  U R                  U R                  -  -   nSUl        SUl        U$ )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                 z    [        U[        5      (       a!  U R                  5       UR                  5       :H  $ [        $ rF   )
isinstancer   rM   NotImplementedr(   others     r   __eq__PrimeIdeal.__eq__   s2    eZ(($$&%*<*<*>>>r   c                 (    U R                  5       U-   $ )zt
Convert to a :py:class:`~.Submodule` and add to another
:py:class:`~.Submodule`.

See Also
========

as_submodule

rM   rR   s     r   __add__PrimeIdeal.__add__          "U**r   c                 (    U R                  5       U-  $ )z
Convert to a :py:class:`~.Submodule` and multiply by another
:py:class:`~.Submodule` or a rational number.

See Also
========

as_submodule

rW   rR   s     r   __mul__PrimeIdeal.__mul__   rZ   r   c                     U R                   $ rF   )r!   r1   s    r   _zeroth_powerPrimeIdeal._zeroth_power   s    wwr   c                     U $ rF    r1   s    r   _first_powerPrimeIdeal._first_power   s    r   c                     U R                   c1  [        U R                  U R                  /U R                  5      U l         U R                   $ )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!   r1   s    r   test_factorPrimeIdeal.test_factor   s;      $ 4TVVdjj\477 SD   r   c                     [        X5      $ )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                 @    U R                  5       R                  U5      $ )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

)rM   reduce_element)r(   elts     r   rn   PrimeIdeal.reduce_element  s    2   "11#66r   c                     U R                   R                  R                  U5      nU R                  U5      nUR	                  5       $ )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!   r9   element_from_ANPrn   to_ANPr(   aro   reds       r   
reduce_ANPPrimeIdeal.reduce_ANP*  s8    2 ggnn--a0!!#&zz|r   c                     U R                   R                  R                  U5      nU R                  U5      nUR	                  [        [        UR                  R                  5       5      5      5      $ )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!   r9   element_from_alg_numrn   field_elementlistreversedQQ_colflatrt   s       r   reduce_alg_numPrimeIdeal.reduce_alg_numG  sP    2 ggnn11!4!!#&tHSZZ__->$?@AAr   )r!   r%   r#   r'   r$   r"   rF   )NF)__name__
__module____qualname____firstlineno____doc__r)   r2   propertyr/   rC   rG   rM   rT   rX   __radd__r\   __rmul__r_   rc   rg   r&   rn   rw   r   __static_attributes__rb   r   r   r   r   )   sx    @45
 # #)*V;z
+ H+ H!(($76:Br   r   c                    [        U5        UR                  5       nU Vs/ s H   oCR                  U5      R                  U S9PM"     nn[        R
                  " SUR                  4[        U 5      5      R                  " U6 nUR                  5       SSS24   R                  5       nUR                  UR                  UR                  [        5      -  UR                  S9nU$ s  snf )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.)

modulusr   Nr>   )r   endomorphism_ringinner_endomorphismmatrixr   zerosr5   r   vstack	nullspace	transposer9   
convert_tor   r>   )	r"   rB   r!   EgmatricesBr8   betas	            r   rf   rf   e  s    < /r2
ACGH4a$$Q'..q.94HHArtt9be,33X>A 	
ad%%'A99RYYb!119BDK Is   'C#c                 b   UR                   UR                  p2UR                  UR                  UR                  penUR                  [        5      R                  5       U R                  -  U-  U R                  -  nUR                  [        5      nUR                  5       nX-  S:w  a  gUR                  5       n	Xd-  UR                  5       -  n
X-  S:H  nSn XW-  n[        U5       HW  nUR                  USS2U4   US9nX-  nUR                  U5      R                  5       n[        U5       H  nX   XU4'   M     MY     XtS-
  US-
  4   R                  U-  S:w  a   U$ Xr-  nU(       a   UR                  [        5      nOUR                  [        5      nUS-  nM  ! [          a     U$ f = f)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   Nr   r   )r"   r!   r5   r   r>   r   r   invr   detrg   ranger9   	representr   elementr   )rk   Pr"   r!   r5   WdADr   r$   need_complete_testvjcis                   r   rj   rj     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7 , " 
 Hs   .F   
F.-F.Nc                 8  ^ [        U5        UR                  nUR                  n[        U4S jU  5       5      (       a  UR	                  5       $ Uc;  Ub  TU-  nO2[        UR                  U 5      R                  R                  5       5      nUR                  5       nUSS  Vs/ s H  nTU-  PM
     n	nX-  n	[        [        U	5      S5      n
U
 HB  n[        S [        X5       5       5      nUR                  U5      U-  nUT-  S:w  d  M=  UT-  s  $    gs  snf )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   J   >#    U  H  oT-  R                  S 5      v   M     g7f)r   N)equiv).0r   r"   s     r   	<genexpr>_two_elt_rep.<locals>.<genexpr>  s     
*TE==Ts    #Nr   c              3   .   #    U  H  u  pX-  v   M     g 7frF   rb   )r   cibetais      r   r   r   '  s     ;lBHls   r   )r   r9   r:   allzeroabssubmodule_from_gensr   r   basis_element_pullbacksr   lensumzipnorm)rB   r!   r"   r$   Nppbr:   omegaomr   searchr   r#   r5   s     `           r   _two_elt_repr     s   P /r2	B
A 
*T
***wwy	z=ABR++D188<<>?B&&(E 9%9RAbD9D%LD#d)Q'F;c!l;; JJqMRq5A:19  &s   $Dc                    UR                   R                  n[        X S9nUR                  5       u  pE[	        U5      S:X  a=  US   S   S:X  a1  [        XUR                   R                  5       UR                  S5      /$ U VVs/ s HF  u  pg[        XUR                   R                  [        U[        S95      UR                  5       U5      PMH     snn$ s  snnf )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   r   r   domain)r9   r:   r   factor_listr   r   r   r5   element_from_polyr   degree)r"   r!   r:   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                 2  ^ U R                   nUR                  u  pEUS:X  a  UR                  U[        5      nO,UR	                  UR                  U[        5      SS2S4   5      nUR                  S   U:  a6  [        UR                  [        T5      5      5      R                  [        5      nUR                  U5      nUR                  5         UR                  U5      n[        UU4S j5      nUR                  TS9n	U	R                  5       (       d   eX4$ )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).

r   Nr   c                    > U T-  U -
  $ rF   rb   )r8   r"   s    r   <lambda>._prime_decomp_compute_kernel.<locals>.<lambda>s  s    !Q$(r   r   )r   shapeeyer   hstackr   r   r   submodule_from_matrixcompute_mult_tabdiscard_beforer   kernelr   )
rk   r"   r!   r   r5   rr   GphiNs
    `        r   _prime_decomp_compute_kernelr   D  s    2 	
A77DA 	AvEE!RLHHQUU1b\!Q$'(wwqzA~!!,,r!u"56AA"E
  #A
 	A
Q 2
3C

1
A    4Kr   c                 .   U R                   R                  u  p4X4-
  nUR                   U R                   -  n[        UR                  S   5       Vs/ s H#  orR                  USS2U4   UR                  S9PM%     nn[        XXS9n	[        X!X5      $ s  snf )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   Nr   )r$   )r   r   r   r9   r>   r   r   )
rk   r"   r!   mr5   r$   r   r   rB   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                   ^^ U R                   U:X  a  UR                   UL a  UR                   UL d   eU" S5      R                  5       nUR                  UL d   e/ m[        U[	        U5      TS9nUR                  5       u  pxUS   S   n	UR                  U	5      n
U	R                  U
5      u  pnUS:X  d   e[        [        [        X-  [        S9R                  R                  5       5      5      m[        UU4S j[        [!        T5      5       5       5      nSU-
  nX/n/ nU H  nUR                  5       nUR                  UL d   eU R"                  R%                  [	        U5      5      R&                  " UR)                  5        Vs/ s H  nUU-  R+                  [	        U5      S9PM      sn6 nUR-                  5       R%                  [        5      nUR/                  U5      nUR1                  U5        M     U$ s  snf )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``.
r   )powersr   r   c              3   :   >#    U  H  nTU   TU   -  v   M     g 7frF   rb   )r   r   r   alpha_powerss     r   r   ,_prime_decomp_split_ideal.<locals>.<genexpr>  s     ;]qtLO#]s   )r9   	to_parentmoduler   r   r   quogcdexr|   r}   r   r   repto_listr   r   r   r   r   r   basis_elementscolumncolumnspacer   append)rk   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   	%G=
c                 F   Uc  Uc  [        S5      eUb  [        U5        Uc  UR                  R                  n0 nUb  Uc  [	        XS9u  p#UR                  5       nXc-  nXp-  S:w  a  [        X5      $ U=(       d#    UR                  U 5      =(       d    [        X 5      nU/n/ n	U(       av  UR                  5       n
[        XU5      u  pUR                  S:X  a  [        XU5      nU	R                  U5        O![        XXU5      u  pUR                  X/5        U(       a  Mv  U	$ )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.)radicalsr   r   )
ValueErrorr   r9   r:   r   discriminantr   getr   popr   r5   r   r   r   extend)r"   r:   r!   dKradicalr   dT	f_squaredstackprimesrk   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a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   rf   rj   r   r   r   r   r   r  rb   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   