Ë
    7^(hrŒ  ã                   ó  — d Z ddlmZ ddlmZmZ ddlmZ ddlZ e	d«      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dNd„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„ Z9dOd2„Z:dOd3„Z;dOd4„Z<d5„ Z=d6„ Z>d7„ Z?d8„ Z@d9„ ZAd:„ ZBd;„ ZCd<„ ZDd=„ ZEd>„ ZFd?„ ZGd@„ ZHdA„ ZIdPdB„ZJdPdC„ZKdD„ ZLdE„ ZMdF„ ZNdNdG„ZOdH„ ZPdI„ ZQdJ„ ZRdK„ ZSdL„ ZTdM„ ZUy)QzEBasic tools for dense recursive polynomials in ``K[x]`` or ``K[X]``. é    )Úigcd)Úmonomial_minÚmonomial_div)Úmonomial_keyNz-infc                 ó(   — | 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     úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/polys/densebasic.pyÚpoly_LCr      s   € ñ  Ø�v‰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‰vˆà�‰uˆr   c                 óF   — |rt        | |«      } |dz  }|rŒ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   =   ó.   € ñ  Ü�1�a‹LˆØ	ˆQ‰ˆò ô �!�Q‹<Ðr   c                 óF   — |rt        | |«      } |dz  }|rŒ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   T   r   r   c                 óî   — g }|r*|j                  t        | «      dz
  «       | d   |dz
  }} |rŒ*| s|j                  d«       n|j                  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$   k   so   € ð  €Eá
Ø�‰”S˜“V˜a‘ZÔ Ø�‰t�Q˜‘Uˆ1ˆò ñ Ø�‰�Q�à�‰”S˜“V˜a‘ZÔ ä�‹<œ  1›Ð%Ð%r   c                 ó.   — | st         S t        | «      dz
  S )a?  
    Return the leading degree of ``f`` in ``K[x]``.

    Note that the degree of 0 is negative infinity (``float('-inf')``).

    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   )Úninfr!   ©r   s    r   Ú
dup_degreer(   ‰   s   € ñ$ ÜˆÜˆq‹6�A‰:Ðr   c                 óB   — t        | |«      rt        S t        | «      dz
  S )ay  
    Return the leading degree of ``f`` in ``x_0`` in ``K[X]``.

    Note that the degree of 0 is negative infinity (``float('-inf')``).

    Examples
    ========

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

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

    >>> 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ÔÜˆä�1‹v˜‰zÐr   c                 ól   ‡‡‡— ‰‰k(  rt        | ‰«      S ‰dz
  ‰dz   cŠŠt        ˆˆˆfd„| D «       «      S )z4Recursive helper function for :func:`dmp_degree_in`.r   c              3   ó:   •K  — | ]  }t        |‰‰‰«      –— Œ y ­w©N)Ú_rec_degree_in)Ú.0ÚcÚiÚjÚvs     €€€r   ú	<genexpr>z!_rec_degree_in.<locals>.<genexpr>Â   s   øè ø€ Ò5¨aŒ~˜a  A q×)Ñ5ùs   ƒ)r,   Úmax)Úgr5   r3   r4   s    ```r   r0   r0   »   s;   ú€ àˆA‚vÜ˜!˜QÓÐàˆq‰5�!�a‘%€D€A€qäÕ5°1Ô5Ó5Ð5r   c                 óp   — |st        | |«      S |dk  s||kD  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<   Å   sB   € ñ$ Ü˜!˜QÓÐØˆ1‚u��A’ÝºA¹qÐAÓBÐBä˜!˜Q  1Ó%Ð%r   c                 ó†   — t        ||   t        | |«      «      ||<   |dkD  r |dz
  |dz   }}| D ]  }t        ||||«       Œ yy)z-Recursive helper for :func:`dmp_degree_list`.r   r   N)r7   r,   Ú_rec_degree_list)r8   r5   r3   Údegsr2   s        r   r>   r>   ß   sW   € ä�$�q‘'œ: a¨Ó+Ó,€Dˆ�Gàˆ1‚uØ�1‰u�a˜!‘eˆ1ˆàò 	,ˆAÜ˜Q  1 dÕ+ñ	,ð r   c                 óN   — 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   ê   s+   € ô  ˆ6�1�q‘5‰>€DÜ�Q˜˜1˜dÔ#Ü�‹;Ðr   c                 óB   — | 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   N© )r   r3   Úcfs      r   Ú	dup_striprE   ÿ   sB   € ñ ��!’Øˆà	€Aàò ˆÙÙà�‰F‰Að	ð ˆQˆRˆ5€Lr   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)rE   r*   r!   Údmp_zero)r   r   r3   r5   r2   s        r   Ú	dmp_striprH     st   € ñ Ü˜‹|Ðä�!�QÔØˆàˆa�!‰e€q€Aàò ˆÜ˜!˜QÔÙà�‰F‰Að	ð 	ŒC�‹F‚{Ü˜‹{Ðà��ˆuˆr   c                 óæ   — t        |t        «      s6|�.|j                  |«      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`.z in z in not of type r   )Ú
isinstanceÚlistÚof_typeÚ	TypeErrorÚdtypeÚsetÚ_rec_validate)r   r8   r3   r   Úlevelsr2   s         r   rP   rP   ;  s|   € ä�aœÔØˆ= §¡¨1¤ÜºAºqÀ!Ç'Â'ÐJÓKÐKà�A‘ˆwˆÙØˆsˆ
ä“ˆàò 	4ˆAØ”m A q¨!¨a©%°Ó3Ñ3‰Fð	4ð ˆr   c           	      óx   — |st        | «      S |dz
  }t        | D �cg c]  }t        ||«      ‘Œ c}|«      S c c}w )z(Recursive helper for :func:`_rec_strip`.r   )rE   rH   Ú
_rec_strip)r8   r5   Úwr2   s       r   rS   rS   M  s:   € áÜ˜‹|Ðà	ˆA‰€Aä°Ö4¨A”z ! QÕ'Ò4°aÓ8Ð8ùÒ4s   œ7c                 ót   — t        | | d|«      }|j                  «       }|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)rP   ÚpoprS   Ú
ValueError)r   r   rQ   r   s       r   Údmp_validaterX   W  sF   € ô$ ˜1˜a  AÓ&€Fà�
‰
‹€AáÜ˜!˜QÓ Ð"Ð"äØBóDð 	Dr   c                 ó<   — 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]

    )rE   rK   Úreversedr'   s    r   Údup_reverser[   t  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]

    )rK   r'   s    r   Údup_copyr]   ‡  s   € ô  �‹7€Nr   c                 ód   — |st        | «      S |dz
  }| D �cg c]  }t        ||«      ‘Œ c}S c c}w )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   )rK   Údmp_copy)r   r   r5   r2   s       r   r_   r_   š  s3   € ñ  Ü�A‹wˆà	ˆA‰€Aà%&Ö( ŒX�a˜�^Ò(Ð(ùÒ(s   —-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_tuplerb   ²  s   € ô$ �‹8€Or   c                 óP   ‡— |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   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr/   )Údmp_to_tuple)r1   r2   r5   s     €r   r6   zdmp_to_tuple.<locals>.<genexpr>Ý  s   øè ø€ Ò/¨”˜a ×#Ñ/ùs   ƒra   )r   r   r5   s     @r   re   re   Ç  s+   ø€ ñ$ Ü�Q‹xˆØ	ˆA‰€AäÓ/¨QÔ/Ó/Ð/r   c                 ó\   — t        | D �cg c]  }|j                  |«      ‘Œ c}«      S c c}w )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, 2, 3], ZZ)
    [1, 2, 3]

    )rE   Únormal©r   r   r2   s      r   Ú
dup_normalri   à  s%   € ô ¨AÖ/ q�q—x‘x •{Ò/Ó0Ð0ùÒ/ó   Š)c           
      ó|   — |st        | |«      S |dz
  }t        | D �cg c]  }t        |||«      ‘Œ c}|«      S c c}w )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, 2]], 1, ZZ)
    [[1, 2]]

    r   )ri   rH   Ú
dmp_normal©r   r   r   r5   r2   s        r   rl   rl   ñ  sA   € ñ Ü˜!˜QÓÐà	ˆA‰€Aä°AÖ7¨q”z ! Q¨Õ*Ò7¸Ó;Ð;ùÒ7ó   �9c           	      óp   — |�||k(  r| S t        | D �cg c]  }|j                  ||«      ‘Œ c}«      S c c}w )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]

    )rE   Úconvert)r   ÚK0ÚK1r2   s       r   Údup_convertrs     s8   € ð& 
€~˜" š(Øˆä°aÖ9°˜2Ÿ:™: a¨Õ,Ò9Ó:Ð:ùÒ9s   “3c                 ó’   — |st        | ||«      S |�||k(  r| S |dz
  }t        | D �cg c]  }t        ||||«      ‘Œ c}|«      S c c}w )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]]

    r   )rs   rH   Údmp_convert)r   r   rq   rr   r5   r2   s         r   ru   ru      sU   € ñ& Ü˜1˜b "Ó%Ð%Ø	€~˜" š(Øˆà	ˆA‰€Aä¸!Ö=°Q”{ 1 a¨¨RÕ0Ò=¸qÓAÐAùÒ=s   §Ac                 ó\   — t        | D �cg c]  }|j                  |«      ‘Œ c}«      S c c}w )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

    )rE   Ú
from_sympyrh   s      r   Údup_from_sympyrx   =  s%   € ô °Ö3¨1�q—|‘| A•Ò3Ó4Ð4ùÒ3rj   c           
      ó|   — |st        | |«      S |dz
  }t        | D �cg c]  }t        |||«      ‘Œ c}|«      S c c}w )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   )rx   rH   Údmp_from_sympyrm   s        r   rz   rz   O  sA   € ñ Ü˜a Ó#Ð#à	ˆA‰€Aä¸Ö;°1”~ a¨¨AÕ.Ò;¸QÓ?Ð?ùÒ;rn   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~   f  sD   € ð$ 	ˆ1‚uÜÐ;¸aÑ?Ó@Ð@Ø	
Œc�!‹fŠØ�v‰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!   rG   r,   )r   r}   r   r   s       r   Údmp_nthr€   €  sL   € ð$ 	ˆ1‚uÜÐ;¸aÑ?Ó@Ð@Ø	
Œc�!‹fŠÜ˜˜A™‹Ðà”˜A˜qÓ! AÑ%Ñ&Ð&r   c                 ó¾   — |}|D ]U  }|dk  rt        d|z  «      ‚|t        | «      k\  r|j                  c S t        | |«      }|t        k(  rd}| ||z
     |dz
  }} ŒW | 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„   š  sx   € ð  	
€Aàò 	#ˆØˆqŠ5ÜÐ?À!ÑCÓDÐDØ”#�a“&Š[Ø—6‘6ŠMä˜1˜aÓ ˆAØ”DŠyØ�Ø�Q˜‘U‘8˜Q ™Uˆq‰Að	#ð €Hr   c                 óD   — |rt        | «      dk7  ry| d   } |dz  }|rŒ|  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*   º  s5   € ñ Üˆq‹6�QŠ;Øàˆa‰DˆØ	ˆQ‰ˆò ð ˆ5€Lr   c                 ó0   — 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   rG   rG   Ó  s*   € ð 	€Aä�1‹Xò ˆØˆC‰ðð €Hr   c                 ó0   — 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   € ô ˜˜1Ÿ5™5 !Ó$Ð$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   € ô �a—e‘e˜QÓÐr   c                 óŠ   — |�|st        | |«      S |rt        | «      dk7  ry| d   } |dz  }|rŒ|€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

    r   Fr   )r*   r!   )r   r2   r   s      r   rŠ   rŠ   
  s`   € ð 	€}™QÜ˜!˜QÓÐá
Üˆq‹6�QŠ;ØØˆa‰DˆØ	ˆQ‰ˆò	 ð 	€yÜ�1‹v˜‰{Ðà�Q�C‰xˆr   c                 óL   — | 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   )rG   r‡   )r2   r   r3   s      r   rŽ   rŽ   (  s6   € ñ Ü˜‹{Ðä�1�q‘5‹\ò ˆØˆC‰ðð €Hr   c                 ó‚   — | sg S |dk  r|j                   g| z  S t        | «      D �cg c]  }t        |«      ‘Œ c}S c c}w )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   )r	   r‡   rG   )r}   r   r   r3   s       r   Ú	dmp_zerosr“   @  s?   € ñ  Øˆ	àˆ1‚uØ—‘ˆx˜‰zÐä&+¨A£hÖ0 ”˜!•Ò0Ð0ùÒ0s   §<c                 óp   — |sg S |dk  r| g|z  S t        |«      D �cg c]  }t        | |«      ‘Œ c}S c c}w )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   )r‡   rŽ   )r2   r}   r   r3   s       r   Údmp_groundsr•   Y  s=   € ñ  Øˆ	àˆ1‚uØˆs�1‰uˆä+0°«8Ö5 a”˜A˜qÕ!Ò5Ð5ùÒ5s   �3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˜   r  ó   € ð  �=‰=œ q¨!¨QÓ/Ó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        | j                  «       «      g }}t        |t        «      rHt	        |dd«      D ]-  }|j                  | j                  ||j                  «      «       Œ/ t        |«      S |\  }t	        |dd«      D ].  }|j                  | j                  |f|j                  «      «       Œ0 t        |«      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   ÚkeysrJ   Úintr‡   r    Úgetr	   rE   ©r   r   r}   ÚhÚks        r   Údup_from_dictr¤   ˜  s²   € ñ  Øˆ	äˆq�v‰v‹x‹=˜"€q€Aä�!”SÔÜ�q˜"˜bÓ!ò 	'ˆAØ�H‰H�Q—U‘U˜1˜aŸf™fÓ%Õ&ð	'ô �Q‹<Ðð ‰ˆä�q˜"˜bÓ!ò 	*ˆAØ�H‰H�Q—U‘U˜A˜4 §¡Ó(Õ)ð	*ô �Q‹<Ðr   c                 óÐ   — | sg S t        | j                  «       «      g }}t        |dd«      D ]-  }|j                  | j	                  ||j
                  «      «       Œ/ t        |«      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	   rE   r¡   s        r   Údup_from_raw_dictr¦   ¹  s^   € ñ Øˆ	äˆq�v‰v‹x‹=˜"€q€Aä�1�b˜"Óò #ˆØ	�‰�—‘�q˜!Ÿ&™&Ó!Õ"ð#ô �Q‹<Ðr   c                 ó¸  — |st        | |«      S | st        |«      S i }| j                  «       D ]#  \  }}|d   |dd }}||v r	|||   |<   Œ||i||<   Œ% t        |j	                  «       «      |dz
  g }
}	}t        |dd«      D ]L  }|j                  |«      }|�|
j                  t        ||	|«      «       Œ3|
j                  t        |	«      «       ŒN t        |
|«      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¤   rG   Úitemsr7   rž   r‡   r    r    Údmp_from_dictrH   )r   r   r   Úcoeffsr#   ÚcoeffÚheadÚtailr}   r5   r¢   r£   s               r   r©   r©   Ò  sð   € ñ  Ü˜Q Ó"Ð"ÙÜ˜‹{Ðà€FàŸ™›	ò +‰ˆˆuØ˜1‘X˜u Q R˜yˆdˆà�6‰>Ø!&ˆF�4‰L˜Òà! 5˜?ˆF�4ŠLð+ô �&—+‘+“-Ó  ! a¡%¨ˆ!€q€Aä�1�b˜"Óò "ˆØ—
‘
˜1“ˆàÐØ�H‰H”] 5¨!¨QÓ/Õ0à�H‰H”X˜a“[Õ!ð"ô �Q˜‹?Ðr   c                 óœ   — | s|rd|j                   iS t        | «      dz
  i }}t        d|dz   «      D ]  }| ||z
     sŒ| ||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³   þ  sf   € ñ ‘Ø�a—f‘fˆ~Ðä�A“˜‘
˜B€v€Aä�1�a˜!‘e‹_ò $ˆØˆQ�‰U‹8Ø˜Q ™U™8ˆF�A�4ŠLð$ð €Mr   c                 óš   — | s|rd|j                   iS t        | «      dz
  i }}t        d|dz   «      D ]  }| ||z
     sŒ| ||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µ     sd   € ñ ‘Ø�1—6‘6ˆ{Ðä�A“˜‘
˜B€v€Aä�1�a˜!‘e‹_ò !ˆØˆQ�‰U‹8Ø˜!˜a™%™ˆF�1ŠIð!ð €Mr   c                 ó4  — |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 ]5  }t        | ||z
     |«      }|j                  «       D ]  \  }	}
|
||f|	z   <   Œ Œ7 |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·   2  sº   € ñ Ü˜1˜a dÔ+Ð+ä�!�QÔ™DØ�a˜!‘e‘˜aŸf™fÐ%Ð%ä˜a Ó# Q¨¡U¨Bˆ&€q€AàŒD‚yØˆä�1�a˜!‘e‹_ò 'ˆÜ˜˜!˜a™%™ !Ó$ˆàŸ'™'›)ò 	'‰JˆC�Ø!&ˆF�A�4˜#‘:Òñ	'ð'ð €Mr   c                 ó
  — |dk  s|dk  s
||kD  s||kD  rt        d|z  «      ‚||k(  r| S t        | |«      i }}|j                  «       D ]-  \  }}|||d| ||   fz   ||dz   | z   ||   fz   ||dz   d z   <   Œ/ t        |||«      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¼   U  sÈ   € ð( 	ˆ1‚u��A’˜˜Qš ! a¢%ÜÐ4°qÑ8Ó9Ð9Ø	
ˆaŠØˆä�q˜!Ó˜b€q€Aà—g‘g“iò +‰
ˆˆUð &+ð 	
ˆ#ˆbˆqˆ'�S˜‘V�IÑ
Ø
ˆa�!‰e�Aˆ,ñàˆq‰6ˆ)ñà˜!˜a™%˜&�kñ"ò 	#ð+ô
 ˜˜A˜qÓ!Ð!r   c                 óÔ   — t        | |«      i }}|j                  «       D ];  \  }}dgt        |«      z  }t        ||«      D ]
  \  }	}
|	||
<   Œ ||t	        |«      <   Œ= t        |||«      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Ã   x  s   € ô$ �q˜!Ó˜b€q€Aà—g‘g“iò "‰
ˆˆUØ�#”c˜#“h‘,ˆä˜˜Q“Kò 	‰DˆAˆqØˆG�AŠJð	ð "ˆŒ%�‹.Òð"ô ˜˜A˜qÓ!Ð!r   c                 ód   — 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]]]]

    )rJ   rK   rŽ   r‡   )r   Úlr   r3   s       r   Údmp_nestrÆ   —  s<   € ô �aœÔÜ˜!˜QÓÐä�1‹Xò ˆØˆC‰ðð €Hr   c           	      ó¼   — |s| S |s,| st        |«      S |dz
  }| D �cg c]  }t        ||«      ‘Œ c}S |dz
  }| D �cg c]  }t        ||||«      ‘Œ c}S c c}w c c}w )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   )rG   rŽ   Ú	dmp_raise)r   rÅ   r   r   r£   r2   r5   s          r   rÈ   rÈ   ®  sl   € ñ  ØˆáÙÜ˜A“;Ðà�‰Eˆà+,Ö. a”˜A˜qÕ!Ò.Ð.à	ˆA‰€Aà,-Ö/ qŒY�q˜!˜Q Õ"Ò/Ð/ùò	 /ùò 0s
   �A¼Ac                 ó²   — t        | «      dk  rd| fS d}t        t        | «      «      D ]#  }| | dz
     sŒt        ||«      }|dk(  sŒ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Ê   Î  st   € ô  �!ƒ}˜ÒØ�!ˆtˆà	€Aä”3�q“6‹]ò ˆØ�!��a‘ŠyØä��A‹Jˆà�‹6Ø�a�4ŠKðð ˆa‘�!�‰fˆ9Ðr   c                 ó   — t        | |«      r
d|dz   z  | fS t        | |«      }dg|dz   z  }|j                  «       D ]'  }t        |«      D ]  \  }}t	        ||   |«      ||<   Œ Œ) t        |«      D ]  \  }}|rŒ	d||<   Œ t        |«      }t        d„ |D «       «      r|| fS i }	|j                  «       D ]4  \  }
}t        |
|«      D ��cg c]
  \  }}||z  ‘Œ }}}||	t        |«      <   Œ6 |t        |	||«      fS c c}}w )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(  –— Œ y­w©r   NrC   ©r1   Úbs     r   r6   zdmp_deflate.<locals>.<genexpr>  ó   è ø€ Ò
�aˆ1��6Ñ
ùó   ‚)
r*   r·   rž   Ú	enumerater   r"   Úallr¨   r¾   r©   )r   r   r   rº   ÚBÚMr3   ÚmrÏ   r»   ÚAr«   Úar‚   s                 r   Údmp_deflaterÙ   ï  s(  € ô  �!�QÔØ�Q˜‘U‰|˜QˆÐä�A�qÓ€AØ	
ˆˆQ�‰U‰€Aà�V‰V‹Xò !ˆÜ˜a“Lò 	!‰DˆAˆqÜ˜˜!™˜a“=ˆAˆaŠDñ	!ð!ô ˜!“ò ‰ˆˆ1ÚØˆAˆaŠDðô 	ˆa‹€Aä
Ñ
˜1Ô
ÔØ�!ˆtˆà
€Aà—G‘G“Iò ‰ˆˆ5Ü!$ Q¨£×,™˜˜Aˆa�1‹fÐ,ˆÑ,ØˆŒ%�‹(Šðð Œm˜A˜q !Ó$Ð$Ð$ùó -s   Ã	C:c           
      ó  — d}| D ]`  }t        |«      dk  rd| fc S d}t        t        |«      «      D ]%  }|| dz
     sŒt        ||«      }|dk(  sŒd| fc c S  t        ||«      }Œb |t	        | D �cg c]
  }|dd|…   ‘Œ c}«      fS c c}w )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   N)r(   r‡   r!   r   r"   )Úpolysr   ÚGrÂ   r8   r3   s         r   Údup_multi_deflaterÝ     s©   € ð" 	
€Aàò ˆÜ�a‹=˜AÒØ�e�8ŠOàˆä”s˜1“v“ò 	 ˆAØ�a�R˜!‘V’9Øä�Q˜“
ˆAà�A‹vØ˜%�x”ð	 ô ��A‹J‰ðð" Œe eÖ- �a™˜!˜“fÒ-Ó.Ð.Ð.ùÒ-s   Á2B	
c                 ó’  — |st        | |«      \  }}|f|fS g dg|dz   z  }}| D ]e  }t        ||«      }t        ||«      s:|j                  «       D ]'  }t	        |«      D ]  \  }	}
t        ||	   |
«      ||	<   Œ Œ) |j                  |«       Œg t	        |«      D ]  \  }	}|rŒ	d||	<   Œ t        |«      }t        d„ |D «       «      r|| fS g }|D ]g  }i }|j                  «       D ]4  \  }}t        ||«      D ��cg c]
  \  }}||z  ‘Œ }}}||t        |«      <   Œ6 |j                  t        |||«      «       Œi |t        |«      fS c c}}w )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(  –— Œ y­wrÍ   rC   rÎ   s     r   r6   z$dmp_multi_deflate.<locals>.<genexpr>i  rÐ   rÑ   )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Ø   r‚   s                    r   Údmp_multi_deflaterà   B  sy  € ñ" Ü  ¨Ó*‰ˆˆ1Øˆt�Qˆwˆà�ˆs�A˜‘E‰{€q€Aàò ˆÜ˜˜1Óˆä˜!˜QÔØ—V‘V“Xò )�Ü% a›Lò )‘D�A�qÜ  !¡ a›=�A�a’Dñ)ð)ð 	
�‰��ðô ˜!“ò ‰ˆˆ1ÚØˆAˆaŠDðô 	ˆa‹€Aä
Ñ
˜1Ô
ÔØ�%ˆxˆà
€Aàò )ˆØˆàŸ™›	ò 	 ‰HˆAˆuÜ%(¨¨A£Y×0™T˜Q �!�q“&Ð0ˆAÑ0ØˆAŒe�A‹hŠKð	 ð 	
�‰”˜q ! QÓ'Õ(ð)ð Œe�A‹hˆ;Ðùó 1s   Ã6E
c                 óÄ   — |dk  rt        d|z  «      ‚|dk(  s| s| S | d   g}| dd D ]5  }|j                  |j                  g|dz
  z  «       |j                  |«       Œ7 |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ã   z  sx   € ð  	ˆA‚vÜÐ7¸!Ñ;Ó<Ð<ØˆA‚v‘QØˆà�‰dˆV€Fà�1�2�ò ˆØ�‰�q—v‘v�h  A¡Ñ&Ô'Ø�‰�eÕðð €Mr   c           
      óP  — |st        | ||   |«      S ||   dk  rt        d||   z  «      ‚|dz
  |dz   }}| D �cg c]  }t        |||||«      ‘Œ } }| d   g}| dd D ]A  }	t        d||   «      D ]  }
|j	                  t        |«      «       Œ |j	                  |	«       ŒC |S c c}w )z)Recursive helper for :func:`dmp_inflate`.r   z!all M[i] must be positive, got %sr   N)rã   r;   Ú_rec_inflater‡   r    rG   )r8   rÕ   r5   r3   r   rT   r4   r2   r²   r«   Ú_s              r   rå   rå   ˜  sÌ   € áÜ˜1˜a ™d AÓ&Ð&Øˆ�tˆq‚yÜÐ<¸qÀ¹tÑCÓDÐDàˆq‰5�!�a‘%€q€Aà/0Ö2¨!Œ,�q˜!˜Q  1Õ
%Ð2€AÐ2à�‰dˆV€Fà�1�2�ò ˆÜ�q˜!˜A™$“ò 	'ˆAØ�M‰Mœ( 1›+Õ&ð	'ð 	�‰�eÕð	ð €Mùò 	3s   ºB#c                 ól   — |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(  –— Œ y­wrÍ   rC   )r1   rÖ   s     r   r6   zdmp_inflate.<locals>.<genexpr>Á  rÐ   rÑ   )rã   rÓ   rå   )r   rÕ   r   r   s       r   Údmp_inflateré   ®  s@   € ñ  Ü˜1˜a ™d AÓ&Ð&ä
Ñ
˜1Ô
ÔØˆä˜A˜q ! Q¨Ó*Ð*r   c                 óž  — |rt        | d|«      rg | |fS g t        | |«      }}t        d|dz   «      D ]/  }|j                  «       D ]	  }||   sŒ	 Œ |j	                  |«       Œ1 |sg | |fS i } |j                  «       D ]1  \  }}t        |«      }t        |«      D ]  }||= Œ || t        |«      <   Œ3 |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¨   rK   rZ   r"   r!   r©   )r   r   r   ÚJrº   r4   r#   r«   s           r   Údmp_excluderì   Ç  s÷   € ñ$ ”˜Q  aÔ(Ø�1�aˆxˆàŒ{˜1˜aÓ €q€Aä�1�a˜!‘e‹_ò ˆØ—V‘V“Xò 	ˆEØ�Q‹xÙð	ð �H‰H�Q�Kðñ Ø�1�aˆxˆà
€AàŸ™›	ò  ‰ˆˆuÜ�U“ˆä˜!“ò 	ˆAØ�a‘ð	ð  ˆŒ%�‹,Šð ð ŒˆQ‹�K€AàŒm˜A˜q !Ó$ aÐ'Ð'r   c                 óð   — |s| S t        | |«      i } }|j                  «       D ]7  \  }}t        |«      }|D ]  }|j                  |d«       Œ || t	        |«      <   Œ9 |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¨   rK   Úinsertr"   r!   r©   )r   rë   r   r   rº   r#   r«   r4   s           r   Údmp_includerï   ÷  sˆ   € ñ  Øˆä�q˜!Ó˜b€q€AàŸ™›	ò  ‰ˆˆuÜ�U“ˆàò 	ˆAØ�L‰L˜˜AÕð	ð  ˆŒ%�‹,Šð ð ŒˆQ‹�K€Aä˜˜A˜qÓ!Ð!r   c                 ó$  — t        | |«      i }} |j                  dz
  }| j                  «       D ]@  \  }}|j                  «       }|j                  «       D ]  \  }}	|r	|	|||z   <   Œ|	|||z   <   Œ ŒB ||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˜!Ó˜b€q€Aà	�‰�!‰€Aà—g‘g“iò )‰
ˆ�Ø�I‰I‹KˆàŸ'™'›)ò 	)‰JˆG�QÙØ'(��'˜GÑ#Ò$à'(��'˜GÑ#Ò$ñ		)ð)ð 	
ˆA‰�‰	€Aä˜˜A˜qŸu™uÓ% qÐ(Ð(r   c                 óJ  — t        | |«      i }} |j                  }||j                  z
  dz   }| j                  «       D ]2  \  }}|r|d| ||d }
}	n|| d |d|  }
}	|
|v r	|||
   |	<   Œ,|	|i||
<   Œ4 |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˜!Ó˜b€q€Aà	�‰€AØ	ˆA�G‰G‰�a‰€Aà—G‘G“Iò 	&‰ˆˆqÙØ$ R a˜y¨%°°¨)�W‰Gà$ a R S˜z¨5°°1°"¨:�WˆGà�a‰<Ø"#ˆAˆg‰J�wÒà! 1˜ˆAˆgŠJð	&ð —G‘G“Iò ‰ˆˆqÙ�Q“4ˆˆ%Šðô ˜˜A ™E 1Ó%Ð%r   c                 ól   — t        | |«      s| sd| fS d}t        | «      D ]  }|s|dz  }Œ n || 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û   b  sS   € ô  ˆa�„|™1Ø�!ˆtˆà	€Aä�a‹[ò ˆÙØ�‰F‰Aáð	ð ˆa��!�ˆfˆ9Ðr   c                 ó:  — t        | ||«      st        | |«      r
d|dz   z  | fS t        | |«      }t        t	        |j                  «       «      Ž }t        d„ |D «       «      r|| fS i } |j                  «       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(  –— Œ y­w)r   NrC   )r1   r8   s     r   r6   z dmp_terms_gcd.<locals>.<genexpr>–  rÐ   rÑ   )
r   r*   r·   r   rK   rž   rÓ   r¨   r   r©   )r   r   r   rº   rÜ   r#   r«   s          r   Údmp_terms_gcdrþ   €  s§   € ô  �Q˜˜1Ô¤¨A¨qÔ!1Ø�Q˜‘U‰|˜QˆÐä�A�qÓ€AÜ”d˜1Ÿ6™6›8“nÐ%€Aä
Ñ
˜1Ô
ÔØ�!ˆtˆà
€AàŸ™›	ò *‰ˆˆuØ$)ˆŒ,�u˜aÓ
 Ò!ð*ð Œm˜A˜q !Ó$Ð$Ð$r   c           
      ó   — t        | |«      g }}|s2t        | «      D ]"  \  }}|sŒ	|j                  |||z
  fz   |f«       Œ$ |S |dz
  }t        | «      D ](  \  }}|j                  t	        |||||z
  fz   «      «       Œ* |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Ó €u€AáÜ˜a“Lò 	0‰DˆAˆqÙØà�L‰L˜% 1 q¡5 (Ñ*¨AÐ.Õ/ð		0ð €Lð �‰Eˆä˜a“Lò 	B‰DˆAˆqØ�L‰Lœ¨¨A¨u¸¸A¹°xÑ/?Ó@ÕAð	Bð €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   rC   )ÚtermÚOs    €r   ú<lambda>z.dmp_list_terms.<locals>.sort.<locals>.<lambda>Ç  s   ø€ ©a°°Q±«j€ r   T)ÚkeyÚreverse)Úsorted)r  r  s    `r   Úsortzdmp_list_terms.<locals>.sortÆ  s   ø€ Ü�eÓ!8À$ÔGÐGr   rC   r¯   r   )r   r	   r   )r   r   r   Úorderr  r  s         r   Údmp_list_termsr  ´  sQ   € ò$Hô ˜A˜q "Ó%€EáØ�q˜1‘u‘˜qŸv™vÐ&Ð'Ð'à€}Øˆá�Eœ<¨Ó.Ó/Ð/r   c                 ó  — t        | «      t        |«      }}||k7  r2||kD  r|j                  g||z
  z  |z   }n|j                  g||z
  z  | z   } g }t        | |«      D ]  \  }}	|j                   |||	g|¢­Ž «       Œ  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    rE   )
r   r8   r¢   Úargsr   r}   rÖ   r²   rØ   rÏ   s
             r   Údup_apply_pairsr  Ô  s–   € ô  ˆq‹6”3�q“6€q€AàˆA‚vØˆqŠ5Ø—‘�˜!˜a™%Ñ  1Ñ$‰Aà—‘�˜!˜a™%Ñ  1Ñ$ˆAà€Fä�A�q“	ò &‰ˆˆ1Ø�‰‘a˜˜1�n˜t’nÕ%ð&ô �VÓÐr   c                 ó>  — |st        | ||||«      S t        | «      t        |«      |dz
  }}}||k7  r,||kD  rt        ||z
  ||«      |z   }nt        ||z
  ||«      | z   } g }	t        | |«      D ]$  \  }
}|	j	                  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_pairsrH   )r   r8   r¢   r  r   r   r}   rÖ   r5   r²   rØ   rÏ   s               r   r  r  ô  s·   € ñ  Ü˜q ! Q¨¨aÓ0Ð0ä�!‹f”c˜!“f˜a !™eˆ!€q€AàˆA‚vØˆqŠ5Ü˜!˜a™%  AÓ&¨Ñ*‰Aä˜!˜a™%  AÓ&¨Ñ*ˆAà€Fä�A�q“	ò <‰ˆˆ1Ø�‰”o a¨¨A¨t°Q¸Ó:Õ;ð<ô �V˜QÓÐr   c                 óø   — t        | «      }||k\  r||z
  }nd}||k\  r||z
  }nd}| || } | r8| d   |j                  k(  r&| j                  d«       | r| d   |j                  k(  rŒ&| sg S | |j                  g|z  z   S )z=Take a continuous subsequence of terms of ``f`` in ``K[x]``. r   )r!   r	   rV   )r   rÖ   r}   r   r£   rÕ   r‚   s          r   Ú	dup_slicer    s�   € äˆA‹€AàˆA‚vØ�‰E‰àˆØˆA‚vØ�‰E‰àˆà	ˆ!ˆAˆ€Aá
��!‘˜Ÿ™’Ø	�‰ˆaŒñ ��!‘˜Ÿ™“ñ Øˆ	à�A—F‘F�8˜A‘:‰~Ð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   € ä˜˜1˜a  A qÓ)Ð)r   c                 ó2  — |dk  s||kD  rt        d|›d|›d|›�«      ‚|st        | |||«      S t        | |«      i }} | j                  «       D ]<  \  }}||   }	|	|k  s|	|k\  r|d| dz   ||dz   d z   }||v r||xx   |z  cc<   Œ8|||<   Œ> t	        |||«      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  4  sÂ   € àˆ1‚u��A’ÝºQÂÁ1ÐEÓFÐFáÜ˜˜A˜q !Ó$Ð$ä�q˜!Ó˜b€q€AàŸ™›	ò 	‰ˆˆuØ�!‰HˆàˆqŠ5�A˜’FØ˜"˜1�I Ñ$ u¨Q°©U¨V }Ñ4ˆEà�A‰:Øˆe‹H˜ÑŒHàˆAˆeŠHð	ô ˜˜A˜qÓ!Ð!r   c           	      óô   — t        d| dz   «      D �cg c]'  }|j                  t        j                  ||«      «      ‘Œ) }}|d   s.|j                  t        j                  ||«      «      |d<   |d   sŒ.|S c c}w )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]

    r   r   )r‡   rp   ÚrandomÚrandint)r}   rØ   rÏ   r   ræ   r   s         r   Ú
dup_randomr  L  so   € ô 49¸¸AÀ¹E³?ÖD¨aˆ!�)‰)”F—N‘N 1 aÓ(Õ
)ÐD€AÐDà�ŠdØ�y‰yœŸ™¨¨1Ó-Ó.ˆˆ!‰ð �‹dð €Hùò 	Es   ’,A5r/   )NF)F)VÚ__doc__Ú
sympy.corer   Úsympy.polys.monomialsr   r   Úsympy.polys.orderingsr   r  Úfloatr&   r   r   r   r   r   r   r   r   r$   r(   r,   r0   r<   r>   rA   rE   rH   rP   rS   rX   r[   r]   r_   rb   re   ri   rl   rs   ru   rx   rz   r~   r€   r„   r*   rG   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  rC   r   r   ú<module>r#     s°  ðÙ Kõ ß <Ý .ã ñ ˆVƒ}€òò,ð* Ð €ˆØÐ €ˆòò.ò.&ò<ò.ò66ò&ò4,òò*ò6òBò$9óDò:(ò&ò&)ò0ò*0ò21ò"<ò,;ò2Bò:5ò$@ò.$ò4'ò4ò@ò2ò*%ò" ò"ò<ò01ò26ò21ò&1ò&òBò2)óXó6ó2 òF "òF"ò>ò.0ò@òB)%òX$/òN5òpò<ò,+ò2-(ò`"óD")óJ!&òHò<%òBó&0ò@ò@  òFò0*ò
"ó0r   