U
    ,‰dÀ  ã                   @   sp   d dl Z d dlmZ d dlZd dlmZ d dlmZm	Z	m
Z
 d dlZdd„ ZG dd„ deƒZG d	d
„ d
eƒZdS )é    N)Úproduct)Újit)ÚTestCaseÚtagÚneeds_lapackc                 C   s
   t  | ¡S ©N)ÚnpÚroots)Úp© r   ú?/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_polynomial.pyÚroots_fn   s    r   c                   @   s@   e Zd ZdZejejejejfZ	dd„ Z
efdd„Zdd„ ZdS )	ÚTestPolynomialBasezV
    Provides setUp and common data/error modes for testing polynomial functions.
    c                 C   s   t  ¡  d S r   )ÚgcZcollect)Úselfr   r   r   ÚsetUp   s    zTestPolynomialBase.setUpc              	   C   s4   |   |¡}||Ž  W 5 Q R X |  |t|jƒ¡ d S r   )ÚassertRaisesZassertInÚstrÚ	exception)r   ÚcfuncÚargsÚmsgÚerrZ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_input    s    z"TestPolynomialBase.assert_1d_inputN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úfloat64Zfloat32Ú
complex128Z	complex64Údtypesr   Ú
ValueErrorr   r   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_change'   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   Údtyper"   r   ÚfinfoÚ
resolutionZtestingZassert_allcloseZassertNoNRTLeak)ÚaÚkwargsÚexpectedÚgotr+   ©r   Zdefault_resolutionr   r   r   Úcheck2   s    ü
z$TestPoly1D.test_roots.<locals>.checké   é   é   r   é   é   y      ð?      ð?y      @      ð?y                y      @      ð?g      @g      @g       @g        g      ð?Zeigvals)r   r   r   r*   r    r+   Úarrayr   Zint32Zint64Úlistr"   Zastyper   ZarangeZreshaper&   r!   )r   r1   Z	r_vectorsÚvr)   r,   Z	c_vectorsÚxr   r0   r   Ú
test_roots+   s<    
ùÿ



ù
zTestPoly1D.test_rootsN)r   r   r   r&   r   r;   r   r   r   r   r$   %   s   r$   )r   Ú	itertoolsr   Znumpyr   Znumbar   Znumba.tests.supportr   r   r   Zunittestr   r   r$   r   r   r   r   Ú<module>   s   