
    wgr                        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     [/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/sympy/polys/densebasic.pypoly_LCr      s      vv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      vv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   =   .      1aL	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VaZ tQU1  QSVaZ <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    $ q6A: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1v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     5a~aAq)5s   )r,   max)gr5   r3   r4   s    ```r   r0   r0      s;    Av!Qq5!a%DAq51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1uAAq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1u1ua!e1 	,AQ1d+	, 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+      61q5>DQ1d#;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 FA	 QR5Lr   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!eqA !QFA	 	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Aq!''JKKAws
 	4AmAq!a%33F	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4Az!Q'4a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    $ 1a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      7Nr   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      Aw	AA%&(Xa^(((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    $ 8Or   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+    $ Qx	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/qqxx{/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7qz!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    & 1b"%%	~"(	AA!=Q{1a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%     31q||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    $ 	1u;a?@@	
c!fvv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    $ 	1u;a?@@	
c!fAAq!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 	#q5?!CDD#a&[66M1a ADyQU8QUqA	# 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     q6Q;aD	Q  5Lr   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1X 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     155!$$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     aeeQ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
q6Q;aD	Q	  	y1v{QCx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     {1q5\ 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?      	1uxz&+Ah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=      	1us1u+085aAq!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      	qvvx="qA!Sq"b! 	'AHHQUU1aff%&	' Q< q"b! 	*AHHQUUA4()	* 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^     	qvvx="qA1b" #	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1XuQRyd6>!&F4L!5?F4L+ &++- !a%!qA1b" "

1HH]5!Q/0HHXa[!" 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     aff~A
BvA1a!e_ $QU8QU8FA4L$ Mr   c                     | s|rd|j                   iS t        |       dz
  i }}t        d|dz         D ]  }| ||z
     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     166{A
BvA1a!e_ !QU8!a%F1I! 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     1ad++!QDa!eaff%%a#QUB&qADy1a!e_ '!a%!$'') 	'JC!&FA4#:	'' 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    ( 	1uAQ!a%4q899	
aq!bqAggi +
U &+ 	
#bq'SVI

a!eA,q6)!a%&k" 	#+
 Aq!!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!bqAggi "
U#c#h,QK 	DAqGAJ	 "%." Aq!!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1X 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Aq!..	AA,-/qYq!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3q6] !ayAJ6a4K a!f9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>       
a1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AqA	
QUAVVX !aL 	!DAq!a=AaD	!! ! 1AaD 	aA

1
!t
AGGI 5!$Q,Aa1f,,%( mAq!$$$ -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e8Os1v 	 AaR!V9Q
AAv%x	  AJ" ee-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tQwsAE{qA 1!QVVX )%aL )DAq!a=AaD)) 	
 ! 1AaD 	aA

1
%x
A )	 	 HAu%(AY0TQ!q&0A0AeAhK	  	
q!Q'() eAh; 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      	Av7!;<<AvQdVF12 qvvh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    1adA&&tqy<qtCDDq5!a%qA/02!,q!Q1
%2A2dVF12 q!A$ 	'AMM(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@      1adA&&

1
Aq!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(1ax{1a qA1a!e_ VVX 	EQx	 HHQK 1ax
A	  uU! 	Aa	  %,  QKAmAq!$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!bqA	  uU 	ALLA	  %,  QKAAq!!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!bqA	!Aggi )
IIK'') 	)JGQ'('G#$'('G#$		)) 	
A	AAquu%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!bqA	A	AGGaAGGI 	&q$Ray%)WG$aRSz51":WGa<"#AgJw!1AgJ	& GGI qQ4% AE1%%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[ FA	 a!f9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Aq!1QU|QAqAd1668n%A

1
!t
A	 *u$),ua
 !* mAq!$$$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uAaL 	0DAqLL%1q5(*A./		0 L EaL 	BDAqLLAu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 Aq"%Eq1uqvv&''}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      q63q6qAAvq5!a% 1$A!a% 1$AFAq	 &1a1ntn%& 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!fc!fa!e!qAAvq5!a%A&*A!a%A&*AFAq	 <1oaAtQ:;< VQ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AvEAvE	!AA
!	a ! 	AFF8A:~r   c                 "    t        | ||d||      S )z=Take a continuous subsequence of terms of ``f`` in ``K[X]``. r   )dmp_slice_in)r   r   r}   r   r   s        r   	dmp_slicer  /  s    1aAq))r   c                 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    1uAQ1EFFAq!$$q!bqA	 	u!Hq5AF"1I$uQUV}4EA:eHHAeH	 Aq!!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?Da!))FNN1a(
)DADdyy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*021"<,;2B:5$@.$4'4@2*%" "<01262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   