o
    i*                     @   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eejd"ddZdd Zdd Zeejdd Zeejdd Zeejdd Z eej!ddd"ddZ"eej#d#ddZ$eej%d d! Z&dS )$z5
Implementation of operations involving polynomials.
    N)
polynomial)	polyutils)literal_unroll)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rgtt|d f dj	}| dd   | d  |dd d f< tj
|}ntjd d}|dkr~t|tj| dfS |S )N   zInput must be a 1d array.r   r      )lenshape
ValueErrornpnonzerozerosintdiagonesTlinalgeigvalshstack)pnon_zerotznArootscast_t k/home/ubuntu/maya3_transcribe/venv/lib/python3.10/site-packages/numba/np/polynomial/polynomial_functions.py
roots_impl   s     "zroots_impl.<locals>.roots_impl)getattr
isinstancer   Integerr   float64r	   )r   tyr'   r%   r#   r&   r'      s   "r'   c                 C   s\   t | sd}t|t| tjrd}t||  t| dkr(d}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   sJ   t | dkr| S tt | d ddD ]
}| | dkr nq| d |d  S )Nr   r   r   )r   range)seqir%   r%   r&   implN   s   zpolyutils_trimseq.<locals>.impl)	r   r   TypingErrorr)   r   	BaseTupler   ndimNumbaValueError)r/   msgr1   r%   r%   r&   polyutils_trimseq@   s   

	r7   Tc                    s   t | sd}t|t|ttjfsd}t|tjt| tj	t| tj
 rBttdd | D r=tdt|  n& rRtt| }t|tjnt| dkrctt| jntdd
 fdd		}|S )Nz'The argument "alist" must be array-likez#The argument "trim" must be booleanc                 S   s   g | ]	}t |d kqS r   )r   r4   .0ar%   r%   r&   
<listcomp>i   s    z'polyutils_as_series.<locals>.<listcomp>r-   r   Tc                    s   rg }t | D ]}|tt| qn r&fdd| D }nt| }fdd|D }tdd |D dkrCtd|rLdd |D }|}|S )Nc                    "   g | ]}t t | qS r%   r   
atleast_1dasarrayastyper9   	res_dtyper%   r&   r<          z5polyutils_as_series.<locals>.impl.<locals>.<listcomp>c                    r=   r%   r>   r9   rB   r%   r&   r<      rD   c                 S   s   g | ]}|j qS r%   )sizer9   r%   r%   r&   r<      s    r   zCoefficient array is emptyc                 S   s   g | ]}t |qS r%   )putrimseqr9   r%   r%   r&   r<      s    )r   appendr   r?   r@   rA   minr   )alisttrimarraysitem	alist_arrret
list_inputrC   tuple_inputr%   r&   r1   y   s&   


z!polyutils_as_series.<locals>.implT)r   r   r2   r)   boolr   Booleanr   r+   r3   Listanyarrayr5   _poly_result_dtyper	   _get_list_typeresult_typer4   r   )rJ   rK   r6   dtr1   r%   rP   r&   polyutils_as_seriesZ   s*   




r]   c                 C   s&   | j }t|tjst|rt|S |S N)r   r)   r   Numberr   rZ   )lr\   r%   r%   r&   rZ      s   rZ   c               	   G   s   t j}| D ]V}t|tjr|j}n(t|tjrt|g}nt|tjr'|g}nt|tjr2|j	g}nd}t
|zdd |D }|| t j| }W q t
jy[   d}t
|w t|S )NzInput dtype must be scalarc                 S   s   g | ]}t |qS r%   )r	   )r:   tr%   r%   r&   r<      s    z&_poly_result_dtype.<locals>.<listcomp>zInput dtype must be scalar.)r   r+   r)   r   r3   rV   rZ   r_   Arrayr   r   r2   rH   r[   NumbaNotImplementedErrorr
   )argsrC   rM   s1r6   r`   r%   r%   r&   rY      s*   



rY   c                 C   8   t | sd}t|t |sd}t|dd }|S )N$The argument "c1" must be array-like$The argument "c2" must be array-likec                 S   sv   t | |f\}}t|t| }|dkr!t|}t||f}|dk r2t| }t||f}|| }t |S Nr   rF   	as_seriesr   r   r   concatenaterG   c1c2arr1arr2diffzrvalr%   r%   r&   r1         

znumpy_polyadd.<locals>.implr   r   r2   rn   ro   r6   r1   r%   r%   r&   numpy_polyadd      

rx   c                 C   rf   )Nrg   rh   c                 S   sv   t | |f\}}t|t| }|dkr!t|}t||f}|dk r2t| }t||f}|| }t |S ri   rj   rm   r%   r%   r&   r1      ru   znumpy_polysub.<locals>.implrv   rw   r%   r%   r&   numpy_polysub   ry   rz   c                 C   rf   )Nrg   rh   c                 S   s(   t | |f\}}t||}t |S r^   )rF   rk   r   convolverG   )rn   ro   rp   rq   rt   r%   r%   r&   r1      s   
znumpy_polymul.<locals>.implrv   rw   r%   r%   r&   numpy_polymul   s   

r|   )prefer_literalc                    s   t | sd}t|t |sd}t|t|ttjfs%d}t|t|| t| tj	 d t| tj
r@dt|   t|trH|n|jd fdd	}|S )	Nz#The argument "x" must be array-like#The argument "c" must be array-likez%The argument "tensor" must be booleanr8   Tc                    s   t |}t | }rr||j  }t|}||d  |d  }t|d ddD ]}||d  ||  }q2|S )Nr   r   r   )r   r@   rA   reshaper   r   r.   )xctensorarrinputsr`   yr0   	new_shaperC   
tensor_arg
x_nd_arrayr%   r&   r1     s   zpoly_polyval.<locals>.implrS   )r   r   r2   r)   rT   r   BooleanLiteralRequireLiteralValuerY   r_   rb   r   r4   literal_value)r   r   r   r6   r1   r%   r   r&   poly_polyval   s&   




r   r   c                    s   t | sd}t|t|ttjfsd}t|tt| t	
t	js2d d}t|t	| dkpHt| tjtjfoHt| jtj d fdd	}|S )	Nr~   z#The argument "m" must be an integerz"Input dtype must be scalar. Found z insteadr   c                    s   t | } | j}t|D ];}t| }t j|d f| jdd   |d}| d d |d< | d |d< td|D ]}| | |d  ||d < q9|} q rRt	| S | S )Nr   r   r   )
r   r@   rA   r   r.   r   emptyr   rF   rG   )r   mcdtr0   r    tmpjis1DrC   r%   r&   r1   B  s   "
zpoly_polyint.<locals>.implr8   )r   r   r2   r)   r   r   r*   r	   rY   r   
issubdtypenumberr4   rV   r3   r   r_   )r   r   r6   r1   r%   r   r&   poly_polyint-  s    


r   c                 C   rf   )Nrg   rh   c           
      S   s  t | |f\}}|d dkrt t|}t|}||k r(|d d d |fS |dkr:||d  |d d d fS || }|d }|d d | }|}|d }	|dkrn|||	  |||	  8  < |d8 }|	d8 }	|dksT||	d d  | t |d |	d  fS )Nr   r   r   )rF   rk   ZeroDivisionErrorr   rG   )
rn   ro   rp   rq   l1l2dlensclr0   r   r%   r%   r&   r1   `  s(   *znumpy_polydiv.<locals>.implrv   rw   r%   r%   r&   numpy_polydivV  s   

r   rS   r8   )'__doc__numpyr   numpy.polynomialr   polyr   rF   numbar   
numba.corer   r   numba.core.extendingr   numba.np.numpy_supportr   r	   r
   r"   r'   rG   r7   rk   r]   rZ   rY   polyaddrx   polysubrz   polymulr|   polyvalr   polyintr   polydivr   r%   r%   r%   r&   <module>   s8    
/
9



.(