U
    ¿ÿjgÿ  ã                   @   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   ú?/tmp/pip-unpacked-wheel-qtpwf23r/numba/tests/test_polynomial.pyÚroots_fn   s    r   c                 C   s   t  | |¡S r   )ÚpolyÚpolyadd©Z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.   r0   Ú__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.r/   )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   Údtyper7   r   ÚfinfoÚ
resolutionZtestingZassert_allcloseZassertNoNRTLeak)ÚaÚkwargsÚexpectedÚgotrA   ©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   r@   r5   rA   Úarrayr   Zint32Zint64Úlistr7   Zastyper0   ÚarangeÚreshaper<   r6   )r"   rG   Z	r_vectorsÚvr?   rB   Z	c_vectorsÚxr   rF   r   Ú
test_roots<   s<    
ùÿ



ù
zTestPoly1D.test_rootsN)r1   r2   r3   r<   r	   rU   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é   rH   r   ©Úranger   rO   )Ú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=   rW   rJ   úCoefficient array is not 1-d)rH   rJ   rI   r   z6Unsupported type UniTuple(int64, 4) for argument "seq")r   r   Údisable_leak_checkr%   r   r&   r'   r(   r   rQ   rR   )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 )NrW   r   rH   rJ   rI   ©rH   rJ   rI   )rI   rd   rN   rM   ç      @y              ð?y               @ù              @)rd   re   )rd   rf   ))rH   gü©ñÒMbP?rI   rd   rX   )rZ   ÚjÚp1Úp2r   r   r   r[   «   s     """z5TestPolynomial._test_polyarithm_basic.<locals>.inputs©Úignore_sign_on_zero)r   r\   )r"   r]   rk   r)   r[   rh   ri   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 )
Nr_   rH   rJ   rI   z$The argument "c1" must be array-likez$The argument "c2" must be array-liker=   rW   r`   )r   ra   r%   r   r   rO   r&   r'   r(   rQ   rR   )r"   r]   r)   r-   rb   r   r   r   Ú_test_polyarithm_exceptionÄ   s,     ÿ ÿ.ÿ.ÿz)TestPolynomial._test_polyarithm_exceptionc                 C   s   |   t¡ d S r   )rl   r   r!   r   r   r   Útest_polyadd_basicÞ   s    z!TestPolynomial.test_polyadd_basicc                 C   s   |   t¡ d S r   )rm   r   r!   r   r   r   Útest_polyadd_exceptioná   s    z%TestPolynomial.test_polyadd_exceptionc                 C   s   | j tdd d S )NTrj   )rl   r   r!   r   r   r   Útest_polysub_basicä   s    z!TestPolynomial.test_polysub_basicc                 C   s   |   t¡ d S r   )rm   r   r!   r   r   r   Útest_polysub_exceptionç   s    z%TestPolynomial.test_polysub_exceptionc                 C   s   |   t¡ d S r   )rl   r   r!   r   r   r   Útest_polymul_basicê   s    z!TestPolynomial.test_polymul_basicc                 C   s   |   t¡ d S r   )rm   r   r!   r   r   r   Útest_polymul_exceptioní   s    z%TestPolynomial.test_polymul_exceptionN)F)r1   r2   r3   r^   rc   rl   rm   rn   ro   rp   rq   rr   rs   r   r   r   r   rV   ‡   s   
rV   )r   Ú	itertoolsr   Z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:   rV   r   r   r   r   Ú<module>   s    Q