
    ܙd                         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
mZ d dlZd Z G d dee          Z G d d	e          ZdS )
    N)product)jit)TestCasetagneeds_lapackEnableNRTStatsMixinc                 *    t          j        |           S N)nproots)ps    ;lib/python3.11/site-packages/numba/tests/test_polynomial.pyroots_fnr      s    8A;;    c                   f     e Zd ZdZej        ej        ej        ej        fZ	 fdZ
efdZd Z xZS )TestPolynomialBasezV
    Provides setUp and common data/error modes for testing polynomial functions.
    c                 |    t          j                     t          t          |                                            d S r
   )gccollectsuperr   setUp)self	__class__s    r   r   zTestPolynomialBase.setUp   s1    

 $''--/////r   c                     |                      |          5 } ||  d d d            n# 1 swxY w Y   |                     |t          |j                             d S r
   )assertRaisesassertInstr	exception)r   cfuncargsmsgerrraisess         r   assert_errorzTestPolynomialBase.assert_error   s    s## 	vE4LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	c3v/0011111s   (,,c                 8    d}|                      |||           d S )NzInput must be a 1d array.r$   )r   r   r    r!   s       r   assert_1d_inputz"TestPolynomialBase.assert_1d_input!   s%    )%s+++++r   )__name__
__module____qualname____doc__r   float64float32
complex128	complex64dtypesr   
ValueErrorr$   r'   __classcell__)r   s   @r   r   r      s         
 j"*bmR\BF0 0 0 0 0
 2< 2 2 2 2
, , , , , , ,r   r   c                   *    e Zd Zd Zed             ZdS )
TestPoly1Dc                 >    |dz   }|                      |||           d S )Nz+() argument must not cause a domain change.r&   )r   namer   r    r!   s        r   assert_no_domain_changez"TestPoly1D.assert_no_domain_change(   s+    BB%s+++++r   c           
      Z   	  t          d          t                    t          j        t          j                  j        		 fd}t          j        dg          t          j        g d          t          j        g d          t          j        g d          t          j        g d          t          j        g d	          t          j        g d
          f}t          |t          j        t          j	        gt           j                  z             D ]%\  }}|                    |          } ||           &t          j        dg          t          j        g d          t          j        g d          t          j        g d          t          j        g d          t          j        g d          t          j        g d          f}t          | j        dd                    D ]%\  }}|                    |          } ||           &                     t          j        d                              dd          f           t          j        g d          }                     d|f            |                    t          j                             d S )NT)nopythonc                 P   t          | fi |} | fi |}| j        j        v rt          j        | j                  j        }n}t          j                            ||d|z  d|z                                             5   | fi | d d d            d S # 1 swxY w Y   d S )N
   d   )rtolatol)	r   dtyper0   r   finfo
resolutiontestingassert_allcloseassertNoNRTLeak)akwargsexpectedgotrA   r   default_resolutionr   s        r   checkz$TestPoly1D.test_roots.<locals>.check3   s!   ,,V,,H%$$V$$C w$+%%Xag..9

 0
J&&*_:%	 '    %%'' # #a""6"""# # # # # # # # # # # # # # # # # #s   
BB"B   )rK         )r   r   r   )rK         rN   )r   r   r   rK   rL   rM   )rK   rK   r   r   r   )r   r   rK   r   r   r         ?      ?)rK   y      @      ?rM   )r   y                r   )rK   y      @      ?rO   rN   )r   r   r   rP   rL   rM   )rP   rK   r   r   r   )r   r   rP   r   r   r   rM   g      @)g      @g       @g        g      ?eigvals)r   r   r   r@   r,   rA   arrayr   int32int64listr0   astyper'   arangereshaper7   r.   )
r   rJ   	r_vectorsvr?   rE   	c_vectorsxr   rI   s
   `       @@r   
test_rootszTestPoly1D.test_roots,   s    #T"""8,,Xbj11<	# 	# 	# 	# 	# 	# 	#: HaSMMHYYYHYYYH]]]##H'''((H___%%H'''((
	 	BHbh#7$t{:K:K#KLL	 	HAuAE!HHHH HfXH^^^$$H^^^$$H'''((H,,,--H)))**H,,,--
	  	4;qrr?;; 	 	HAuAE!HHHH 	URYr]]%:%:1a%@%@$BCCC H%%%&&$$Yt<<<ahhr}%%&&&&&r   N)r(   r)   r*   r7   r   r]    r   r   r4   r4   &   sC        , , , H' H' \H' H' H'r   r4   )r   	itertoolsr   numpyr   numbar   numba.tests.supportr   r   r   r   unittestr   r   r4   r^   r   r   <module>rd      s    				                 P P P P P P P P P P P P   , , , , ,,h , , ,.O' O' O' O' O'# O' O' O' O' O'r   