
    Цio                      % 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\S'   \S:X  a	  SSKr\\4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PolynomialErrorztuple[Domain, ...]_flint_domainsflintN c                     \ rS rSrSrSr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.S, r/SS- jr0SS. jr1S/ r2S0 r3S1 r4S2 r5S3 r6S4 r7S5 r8S6 r9S7 r:S8 r;S9 r<S: r=S; r>S< r?S= r@S> rAS? rBS@ rCSA rDSB rESC rFSD rGSE rHSF rISG rJSH rKSI rLSJ rMSK rNSL rOSM rPSN rQSO rRSP rSSQ rTSR rUSS rVST rWSU rXSV rYSW rZSX r[SY r\SSZ jr]S[ r^S\ r_S] r`S^ raS_ rbS` rcSa rdSb reSc rfSd rgSe rhSf riSg rjSSh jrkSi rlSSj jrmSk rnSSl jroSm rpSn rqSo rrSp rsSq rtSr ruSs rvSt rwSu rxSv rySw rzSx r{SSy jr|SSz jr}S{ r~S| rS} 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~   Nc                    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repdomlevs       V/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sympy/polys/polyclasses.py__new__DMP.__new__   sH    ;#C(HCC&& !849!DEEwws%%    c                    [         b&  US:X  a   U[        ;   a  [        R                  XU5      $ [        R                  XU5      $ Nr   )r}   r|   	DUP_Flint_new
DMP_Pythonr   s       r   r   DMP.new   s:     axC>1 ~~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                    [         bn  [        U [        5      (       aY  U R                  S:X  aI  U R                  [
        ;   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   sP     !Z((QUUaZAEE^<S }}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N)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
   int)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[        ;   a  U R                  U5      $ U R                  5       R                  U5      $ [	        U [        5      (       a:  U[        ;   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%%n$zz#&(11#66:&&n$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_list7  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_ringC  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_fieldG      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_exactK  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.sliceO  s*    uuQ88A>!<<a((r   c                    [         er   r   )r   r.  r/  s      r   r+  
DMP._sliceV  r   r   c                    [         er   r   r-  s       r   r,  DMP._slice_levY  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   r9  _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. r8  r:  )r   r9  r.  r<  s       r   r   
DMP.monoms`  r>  r?  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   r8  )is_zeror   r   r   _terms)r   r9  
zero_monoms      r   r;  	DMP.termsd  s@    99quuqy)J,--88%8((r   c                    [         er   r   r   r9  s     r   rF  
DMP._termsl  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_coeffso  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``. rM  r   rD  )r   r{   degree	enumerater   r   r/  ir   s       r   
all_monomsDMP.all_monomsy  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``. rM  r   rD  )r   r{   rQ  r   r   rR  r   rS  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   r\  	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   rj  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   rt  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   rw  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   r/  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_ground1  r   r   c                    [         er   r   r  s     r   r  DMP._sub_ground4  r   r   c                    [         er   r   r  s     r   r  DMP._mul_ground7  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._add@  r   r   c                    [         er   r   r  s     r   r  DMP._subC  r   r   c                    [         er   r   r  s     r   r  DMP._mulF  r   r   c                    [         er   r   r   s    r   r  DMP._sqrI  r   r   c                    [         er   r   r  s     r   r  DMP._powL  r   r   c                    [         er   r   r  s     r   r  	DMP._pdivO  r   r   c                    [         er   r   r  s     r   r  	DMP._premR  r   r   c                    [         er   r   r  s     r   r  	DMP._pquoU  r   r   c                    [         er   r   r  s     r   r  DMP._pexquoX  r   r   c                    [         er   r   r  s     r   r  DMP._div[  r   r   c                    [         er   r   r  s     r   r  DMP._rem^  r   r   c                    [         er   r   r  s     r   r  DMP._quoa  r   r   c                    [         er   r   r  s     r   r  
DMP._exquod  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   r0  s     r   rQ  
DMP.degreeg  s2    !S!!6a@AAyy|r   c                    [         er   r   r!  s     r   r   DMP._degreen  r   r   c                    [         ez$Returns a list of degrees of ``f``. r   r   s    r   degree_listDMP.degree_listq  r   r   c                    [         e#Returns the total degree of ``f``. r   r   s    r   total_degreeDMP.total_degreeu  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   )r,  lenr;  sumr   tupler   r   r   r   r   )	r   stdresult
new_symboltermdrT  ls	            r   
homogenizeDMP.homogenizey  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)rE  r   r   r0  )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   r/  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   rO  s     r   rN  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   r.  r0  s      r   	integrateDMP.integrate  sU    !S!!6a@AA!S!!6a@AA||A!!r   c                    [         er   r   rh  s      r   rg  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   _diffrh  s      r   diffDMP.diff  sT    !S!!6a@AA!S!!6a@AAwwq}r   c                    [         er   r   rh  s      r   ro  	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   ar0  s      r   evalDMP.eval  sh    !S!!6a@AAq/AEE/81<==55;;q$$771:r   c                    [         er   r   r   ry  s     r   rw  	DMP._eval  r   r   c                    [         er   r   rx  s      r   rv  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   ru  _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   ru  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   ru  _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   ru  _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   
includePRSrw  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.discriminant.  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.cofactors2  s    {{1~||Ar   c                    [         er   r   r  s     r   r  DMP._cofactors7  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._gcd?  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.lcmB  r  r   c                    [         er   r   r  s     r   r  DMP._lcmG  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   includerw  r  s        r   cancel
DMP.cancelJ  s3    {{1~$$Q''99Q<r   c                    [         er   r   r  s     r   r  DMP._cancelS  r   r   c                    [         er   r   r  s     r   r  DMP._cancel_includeV  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.truncY  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.monic`  r   r   c                    [         ez(Returns GCD of polynomial coefficients. r   r   s    r   contentDMP.contentd  r   r   c                    [         ez/Returns content and a primitive form of ``f``. r   r   s    r   	primitiveDMP.primitiveh  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.composel  s    {{1~zz!}r   c                    [         er   r   r  s     r   r  DMP._composeq  r   r   c                Z    U R                   (       a  [        S5      eU R                  5       $ ),Computes functional decomposition of ``f``. r  )r   ru  
_decomposer   s    r   	decomposeDMP.decomposet  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   ru  _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   ry  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   ru  r   
_transform)r   r  qr  Qrw  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   ru  _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   ru  _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   ru  _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   ru  _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   r)  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   ru  	_gff_listr   s    r   gff_listDMP.gff_list  s!    55=>>{{}r   c                    [         er   r   r   s    r   r0  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rB  r   rD  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rK  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   rT  rU  rV  rW  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   rT  rU  rV  rW  s        r   rY  DMP._isolate_all_roots  r   r   c                    [         er   r   r`  s        r   rX  DMP._isolate_all_roots_sqf  r   r   c                    [         er   r   r`  s        r   r[  DMP._isolate_real_roots  r   r   c                    [         er   r   r`  s        r   rZ  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rT  stepsrW  )r   r{   _refine_real_rootr   r2  trT  rj  rW  s         r   refine_rootDMP.refine_root  s7     55!CE E ""1SD"IIr   c                    [         er   r   rl  s         r   rk  DMP._refine_real_root  r   r   c                    [         e)<Return the number of real roots of ``f`` in ``[inf, sup]``. r   r   rU  rV  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   rt  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   rE  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z7Returns ``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_monic/  r~  r   c                    [         ezAReturns ``True`` if the GCD of the coefficients of ``f`` is one. r   r   s    r   is_primitiveDMP.is_primitive4  r~  r   c                    [         e):Returns ``True`` if ``f`` is linear in all its variables. r   r   s    r   	is_linearDMP.is_linear9  r~  r   c                    [         e)=Returns ``True`` if ``f`` is quadratic in all its variables. r   r   s    r   is_quadraticDMP.is_quadratic>  r~  r   c                    [         e8Returns ``True`` if ``f`` is zero or has only one term. r   r   s    r   is_monomialDMP.is_monomialC  r~  r   c                    [         e7Returns ``True`` if ``f`` is a homogeneous polynomial. r   r   s    r   is_homogeneousDMP.is_homogeneousH  r~  r   c                    [         ez:Returns ``True`` if ``f`` has no factors over its domain. r   r   s    r   is_irreducibleDMP.is_irreducibleM  r~  r   c                    [         e6Returns ``True`` if ``f`` is a cyclotomic polynomial. r   r   s    r   is_cyclotomicDMP.is_cyclotomicR  r~  r   c                "    U R                  5       $ r   )r  r   s    r   __abs__DMP.__abs__W      uuwr   c                "    U R                  5       $ r   r  r   s    r   __neg__DMP.__neg__Z  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__f      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__i  r  r  c                &    U * R                  U5      $ r   r  r  s     r   __rsub__DMP.__rsub__r      ||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__u  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   )rE  r   s    r   __bool__DMP.__bool__  s    99}r   r   FrD  r   r   T)FNNNFF)NNFNN)r   
__module____qualname____firstlineno____doc__	__slots__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"  r'  r1  r+  r,  r   r   r;  rF  rN  rU  rX  r]  r\  rd  rk  rq  rx  rt  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  rQ  r   r'  r,  r9  r?  rC  rH  rQ  rN  rW  r[  r_  rc  ri  rg  rp  ro  rz  rw  rv  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)  r1  r0  r7  r;  r?  rE  rH  rM  rP  r]  rY  rX  r[  rZ  rn  rk  ru  ry  rE  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      sH   3I& 	. 	.   
   & & 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  $ NF)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   rw  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      $ r*  )r.   r   r   r   r   )r   r.  r/  r   s       r   r+  DMP_Python._slice  s1    aee,vvc55!%%((r   c                    [        U R                  XX0R                  U R                  5      nU R	                  X@R                  U R                  5      $ r*  )r/   r   r   r   r   )r   r.  r/  r0  r   s        r   r,  DMP_Python._slice_lev  s7    1661EE1559vvc55!%%((r   Nc                V    [        U R                  U R                  U R                  US9$ )rC  r8  )r,   r   r   r   rJ  s     r   rF  DMP_Python._terms  s    affaeeQUU%@@r   c                    [        U R                  U R                  U R                  5      nU R	                  XR                  R                  U R                  5      $ r[  )rY   r   r   r   r   r   r   s     r   r\  DMP_Python._lift   s9    QVVQUUAEE*vvaAEE**r   c                    [        U R                  U R                  U R                  5      u  pXR	                  U5      4$ rb  )r(   r   r   r   r  ru  s      r   rd  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      $ )rh  rj  )r)   r   r   r   r   )r   rj  rw  r   s       r   rk  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      $ )ro  r=  )r*   r   r   r   r/  symbols)r   r   rj  rw  s       r   rq  DMP_Python.eject0  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   rv  rw  us       r   rt  DMP_Python._exclude6  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  ru  s      r   r  DMP_Python.terms_gcd@  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_groundE  &    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_groundI  rM  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_groundM  rM  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_groundQ  rM  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_groundU  '    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.absY  &    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]  rY  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._adda  ,    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._sube  r^  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._muli  r^  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.sqrm  rY  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._powq  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._pdivu  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._premz  ,    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~  rm  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  ri  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  r^  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  r^  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   r'  DMP_Python.degree_list  s    qvvquu--r   c                B    [        S U R                  5        5       5      $ )r+  c              3  8   #    U  H  n[        U5      v   M     g 7fr   r0  )r   r.  s     r   r   *DMP_Python.total_degree.<locals>.<genexpr>  s     .:a3q66:s   )maxr   r   s    r   r,  DMP_Python.total_degree  s    .188:...r   c                X    [        U R                  U R                  U R                  5      $ rB  )r   r   r   r   r   s    r   rC  DMP_Python.LC      QVVQUUAEE22r   c                X    [        U R                  U R                  U R                  5      $ rF  )r   r   r   r   r   s    r   rH  DMP_Python.TC  r  r   c                X    [        U R                  XR                  U R                  5      $ rK  )r   r   r   r   rO  s     r   rN  DMP_Python._nth  s    affa66r   c                X    [        U R                  U R                  U R                  5      $ rV  )rH   r   r   r   r   s    r   rW  DMP_Python.max_norm  s    AFFAEE15511r   c                X    [        U R                  U R                  U R                  5      $ rZ  )rI   r   r   r   r   s    r   r[  DMP_Python.l1_norm  s    166155!%%00r   c                X    [        U R                  U R                  U R                  5      $ r^  )rJ   r   r   r   r   s    r   r_  DMP_Python.l2_norm_squared  s    "166155!%%88r   c                    [        U R                  U R                  U R                  5      u  pXR	                  U5      4$ rb  )rK   r   r   r   r  )r   r   rw  s      r   rc  DMP_Python.clear_denoms  s.    #AFFAEE1559eeAhr   c           	     x    U R                  [        U R                  XU R                  U R                  5      5      $ )rf  )r  rL   r   r   r   rh  s      r   rg  DMP_Python._integrate  s)    uu%affaAEE155ABBr   c           	     x    U R                  [        U R                  XU R                  U R                  5      5      $ )rn  )r  rM   r   r   r   rh  s      r   ro  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   rw  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   ry  r0  r   s       r   rv  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   r2  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   r2  rm  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   r2  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   r^  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  r^  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cGrw  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  rV  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   contrw  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_list/  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._transform3  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._sturm7  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_bound?  r  r   c                B    [        U R                  U R                  5      $ r(  )ry   r   r   r   s    r   r)  &DMP_Python._mignotte_sep_bound_squaredC  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 r/  )rd   r   r   r  )r   r   r  s      r   r0  DMP_Python._gff_listG  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      $ r6  )re   r   r   r   r   r8  s     r   r7  DMP_Python.normK  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$ r:  )rg   r   r   r   r  r   )r   r2  r   r   s       r   r;  DMP_Python.sqf_normP  sJ    qvvquuaee4a%%(AEE!UUYY666r   c                v    U R                  [        U R                  U R                  U R                  5      5      $ r>  )r  rh   r   r   r   r   s    r   r?  DMP_Python.sqf_partU  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 rB  )ri   r   r   r   r  r   r   r   factorsr   r  s         r   rE  DMP_Python.sqf_listY  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 rB  )rj   r   r   r   r  r   r   r  r   r  s        r   rH  DMP_Python.sqf_list_include^  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 rK  )rm   r   r   r   r  )r   r   r  r   r  s        r   rM  DMP_Python.factor_listc  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 rK  )rn   r   r   r   r  r   r  r   r  s       r   rP  DMP_Python.factor_list_includeh  sB    )!&&!%%?+24741!%%(A7444s   Ac           	     B    [        U R                  U R                  XX4S9$ NrS  )rp   r   r   r`  s        r   r[  DMP_Python._isolate_real_rootsm  s    %affaee3ZZr   c           	     B    [        U R                  U R                  XX4S9$ r  )ro   r   r   r`  s        r   rZ  "DMP_Python._isolate_real_roots_sqfp  s    )!&&!%%Ss^^r   c           	     B    [        U R                  U R                  XX4S9$ r  )rr   r   r   r`  s        r   rY  DMP_Python._isolate_all_rootss  s    $QVVQUU#YYr   c           	     B    [        U R                  U R                  XX4S9$ r  )rq   r   r   r`  s        r   rX  !DMP_Python._isolate_all_roots_sqfv  s    (Cc]]r   c           
     D    [        U R                  XU R                  X4US9$ )Nri  )rs   r   r   rl  s         r   rk  DMP_Python._refine_real_rooty  s    #AFFA!%%STXYYr   c                @    [        U R                  U R                  XS9$ rs  rU  rV  )rt   r   r   rt  s      r   ru  DMP_Python.count_real_roots|  s    #AFFAEEsDDr   c                @    [        U R                  U R                  XS9$ rx  r  )ru   r   r   rt  s      r   ry  DMP_Python.count_complex_roots  s    &qvvquu#GGr   c                B    [        U R                  U R                  5      $ r|  )r"   r   r   r   s    r   rE  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   r=  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   )r/  r  r   s    r   r  DMP_Python.is_monomial  s     199;1$$r   c                &    U R                  5       SL$ )r  N)r?  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  rD  r  r	  )tr   r
  r  r  r  r  r  r   r  r  r   r   r   r   r   r   r   r+  r,  rF  r\  rd  rk  rq  rt  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,  rC  rH  rN  rW  r[  r_  rc  rg  ro  rw  rv  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  r7  r;  r?  rE  rH  rM  rP  r[  rZ  rY  rX  rk  ru  ry  r  rE  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  Nr;  )r   r   r   s    r   r   DUP_Flint.to_list  s    vv}}tt$$r   c                \    U[         ;   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   r<  DUP_Flint._flint_poly  s5    n$$$axx++C0	~r   c                    UR                   (       a  [        R                  $ UR                  (       a  [        R                  $ [        SU-  5      e)N%Domain %s is not supported with flint)is_ZZr}   	fmpz_polyis_QQ	fmpq_polyr   )r   r   s     r   rB  DUP_Flint._get_flint_poly_cls  s5    99??"YY??"FLMMr   c                |   UR                   (       a2  [        U[        R                  5      (       d   e[        R                  nOQUR                  (       a2  [        U[        R
                  5      (       d   e[        R
                  nO[        SU-  5      e[        R                  U 5      nX$l	        Xl
        X4l        U$ )z,Create a DMP from the given representation. rF  )rG  r   r}   rH  rI  rJ  r   r  r   r   r   r5  )r   r   r   r5  r  s        r   r=  DUP_Flint.from_rep  s     99c5??3333??DYYc5??3333??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   r=  r5  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      $ r,  )r1  r   r   s    r   r   DUP_Flint.to_tuple  s    QYY[!!r   c                j   U[         :X  aD  U R                  [        :X  a0  U R                  [        R
                  " U R                  5      U5      $ U[        :X  aA  U R                  [         :X  a-  U R                  5       R                  U5      R                  5       $ [        SU R                   SU 35      e)r/  zDUP_Flint: Cannot convert z to )r   r   r   r=  r}   rJ  r   r   r   r   r   r   s     r   r   DUP_Flint._convert  s    "9"::eooaff5s;;BY155B;??$--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      $ r*  )r   r   r=  r5  r   )r   r.  r/  r   s       r   r+  DUP_Flint._slice  s3    %zz!&&.!%%00r   c                    [         er*  r   r-  s       r   r,  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 )rC  Nlexr;  r8  )aliasrR  r   r   r   rF  )r   r9  r/  r   r;  s        r   rF  DUP_Flint._terms'  st    =EKK50,5affmmo,FM,FDA!itQi,FEM2; ??$++%+88 Ns   A<	A<c                    [         er[  r   r   s    r   r\  DUP_Flint._lift5  r~  r   c                    U R                   (       a  SU 4$ U R                  R                  5       u  pU4U R                  XR                  5      4$ )rc  )r   )rE  r   	deflationr=  r   )r   r   r/  s      r   rd  DUP_Flint.deflate:  sB     997Nvv!tQZZ55)))r   c                    [         erg  r   ri  s     r   rk  DUP_Flint.injectG  r~  r   c                    [         ern  r   rp  s      r   rq  DUP_Flint.ejectL  r~  r   c                    [         erC  r   r   s    r   rt  DUP_Flint._excludeQ  r~  r   c                    [         erG  r   r~  s     r   r}  DUP_Flint._permuteV  r~  r   c                d    U R                  5       R                  5       u  pXR                  5       4$ r  )r   r  r   ru  s      r   r  DUP_Flint.terms_gcd[  s+      **,.."""r   c                T    U R                  U R                  U-   U R                  5      $ r  r=  r   r   r  s     r   r  DUP_Flint._add_grounda      zz!&&1*aee,,r   c                T    U R                  U R                  U-
  U R                  5      $ r  ru  r  s     r   r  DUP_Flint._sub_grounde  rw  r   c                T    U R                  U R                  U-  U R                  5      $ r  ru  r  s     r   r  DUP_Flint._mul_groundi  rw  r   c                T    U R                  U R                  U-  U R                  5      $ r  ru  r  s     r   r  DUP_Flint._quo_groundm      zz!&&A+quu--r   c                    [        U R                  U5      u  p#U(       a  [        X5      eU R                  X R                  5      $ r  )divmodr   r   r=  r   )r   r   r
  r   s       r   r  DUP_Flint._exquo_groundq  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.absx  s!     $$&3355r   c                P    U R                  U R                  * U R                  5      $ r  ru  r   s    r   r  DUP_Flint.neg|  s    zz166'155))r   c                h    U R                  U R                  UR                  -   U R                  5      $ r  ru  r  s     r   r  DUP_Flint._add  #    zz!&&166/15511r   c                h    U R                  U R                  UR                  -
  U R                  5      $ r  ru  r  s     r   r  DUP_Flint._sub  r  r   c                h    U R                  U R                  UR                  -  U R                  5      $ r  ru  r  s     r   r  DUP_Flint._mul  r  r   c                T    U R                  U R                  S-  U R                  5      $ )r  r)  ru  r   s    r   r  DUP_Flint.sqr  r~  r   c                T    U R                  U R                  U-  U R                  5      $ rf  ru  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   )rQ  r  rC  r   r=  r   r   r   r7  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   rQ  rC  r   r=  r   )r   r   r7  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   r7  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   )rQ  r  rC  r   r   r=  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   r=  r   r  r   ri  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  ru  r  s     r   r  DUP_Flint._rem  r  r   c                h    U R                  U R                  UR                  -  U R                  5      $ r  ru  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   ri  s       r   r  DUP_Flint._exquo  s$    vvay%a++r   c                R    U R                   R                  5       nUS:X  a  [        nU$ )r  r;  )r   rQ  r   )r   r0  r7  s      r   r   DUP_Flint._degree  s"    FFMMO7Ar   c                $    U R                  5       4$ r&  r   r   s    r   r'  DUP_Flint.degree_list  s    r   c                "    U R                  5       $ r*  r  r   s    r   r,  DUP_Flint.total_degree  s    yy{r   c                P    U R                   U R                   R                  5          $ rB  r   rQ  r   s    r   rC  DUP_Flint.LC  s    vvaffmmo&&r   c                     U R                   S   $ )rG  r   r   r   s    r   rH  DUP_Flint.TC  s    vvayr   c                (    Uu  nU R                   U   $ r  r  )r   rP  r/  s      r   rN  DUP_Flint._nth  s    vvayr   c                >    U R                  5       R                  5       $ rV  )r   rW  r   s    r   rW  DUP_Flint.max_norm  s     ))++r   c                >    U R                  5       R                  5       $ rZ  )r   r[  r   s    r   r[  DUP_Flint.l1_norm  s     ((**r   c                >    U R                  5       R                  5       $ r^  )r   r_  r   s    r   r_  DUP_Flint.l2_norm_squared  s     0022r   c                    U R                   R                  5       nU R                  U R                  U R                   R	                  5       5      U R
                  5      nX4$ rb  )r   denomr=  r5  numerr   )r   r  r  s      r   rc  DUP_Flint.clear_denoms  s@    

166!&&,,.11559|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       $ )rf  r   )r.  r0  )	r   rI  r   rangeintegralr=  r   rg  r   r   r.  r0  r   rT  s        r   rg  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  
derivativer=  r   r  s        r   ro  DUP_Flint._diff   sC    AvvffqA.."C zz#uu%%r   c                @    U R                  5       R                  U5      $ r   )r   rw  r}  s     r   rw  DUP_Flint._eval  s     &&q))r   c                    [         er   r   rx  s      r   rv  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   xgcdr=  r   )r   r   r  r2  rm  s        r   r  DUP_Flint._gcdex  sP    &&++aff%azz!UU#QZZ55%91::a;OOOr   c                V   U R                   R                  (       aT  U R                  R                  UR                  5      u  p#nUS:w  a  [	        S5      eU R                  X0R                   5      $ U R                  5       R                  UR                  5       5      R                  5       $ )r  r   zero divisor)	r   rI  r   r  r   r=  r   r  r   )r   r   r  F_invr<  s        r   r  DUP_Flint._invert  st    55;;FFKK/MCax#N33::eUU++??$,,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._subresultants'  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_includePRS,  sD    "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._resultant1  s!     ++AOO,=>>r   c                >    U R                  5       R                  5       $ r  )r   r  r   s    r   r  DUP_Flint.discriminant5  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._cofactors9  s*    EE!H''!*aggaj((r   c                    U R                  U R                  R                  UR                  5      U R                  5      $ r  )r=  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  rC  r  )r   r   r8  s      r   r  DUP_Flint._lcmB  s|     a<<

++FF1IQVVAY'55>>	A  TTVaZAr   c                   U R                   UR                   s=:X  a  [        [        4;   d   e   eU R                   R                  (       a%  U R	                  5       u  p#UR	                  5       u  pEO.U R                   R
                  U p2UR                   R
                  UpTUR                  U5      nXF-  X&-  p$UR                  U5      nUR                  U5      UR                  U5      pSUR                  5       S:  nUR                  5       S:  n	U(       a'  U	(       a   UR                  5       UR                  5       pSO3U(       a  U* UR                  5       p4OU	(       a  U* UR                  5       pTXBX54$ )r  r   )r   r   r   rI  rc  r   r  r  r  rC  r  )
r   r   r  rw  r  r  cHHf_negg_negs
             r   r  DUP_Flint._cancelQ  s    uu)"b)))))55;;NN$EBNN$EBEEIIqEEIIq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_includep  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._truncu  s#     ''*7799r   c                @    U R                  U R                  5       5      $ r  )r  rC  r   s    r   r  DUP_Flint.monicy  s    qttv&&r   c                >    U R                  5       R                  5       $ r  )r   r  r   s    r   r  DUP_Flint.content}  s      ((**r   c                J    U R                  5       nU R                  U5      nX4$ r  )r  r  )r   r  prims      r   r  DUP_Flint.primitive  s#    yy{t$zr   c                l    U R                  U R                  UR                  5      U R                  5      $ r  ru  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  )r5  r   r   r=  r   )r   ry  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
  rw  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   r)  r   s    r   r)  %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   r1  r   )r   rw  r   r  s       r   r0  DUP_Flint._gff_list  s:    OO34::<A<41!.."A&<AAA   Ac                    [         er6  r   r   s    r   r7  DUP_Flint.norm  r~  r   c                    [         er:  r   r   s    r   r;  DUP_Flint.sqf_norm  r~  r   c                ^    U R                  U R                  U R                  5       5      5      $ r>  )r  r  ro  r   s    r   r?  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 rC  )r   )r   rE  r   r  s         r   rE  DUP_Flint.sqf_list  sI    *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   rH  r   r  s        r   rH  DUP_Flint.sqf_list_include  sB    //#444=3:<741!.."A&7<<<s   Ac                   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 )rL  rF  )
r   rG  r   factorr=  rI  rc  r  r   r	   )r   r   r  r   r  factors_monicr7  s          r   rM  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   )D7&)D=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 rK  )r   rP  r   r  s       r   rP  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      $ r:  rQ  )r   r   s    r   <lambda>)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   r[  r`  s        r   r[  DUP_Flint._isolate_real_roots  s     44SsIIr   c                B    U R                  5       R                  XX45      $ r   )r   rZ  r`  s        r   rZ  !DUP_Flint._isolate_real_roots_sqf  s     883MMr   c                B    U R                  5       R                  XX45      $ r   )r   rY  r`  s        r   rY  DUP_Flint._isolate_all_roots  s     33CcHHr   c                B    U R                  5       R                  XX45      $ r   )r   rX  r`  s        r   rX   DUP_Flint._isolate_all_roots_sqf	  s     77#LLr   c                D    U R                  5       R                  XX4U5      $ r   )r   rk  rl  s         r   rk  DUP_Flint._refine_real_root	  s     221TJJr   c                <    U R                  5       R                  XS9$ r
  )r   ru  rt  s      r   ru  DUP_Flint.count_real_roots	  s     11c1CCr   c                <    U R                  5       R                  XS9$ r  )r   ry  rt  s      r   ry  DUP_Flint.count_complex_roots	  s     444FFr   c                $    U R                   (       + $ r|  r  r   s    r   rE  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_one	  s     vv""r   c                <    U R                   R                  5       S:*  $ )r  r   r  r   s    r   r  DUP_Flint.is_ground	       vv}}!##r   c                <    U R                   R                  5       S:*  $ )r  r   r  r   s    r   r  DUP_Flint.is_linear	  r4  r   c                <    U R                   R                  5       S:*  $ )r  r)  r  r   s    r   r  DUP_Flint.is_quadratic#	  r4  r   c                6    U R                  5       R                  $ r  )r   r  r   s    r   r  DUP_Flint.is_monomial(	  s      ,,,r   c                P    U R                  5       U R                  R                  :H  $ r  )rC  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_primitive2	  s      ---r   c                6    U R                  5       R                  $ r  )r   r  r   s    r   r  DUP_Flint.is_homogeneous7	        ///r   c                6    U R                  5       R                  $ r  )r   r  r   s    r   r  DUP_Flint.is_sqf<	  s      '''r   c                6    U R                  5       R                  $ r  )r   r  r   s    r   r  DUP_Flint.is_irreducibleA	  rA  r   c                    U R                   R                  (       a#  [        U R                  R	                  5       5      $ U R                  5       R                  $ r  )r   rG  boolr   r  r   r   s    r   r  DUP_Flint.is_cyclotomicF	  s:     55;;,,.//??$222r   r~   r   r  rD  r  r	  )xr   r
  r  r  r  r   r  r7  r  r   r   r<  rB  r=  r  r   r   r   r   r   r   r+  r,  rF  r\  rd  rk  rq  rt  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,  rC  rH  rN  rW  r[  r_  rc  rg  ro  rw  rv  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  r7  r;  r?  rE  rH  rM  rP  r	   r[  rZ  rY  rX  rk  ru  ry  r  rE  r  r  r  r  r  r  r  r  r  r  r  r  r~   r   r   r   r     s7   3
C'ID & &%   N N  &3
2':"N1
"
9"
*"
"
"
"
#---.$6*222..:$$$623 '
,+3	I&*"2
P
O;/
4
?0)
5>4
:'+
1L3
0
H77?B
"
"
+D
=
<	=<JNIMKDG   # # $ $ $ $ $ $ - - # # . . 0 0 ( ( 0 0 3 3r   r   c                D    [        [        XU5      [        XU5      X25      $ r   )DMFr   numdenr   r   s       r   init_normal_DMFrN  O	  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)4rJ  iT	  z'Dense Multivariate Fractions over `K`. rK  Nc                z    U R                  XU5      u  pEn[        XEX25      u  pEX@l        XPl        X0l        X l        g r   )_parserc   rL  rM  r   r   )r   r   r   r   rL  rM  s         r   __init__DMF.__init__Y	  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   )rQ  r  r   rL  rM  r   r   )r   r   r   r   rL  rM  r  s          r   r   DMF.newb	  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_newo	  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   r1  r   r&   r   ru  r"   ZeroDivisionErrorr   r   r8   r   r    r   )r   r   r   r   rL  rM  num_levden_levs           r   rQ  
DMF._parser	  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   rL  rM  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   rL  r   rM  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   rL  rM  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  rL  rM  r   r   r   r   r   r   rw  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  rc  rd  s        r   r  DMF.frac_unify.<locals>.per	  rg  r   )
r   rJ  r   rz   r   r  rL  rM  r   r   rh  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   rL  rM  r  re  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   re  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.zero	      wwq###r   c                &    U R                  SX!5      $ r  rv  r   s      r   r   DMF.one 
  rx  r   c                8    U R                  U R                  5      $ )z Returns the numerator of ``f``. )rs  rL  r   s    r   r  	DMF.numer
      zz!%%  r   c                8    U R                  U R                  5      $ )z"Returns the denominator of ``f``. )rs  rM  r   s    r   r  	DMF.denom
  r}  r   c                N    U R                  U R                  U R                  5      $ )z4Remove common factors from ``f.num`` and ``f.den``. )r  rL  rM  r   s    r   r  
DMF.cancel
  s    uuQUUAEE""r   c                    U R                  [        U R                  U R                  U R                  5      U R
                  SS9$ )r  Fr  )r  r8   rL  r   r   rM  r   s    r   r  DMF.neg
  s0    uuWQUUAEE1551155uGGr   c                (    X R                  U5      -   $ r  )r   r  s     r   r  DMF.add_ground
  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   ri  rF   rn  r9   r;   r   r   r   r   r  F_numF_denr  rL  rM  rw  G_numG_dens                r   r  DMF.add
      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   ri  rG   rn  r:   r;   r  s                r   r  DMF.sub'
  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   ri  r;   rn  r  s                r   r  DMF.mul6
  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   rL  rM  r  r=   r   r   r  r   )r   r/  rL  rM  s       r   r  DMF.powD
  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.quoO
  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  rM  rL  )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"   rL  r   r   s    r   rE  DMF.is_zeroc
  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#   rL  r   r   rM  r   s    r   r  
DMF.is_oneh
  s>     quu- +aeeQUUAEE*	+r   c                "    U R                  5       $ r   r  r   s    r   r  DMF.__neg__n
  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   rJ  r  r   r  r   rs  r  r   r   r  r  s     r   r  DMF.__add__q
  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   rJ  r  rs  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   rJ  r  rs  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   rJ  r  rs  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   ri  r   r#   r   rn  rz   r   r   r<  r  r  r  rw  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   rn  r   r   r<  rw  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   )rM  r   r   rL  r   )TFr  r  )4r   r
  r  r  r  r  rR  r  r   r   rQ  r   r   ri  rn  r  rs  r   r   r  r  r  r  r  r  r  r  r  r  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   r   rJ  rJ  T	  sA   1,I 
 
1 ) )VP7':'>5
$ $ $ $ $!!#H#	B E1 ( ( + +
	""""*"",r   rJ  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   ry  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.new
  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   r7  ANP.__reduce__  s     TXXtxx222r   c                6    U R                   R                  5       $ r   r   r   r   s    r   r   ANP.rep  s    yy  ""r   c                "    U R                  5       $ r   )mod_to_listr   s    r   r  ANP.mod  s    !!r   c                    U R                   $ r   r  r   s    r   to_DMP
ANP.to_DMP      yyr   c                    U R                   $ r   )r  r   s    r   
mod_to_DMPANP.mod_to_DMP  r  r   c                N    U R                  XR                  U R                  5      $ r   )r   r  r   r  s     r   r  ANP.per  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__  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   r  ANP.unify.<locals>.<lambda>B  s    c#sC0r   )	r   r  r  rz   r   r  r   r   r   )r   r   rw  r  r  r   r  s        @@r   r   	ANP.unify)  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_ANPF  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.zeroS      1cr   c                    [        SX5      $ r  r  r  s      r   r   ANP.oneW  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_listh  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_listl  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_listp  s+    ,-IIK9Kq"K999s   $:c                6    U R                   R                  5       $ r  )r   r   r   s    r   r   ANP.to_tuplet  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   rw  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   r/  r  rw  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   rw  r  r  r   r2  r  s           r   r  ANP.rem  sC    Qc||A8866###//r   c                6    U R                   R                  5       $ rB  )r   rC  r   s    r   rC  ANP.LC      vvyy{r   c                6    U R                   R                  5       $ rF  )r   rH  r   s    r   rH  ANP.TC  r)  r   c                .    U R                   R                  $ )z6Returns ``True`` if ``f`` is a zero algebraic number. )r   rE  r   s    r   rE  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__  r9  r:  c                &    U * R                  U5      $ r   r  r  s     r   r  ANP.__rsub__  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__  r9  r:  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__  r  r   c                $    U R                  U5      $ r   r  r  s     r   r  ANP.__mod__
  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__  r9  r:  c                b     U R                  U5      u  p#  nX#:H  $ ! [         a	    [        s $ f = fr   r  rz   r  r   r   rw  r  r<  s        r   r  
ANP.__eq__  :    	"QJA!Q v ! 	"!!	"    ..c                b     U R                  U5      u  p#  nX#:g  $ ! [         a	    [        s $ f = fr   rN  rO  s        r   r  
ANP.__ne__  rQ  rR  c                4    U R                  U5      u  p#  nX#:  $ r   r  rO  s        r   r  
ANP.__lt__%      [[^
aur   c                4    U R                  U5      u  p#  nX#:*  $ r   rV  rO  s        r   r  
ANP.__le__)      [[^
avr   c                4    U R                  U5      u  p#  nX#:  $ r   rV  rO  s        r   r  
ANP.__gt__-  rX  r   c                4    U R                  U5      u  p#  nX#:  $ r   rV  rO  s        r   r  
ANP.__ge__1  r[  r   c                ,    [        U R                  5      $ r   )rG  r   r   s    r   r  ANP.__bool__5  s    AFF|r   r~   )Er   r
  r  r  r  r  r   r  r   r7  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  rC  rH  rE  r  r  r3  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{   __annotations__r}   r|   r   r   r   rN  rJ  r  r  r~   r   r   <module>rs     sQ   7 " , @ ! * C . .         0      4    "  ( ( (. .$ $ $ $
 # "7"XNEND+ DN"p pfH
3 H
3V4
E,
k E,P*
U+ Ur   