U
    Ã9%eÿ  ã                   @   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   s
   t  | ¡S ©N)ÚnpÚroots)Úp© r   úZ/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_polynomial.pyÚroots_fn   s    r   c                 C   s   t  | |¡S r   )ÚpolyÚpolyadd©Úc1Úc2r   r   r   r      s    r   c                 C   s   t  | |¡S r   )r   Úpolysubr   r   r   r   r      s    r   c                 C   s   t  | |¡S r   )r   Úpolymulr   r   r   r   r      s    r   c                 C   s
   t  | ¡S r   )ÚpuÚtrimseq)Úseqr   r   r   r      s    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   s4   |   |¡}||Ž  W 5 Q R X |  |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.©r/   )r#   r*   r+   r,   r   r   r   Úassert_1d_input1   s    z"TestPolynomialBase.assert_1d_input)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úfloat64Zfloat32Ú
complex128Z	complex64Údtypesr!   Ú
ValueErrorr/   r1   Ú__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.r0   )r#   Únamer*   r+   r,   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 dddg¡t dddg¡t dd	d
d	g¡t ddddddg¡t dddddg¡t ddddddg¡f}t|tjtj	gt
ˆjƒ ƒD ]\}}| |¡}||ƒ q¼t dg¡t dddg¡t dddg¡t ddd
d	g¡t ddddddg¡t dddddg¡t ddddddg¡f}t|ˆjdd … ƒD ]\}}| |¡}||ƒ q`ˆ ˆ t d¡ dd¡f¡ t ddddg¡}ˆ dˆ |f¡ ˆ | tj¡ƒ d S )NT)Znopythonc              	      sx   t | f|Ž}ˆ | f|Ž}| jˆjkr4t | j¡j}nˆ}tjj||d| d| d ˆ ¡  ˆ | f|Ž W 5 Q R X d S )Né
   éd   )ZrtolZatol)	r   Údtyper8   r   ÚfinfoÚ
resolutionÚtestingZassert_allcloseZassertNoNRTLeak)ÚaÚkwargsÚexpectedÚgotrB   ©r*   Zdefault_resolutionr#   r   r   ÚcheckC   s    ü
z$TestPoly1D.test_roots.<locals>.checké   é   é   r   é   é   y      ð?      ð?y      @      ð?y                y      @      ð?g      @g      @ç       @g        ç      ð?Zeigvals)r   r   r   rA   r6   rB   Úarrayr   Zint32Zint64Úlistr8   Zastyper1   ÚarangeÚreshaper=   r7   )r#   rI   Z	r_vectorsÚvr@   rD   Z	c_vectorsÚxr   rH   r   Ú
test_roots<   s<    
ùÿ



ù
zTestPoly1D.test_rootsN)r2   r3   r4   r=   r	   rW   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é   rJ   r   ©Úranger   rQ   )Úir   r   r   ÚinputsŒ   s    z1TestPolynomial.test_trimseq_basic.<locals>.inputs)r   r   ÚassertPreciseEqual)r#   Úpyfuncr*   r]   Zcoefsr   r   r   Útest_trimseq_basic‰   s
    
z!TestPolynomial.test_trimseq_basicc              	   C   s²   t tƒ}|  ¡  |  t¡}|dƒ W 5 Q R X |  dt|jƒ¡ |  t¡}|t 	d¡ 
dd¡ƒ W 5 Q R X |  dt|jƒ¡ |  t¡}|dƒ W 5 Q R X |  dt|jƒ¡ d S )	NÚabcz%The argument "seq" must be array-liker>   rY   rL   úCoefficient array is not 1-d)rJ   rL   rK   r   z6Unsupported type UniTuple(int64, 4) for argument "seq")r   r   Údisable_leak_checkr&   r   r'   r(   r)   r   rS   rT   )r#   r*   r.   Ú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 ]H} t dƒD ]:}t dg|  dg ¡}t dg| dg ¡}||fV  qqdddgdddgfV  dddgdfV  ddddgfV  dddgdfV  dV  t dddg¡t dd	d
g¡fV  t dddg¡t dd	d
g¡fV  t dddg¡t dddg¡fV  dV  dV  dV  d S )NrY   r   rJ   rL   rK   ©rJ   rL   rK   )rK   rf   rP   rO   ç      @y              ð?y               @ù              @)rf   rg   )rf   rh   ))rJ   gü©ñÒMbP?rK   rf   rZ   )r\   ÚjÚp1Úp2r   r   r   r]   «   s     """z5TestPolynomial._test_polyarithm_basic.<locals>.inputs©Úignore_sign_on_zero)r   r^   )r#   r_   rm   r*   r]   rj   rk   r   r   r   Ú_test_polyarithm_basic¨   s    ÿz%TestPolynomial._test_polyarithm_basicc              	   C   s(  t |ƒ}|  ¡  |  t¡}|dt dddg¡ƒ W 5 Q R X |  dt|jƒ¡ |  t¡}|t dddg¡dƒ W 5 Q R X |  dt|jƒ¡ |  t¡*}|t 	d¡ 
dd¡t dddg¡ƒ W 5 Q R X |  d	t|jƒ¡ |  t¡*}|t dddg¡t 	d¡ 
dd¡ƒ W 5 Q R X |  d	t|jƒ¡ d S )
Nra   rJ   rL   rK   z$The argument "c1" must be array-likez$The argument "c2" must be array-liker>   rY   rb   )r   rc   r&   r   r   rQ   r'   r(   r)   rS   rT   )r#   r_   r*   r.   rd   r   r   r   Ú_test_polyarithm_exceptionÄ   s,     ÿ ÿ.ÿ.ÿz)TestPolynomial._test_polyarithm_exceptionc                 C   s   |   t¡ d S r   )rn   r   r"   r   r   r   Útest_polyadd_basicÞ   s    z!TestPolynomial.test_polyadd_basicc                 C   s   |   t¡ d S r   )ro   r   r"   r   r   r   Útest_polyadd_exceptioná   s    z%TestPolynomial.test_polyadd_exceptionc                 C   s   | j tdd d S )NTrl   )rn   r   r"   r   r   r   Útest_polysub_basicä   s    z!TestPolynomial.test_polysub_basicc                 C   s   |   t¡ d S r   )ro   r   r"   r   r   r   Útest_polysub_exceptionç   s    z%TestPolynomial.test_polysub_exceptionc                 C   s   |   t¡ d S r   )rn   r   r"   r   r   r   Útest_polymul_basicê   s    z!TestPolynomial.test_polymul_basicc                 C   s   |   t¡ d S r   )ro   r   r"   r   r   r   Útest_polymul_exceptioní   s    z%TestPolynomial.test_polymul_exceptionN)F)r2   r3   r4   r`   re   rn   ro   rp   rq   rr   rs   rt   ru   r   r   r   r   rX   ‡   s   
rX   )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;   rX   r   r   r   r   Ú<module>   s    Q