ó
    Š*£hrŒ  ã                   ó  • S r SSKJr  SSKJrJr  SSKJr  SSKr\	" S5      r
S rS r\=rr\=rrS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSNS jrS rS r S r!S r"S r#S r$S r%S r&S r'S  r(S! r)S" r*S# r+S$ r,S% r-S& r.S' r/S( r0S) r1S* r2S+ r3S, r4S- r5S. r6S/ r7S0 r8S1 r9SOS2 jr:SOS3 jr;SOS4 jr<S5 r=S6 r>S7 r?S8 r@S9 rAS: rBS; rCS< rDS= rES> rFS? rGS@ rHSA rISPSB jrJSPSC jrKSD rLSE rMSF rNSNSG jrOSH rPSI rQSJ rRSK rSSL rTSM rUg)QzEBasic tools for dense recursive polynomials in ``K[x]`` or ``K[X]``. é    )Úigcd)Úmonomial_minÚmonomial_div)Úmonomial_keyNz-infc                 ó2   • U (       d  UR                   $ U 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     ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/densebasic.pyÚpoly_LCr      s   € ö  Ø�v‰vˆà�‰tˆó    c                 ó2   • U (       d  UR                   $ U 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                 óX   • U(       a  [        X5      n US-  nU(       a  M  [        X5      $ )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‹LˆØ	ˆQ‰ˆ÷ ˆ!ô �!‹<Ðr   c                 óX   • U(       a  [        X5      n US-  nU(       a  M  [        X5      $ )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                 ó
  • / nU(       a/  UR                  [        U 5      S-
  5        U S   US-
  pU(       a  M/  U (       d  UR                  S5        OUR                  [        U 5      S-
  5        [        U5      [        X5      4$ )zø
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   sm   € ð  €Eæ
Ø�‰”S˜“V˜a‘ZÔ Ø�‰t�Q˜‘Uˆ1÷ ˆ!ö Ø�‰�Q�à�‰”S˜“V˜a‘ZÔ ä�‹<œ ›Ð%Ð%r   c                 ó8   • U (       d  [         $ [        U 5      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                 óJ   • [        X5      (       a  [        $ [        U 5      S-
  $ )aI  
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"   € ô* �!×ÑÜˆä�1‹v˜‰zÐr   c                 óp   ^^^• TT:X  a  [        U T5      $ TS-
  TS-   smm[        UUU4S jU  5       5      $ )z4Recursive helper function for :func:`dmp_degree_in`.r   c              3   ó@   >#   • U  H  n[        UTTT5      v •  M     g 7f©N)Ú_rec_degree_in)Ú.0ÚcÚiÚjÚvs     €€€r   Ú	<genexpr>Ú!_rec_degree_in.<locals>.<genexpr>Â   s   øé € Ð5²1¨aŒ~˜a  A q×)Ð)²1ù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                 ó|   • U(       d  [        X5      $ US:  d  X:”  a  [        SU< SU< 35      e[        XSU5      $ )a
  
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=   Å   s<   € ö$ Ü˜!ÓÐØˆ1ƒu�“Ý»AºqÐAÓBÐBä˜!  1Ó%Ð%r   c                 ó€   • [        X2   [        X5      5      X2'   US:”  a  US-
  US-   p!U  H  n[        XAX#5        M     gg)z-Recursive helper for :func:`dmp_degree_list`.r   r   N)r8   r,   Ú_rec_degree_list)r9   r5   r3   Údegsr2   s        r   r?   r?   ß   sF   € ä�$‘'œ: aÓ+Ó,€D�Gàˆ1ƒuØ�1‰u�a˜!‘eˆ1ãˆAÜ˜Q 1Ö+ò ð r   c                 óL   • [         /US-   -  n[        XSU5        [        U5      $ )zç
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_listrB   ê   s)   € ô  ˆ6�1�q‘5‰>€DÜ�Q˜1˜dÔ#Ü�‹;Ðr   c                 ób   • U (       a
  U S   (       a  U $ SnU  H  nU(       a    O	US-  nM     X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_striprF   ÿ   s;   € ö ��!—Øˆà	€AãˆÞÙà�‰FŠAñ	 ð ˆRˆ5€Lr   c                 óÒ   • U(       d  [        U 5      $ [        X5      (       a  U $ SUS-
  p2U  H  n[        XC5      (       d    O	US-  nM     U[        U 5      :X  a  [        U5      $ X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)rF   r*   r!   Údmp_zero)r   r   r3   r5   r2   s        r   Ú	dmp_striprI     sm   € ö Ü˜‹|Ðä�!×ÑØˆàˆa�!‰e€qãˆÜ˜!×ÑÙà�‰FŠAñ	 ð 	ŒC�‹Fƒ{Ü˜‹{Ðà�ˆuˆr   c                 ó  • [        U[        5      (       d?  Ub6  UR                  U5      (       d   [        U< SU < SUR                  < 35      eUS-
  1$ U(       d  U1$ [        5       nU H  nU[        XUS-   U5      -  nM     U$ )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   r9   r3   r   Úlevelsr2   s         r   rQ   rQ   ;  sz   € ä�aœ×ÑØ‰= §¡¨1§¡Ü»A»qÀ!Ç'Ã'ÐJÓKÐKà�A‘ˆwˆÞØˆsˆ
ä“ˆãˆAØ”m A¨!¨a©%°Ó3Ñ3ŠFñ ð ˆr   c           	      ó†   • U(       d  [        U 5      $ US-
  n[        U  Vs/ s H  n[        X25      PM     snU5      $ s  snf )z(Recursive helper for :func:`_rec_strip`.r   )rF   rI   Ú
_rec_strip)r9   r5   Úwr2   s       r   rT   rT   M  s<   € æÜ˜‹|Ðà	ˆA‰€Aä±Ó4²¨A”z !Ö'±Ñ4°aÓ8Ð8ùÒ4s   ¡>c                 óz   • [        X SU5      nUR                  5       nU(       d  [        X5      U4$ [        S5      e)aH  
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)rQ   ÚpoprT   Ú
ValueError)r   r   rR   r   s       r   Údmp_validaterY   W  sB   € ô$ ˜1  AÓ&€Fà�
‰
‹€AæÜ˜!Ó Ð"Ð"äØBóDð 	Dr   c                 ó<   • [        [        [        U 5      5      5      $ )zè
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]

)rF   rL   Úreversedr'   s    r   Údup_reverser\   t  s   € ô  ”Tœ( 1›+Ó&Ó'Ð'r   c                 ó   • [        U 5      $ )zé
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]

)rL   r'   s    r   Údup_copyr^   ‡  s   € ô  �‹7€Nr   c                 ór   • U(       d  [        U 5      $ US-
  nU  Vs/ s H  n[        X25      PM     sn$ s  snf )zã
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   )rL   Údmp_copy)r   r   r5   r2   s       r   r`   r`   š  s5   € ö  Ü�A‹wˆà	ˆA‰€Aá%&Ó(¢Q ŒX�aŽ^¡QÑ(Ð(ùÒ(s   œ4c                 ó   • [        U 5      $ )a
  
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_tuplerc   ²  s   € ô$ �‹8€Or   c                 ó\   ^• U(       d  [        U 5      $ US-
  m[        U4S jU  5       5      $ )a  
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   ó<   >#   • U  H  n[        UT5      v •  M     g 7fr/   )Údmp_to_tuple)r1   r2   r5   s     €r   r6   Údmp_to_tuple.<locals>.<genexpr>Ý  s   øé € Ð/ªQ¨”˜a ×#Ð#ªQùs   ƒrb   )r   r   r5   s     @r   rf   rf   Ç  s+   ø€ ö$ Ü�Q‹xˆØ	ˆA‰€AäÔ/©QÓ/Ó/Ð/r   c                 ó`   • [        U  Vs/ s H  o!R                  U5      PM     sn5      $ s  snf )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]

)rF   Únormal©r   r   r2   s      r   Ú
dup_normalrk   à  s'   € ô ©AÓ/ªA q—x‘x –{©AÑ/Ó0Ð0ùÒ/ó   Š+c           
      óˆ   • U(       d  [        X5      $ US-
  n[        U  Vs/ s H  n[        XCU5      PM     snU5      $ s  snf )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   )rk   rI   Ú
dmp_normal©r   r   r   r5   r2   s        r   rn   rn   ñ  sA   € ö Ü˜!ÓÐà	ˆA‰€Aä±AÓ7²A¨q”z !¨Ö*±AÑ7¸Ó;Ð;ùÒ7ó   ¡?c           	      ót   • Ub  X:X  a  U $ [        U  Vs/ s H  o2R                  X15      PM     sn5      $ s  snf )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]

)rF   Úconvert)r   ÚK0ÚK1r2   s       r   Údup_convertru     s6   € ð& 
�~˜"›(Øˆä±aÓ9²a°Ÿ:™: aÖ,±aÑ9Ó:Ð:ùÒ9s   ”5c                 óž   • U(       d  [        XU5      $ Ub  X#:X  a  U $ US-
  n[        U  Vs/ s H  n[        XTX#5      PM     snU5      $ s  snf )at  
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   )ru   rI   Údmp_convert)r   r   rs   rt   r5   r2   s         r   rw   rw      sQ   € ö& Ü˜1 "Ó%Ð%Ø	�~˜"›(Øˆà	ˆA‰€Aä¹!Ó=º!°Q”{ 1¨Ö0¹!Ñ=¸qÓAÐAùÒ=s   ¬A
c                 ó`   • [        U  Vs/ s H  o!R                  U5      PM     sn5      $ s  snf )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

)rF   Ú
from_sympyrj   s      r   Údup_from_sympyrz   =  s'   € ô ±Ó3²¨1—|‘| A–±Ñ3Ó4Ð4ùÒ3rl   c           
      óˆ   • U(       d  [        X5      $ US-
  n[        U  Vs/ s H  n[        XCU5      PM     snU5      $ s  snf )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   )rz   rI   Údmp_from_sympyro   s        r   r|   r|   O  sA   € ö Ü˜aÓ#Ð#à	ˆA‰€Aä¹Ó;º°1”~ a¨AÖ.¹Ñ;¸QÓ?Ð?ùÒ;rp   c                 ó‚   • US:  a  [        SU-  5      eU[        U 5      :¼  a  UR                  $ U [        U 5      U-
     $ )zî
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                 ó†   • US:  a  [        SU-  5      eU[        U 5      :¼  a  [        US-
  5      $ U [        X5      U-
     $ )zý
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!   rH   r,   )r   r   r   r   s       r   Údmp_nthr‚   €  sJ   € ð$ 	ˆ1ƒuÜÐ;¸aÑ?Ó@Ð@Ø	
Œc�!‹f‹Ü˜˜A™‹Ðà”˜AÓ! AÑ%Ñ&Ð&r   c                 óÂ   • UnU HV  nUS:  a  [        SU-  5      eU[        U 5      :¼  a  UR                  s  $ [        X5      nU[        :X  a  SnXU-
     US-
  p@MX     U $ )z÷
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†   š  sm   € ð  	
€AãˆØˆq‹5ÜÐ?À!ÑCÓDÐDØ”#�a“&‹[Ø—6‘6ŠMä˜1Ó ˆAØ”D‹yØ�Ø˜‘U‘8˜Q ™UŠqñ ð €Hr   c                 ód   • U(       a#  [        U 5      S:w  a  gU S   n US-  nU(       a  M#  U (       + $ )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*   º  s7   € ö Üˆq‹6�Q‹;Øàˆa‰DˆØ	ˆQ‰ˆ÷ ˆ!ð Œ5€Lr   c                 ó4   • / n[        U 5       H  nU/nM     U$ )z~
Return a multivariate zero.

Examples
========

>>> from sympy.polys.densebasic import dmp_zero

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

)Úrange)r   Úrr3   s      r   rH   rH   Ó  s%   € ð 	€Aä�1ŽXˆØˆCŠñ ð €Hr   c                 ó.   • [        XR                  U5      $ )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   € ô ˜Ÿ5™5 !Ó$Ð$r   c                 ó.   • [        UR                  U 5      $ )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                 ó¬   • Ub  U(       d  [        X5      $ U(       a#  [        U 5      S:w  a  gU S   n US-  nU(       a  M#  Uc  [        U 5      S:*  $ X/:H  $ )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‹6�Q‹;ØØˆa‰DˆØ	ˆQ‰ˆ÷	 ˆ!ð 	�yÜ�1‹v˜‰{Ðà�C‰xˆr   c                 óZ   • U (       d  [        U5      $ [        US-   5       H  nU /n M     U $ )z¤
Return a multivariate constant.

Examples
========

>>> from sympy.polys.densebasic import dmp_ground

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

r   )rH   r‰   )r2   r   r3   s      r   r�   r�   (  s1   € ö Ü˜‹{Ðä�1�q‘5Ž\ˆØˆCŠñ ð €Hr   c                 ó”   • U (       d  / $ US:  a  UR                   /U -  $ [        U 5       Vs/ s H  n[        U5      PM     sn$ s  snf )zè
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‰   rH   )r   r   r   r3   s       r   Ú	dmp_zerosr•   @  sC   € ö  Øˆ	àˆ1ƒuØ—‘ˆx˜‰zÐä&+¨A¤hÓ0¢h ”˜!–¡hÑ0Ð0ùÒ0s   ­Ac                 ó€   • U(       d  / $ US:  a  U /U-  $ [        U5       Vs/ s H  n[        X5      PM     sn$ s  snf )zû
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ª8 a”˜AÖ!©8Ñ5Ð5ùÒ5s   £;c                 ó8   • UR                  [        XU5      5      $ )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                 ó8   • UR                  [        XU5      5      $ )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                 óŽ  • U (       d  / $ [        U R                  5       5      / p2[        U[        5      (       a?  [	        USS5       H-  nUR                  U R                  XAR                  5      5        M/     ODUu  n[	        USS5       H/  nUR                  U R                  U4UR                  5      5        M1     [        U5      $ )a  
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   )	r8   ÚkeysrK   Úintr‰   r    Úgetr	   rF   ©r   r   r   ÚhÚks        r   Údup_from_dictr¦   ˜  s›   € ö  Øˆ	äˆq�v‰v‹x‹=˜"€qä�!”S×ÑÜ�q˜"˜bÖ!ˆAØ�H‰H�Q—U‘U˜1Ÿf™fÓ%Ö&ò "ð ‰ˆä�q˜"˜bÖ!ˆAØ�H‰H�Q—U‘U˜A˜4 §¡Ó(Ö)ñ "ô �Q‹<Ðr   c                 óÚ   • U (       d  / $ [        U R                  5       5      / p2[        USS5       H-  nUR                  U R	                  XAR
                  5      5        M/     [        U5      $ )zó
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   )r8   r    r‰   r    r¢   r	   rF   r£   s        r   Údup_from_raw_dictr¨   ¹  sU   € ö Øˆ	äˆq�v‰v‹x‹=˜"€qä�1�b˜"ÖˆØ	�‰�—‘�qŸ&™&Ó!Ö"ñ ô �Q‹<Ðr   c                 óÊ  • U(       d  [        X5      $ U (       d  [        U5      $ 0 nU R                  5        H!  u  pEUS   USS pvXc;   a	  XSU   U'   M  Xu0X6'   M#     [        UR	                  5       5      US-
  / p©n[        USS5       HN  nUR                  U5      nUb  U
R                  [        XYU5      5        M4  U
R                  [        U	5      5        MP     [        X¡5      $ )a  
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¦   rH   Úitemsr8   r    r‰   r¢   r    Údmp_from_dictrI   )r   r   r   Úcoeffsr#   ÚcoeffÚheadÚtailr   r5   r¤   r¥   s               r   r«   r«   Ò  sÒ   € ö  Ü˜QÓ"Ð"ÞÜ˜‹{Ðà€FàŸ™ž	‰ˆØ˜1‘X˜u Q R˜yˆdà‹>Ø!&�4‰L˜Óà!˜?ˆF‹Lñ "ô �&—+‘+“-Ó  ! a¡%¨ˆ!€Aä�1�b˜"ÖˆØ—
‘
˜1“ˆàÑØ�H‰H”] 5¨QÓ/Ö0à�H‰H”X˜a“[Ö!ñ ô �Q‹?Ðr   c                 ó¸   • U (       d  U(       a  SUR                   0$ [        U 5      S-
  0 pC[        SUS-   5       H  nXU-
     (       d  M  XU-
     XE4'   M     U$ )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µ   þ  s[   € ö –Ø�a—f‘fˆ~Ðä�A“˜‘
˜B€vä�1�a˜!‘eŽ_ˆØ�‰U�8‰8Ø ™U™8ˆF�4‹Lñ ð €Mr   c                 ó¶   • U (       d  U(       a  SUR                   0$ [        U 5      S-
  0 pC[        SUS-   5       H  nXU-
     (       d  M  XU-
     XE'   M     U$ )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·     sY   € ö –Ø�1—6‘6ˆ{Ðä�A“˜‘
˜B€vä�1�a˜!‘eŽ_ˆØ�‰U�8‰8Ø˜a™%™ˆF‹Iñ ð €Mr   c                 óH  • U(       d
  [        XUS9$ [        X5      (       a  U(       a  SUS-   -  UR                  0$ [        X5      US-
  0 penU[        :X  a  Sn[        SUS-   5       H5  n[        XU-
     U5      nUR                  5        H  u  pšX¦U4U	-   '   M     M7     U$ )zÞ
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 dÑ+Ð+ä�!×ÑžDØ�a˜!‘e‘˜aŸf™fÐ%Ð%ä˜aÓ# Q¨¡U¨Bˆ&€AàŒDƒyØˆä�1�a˜!‘eŽ_ˆÜ˜˜a™%™ !Ó$ˆàŸ'™'ž)‰JˆCØ!&�A�4˜#‘:Óó $ñ ð €Mr   c                 ó   • US:  d  US:  d
  X:”  d  X#:”  a  [        SU-  5      eX:X  a  U $ [        X5      0 peUR                  5        H(  u  pxUXgSU Xr   4-   XqS-   U -   Xq   4-   XrS-   S -   '   M*     [        XcU5      $ )ai  
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“˜› !£%ÜÐ4°qÑ8Ó9Ð9Ø	
‹Øˆä�qÓ˜b€qà—g‘g–i‰
ˆð &+ð 	
ˆbˆqˆ'�S‘V�IÑ
Ø
�!‰e�Aˆ,ñà‰6ˆ)ñà˜a™%˜&�kñ"ó 	#ñ  ô
 ˜˜qÓ!Ð!r   c                 óÌ   • [        X5      0 pTUR                  5        H9  u  pgS/[        U5      -  n[        Xa5       H	  u  pšX˜U
'   M     Xu[	        U5      '   M;     [        XRU5      $ )aH  
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  se   € ô$ �qÓ˜b€qà—g‘g–i‰
ˆØ�#”c˜#“h‘,ˆä˜–K‰DˆAØ�A‹Jñ  ð "Œ%�‹.Óñ  ô ˜˜qÓ!Ð!r   c                 óp   • [        U [        5      (       d  [        X5      $ [        U5       H  nU /n M     U $ )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]]]]

)rK   rL   r�   r‰   )r   Úlr   r3   s       r   Údmp_nestrÈ   —  s8   € ô �aœ×ÑÜ˜!ÓÐä�1ŽXˆØˆCŠñ ð €Hr   c           	      óà   • U(       d  U $ U(       d3  U (       d  [        U5      $ US-
  nU  Vs/ s H  n[        XT5      PM     sn$ US-
  nU  Vs/ s H  n[        XQXc5      PM     sn$ s  snf s  snf )z÷
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   )rH   r�   Ú	dmp_raise)r   rÇ   r   r   r¥   r2   r5   s          r   rÊ   rÊ   ®  sn   € ö  ØˆæÞÜ˜A“;Ðà�‰Eˆá+,Ó.ª1 a”˜AÖ!©1Ñ.Ð.à	ˆA‰€Aá,-Ó/ªA qŒY�q˜QÖ"©AÑ/Ð/ùò	 /ùò 0s   ¬A&ÁA+c                 óÀ   • [        U 5      S::  a  SU 4$ Sn[        [        U 5      5       H)  nX* S-
     (       d  M  [        X#5      nUS:X  d  M%  SU 4s  $    X SSU2   4$ )zñ
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   r9   r3   s       r   Údup_deflaterÌ   Î  si   € ô  �!ƒ}˜ÓØ�!ˆtˆà	€Aä”3�q“6Ž]ˆØ��a‘�yÙä�‹Jˆà��6Ø�a�4ŠKñ ð ‘�!�‰fˆ9Ðr   c                 ó  • [        X5      (       a
  SUS-   -  U 4$ [        X5      nS/US-   -  nUR                  5        H'  n[        U5       H  u  pg[	        XF   U5      XF'   M     M)     [        U5       H  u  phU(       a  M  SXF'   M     [        U5      n[        S U 5       5      (       a  X@4$ 0 n	UR                  5        H3  u  p«[        X¤5       VVs/ s H	  u  pÈXÈ-  PM     nnnX¹[        U5      '   M5     U[        X‘U5      4$ s  snnf )a  
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   ó*   #   • U  H	  oS :H  v •  M     g7f©r   NrD   ©r1   Úbs     r   r6   Údmp_deflate.<locals>.<genexpr>  ó   é € Ð
š1�a�Ž6š1ùó   ‚)
r*   r¹   r    Ú	enumerater   r"   Úallrª   rÀ   r«   )r   r   r   r¼   ÚBÚMr3   ÚmrÑ   r½   ÚAr­   Úar„   s                 r   Údmp_deflaterÜ   ï  s  € ô  �!×ÑØ�Q˜‘U‰|˜QˆÐä�AÓ€AØ	
ˆˆQ�‰U‰€Aà�V‰VŽXˆÜ˜a–L‰DˆAÜ˜™˜a“=ˆA‹Dó !ñ ô ˜!–‰ˆßˆqØˆA‹Dñ ô 	ˆa‹€Aä
Ñ
™1Ó
×ÑØˆtˆà
€Aà—G‘G–I‰ˆÜ!$ Q¤Ô,¢™˜ˆaŒf¡ˆÑ,ØŒ%�‹(‹ñ ð Œm˜A !Ó$Ð$Ð$ùó -s   ÃDc           
      ó2  • SnU  Hh  n[        U5      S::  a  SU 4s  $ Sn[        [        U5      5       H+  nX5* S-
     (       d  M  [        XE5      nUS:X  d  M%  SU 4s  s  $    [        X$5      nMj     U[	        U  Vs/ s H
  o3SSU2   PM     sn5      4$ s  snf )a(  
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Ä   r9   r3   s         r   Údup_multi_deflaterà     s›   € ð" 	
€AãˆÜ�a‹=˜AÓØ�e�8ŠOàˆä”s˜1“v–ˆAØ�R˜!‘V—9Ùä�Q“
ˆAà�A�vØ˜%�x”ñ ô �‹JŠñ ð" Œe¡eÓ-¢e ™˜!˜”f¡eÑ-Ó.Ð.Ð.ùÒ-s   Á;B
c                 ó¸  • U(       d  [        X5      u  p4U4U4$ / S/US-   -  peU  Hj  n[        Xq5      n[        Xq5      (       d;  UR                  5        H'  n[	        U5       H  u  pš[        Xi   U
5      Xi'   M     M)     UR                  U5        Ml     [	        U5       H  u  p›U(       a  M  SXi'   M     [        U5      n[        S U 5       5      (       a  X`4$ / nU Hg  n0 nUR                  5        H3  u  pÞ[        XÖ5       VVs/ s H	  u  pûXû-  PM     nnnXì[        U5      '   M5     UR                  [        XÁU5      5        Mi     U[        U5      4$ s  snnf )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   ó*   #   • U  H	  oS :H  v •  M     g7frÏ   rD   rÐ   s     r   r6   Ú$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  sB  € ö" Ü  Ó*‰ˆØˆt�Qˆwˆà�ˆs�A˜‘E‰{€qãˆÜ˜Óˆä˜!×ÑØ—V‘V–X�Ü% ažL‘D�AÜ ¡ a›=�A“Dó )ñ ð 	
�‰�Žñ ô ˜!–‰ˆßˆqØˆA‹Dñ ô 	ˆa‹€Aä
Ñ
™1Ó
×ÑØˆxˆà
€AãˆØˆàŸ™ž	‰HˆAÜ%(¨¤YÔ0¢Y™T˜Q�!”&¡YˆAÑ0ØŒe�A‹h‹Kñ "ð 	
�‰”˜q QÓ'Ö(ñ ð Œe�A‹hˆ;Ðùó 1s   ÄE
c                 óÖ   • US::  a  [        SU-  5      eUS:X  d  U (       d  U $ U S   /nU SS  H6  nUR                  UR                  /US-
  -  5        UR                  U5        M8     U$ )zï
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  ss   € ð  	ˆAƒvÜÐ7¸!Ñ;Ó<Ð<ØˆAƒv–QØˆà�‰dˆV€Fà�1�2“ˆØ�‰�q—v‘v�h  A¡Ñ&Ô'Ø�‰�eÖñ ð €Mr   c           
      ó\  • U(       d  [        XU   U5      $ X   S::  a  [        SX   -  5      eUS-
  US-   peU  Vs/ s H  n[        XqXVU5      PM     n nU S   /nU SS  HC  n	[        SX   5       H  n
UR	                  [        U5      5        M     UR	                  U	5        ME     U$ s  snf )z)Recursive helper for :func:`dmp_inflate`.r   z!all M[i] must be positive, got %sr   N)rç   r<   Ú_rec_inflater‰   r    rH   )r9   rØ   r5   r3   r   rU   r4   r2   r´   r­   Ú_s              r   ré   ré   ˜  sµ   € æÜ˜1 ™d AÓ&Ð&Ø�tˆqƒyÜÐ<¸q¹tÑCÓDÐDàˆq‰5�!�a‘%€qá/0Ó2ªq¨!Œ,�q˜Q 1Ö
%©q€AÐ2à�‰dˆV€Fà�1�2“ˆÜ�q˜!™$–ˆAØ�M‰Mœ( 1›+Ö&ñ  ð 	�‰�eÖñ	 ð €Mùò 	3s   ¼B)c                 ó|   • U(       d  [        XS   U5      $ [        S U 5       5      (       a  U $ [        XUSU5      $ )a  
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   ó*   #   • U  H	  oS :H  v •  M     g7frÏ   rD   )r1   rÙ   s     r   r6   Údmp_inflate.<locals>.<genexpr>Á  rÓ   rÔ   )rç   rÖ   ré   )r   rØ   r   r   s       r   Údmp_inflaterî   ®  s?   € ö  Ü˜1 ™d AÓ&Ð&ä
Ñ
™1Ó
×ÑØˆä˜A ! Q¨Ó*Ð*r   c                 óÆ  • U(       a  [        U SU5      (       a  / X4$ / [        X5      pC[        SUS-   5       H7  nUR                  5        H  nXe   (       d  M    M$     UR	                  U5        M9     U(       d  / X4$ 0 n UR                  5        H1  u  pg[        U5      n[        U5       H  nXe	 M     Xp[        U5      '   M3     U[        U5      -  nU[        XU5      U4$ )a3  
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ª   rL   r[   r"   r!   r«   )r   r   r   ÚJr¼   r4   r#   r­   s           r   Údmp_excluderñ   Ç  sÖ   € ö$ ”˜Q  a×(Ñ(Ø�1ˆxˆàŒ{˜1Ó €qä�1�a˜!‘eŽ_ˆØ—V‘V–XˆEØ�x‰xÚñ ð �H‰H�QŽKñ ö Ø�1ˆxˆà
€AàŸ™ž	‰ˆÜ�U“ˆä˜!–ˆAØ’ñ ð  Œ%�‹,‹ñ "ð ŒˆQ‹�K€AàŒm˜A !Ó$ aÐ'Ð'r   c                 óø   • U(       d  U $ [        X5      0 pUR                  5        H8  u  pV[        U5      nU H  nUR                  US5        M     X`[	        U5      '   M:     U[        U5      -  n[        XU5      $ )zä
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ª   rL   Úinsertr"   r!   r«   )r   rð   r   r   r¼   r#   r­   r4   s           r   Údmp_includerô   ÷  st   € ö  Øˆä�qÓ˜b€qàŸ™ž	‰ˆÜ�U“ˆãˆAØ�L‰L˜˜AÖñ ð  Œ%�‹,‹ñ "ð ŒˆQ‹�K€Aä˜˜qÓ!Ð!r   c                 ó$  • [        X5      0 p@UR                  S-
  nU R                  5        HC  u  pgUR                  5       nUR                  5        H  u  p‰U(       a  X”X†-   '   M  X”Xh-   '   M     ME     X-   S-   n
[	        XJUR
                  5      U
4$ )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_monomr9   Úg_monomr2   rU   s              r   Ú
dmp_injectrü     sˆ   € ô& �qÓ˜b€qà	�‰�!‰€Aà—g‘g–i‰
ˆØ�I‰I‹KˆàŸ'™'ž)‰JˆGÞØ'(�'Ñ#Ó$à'(�'Ñ#Ó$ó	 $ñ  ð 	
‰�‰	€Aä˜˜qŸu™uÓ% qÐ(Ð(r   c                 óD  • [        X5      0 p@UR                  nXR                  -
  S-   nU R                  5        H2  u  pxU(       a	  USU XuS p©O
Xu* S USU*  p©X¤;   a	  X„U
   U	'   M-  X˜0XJ'   M4     UR                  5        H  u  pxU" U5      XG'   M     [        XFS-
  U5      $ )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Ø	�G‰G‰�a‰€Aà—G‘G–I‰ˆÞØ$ R a˜y¨%°¨)‘Wà$ R S˜z¨5°°1°"¨:�Wà‹<Ø"#ˆg‰J�wÓà!˜ˆA‹Jñ ð —G‘G–I‰ˆÙ�Q“4ˆ‹ñ ô ˜ ™E 1Ó%Ð%r   c                 óŠ   • [        X5      (       d  U (       d  SU 4$ Sn[        U 5       H  nU(       d  US-  nM    O   X SU*  4$ )zè
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   r[   )r   r   r3   r2   s       r   Údup_terms_gcdr   b  sL   € ô  ˆa‡|�|ž1Ø�!ˆtˆà	€Aä�aŽ[ˆÞØ�‰FŠAáñ	 ð ��!�ˆfˆ9Ðr   c                 óL  • [        XU5      (       d  [        X5      (       a
  SUS-   -  U 4$ [        X5      n[        [	        UR                  5       5      6 n[        S U 5       5      (       a  X@4$ 0 n UR                  5        H  u  pVX`[        XT5      '   M     U[        XU5      4$ )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   ó*   #   • U  H	  oS :H  v •  M     g7f)r   NrD   )r1   r9   s     r   r6   Ú dmp_terms_gcd.<locals>.<genexpr>–  rÓ   rÔ   )
r   r*   r¹   r   rL   r    rÖ   rª   r   r«   )r   r   r   r¼   rß   r#   r­   s          r   Údmp_terms_gcdr  €  s›   € ô  �Q˜1×Ñ¤¨A×!1Ñ!1Ø�Q˜‘U‰|˜QˆÐä�AÓ€AÜ”d˜1Ÿ6™6›8“nÐ%€Aä
Ñ
™1Ó
×ÑØˆtˆà
€AàŸ™ž	‰ˆØ$)Œ,�uÓ
 Ó!ñ "ð Œm˜A !Ó$Ð$Ð$r   c           
      ó  • [        X5      / pCU(       d8  [        U 5       H'  u  pVU(       d  M  UR                  X#U-
  4-   U45        M)     U$ US-
  n[        U 5       H&  u  pVUR                  [	        XgX#U-
  4-   5      5        M(     U$ )z,Recursive helper for :func:`dmp_list_terms`.r   )r,   rÕ   r    ræ   Ú_rec_list_terms)r9   r5   r#   r…   Útermsr3   r2   rU   s           r   r  r  ¡  s†   € ä˜!Ó €uæÜ˜a–L‰DˆAÞÙà�L‰L˜% q¡5 (Ñ*¨AÐ.Ö/ñ	 !ð €Lð �‰Eˆä˜a–L‰DˆAØ�L‰Lœ¨¨u¸A¹°xÑ/?Ó@ÖAñ !ð €Lr   c                 ó†   • S n[        XS5      nU(       d  SUS-   -  UR                  4/$ Uc  U$ U" U[        U5      5      $ )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                 ó"   ^• [        U U4S jSS9$ )Nc                 ó   >• T" U S   5      $ )Nr   rD   )ÚtermÚOs    €r   Ú<lambda>Ú.dmp_list_terms.<locals>.sort.<locals>.<lambda>Ç  s   ø€ ©a°°Q±¬jr   T)ÚkeyÚreverse)Úsorted)r  r  s    `r   ÚsortÚdmp_list_terms.<locals>.sortÆ  s   ø€ Ü�eÔ!8À$ÑGÐGr   rD   r±   r   )r  r	   r   )r   r   r   Úorderr  r  s         r   Údmp_list_termsr  ´  sO   € ò$Hô ˜A "Ó%€EæØ�q˜1‘u‘˜qŸv™vÐ&Ð'Ð'à�}Øˆá�Eœ<¨Ó.Ó/Ð/r   c                 ó  • [        U 5      [        U5      peXV:w  a0  XV:”  a  UR                  /XV-
  -  U-   nOUR                  /Xe-
  -  U -   n / n[        X5       H  u  p‰UR                  U" X‰/UQ76 5        M     [	        U5      $ )a  
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    rF   )
r   r9   r¤   Úargsr   r   rÙ   r´   rÛ   rÑ   s
             r   Údup_apply_pairsr  Ô  s�   € ô  ˆq‹6”3�q“6€qàƒvØ‹5Ø—‘�˜!™%Ñ  1Ñ$‰Aà—‘�˜!™%Ñ  1Ñ$ˆAà€Fä�A–	‰ˆØ�‰‘a˜�n˜t’nÖ%ñ ô �VÓÐr   c                 ó2  • U(       d  [        XX#U5      $ [        U 5      [        U5      US-
  p‡nXg:w  a(  Xg:”  a  [        Xg-
  X…5      U-   nO[        Xv-
  X…5      U -   n / n	[        X5       H!  u  p«U	R	                  [        X«X#X…5      5        M#     [        X”5      $ )a#  
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_pairsrI   )r   r9   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ˆ!€AàƒvØ‹5Ü˜!™% Ó&¨Ñ*‰Aä˜!™% Ó&¨Ñ*ˆAà€Fä�A–	‰ˆØ�‰”o a¨A°QÓ:Ö;ñ ô �VÓÐr   c                 ó  • [        U 5      nXA:¼  a  XA-
  nOSnXB:¼  a  XB-
  nOSnXU n U (       a@  U S   UR                  :X  a-  U R                  S5        U (       a  U S   UR                  :X  a  M-  U (       d  / $ XR                  /U-  -   $ )z=Take a continuous subsequence of terms of ``f`` in ``K[x]``. r   )r!   r	   rW   )r   rÙ   r   r   r¥   rØ   r„   s          r   Ú	dup_slicer    s�   € äˆA‹€AàƒvØ‰E‰àˆØƒvØ‰E‰àˆà	ˆAˆ€Aæ
��!‘˜Ÿ™“Ø	�‰ˆaŒö ��!‘˜Ÿ™•ö Øˆ	à—F‘F�8˜A‘:‰~Ðr   c                 ó   • [        XUSX45      $ )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   € ä˜˜a  AÓ)Ð)r   c                 ó8  • US:  d  X4:”  a  [        SU< SU< SU< 35      eU(       d  [        XX%5      $ [        X5      0 p`U R                  5        H:  u  pxXs   n	X‘:  d  X’:¼  a  USU S-   XsS-   S -   nXv;   a  Xg==   U-  ss'   M6  X†U'   M<     [	        XdU5      $ )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   r9   r#   r­   r¥   s
             r   r  r  4  s¡   € àˆ1ƒu�“Ý»QÃÂ1ÐEÓFÐFæÜ˜˜qÓ$Ð$ä�qÓ˜b€qàŸ™ž	‰ˆØ‰Hˆà‹5�A“FØ˜"˜1�I Ñ$ u°©U¨V }Ñ4ˆEà‹:Ø‹H˜Ñ�Hàˆe‹Hñ "ô ˜˜qÓ!Ð!r   c           	      ó  • [        SU S-   5       Vs/ s H'  oCR                  [        R                  " X5      5      PM)     nnUS   (       d4  UR                  [        R                  " X5      5      US'   US   (       d  M4  U$ s  snf )zô
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‰   rr   ÚrandomÚrandint)r   rÛ   rÑ   r   rê   r   s         r   Ú
dup_randomr%  L  sl   € ô 49¸¸AÀ¹E´?ÓD²?¨a�)‰)”F—N’N 1Ó(Ö
)±?€AÐDà��dØ�y‰yœŸš¨Ó-Ó.ˆˆ!‰ð ��d‰dð €Hùò 	Es   ’.B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?   rB   rF   rI   rQ   rT   rY   r\   r^   r`   rc   rf   rk   rn   ru   rw   rz   r|   r€   r‚   r†   r*   rH   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%  rD   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   