
    \hy                      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Jr  SSKJrJrJr  SS	KJrJrJrJr  SS
KJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8  SSK9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrR  SSKSJTrTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrb  SSKcJdrdJereJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrm  SSKnJoroJprpJqrqJrrrJsrsJtrtJuru  SSKvJwrwJxrxJyryJzrz  SSK{J|r|J}r}J~r~JrJrJrJrJrJrJrJr  SSKJrJr  \S:X  a  SSKrS rOSrS r " S S\
5      r " S S\5      r " S S\5      rS r " S S\\
5      rS r " S  S!\
5      rg)"z1OO layer for several polynomial representations.     )annotations)GROUND_TYPES)sympy_deprecation_warning)oo)CantSympify)PicklableWithSlots_sort_factors)DomainZZQQ)CoercionFailedExactQuotientFailedDomainErrorNotInvertible)!ninfdmp_validate
dup_normal
dmp_normaldup_convertdmp_convertdmp_from_sympy	dup_stripdmp_degree_indmp_degree_listdmp_negative_pdmp_ground_LCdmp_ground_TCdmp_ground_nthdmp_one
dmp_grounddmp_zero
dmp_zero_p	dmp_one_pdmp_ground_pdup_from_dictdmp_from_dictdmp_to_dictdmp_deflate
dmp_inject	dmp_ejectdmp_terms_gcddmp_list_termsdmp_exclude	dup_slicedmp_slice_indmp_permutedmp_to_tuple)dmp_add_grounddmp_sub_grounddmp_mul_grounddmp_quo_grounddmp_exquo_grounddmp_absdmp_negdmp_adddmp_subdmp_muldmp_sqrdmp_powdmp_pdivdmp_premdmp_pquo
dmp_pexquodmp_divdmp_remdmp_quo	dmp_exquodmp_add_muldmp_sub_muldmp_max_normdmp_l1_normdmp_l2_norm_squared)dmp_clear_denomsdmp_integrate_indmp_diff_indmp_eval_in
dup_revertdmp_ground_truncdmp_ground_contentdmp_ground_primitivedmp_ground_monicdmp_composedup_decompose	dup_shift	dmp_shiftdup_transformdmp_lift)
dup_half_gcdex	dup_gcdex
dup_invertdmp_subresultantsdmp_resultantdmp_discriminantdmp_inner_gcddmp_gcddmp_lcm
dmp_cancel)dup_gff_listdmp_norm	dmp_sqf_pdmp_sqf_normdmp_sqf_partdmp_sqf_listdmp_sqf_list_include)dup_cyclotomic_pdmp_irreducible_pdmp_factor_listdmp_factor_list_include)dup_isolate_real_roots_sqfdup_isolate_real_rootsdup_isolate_all_roots_sqfdup_isolate_all_rootsdup_refine_real_rootdup_count_real_rootsdup_count_complex_roots	dup_sturmdup_cauchy_upper_bounddup_cauchy_lower_bounddup_mignotte_sep_bound_squared)UnificationFailedPolynomialErrorflintNc                    U R                   =(       d2    U R                  =(       d    U R                  =(       a    U R                  $ N)is_ZZis_QQis_FF	_is_flintDs    O/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/polyclasses.py_supported_flint_domainr      s'    ww<!''<QWW%<<    c                    gNF r   s    r   r   r      s    r   c                  *   \ rS rSr% SrSrS\S'   S\S'   SS	 jr\S
 5       r	\
S 5       rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rS r\S 5       r\S 5       rS rS rS rS rS rS rSS jrSS jrS rS rS  r S! r!S" r"S# r#SS$ jr$S% r%S& r&SS' jr'SS( jr(SS) jr)SS* jr*S+ r+S, r,S- r-S. r.S/ r/S0 r0SS1 jr1SS2 jr2S3 r3S4 r4S5 r5S6 r6S7 r7S8 r8S9 r9S: r:S; r;S< r<S= r=S> r>S? r?S@ r@SA rASB rBSC rCSD rDSE rESF rFSG rGSH rHSI rISJ rJSK rKSL rLSM rMSN rNSO rOSP rPSQ rQSR rRSS rSST rTSU rUSV rVSW rWSX rXSY rYSZ rZS[ r[S\ r\S] r]SS^ jr^S_ r_S` r`Sa raSb rbSc rcSd rdSe reSf rfSg rgSh rhSi riSj rjSk rkSSl jrlSm rmSSn jrnSo roSSp jrpSq rqSr rrSs rsSt rtSu ruSv rvSw rwSx rxSy rySz rzS{ r{S| r|SS} jr}SS~ jr~S rS rS rS rS rS rS rSS jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSS jrSS jrS rS rSS jrS rS rS rS rSS jrS rSS jrSS jr\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSS jrSS jrS rS rS rS rS rSrg)DMP   )Dense Multivariate Polynomials over `K`. r   intlevr
   domNc                    Uc  [        U5      u  pO,[        U[        5      (       d  [        S[	        U5      -  5      eU R                  XU5      $ )Nzexpected list, got %s)r   
isinstancelistr   typenewclsrepr   r   s       r   __new__DMP.__new__   sH    ;#C(HCC&& !849!DEEwws%%r   c                    [         b,  US:X  a&  [        U5      (       a  [        R                  XU5      $ [        R                  XU5      $ Nr   )r|   r   	DUP_Flint_new
DMP_Pythonr   s       r   r   DMP.new   s>     ax3C88 ~~c44s--r   c                8    [        SSSS9  U R                  5       $ )z!Get the representation of ``f``. ay  
        Accessing the ``DMP.rep`` attribute is deprecated. The internal
        representation of ``DMP`` instances can now be ``DUP_Flint`` when the
        ground types are ``flint``. In this case the ``DMP`` instance does not
        have a ``rep`` attribute. Use ``DMP.to_list()`` instead. Using
        ``DMP.to_list()`` also works in previous versions of SymPy.
        z1.13zdmp-rep)deprecated_since_versionactive_deprecations_target)r   to_listfs    r   r   DMP.rep   s'     	" # &,'0		
 yy{r   c                    [         bt  [        U [        5      (       a_  U R                  S:X  aO  [	        U R
                  5      (       a5  [        R                  U R                  U R
                  U R                  5      $ U $ )zConvert to DUP_Flint if possible.

This method should be used when the domain or level is changed and it
potentially becomes possible to convert from DMP_Python to DUP_Flint.
r   )	r|   r   r   r   r   r   r   r   _repr   s    r   to_bestDMP.to_best   sW     !Z((QUUaZ<STUTYTY<Z<Z }}QVVQUUAEE::r   c                   ^^ [        T[        5      (       d   e[        U[        5      (       a  US:  d   eUU4S jmT" X5        g )Nr   c                   > [        U [        5      (       d   eUS:X  a  [        U4S jU  5       5      (       d   eg U  H  nT" X!S-
  5        M     g )Nr   c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr~   )of_type).0cr   s     r   	<genexpr>;DMP._validate_args.<locals>.validate_rep.<locals>.<genexpr>   s     73a3;;q>>3s   !   )r   r   all)r   r   rr   validate_reps      r   r   (DMP._validate_args.<locals>.validate_rep   sJ    c4((((ax7377777A !G, r   )r   r
   r   )r   r   r   r   r   s     ` @r   _validate_argsDMP._validate_args   s>    #v&&&&#s##q00	- 	Sr   c                >    [        XU5      nU R                  XU5      $ r~   )r&   r   r   r   r   r   s       r   	from_dictDMP.from_dict   s    Cc*wws%%r   c                <    U R                  [        XSU5      X25      $ )zCCreate an instance of ``cls`` given a list of native coefficients. N)r   r   r   s       r   	from_listDMP.from_list   s     ww{3T37BBr   c                :    U R                  [        XU5      X25      $ )zBCreate an instance of ``cls`` given a list of SymPy coefficients. )r   r   r   s       r   from_sympy_listDMP.from_sympy_list   s     ww~c4c??r   c           
     J    U " [        [        [        X5      5      5      XC5      $ r~   )dictr   zip)r   monomscoeffsr   r   s        r   from_monoms_coeffsDMP.from_monoms_coeffs   s    4S012C==r   c                   U R                   U:X  a  U $ U R                  (       d  [        c  U R                  U5      $ [	        U [
        5      (       a@  [        U5      (       a  U R                  U5      $ U R                  5       R                  U5      $ [	        U [        5      (       a@  [        U5      (       a  U R                  U5      R                  5       $ U R                  U5      $ [        S5      e)z0Convert ``f`` to a ``DMP`` over the new domain. zunreachable code)r   r   r|   _convertr   r   r   to_DMP_Pythonr   to_DUP_FlintRuntimeErrorr   r   s     r   convertDMP.convert   s    55C<HUUem::c?"9%%&s++zz#&(11#66:&&&s++zz#3355zz#&122r   c                    [         er~   NotImplementedErrorr   s     r   r   DMP._convert       !!r   c                ,    [        [        U5      X!5      $ r~   )r   r!   r   r   r   s      r   zeroDMP.zero   s    8C=#++r   c                ,    [        [        X5      X!5      $ r~   )r   r   r   s      r   oneDMP.one   s    73$c//r   c                    [         er~   r   r   s    r   _oneDMP._one  r   r   c                v    U R                   R                  < SU R                  5       < SU R                  < S3$ N(, ))	__class____name__r   r   r   s    r   __repr__DMP.__repr__  s#     {{33QYY[!%%HHr   c                    [        U R                  R                  U R                  5       U R                  U R
                  45      $ r~   )hashr   r   to_tupler   r   r   s    r   __hash__DMP.__hash__
  s.    Q[[))1::<FGGr   c                P    U R                  5       U R                  U R                  4$ r~   )r   r   r   selfs    r   __getnewargs__DMP.__getnewargs__  s    ||~txx11r   c                    [         ez*Construct a new ground instance of ``f``. r   r   coeffs     r   
ground_newDMP.ground_new      !!r   c                N   [        U[        5      (       a  U R                  UR                  :w  a  [        SU < SU< 35      eU R                  UR                  :w  aG  U R                  R                  UR                  5      nU R                  U5      n UR                  U5      nX4$ z7Unify and return ``DMP`` instances of ``f`` and ``g``. Cannot unify  with )r   r   r   rz   r   unifyr   r   gr   s      r   	unify_DMPDMP.unify_DMP  ss    !S!!QUUaee^#A$FGG55AEE>%%++aee$C		#A		#Atr   c                ^    [        U R                  5       U R                  U R                  US9$ )AConvert ``f`` to a dict representation with native coefficients. r   )r'   r   r   r   )r   r   s     r   to_dictDMP.to_dict   s!    199;quu4@@r   c                    U R                  US9nUR                  5        H"  u  p4U R                  R                  U5      X#'   M$     U$ )@Convert ``f`` to a dict representation with SymPy coefficients. r	  )r
  itemsr   to_sympy)r   r   r   kvs        r   to_sympy_dictDMP.to_sympy_dict$  s?    iiTi"IIKDAUU^^A&CF   
r   c                @   ^ ^ U U4S jmT" T R                  5       5      $ )@Convert ``f`` to a list representation with SymPy coefficients. c                   > / nU  H[  n[        U[        5      (       a  UR                  T" U5      5        M1  UR                  TR                  R	                  U5      5        M]     U$ r~   )r   r   appendr   r  )r   outvalr   sympify_nested_lists      r   r  .DMP.to_sympy_list.<locals>.sympify_nested_list/  sQ    Cc4((JJ2378JJquu~~c23	 
 Jr   )r   )r   r  s   `@r   to_sympy_listDMP.to_sympy_list-  s    	 #199;//r   c                    [         eAConvert ``f`` to a list representation with native coefficients. r   r   s    r   r   DMP.to_list:  r   r   c                    [         ez`
Convert ``f`` to a tuple representation with native coefficients.

This is needed for hashing.
r   r   s    r   r   DMP.to_tuple>  s
     "!r   c                T    U R                  U R                  R                  5       5      $ )zMake the ground domain a ring. )r   r   get_ringr   s    r   to_ringDMP.to_ringF  s    yy)**r   c                T    U R                  U R                  R                  5       5      $ )z Make the ground domain a field. )r   r   	get_fieldr   s    r   to_fieldDMP.to_fieldJ      yy*++r   c                T    U R                  U R                  R                  5       5      $ )zMake the ground domain exact. )r   r   	get_exactr   s    r   to_exactDMP.to_exactN  r-  r   c                x    U R                   (       d  U(       d  U R                  X5      $ U R                  XU5      $ z1Take a continuous subsequence of terms of ``f``. )r   _slice
_slice_levr   mnjs       r   slice	DMP.sliceR  s*    uuQ88A>!<<a((r   c                    [         er~   r   )r   r7  r8  s      r   r4  
DMP._sliceY  r   r   c                    [         er~   r   r6  s       r   r5  DMP._slice_lev\  r   r   c                V    U R                  US9 VVs/ s H  u  p#UPM	     snn$ s  snnf )z;Returns all non-zero coefficients from ``f`` in lex order. orderterms)r   rB  _r   s       r   r   
DMP.coeffs_  )     wwUw353tq3555   %c                V    U R                  US9 VVs/ s H  u  p#UPM	     snn$ s  snnf )z8Returns all non-zero monomials from ``f`` in lex order. rA  rC  )r   rB  r7  rE  s       r   r   
DMP.monomsc  rG  rH  c                    U R                   (       a*  SU R                  S-   -  nX R                  R                  4/$ U R	                  US9$ )4Returns all non-zero terms from ``f`` in lex order. r   r   rA  )is_zeror   r   r   _terms)r   rB  
zero_monoms      r   rD  	DMP.termsg  s@    99quuqy)J,--88%8((r   c                    [         er~   r   r   rB  s     r   rO  
DMP._termso  r   r   c                    U R                   (       a  [        S5      eU (       d  U R                  R                  /$ [	        U R                  5       5      $ )z%Returns all coefficients from ``f``. &multivariate polynomials not supported)r   r{   r   r   r   r   r   s    r   
all_coeffsDMP.all_coeffsr  s9    55!"JKKEEJJ<		$$r   c                    U R                   (       a  [        S5      eU R                  5       nUS:  a  S/$ [        U R	                  5       5       VVs/ s H
  u  p#X-
  4PM     snn$ s  snnf )z"Returns all monomials from ``f``. rV  r   rM  )r   r{   degree	enumerater   r   r8  ir   s       r   
all_monomsDMP.all_monoms|  sY    55!"JKKHHJq56M*3AIIK*@B*@$!aeX*@BBBs   A'c                
   U R                   (       a  [        S5      eU R                  5       nUS:  a  SU R                  R                  4/$ [        U R                  5       5       VVs/ s H  u  p#X-
  4U4PM     snn$ s  snnf )z Returns all terms from a ``f``. rV  r   rM  )r   r{   rZ  r   r   r[  r   r\  s       r   	all_termsDMP.all_terms  sl    55!"JKKHHJq5155::&''/8/EG/Etqquh]/EGGGs   (A?c                >    U R                  5       R                  5       $ z-Convert algebraic coefficients to rationals. )_liftr   r   s    r   liftDMP.lift  s    wwy  ""r   c                    [         er~   r   r   s    r   re  	DMP._lift  r   r   c                    [         e2Reduce degree of `f` by mapping `x_i^m` to `y_i`. r   r   s    r   deflateDMP.deflate  r   r   c                    [         e,Inject ground domain generators into ``f``. r   r   fronts     r   inject
DMP.inject  r   r   c                    [         e2Eject selected generators into the ground domain. r   r   r   rs  s      r   eject	DMP.eject  r   r   c                H    U R                  5       u  pXR                  5       4$ )a(  
Remove useless generators from ``f``.

Returns the removed generators and the new excluded ``f``.

Examples
========

>>> from sympy.polys.polyclasses import DMP
>>> from sympy.polys.domains import ZZ

>>> DMP([[[ZZ(1)]], [[ZZ(1)], [ZZ(2)]]], ZZ).exclude()
([2], DMP_Python([[1], [1, 2]], ZZ))

)_excluder   r   JFs      r   excludeDMP.exclude  s      zz|))+~r   c                    [         er~   r   r   s    r   r}  DMP._exclude  r   r   c                $    U R                  U5      $ )ay  
Returns a polynomial in `K[x_{P(1)}, ..., x_{P(n)}]`.

Examples
========

>>> from sympy.polys.polyclasses import DMP
>>> from sympy.polys.domains import ZZ

>>> DMP([[[ZZ(2)], [ZZ(1), ZZ(0)]], [[]]], ZZ).permute([1, 0, 2])
DMP_Python([[[2], []], [[1, 0], []]], ZZ)

>>> DMP([[[ZZ(2)], [ZZ(1), ZZ(0)]], [[]]], ZZ).permute([1, 2, 0])
DMP_Python([[[1], []], [[2, 0], []]], ZZ)

)_permuter   Ps     r   permuteDMP.permute  s    " zz!}r   c                    [         er~   r   r  s     r   r  DMP._permute  r   r   c                    [         ez/Remove GCD of terms from the polynomial ``f``. r   r   s    r   	terms_gcdDMP.terms_gcd  r   r   c                    [         ez)Make all coefficients in ``f`` positive. r   r   s    r   absDMP.abs  r   r   c                    [         e"Negate all coefficients in ``f``. r   r   s    r   negDMP.neg  r   r   c                V    U R                  U R                  R                  U5      5      $ z.Add an element of the ground domain to ``f``. )_add_groundr   r   r   r   s     r   
add_groundDMP.add_ground      }}QUU]]1-..r   c                V    U R                  U R                  R                  U5      5      $ z5Subtract an element of the ground domain from ``f``. )_sub_groundr   r   r  s     r   
sub_groundDMP.sub_ground  r  r   c                V    U R                  U R                  R                  U5      5      $ z5Multiply ``f`` by a an element of the ground domain. )_mul_groundr   r   r  s     r   
mul_groundDMP.mul_ground  r  r   c                V    U R                  U R                  R                  U5      5      $ z8Quotient of ``f`` by a an element of the ground domain. )_quo_groundr   r   r  s     r   
quo_groundDMP.quo_ground  r  r   c                V    U R                  U R                  R                  U5      5      $ z>Exact quotient of ``f`` by a an element of the ground domain. )_exquo_groundr   r   r  s     r   exquo_groundDMP.exquo_ground  s    quu}}Q/00r   c                J    U R                  U5      u  p#UR                  U5      $ z2Add two multivariate polynomials ``f`` and ``g``. )r  _addr   r  r  Gs       r   addDMP.add      {{1~vvayr   c                J    U R                  U5      u  p#UR                  U5      $ z7Subtract two multivariate polynomials ``f`` and ``g``. )r  _subr  s       r   subDMP.sub  r  r   c                J    U R                  U5      u  p#UR                  U5      $ z7Multiply two multivariate polynomials ``f`` and ``g``. )r  _mulr  s       r   mulDMP.mul  r  r   c                "    U R                  5       $ (Square a multivariate polynomial ``f``. )_sqrr   s    r   sqrDMP.sqr  s    vvxr   c                |    [        U[        5      (       d  [        S[        U5      -  5      eU R	                  U5      $ )+Raise ``f`` to a non-negative power ``n``. ``int`` expected, got %s)r   r   	TypeErrorr   _powr   r8  s     r   powDMP.pow  s2    !S!!6a@AAvvayr   c                J    U R                  U5      u  p#UR                  U5      $ /Polynomial pseudo-division of ``f`` and ``g``. )r  _pdivr  s       r   pdivDMP.pdiv      {{1~wwqzr   c                J    U R                  U5      u  p#UR                  U5      $ 0Polynomial pseudo-remainder of ``f`` and ``g``. )r  _premr  s       r   premDMP.prem  r  r   c                J    U R                  U5      u  p#UR                  U5      $ /Polynomial pseudo-quotient of ``f`` and ``g``. )r  _pquor  s       r   pquoDMP.pquo  r  r   c                J    U R                  U5      u  p#UR                  U5      $ 5Polynomial exact pseudo-quotient of ``f`` and ``g``. )r  _pexquor  s       r   pexquo
DMP.pexquo  s    {{1~yy|r   c                J    U R                  U5      u  p#UR                  U5      $ z7Polynomial division with remainder of ``f`` and ``g``. )r  _divr  s       r   divDMP.div   r  r   c                J    U R                  U5      u  p#UR                  U5      $ z2Computes polynomial remainder of ``f`` and ``g``. )r  _remr  s       r   remDMP.rem%  r  r   c                J    U R                  U5      u  p#UR                  U5      $ z1Computes polynomial quotient of ``f`` and ``g``. )r  _quor  s       r   quoDMP.quo*  r  r   c                J    U R                  U5      u  p#UR                  U5      $ z7Computes polynomial exact quotient of ``f`` and ``g``. )r  _exquor  s       r   exquo	DMP.exquo/  s    {{1~xx{r   c                    [         er~   r   r  s     r   r  DMP._add_ground4  r   r   c                    [         er~   r   r  s     r   r  DMP._sub_ground7  r   r   c                    [         er~   r   r  s     r   r  DMP._mul_ground:  r   r   c                    [         er~   r   r  s     r   r  DMP._quo_ground=  r   r   c                    [         er~   r   r  s     r   r  DMP._exquo_ground@  r   r   c                    [         er~   r   r   r  s     r   r  DMP._addC  r   r   c                    [         er~   r   r  s     r   r  DMP._subF  r   r   c                    [         er~   r   r  s     r   r  DMP._mulI  r   r   c                    [         er~   r   r   s    r   r  DMP._sqrL  r   r   c                    [         er~   r   r  s     r   r  DMP._powO  r   r   c                    [         er~   r   r  s     r   r  	DMP._pdivR  r   r   c                    [         er~   r   r  s     r   r  	DMP._premU  r   r   c                    [         er~   r   r  s     r   r  	DMP._pquoX  r   r   c                    [         er~   r   r  s     r   r  DMP._pexquo[  r   r   c                    [         er~   r   r  s     r   r  DMP._div^  r   r   c                    [         er~   r   r  s     r   r  DMP._rema  r   r   c                    [         er~   r   r  s     r   r  DMP._quod  r   r   c                    [         er~   r   r  s     r   r  
DMP._exquog  r   r   c                |    [        U[        5      (       d  [        S[        U5      -  5      eU R	                  U5      $ )0Returns the leading degree of ``f`` in ``x_j``. r  )r   r   r  r   _degreer   r9  s     r   rZ  
DMP.degreej  s2    !S!!6a@AAyy|r   c                    [         er~   r   r*  s     r   r)  DMP._degreeq  r   r   c                    [         ez$Returns a list of degrees of ``f``. r   r   s    r   degree_listDMP.degree_listt  r   r   c                    [         e#Returns the total degree of ``f``. r   r   s    r   total_degreeDMP.total_degreex  r   r   c                   U R                  5       n0 nU[        U R                  5       S   S   5      :H  nU R                  5        H_  n[        US   5      nXb:  a  X&-
  nOSnU(       a  US   X5S   U4-   '   M4  [	        US   5      nX==   U-  ss'   US   U[        U5      '   Ma     [        R                  X0R                  [        U5      -   U R                  5      $ )z&Return homogeneous polynomial of ``f``r   r   )r5  lenrD  sumr   tupler   r   r   r   r   )	r   stdresult
new_symboltermdr]  ls	            r   
homogenizeDMP.homogenize|  s    ^^3qwwy|A//
GGIDDGAvF)-aAw!~&aM	#'7uQx   }}VUUS_%<aeeDDr   c                    U R                   (       a  [        * $ U R                  5       n[        US   5      nU H  n[        U5      nXB:w  d  M    g   U$ )z(Returns the homogeneous order of ``f``. r   N)rN  r   r   r9  )r   r   tdegmonom_tdegs        r   homogeneous_orderDMP.homogeneous_order  sJ    993J6!9~EJE}	  r   c                    [         ez*Returns the leading coefficient of ``f``. r   r   s    r   LCDMP.LC  r   r   c                    [         e+Returns the trailing coefficient of ``f``. r   r   s    r   TCDMP.TC  r   r   c                h    [        S U 5       5      (       a  U R                  U5      $ [        S5      e)+Returns the ``n``-th coefficient of ``f``. c              3  B   #    U  H  n[        U[        5      v   M     g 7fr~   )r   r   )r   r8  s     r   r   DMP.nth.<locals>.<genexpr>  s     -1az!S!!1s   za sequence of integers expected)r   _nthr  r   Ns     r   nthDMP.nth  s-    -1---66!9=>>r   c                    [         er~   r   rX  s     r   rW  DMP._nth  r   r   c                    [         ezReturns maximum norm of ``f``. r   r   s    r   max_normDMP.max_norm  r   r   c                    [         ezReturns l1 norm of ``f``. r   r   s    r   l1_normDMP.l1_norm  r   r   c                    [         ez!Return squared l2 norm of ``f``. r   r   s    r   l2_norm_squaredDMP.l2_norm_squared  r   r   c                    [         ez0Clear denominators, but keep the ground domain. r   r   s    r   clear_denomsDMP.clear_denoms  r   r   c                    [        U[        5      (       d  [        S[        U5      -  5      e[        U[        5      (       d  [        S[        U5      -  5      eU R	                  X5      $ )EComputes the ``m``-th order indefinite integral of ``f`` in ``x_j``. r  )r   r   r  r   
_integrater   r7  r9  s      r   	integrateDMP.integrate  sU    !S!!6a@AA!S!!6a@AA||A!!r   c                    [         er~   r   rq  s      r   rp  DMP._integrate  r   r   c                    [        U[        5      (       d  [        S[        U5      -  5      e[        U[        5      (       d  [        S[        U5      -  5      eU R	                  X5      $ )<Computes the ``m``-th order derivative of ``f`` in ``x_j``. r  )r   r   r  r   _diffrq  s      r   diffDMP.diff  sT    !S!!6a@AA!S!!6a@AAwwq}r   c                    [         er~   r   rq  s      r   rx  	DMP._diff  r   r   c                   [        U[        5      (       d  [        S[        U5      -  5      eSUs=::  a  U R                  ::  d  O  [        SU-  5      eU R                  (       a  U R                  X5      $ U R                  U5      $ )z5Evaluates ``f`` at the given point ``a`` in ``x_j``. r  r   zinvalid variable index %s)r   r   r  r   r   
ValueError	_eval_lev_evalr   ar9  s      r   evalDMP.eval  sh    !S!!6a@AAq/AEE/81<==55;;q$$771:r   c                    [         er~   r   r   r  s     r   r  	DMP._eval  r   r   c                    [         er~   r   r  s      r   r  DMP._eval_lev  r   r   c                    U R                  U5      u  p#UR                  (       a  [        S5      eUR                  U5      $ )2Half extended Euclidean algorithm, if univariate. univariate polynomial expected)r  r   r~  _half_gcdexr  s       r   
half_gcdexDMP.half_gcdex  s3    {{1~55=>>}}Qr   c                    [         er~   r   r  s     r   r  DMP._half_gcdex  r   r   c                    U R                  U5      u  p#UR                  (       a  [        S5      eUR                  R                  (       d  [        S5      eUR                  U5      $ )-Extended Euclidean algorithm, if univariate. r  zground domain must be a field)r  r   r~  r   is_Fieldr   _gcdexr  s       r   gcdex	DMP.gcdex  sI    {{1~55=>>uu~~=>>xx{r   c                    [         er~   r   r  s     r   r  
DMP._gcdex  r   r   c                    U R                  U5      u  p#UR                  (       a  [        S5      eUR                  U5      $ )(Invert ``f`` modulo ``g``, if possible. r  )r  r   r~  _invertr  s       r   invert
DMP.invert  s2    {{1~55=>>yy|r   c                    [         er~   r   r  s     r   r  DMP._invert  r   r   c                \    U R                   (       a  [        S5      eU R                  U5      $ )"Compute ``f**(-1)`` mod ``x**n``. r  )r   r~  _revertr  s     r   revert
DMP.revert  s#    55=>>yy|r   c                    [         er~   r   r  s     r   r  DMP._revert  r   r   c                J    U R                  U5      u  p#UR                  U5      $ z7Computes subresultant PRS sequence of ``f`` and ``g``. )r  _subresultantsr  s       r   subresultantsDMP.subresultants  s"    {{1~""r   c                    [         er~   r   r  s     r   r  DMP._subresultants#  r   r   c                z    U R                  U5      u  p4U(       a  UR                  U5      $ UR                  U5      $ /Computes resultant of ``f`` and ``g`` via PRS. )r  _resultant_includePRS
_resultant)r   r  
includePRSr  r  s        r   	resultantDMP.resultant&  s3    {{1~**1--<<?"r   c                    [         er~   r   )r   r  r  s      r   r  DMP._resultant.  r   r   c                    [         e Computes discriminant of ``f``. r   r   s    r   discriminantDMP.discriminant1  r   r   c                J    U R                  U5      u  p#UR                  U5      $ z4Returns GCD of ``f`` and ``g`` and their cofactors. )r  
_cofactorsr  s       r   	cofactorsDMP.cofactors5  s    {{1~||Ar   c                    [         er~   r   r  s     r   r  DMP._cofactors:  r   r   c                J    U R                  U5      u  p#UR                  U5      $ z+Returns polynomial GCD of ``f`` and ``g``. )r  _gcdr  s       r   gcdDMP.gcd=  r  r   c                    [         er~   r   r  s     r   r  DMP._gcdB  r   r   c                J    U R                  U5      u  p#UR                  U5      $ +Returns polynomial LCM of ``f`` and ``g``. )r  _lcmr  s       r   lcmDMP.lcmE  r  r   c                    [         er~   r   r  s     r   r  DMP._lcmJ  r   r   c                z    U R                  U5      u  p4U(       a  UR                  U5      $ UR                  U5      $ 6Cancel common factors in a rational function ``f/g``. )r  _cancel_include_cancel)r   r  includer  r  s        r   cancel
DMP.cancelM  s3    {{1~$$Q''99Q<r   c                    [         er~   r   r  s     r   r  DMP._cancelV  r   r   c                    [         er~   r   r  s     r   r  DMP._cancel_includeY  r   r   c                V    U R                  U R                  R                  U5      5      $ z&Reduce ``f`` modulo a constant ``p``. )_truncr   r   r   ps     r   trunc	DMP.trunc\  s    xxa())r   c                    [         er~   r   r  s     r   r  
DMP._trunc`  r   r   c                    [         ez'Divides all coefficients by ``LC(f)``. r   r   s    r   monic	DMP.monicc  r   r   c                    [         ez(Returns GCD of polynomial coefficients. r   r   s    r   contentDMP.contentg  r   r   c                    [         ez/Returns content and a primitive form of ``f``. r   r   s    r   	primitiveDMP.primitivek  r   r   c                J    U R                  U5      u  p#UR                  U5      $ z4Computes functional composition of ``f`` and ``g``. )r  _composer  s       r   composeDMP.composeo  s    {{1~zz!}r   c                    [         er~   r   r  s     r   r  DMP._composet  r   r   c                Z    U R                   (       a  [        S5      eU R                  5       $ ),Computes functional decomposition of ``f``. r  )r   r~  
_decomposer   s    r   	decomposeDMP.decomposew  s!    55=>>||~r   c                    [         er~   r   r   s    r   r  DMP._decompose~  r   r   c                    U R                   (       a  [        S5      eU R                  U R                  R	                  U5      5      $ )/Efficiently compute Taylor shift ``f(x + a)``. r  )r   r~  _shiftr   r   r  s     r   shift	DMP.shift  s1    55=>>xxa())r   c                    U Vs/ s H  o R                   R                  U5      PM     nnU R                  U5      $ s  snf z/Efficiently compute Taylor shift ``f(X + A)``. )r   r   _shift_list)r   r  ais      r   
shift_listDMP.shift_list  s5    )*+2UU]]2+}}Q ,s   $<c                    [         er~   r   r  s     r   r  
DMP._shift  r   r   c                    U R                   (       a  [        S5      eUR                  U5      u  p4U R                  U5      u  pSUR                  U5      u  pTUR                  X45      $ )5Evaluate functional transformation ``q**n * f(p/q)``.r  )r   r~  r  
_transform)r   r  qr  Qr  s         r   	transformDMP.transform  sQ    55=>>{{1~{{1~{{1~||A!!r   c                    [         er~   r   r   r  r  s      r   r  DMP._transform  r   r   c                Z    U R                   (       a  [        S5      eU R                  5       $ )&Computes the Sturm sequence of ``f``. r  )r   r~  _sturmr   s    r   sturm	DMP.sturm  s!    55=>>xxzr   c                    [         er~   r   r   s    r   r  
DMP._sturm  r   r   c                Z    U R                   (       a  [        S5      eU R                  5       $ )7Computes the Cauchy upper bound on the roots of ``f``. r  )r   r~  _cauchy_upper_boundr   s    r   cauchy_upper_boundDMP.cauchy_upper_bound  $    55=>>$$&&r   c                    [         er~   r   r   s    r   r#  DMP._cauchy_upper_bound  r   r   c                Z    U R                   (       a  [        S5      eU R                  5       $ )?Computes the Cauchy lower bound on the nonzero roots of ``f``. r  )r   r~  _cauchy_lower_boundr   s    r   cauchy_lower_boundDMP.cauchy_lower_bound  r&  r   c                    [         er~   r   r   s    r   r+  DMP._cauchy_lower_bound  r   r   c                Z    U R                   (       a  [        S5      eU R                  5       $ )BComputes the squared Mignotte bound on root separations of ``f``. r  )r   r~  _mignotte_sep_bound_squaredr   s    r   mignotte_sep_bound_squaredDMP.mignotte_sep_bound_squared  s$    55=>>,,..r   c                    [         er~   r   r   s    r   r2  DMP._mignotte_sep_bound_squared  r   r   c                Z    U R                   (       a  [        S5      eU R                  5       $ )4Computes greatest factorial factorization of ``f``. r  )r   r~  	_gff_listr   s    r   gff_listDMP.gff_list  s!    55=>>{{}r   c                    [         er~   r   r   s    r   r9  DMP._gff_list  r   r   c                    [         ezComputes ``Norm(f)``.r   r   s    r   normDMP.norm  r   r   c                    [         ez$Computes square-free norm of ``f``. r   r   s    r   sqf_normDMP.sqf_norm  r   r   c                    [         ez$Computes square-free part of ``f``. r   r   s    r   sqf_partDMP.sqf_part  r   r   c                    [         e0Returns a list of square-free factors of ``f``. r   r   r   s     r   sqf_listDMP.sqf_list  r   r   c                    [         erK  r   rM  s     r   sqf_list_includeDMP.sqf_list_include  r   r   c                    [         e0Returns a list of irreducible factors of ``f``. r   r   s    r   factor_listDMP.factor_list  r   r   c                    [         erT  r   r   s    r   factor_list_includeDMP.factor_list_include  r   r   c                   U R                   (       a  [        S5      eU(       a  U(       a  U R                  X#XES9$ U(       a  U(       d  U R                  X#XES9$ U(       d  U(       a  U R	                  X#XES9$ U R                  X#XES9$ )z0Compute isolating intervals for roots of ``f``. z1Cannot isolate roots of a multivariate polynomialepsinfsupfast)r   r{   _isolate_all_roots_sqf_isolate_all_roots_isolate_real_roots_sqf_isolate_real_roots)r   r   r]  r^  r_  r`  sqfs          r   	intervalsDMP.intervals  s|    55!"UVV3++#+QQ''Cc'MM,,3,RR((Ss(NNr   c                    [         er~   r   r   r]  r^  r_  r`  s        r   rb  DMP._isolate_all_roots  r   r   c                    [         er~   r   ri  s        r   ra  DMP._isolate_all_roots_sqf  r   r   c                    [         er~   r   ri  s        r   rd  DMP._isolate_real_roots   r   r   c                    [         er~   r   ri  s        r   rc  DMP._isolate_real_roots_sqf  r   r   c                \    U R                   (       a  [        S5      eU R                  XX4US9$ )z]
Refine an isolating interval to the given precision.

``eps`` should be a rational number.

z1Cannot refine a root of a multivariate polynomialr]  stepsr`  )r   r{   _refine_real_rootr   r;  tr]  rs  r`  s         r   refine_rootDMP.refine_root  s7     55!CE E ""1SD"IIr   c                    [         er~   r   ru  s         r   rt  DMP._refine_real_root  r   r   c                    [         e)<Return the number of real roots of ``f`` in ``[inf, sup]``. r   r   r^  r_  s      r   count_real_rootsDMP.count_real_roots  r   r   c                    [         e)?Return the number of complex roots of ``f`` in ``[inf, sup]``. r   r}  s      r   count_complex_rootsDMP.count_complex_roots  r   r   c                    [         ez0Returns ``True`` if ``f`` is a zero polynomial. r   r   s    r   rN  DMP.is_zero  
     "!r   c                    [         ez0Returns ``True`` if ``f`` is a unit polynomial. r   r   s    r   is_one
DMP.is_one#  r  r   c                    [         e>Returns ``True`` if ``f`` is an element of the ground domain. r   r   s    r   	is_groundDMP.is_ground(  r  r   c                    [         e7Returns ``True`` if ``f`` is a square-free polynomial. r   r   s    r   is_sqf
DMP.is_sqf-  r  r   c                    [         ez=Returns ``True`` if the leading coefficient of ``f`` is one. r   r   s    r   is_monicDMP.is_monic2  r  r   c                    [         ezAReturns ``True`` if the GCD of the coefficients of ``f`` is one. r   r   s    r   is_primitiveDMP.is_primitive7  r  r   c                    [         e):Returns ``True`` if ``f`` is linear in all its variables. r   r   s    r   	is_linearDMP.is_linear<  r  r   c                    [         e)=Returns ``True`` if ``f`` is quadratic in all its variables. r   r   s    r   is_quadraticDMP.is_quadraticA  r  r   c                    [         e)8Returns ``True`` if ``f`` is zero or has only one term. r   r   s    r   is_monomialDMP.is_monomialF  r  r   c                    [         e7Returns ``True`` if ``f`` is a homogeneous polynomial. r   r   s    r   is_homogeneousDMP.is_homogeneousK  r  r   c                    [         e:Returns ``True`` if ``f`` has no factors over its domain. r   r   s    r   is_irreducibleDMP.is_irreducibleP  r  r   c                    [         e)6Returns ``True`` if ``f`` is a cyclotomic polynomial. r   r   s    r   is_cyclotomicDMP.is_cyclotomicU  r  r   c                "    U R                  5       $ r~   )r  r   s    r   __abs__DMP.__abs__Z      uuwr   c                "    U R                  5       $ r~   r  r   s    r   __neg__DMP.__neg__]  r  r   c                    [        U[        5      (       a  U R                  U5      $  U R                  U5      $ ! [         a	    [
        s $ f = fr~   )r   r   r  r  r   NotImplementedr  s     r   __add__DMP.__add__`  D    a558O&||A&! &%%&   9 AAc                $    U R                  U5      $ r~   r  r  s     r   __radd__DMP.__radd__i      yy|r   c                    [        U[        5      (       a  U R                  U5      $  U R                  U5      $ ! [         a	    [
        s $ f = fr~   )r   r   r  r  r   r  r  s     r   __sub__DMP.__sub__l  r  r  c                &    U * R                  U5      $ r~   r  r  s     r   __rsub__DMP.__rsub__u      ||Ar   c                    [        U[        5      (       a  U R                  U5      $  U R                  U5      $ ! [         a	    [
        s $ f = fr~   )r   r   r  r  r   r  r  s     r   __mul__DMP.__mul__x  r  r  c                $    U R                  U5      $ r~   r  r  s     r   __rmul__DMP.__rmul__  r  r   c                    [        U[        5      (       a  U R                  U5      $  U R                  U5      $ ! [         a	    [
        s $ f = fr~   )r   r   r   r  r   r  r  s     r   __truediv__DMP.__truediv__  sE    a771:&||A&! &%%&r  c                    [        U[        5      (       a  UR                  U 5      $  U R                  5       R	                  U5      R                  U 5      $ ! [
         a	    [        s $ f = fr~   )r   r   r   r   r  r   r  r  s     r   __rtruediv__DMP.__rtruediv__  sY    a771:&vvx**1-33A66! &%%&s   -A A)(A)c                $    U R                  U5      $ r~   r  r  s     r   __pow__DMP.__pow__      uuQxr   c                $    U R                  U5      $ r~   r  r  s     r   
__divmod__DMP.__divmod__  r  r   c                $    U R                  U5      $ r~   r  r  s     r   __mod__DMP.__mod__  r  r   c                    [        U[        5      (       a  U R                  U5      $  U R                  U5      $ ! [         a	    [
        s $ f = fr~   )r   r   r  r  r  r  r  s     r   __floordiv__DMP.__floordiv__  sD    a558O&||A& &%%&r  c                    XL a  g[        U[        5      (       d  [        $  U R                  U5      u  p#UR	                  U5      $ ! [
         a     gf = f)NTF)r   r   r  r  
_strict_eqrz   r  s       r   __eq__
DMP.__eq__  sU    6!S!!!!	#;;q>DA <<?" ! 		s   A 
AAc                    [         er~   r   r  s     r   r  DMP._strict_eq  r   r   c                :    U(       d  X:H  $ U R                  U5      $ r~   )r  r   r  stricts      r   eqDMP.eq  s    6M<<?"r   c                *    U R                  XS9(       + $ )N)r  )r  r  s      r   neDMP.ne  s    444)))r   c                j    U R                  U5      u  p#UR                  5       UR                  5       :  $ r~   r  r   r  s       r   __lt__
DMP.__lt__  (    {{1~yy{QYY[((r   c                j    U R                  U5      u  p#UR                  5       UR                  5       :*  $ r~   r  r  s       r   __le__
DMP.__le__  (    {{1~yy{aiik))r   c                j    U R                  U5      u  p#UR                  5       UR                  5       :  $ r~   r  r  s       r   __gt__
DMP.__gt__  r  r   c                j    U R                  U5      u  p#UR                  5       UR                  5       :  $ r~   r  r  s       r   __ge__
DMP.__ge__  r  r   c                $    U R                   (       + $ r~   )rN  r   s    r   __bool__DMP.__bool__  s    99}r   r~   FrM  r   r   T)FNNNFF)NNFNN)r   
__module____qualname____firstlineno____doc__	__slots____annotations__r   classmethodr   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r   r   r'  r+  r0  r:  r4  r5  r   r   rD  rO  rW  r^  ra  rf  re  rm  rt  rz  r  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rZ  r)  r0  r5  rB  rH  rL  rQ  rZ  rW  r`  rd  rh  rl  rr  rp  ry  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r#  r,  r+  r3  r2  r:  r9  r@  rD  rH  rN  rQ  rV  rY  rf  rb  ra  rd  rc  rw  rt  r~  r  rN  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  __static_attributes__r   r   r   r   r      sR   3I	H	K& 	. 	.   
   & & C C @ @ > >3&" , , 0 0"IH2"
A0""+,,)""66)"%
C
H#""""&"&""""////1










"""""""""""""""""""""E& ""?""""""""
"" "
"""#
"#""
"
"
" ""*""""
""* 
"	"""'"'"/"""""""""O""""J""" " " " " " " " " " " " " " " " " " " " " " " " "&&&&&&
#"#*)*)*r   r   c                  H   \ rS rSrSrSr\S 5       rS rS r	S r
S rS	 rS
 rS rS rS rS rS rSqS jrS rS rSrS jrSrS j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#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.SsS- jr/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8StS7 jr9StS8 jr:S9 r;S: r<S; r=S< r>S= r?S> r@S? rAS@ rBSA rCSB rDSC rESD rFSE rGSF rHSG rISH rJSI rKSJ rLSK rMSL rNSM rOSN rPSO rQSP rRSQ rSSR rTSS rUST rVSU rWSV rXSW rYSX rZSrSY jr[SrSZ jr\S[ r]S\ r^S] r_S^ r`S_ raS` rbSa rcSuSb jrdSuSc jre\fSd 5       rg\fSe 5       rh\fSf 5       ri\fSg 5       rj\fSh 5       rk\fSi 5       rl\fSj 5       rm\fSk 5       rn\fSl 5       ro\fSm 5       rp\fSn 5       rq\fSo 5       rrSprsg)vr   i  r   )r   r   r   c                T    [         R                  U 5      nXl        X4l        X$l        U$ r~   )objectr   r   r   r   )r   r   r   r   objs        r   r   DMP_Python._new  s$    nnS!
r   c                    [        U 5      [        U5      :w  a  gU R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )r   r   r   r   r  s     r   r  DMP_Python._strict_eq  sJ    7d1guu~E!%%155.EQVVqvv5EEr   c                N    U R                  XR                  U R                  5      $ ).Create a DMP out of the given representation. )r   r   r   r   r   s     r   perDMP_Python.per  s    vvc55!%%((r   c                v    U R                  [        XR                  5      U R                  U R                  5      $ r   )r   r    r   r   r   s     r   r   DMP_Python.ground_new  s&    vvj.quu==r   c                N    U R                  U R                  U R                  5      $ r~   )r   r   r   r   s    r   r   DMP_Python._one  s    uuQUUAEE""r   c                :  ^ ^^ [        U[        5      (       a  T R                  UR                  :w  a  [        ST < SU< 35      eT R                  UR                  :X  a9  T R                  T R                  T R
                  T R                  UR                  4$ T R                  T R                  R                  UR                  5      smm[        T R                  TT R                  T5      n[        UR                  TUR                  T5      nUU U4S jnTTXBU4$ )z7Unify representations of two multivariate polynomials. r   r  c                *   > TR                  U TT5      $ r~   )r   )r   r   r   r   s    r   r&  DMP_Python.unify.<locals>.per   s    vvc3,,r   )	r   r   r   rz   r   r&  r   r  r   )r   r  r  r  r&  r   r   s   `    @@r   r  DMP_Python.unify  s     !S!!QUUaee^#A$FGG55AEE>55!%%66uuaeekk!%%0HCAFFC4AAFFC4A- SQ&&r   c                l    [         R                  U R                  U R                  U R                  5      $ )z)Convert ``f`` to a Flint representation. )r   r   r   r   r   r   s    r   r   DMP_Python.to_DUP_Flint  s!    ~~affaeeQUU33r   c                ,    [        U R                  5      $ r  )r   r   r   s    r   r   DMP_Python.to_list	  s    AFF|r   c                B    [        U R                  U R                  5      $ zBConvert ``f`` to a tuple representation with native coefficients. )r1   r   r   r   s    r   r   DMP_Python.to_tuple  s    AFFAEE**r   c                    U R                  [        U R                  U R                  U R                  U5      XR                  5      $ )$Convert the ground domain of ``f``. )r   r   r   r   r   r   s     r   r   DMP_Python._convert  s.    vvk!&&!%%<c55IIr   c                    [        U R                  XU R                  5      nU R                  X0R                  U R                  5      $ r3  )r.   r   r   r   r   )r   r7  r8  r   s       r   r4  DMP_Python._slice  s1    aee,vvc55!%%((r   c                    [        U R                  XX0R                  U R                  5      nU R	                  X@R                  U R                  5      $ r3  )r/   r   r   r   r   )r   r7  r8  r9  r   s        r   r5  DMP_Python._slice_lev  s7    1661EE1559vvc55!%%((r   Nc                V    [        U R                  U R                  U R                  US9$ )rL  rA  )r,   r   r   r   rS  s     r   rO  DMP_Python._terms  s    affaeeQUU%@@r   c                    [        U R                  U R                  U R                  5      nU R	                  XR                  R                  U R                  5      $ rd  )rY   r   r   r   r   r   r   s     r   re  DMP_Python._lift#  s9    QVVQUUAEE*vvaAEE**r   c                    [        U R                  U R                  U R                  5      u  pXR	                  U5      4$ rk  )r(   r   r   r   r&  r~  s      r   rm  DMP_Python.deflate(  s.    166155!%%0%%({r   c                    [        U R                  U R                  U R                  US9u  p#U R	                  X R                  R                  U5      $ )rq  rs  )r)   r   r   r   r   )r   rs  r  r   s       r   rt  DMP_Python.inject-  s9    AFFAEE155>vvaC((r   c                    [        U R                  U R                  XS9nU R                  X1U R                  [	        UR
                  5      -
  5      $ )rx  rF  )r*   r   r   r   r8  symbols)r   r   rs  r  s       r   rz  DMP_Python.eject3  s;    affaeeS6vvaaeec#++&6677r   c                    [        U R                  U R                  U R                  5      u  pnXR	                  X R                  U5      4$ z&Remove useless generators from ``f``. )r-   r   r   r   r   )r   r  r  us       r   r}  DMP_Python._exclude9  s8    affaeeQUU3a&&EE1%%%r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ z6Returns a polynomial in `K[x_{P(1)}, ..., x_{P(n)}]`. )r&  r0   r   r   r   r  s     r   r  DMP_Python._permute?  s&    uu[EE1559::r   c                    [        U R                  U R                  U R                  5      u  pXR	                  U5      4$ r  )r+   r   r   r   r&  r~  s      r   r  DMP_Python.terms_gcdC  s.    QVVQUUAEE2%%({r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ r  )r&  r2   r   r   r   r  s     r   r  DMP_Python._add_groundH  &    uu^AFFAuuaee<==r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ r  )r&  r3   r   r   r   r  s     r   r  DMP_Python._sub_groundL  rV  r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ r  )r&  r4   r   r   r   r  s     r   r  DMP_Python._mul_groundP  rV  r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ r  )r&  r5   r   r   r   r  s     r   r  DMP_Python._quo_groundT  rV  r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ r  )r&  r6   r   r   r   r  s     r   r  DMP_Python._exquo_groundX  '    uu%affa>??r   c                v    U R                  [        U R                  U R                  U R                  5      5      $ r  )r&  r7   r   r   r   r   s    r   r  DMP_Python.abs\  &    uuWQVVQUUAEE233r   c                v    U R                  [        U R                  U R                  U R                  5      5      $ r  )r&  r8   r   r   r   r   s    r   r  DMP_Python.neg`  rb  r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  r9   r   r   r   r  s     r   r  DMP_Python._addd  ,    uuWQVVQVVQUUAEE:;;r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  r:   r   r   r   r  s     r   r  DMP_Python._subh  rg  r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  r;   r   r   r   r  s     r   r  DMP_Python._mull  rg  r   c                v    U R                  [        U R                  U R                  U R                  5      5      $ r  )r&  r<   r   r   r   r   s    r   r  DMP_Python.sqrp  rb  r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ r  )r&  r=   r   r   r   r  s     r   r  DMP_Python._powt  s&    uuWQVVQquu566r   c                    [        U R                  UR                  U R                  U R                  5      u  p#U R	                  U5      U R	                  U5      4$ r  )r>   r   r   r   r&  r   r  r  r   s       r   r  DMP_Python._pdivx  s?    quu5uuQxq!!r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  r?   r   r   r   r  s     r   r  DMP_Python._prem}  ,    uuXaffaffaeeQUU;<<r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  r@   r   r   r   r  s     r   r  DMP_Python._pquo  rv  r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  rA   r   r   r   r  s     r   r  DMP_Python._pexquo  s,    uuZquu=>>r   c                    [        U R                  UR                  U R                  U R                  5      u  p#U R	                  U5      U R	                  U5      4$ r  )rB   r   r   r   r&  rr  s       r   r  DMP_Python._div  s?    qvvqvvquuaee4uuQxq!!r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  rC   r   r   r   r  s     r   r  DMP_Python._rem  rg  r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  rD   r   r   r   r  s     r   r  DMP_Python._quo  rg  r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  rE   r   r   r   r  s     r   r  DMP_Python._exquo  s,    uuYqvvqvvquuaee<==r   c                B    [        U R                  XR                  5      $ )r(  )r   r   r   r*  s     r   r)  DMP_Python._degree  s    QVVQ..r   c                B    [        U R                  U R                  5      $ r/  )r   r   r   r   s    r   r0  DMP_Python.degree_list  s    qvvquu--r   c                B    [        S U R                  5        5       5      $ )r4  c              3  8   #    U  H  n[        U5      v   M     g 7fr~   r9  )r   r7  s     r   r   *DMP_Python.total_degree.<locals>.<genexpr>  s     .:a3q66:s   )maxr   r   s    r   r5  DMP_Python.total_degree  s    .188:...r   c                X    [        U R                  U R                  U R                  5      $ rK  )r   r   r   r   r   s    r   rL  DMP_Python.LC      QVVQUUAEE22r   c                X    [        U R                  U R                  U R                  5      $ rO  )r   r   r   r   r   s    r   rQ  DMP_Python.TC  r  r   c                X    [        U R                  XR                  U R                  5      $ rT  )r   r   r   r   rX  s     r   rW  DMP_Python._nth  s    affa66r   c                X    [        U R                  U R                  U R                  5      $ r_  )rH   r   r   r   r   s    r   r`  DMP_Python.max_norm  s    AFFAEE15511r   c                X    [        U R                  U R                  U R                  5      $ rc  )rI   r   r   r   r   s    r   rd  DMP_Python.l1_norm  s    166155!%%00r   c                X    [        U R                  U R                  U R                  5      $ rg  )rJ   r   r   r   r   s    r   rh  DMP_Python.l2_norm_squared  s    "166155!%%88r   c                    [        U R                  U R                  U R                  5      u  pXR	                  U5      4$ rk  )rK   r   r   r   r&  )r   r   r  s      r   rl  DMP_Python.clear_denoms  s.    #AFFAEE1559eeAhr   c           	     x    U R                  [        U R                  XU R                  U R                  5      5      $ )ro  )r&  rL   r   r   r   rq  s      r   rp  DMP_Python._integrate  s)    uu%affaAEE155ABBr   c           	     x    U R                  [        U R                  XU R                  U R                  5      5      $ )rw  )r&  rM   r   r   r   rq  s      r   rx  DMP_Python._diff  s(    uu[quuaee<==r   c                    [        U R                  U R                  R                  U5      SU R                  U R                  5      $ r   )rN   r   r   r   r   r  s     r   r  DMP_Python._eval  s.    166155==#3QquuEEr   c                    [        U R                  U R                  R                  U5      X R                  U R                  5      nU R                  X0R                  U R                  S-
  5      $ Nr   )rN   r   r   r   r   r   )r   r  r9  r   s       r   r  DMP_Python._eval_lev  sH    !&&!%%--"2AuuaeeDuuS%%++r   c                    [        U R                  UR                  U R                  5      u  p#U R                  U5      U R                  U5      4$ )r  )rZ   r   r   r&  r   r  r;  hs       r   r  DMP_Python._half_gcdex  s9    affaffaee4uuQxq!!r   c                    [        U R                  UR                  U R                  5      u  p#nU R                  U5      U R                  U5      U R                  U5      4$ )r  )r[   r   r   r&  )r   r  r;  rv  r  s        r   r  DMP_Python._gcdex  sE    AFFAFFAEE2auuQxq1558++r   c                z    [        U R                  UR                  U R                  5      nU R                  U5      $ )r  )r\   r   r   r&  )r   r  r;  s      r   r  DMP_Python._invert  s)    qvvqvvquu-uuQxr   c                `    U R                  [        U R                  XR                  5      5      $ r  )r&  rO   r   r   r  s     r   r  DMP_Python._revert  s     uuZ55122r   c                    [        U R                  UR                  U R                  U R                  5      n[	        [        U R                  U5      5      $ r  )r]   r   r   r   r   mapr&  r   r  Rs      r   r  DMP_Python._subresultants  s7    affaffaeeQUU;CqM""r   c                &   [        U R                  UR                  U R                  U R                  SS9u  p#U R                  (       a)  U R	                  X R                  U R                  S-
  5      nU[        [        U R                  U5      5      4$ )r  T)r  r   )r^   r   r   r   r   r   r  r&  r   r  resr  s       r   r   DMP_Python._resultant_includePRS  sc    qvvqvvquuaeeM55%%UUAEEAI.CDQUUA'''r   c                    [        U R                  UR                  U R                  U R                  5      nU R                  (       a)  U R	                  X R                  U R                  S-
  5      nU$ r  )r^   r   r   r   r   )r   r  r  s      r   r  DMP_Python._resultant  sJ    AFFAFFAEE155955%%UUAEEAI.C
r   c                    [        U R                  U R                  U R                  5      nU R                  (       a)  U R	                  XR                  U R                  S-
  5      nU$ )r  r   )r_   r   r   r   r   )r   r  s     r   r  DMP_Python.discriminant  sD    qvvquuaee455%%UUAEEAI.C
r   c                    [        U R                  UR                  U R                  U R                  5      u  p#nU R	                  U5      U R	                  U5      U R	                  U5      4$ r  )r`   r   r   r   r&  )r   r  r  cffcfgs        r   r  DMP_Python._cofactors  sK    #AFFAFFAEE155AuuQxsQUU3Z//r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  ra   r   r   r   r  s     r   r  DMP_Python._gcd  rg  r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  rb   r   r   r   r  s     r   r  DMP_Python._lcm  rg  r   c                    [        U R                  UR                  U R                  U R                  SS9u  p#pEX#U R	                  U5      U R	                  U5      4$ )r  Fr  rc   r   r   r   r&  r   r  cFcGr  r  s         r   r  DMP_Python._cancel  sE    !!&&!&&!%%NquuQxq))r   c                    [        U R                  UR                  U R                  U R                  SS9u  p#U R	                  U5      U R	                  U5      4$ )r  Tr  r  r  s       r   r  DMP_Python._cancel_include  sA    !&&!&&!%%EuuQxq!!r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ r  )r&  rP   r   r   r   r  s     r   r  DMP_Python._trunc  r_  r   c                v    U R                  [        U R                  U R                  U R                  5      5      $ r  )r&  rS   r   r   r   r   s    r   r  DMP_Python.monic  s'    uu%affaeeQUU;<<r   c                X    [        U R                  U R                  U R                  5      $ r  )rQ   r   r   r   r   s    r   r  DMP_Python.content  s    !!&&!%%77r   c                    [        U R                  U R                  U R                  5      u  pXR	                  U5      4$ r  )rR   r   r   r   r&  )r   contr  s      r   r  DMP_Python.primitive!  s.    &qvvquuaee<UU1X~r   c                    U R                  [        U R                  UR                  U R                  U R                  5      5      $ r  )r&  rT   r   r   r   r  s     r   r  DMP_Python._compose&  s,    uu[>??r   c           	     |    [        [        U R                  [        U R                  U R
                  5      5      5      $ r  )r   r  r&  rU   r   r   r   s    r   r  DMP_Python._decompose*  s'    C}QVVQUU;<==r   c                `    U R                  [        U R                  XR                  5      5      $ r  )r&  rV   r   r   r  s     r   r  DMP_Python._shift.  s     uuYqvvq%%011r   c                v    U R                  [        U R                  XR                  U R                  5      5      $ r	  )r&  rW   r   r   r   r  s     r   r
  DMP_Python._shift_list2  s&    uuYqvvq%%788r   c                    U R                  [        U R                  UR                  UR                  U R                  5      5      $ r  )r&  rX   r   r   r  s      r   r  DMP_Python._transform6  s,    uu]166166166155ABBr   c           	     |    [        [        U R                  [        U R                  U R
                  5      5      5      $ r  )r   r  r&  rv   r   r   r   s    r   r  DMP_Python._sturm:  s'    Cy7899r   c                B    [        U R                  U R                  5      $ r"  )rw   r   r   r   s    r   r#  DMP_Python._cauchy_upper_bound>      %affaee44r   c                B    [        U R                  U R                  5      $ r*  )rx   r   r   r   s    r   r+  DMP_Python._cauchy_lower_boundB  r  r   c                B    [        U R                  U R                  5      $ r1  )ry   r   r   r   s    r   r2  &DMP_Python._mignotte_sep_bound_squaredF  s    -affaee<<r   c                    [        U R                  U R                  5       VVs/ s H  u  pU R                  U5      U4PM     snn$ s  snnf r8  )rd   r   r   r&  )r   r  r  s      r   r9  DMP_Python._gff_listJ  s9    +7+FH+F41!%%(A+FHHHs   Ac                    [        U R                  U R                  U R                  5      nU R	                  XR                  R                  U R                  5      $ r?  )re   r   r   r   r   rA  s     r   r@  DMP_Python.normN  s9    QVVQUUAEE*uuQ		155))r   c                    [        U R                  U R                  U R                  5      u  pnXR	                  U5      U R                  X0R                  R                  U R                  5      4$ rC  )rg   r   r   r   r&  r   )r   r;  r  r   s       r   rD  DMP_Python.sqf_normS  sJ    qvvquuaee4a%%(AEE!UUYY666r   c                v    U R                  [        U R                  U R                  U R                  5      5      $ rG  )r&  rh   r   r   r   r   s    r   rH  DMP_Python.sqf_partX  s&    uu\!&&!%%788r   c                    [        U R                  U R                  U R                  U5      u  p#X# VVs/ s H  u  pEU R	                  U5      U4PM     snn4$ s  snnf rK  )ri   r   r   r   r&  r   r   r   factorsr  r  s         r   rN  DMP_Python.sqf_list\  sK    %affaeeQUUC@';'$!q1';;;;s   Ac                    [        U R                  U R                  U R                  U5      nU VVs/ s H  u  p4U R	                  U5      U4PM     snn$ s  snnf rK  )rj   r   r   r   r&  r   r   r  r  r  s        r   rQ  DMP_Python.sqf_list_includea  sD    &qvvquuaeeSA+24741!%%(A7444s   Ac                    [        U R                  U R                  U R                  5      u  pX VVs/ s H  u  p4U R	                  U5      U4PM     snn4$ s  snnf rT  )rm   r   r   r   r&  )r   r   r  r  r  s        r   rV  DMP_Python.factor_listf  sI    (>';'$!q1';;;;s   Ac                    [        U R                  U R                  U R                  5      nU VVs/ s H  u  p#U R	                  U5      U4PM     snn$ s  snnf rT  )rn   r   r   r   r&  r   r  r  r  s       r   rY  DMP_Python.factor_list_includek  sB    )!&&!%%?+24741!%%(A7444s   Ac           	     B    [        U R                  U R                  XX4S9$ Nr\  )rp   r   r   ri  s        r   rd  DMP_Python._isolate_real_rootsp  s    %affaee3ZZr   c           	     B    [        U R                  U R                  XX4S9$ r  )ro   r   r   ri  s        r   rc  "DMP_Python._isolate_real_roots_sqfs  s    )!&&!%%Ss^^r   c           	     B    [        U R                  U R                  XX4S9$ r  )rr   r   r   ri  s        r   rb  DMP_Python._isolate_all_rootsv  s    $QVVQUU#YYr   c           	     B    [        U R                  U R                  XX4S9$ r  )rq   r   r   ri  s        r   ra  !DMP_Python._isolate_all_roots_sqfy  s    (Cc]]r   c           
     D    [        U R                  XU R                  X4US9$ )Nrr  )rs   r   r   ru  s         r   rt  DMP_Python._refine_real_root|  s    #AFFA!%%STXYYr   c                @    [        U R                  U R                  XS9$ r|  r^  r_  )rt   r   r   r}  s      r   r~  DMP_Python.count_real_roots  s    #AFFAEEsDDr   c                @    [        U R                  U R                  XS9$ r  r  )ru   r   r   r}  s      r   r  DMP_Python.count_complex_roots  s    &qvvquu#GGr   c                B    [        U R                  U R                  5      $ r  )r"   r   r   r   s    r   rN  DMP_Python.is_zero  s     !&&!%%((r   c                X    [        U R                  U R                  U R                  5      $ r  )r#   r   r   r   r   s    r   r  DMP_Python.is_one       ..r   c                D    [        U R                  SU R                  5      $ )r  N)r$   r   r   r   s    r   r  DMP_Python.is_ground  s     AFFD!%%00r   c                X    [        U R                  U R                  U R                  5      $ r  )rf   r   r   r   r   s    r   r  DMP_Python.is_sqf  r  r   c                    U R                   R                  [        U R                  U R                  U R                   5      5      $ r  )r   r  r   r   r   r   s    r   r  DMP_Python.is_monic  s,     uu||M!&&!%%?@@r   c                    U R                   R                  [        U R                  U R                  U R                   5      5      $ r  )r   r  rQ   r   r   r   s    r   r  DMP_Python.is_primitive  s-     uu||.qvvquuaeeDEEr   c                    [        S [        U R                  U R                  U R                  5      R                  5        5       5      $ )r  c              3  >   #    U  H  n[        U5      S :*  v   M     g7f)r   Nr  r   rF  s     r   r   'DMP_Python.is_linear.<locals>.<genexpr>       Y0Xu3u:?0X   r   r'   r   r   r   keysr   s    r   r  DMP_Python.is_linear  3     YAFFAEE1550Q0V0V0XYYYr   c                    [        S [        U R                  U R                  U R                  5      R                  5        5       5      $ )r  c              3  >   #    U  H  n[        U5      S :*  v   M     g7f)   Nr  r(  s     r   r   *DMP_Python.is_quadratic.<locals>.<genexpr>  r*  r+  r,  r   s    r   r  DMP_Python.is_quadratic  r/  r   c                :    [        U R                  5       5      S:*  $ )r  r   )r8  r
  r   s    r   r  DMP_Python.is_monomial  s     199;1$$r   c                &    U R                  5       SL$ )r  N)rH  r   s    r   r  DMP_Python.is_homogeneous  s     ""$D00r   c                X    [        U R                  U R                  U R                  5      $ r  )rl   r   r   r   r   s    r   r  DMP_Python.is_irreducible  s     !66r   c                f    U R                   (       d   [        U R                  U R                  5      $ gr  F)r   rk   r   r   r   s    r   r  DMP_Python.is_cyclotomic  s#     uu#AFFAEE22r   r   r~   r  rM  r  r  )tr   r  r  r  r  r  r  r   r  r&  r   r   r  r   r   r   r   r4  r5  rO  re  rm  rt  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r0  r5  rL  rQ  rW  r`  rd  rh  rl  rp  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r#  r+  r2  r9  r@  rD  rH  rN  rQ  rV  rY  rd  rc  rb  ra  rt  r~  r  r  rN  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r     s   3&I F
)>#'(4+J)
)
A+

)8&;
>>>>@44<<<47"
==?"
<<>/./337219
C>F,"
,

3#
(0
<<*
"
@=8
@>29C:55=I*
7
9<
5
<
5
[_Z^ZEH ) ) / / 1 1 / / A A F F Z Z Z Z % % 1 1 7 7  r   r   c                  |   \ rS rSrSrSrSrS r\S 5       r	S r
\S 5       r\S	 5       r\S
 5       rS rS rS rS rS rS rS rS rS rSuS jrS rS rSvS jrSvS j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'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2SwS1 jr3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<SxS; jr=SxS< jr>S= r?S> r@S? rAS@ rBSA rCSB rDSC rESD rFSE rGSF rHSG rISH rJSI rKSJ rLSK rMSL rNSM rOSN rPSO rQSP rRSQ rSSR rTSS rUST rVSU rWSV rXSW rYSX rZSY r[SZ r\S[ r]SvS\ jr^SvS] jr_S^ r`S_ raS` rbSa rcSb rdSc reSd rfSe rgSySf jrhSySg jri\jSh 5       rk\jSi 5       rl\jSj 5       rm\jSk 5       rn\jSl 5       ro\jSm 5       rp\jSn 5       rq\jSo 5       rr\jSp 5       rs\jSq 5       rt\jSr 5       ru\jSs 5       rvStrwg)zr   i  r   r   )r   r   _clsc                h    U R                   U R                  5       U R                  U R                  44$ r~   )r   r   r   r   r   s    r   
__reduce__DUP_Flint.__reduce__  s&    ~~$((CCCr   c                T    U R                  US S S2   X#5      nU R                  X5      $ N)_flint_polyfrom_repr   s       r   r   DUP_Flint._new  s)    ooc$B$i2||C%%r   c                B    U R                   R                  5       SSS2   $ )r   NrE  )r   r   r   s    r   r   DUP_Flint.to_list  s    vv}}tt$$r   c                h    [        U5      (       d   eUS:X  d   eU R                  U5      nU" U5      $ r   )r   _get_flint_poly_cls)r   r   r   r   	flint_clss        r   rF  DUP_Flint._flint_poly  s8    &s++++axx++C0	~r   c                    UR                   (       a  [        R                  $ UR                  (       a  [        R                  $ UR
                  (       a  UR                  $ [        SU-  5      e)N%Domain %s is not supported with flint)r   r|   	fmpz_polyr   	fmpq_polyr   	_poly_ctxr   )r   r   s     r   rL  DUP_Flint._get_flint_poly_cls  sF    99??"YY??"YY== FLMMr   c                J  ^^ UR                   (       a2  [        U[        R                  5      (       d   e[        R                  nOUR                  (       a2  [        U[        R
                  5      (       d   e[        R
                  nOsUR                  (       aT  [        U[        R                  [        R                  45      (       d   eUR                  5       m[        U5      mUU4S jnO[        SU-  5      e[        R                  U 5      nX$l        Xl        X4l        U$ )z,Create a DMP from the given representation. c                   > T" U T5      $ r~   r   )e_DUP_Flint__clsr   s    r   <lambda>$DUP_Flint.from_rep.<locals>.<lambda>  s    U1a[r   rP  )r   r   r|   rQ  r   rR  r   	nmod_polyfmpz_mod_polycharacteristicr   r   r  r   r   r   r?  )r   r   r   r?  r  rX  r   s        @@r   rG  DUP_Flint.from_rep  s     99c5??3333??DYYc5??3333??DYYcEOOU5H5H#IJJJJ""$AIE(DFLMMnnS!
r   c                    [        U 5      [        U5      :w  a  gU R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )r   r   r   r  s     r   r  DUP_Flint._strict_eq  s9    7d1guu~2!&&AFF"22r   c                Z    U R                  U R                  U/5      U R                  5      $ r   rG  r?  r   r   s     r   r   DUP_Flint.ground_new
  s!    zz!&&%/15511r   c                L    U R                  U R                  R                  5      $ r~   )r   r   r   r   s    r   r   DUP_Flint._one  s    ||AEEII&&r   c                    [         e)z*Unify representations of two polynomials. )r   r  s     r   r  DUP_Flint.unify  s    r   c                t    [         R                  U R                  5       U R                  U R                  5      $ )z1Convert ``f`` to a Python native representation. )r   r   r   r   r   r   s    r   r   DUP_Flint.to_DMP_Python  s#    qyy{AEE15599r   c                4    [        U R                  5       5      $ r5  )r:  r   r   s    r   r   DUP_Flint.to_tuple  s    QYY[!!r   c                   U[         :X  aD  U R                  [        :X  a0  U R                  [        R
                  " U R                  5      U5      $ [        U5      (       aG  [        U R                  5      (       a-  U R                  5       R                  U5      R                  5       $ [        SU R                   SU 35      e)r8  zDUP_Flint: Cannot convert z to )r   r   r   rG  r|   rR  r   r   r   r   r   r   r   s     r   r   DUP_Flint._convert  s    "9"::eooaff5s;;$S)).Eaee.L.L??$--c2??AA!;AEE7$seLMMr   c                    U R                   R                  5       X nU R                  U R                  U5      U R                  5      $ r3  )r   r   rG  r?  r   )r   r7  r8  r   s       r   r4  DUP_Flint._slice'  s3    %zz!&&.!%%00r   c                    [         er3  r   r6  s       r   r5  DUP_Flint._slice_lev,  r  r   Nc                   Ub  UR                   S:X  aK  [        U R                  R                  5       5       VVs/ s H  u  p#U(       d  M  U4U4PM     nnnUSSS2   $ U R	                  5       R                  US9$ s  snnf )rL  NlexrE  rA  )aliasr[  r   r   r   rO  )r   rB  r8  r   rD  s        r   rO  DUP_Flint._terms1  st    =EKK50,5affmmo,FM,FDA!itQi,FEM2; ??$++%+88 Ns   A<	A<c                    [         erd  r   r   s    r   re  DUP_Flint._lift?  r  r   c                    U R                   (       a  SU 4$ U R                  R                  5       u  pU4U R                  XR                  5      4$ )rl  )r   )rN  r   	deflationrG  r   )r   r  r8  s      r   rm  DUP_Flint.deflateD  sB     997Nvv!tQZZ55)))r   c                    [         erp  r   rr  s     r   rt  DUP_Flint.injectQ  r  r   c                    [         erw  r   ry  s      r   rz  DUP_Flint.ejectV  r  r   c                    [         erL  r   r   s    r   r}  DUP_Flint._exclude[  r  r   c                    [         erP  r   r  s     r   r  DUP_Flint._permute`  r  r   c                d    U R                  5       R                  5       u  pXR                  5       4$ r  )r   r  r   r~  s      r   r  DUP_Flint.terms_gcde  s+      **,.."""r   c                T    U R                  U R                  U-   U R                  5      $ r  rG  r   r   r  s     r   r  DUP_Flint._add_groundk      zz!&&1*aee,,r   c                T    U R                  U R                  U-
  U R                  5      $ r  r  r  s     r   r  DUP_Flint._sub_groundo  r  r   c                T    U R                  U R                  U-  U R                  5      $ r  r  r  s     r   r  DUP_Flint._mul_grounds  r  r   c                T    U R                  U R                  U-  U R                  5      $ r  r  r  s     r   r  DUP_Flint._quo_groundw      zz!&&A+quu--r   c                    [        U R                  U5      u  p#U(       a  [        X5      eU R                  X R                  5      $ )z<Exact quotient of ``f`` by an element of the ground domain. )divmodr   r   rG  r   )r   r   r  r   s       r   r  DUP_Flint._exquo_ground{  s5    affa %a++zz!UU##r   c                Z    U R                  5       R                  5       R                  5       $ r  )r   r  r   r   s    r   r  DUP_Flint.abs  s!     $$&3355r   c                P    U R                  U R                  * U R                  5      $ r  r  r   s    r   r  DUP_Flint.neg  s    zz166'155))r   c                h    U R                  U R                  UR                  -   U R                  5      $ r  r  r  s     r   r  DUP_Flint._add  #    zz!&&166/15511r   c                h    U R                  U R                  UR                  -
  U R                  5      $ r  r  r  s     r   r  DUP_Flint._sub  r  r   c                h    U R                  U R                  UR                  -  U R                  5      $ r  r  r  s     r   r  DUP_Flint._mul  r  r   c                T    U R                  U R                  S-  U R                  5      $ )r  r2  r  r   s    r   r  DUP_Flint.sqr  r  r   c                T    U R                  U R                  U-  U R                  5      $ ro  r  r  s     r   r  DUP_Flint._pow  r  r   c                "   U R                  5       UR                  5       -
  S-   n[        UR                  5       U-  U R                  -  UR                  5      u  p4U R	                  X0R
                  5      U R	                  X@R
                  5      4$ )r  r   )rZ  r  rL  r   rG  r   r   r  r@  r  r   s        r   r  DUP_Flint._pdiv  sg    HHJ#a'addfai!&&(!&&1zz!UU#QZZ55%999r   c                    U R                  5       UR                  5       -
  S-   nUR                  5       U-  U R                  -  UR                  -  nU R                  X0R                  5      $ )r  r   rZ  rL  r   rG  r   )r   r  r@  r  s       r   r  DUP_Flint._prem  sQ    HHJ#a'TTVQY166)zz!UU##r   c                    U R                  5       UR                  5       -
  S-   nUR                  5       U-  U R                  -  UR                  -  nU R                  X0R                  5      $ )r  r   r  )r   r  r@  r   s       r   r  DUP_Flint._pquo  sQ    HHJ#a'TTVQYAFF*zz!UU##r   c                   U R                  5       UR                  5       -
  S-   n[        UR                  5       U-  U R                  -  UR                  5      u  p4U(       a  [	        X5      eU R                  X0R                  5      $ )r  r   )rZ  r  rL  r   r   rG  r   r  s        r   r  DUP_Flint._pexquo  sc    HHJ#a'addfai!&&(!&&1%a++zz!UU##r   c                   U R                   R                  (       aX  [        U R                  UR                  5      u  p#U R	                  X R                   5      U R	                  X0R                   5      4$ U R                  5       R                  UR                  5       5      u  p#UR                  5       UR                  5       4$ r  )r   r  r  r   rG  r   r  r   rr  s       r   r  DUP_Flint._div  s    55>>!&&!&&)DA::a'Auu)=== ??$))!//*;<DA>>#Q^^%555r   c                h    U R                  U R                  UR                  -  U R                  5      $ r  r  r  s     r   r  DUP_Flint._rem  r  r   c                h    U R                  U R                  UR                  -  U R                  5      $ r  r  r  s     r   r  DUP_Flint._quo  s$    zz!&&AFF*AEE22r   c                P    U R                  U5      u  p#U(       a  [        X5      eU$ r  )r  r   rr  s       r   r  DUP_Flint._exquo  s$    vvay%a++r   c                R    U R                   R                  5       nUS:X  a  [        nU$ )r(  rE  )r   rZ  r   )r   r9  r@  s      r   r)  DUP_Flint._degree  s"    FFMMO7Ar   c                $    U R                  5       4$ r/  r)  r   s    r   r0  DUP_Flint.degree_list  s    r   c                "    U R                  5       $ r3  r  r   s    r   r5  DUP_Flint.total_degree  s    yy{r   c                P    U R                   U R                   R                  5          $ rK  r   rZ  r   s    r   rL  DUP_Flint.LC  s    vvaffmmo&&r   c                     U R                   S   $ )rP  r   r   r   s    r   rQ  DUP_Flint.TC  s    vvayr   c                (    Uu  nU R                   U   $ r  r  )r   rY  r8  s      r   rW  DUP_Flint._nth  s    vvayr   c                >    U R                  5       R                  5       $ r_  )r   r`  r   s    r   r`  DUP_Flint.max_norm  s     ))++r   c                >    U R                  5       R                  5       $ rc  )r   rd  r   s    r   rd  DUP_Flint.l1_norm  s     ((**r   c                >    U R                  5       R                  5       $ rg  )r   rh  r   s    r   rh  DUP_Flint.l2_norm_squared  s     0022r   c                h   U R                   nUR                  (       a`  U R                  R                  5       nU R	                  U R                  U R                  R                  5       5      U R                   5      nX#4$ UR                  (       d  UR                  (       a  UR                  U 4$ [        erk  )r   r   r   denomrG  r?  numerr   is_FiniteFieldr   r   )r   r  r  r  s       r   rl  DUP_Flint.clear_denoms  sr    EE77FFLLNEJJqvvafflln5quu=E<WW((55!8O%%r   c                0   US:X  d   eU R                   R                  (       aI  U R                  n[        U5       H  nUR	                  5       nM     U R                  X0R                   5      $ U R                  5       R                  XS9R                  5       $ )ro  r   )r7  r9  )	r   r  r   rangeintegralrG  r   rp  r   r   r7  r9  r   r]  s        r   rp  DUP_Flint._integrate  sq    Avv55>>&&C1Xlln ::c55))??$//!/9FFHHr   c                    US:X  d   eU R                   n[        U5       H  nUR                  5       nM     U R                  X0R                  5      $ )z1Computes the ``m``-th order derivative of ``f``. r   )r   r  
derivativerG  r   r  s        r   rx  DUP_Flint._diff  sC    AvvffqA.."C zz#uu%%r   c                @    U R                  5       R                  U5      $ r~   )r   r  r  s     r   r  DUP_Flint._eval  s    
  &&q))r   c                    [         er~   r   r  s      r   r  DUP_Flint._eval_lev  r   r   c                    U R                  5       R                  UR                  5       5      u  p#UR                  5       UR                  5       4$ )z#Half extended Euclidean algorithm. )r   r  r   r  s       r   r  DUP_Flint._half_gcdex#  s;     ,,Q__->?~~!111r   c                    U R                   R                  UR                   5      u  p#nU R                  X0R                  5      U R                  X@R                  5      U R                  X R                  5      4$ )zExtended Euclidean algorithm. )r   xgcdrG  r   )r   r  r  r;  rv  s        r   r  DUP_Flint._gcdex(  sP    &&++aff%azz!UU#QZZ55%91::a;OOOr   c                R   U R                   nUR                  (       aP  U R                  R                  UR                  5      u  p4nUSU-  S-   :w  a  [	        S5      eU R                  XB5      $ U R                  5       R                  UR                  5       5      R                  5       $ )r  r   r   zero divisor)	r   r  r   r  r   rG  r   r  r   )r   r  r  r  F_invrE  s         r   r  DUP_Flint._invert-  s    EE::FFKK/MC aeai#N33::e'' ??$,,Q__->?LLNNr   c                \    U R                  5       R                  U5      R                  5       $ r  )r   r  r   r  s     r   r  DUP_Flint._revert<  s%      ((+88::r   c                    U R                  5       R                  UR                  5       5      nU Vs/ s H  oR                  5       PM     sn$ s  snf r  )r   r  r   r  s      r   r  DUP_Flint._subresultantsB  s?     OO,,Q__->?+,.1a!1...s   Ac                    U R                  5       R                  UR                  5       5      u  p#X# Vs/ s H  oR                  5       PM     sn4$ s  snf r  )r   r  r   r  s       r   r  DUP_Flint._resultant_includePRSH  sF     "889JK31nn&3333s   Ac                \    U R                  5       R                  UR                  5       5      $ )z'Computes resultant of ``f`` and ``g``. )r   r  r  s     r   r  DUP_Flint._resultantN  s#      ++AOO,=>>r   c                >    U R                  5       R                  5       $ r  )r   r  r   s    r   r  DUP_Flint.discriminantS  s      --//r   c                h    U R                  U5      nX R                  U5      UR                  U5      4$ r  )r  r   )r   r  r  s      r   r  DUP_Flint._cofactorsX  s*    EE!H''!*aggaj((r   c                    U R                  U R                  R                  UR                  5      U R                  5      $ r  )rG  r   r  r   r  s     r   r  DUP_Flint._gcd]  s(    zz!&&**QVV,aee44r   c                l   U (       a  U(       d%  U R                  U R                  R                  5      $ U R                  U5      R	                  U R                  U5      5      nUR                  R                  (       a  UR                  5       nU$ UR                  5       S:  a  UR                  5       nU$ )r  r   )
r   r   r   r  r  r  r  r  rL  r  )r   r  rA  s      r   r  DUP_Flint._lcma  s|     a<<

++FF1IQVVAY'55>>	A  TTVaZAr   c                   U R                   UR                   :X  d   eU R                   nUR                  (       d$  UR                  (       d  UR                  (       d   eUR                  (       aK  U R	                  U5      nU R                  U5      UR                  U5      pTUR                  UR                  XE4$ UR                  (       a%  U R                  5       u  pdUR                  5       u  puOUR                  U pFUR                  UpWUR                  U5      nXx-  Xh-  pgUR	                  U5      n	UR                  U	5      UR                  U	5      pTUR                  5       S:  n
UR                  5       S:  nU
(       a'  U(       a   UR                  5       UR                  5       pTO3U
(       a  U* UR                  5       pGOU(       a  U* UR                  5       pWXvXE4$ )r  r   )r   r   r   r  r  r   r   rl  r  rL  r  )r   r  r  r  r  r  r  r  cHHf_negg_negs               r   r  DUP_Flint._cancelp  sY   uu~~EE ww!''Q%5%555q	A771:qwwqzq55!%%%%77NN$EBNN$EBEE1EE1VVBZ28BFF1Iwwqz1771:1

U557AEEGqCCq|r   c                n    U R                  U5      u  p#pEUR                  U5      UR                  U5      4$ r  )r  r  r  s         r   r  DUP_Flint._cancel_include  s0    yy|}}R !--"333r   c                \    U R                  5       R                  U5      R                  5       $ r  )r   r  r   r  s     r   r  DUP_Flint._trunc  s#     ''*7799r   c                @    U R                  U R                  5       5      $ r  )r  rL  r   s    r   r  DUP_Flint.monic  s     qttv&&r   c                >    U R                  5       R                  5       $ r  )r   r  r   s    r   r  DUP_Flint.content  s      ((**r   c                    U R                  5       nU R                  (       a  U R                  R                  U 4$ U R	                  U5      nX4$ r  )r  rN  r   r   r  )r   r  prims      r   r  DUP_Flint.primitive  s<    yy{9955::q= t$zr   c                l    U R                  U R                  UR                  5      U R                  5      $ r  r  r  s     r   r  DUP_Flint._compose  s#    zz!&&.!%%00r   c                    U R                  5       R                  5        Vs/ s H  oR                  5       PM     sn$ s  snf r  )r   r  r   r  s     r   r  DUP_Flint._decompose  s1    +,??+<+G+G+IK+Ia!+IKKK   =c                    U R                  XR                  R                  /5      nU R                  U R	                  U5      U R                  5      $ r  )r?  r   r   rG  r   )r   r  x_plus_as      r   r  DUP_Flint._shift  s8    661eeii.)zz!&&*AEE22r   c                    U R                  5       UR                  5       UR                  5       pTnUR                  XE5      R                  5       $ r  )r   r  r   )r   r  r  r  r  r  s         r   r  DUP_Flint._transform  s:    //#Q__%68Ia{{1 --//r   c                    U R                  5       R                  5        Vs/ s H  oR                  5       PM     sn$ s  snf r  )r   r  r   r  s     r   r  DUP_Flint._sturm  s1    +,??+<+C+C+EG+Ea!+EGGGr  c                >    U R                  5       R                  5       $ r  )r   r#  r   s    r   r#  DUP_Flint._cauchy_upper_bound       4466r   c                >    U R                  5       R                  5       $ r  )r   r+  r   s    r   r+  DUP_Flint._cauchy_lower_bound  r  r   c                >    U R                  5       R                  5       $ r  )r   r2  r   s    r   r2  %DUP_Flint._mignotte_sep_bound_squared  s     <<>>r   c                    U R                  5       nUR                  5        VVs/ s H  u  p#UR                  5       U4PM     snn$ s  snnf r  )r   r:  r   )r   r  r  r  s       r   r9  DUP_Flint._gff_list  s:    OO34::<A<41!.."A&<AAA   Ac                    [         er?  r   r   s    r   r@  DUP_Flint.norm  r  r   c                    [         erC  r   r   s    r   rD  DUP_Flint.sqf_norm  r  r   c                ^    U R                  U R                  U R                  5       5      5      $ rG  )r  r  rx  r   s    r   rH  DUP_Flint.sqf_part  s     xxqwwy)**r   c                    U R                  5       R                  US9u  p#X# VVs/ s H  u  pEUR                  5       U4PM     snn4$ s  snnf rL  )r   )r   rN  r   r  s         r   rN  DUP_Flint.sqf_list  sK     *333<'C'$!)1-'CCCCs   Ac                    U R                  5       R                  US9nU VVs/ s H  u  p4UR                  5       U4PM     snn$ s  snnf r!  )r   rQ  r   r   s        r   rQ  DUP_Flint.sqf_list_include  sB    //#444=3:<741!.."A&7<<<s   Ac                   U R                   R                  (       d  U R                   R                  (       aN  U R                  R	                  5       u  pU VVs/ s H"  u  p4U R                  X0R                   5      U4PM$     nnnOU R                   R                  (       a  U R                  R	                  5       u  pU VVs/ s H"  u  p4U R                  X0R                   5      U4PM$     nnn/ nU H0  u  p4UR                  5       u  pcXU-  -  nUR                  X445        M2     O[        SU R                   -  5      eU R                  U5      nX4$ s  snnf s  snnf )rU  rP  )r   r   r   r   factorrG  r   rl  r  r   r	   )r   r   r  r  r  factors_monicr@  s          r   rV  DUP_Flint.factor_list  s    55;;!%%++VV]]_NE>EGgdaAuu-q1gGGGUU[[ VV]]_NEDKMGDAqzz!UU3Q7GMM G%~~'Av& & FNOO //'*~- H Ns   )E)Ec                    U R                  5       R                  5       nU VVs/ s H  u  p#UR                  5       U4PM     snn$ s  snnf rT  )r   rY  r   r  s       r   rY  DUP_Flint.factor_list_include	  s?     //#7793:<741!.."A&7<<<r  c                   ^  U VVs/ s H  u  p#UR                  5       U4PM     nnn[        USS9nU 4S jnU VVs/ s H  u  p#U" U5      U4PM     snn$ s  snnf s  snnf )z+Sort a list of factors to canonical order. T)multiplec                f   > TR                  TR                  U S S S2   5      TR                  5      $ rD  rb  )r  r   s    r   rY  )DUP_Flint._sort_factors.<locals>.<lambda> 	  s$    AFF1TrT7OQUU!Cr   )r   r	   )r   r  r  r  to_dup_flints   `    r   r	   DUP_Flint._sort_factors	  sa     29:QYY[!$:$7C29;'$!,q/1%';; ; <s
   AAc                B    U R                  5       R                  XX45      $ r~   )r   rd  ri  s        r   rd  DUP_Flint._isolate_real_roots#	  s     44SsIIr   c                B    U R                  5       R                  XX45      $ r~   )r   rc  ri  s        r   rc  !DUP_Flint._isolate_real_roots_sqf&	  s     883MMr   c                B    U R                  5       R                  XX45      $ r~   )r   rb  ri  s        r   rb  DUP_Flint._isolate_all_roots)	  s      33CcHHr   c                B    U R                  5       R                  XX45      $ r~   )r   ra  ri  s        r   ra   DUP_Flint._isolate_all_roots_sqf/	  s     77#LLr   c                D    U R                  5       R                  XX4U5      $ r~   )r   rt  ru  s         r   rt  DUP_Flint._refine_real_root2	  s     221TJJr   c                <    U R                  5       R                  XS9$ r  )r   r~  r}  s      r   r~  DUP_Flint.count_real_roots5	  s     11c1CCr   c                <    U R                  5       R                  XS9$ r  )r   r  r}  s      r   r  DUP_Flint.count_complex_roots9	  s     444FFr   c                $    U R                   (       + $ r  r  r   s    r   rN  DUP_Flint.is_zero=	  s     66zr   c                H    U R                   U R                  R                  :H  $ r  )r   r   r   r   s    r   r  DUP_Flint.is_oneB	  s     vv""r   c                <    U R                   R                  5       S:*  $ )r  r   r  r   s    r   r  DUP_Flint.is_groundG	       vv}}!##r   c                <    U R                   R                  5       S:*  $ )r  r   r  r   s    r   r  DUP_Flint.is_linearL	  rE  r   c                <    U R                   R                  5       S:*  $ )r  r2  r  r   s    r   r  DUP_Flint.is_quadraticQ	  rE  r   c                   ^ U R                   mTR                  5       S:  =(       d1    [        U4S j[        TR                  5       5       5       5      (       + $ )r  r   c              3  .   >#    U  H
  nTU   v   M     g 7fr~   r   )r   r8  frs     r   r   (DUP_Flint.is_monomial.<locals>.<genexpr>Z	  s     )L9KA"Q%9Ks   )r   rZ  anyr  )r   rL  s    @r   r  DUP_Flint.is_monomialV	  s<     VVyy{QLc)Lryy{9K)L&L"LLr   c                P    U R                  5       U R                  R                  :H  $ r  )rL  r   r   r   s    r   r  DUP_Flint.is_monic\	  s     ttv""r   c                6    U R                  5       R                  $ r  )r   r  r   s    r   r  DUP_Flint.is_primitivea	  s      ---r   c                6    U R                  5       R                  $ r  )r   r  r   s    r   r  DUP_Flint.is_homogeneousf	  s      ///r   c                    U R                   R                  U R                   R                  5       5      nUR                  5       S:*  $ )r  r   )r   r  r  rZ  r  s     r   r  DUP_Flint.is_sqfk	  s3     FFJJqvv((*+xxzQr   c                    U R                   R                  5       u  p[        U5      S:X  a  g[        U5      S:X  a  US   S   S:H  $ g)r  r   Tr   F)r   r&  r8  )r   rE  r  s      r   r  DUP_Flint.is_irreducibleq	  sF     VV]]_
w<1\Q1:a=A%%r   c                   U R                   R                  (       a   U R                  [        5      n U R                   R
                  (       a#  [        U R                  R                  5       5      $ g! [         a     gf = fr<  )	r   r   r   r   r   r   boolr   r  r   s    r   r  DUP_Flint.is_cyclotomic|	  s_     55;;IIbM 55;;,,.//  " s   A1 1
A>=A>r   r~   r  rM  r  r  )xr   r  r  r  r  r   r  rA  r  r   r   rF  rL  rG  r  r   r   r  r   r   r   r4  r5  rO  re  rm  rt  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r0  r5  rL  rQ  rW  r`  rd  rh  rl  rp  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r+  r2  r9  r@  rD  rH  rN  rQ  rV  rY  r	   rd  rc  rb  ra  rt  r~  r  r  rN  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r     s:   3
C'ID & &%   N N  03
2':"N1
"
9"
*"
"
"
"
#---.$6*222..:$$$623 '
,+3
&	I&*"2
P
O;/4?
0
)
5%N4
:'
+
1L3
0
H77?B
"
"
+D=
<	=<JNIMKDG   # # $ $ $ $ $ $ M M
 # # . . 0 0  
    r   r   c                D    [        [        XU5      [        XU5      X25      $ r~   )DMFr   numdenr   r   s       r   init_normal_DMFrb  	  s$    z#C(#C(#4 4r   c                  p   \ rS rSrSrSrS0S jr\S0S j5       rS r	\S0S j5       r
S	 rS
 rS rS rS1S jrS2S jr\S 5       r\S 5       rS rS rS rS rS rS rS rS rS rS r\rS3S jr\S 5       r \S 5       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-S* r.S+ r/S, r0S- r1S. r2S/r3g)4r^  i	  z'Dense Multivariate Fractions over `K`. r_  Nc                z    U R                  XU5      u  pEn[        XEX25      u  pEX@l        XPl        X0l        X l        g r~   )_parserc   r`  ra  r   r   )r   r   r   r   r`  ra  s         r   __init__DMF.__init__	  s8    Cc2#c1r   c                    U R                  XU5      u  pEn[        R                  U 5      nXFl        XVl        X6l        X&l        U$ r~   )re  r  r   r`  ra  r   r   )r   r   r   r   r`  ra  r  s          r   r   DMF.new	  s=    

3S1#nnS!
r   c                N    U R                  XR                  U R                  5      $ r~   )r   r   r   )r   r   s     r   r   DMF.ground_new	  s    xxXXtxx00r   c                   [        U[        5      (       a  Uu  pEUbC  [        U[        5      (       a  [        XCU5      n[        U[        5      (       a  [        XSU5      nO-[	        U5      u  pF[	        U5      u  pWXg:X  a  UnO[        S5      e[        XS5      (       a  [        S5      e[        XC5      (       a  [        X25      nO[        XSU5      (       a  [        XCU5      n[        XSU5      nOpUnUbS  [        U[        5      (       a  [        XCU5      nO>[        U[        5      (       d  [        UR                  U5      U5      nO[	        U5      u  pC[        X25      nXEU4$ )Nzinconsistent number of levelszfraction denominator)r   r:  r   r&   r   r~  r"   ZeroDivisionErrorr   r   r8   r   r    r   )r   r   r   r   r`  ra  num_levden_levs           r   re  
DMF._parse	  s5   c5!!HCc4(('#6Cc4(('#6C+C0+C0%!C$%DEE###'(>??###c'!#C00!#C0C!#C0CCc4(('#6C#C..$S[[%5s;C',##C}r   c                    U R                   R                  < SU R                  < SU R                  < SU R                  < S3$ )Nz((r   z), r   )r   r   r`  ra  r   r   s    r   r   DMF.__repr__	  s'    %&[[%9%9155!%%OOr   c                    [        U R                  R                  [        U R                  U R
                  5      [        U R                  U R
                  5      U R
                  U R                  45      $ r~   )r   r   r   r1   r`  r   ra  r   r   s    r   r   DMF.__hash__	  sO    Q[[))<quu+E&quu6 7 	7r   c                  ^ ^ [        U[        5      (       a  T R                  UR                  :w  a  [        ST < SU< 35      eT R                  UR                  :X  aE  T R                  T R                  T R
                  T R                  T R                  4UR                  4$ T R                  T R                  R                  UR                  5      snm[        T R                  UT R                  T5      [        T R                  UT R                  T5      4n[        UR                  X!R                  T5      nSSU4UU 4S jjnUTXSU4$ )z0Unify a multivariate fraction and a polynomial. r   r  TFc                   > U(       a  U(       d  X-  $ US-
  nU(       a  [        XUT5      u  pTR                  R                  X4TU5      $ r  rc   r   r   r`  ra  r  killr   r   r   s        r   r&  DMF.poly_unify.<locals>.per	  E    "w!Ag)#C=HC{{z3<<r   )r   r   r   rz   r   r&  r`  ra  r   r  r   r   r  r   r  r  r&  r   s   `     @r   
poly_unifyDMF.poly_unify	  s    !S!!QUUaee^#A$FGG55AEE>EE155!%%!%%@@uuaeekk!%%0HCQUUC4QUUC46A AFFC4A%)3 
= 
= SQ&&r   c                  ^ ^ [        U[        5      (       a  T R                  UR                  :w  a  [        ST < SU< 35      eT R                  UR                  :X  aQ  T R                  T R                  T R
                  T R                  T R                  4UR                  UR                  44$ T R                  T R                  R                  UR                  5      snm[        T R                  UT R                  T5      [        T R                  UT R                  T5      4n[        UR                  X!R                  T5      [        UR                  X!R                  T5      4nSSU4UU 4S jjnUTXSU4$ )z5Unify representations of two multivariate fractions. r   r  TFc                   > U(       a  U(       d  X-  $ US-
  nU(       a  [        XUT5      u  pTR                  R                  X4TU5      $ r  rw  rx  s        r   r&  DMF.frac_unify.<locals>.per
  r{  r   )
r   r^  r   rz   r   r&  r`  ra  r  r   r|  s   `     @r   
frac_unifyDMF.frac_unify	  s!   !S!!QUUaee^#A$FGG55AEE>EE155!%%!%%*+%%9 9 uuaeekk!%%0HCQUUC4QUUC46A QUUC4QUUC46A &*3 
= 
= SQ&&r   c                    U R                   U R                  peU(       a  U(       d  X-  $ US-  nU(       a  [        XXV5      u  pU R                  R	                  X4Xe5      $ )z.Create a DMF out of the given representation. r   )r   r   rc   r   r   )r   r`  ra  r  ry  r   r   s          r   r&  DMF.per
  sO    55!%%Swq!#C5HC{{z344r   c                p    U R                   nU(       a  U(       d  U$ US-  n[        XR                  U5      $ )r$  r   )r   r   r   )r   r   ry  r   s       r   half_perDMF.half_per,
  s0    ee
q3s##r   c                &    U R                  SX!5      $ r   r   r   s      r   r   DMF.zero8
      wwq###r   c                &    U R                  SX!5      $ r  r  r   s      r   r   DMF.one<
  r  r   c                8    U R                  U R                  5      $ )z Returns the numerator of ``f``. )r  r`  r   s    r   r  	DMF.numer@
      zz!%%  r   c                8    U R                  U R                  5      $ )z"Returns the denominator of ``f``. )r  ra  r   s    r   r  	DMF.denomD
  r  r   c                N    U R                  U R                  U R                  5      $ )z4Remove common factors from ``f.num`` and ``f.den``. )r&  r`  ra  r   s    r   r  
DMF.cancelH
  s    uuQUUAEE""r   c                    U R                  [        U R                  U R                  U R                  5      U R
                  SS9$ )r  Fr  )r&  r8   r`  r   r   ra  r   s    r   r  DMF.negL
  s0    uuWQUUAEE1551155uGGr   c                (    X R                  U5      -   $ r  )r   r  s     r   r  DMF.add_groundP
  s    <<?""r   c           	        [        U[        5      (       a'  U R                  U5      u  p#nu  pVn[        XVXrU5      UpOJU R	                  U5      u  p#pJnXsu  pVu  p[        [        X\X#5      [        XkX#5      X#5      n[        XlX#5      n	U" X5      $ )z0Add two multivariate fractions ``f`` and ``g``. )r   r   r}  rF   r  r9   r;   r   r  r   r   r&  F_numF_denr  r`  ra  r  G_numG_dens                r   r  DMF.addT
      a/0||A,Cc>E1"5=u"#,,q/Cca-.*NUNU'%9!%93EC%1C3}r   c           	        [        U[        5      (       a'  U R                  U5      u  p#nu  pVn[        XVXrU5      UpOJU R	                  U5      u  p#pJnXsu  pVu  p[        [        X\X#5      [        XkX#5      X#5      n[        XlX#5      n	U" X5      $ )z5Subtract two multivariate fractions ``f`` and ``g``. )r   r   r}  rG   r  r:   r;   r  s                r   r  DMF.subc
  r  r   c                    [        U[        5      (       a&  U R                  U5      u  p#nu  pVn[        XWX#5      UpO5U R	                  U5      u  p#pJnXsu  pVu  p[        X[X#5      n[        XlX#5      n	U" X5      $ )z5Multiply two multivariate fractions ``f`` and ``g``. r   r   r}  r;   r  r  s                r   r  DMF.mulr
  sy    a/0||A,Cc>E1u2E"#,,q/Cca-.*NUNU%1C%1C3}r   c           	     <   [        U[        5      (       aq  U R                  U R                  p2US:  a  X2U* pnU R	                  [        X!U R                  U R                  5      [        X1U R                  U R                  5      SS9$ [        S[        U5      -  5      e)r  r   Fr  r  )
r   r   r`  ra  r&  r=   r   r   r  r   )r   r8  r`  ra  s       r   r  DMF.pow
  s    auuaee1u!!556 6u  F F 6a@AAr   c                    [        U[        5      (       a&  U R                  U5      u  p#nu  pVnU[        XgX#5      pO5U R	                  U5      u  p#pJnXsu  pVu  p[        X\X#5      n[        XkX#5      n	U" X5      $ )z0Computes quotient of fractions ``f`` and ``g``. r  r  s                r   r  DMF.quo
  sy    a/0||A,Cc>E1ge9"#,,q/Cca-.*NUNU%1C%1C3}r   c                L    U R                  U R                  U R                  SS9$ )z&Computes inverse of a fraction ``f``. Fr  )r&  ra  r`  )r   checks     r   r  
DMF.invert
  s    uuQUUAEE%u00r   c                B    [        U R                  U R                  5      $ )z.Returns ``True`` if ``f`` is a zero fraction. r"   r`  r   r   s    r   rN  DMF.is_zero
  s     !%%''r   c                    [        U R                  U R                  U R                  5      =(       a+    [        U R                  U R                  U R                  5      $ )z.Returns ``True`` if ``f`` is a unit fraction. )r#   r`  r   r   ra  r   s    r   r  
DMF.is_one
  s>     quu- +aeeQUUAEE*	+r   c                "    U R                  5       $ r~   r  r   s    r   r  DMF.__neg__
  r  r   c                P   [        U[        [        45      (       a  U R                  U5      $ XR                  ;   a*  U R                  U R                  R                  U5      5      $  U R                  U R                  U5      5      $ ! [        [        [        4 a	    [        s $ f = fr~   )r   r   r^  r  r   r  r   r  r  r   r   r  r  s     r   r  DMF.__add__
  s~    a#s$$558O%%Z<<a 011	"55A''>+>? 	"!!	"s   'B B%$B%c                $    U R                  U5      $ r~   r  r  s     r   r  DMF.__radd__
  r  r   c                    [        U[        [        45      (       a  U R                  U5      $  U R                  U R	                  U5      5      $ ! [
        [        [        4 a	    [        s $ f = fr~   )	r   r   r^  r  r  r  r   r   r  r  s     r   r  DMF.__sub__
  Y    a#s$$558O	"55A''>+>? 	"!!	"   A A,+A,c                &    U * R                  U5      $ r~   r  r  s     r   r  DMF.__rsub__
  r  r   c                    [        U[        [        45      (       a  U R                  U5      $  U R                  U R	                  U5      5      $ ! [
        [        [        4 a	    [        s $ f = fr~   )	r   r   r^  r  r  r  r   r   r  r  s     r   r  DMF.__mul__
  r  r  c                $    U R                  U5      $ r~   r  r  s     r   r  DMF.__rmul__
  r  r   c                $    U R                  U5      $ r~   r  r  s     r   r  DMF.__pow__
  r  r   c                    [        U[        [        45      (       a  U R                  U5      $  U R                  U R	                  U5      5      $ ! [
        [        [        4 a	    [        s $ f = fr~   )	r   r   r^  r  r  r  r   r   r  r  s     r   r  DMF.__truediv__
  r  r  c                &    U R                  SS9U-  $ )NF)r  )r  )r   r  s     r   r  DMF.__rtruediv__
  s    {{{'))r   c                z    [        U[        5      (       a`  U R                  U5      u      nu  p4nU R                  UR                  :X  a+  [	        X@R                  U R
                  5      =(       a    X5:H  $  gU R                  U5      u      p&nU R                  UR                  :X  a  Xe:H  $  g! [         a     gf = fr   r   r   r}  r   r#   r   r  rz   r   r  rE  r  r  r  r  s          r   r  
DMF.__eq__
  s    	!S!!-.\\!_*1a%55AEE>$UEE1559HejH "  !"Q1aA55AEE>6M "
  ! 		s   A2B- 73B- -
B:9B:c                    [        U[        5      (       ae  U R                  U5      u      nu  p4nU R                  UR                  :X  a0  [	        X@R                  U R
                  5      =(       a    X5:H  (       + $  gU R                  U5      u      p&nU R                  UR                  :X  a  Xe:g  $  g! [         a     gf = f)NTr  r  s          r   __ne__
DMF.__ne__
  s    	!S!!-.\\!_*1a%55AEE> )% > M5:NN "  !"Q1aA55AEE>6M "
  ! 		s   A7B2 <3B2 2
B?>B?c                6    U R                  U5      u      p#nX4:  $ r~   r  r   r  rE  r  r  s        r   r  
DMF.__lt__      Q1aAur   c                6    U R                  U5      u      p#nX4:*  $ r~   r  r  s        r   r  
DMF.__le__      Q1aAvr   c                6    U R                  U5      u      p#nX4:  $ r~   r  r  s        r   r  
DMF.__gt__  r  r   c                6    U R                  U5      u      p#nX4:  $ r~   r  r  s        r   r
  
DMF.__ge__  r  r   c                L    [        U R                  U R                  5      (       + $ r~   r  r   s    r   r  DMF.__bool__  s    aeeQUU+++r   )ra  r   r   r`  r~   )TFr  r  )4r   r  r  r  r  r  rf  r  r   r   re  r   r   r}  r  r&  r  r   r   r  r  r  r  r  r  r  r  r  r  r   r  r  rN  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r   r   r   r^  r^  	  sA   1,I 
 
1 ) )VP7':'>5
$ $ $ $ $!!#H#	B E1 ( ( + +
	""""*"",r   r^  c                @    [        [        X5      [        X5      U5      $ r~   )ANPr   )r   modr   s      r   init_normal_ANPr    s     z####S* *r   c                    ^  \ rS rSrSrSrS r\U 4S j5       rS r	\
S 5       r\
S 5       rS	 rS
 rS rS rS rS rS rS r\S 5       r\S 5       rS rS rS rS rS rS r\S 5       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)S& r*S' r+S( r,\
S) 5       r-\
S* 5       r.\
S+ 5       r/S, r0S- r1S. r2S/ r3S0 r4S1 r5S2 r6S3 r7S4 r8S5 r9S6 r:S7 r;S8 r<S9 r=S: r>S; r?S< r@S= rAS> rBS?rCU =rD$ )@r  i  z1Dense Algebraic Number Polynomials over a field. )r   _modr   c                   [        U[        5      (       a  O[        U5      [        L a  [        [	        X5      US5      nO^[        U[
        5      (       a!  U Vs/ s H  oCR                  U5      PM     nnOUR                  U5      /n[        [        U5      US5      n[        U[        5      (       a  OB[        U[        5      (       a  [        [	        X#5      US5      nO[        [        U5      US5      nU R                  XU5      $ s  snf r   )	r   r   r   r   r%   r   r   r   r   )r   r   r  r   r  s        r   r   ANP.__new__"  s    c3#Y$mC-sA6C#t$$/23s!{{1~s3{{3'(inc1-Cc3T""mC-sA6Cinc1-Cwws%% 4s   Dc                   > UR                   UR                   s=:X  a  U:X  d  O  [        S5      e[        TU ]  U 5      nXl        X$l        X4l         U$ )NzInconsistent domain)r   r   superr   r   r  )r   r   r  r   r  r   s        r   r   ANP.new7  sF    377)c)455goc"
r   c                T    [         U R                  U R                  U R                  44$ r~   )r  r   r  r   r   s    r   rA  ANP.__reduce__D  s     TXXtxx222r   c                6    U R                   R                  5       $ r~   r   r   r   s    r   r   ANP.repG  s    yy  ""r   c                "    U R                  5       $ r~   )mod_to_listr   s    r   r  ANP.modK  s    !!r   c                    U R                   $ r~   r  r   s    r   to_DMP
ANP.to_DMPO      yyr   c                    U R                   $ r~   )r  r   s    r   
mod_to_DMPANP.mod_to_DMPR  r  r   c                N    U R                  XR                  U R                  5      $ r~   )r   r  r   r%  s     r   r&  ANP.perU  s    uuS&&!%%((r   c                    U R                   R                  < SU R                  R                  5       < SU R                  R                  5       < SU R
                  < S3$ r   )r   r   r   r   r  r   r   s    r   r   ANP.__repr__X  s8    #$;;#7#79I166>>K[]^]b]bccr   c                    [        U R                  R                  U R                  5       U R                  R                  5       U R
                  45      $ r~   )r   r   r   r   r  r   r   s    r   r   ANP.__hash__[  s5    Q[[))1::<9JAEERSSr   c                    U R                   U:X  a  U $ U R                  U R                  R                  U5      U R                  R                  U5      U5      $ )z.Convert ``f`` to a ``ANP`` over a new domain. )r   r   r   r   r  r   s     r   r   ANP.convert^  s?    55C<H55,affnnS.A3GGr   c                  ^^ [        U[        5      (       a  U R                  UR                  :w  a  [        SU < SU< 35      eU R                  UR                  :X  a9  U R                  U R
                  U R                  UR                  U R                  4$ U R                  R                  UR                  5      m[        U R                  U R                  T5      n[        UR                  UR                  T5      nTU R                  :w  a2  TUR                  :w  a"  [        U R                  U R                  T5      mO)TU R                  :X  a  U R                  mOUR                  mUU4S jnTXBUT4$ )z0Unify representations of two algebraic numbers. r   r  c                   > [        U TT5      $ r~   r  )r   r   r  s    r   rY  ANP.unify.<locals>.<lambda>~  s    c#sC0r   )	r   r  r  rz   r   r&  r   r  r   )r   r  r  r  r&  r   r  s        @@r   r  	ANP.unifye  s    !S!!QUUaee^#A$FGG55AEE>55!%%quu44%%++aee$CAEE155#.AAEE155#.Aaee|quu!!%%4!%%<%%C%%C0CCAs""r   c                   [        U[        5      (       a  U R                  UR                  :w  a  [        SU < SU< 35      eU R                  UR                  :w  aG  U R                  R                  UR                  5      nU R                  U5      n UR                  U5      nU R                  UR                  U R                  U R                  4$ r   )r   r  r  rz   r   r  r   r   r  s      r   	unify_ANPANP.unify_ANP  s    !S!!QVVqvv%5#A$FGG 55AEE>%%++aee$C		#A		#Avvqvvqvvquu,,r   c                    [        SX5      $ r   r  r   r  r   s      r   r   ANP.zero      1cr   c                    [        SX5      $ r  r  r
  s      r   r   ANP.one  r  r   c                6    U R                   R                  5       $ )r  )r   r
  r   s    r   r
  ANP.to_dict      vv~~r   c                    [        U R                  SU R                  5      nUR                  5        H"  u  p#U R                  R	                  U5      X'   M$     U$ )r  r   )r'   r   r   r  r  )r   r   r  r  s       r   r  ANP.to_sympy_dict  sE    !%%AEE*IIKDAUU^^A&CF   
r   c                6    U R                   R                  5       $ r  r  r   s    r   r   ANP.to_list  r  r   c                6    U R                   R                  5       $ )z5Return ``f.mod`` as a list with native coefficients. )r  r   r   s    r   r  ANP.mod_to_list  r  r   c                ~    U R                  5        Vs/ s H  oR                  R                  U5      PM     sn$ s  snf )r  )r   r   r  r  s     r   r  ANP.to_sympy_list  s+    ,-IIK9Kq"K999s   $:c                6    U R                   R                  5       $ r#  )r   r   r   s    r   r   ANP.to_tuple  s     vv  r   c           
     f    [        [        [        [        UR                  U5      5      5      X#5      $ r~   )r  r   r   r  r   )r   r   r  r   s       r   r   ANP.from_list  s$    9T#ckk3"7893DDr   c                V    U R                  U R                  R                  U5      5      $ r  )r&  r   r  r  s     r   r  ANP.add_ground       uuQVV&&q)**r   c                V    U R                  U R                  R                  U5      5      $ r  )r&  r   r  r  s     r   r  ANP.sub_ground  r   r   c                V    U R                  U R                  R                  U5      5      $ )z3Multiply ``f`` by an element of the ground domain. )r&  r   r  r  s     r   r  ANP.mul_ground  r   r   c                V    U R                  U R                  R                  U5      5      $ )z6Quotient of ``f`` by an element of the ground domain. )r&  r   r  r  s     r   r  ANP.quo_ground  r   r   c                T    U R                  U R                  R                  5       5      $ r~   )r&  r   r  r   s    r   r  ANP.neg  s    uuQVVZZ\""r   c                l    U R                  U5      u  p#pEU R                  UR                  U5      XE5      $ r~   )r  r   r  r   r  r  r  r  r   s         r   r  ANP.add  ,    QcuuQUU1Xs((r   c                l    U R                  U5      u  p#pEU R                  UR                  U5      XE5      $ r~   )r  r   r  r*  s         r   r  ANP.sub  r,  r   c                    U R                  U5      u  p#pEU R                  UR                  U5      R                  U5      XE5      $ r~   )r  r   r  r  r*  s         r   r  ANP.mul  s5    QcuuQUU1X\\#&11r   c                D   [        U[        5      (       d  [        S[        U5      -  5      eU R                  nU R
                  nUS:  a  UR                  U5      U* pU R                  UR                  U5      R                  U R                  5      X R                  5      $ )r  r  r   )r   r   r  r   r  r   r  r   r  r  r   )r   r8  r  r  s       r   r  ANP.pow  sz    !S!!6a@AAffFFq588C=1"q uuQUU1X\\!&&)366r   c                    U R                  U5      u  p#pEU R                  UR                  UR                  U5      5      R	                  U5      XE5      $ r~   )r  r   r  r  r  r*  s         r   r   	ANP.exquo  s@    QcuuQUU188C=)--c2C==r   c                p    U R                  U5      U R                  U R                  U R                  5      4$ r~   )r   r   r  r   r  s     r   r  ANP.div  s(    wwqz166!&&!%%000r   c                $    U R                  U5      $ r~   )r   r  s     r   r  ANP.quo  s    wwqzr   c                    U R                  U5      u  p#pEUR                  U5      u  pgUR                  (       a  U R                  XE5      $ [	        S5      e)Nr  )r  r  r  r   r   )r   r  r  r  r  r   r;  r  s           r   r  ANP.rem  sC    Qc||A8866###//r   c                6    U R                   R                  5       $ rK  )r   rL  r   s    r   rL  ANP.LC      vvyy{r   c                6    U R                   R                  5       $ rO  )r   rQ  r   s    r   rQ  ANP.TC   r=  r   c                .    U R                   R                  $ )z6Returns ``True`` if ``f`` is a zero algebraic number. )r   rN  r   s    r   rN  ANP.is_zero  s     vv~~r   c                .    U R                   R                  $ )z6Returns ``True`` if ``f`` is a unit algebraic number. )r   r  r   s    r   r  
ANP.is_one	  s     vv}}r   c                .    U R                   R                  $ r  )r   r  r   s    r   r  ANP.is_ground  s     vvr   c                    U $ r~   r   r   s    r   __pos__ANP.__pos__  s    r   c                "    U R                  5       $ r~   r  r   s    r   r  ANP.__neg__  r  r   c                    [        U[        5      (       a  U R                  U5      $  U R                  R	                  U5      nU R                  U5      $ ! [         a	    [        s $ f = fr~   )r   r  r  r   r   r  r   r  r  s     r   r  ANP.__add__  Z    a558O	#a A <<?"  	"!!	"   A A'&A'c                $    U R                  U5      $ r~   r  r  s     r   r  ANP.__radd__#  r  r   c                    [        U[        5      (       a  U R                  U5      $  U R                  R	                  U5      nU R                  U5      $ ! [         a	    [        s $ f = fr~   )r   r  r  r   r   r  r   r  r  s     r   r  ANP.__sub__&  rM  rN  c                &    U * R                  U5      $ r~   r  r  s     r   r  ANP.__rsub__0  r  r   c                    [        U[        5      (       a  U R                  U5      $  U R                  R	                  U5      nU R                  U5      $ ! [         a	    [        s $ f = fr~   )r   r  r  r   r   r  r   r  r  s     r   r  ANP.__mul__3  rM  rN  c                $    U R                  U5      $ r~   r  r  s     r   r  ANP.__rmul__=  r  r   c                $    U R                  U5      $ r~   r  r  s     r   r  ANP.__pow__@  r  r   c                $    U R                  U5      $ r~   r  r  s     r   r  ANP.__divmod__C  r  r   c                $    U R                  U5      $ r~   r  r  s     r   r  ANP.__mod__F  r  r   c                    [        U[        5      (       a  U R                  U5      $  U R                  R	                  U5      nU R                  U5      $ ! [         a	    [        s $ f = fr~   )r   r  r  r   r   r  r   r  r  s     r   r  ANP.__truediv__I  rM  rN  c                b     U R                  U5      u  p#  nX#:H  $ ! [         a	    [        s $ f = fr~   r  rz   r  r   r  r  r  rE  s        r   r  
ANP.__eq__S  :    	"QJA!Q v ! 	"!!	"    ..c                b     U R                  U5      u  p#  nX#:g  $ ! [         a	    [        s $ f = fr~   rb  rc  s        r   r  
ANP.__ne__Z  re  rf  c                4    U R                  U5      u  p#  nX#:  $ r~   r  rc  s        r   r  
ANP.__lt__a      [[^
aur   c                4    U R                  U5      u  p#  nX#:*  $ r~   rj  rc  s        r   r  
ANP.__le__e      [[^
avr   c                4    U R                  U5      u  p#  nX#:  $ r~   rj  rc  s        r   r  
ANP.__gt__i  rl  r   c                4    U R                  U5      u  p#  nX#:  $ r~   rj  rc  s        r   r
  
ANP.__ge__m  ro  r   c                ,    [        U R                  5      $ r~   )r[  r   r   s    r   r  ANP.__bool__q  s    AFF|r   r   )Er   r  r  r  r  r  r   r  r   rA  r  r   r  r  r  r&  r   r   r   r  r  r   r   r
  r  r   r  r  r   r   r  r  r  r  r  r  r  r  r  r   r  r  r  rL  rQ  rN  r  r  rG  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  __classcell__)r   s   @r   r  r    s   ;'I&*  3 # # " ")dTH#:-           :! E E++++#))27>10        #### r   r  )r  
__future__r   sympy.external.gmpyr   sympy.utilities.exceptionsr   sympy.core.numbersr   sympy.core.sympifyr   sympy.polys.polyutilsr   r	   sympy.polys.domainsr
   r   r   sympy.polys.polyerrorsr   r   r   r   sympy.polys.densebasicr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   sympy.polys.densearithr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   sympy.polys.densetoolsrK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   sympy.polys.euclidtoolsrZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   sympy.polys.sqfreetoolsrd   re   rf   rg   rh   ri   rj   sympy.polys.factortoolsrk   rl   rm   rn   sympy.polys.rootisolationro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r   r   r   r   rb  r^  r  r  r   r   r   <module>r     sI   7 " , @ ! * C . .         0      4    "  ( ( (. .$ $ $ $
 7= EG+ GT"p pfA AH4
E,
k E,P*
U+ Ur   