U
    ZÊ¹j0…  ã                   @   sT  d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZmZ dd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Z d"d#„ Z!d$d%„ Z"d&d'„ Z#d(d)„ Z$d*d+„ Z%d,d-„ Z&d.d/„ Z'd0d1„ Z(d2d3„ Z)d4d5„ Z*d6d7„ Z+d8d9„ Z,d:d;„ Z-d<d=„ Z.d>d?„ Z/d@dA„ Z0dBdC„ Z1dDdE„ Z2dFdG„ Z3dHdI„ Z4dJdK„ Z5dLdM„ Z6dNdO„ Z7dPdQ„ Z8dRdS„ Z9dTdU„ Z:dVdW„ Z;dXdY„ Z<dZd[„ Z=d\d]„ Z>d^d_„ Z?d`da„ Z@dbdc„ ZAddde„ ZBdfdg„ ZCdhdi„ ZDdjdk„ ZEdldm„ ZFdndo„ ZGdpdq„ ZHdrds„ ZIdtdu„ ZJdvdw„ ZKdxdy„ ZLdzd{„ ZMd|d}„ ZNd~d„ ZOd€d�„ ZPd‚dƒ„ ZQd„S )…zEArithmetics for dense recursive polynomials in ``K[x]`` or ``K[X]``. é    )Ú	dup_sliceÚdup_LCÚdmp_LCÚ
dup_degreeÚ
dmp_degreeÚ	dup_stripÚ	dmp_stripÚ
dmp_zero_pÚdmp_zeroÚ	dmp_one_pÚdmp_oneÚ
dmp_groundÚ	dmp_zeros)ÚExactQuotientFailedÚPolynomialDivisionFailedc                 C   s–   |s| S t | ƒ}|| d }||d krFt| d | g| dd…  ƒS ||krh|g|jg||   |  S | d|… | | | g | |d d…  S dS )zÓ
    Add ``c*x**i`` to ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_add_term(x**2 - 1, ZZ(2), 4)
    2*x**4 + x**2 - 1

    é   r   N©Úlenr   Úzero©ÚfÚcÚiÚKÚnÚm© r   úU/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/polys/densearith.pyÚdup_add_term   s    r   c                 C   sÄ   |st | |||ƒS |d }t||ƒr(| S t| ƒ}|| d }||d krntt| d |||ƒg| dd…  |ƒS ||kr�|gt|| ||ƒ |  S | d|… t| | |||ƒg | |d d…  S dS )zÝ
    Add ``c(x_2..x_u)*x_0**i`` to ``f`` in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_add_term(x*y + 1, 2, 2)
    2*x**2 + x*y + 1

    r   r   N)r   r	   r   r   Údmp_addr   ©r   r   r   Úur   Úvr   r   r   r   r   Údmp_add_term+   s    
&r#   c                 C   s˜   |s| S t | ƒ}|| d }||d krFt| d | g| dd…  ƒS ||krj| g|jg||   |  S | d|… | | | g | |d d…  S dS )zÚ
    Subtract ``c*x**i`` from ``f`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_sub_term(2*x**4 + x**2 - 1, ZZ(2), 4)
    x**2 - 1

    r   r   Nr   r   r   r   r   Údup_sub_termM   s    r$   c                 C   sÎ   |st | | ||ƒS |d }t||ƒr*| S t| ƒ}|| d }||d krptt| d |||ƒg| dd…  |ƒS ||kršt|||ƒgt|| ||ƒ |  S | d|… t| | |||ƒg | |d d…  S dS )zä
    Subtract ``c(x_2..x_u)*x_0**i`` from ``f`` in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_sub_term(2*x**2 + x*y + 1, 2, 2)
    x*y + 1

    r   r   N)r   r	   r   r   Údmp_subÚdmp_negr   r    r   r   r   Údmp_sub_termj   s    
&"r'   c                    s.   ˆ r| sg S ‡ fdd„| D ƒ|j g|  S dS )zÖ
    Multiply ``f`` by ``c*x**i`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_mul_term(x**2 - 1, ZZ(3), 2)
    3*x**4 - 3*x**2

    c                    s   g | ]}|ˆ  ‘qS r   r   ©Ú.0Úcf©r   r   r   Ú
<listcomp>�   s     z dup_mul_term.<locals>.<listcomp>N©r   )r   r   r   r   r   r+   r   Údup_mul_termŒ   s    r.   c                    s`   |st | ˆ|ˆ ƒS |d ‰t| |ƒr(| S tˆˆƒr:t|ƒS ‡ ‡‡fdd„| D ƒt|ˆˆ ƒ S dS )zí
    Multiply ``f`` by ``c(x_2..x_u)*x_0**i`` in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_mul_term(x**2*y + x, 3*y, 2)
    3*x**4*y**2 + 3*x**3*y

    r   c                    s   g | ]}t |ˆˆˆ ƒ‘qS r   )Údmp_mulr(   ©r   r   r"   r   r   r,   ¸   s     z dmp_mul_term.<locals>.<listcomp>N)r.   r	   r
   r   )r   r   r   r!   r   r   r0   r   Údmp_mul_term    s    

r1   c                 C   s   t | |d|ƒS )zð
    Add an element of the ground domain to ``f``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_add_ground(x**3 + 2*x**2 + 3*x + 4, ZZ(4))
    x**3 + 2*x**2 + 3*x + 8

    r   )r   ©r   r   r   r   r   r   Údup_add_ground»   s    r3   c                 C   s   t | t||d ƒd||ƒS )zô
    Add an element of the ground domain to ``f``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_add_ground(x**3 + 2*x**2 + 3*x + 4, ZZ(4))
    x**3 + 2*x**2 + 3*x + 8

    r   r   )r#   r   ©r   r   r!   r   r   r   r   Údmp_add_groundÌ   s    r5   c                 C   s   t | |d|ƒS )zó
    Subtract an element of the ground domain from ``f``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_sub_ground(x**3 + 2*x**2 + 3*x + 4, ZZ(4))
    x**3 + 2*x**2 + 3*x

    r   )r$   r2   r   r   r   Údup_sub_groundÝ   s    r6   c                 C   s   t | t||d ƒd||ƒS )z÷
    Subtract an element of the ground domain from ``f``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_sub_ground(x**3 + 2*x**2 + 3*x + 4, ZZ(4))
    x**3 + 2*x**2 + 3*x

    r   r   )r'   r   r4   r   r   r   Údmp_sub_groundî   s    r7   c                    s"   ˆ r| sg S ‡ fdd„| D ƒS dS )zâ
    Multiply ``f`` by a constant value in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_mul_ground(x**2 + 2*x - 1, ZZ(3))
    3*x**2 + 6*x - 3

    c                    s   g | ]}|ˆ  ‘qS r   r   r(   r+   r   r   r,     s     z"dup_mul_ground.<locals>.<listcomp>Nr   r2   r   r+   r   Údup_mul_groundÿ   s    r8   c                    s.   |st | ˆˆ ƒS |d ‰‡ ‡‡fdd„| D ƒS )zÚ
    Multiply ``f`` by a constant value in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_mul_ground(2*x + 2*y, ZZ(3))
    6*x + 6*y

    r   c                    s   g | ]}t |ˆˆˆ ƒ‘qS r   )Údmp_mul_groundr(   r0   r   r   r,   &  s     z"dmp_mul_ground.<locals>.<listcomp>)r8   r4   r   r0   r   r9     s    r9   c                    sD   ˆst dƒ‚| s| S ˆ jr.‡ ‡fdd„| D ƒS ‡fdd„| D ƒS dS )a)  
    Quotient by a constant in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ, QQ

    >>> R, x = ring("x", ZZ)
    >>> R.dup_quo_ground(3*x**2 + 2, ZZ(2))
    x**2 + 1

    >>> R, x = ring("x", QQ)
    >>> R.dup_quo_ground(3*x**2 + 2, QQ(2))
    3/2*x**2 + 1

    úpolynomial divisionc                    s   g | ]}ˆ   |ˆ¡‘qS r   )Zquor(   ©r   r   r   r   r,   A  s     z"dup_quo_ground.<locals>.<listcomp>c                    s   g | ]}|ˆ  ‘qS r   r   r(   r+   r   r   r,   C  s     N)ÚZeroDivisionErrorÚis_Fieldr2   r   r;   r   Údup_quo_ground)  s    r>   c                    s.   |st | ˆˆ ƒS |d ‰‡ ‡‡fdd„| D ƒS )a=  
    Quotient by a constant in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ, QQ

    >>> R, x,y = ring("x,y", ZZ)
    >>> R.dmp_quo_ground(2*x**2*y + 3*x, ZZ(2))
    x**2*y + x

    >>> R, x,y = ring("x,y", QQ)
    >>> R.dmp_quo_ground(2*x**2*y + 3*x, QQ(2))
    x**2*y + 3/2*x

    r   c                    s   g | ]}t |ˆˆˆ ƒ‘qS r   )Údmp_quo_groundr(   r0   r   r   r,   ]  s     z"dmp_quo_ground.<locals>.<listcomp>)r>   r4   r   r0   r   r?   F  s    r?   c                    s(   ˆst dƒ‚| s| S ‡ ‡fdd„| D ƒS )zÔ
    Exact quotient by a constant in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, QQ
    >>> R, x = ring("x", QQ)

    >>> R.dup_exquo_ground(x**2 + 2, QQ(2))
    1/2*x**2 + 1

    r:   c                    s   g | ]}ˆ   |ˆ¡‘qS r   )Úexquor(   r;   r   r   r,   s  s     z$dup_exquo_ground.<locals>.<listcomp>)r<   r2   r   r;   r   Údup_exquo_ground`  s
    rA   c                    s.   |st | ˆˆ ƒS |d ‰‡ ‡‡fdd„| D ƒS )zÞ
    Exact quotient by a constant in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, QQ
    >>> R, x,y = ring("x,y", QQ)

    >>> R.dmp_exquo_ground(x**2*y + 2*x, QQ(2))
    1/2*x**2*y + x

    r   c                    s   g | ]}t |ˆˆˆ ƒ‘qS r   )Údmp_exquo_groundr(   r0   r   r   r,   ‰  s     z$dmp_exquo_ground.<locals>.<listcomp>)rA   r4   r   r0   r   rB   v  s    rB   c                 C   s   | s| S | |j g|  S dS )zÓ
    Efficiently multiply ``f`` by ``x**n`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_lshift(x**2 + 1, 2)
    x**4 + x**2

    Nr-   ©r   r   r   r   r   r   Ú
dup_lshiftŒ  s    rD   c                 C   s   | d| … S )a  
    Efficiently divide ``f`` by ``x**n`` in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_rshift(x**4 + x**2, 2)
    x**2 + 1
    >>> R.dup_rshift(x**4 + x**2 + 2, 2)
    x**2 + 1

    Nr   rC   r   r   r   Ú
dup_rshift   s    rE   c                    s   ‡ fdd„| D ƒS )zÂ
    Make all coefficients positive in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_abs(x**2 - 1)
    x**2 + 1

    c                    s   g | ]}ˆ   |¡‘qS r   )Úabs©r)   Úcoeff©r   r   r   r,   Á  s     zdup_abs.<locals>.<listcomp>r   ©r   r   r   rI   r   Údup_abs³  s    rK   c                    s*   |st | ˆ ƒS |d ‰‡ ‡fdd„| D ƒS )zÊ
    Make all coefficients positive in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_abs(x**2*y - x)
    x**2*y + x

    r   c                    s   g | ]}t |ˆˆ ƒ‘qS r   )Údmp_absr(   ©r   r"   r   r   r,   ×  s     zdmp_abs.<locals>.<listcomp>)rK   ©r   r!   r   r   rM   r   rL   Ä  s    
rL   c                 C   s   dd„ | D ƒS )z¸
    Negate a polynomial in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_neg(x**2 - 1)
    -x**2 + 1

    c                 S   s   g | ]
}| ‘qS r   r   rG   r   r   r   r,   è  s     zdup_neg.<locals>.<listcomp>r   rJ   r   r   r   Údup_negÚ  s    rO   c                    s*   |st | ˆ ƒS |d ‰‡ ‡fdd„| D ƒS )zÀ
    Negate a polynomial in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_neg(x**2*y - x)
    -x**2*y + x

    r   c                    s   g | ]}t |ˆˆ ƒ‘qS r   )r&   r(   rM   r   r   r,   þ  s     zdmp_neg.<locals>.<listcomp>)rO   rN   r   rM   r   r&   ë  s    
r&   c                 C   s¦   | s|S |s| S t | ƒ}t |ƒ}||kr@tdd„ t| |ƒD ƒƒS t|| ƒ}||krp| d|… | |d…  }} n|d|… ||d…  }}|dd„ t| |ƒD ƒ S dS )zÄ
    Add dense polynomials in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_add(x**2 - 1, x - 2)
    x**2 + x - 3

    c                 S   s   g | ]\}}|| ‘qS r   r   ©r)   ÚaÚbr   r   r   r,     s     zdup_add.<locals>.<listcomp>Nc                 S   s   g | ]\}}|| ‘qS r   r   rP   r   r   r   r,   !  s     )r   r   ÚziprF   ©r   Úgr   ÚdfÚdgÚkÚhr   r   r   Údup_add  s    rZ   c                    sØ   |st | |ˆ ƒS t| |ƒ}|dk r&|S t||ƒ}|dk r<| S |d ‰||krlt‡ ‡fdd„t| |ƒD ƒ|ƒS t|| ƒ}||krœ| d|… | |d…  }} n|d|… ||d…  }}|‡ ‡fdd„t| |ƒD ƒ S dS )zÖ
    Add dense polynomials in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_add(x**2 + y, x**2*y + x)
    x**2*y + x**2 + x + y

    r   r   c                    s   g | ]\}}t ||ˆˆ ƒ‘qS r   ©r   rP   rM   r   r   r,   B  s     zdmp_add.<locals>.<listcomp>Nc                    s   g | ]\}}t ||ˆˆ ƒ‘qS r   r[   rP   rM   r   r   r,   K  s     )rZ   r   r   rS   rF   ©r   rU   r!   r   rV   rW   rX   rY   r   rM   r   r   $  s     

 r   c                 C   s²   | st ||ƒS |s| S t| ƒ}t|ƒ}||krFtdd„ t| |ƒD ƒƒS t|| ƒ}||krv| d|… | |d…  }} n t |d|… |ƒ||d…  }}|dd„ t| |ƒD ƒ S dS )zÉ
    Subtract dense polynomials in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_sub(x**2 - 1, x - 2)
    x**2 - x + 1

    c                 S   s   g | ]\}}|| ‘qS r   r   rP   r   r   r   r,   e  s     zdup_sub.<locals>.<listcomp>Nc                 S   s   g | ]\}}|| ‘qS r   r   rP   r   r   r   r,   n  s     )rO   r   r   rS   rF   rT   r   r   r   Údup_subN  s    
 r]   c                    sè   |st | |ˆ ƒS t| |ƒ}|dk r.t||ˆ ƒS t||ƒ}|dk rD| S |d ‰||krtt‡ ‡fdd„t| |ƒD ƒ|ƒS t|| ƒ}||kr¤| d|… | |d…  }} n"t|d|… |ˆ ƒ||d…  }}|‡ ‡fdd„t| |ƒD ƒ S dS )zÜ
    Subtract dense polynomials in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_sub(x**2 + y, x**2*y + x)
    -x**2*y + x**2 - x + y

    r   r   c                    s   g | ]\}}t ||ˆˆ ƒ‘qS r   ©r%   rP   rM   r   r   r,   �  s     zdmp_sub.<locals>.<listcomp>Nc                    s   g | ]\}}t ||ˆˆ ƒ‘qS r   r^   rP   rM   r   r   r,   ˜  s     )r]   r   r&   r   rS   rF   r\   r   rM   r   r%   q  s     

 "r%   c                 C   s   t | t|||ƒ|ƒS )zá
    Returns ``f + g*h`` where ``f, g, h`` are in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_add_mul(x**2 - 1, x - 2, x + 2)
    2*x**2 - 5

    )rZ   Údup_mul©r   rU   rY   r   r   r   r   Údup_add_mul›  s    ra   c                 C   s   t | t||||ƒ||ƒS )zç
    Returns ``f + g*h`` where ``f, g, h`` are in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_add_mul(x**2 + y, x, x + 2)
    2*x**2 + 2*x + y

    )r   r/   ©r   rU   rY   r!   r   r   r   r   Údmp_add_mul¬  s    rc   c                 C   s   t | t|||ƒ|ƒS )zØ
    Returns ``f - g*h`` where ``f, g, h`` are in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_sub_mul(x**2 - 1, x - 2, x + 2)
    3

    )r]   r_   r`   r   r   r   Údup_sub_mul½  s    rd   c                 C   s   t | t||||ƒ||ƒS )zß
    Returns ``f - g*h`` where ``f, g, h`` are in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_sub_mul(x**2 + y, x, x + 2)
    -2*x + y

    )r%   r/   rb   r   r   r   Údmp_sub_mulÎ  s    re   c                 C   s|  | |krt | |ƒS | r|sg S t| ƒ}t|ƒ}t||ƒd }|dk r´g }td|| d ƒD ]P}|j}ttd|| ƒt||ƒd ƒD ]}	|| |	 |||	   7 }q‚| |¡ qZt|ƒS |d }
t| d|
|ƒt|d|
|ƒ }}t	t| |
||ƒ|
|ƒ}t	t||
||ƒ|
|ƒ}t
|||ƒt
|||ƒ }}t
t|||ƒt|||ƒ|ƒ}t|t|||ƒ|ƒ}tt|t||
|ƒ|ƒt|d|
 |ƒ|ƒS dS )zÂ
    Multiply dense polynomials in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_mul(x - 2, x + 2)
    x**2 - 4

    r   éd   r   é   N)Údup_sqrr   ÚmaxÚranger   ÚminÚappendr   r   rE   r_   rZ   r]   rD   )r   rU   r   rV   rW   r   rY   r   rH   ÚjZn2ÚflÚglÚfhÚghÚloÚhiÚmidr   r   r   r_   ß  s4    
" ÿr_   c              	   C   sÚ   |st | ||ƒS | |kr$t| ||ƒS t| |ƒ}|dk r:| S t||ƒ}|dk rP|S g |d  }}td|| d ƒD ]^}t|ƒ}	ttd|| ƒt||ƒd ƒD ](}
t|	t| |
 |||
  ||ƒ||ƒ}	qš| 	|	¡ qpt
||ƒS )zÆ
    Multiply dense polynomials in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_mul(x*y + 1, x)
    x**2*y + x

    r   r   )r_   Údmp_sqrr   rj   r
   ri   rk   r   r/   rl   r   )r   rU   r!   r   rV   rW   rY   r"   r   rH   rm   r   r   r   r/     s"    

"&r/   c                 C   sÊ   t | ƒd g  }}tdd| d ƒD ]œ}|j}td|| ƒ}t||ƒ}|| d }||d  d }t||d ƒD ]}	|| |	 | ||	   7 }qp||7 }|d@ r¶| |d  }
||
d 7 }| |¡ q$t|ƒS )zÅ
    Square dense polynomials in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_sqr(x**2 + 1)
    x**4 + 2*x**2 + 1

    r   r   rg   )r   rj   r   ri   rk   rl   r   )r   r   rV   rY   r   r   ÚjminÚjmaxr   rm   Úelemr   r   r   rh   C  s    
rh   c              	   C   s  |st | |ƒS t| |ƒ}|dk r$| S g |d  }}tdd| d ƒD ]¾}t|ƒ}td|| ƒ}t||ƒ}	|	| d }
||
d  d }	t||	d ƒD ](}t|t| | | ||  ||ƒ||ƒ}q’t||dƒ||ƒ}|
d@ røt	| |	d  ||ƒ}t||||ƒ}| 
|¡ qDt||ƒS )zð
    Square dense polynomials in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_sqr(x**2 + x*y + y**2)
    x**4 + 2*x**3*y + 3*x**2*y**2 + 2*x*y**3 + y**4

    r   r   rg   )rh   r   rj   r
   ri   rk   r   r/   r9   ru   rl   r   )r   r!   r   rV   rY   r"   r   r   rv   rw   r   rm   rx   r   r   r   ru   k  s(    


&ru   c                 C   sx   |s|j gS |dk rtdƒ‚|dks4| r4| |j gkr8| S |j g}|d | }}|d rht|| |ƒ}|shqtt| |ƒ} q@|S )zÕ
    Raise ``f`` to the ``n``-th power in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_pow(x - 2, 3)
    x**3 - 6*x**2 + 12*x - 8

    r   ú+Cannot raise polynomial to a negative powerr   rg   )ÚoneÚ
ValueErrorr_   rh   )r   r   r   rU   r   r   r   r   Údup_pow›  s    r|   c                 C   s–   |st | ||ƒS |st||ƒS |dk r.tdƒ‚|dksLt| |ƒsLt| ||ƒrP| S t||ƒ}|d | }}|d@ r„t|| ||ƒ}|s„q’t| ||ƒ} qZ|S )zæ
    Raise ``f`` to the ``n``-th power in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_pow(x*y + 1, 3)
    x**3*y**3 + 3*x**2*y**2 + 3*x*y + 1

    r   ry   r   rg   )r|   r   r{   r	   r   r/   ru   )r   r   r!   r   rU   r   r   r   r   Údmp_powÀ  s     

r}   c                 C   s  t | ƒ}t |ƒ}g | |  }}}|s.tdƒ‚n||k r>||fS || d }t||ƒ}	t||ƒ}
|| |d  }}t||	|ƒ}t||
||ƒ}t||	|ƒ}t||
||ƒ}t|||ƒ}|t |ƒ }}||k rÊqàqT||k sTt| ||ƒ‚qT|	| }t|||ƒ}t|||ƒ}||fS )zÍ
    Polynomial pseudo-division in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_pdiv(x**2 + 1, 2*x - 4)
    (2*x + 4, 20)

    r:   r   )r   r<   r   r8   r   r.   r]   r   )r   rU   r   rV   rW   ÚqÚrÚdrÚNÚlc_gÚlc_rrm   ÚQÚRÚGÚ_drr   r   r   r   Údup_pdivè  s2    


rˆ   c                 C   sÌ   t | ƒ}t |ƒ}| | }}|s(tdƒ‚n||k r4|S || d }t||ƒ}t||ƒ}	|| |d  }
}t|||ƒ}t||	|
|ƒ}t|||ƒ}|t |ƒ }}||k r¦q¼qJ||k sJt| ||ƒ‚qJt||| |ƒS )zÃ
    Polynomial pseudo-remainder in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_prem(x**2 + 1, 2*x - 4)
    20

    r:   r   )r   r<   r   r8   r.   r]   r   )r   rU   r   rV   rW   r   r€   r�   r‚   rƒ   rm   r…   r†   r‡   r   r   r   Údup_prem  s(    



r‰   c                 C   s   t | ||ƒd S )a   
    Polynomial exact pseudo-quotient in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_pquo(x**2 - 1, 2*x - 2)
    2*x + 2

    >>> R.dup_pquo(x**2 + 1, 2*x - 4)
    2*x + 4

    r   )rˆ   ©r   rU   r   r   r   r   Údup_pquoJ  s    r‹   c                 C   s&   t | ||ƒ\}}|s|S t| |ƒ‚dS )a\  
    Polynomial pseudo-quotient in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_pexquo(x**2 - 1, 2*x - 2)
    2*x + 2

    >>> R.dup_pexquo(x**2 + 1, 2*x - 4)
    Traceback (most recent call last):
    ...
    ExactQuotientFailed: [2, -4] does not divide [1, 0, 1]

    N)rˆ   r   ©r   rU   r   r~   r   r   r   r   Ú
dup_pexquo^  s    r�   c                 C   sF  |st | ||ƒS t| |ƒ}t||ƒ}|dk r4tdƒ‚t|ƒ| |  }}}||k rX||fS || d }	t||ƒ}
t||ƒ}|| |	d  }}	t||
d||ƒ}t|||||ƒ}t||
d||ƒ}t|||||ƒ}t||||ƒ}|t||ƒ }}||k rö�qqn||k snt| ||ƒ‚qnt	|
|	|d |ƒ}t||d||ƒ}t||d||ƒ}||fS )zß
    Polynomial pseudo-division in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_pdiv(x**2 + x*y, 2*x + 2)
    (2*x + 2*y - 2, -4*y + 4)

    r   r:   r   )
rˆ   r   r<   r
   r   r1   r#   r%   r   r}   )r   rU   r!   r   rV   rW   r~   r   r€   r�   r‚   rƒ   rm   r„   r…   r†   r‡   r   r   r   r   Údmp_pdivy  s6    



rŽ   c                 C   sþ   |st | ||ƒS t| |ƒ}t||ƒ}|dk r4tdƒ‚| | }}||k rJ|S || d }t||ƒ}	t||ƒ}
|| |d  }}t||	d||ƒ}t||
|||ƒ}t||||ƒ}|t||ƒ }}||k rÆqÜq`||k s`t| ||ƒ‚q`t|	||d |ƒ}t||d||ƒS )zÏ
    Polynomial pseudo-remainder in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_prem(x**2 + x*y, 2*x + 2)
    -4*y + 4

    r   r:   r   )r‰   r   r<   r   r1   r%   r   r}   )r   rU   r!   r   rV   rW   r   r€   r�   r‚   rƒ   rm   r…   r†   r‡   r   r   r   r   Údmp_prem²  s.    




r�   c                 C   s   t | |||ƒd S )a.  
    Polynomial exact pseudo-quotient in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> f = x**2 + x*y
    >>> g = 2*x + 2*y
    >>> h = 2*x + 2

    >>> R.dmp_pquo(f, g)
    2*x

    >>> R.dmp_pquo(f, h)
    2*x + 2*y - 2

    r   )rŽ   ©r   rU   r!   r   r   r   r   Údmp_pquoå  s    r‘   c                 C   s.   t | |||ƒ\}}t||ƒr |S t| |ƒ‚dS )a�  
    Polynomial pseudo-quotient in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> f = x**2 + x*y
    >>> g = 2*x + 2*y
    >>> h = 2*x + 2

    >>> R.dmp_pexquo(f, g)
    2*x

    >>> R.dmp_pexquo(f, h)
    Traceback (most recent call last):
    ...
    ExactQuotientFailed: [[2], [2]] does not divide [[1], [1, 0], []]

    N)rŽ   r	   r   ©r   rU   r!   r   r~   r   r   r   r   Ú
dmp_pexquoý  s    
r“   c                 C   sÐ   t | ƒ}t |ƒ}g | |  }}}|s.tdƒ‚n||k r>||fS t||ƒ}t||ƒ}	|	| r\qÈ| |	|¡}
|| }t||
||ƒ}t||
||ƒ}t|||ƒ}|t |ƒ }}||k r²qÈqH||k sHt| ||ƒ‚qH||fS )z×
    Univariate division with remainder over a ring.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_rr_div(x**2 + 1, 2*x - 4)
    (0, x**2 + 1)

    r:   )r   r<   r   r@   r   r.   r]   r   ©r   rU   r   rV   rW   r~   r   r€   r‚   rƒ   r   rm   rY   r‡   r   r   r   Ú
dup_rr_div  s,    


r•   c                 C   s  |st | ||ƒS t| |ƒ}t||ƒ}|dk r4tdƒ‚t|ƒ| |  }}}||k rX||fS t||ƒ|d  }	}
t||ƒ}t||	|
|ƒ\}}t||
ƒs–�q || }t|||||ƒ}t|||||ƒ}t	||||ƒ}|t||ƒ }}||k rê�q ql||k slt
| ||ƒ‚ql||fS )zá
    Multivariate division with remainder over a ring.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_rr_div(x**2 + x*y, 2*x + 2)
    (0, x**2 + x*y)

    r   r:   r   )r•   r   r<   r
   r   Ú
dmp_rr_divr	   r#   r1   r%   r   ©r   rU   r!   r   rV   rW   r~   r   r€   r‚   r"   rƒ   r   r…   rm   rY   r‡   r   r   r   r–   M  s0    



r–   c                 C   sø   t | ƒ}t |ƒ}g | |  }}}|s.tdƒ‚n||k r>||fS t||ƒ}t||ƒ}	| |	|¡}
|| }t||
||ƒ}t||
||ƒ}t|||ƒ}|t |ƒ }}||k r¨qðqH||krÚ|jsÚt|dd… ƒ}t |ƒ}||k rîqðqH||k sHt	| ||ƒ‚qH||fS )zÙ
    Polynomial division with remainder over a field.

    Examples
    ========

    >>> from sympy.polys import ring, QQ
    >>> R, x = ring("x", QQ)

    >>> R.dup_ff_div(x**2 + 1, 2*x - 4)
    (1/2*x + 1, 5)

    r:   r   N)
r   r<   r   r@   r   r.   r]   Zis_Exactr   r   r”   r   r   r   Ú
dup_ff_div‚  s2    


r˜   c                 C   s  |st | ||ƒS t| |ƒ}t||ƒ}|dk r4tdƒ‚t|ƒ| |  }}}||k rX||fS t||ƒ|d  }	}
t||ƒ}t||	|
|ƒ\}}t||
ƒs–�q || }t|||||ƒ}t|||||ƒ}t	||||ƒ}|t||ƒ }}||k rê�q ql||k slt
| ||ƒ‚ql||fS )zî
    Polynomial division with remainder over a field.

    Examples
    ========

    >>> from sympy.polys import ring, QQ
    >>> R, x,y = ring("x,y", QQ)

    >>> R.dmp_ff_div(x**2 + x*y, 2*x + 2)
    (1/2*x + 1/2*y - 1/2, -y + 1)

    r   r:   r   )r˜   r   r<   r
   r   Ú
dmp_ff_divr	   r#   r1   r%   r   r—   r   r   r   r™   ¶  s0    



r™   c                 C   s"   |j rt| ||ƒS t| ||ƒS dS )a.  
    Polynomial division with remainder in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ, QQ

    >>> R, x = ring("x", ZZ)
    >>> R.dup_div(x**2 + 1, 2*x - 4)
    (0, x**2 + 1)

    >>> R, x = ring("x", QQ)
    >>> R.dup_div(x**2 + 1, 2*x - 4)
    (1/2*x + 1, 5)

    N)r=   r˜   r•   rŠ   r   r   r   Údup_divë  s    rš   c                 C   s   t | ||ƒd S )a  
    Returns polynomial remainder in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ, QQ

    >>> R, x = ring("x", ZZ)
    >>> R.dup_rem(x**2 + 1, 2*x - 4)
    x**2 + 1

    >>> R, x = ring("x", QQ)
    >>> R.dup_rem(x**2 + 1, 2*x - 4)
    5

    r   ©rš   rŠ   r   r   r   Údup_rem  s    rœ   c                 C   s   t | ||ƒd S )a  
    Returns exact polynomial quotient in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ, QQ

    >>> R, x = ring("x", ZZ)
    >>> R.dup_quo(x**2 + 1, 2*x - 4)
    0

    >>> R, x = ring("x", QQ)
    >>> R.dup_quo(x**2 + 1, 2*x - 4)
    1/2*x + 1

    r   r›   rŠ   r   r   r   Údup_quo  s    r�   c                 C   s&   t | ||ƒ\}}|s|S t| |ƒ‚dS )aW  
    Returns polynomial quotient in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_exquo(x**2 - 1, x - 1)
    x + 1

    >>> R.dup_exquo(x**2 + 1, 2*x - 4)
    Traceback (most recent call last):
    ...
    ExactQuotientFailed: [2, -4] does not divide [1, 0, 1]

    N)rš   r   rŒ   r   r   r   Ú	dup_exquo-  s    rž   c                 C   s&   |j rt| |||ƒS t| |||ƒS dS )aK  
    Polynomial division with remainder in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ, QQ

    >>> R, x,y = ring("x,y", ZZ)
    >>> R.dmp_div(x**2 + x*y, 2*x + 2)
    (0, x**2 + x*y)

    >>> R, x,y = ring("x,y", QQ)
    >>> R.dmp_div(x**2 + x*y, 2*x + 2)
    (1/2*x + 1/2*y - 1/2, -y + 1)

    N)r=   r™   r–   r�   r   r   r   Údmp_divH  s    rŸ   c                 C   s   t | |||ƒd S )a)  
    Returns polynomial remainder in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ, QQ

    >>> R, x,y = ring("x,y", ZZ)
    >>> R.dmp_rem(x**2 + x*y, 2*x + 2)
    x**2 + x*y

    >>> R, x,y = ring("x,y", QQ)
    >>> R.dmp_rem(x**2 + x*y, 2*x + 2)
    -y + 1

    r   ©rŸ   r�   r   r   r   Údmp_rem`  s    r¡   c                 C   s   t | |||ƒd S )a2  
    Returns exact polynomial quotient in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ, QQ

    >>> R, x,y = ring("x,y", ZZ)
    >>> R.dmp_quo(x**2 + x*y, 2*x + 2)
    0

    >>> R, x,y = ring("x,y", QQ)
    >>> R.dmp_quo(x**2 + x*y, 2*x + 2)
    1/2*x + 1/2*y - 1/2

    r   r    r�   r   r   r   Údmp_quou  s    r¢   c                 C   s.   t | |||ƒ\}}t||ƒr |S t| |ƒ‚dS )aˆ  
    Returns polynomial quotient in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> f = x**2 + x*y
    >>> g = x + y
    >>> h = 2*x + 2

    >>> R.dmp_exquo(f, g)
    x

    >>> R.dmp_exquo(f, h)
    Traceback (most recent call last):
    ...
    ExactQuotientFailed: [[2], [2]] does not divide [[1], [1, 0], []]

    N)rŸ   r	   r   r’   r   r   r   Ú	dmp_exquoŠ  s    
r£   c                 C   s   | s
|j S tt| |ƒƒS dS )zÍ
    Returns maximum norm of a polynomial in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_max_norm(-x**2 + 2*x - 3)
    3

    N)r   ri   rK   rJ   r   r   r   Údup_max_norm©  s    r¤   c                    s.   |st | ˆ ƒS |d ‰t‡ ‡fdd„| D ƒƒS )zÏ
    Returns maximum norm of a polynomial in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_max_norm(2*x*y - x - 3)
    3

    r   c                 3   s   | ]}t |ˆˆ ƒV  qd S ©N)Údmp_max_norm©r)   r   rM   r   r   Ú	<genexpr>Ð  s     zdmp_max_norm.<locals>.<genexpr>)r¤   ri   rN   r   rM   r   r¦   ½  s    
r¦   c                 C   s   | s
|j S tt| |ƒƒS dS )zË
    Returns l1 norm of a polynomial in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_l1_norm(2*x**3 - 3*x**2 + 1)
    6

    N)r   ÚsumrK   rJ   r   r   r   Údup_l1_normÓ  s    rª   c                    s.   |st | ˆ ƒS |d ‰t‡ ‡fdd„| D ƒƒS )zÉ
    Returns l1 norm of a polynomial in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_l1_norm(2*x*y - x - 3)
    6

    r   c                 3   s   | ]}t |ˆˆ ƒV  qd S r¥   )Údmp_l1_normr§   rM   r   r   r¨   ú  s     zdmp_l1_norm.<locals>.<genexpr>)rª   r©   rN   r   rM   r   r«   ç  s    
r«   c                 C   s   t dd„ | D ƒ|jƒS )zÜ
    Returns squared l2 norm of a polynomial in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_l2_norm_squared(2*x**3 - 3*x**2 + 1)
    14

    c                 S   s   g | ]}|d  ‘qS )rg   r   rG   r   r   r   r,     s     z'dup_l2_norm_squared.<locals>.<listcomp>)r©   r   rJ   r   r   r   Údup_l2_norm_squaredý  s    r¬   c                    s.   |st | ˆ ƒS |d ‰t‡ ‡fdd„| D ƒƒS )zÚ
    Returns squared l2 norm of a polynomial in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_l2_norm_squared(2*x*y - x - 3)
    14

    r   c                 3   s   | ]}t |ˆˆ ƒV  qd S r¥   )Údmp_l2_norm_squaredr§   rM   r   r   r¨   !  s     z&dmp_l2_norm_squared.<locals>.<genexpr>)r¬   r©   rN   r   rM   r   r­     s    
r­   c                 C   s6   | s|j gS | d }| dd… D ]}t|||ƒ}q |S )zØ
    Multiply together several polynomials in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> R.dup_expand([x**2 - 1, x, 2])
    2*x**3 - 2*x

    r   r   N)rz   r_   )Úpolysr   r   rU   r   r   r   Ú
dup_expand$  s    r¯   c                 C   s:   | st ||ƒS | d }| dd… D ]}t||||ƒ}q"|S )zï
    Multiply together several polynomials in ``K[X]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x,y = ring("x,y", ZZ)

    >>> R.dmp_expand([x**2 + y**2, x + 1])
    x**3 + x**2 + x*y**2 + y**2

    r   r   N)r   r/   )r®   r!   r   r   rU   r   r   r   Ú
dmp_expand=  s    
r°   N)RÚ__doc__Zsympy.polys.densebasicr   r   r   r   r   r   r   r	   r
   r   r   r   r   Zsympy.polys.polyerrorsr   r   r   r#   r$   r'   r.   r1   r3   r5   r6   r7   r8   r9   r>   r?   rA   rB   rD   rE   rK   rL   rO   r&   rZ   r   r]   r%   ra   rc   rd   re   r_   r/   rh   ru   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   Ú<module>   s„   <""#*#*9+(0%(5-931545