o
    X۷i#                     @  sD   d dl mZ d dlZd dlZdd Zdd Zddd	Zdd
dZdS )    )annotationsNc              
   C  s:   zt | W S  ty } z
t| d|  |d}~ww )aA  
    Like `operator.index`, but emits a custom exception when passed an
    incorrect type

    Parameters
    ----------
    x : int-like
        Value to interpret as an integer
    desc : str
        description to include in any error message

    Raises
    ------
    TypeError : if x is a float or non-numeric
    z must be an integer, received N)operatorindex	TypeError)xdesce r	   O/home/ubuntu/vllm_env/lib/python3.10/site-packages/cupy/polynomial/polyutils.py_as_int   s   r   c                 C  sZ   | j dkr	td| j dkrtd| jdkr| S tj| dd}|jdkr'|S | dd S )a9  Removes small polynomial series coefficients.

    Args:
        seq (cupy.ndarray): input array.

    Returns:
        cupy.ndarray: input array with trailing zeros removed. If the
        resulting output is empty, it returns the first element.

    .. seealso:: :func:`numpy.polynomial.polyutils.trimseq`

    r   zInput must be 1-d array   b)trimN)ndimr   
ValueErrorsizecupy
trim_zeros)seqretr	   r	   r
   trimseq   s   



r   Tc                   s   g }| D ]-}|j dkrtd|jdkrtd|jjdkr"td| }|r,t|}|| qtj	|   fdd|D }|S )	a;  Returns argument as a list of 1-d arrays.

    Args:
        alist (cupy.ndarray or list of cupy.ndarray): 1-D or 2-D input array.
        trim (bool, optional): trim trailing zeros.

    Returns:
        list of cupy.ndarray: list of 1-D arrays.

    .. seealso:: :func:`numpy.polynomial.polyutils.as_series`

    r   Coefficient array is emptyr   Coefficient array is not 1-dr   z&Coefficient arrays have no common typec                   s   g | ]	}|j  d dqS )Fcopy)astype).0adtyper	   r
   
<listcomp>Q   s    zas_series.<locals>.<listcomp>)
r   r   r   r   kindravelr   appendr   common_type)alistr   arraysr   r   r	   r   r
   	as_series7   s   


r'   c                 C  s   |dk rt d| jdkrt d| jdkrt d| jjdkr$t d| jdkr-|  } | jt| dd	} t	| |kd
d
d }| jtj
j|| j  }|dkr^t| d
d S | d
| S )a  Removes small trailing coefficients from a polynomial.

    Args:
        c(cupy.ndarray): 1d array of coefficients from lowest to highest order.
        tol(number, optional): trailing coefficients whose absolute value are
            less than or equal to ``tol`` are trimmed.

    Returns:
        cupy.ndarray: trimmed 1d array.

    .. seealso:: :func:`numpy.polynomial.polyutils.trimcoef`

    r   ztol must be non-negativer   r   r   r   zbool inputs are not allowedFr   N)r   r   r   r   r!   r"   r   r   r$   abs_manipulation
add_remove_first_nonzero_krnlitem
zeros_like)ctolfiltindr	   r	   r
   trimcoefU   s(   


r3   )T)r   )
__future__r   r   r   r   r   r'   r3   r	   r	   r	   r
   <module>   s    
