U
    jg                     @   s   d Z ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZmZmZ eejd	d
 Zeejdd Zdd Zeejdd Zeejdd Zeejdd ZdS )z5
Implementation of operations involving polynomials.
    N)
polynomial)	polyutils)typeof)typeserrors)overload)type_can_asarrayas_dtype
from_dtypec                    s8   t | d| }t|tjr tj nt|  fdd}|S )Ndtypec                    s  t | jdkrtdt| d }t |dkr>tjd dS t | |d  d }| t|d t|d d  } t | }|dkrtt|d f dj	}| dd   | d  |dd d f< tj
|}ntjd d}|dkrt|tj| dfS |S d S )N   zInput must be a 1d array.r   )r      )lenshape
ValueErrornpZnonzerozerosintZdiagZonesTZlinalgZeigvalsZhstack)pZnon_zerotznArootsZcast_t 7/tmp/pip-unpacked-wheel-qtpwf23r/numba/np/polynomial.py
roots_impl   s      "zroots_impl.<locals>.roots_impl)getattr
isinstancer   ZIntegerr   float64r	   )r   tyr   r   r   r   r      s    "r   c                 C   s\   t | sd}t|t| tjr4d}t||  t| dkrPd}t|dd }|S )Nz%The argument "seq" must be array-likez&Unsupported type %r for argument "seq"r   Coefficient array is not 1-dc                 S   sN   t | dkr| S tt | d ddD ]}| | dkr$ q:q$| d |d  S d S )Nr   r   r   )r   range)seqir   r   r   implM   s    zpolyutils_trimseq.<locals>.impl)	r   r   TypingErrorr    r   Z	BaseTupler   ndimNumbaValueError)r%   msgr'   r   r   r   polyutils_trimseq?   s    

	r,   c                 C   st   t j}| D ]`}t|tjr(tt|}n6t|tjrTdd |jD }tt j| }n
t|j	}t ||}q
t
|S )Nc                 S   s   g | ]}t |qS r   )r	   ).0r"   r   r   r   
<listcomp>`   s     z&_poly_result_dtype.<locals>.<listcomp>)r   r!   r    r   Numberstrr	   TupleZresult_typer   r
   )tupZ	res_dtypeitems1tr   r   r   _poly_result_dtypeX   s    
r6   c                    sr   t | sd}t|t |s,d}t|t| dksHt|dkrVd}t|t| |f  fdd}|S )N$The argument "c1" must be array-like$The argument "c2" must be array-liker   r#   c                    s   t | } t |}t |  }t | }t|t| }|dkrdt |}t ||f}|dk rt | }t ||f}|| }t|S Nr   	r   asarray
atleast_1dastyper   r   Zconcatenateputrimseqc1c2arr1arr2ZdiffZzrvalZresult_dtyper   r   r'   w   s    


znumpy_polyadd.<locals>.implr   r   r(   r   r)   r*   r6   rA   rB   r+   r'   r   rF   r   numpy_polyaddg   s    


rI   c                    sr   t | sd}t|t |s,d}t|t| dksHt|dkrVd}t|t| |f  fdd}|S )Nr7   r8   r   r#   c                    s   t | } t |}t |  }t | }t|t| }|dkrdt |}t ||f}|dk rt | }t ||f}|| }t|S r9   r:   r@   rF   r   r   r'      s    


znumpy_polysub.<locals>.implrG   rH   r   rF   r   numpy_polysub   s    


rJ   c                    sr   t | sd}t|t |s,d}t|t| dksHt|dkrVd}t|t| |f  fdd}|S )Nr7   r8   r   r#   c                    sD   t | } t |}t | }t |}t || }t|S )N)r   r;   r<   Zconvolver=   r>   r?   )rA   rB   rC   rD   rE   rF   r   r   r'      s    



znumpy_polymul.<locals>.implrG   rH   r   rF   r   numpy_polymul   s    


rK   )__doc__Znumpyr   Znumpy.polynomialr   Zpolyr   r>   Znumbar   Z
numba.corer   r   Znumba.core.extendingr   Znumba.np.numpy_supportr   r	   r
   r   r   r?   r,   r6   ZpolyaddrI   ZpolysubrJ   ZpolymulrK   r   r   r   r   <module>   s$   
/

!
!