
    EdR                        d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
Z
d Zd ZexZZexZZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdOdZd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd  Z(d! Z)d" Z*d# Z+d$ Z,d% Z-d& Z.d' Z/d( Z0d) Z1d* Z2d+ Z3d, Z4d- Z5d. Z6d/ Z7d0 Z8d1 Z9dPd3Z:dPd4Z;dPd5Z<d6 Z=d7 Z>d8 Z?d9 Z@d: ZAd; ZBd< ZCd= ZDd> ZEd? ZFd@ ZGdA ZHdB ZIdQdCZJdQdDZKdE ZLdF ZMdG ZNdOdHZOdI ZPdJ ZQdK ZRdL ZSdM ZTdN ZUdS )RzEBasic tools for dense recursive polynomials in ``K[x]`` or ``K[X]``.     )oo)igcd)monomial_minmonomial_div)monomial_keyNc                 $    | s|j         S | d         S )z
    Return leading coefficient of ``f``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import poly_LC

    >>> poly_LC([], ZZ)
    0
    >>> poly_LC([ZZ(1), ZZ(2), ZZ(3)], ZZ)
    1

    r   zerofKs     6lib/python3.11/site-packages/sympy/polys/densebasic.pypoly_LCr      s       vt    c                 $    | s|j         S | d         S )z
    Return trailing coefficient of ``f``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import poly_TC

    >>> poly_TC([], ZZ)
    0
    >>> poly_TC([ZZ(1), ZZ(2), ZZ(3)], ZZ)
    3

    r	   r   s     r   poly_TCr   !   s       vur   c                 T    |rt          | |          } |dz  }|t          | |          S )z
    Return the ground leading coefficient.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_ground_LC

    >>> f = ZZ.map([[[1], [2, 3]]])

    >>> dmp_ground_LC(f, 2, ZZ)
    1

       )dmp_LCdup_LCr   ur   s      r   dmp_ground_LCr   :   <       1aLL	Q   !Q<<r   c                 T    |rt          | |          } |dz  }|t          | |          S )z
    Return the ground trailing coefficient.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_ground_TC

    >>> f = ZZ.map([[[1], [2, 3]]])

    >>> dmp_ground_TC(f, 2, ZZ)
    3

    r   )dmp_TCdup_TCr   s      r   dmp_ground_TCr   Q   r   r   c                 *   g }|r4|                     t          |           dz
             | d         |dz
  }} |4| s|                     d           n%|                     t          |           dz
             t          |          t          | |          fS )a  
    Return the leading term ``c * x_1**n_1 ... x_k**n_k``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_true_LT

    >>> f = ZZ.map([[4], [2, 0], [3, 0, 0]])

    >>> dmp_true_LT(f, 1, ZZ)
    ((2, 0), 4)

    r   r   )appendlentupler   )r   r   r   monoms       r   dmp_true_LTr%   h   s      E
 SVVaZ   tQU1    !QSVVaZ   <<1%%r   c                 :    | st            S t          |           dz
  S )aB  
    Return the leading degree of ``f`` in ``K[x]``.

    Note that the degree of 0 is negative infinity (the SymPy object -oo).

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_degree

    >>> f = ZZ.map([1, 2, 0, 3])

    >>> dup_degree(f)
    3

    r   )r   r"   r   s    r   
dup_degreer(      s#    $  s
q66A:r   c                 V    t          | |          rt           S t          |           dz
  S )a{  
    Return the leading degree of ``f`` in ``x_0`` in ``K[X]``.

    Note that the degree of 0 is negative infinity (the SymPy object -oo).

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_degree

    >>> dmp_degree([[[]]], 2)
    -oo

    >>> f = ZZ.map([[2], [1, 2, 3]])

    >>> dmp_degree(f, 1)
    1

    r   )
dmp_zero_pr   r"   r   r   s     r   
dmp_degreer,      s-    * !Q s
1vvzr   c                     k    rt          |           S dz
  dz   ct          fd| D                       S )z4Recursive helper function for :func:`dmp_degree_in`.r   c                 4    g | ]}t          |          S  )_rec_degree_in).0cijvs     r   
<listcomp>z"_rec_degree_in.<locals>.<listcomp>   s'    8881a++888r   )r,   max)gr5   r3   r4   s    ```r   r0   r0      s]    Av  !Qq5!a%DAq888888Q888999r   c                     |st          | |          S |dk     s||k    rt          d|d|          t          | |d|          S )a6  
    Return the leading degree of ``f`` in ``x_j`` in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_degree_in

    >>> f = ZZ.map([[2], [1, 2, 3]])

    >>> dmp_degree_in(f, 0, 1)
    1
    >>> dmp_degree_in(f, 1, 1)
    2

    r   z
0 <= j <=  expected, got )r,   
IndexErrorr0   )r   r4   r   s      r   dmp_degree_inr<      sd    $   !Q1u CA CjAAAqqABBB!Q1%%%r   c                     t          ||         t          | |                    ||<   |dk    r!|dz
  |dz   }}| D ]}t          ||||           dS dS )z-Recursive helper for :func:`dmp_degree_list`.r   r   N)r7   r,   _rec_degree_list)r8   r5   r3   degsr2   s        r   r>   r>      sz    $q':a++,,DG1u ,1ua!e1 	, 	,AQ1d++++	, ,	, 	,r   c                 b    t            g|dz   z  }t          | |d|           t          |          S )a  
    Return a list of degrees of ``f`` in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_degree_list

    >>> f = ZZ.map([[1], [1, 2, 3]])

    >>> dmp_degree_list(f, 1)
    (1, 2)

    r   r   )r   r>   r#   )r   r   r?   s      r   dmp_degree_listrA      s5      C5!a%=DQ1d###;;r   c                 N    | r| d         r| S d}| D ]}|r n|dz  }| |d         S )z
    Remove leading zeros from ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.densebasic import dup_strip

    >>> dup_strip([0, 0, 1, 2, 3, 0])
    [1, 2, 3, 0]

    r   r   Nr/   )r   r3   cfs      r   	dup_striprD      sU      ! 	A   	EFAAQRR5Lr   c                     |st          |           S t          | |          r| S d|dz
  }}| D ]}t          ||          s n|dz  }|t          |           k    rt          |          S | |d         S )z
    Remove leading zeros from ``f`` in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.densebasic import dmp_strip

    >>> dmp_strip([[], [0, 1, 2], [1]], 1)
    [[0, 1, 2], [1]]

    r   r   N)rD   r*   r"   dmp_zero)r   r   r3   r5   r2   s        r   	dmp_striprG     s      ||!Q a!eqA  !Q 	EFAACFF{ {{ur   c                    t          |t                    s9|1|                    |          st          |d| d|j                  |dz
  hS |s|hS t                      }|D ]}|t          | ||dz   |          z  }|S )z*Recursive helper for :func:`dmp_validate`.Nz in z in not of type r   )
isinstancelistof_type	TypeErrordtypeset_rec_validate)r   r8   r3   r   levelsr2   s         r   rO   rO   8  s    a  	L1 	LAAAqqq!''JKKKAw s
 	4 	4AmAq!a%333FFr   c                 h    |st          |           S |dz
  t          fd| D             |          S )z(Recursive helper for :func:`_rec_strip`.r   c                 0    g | ]}t          |          S r/   )
_rec_strip)r1   r2   ws     r   r6   z_rec_strip.<locals>.<listcomp>Q  s#    444Az!Q''444r   )rD   rG   )r8   r5   rT   s     @r   rS   rS   J  sE     ||	AA4444444a888r   c                     t          | | d|          }|                                }|st          | |          |fS t          d          )at  
    Return the number of levels in ``f`` and recursively strip it.

    Examples
    ========

    >>> from sympy.polys.densebasic import dmp_validate

    >>> dmp_validate([[], [0, 1, 2], [1]])
    ([[1, 2], [1]], 1)

    >>> dmp_validate([[1], 1])
    Traceback (most recent call last):
    ...
    ValueError: invalid data structure for a multivariate polynomial

    r   z4invalid data structure for a multivariate polynomial)rO   poprS   
ValueError)r   r   rP   r   s       r   dmp_validaterX   T  sZ    $ 1aA&&F

A D!Q""BD D 	Dr   c                 T    t          t          t          |                               S )a  
    Compute ``x**n * f(1/x)``, i.e.: reverse ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_reverse

    >>> f = ZZ.map([1, 2, 3, 0])

    >>> dup_reverse(f)
    [3, 2, 1]

    )rD   rJ   reversedr'   s    r   dup_reverser[   q  s       T(1++&&'''r   c                      t          |           S )a  
    Create a new copy of a polynomial ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_copy

    >>> f = ZZ.map([1, 2, 3, 0])

    >>> dup_copy([1, 2, 3, 0])
    [1, 2, 3, 0]

    rJ   r'   s    r   dup_copyr^     s      77Nr   c                 L    |st          |           S |dz
  fd| D             S )a  
    Create a new copy of a polynomial ``f`` in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_copy

    >>> f = ZZ.map([[1], [1, 2]])

    >>> dmp_copy(f, 1)
    [[1], [1, 2]]

    r   c                 0    g | ]}t          |          S r/   )dmp_copyr1   r2   r5   s     r   r6   zdmp_copy.<locals>.<listcomp>  s!    (((Xa^^(((r   r]   r   r   r5   s     @r   ra   ra     s;       Aww	AA((((Q((((r   c                      t          |           S )a2  
    Convert `f` into a tuple.

    This is needed for hashing. This is similar to dup_copy().

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_copy

    >>> f = ZZ.map([1, 2, 3, 0])

    >>> dup_copy([1, 2, 3, 0])
    [1, 2, 3, 0]

    r#   r'   s    r   dup_to_tuplerf     s    $ 88Or   c                 f    |st          |           S |dz
  t          fd| D                       S )aG  
    Convert `f` into a nested tuple of tuples.

    This is needed for hashing.  This is similar to dmp_copy().

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_to_tuple

    >>> f = ZZ.map([[1], [1, 2]])

    >>> dmp_to_tuple(f, 1)
    ((1,), (1, 2))

    r   c              3   8   K   | ]}t          |          V  d S N)dmp_to_tuplerb   s     r   	<genexpr>zdmp_to_tuple.<locals>.<genexpr>  s-      //a##//////r   re   rc   s     @r   rj   rj     sD    $  Qxx	AA////Q//////r   c                 :    t          fd| D                       S )z
    Normalize univariate polynomial in the given domain.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_normal

    >>> dup_normal([0, 1.5, 2, 3], ZZ)
    [1, 2, 3]

    c                 :    g | ]}                     |          S r/   )normalr1   r2   r   s     r   r6   zdup_normal.<locals>.<listcomp>  s#    ///qqxx{{///r   rD   r   s    `r   
dup_normalrq     s(     ////A///000r   c                 n    |st          |           S |dz
  t          fd| D             |          S )z
    Normalize a multivariate polynomial in the given domain.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_normal

    >>> dmp_normal([[], [0, 1.5, 2]], 1, ZZ)
    [[1, 2]]

    r   c                 2    g | ]}t          |          S r/   )
dmp_normalr1   r2   r   r5   s     r   r6   zdmp_normal.<locals>.<listcomp>  s%    777qz!Q**777r   )rq   rG   r   r   r   r5   s     `@r   rt   rt     sO       !Q	AA77777A777;;;r   c                 R    k    r| S t          fd| D                       S )a  
    Convert the ground domain of ``f`` from ``K0`` to ``K1``.

    Examples
    ========

    >>> from sympy.polys.rings import ring
    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_convert

    >>> R, x = ring("x", ZZ)

    >>> dup_convert([R(1), R(2)], R.to_domain(), ZZ)
    [1, 2]
    >>> dup_convert([ZZ(1), ZZ(2)], ZZ, R.to_domain())
    [1, 2]

    Nc                 <    g | ]}                     |          S r/   )convert)r1   r2   K0K1s     r   r6   zdup_convert.<locals>.<listcomp>  s'    9992::a,,999r   rp   )r   rz   r{   s    ``r   dup_convertr|     sD    & 
 ;"( ;99999a999:::r   c                     |st          |           S k    r| S |dz
  t          fd| D             |          S )a  
    Convert the ground domain of ``f`` from ``K0`` to ``K1``.

    Examples
    ========

    >>> from sympy.polys.rings import ring
    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_convert

    >>> R, x = ring("x", ZZ)

    >>> dmp_convert([[R(1)], [R(2)]], 1, R.to_domain(), ZZ)
    [[1], [2]]
    >>> dmp_convert([[ZZ(1)], [ZZ(2)]], 1, ZZ, R.to_domain())
    [[1], [2]]

    Nr   c                 4    g | ]}t          |          S r/   )dmp_convert)r1   r2   rz   r{   r5   s     r   r6   zdmp_convert.<locals>.<listcomp>7  s'    ===Q{1aR00===r   )r|   rG   )r   r   rz   r{   r5   s     ``@r   r   r     sm    &  &1b"%%%	 "( 	AA======!===qAAAr   c                 :    t          fd| D                       S )a$  
    Convert the ground domain of ``f`` from SymPy to ``K``.

    Examples
    ========

    >>> from sympy import S
    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_from_sympy

    >>> dup_from_sympy([S(1), S(2)], ZZ) == [ZZ(1), ZZ(2)]
    True

    c                 :    g | ]}                     |          S r/   )
from_sympyro   s     r   r6   z"dup_from_sympy.<locals>.<listcomp>I  s#    3331q||A333r   rp   r   s    `r   dup_from_sympyr   :  s(     3333333444r   c                 n    |st          |           S |dz
  t          fd| D             |          S )a/  
    Convert the ground domain of ``f`` from SymPy to ``K``.

    Examples
    ========

    >>> from sympy import S
    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_from_sympy

    >>> dmp_from_sympy([[S(1)], [S(2)]], 1, ZZ) == [[ZZ(1)], [ZZ(2)]]
    True

    r   c                 2    g | ]}t          |          S r/   )dmp_from_sympyru   s     r   r6   z"dmp_from_sympy.<locals>.<listcomp>`  s%    ;;;1~aA..;;;r   )r   rG   rv   s     `@r   r   r   L  sO      $a###	AA;;;;;;;;Q???r   c                     |dk     rt          d|z            |t          |           k    r|j        S | t          |           |z
           S )a  
    Return the ``n``-th coefficient of ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_nth

    >>> f = ZZ.map([1, 2, 3])

    >>> dup_nth(f, 0, ZZ)
    3
    >>> dup_nth(f, 4, ZZ)
    0

    r    'n' must be non-negative, got %i)r;   r"   r
   r(   )r   nr   s      r   dup_nthr   c  sS    $ 	1u $;a?@@@	
c!ff $vA"##r   c                     |dk     rt          d|z            |t          |           k    rt          |dz
            S | t          | |          |z
           S )a)  
    Return the ``n``-th coefficient of ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_nth

    >>> f = ZZ.map([[1], [2], [3]])

    >>> dmp_nth(f, 0, 1, ZZ)
    [3]
    >>> dmp_nth(f, 4, 1, ZZ)
    []

    r   r   r   )r;   r"   rF   r,   )r   r   r   r   s       r   dmp_nthr   }  s`    $ 	1u ';a?@@@	
c!ff 'AAq!!A%&&r   c                     |}|D ]d}|dk     rt          d|z            |t          |           k    r	|j        c S t          | |          }|t           k    rd}| ||z
           |dz
  }} e| S )a  
    Return the ground ``n``-th coefficient of ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_ground_nth

    >>> f = ZZ.map([[1], [2, 3]])

    >>> dmp_ground_nth(f, (0, 1), 1, ZZ)
    2

    r   z `n` must be non-negative, got %ir   r   )r;   r"   r
   r,   r   )r   Nr   r   r5   r   ds          r   dmp_ground_nthr     s      	
A 	# 	#q5 	#?!CDDD#a&&[ 	#6MMM1a  ARCx QU8QUqAAHr   c                 T    |r$t          |           dk    rdS | d         } |dz  }|$|  S )z
    Return ``True`` if ``f`` is zero in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.densebasic import dmp_zero_p

    >>> dmp_zero_p([[[[[]]]]], 4)
    True
    >>> dmp_zero_p([[[[[1]]]]], 4)
    False

    r   Fr   )r"   r+   s     r   r*   r*     sH      q66Q; 	5aD	Q   5Lr   c                 4    g }t          |           D ]}|g}|S )z
    Return a multivariate zero.

    Examples
    ========

    >>> from sympy.polys.densebasic import dmp_zero

    >>> dmp_zero(4)
    [[[[[]]]]]

    range)r   rr3   s      r   rF   rF     s,     	A1XX  CHr   c                 .    t          | |j        |          S )z
    Return ``True`` if ``f`` is one in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_one_p

    >>> dmp_one_p([[[ZZ(1)]]], 2, ZZ)
    True

    )dmp_ground_poner   s      r   	dmp_one_pr     s     15!$$$r   c                 ,    t          |j        |           S )z
    Return a multivariate one over ``K``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_one

    >>> dmp_one(2, ZZ)
    [[[1]]]

    )
dmp_groundr   )r   r   s     r   dmp_oner     s     aeQr   c                     ||st          | |          S |r$t          |           dk    rdS | d         } |dz  }|$|t          |           dk    S | |gk    S )z
    Return True if ``f`` is constant in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.densebasic import dmp_ground_p

    >>> dmp_ground_p([[[3]]], 3, 2)
    True
    >>> dmp_ground_p([[[4]]], None, 2)
    True

    Nr   Fr   )r*   r"   )r   r2   r   s      r   r   r     s     	  Q  !Q
 q66Q; 	5aD	Q	   	 1vv{QCxr   c                 X    | st          |          S t          |dz             D ]}| g} | S )z
    Return a multivariate constant.

    Examples
    ========

    >>> from sympy.polys.densebasic import dmp_ground

    >>> dmp_ground(3, 5)
    [[[[[[3]]]]]]
    >>> dmp_ground(1, -1)
    1

    r   )rF   r   )r2   r   r3   s      r   r   r   %  s?      {{1q5\\  CHr   c                 d    | sg S dk     r|j         g| z  S fdt          |           D             S )a  
    Return a list of multivariate zeros.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_zeros

    >>> dmp_zeros(3, 2, ZZ)
    [[[[]]], [[[]]], [[[]]]]
    >>> dmp_zeros(3, -1, ZZ)
    [0, 0, 0]

    r   c                 .    g | ]}t                    S r/   rF   )r1   r3   r   s     r   r6   zdmp_zeros.<locals>.<listcomp>S  s    000!000r   )r
   r   )r   r   r   s    ` r   	dmp_zerosr   =  sL       	1u 1xz0000eAhh0000r   c                 ^     |sg S dk     r g|z  S  fdt          |          D             S )a#  
    Return a list of multivariate constants.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_grounds

    >>> dmp_grounds(ZZ(4), 3, 2)
    [[[[4]]], [[[4]]], [[[4]]]]
    >>> dmp_grounds(ZZ(4), 3, -1)
    [4, 4, 4]

    r   c                 0    g | ]}t                    S r/   r   )r1   r3   r2   r   s     r   r6   zdmp_grounds.<locals>.<listcomp>l  s#    555aAq!!555r   r   )r2   r   r   s   ` `r   dmp_groundsr   V  sM       	1u 6s1u555555885555r   c                 J    |                     t          | ||                    S )a/  
    Return ``True`` if ``LC(f)`` is negative.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_negative_p

    >>> dmp_negative_p([[ZZ(1)], [-ZZ(1)]], 1, ZZ)
    False
    >>> dmp_negative_p([[-ZZ(1)], [ZZ(1)]], 1, ZZ)
    True

    )is_negativer   r   s      r   dmp_negative_pr   o  "      ==q!Q//000r   c                 J    |                     t          | ||                    S )a/  
    Return ``True`` if ``LC(f)`` is positive.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_positive_p

    >>> dmp_positive_p([[ZZ(1)], [-ZZ(1)]], 1, ZZ)
    True
    >>> dmp_positive_p([[-ZZ(1)], [ZZ(1)]], 1, ZZ)
    False

    )is_positiver   r   s      r   dmp_positive_pr     r   r   c                    | sg S t          |                                           g }}t          |t                    rCt	          |dd          D ]0}|                    |                     ||j                             1nG|\  }t	          |dd          D ]1}|                    |                     |f|j                             2t          |          S )a5  
    Create a ``K[x]`` polynomial from a ``dict``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_from_dict

    >>> dup_from_dict({(0,): ZZ(7), (2,): ZZ(5), (4,): ZZ(1)}, ZZ)
    [1, 0, 5, 0, 7]
    >>> dup_from_dict({}, ZZ)
    []

    r   )	r7   keysrI   intr   r!   getr
   rD   r   r   r   hks        r   dup_from_dictr     s       	qvvxx=="qA!S *q"b!! 	' 	'AHHQUU1af%%&&&&	' q"b!! 	* 	*AHHQUUA4(())))Q<<r   c                     | sg S t          |                                           g }}t          |dd          D ]0}|                    |                     ||j                             1t          |          S )a  
    Create a ``K[x]`` polynomial from a raw ``dict``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_from_raw_dict

    >>> dup_from_raw_dict({0: ZZ(7), 2: ZZ(5), 4: ZZ(1)}, ZZ)
    [1, 0, 5, 0, 7]

    r   )r7   r   r   r!   r   r
   rD   r   s        r   dup_from_raw_dictr     st      	qvvxx=="qA1b" # #	q!&!!""""Q<<r   c                 &   |st          | |          S | st          |          S i }|                                 D ].\  }}|d         |dd         }}||v r|||         |<   '||i||<   /t          |                                          |dz
  g }
}	}t          |dd          D ]`}|                    |          }|%|
                    t          ||	|                     >|
                    t          |	                     at          |
|          S )aF  
    Create a ``K[X]`` polynomial from a ``dict``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_from_dict

    >>> dmp_from_dict({(0, 0): ZZ(3), (0, 1): ZZ(2), (2, 1): ZZ(1)}, 1, ZZ)
    [[1, 0], [], [2, 3]]
    >>> dmp_from_dict({}, 0, ZZ)
    []

    r   r   Nr   )
r   rF   itemsr7   r   r   r   r!   dmp_from_dictrG   )r   r   r   coeffsr$   coeffheadtailr   r5   r   r   s               r   r   r     s.      #Q""" {{F		 + +u1XuQRRyd6> 	+!&F4L!5?F4LL&++--  !a%!qA1b" " "

1 	"HH]5!Q//0000HHXa[[!!!!Q??r   Fc                     | s|r	d|j         iS t          |           dz
  i }}t          d|dz             D ]}| ||z
           r| ||z
           ||f<   |S )z
    Convert ``K[x]`` polynomial to a ``dict``.

    Examples
    ========

    >>> from sympy.polys.densebasic import dup_to_dict

    >>> dup_to_dict([1, 0, 5, 0, 7])
    {(0,): 7, (2,): 5, (4,): 1}
    >>> dup_to_dict([])
    {}

    r   r   r   r
   r"   r   r   r   r
   r   resultr   s         r   dup_to_dictr     sv       af~A
BvA1a!e__ $ $QU8 	$QU8FA4LMr   c                     | s|r	d|j         iS t          |           dz
  i }}t          d|dz             D ]}| ||z
           r| ||z
           ||<   |S )z
    Convert a ``K[x]`` polynomial to a raw ``dict``.

    Examples
    ========

    >>> from sympy.polys.densebasic import dup_to_raw_dict

    >>> dup_to_raw_dict([1, 0, 5, 0, 7])
    {0: 7, 2: 5, 4: 1}

    r   r   r   r   s         r   dup_to_raw_dictr     st       16{A
BvA1a!e__ ! !QU8 	!!a%F1IMr   c                 ^   |st          | ||          S t          | |          r|rd|dz   z  |j        iS t          | |          |dz
  i }}}|t           k    rd}t          d|dz             D ]>}t          | ||z
           |          }|                                D ]\  }	}
|
||f|	z   <   ?|S )a  
    Convert a ``K[X]`` polynomial to a ``dict````.

    Examples
    ========

    >>> from sympy.polys.densebasic import dmp_to_dict

    >>> dmp_to_dict([[1, 0], [], [2, 3]], 1)
    {(0, 0): 3, (0, 1): 2, (2, 1): 1}
    >>> dmp_to_dict([], 0)
    {}

    r	   r   r   r   r   )r   r*   r
   r,   r   r   dmp_to_dictr   )r   r   r   r
   r   r5   r   r   r   expr   s              r   r   r   /  s      ,1ad++++!Q &D &a!eaf%%a##QUB&qARCx 1a!e__ ' '!a%!$$'')) 	' 	'JC!&FA4#:	' Mr   c                 Z   |dk     s|dk     s||k    s||k    rt          d|z            ||k    r| S t          | |          i }}|                                D ]B\  }}|||d|         ||         fz   ||dz   |         z   ||         fz   ||dz   d         z   <   Ct          |||          S )a  
    Transform ``K[..x_i..x_j..]`` to ``K[..x_j..x_i..]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_swap

    >>> f = ZZ.map([[[2], [1, 0]], []])

    >>> dmp_swap(f, 0, 1, 2, ZZ)
    [[[2], []], [[1, 0], []]]
    >>> dmp_swap(f, 1, 2, 2, ZZ)
    [[[1], [2, 0]], [[]]]
    >>> dmp_swap(f, 0, 2, 2, ZZ)
    [[[1, 0]], [[2, 0], []]]

    r   z0 <= i < j <= %s expectedNr   )r;   r   r   r   )	r   r3   r4   r   r   FHr   r   s	            r   dmp_swapr   R  s    ( 	1u A Q !a% 4q8999	
a q!bqAggii + +
U &+ 	
#bqb'SVI

a!eAg,q6)!a%&&k" 	# 	# Aq!!!r   c                     t          | |          i }}|                                D ]E\  }}dgt          |          z  }t          ||          D ]
\  }	}
|	||
<   ||t	          |          <   Ft          |||          S )at  
    Return a polynomial in ``K[x_{P(1)},..,x_{P(n)}]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_permute

    >>> f = ZZ.map([[[2], [1, 0]], []])

    >>> dmp_permute(f, [1, 0, 2], 2, ZZ)
    [[[2], []], [[1, 0], []]]
    >>> dmp_permute(f, [1, 2, 0], 2, ZZ)
    [[[1], []], [[2, 0], []]]

    r   )r   r   r"   zipr#   r   )r   Pr   r   r   r   r   r   new_expeps              r   dmp_permuter   u  s    $ q!bqAggii " "
U#c#hh,QKK 	 	DAqGAJJ!%..Aq!!!r   c                 z    t          | t                    st          | |          S t          |          D ]}| g} | S )z
    Return a multivariate value nested ``l``-levels.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_nest

    >>> dmp_nest([[ZZ(1)]], 2, ZZ)
    [[[[1]]]]

    )rI   rJ   r   r   )r   lr   r3   s       r   dmp_nestr     sI     a  !Q1XX  CHr   c                     s| S |s$| st                    S dz
  fd| D             S |dz
  fd| D             S )a  
    Return a multivariate polynomial raised ``l``-levels.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_raise

    >>> f = ZZ.map([[], [1, 2]])

    >>> dmp_raise(f, 2, 1, ZZ)
    [[[[]]], [[[1]], [[2]]]]

    r   c                 0    g | ]}t          |          S r/   r   )r1   r2   r   s     r   r6   zdmp_raise.<locals>.<listcomp>  s#    ...aAq!!...r   c                 4    g | ]}t          |          S r/   )	dmp_raise)r1   r2   r   r   r5   s     r   r6   zdmp_raise.<locals>.<listcomp>  s'    ///qYq!Q""///r   r   )r   r   r   r   r   r5   s    ` `@@r   r   r     s}        / 	A;;E....1....	AA//////A////r   c                     t          |           dk    rd| fS d}t          t          |                     D ]+}| | dz
           st          ||          }|dk    rd| fc S ,|| dd|         fS )a  
    Map ``x**m`` to ``y`` in a polynomial in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_deflate

    >>> f = ZZ.map([1, 0, 0, 1, 0, 0, 1])

    >>> dup_deflate(f, ZZ)
    (3, [1, 1, 1])

    r   r   N)r(   r   r"   r   )r   r   r8   r3   s       r   dup_deflater     s      !}} !t	A3q66]]  !ay 	AJJ6 	a4KKK	 a!f9r   c                 8   t          | |          r
d|dz   z  | fS t          | |          }dg|dz   z  }|                                D ]0}t          |          D ]\  }}t	          ||         |          ||<   1t          |          D ]\  }}|sd||<   t          |          }t          d |D                       r|| fS i }	|                                D ]1\  }
}d t          |
|          D             }||	t          |          <   2|t          |	||          fS )a5  
    Map ``x_i**m_i`` to ``y_i`` in a polynomial in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_deflate

    >>> f = ZZ.map([[1, 0, 0, 2], [], [3, 0, 0, 4]])

    >>> dmp_deflate(f, 1, ZZ)
    ((2, 3), [[1, 2], [3, 4]])

    )r   r   r   c              3   "   K   | ]
}|d k    V  dS r   Nr/   r1   bs     r   rk   zdmp_deflate.<locals>.<genexpr>  &      

a16





r   c                     g | ]
\  }}||z  S r/   r/   r1   ar   s      r   r6   zdmp_deflate.<locals>.<listcomp>  s     ,,,Aa1f,,,r   )
r*   r   r   	enumerater   r#   allr   r   r   )r   r   r   r   BMr3   mr   r   Ar   r   s                r   dmp_deflater     sU     !Q QU|QAqA	
QUAVVXX ! !aLL 	! 	!DAq!a==AaDD	! !  1 	AaDaA


1


 !t
AGGII  5,,Q,,,%((mAq!$$$$r   c                 6   d| D ]w}t          |          dk    rd| fc S d}t          t          |                    D ]-}|| dz
           st          ||          }|dk    rd| fc c S .t          |          xt	          fd| D                       fS )aP  
    Map ``x**m`` to ``y`` in a set of polynomials in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_multi_deflate

    >>> f = ZZ.map([1, 0, 2, 0, 3])
    >>> g = ZZ.map([4, 0, 0])

    >>> dup_multi_deflate((f, g), ZZ)
    (2, ([1, 2, 3], [4, 0]))

    r   r   c                 &    g | ]}|d d          S ri   r/   )r1   r   Gs     r   r6   z%dup_multi_deflate.<locals>.<listcomp><  s#    ---a!f---r   )r(   r   r"   r   r#   )polysr   r   r8   r3   r   s        @r   dup_multi_deflater     s    " 	
A  a==A 	e8OOOs1vv 	  	 AaR!V9 Q

AAv  %x  AJJe----e---....r   c                    |st          | |          \  }}|f|fS g dg|dz   z  }}| D ]|}t          ||          }t          ||          sE|                                D ]0}t	          |          D ]\  }	}
t          ||	         |
          ||	<   1|                    |           }t	          |          D ]\  }	}|sd||	<   t          |          }t          d |D                       r|| fS g }|D ]n}i }|	                                D ]1\  }}d t          ||          D             }||t          |          <   2|                    t          |||                     o|t          |          fS )a  
    Map ``x_i**m_i`` to ``y_i`` in a set of polynomials in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_multi_deflate

    >>> f = ZZ.map([[1, 0, 0, 2], [], [3, 0, 0, 4]])
    >>> g = ZZ.map([[1, 0, 2], [], [3, 0, 4]])

    >>> dmp_multi_deflate((f, g), 1, ZZ)
    ((2, 1), ([[1, 0, 0, 2], [3, 0, 0, 4]], [[1, 0, 2], [3, 0, 4]]))

    r   r   c              3   "   K   | ]
}|d k    V  dS r   r/   r   s     r   rk   z$dmp_multi_deflate.<locals>.<genexpr>f  r   r   c                     g | ]
\  }}||z  S r/   r/   r   s      r   r6   z%dmp_multi_deflate.<locals>.<listcomp>o  s     000TQ!q&000r   )r   r   r*   r   r   r   r!   r#   r   r   r   r   )r   r   r   r   r   r   r   r   r   r3   r   r   r   r   r   r   s                   r   dmp_multi_deflater   ?  s   "   **1tQwsAE{qA  1!Q 	)VVXX ) )%aLL ) )DAq!a==AaDD) 	
!  1 	AaDaA


1


 %x
A ) )		 	  	 HAu00SAYY000AAeAhhKK	q!Q''((((eAhh;r   c                     |dk    rt          d|z            |dk    s| s| S | d         g}| dd         D ]8}|                    |j        g|dz
  z             |                    |           9|S )a  
    Map ``y`` to ``x**m`` in a polynomial in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_inflate

    >>> f = ZZ.map([1, 1, 1])

    >>> dup_inflate(f, 3, ZZ)
    [1, 0, 0, 1, 0, 0, 1]

    r   z'm' must be positive, got %sr   N)r;   extendr
   r!   )r   r   r   r   r   s        r   dup_inflater   w  s      	Av =7!;<<<Av Q dVF122  qvhA&'''eMr   c                   	 |st          | |                   S |         dk    rt          d|         z            |dz
  |dz   c		fd| D             } | d         g}| dd         D ]R}t          d|                   D ]$}|                    t	          	                     %|                    |           S|S )z)Recursive helper for :func:`dmp_inflate`.r   z!all M[i] must be positive, got %sr   c           	      6    g | ]}t          |          S r/   )_rec_inflate)r1   r2   r   r   r4   rT   s     r   r6   z _rec_inflate.<locals>.<listcomp>  s)    222!,q!Q1
%
%222r   N)r   r;   r   r!   rF   )
r8   r   r5   r3   r   r   r   _r4   rT   s
    `  `   @@r   r   r     s     '1adA&&&tqy E<qtCDDDq5!a%DAq2222222q222AdVF122  q!A$ 	' 	'AMM(1++&&&&eMr   c                     |st          | |d         |          S t          d |D                       r| S t          | ||d|          S )a3  
    Map ``y_i`` to ``x_i**k_i`` in a polynomial in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_inflate

    >>> f = ZZ.map([[1, 2], [3, 4]])

    >>> dmp_inflate(f, (2, 3), 1, ZZ)
    [[1, 0, 0, 2], [], [3, 0, 0, 4]]

    r   c              3   "   K   | ]
}|d k    V  dS r   r/   )r1   r   s     r   rk   zdmp_inflate.<locals>.<genexpr>  r   r   )r   r   r   )r   r   r   r   s       r   dmp_inflater     s\       '1adA&&&


1


 +Aq!Q***r   c                    |rt          | d|          rg | |fS g t          | |          }}t          d|dz             D ]8}|                                D ]}||         r n|                    |           9|sg | |fS i } |                                D ];\  }}t          |          }t          |          D ]}||= || t          |          <   <|t          |          z  }|t          | ||          |fS )a[  
    Exclude useless levels from ``f``.

    Return the levels excluded, the new excluded ``f``, and the new ``u``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_exclude

    >>> f = ZZ.map([[[1]], [[1], [2]]])

    >>> dmp_exclude(f, 2, ZZ)
    ([2], [[1], [1, 2]], 1)

    Nr   r   )r   r   r   r   r!   r   rJ   rZ   r#   r"   r   )r   r   r   Jr   r4   r$   r   s           r   dmp_excluder    s,   $  Qa(( 1ax{1a  qA1a!e__  VVXX 	 	EQx  HHQKKK 1ax
A		    uU! 	 	Aa%,,QKAmAq!$$a''r   c                     |s| S t          | |          i } }|                                D ]A\  }}t          |          }|D ]}|                    |d           || t	          |          <   B|t          |          z  }t          | ||          S )a  
    Include useless levels in ``f``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_include

    >>> f = ZZ.map([[1], [1, 2]])

    >>> dmp_include(f, [2], 1, ZZ)
    [[[1]], [[1], [2]]]

    r   )r   r   rJ   insertr#   r"   r   )r   r  r   r   r   r$   r   r4   s           r   dmp_includer    s       q!bqA		    uU 	 	ALLA%,,QKAAq!!!r   c                 0   t          | |          i }} |j        dz
  }|                                 D ]F\  }}|                                }|                                D ]\  }}	|r	|	|||z   <   |	|||z   <   G||z   dz   }
t	          ||
|j                  |
fS )a  
    Convert ``f`` from ``K[X][Y]`` to ``K[X,Y]``.

    Examples
    ========

    >>> from sympy.polys.rings import ring
    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_inject

    >>> R, x,y = ring("x,y", ZZ)

    >>> dmp_inject([R(1), x + 2], 0, R.to_domain())
    ([[[1]], [[1], [2]]], 2)
    >>> dmp_inject([R(1), x + 2], 0, R.to_domain(), front=True)
    ([[[1]], [[1, 2]]], 2)

    r   )r   ngensr   to_dictr   dom)r   r   r   frontr   r5   f_monomr8   g_monomr2   rT   s              r   
dmp_injectr    s    & q!bqA	!Aggii ) )
IIKK'')) 	) 	)JGQ )'('G#$$'('G#$$		) 	
A	AAqu%%q((r   c                    t          | |          i }} |j        }||j        z
  dz   }|                                 D ]I\  }}|r|d|         ||d         }
}	n|| d         |d|          }
}	|
|v r|||
         |	<   B|	|i||
<   J|                                D ]\  }} ||          ||<   t          ||dz
  |          S )z
    Convert ``f`` from ``K[X,Y]`` to ``K[X][Y]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_eject

    >>> dmp_eject([[[1]], [[1], [2]]], 2, ZZ['x', 'y'])
    [1, x + 2]

    r   N)r   r  r   r   )r   r   r   r  r   r   r5   r$   r2   r  r  s              r   	dmp_ejectr  ;  s     q!bqA	A	AGaAGGII 	& 	&q 	6$RaRy%)WGG$aRSSz51":WGa< 	&"#AgJw!1AgJJGGII  q1Q44%AE1%%%r   c                     t          | |          s| sd| fS d}t          |           D ]
}|s|dz  }
 || d|          fS )a  
    Remove GCD of terms from ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_terms_gcd

    >>> f = ZZ.map([1, 0, 1, 0, 0])

    >>> dup_terms_gcd(f, ZZ)
    (2, [1, 0, 1])

    r   r   N)r   rZ   )r   r   r3   r2   s       r   dup_terms_gcdr  _  sh      a|| 1 !t	Aa[[   	FAAa!f9r   c                    t          | ||          st          | |          r
d|dz   z  | fS t          | |          }t          t	          |                                           }t          d |D                       r|| fS i } |                                D ]\  }}|| t          ||          <   |t          | ||          fS )a$  
    Remove GCD of terms from ``f`` in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_terms_gcd

    >>> f = ZZ.map([[1, 0], [1, 0, 0], [], []])

    >>> dmp_terms_gcd(f, 1, ZZ)
    ((2, 1), [[1], [1, 0]])

    r   r   c              3   "   K   | ]
}|d k    V  dS )r   Nr/   )r1   r8   s     r   rk   z dmp_terms_gcd.<locals>.<genexpr>  r   r   )
r   r*   r   r   rJ   r   r   r   r   r   )r   r   r   r   r   r$   r   s          r   dmp_terms_gcdr  }  s      Q1 Aq!1!1 QU|QAqAd16688nn%A


1


 !t
A		 * *u$),ua
 
 !!mAq!$$$$r   c           
      &   t          | |          g }}|s7t          |           D ]&\  }}|s|                    |||z
  fz   |f           'nE|dz
  }t          |           D ]0\  }}|                    t	          |||||z
  fz                        1|S )z,Recursive helper for :func:`dmp_list_terms`.r   )r,   r   r!   r   _rec_list_terms)r8   r5   r$   r   termsr3   r2   rT   s           r   r  r    s    !QuA 
BaLL 	0 	0DAq LL%1q5(*A.////		0 EaLL 	B 	BDAqLLAuAx/?@@AAAALr   c                     d }t          | |d          }|sd|dz   z  |j        fgS ||S  ||t          |                    S )a  
    List all non-zero terms from ``f`` in the given order ``order``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_list_terms

    >>> f = ZZ.map([[1, 1], [2, 3]])

    >>> dmp_list_terms(f, 1, ZZ)
    [((1, 1), 1), ((1, 0), 1), ((0, 1), 2), ((0, 0), 3)]
    >>> dmp_list_terms(f, 1, ZZ, order='grevlex')
    [((1, 1), 1), ((1, 0), 1), ((0, 1), 2), ((0, 0), 3)]

    c                 .    t          | fdd          S )Nc                 &     | d                   S )Nr   r/   )termOs    r   <lambda>z.dmp_list_terms.<locals>.sort.<locals>.<lambda>  s    aaQjj r   T)keyreverse)sorted)r  r  s    `r   sortzdmp_list_terms.<locals>.sort  s"    e!8!8!8!8$GGGGr   r/   r   r   )r  r
   r   )r   r   r   orderr"  r  s         r   dmp_list_termsr$    sn    $H H H Aq"%%E (q1uqv&'' 0tE<..///r   c                 $   t          |           t          |          }}||k    r)||k    r|j        g||z
  z  |z   }n|j        g||z
  z  | z   } g }t          | |          D ]"\  }}	|                     |||	g|R             #t	          |          S )a8  
    Apply ``h`` to pairs of coefficients of ``f`` and ``g``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_apply_pairs

    >>> h = lambda x, y, z: 2*x + y - z

    >>> dup_apply_pairs([1, 2, 3], [3, 2, 1], h, (1,), ZZ)
    [4, 5, 6]

    )r"   r
   r   r!   rD   )
r   r8   r   argsr   r   r   r   r   r   s
             r   dup_apply_pairsr'    s      q663q66qAAv %q5 	%!a% 1$AA!a% 1$AFAq		 & &1aa1ntnnn%%%%Vr   c                    |st          | ||||          S t          |           t          |          |dz
  }}}||k    r5||k    rt          ||z
  ||          |z   }nt          ||z
  ||          | z   } g }	t          | |          D ],\  }
}|	                    t          |
|||||                     -t          |	|          S )aG  
    Apply ``h`` to pairs of coefficients of ``f`` and ``g``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dmp_apply_pairs

    >>> h = lambda x, y, z: 2*x + y - z

    >>> dmp_apply_pairs([[1], [2, 3]], [[3], [2, 1]], h, (1,), 1, ZZ)
    [[4], [5, 6]]

    r   )r'  r"   r   r   r!   dmp_apply_pairsrG   )r   r8   r   r&  r   r   r   r   r5   r   r   r   s               r   r)  r)    s       1q!Qa000!ffc!ffa!e!qAAv +q5 	+!a%A&&*AA!a%A&&*AFAq		 < <1oaAtQ::;;;;VQr   c                     t          |           }||k    r||z
  }nd}||k    r||z
  }nd}| ||         } | sg S | |j        g|z  z   S )z=Take a continuous subsequence of terms of ``f`` in ``K[x]``. r   )r"   r
   )r   r   r   r   r   r   r   s          r   	dup_slicer+    sq    AAAv EAv E	!A#A 	AF8A:~r   c                 *    t          | ||d||          S )z=Take a continuous subsequence of terms of ``f`` in ``K[X]``. r   )dmp_slice_in)r   r   r   r   r   s        r   	dmp_slicer.  )  s    1aAq)))r   c                 ~   |dk     s||k    rt          d|d|d|          |st          | |||          S t          | |          i }} |                                 D ]N\  }}||         }	|	|k     s|	|k    r|d|         dz   ||dz   d         z   }||v r||xx         |z  cc<   I|||<   Ot	          |||          S )zHTake a continuous subsequence of terms of ``f`` in ``x_j`` in ``K[X]``. r   -z <= j < r:   Nr   r   )r;   r+  r   r   r   )
r   r   r   r4   r   r   r8   r$   r   r   s
             r   r-  r-  .  s
   1u GA GjQQQ11EFFF %Aq!$$$q!bqA		 	 	u!Hq5 	5AF 	5"1"I$uQUVV}4EA: 	eHHHHHHHAeHHAq!!!r   c                     fdt          d| dz             D             }|d         s3                    t          j                            |d<   |d         3|S )a  
    Return a polynomial of degree ``n`` with coefficients in ``[a, b]``.

    Examples
    ========

    >>> from sympy.polys.domains import ZZ
    >>> from sympy.polys.densebasic import dup_random

    >>> dup_random(3, -10, 10, ZZ) #doctest: +SKIP
    [-2, -8, 9, -4]

    c                 `    g | ]*}                     t          j                            +S r/   )ry   randomrandint)r1   r   r   r   r   s     r   r6   zdup_random.<locals>.<listcomp>T  s1    DDDa!))FN1a((
)
)DDDr   r   r   )r   ry   r3  r4  )r   r   r   r   r   s    ``` r   
dup_randomr5  F  su     	EDDDDD5AE??DDDAd /yy1--..! d / Hr   ri   )NF)F)V__doc__sympy.core.numbersr   
sympy.corer   sympy.polys.monomialsr   r   sympy.polys.orderingsr   r3  r   r   r   r   r   r   r   r   r%   r(   r,   r0   r<   r>   rA   rD   rG   rO   rS   rX   r[   r^   ra   rf   rj   rq   rt   r|   r   r   r   r   r   r   r*   rF   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-  r5  r/   r   r   <module>r;     s   K K " ! ! ! ! !       < < < < < < < < . . . . . .   ,  *     .  .& & &<  .  6: : :& & &4, , ,  *  6  B  $9 9 9D D D D:( ( (&  &) ) )0  *0 0 021 1 1"< < <,; ; ;2B B B:5 5 5$@ @ @.$ $ $4' ' '4  @  2  *% % %"     "  <  01 1 126 6 621 1 1&1 1 1&  B  2) ) )X   6   2       F "  "  "F" " ">  .0 0 0@  B)% )% )%X$/ $/ $/N5 5 5p  <  ,+ + +2-( -( -(`" " "D") ") ") ")J!& !& !& !&H  <% % %B  &0 0 0 0@  @        F  ** * *
" " "0    r   