o
    i                     @   s   d dl Z d dlmZ d dlZd dlmZ d dlmZ	 d dl
mZmZ d dlmZmZmZmZmZ d dlmZ d dlZdd	 Zd
d Zdd Zdd Zdd ZG dd deeZG dd deZG dd deeZdS )    N)product)
polynomial)	polyutils)jitnjit)TestCasetagneeds_lapackEnableNRTStatsMixinMemoryLeakMixin)TypingErrorc                 C   
   t | S N)nproots)p r   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_polynomial.pyroots_fn      
r   c                 C      t | |S r   )polypolyaddc1c2r   r   r   r         r   c                 C   r   r   )r   polysubr   r   r   r   r      r   r   c                 C   r   r   )r   polymulr   r   r   r   r      r   r   c                 C   r   r   )putrimseq)seqr   r   r   r       r   r    c                       sH   e Zd ZdZejejejejfZ	 fddZ
efddZdd Z  ZS )TestPolynomialBasezV
    Provides setUp and common data/error modes for testing polynomial functions.
    c                    s   t   tt|   d S r   )gcZcollectsuperr"   setUpself	__class__r   r   r%   '   s   zTestPolynomialBase.setUpc                 C   sH   |  |}||  W d    n1 sw   Y  | |t|j d S r   )assertRaisesassertInstr	exception)r'   cfuncargsmsgerrraisesr   r   r   assert_error,   s   
zTestPolynomialBase.assert_errorc                 C   s   d}|  ||| d S )NzInput must be a 1d array.r3   )r'   r.   r/   r0   r   r   r   assert_1d_input1   s   z"TestPolynomialBase.assert_1d_input)__name__
__module____qualname____doc__r   float64Zfloat32
complex128Z	complex64dtypesr%   
ValueErrorr3   r5   __classcell__r   r   r(   r   r"      s    r"   c                   @   s    e Zd Zdd Zedd ZdS )
TestPoly1Dc                 C   s   |d }|  ||| d S )Nz+() argument must not cause a domain change.r4   )r'   namer.   r/   r0   r   r   r   assert_no_domain_change8   s   z"TestPoly1D.assert_no_domain_changec              
      s  t ddt ttjj fdd}tdgtg dtg dtg dtg d	tg d
tg df}t|tjtj	gt
j D ]\}}||}|| qOtdgtg dtg dtg dtg dtg dtg df}t|jdd  D ]\}}||}|| q tdddf tg d}d |f  |tj d S )NT)Znopythonc                    s   t | fi |} | fi |}| jjv rt| jj}n}tjj||d| d| d    | fi | W d    d S 1 sFw   Y  d S )N
   d   )ZrtolZatol)	r   dtyper<   r   finfo
resolutiontestingZassert_allcloseZassertNoNRTLeak)akwargsexpectedgotrF   r.   Zdefault_resolutionr'   r   r   checkC   s   
"z$TestPoly1D.test_roots.<locals>.check   )rN         )r   r   r   )rN         rQ   )r   r   r   rN   rO   rP   )rN   rN   r   r   r   )r   r   rN   r   r   r         ?      ?)rN   y      @      ?rP   )r   y                r   )rN   y      @      ?rR   rQ   )r   r   r   rS   rO   rP   )rS   rN   r   r   r   )r   r   rS   r   r   r   rP   g      @)g      @       @g              ?Zeigvals)r   r   r   rE   r:   rF   arrayr   Zint32Zint64listr<   Zastyper5   arangereshaperA   r;   )r'   rM   Z	r_vectorsvrD   rH   Z	c_vectorsxr   rL   r   
test_roots<   s<   






zTestPoly1D.test_rootsN)r6   r7   r8   rA   r	   r\   r   r   r   r   r?   6   s    r?   c                   @   s^   e Zd Zdd Zdd ZdddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd ZdS )TestPolynomialc                 C   s8   t }tt }dd }| D ]}| |||| qd S )Nc                  s   s,    t dD ]} tdgdg|   V  qd S )N   rN   r   ranger   rV   )ir   r   r   inputs   s   z1TestPolynomial.test_trimseq_basic.<locals>.inputs)r    r   assertPreciseEqual)r'   pyfuncr.   rb   Zcoefsr   r   r   test_trimseq_basic   s   
z!TestPolynomial.test_trimseq_basicc                 C   s   t t}|   | t}|d W d    n1 sw   Y  | dt|j | t}|t	d
dd W d    n1 sEw   Y  | dt|j | t}|d W d    n1 sgw   Y  | dt|j d S )	Nabcz%The argument "seq" must be array-likerB   r^   rP   Coefficient array is not 1-d)rN   rP   rO   r   z6Unsupported type UniTuple(int64, 4) for argument "seq")r   r    disable_leak_checkr*   r   r+   r,   r-   r   rX   rY   )r'   r.   r2   er   r   r   test_trimseq_exception   s(   

z%TestPolynomial.test_trimseq_exceptionFc                 C   s@   t |}dd }| D ]\}}| j|||||||d qd S )Nc                  s   s   t dD ]$} t dD ]}tdg|  dg }tdg| dg }||fV  qqg dg dfV  g ddfV  dg dfV  g ddfV  dV  tg dtg dfV  tg dtg dfV  tg dtg dfV  d	V  d
V  dV  d S )Nr^   r   rN   rN   rP   rO   rO   )rO   rk   )rU   rT         @)y              ?y               @              @)rk   rl   )rk   rm   ))rN   gMbP?rO   rk   r_   )ra   jp1p2r   r   r   rb      s$   
z5TestPolynomial._test_polyarithm_basic.<locals>.inputsignore_sign_on_zero)r   rc   )r'   rd   rr   r.   rb   ro   rp   r   r   r   _test_polyarithm_basic   s   z%TestPolynomial._test_polyarithm_basicc                 C   sp  t |}|   | t}|dtg d W d    n1 s"w   Y  | dt|j | t}|tg dd W d    n1 sJw   Y  | dt|j | t}|t	d
ddtg d W d    n1 syw   Y  | dt|j | t}|tg dt	d
dd W d    n1 sw   Y  | dt|j d S )	Nrf   rk   z$The argument "c1" must be array-likez$The argument "c2" must be array-likerB   r^   rP   rg   )r   rh   r*   r   r   rV   r+   r,   r-   rX   rY   )r'   rd   r.   r2   ri   r   r   r   _test_polyarithm_exception   s4   $$z)TestPolynomial._test_polyarithm_exceptionc                 C      |  t d S r   )rs   r   r&   r   r   r   test_polyadd_basic      z!TestPolynomial.test_polyadd_basicc                 C   ru   r   )rt   r   r&   r   r   r   test_polyadd_exception   rw   z%TestPolynomial.test_polyadd_exceptionc                 C   s   | j tdd d S )NTrq   )rs   r   r&   r   r   r   test_polysub_basic   s   z!TestPolynomial.test_polysub_basicc                 C   ru   r   )rt   r   r&   r   r   r   test_polysub_exception   rw   z%TestPolynomial.test_polysub_exceptionc                 C   ru   r   )rs   r   r&   r   r   r   test_polymul_basic   rw   z!TestPolynomial.test_polymul_basicc                 C   ru   r   )rt   r   r&   r   r   r   test_polymul_exception   rw   z%TestPolynomial.test_polymul_exceptionN)F)r6   r7   r8   re   rj   rs   rt   rv   rx   ry   rz   r{   r|   r   r   r   r   r]      s    
r]   )r#   	itertoolsr   numpyr   Znumpy.polynomialr   r   r   r   Znumbar   r   Znumba.tests.supportr   r   r	   r
   r   Znumba.core.errorsr   Zunittestr   r   r   r   r    r"   r?   r]   r   r   r   r   <module>   s"    Q