
    J/Ph2(                     f   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d Z( G d d	e          Z) G d
 de)          Z* G d de)          Z+ G d de          Z,e-dk    r ej.                     dS dS )    N)unittestCUDATestCase)types)cuda)real_usecaseimag_usecaseconjugate_usecasephase_usecasepolar_as_complex_usecaserect_usecaseisnan_usecaseisinf_usecaseisfinite_usecaseexp_usecaselog_usecaselog_base_usecaselog10_usecasesqrt_usecaseasin_usecaseacos_usecaseatan_usecasecos_usecasesin_usecasetan_usecaseacosh_usecaseasinh_usecaseatanh_usecasecosh_usecasesinh_usecasetanh_usecase)numpy_supportc                    t          d D                       rJ t          t          j                  rJ  t	          j          d          |           d gt                    z   D             }t                    dk    rfd}nt                    dk    rfd}nJ  t	          j        t          |                    |          fd
}|S )Nc              3   J   K   | ]}t          |t          j                  V  d S N)
isinstancer   Array.0tps     d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/tests/cudapy/test_complex.py	<genexpr>z&compile_scalar_func.<locals>.<genexpr>   s.      BB2:b%+..BBBBBB    T)devicec                 :    g | ]}t          j        |d d          S )   C)r   r&   r'   s     r*   
<listcomp>z'compile_scalar_func.<locals>.<listcomp>    s6     : : : KAs++ : : :r,   r/   c                 ~    t          j        d          }|| j        d         k     r ||                   | |<   d S d S Nr/   r   r   gridshape)outaidevice_funcs      r*   kernel_funcz(compile_scalar_func.<locals>.kernel_func$   sD    	!A39Q<$QqT**A  r,      c                     t          j        d          }|| j        d         k     r ||         ||                   | |<   d S d S r3   r4   )r7   r8   br9   r:   s       r*   r;   z(compile_scalar_func.<locals>.kernel_func)   sJ    	!A39Q<$QqT1Q400A  r,   r   c                 x   t          |           fd	D             }t          j        t          j                            }t          |           D ] \  }}t          ||          D ]
\  }}|||<   !|g|z   } 
t          t          j	        dz                      df         |  t          |          S )Nc                 `    g | ]*}t          j        t          j        |                     +S )dtype)npemptyr!   as_dtype)r(   r)   ns     r*   r1   z?compile_scalar_func.<locals>.kernel_wrapper.<locals>.<listcomp>4   sC     & & & (1M$:2$>$>??? & & &r,   rA      )lenrC   rD   r!   rE   	enumeratezipintmathceillist)valuesinputsoutputr9   vsvinpargsrF   argtypeskernelrestypes           @r*   kernel_wrapperz+compile_scalar_func.<locals>.kernel_wrapper2   s    KK& & & &$& & &!=#9'#B#BCCCv&& 	 	EArb&//  3Ax& ,s49QW%%&&+,d33F||r,   )	anyr%   r   r&   r   jitrN   rH   tuple)pyfuncrV   rX   kernel_typesr;   rY   r:   rW   s    ``   @@r*   compile_scalar_funcr_      sF   BBBBBBBBBB'5;/////;$(77H-d;;;FCCK: :&i$x..8: : :L 8}}	+ 	+ 	+ 	+ 	+ 	+ 
X!			1 	1 	1 	1 	1 	1
 	*TXeL))**;77F
 
 
 
 
 
 
 r,   c                   0    e Zd Zd Zd Zd ZddZeZeZdS )	BaseComplexTestc                     ddddddt          d          t          d          t          d	          g	}d
 t          j        ||          D             S )N               r/   g      ?g      -inf+infnanc                 4    g | ]\  }}t          ||          S  complexr(   xys      r*   r1   z0BaseComplexTest.basic_values.<locals>.<listcomp>E   $    JJJ$!Q1JJJr,   )float	itertoolsproductselfrealss     r*   basic_valueszBaseComplexTest.basic_valuesB   sP    tQD$vfuU||=JJ)*;E5*I*IJJJJr,   c                     ddddt           j         t           j        
 t          d          t          d          t          d          g	}d t          j        ||          D             S )Nrd   r/   re   rf   rg   rh   c                 4    g | ]\  }}t          ||          S rj   rk   rm   s      r*   r1   z/BaseComplexTest.more_values.<locals>.<listcomp>J   rp   r,   rL   pirq   rr   rs   rt   s     r*   more_valueszBaseComplexTest.more_valuesG   sX    dArDG8dgXvfuU||=JJ)*;E5*I*IJJJJr,   c           
          ddddt           j         t           j        
 t          d          t          d          g}d t          j        ||          D             S )Nrc   rd   r/   re   infrf   c                 4    g | ]\  }}t          ||          S rj   rk   rm   s      r*   r1   z2BaseComplexTest.non_nan_values.<locals>.<listcomp>O   rp   r,   rz   rt   s     r*   non_nan_valueszBaseComplexTest.non_nan_valuesL   sP    tQTWHtwhuuV}}.JJ)*;E5*I*IJJJJr,   r/   Fc           
         |D ]Z}t          |t          j                  r|f}t          |t                    r |d         | }|j        d         t          j        t          j        fv rdnd}t          ||j        |j                  }g }	g }
|D ]}t          |t          t          f          s|f}	 |

                     ||            |	
                    |           P# t          $ r-}|                     dt          |                     Y d }~d }~ww xY w ||	          }t          ||
|	          D ])\  }}}d|d|}|                     ||||||           *\d S )Nr   singledoublezmath domain errorz
for input z with prec )preculpsignore_sign_on_zeromsg)r%   r   Typer\   rU   float32	complex64r_   return_typerN   append
ValueErrorassertInstrrJ   assertPreciseEqual)ru   r]   sigsrO   r   r   sigr   cudafunc	ok_valuesexpected_listrU   egot_listgotexpectedr   s                    r*   run_funczBaseComplexTest.run_funcQ   s    	1 	1C#uz** d#u%% #c!fclx{u}eo&FFF H!  +638S_MMHIM  !$u66 !5D!((777$$T****!   MM"5s1vv>>>HHHH  x	**H'*8]I'N'N 1 1#Xtt59TT44@''XD-1<O,/ ( 1 1 1 11-	1 	1s   /-C
D'#DDN)r/   F)	__name__
__module____qualname__rw   r|   r   r   	run_unary
run_binaryrj   r,   r*   ra   ra   @   sd        K K K
K K K
K K K
1 1 1 1< IJJJr,   ra   c                   &    e Zd Zd Zd Zd Zd ZdS )TestComplexc                     |                                  }|                     |d t          j        t          j        fD             |           d S )Nc                 8    g | ]}|                     |          S rj   underlying_floatr'   s     r*   r1   z0TestComplex.check_real_image.<locals>.<listcomp>x   s<     G G G ++B// G G Gr,   )rw   r   r   r   
complex128ru   r]   rO   s      r*   check_real_imagezTestComplex.check_real_imageu   sc    ""$$vG G#(?E4D"EG G G	 	 	 	 	r,   c                 :    |                      t                     d S r$   )r   r   ru   s    r*   	test_realzTestComplex.test_real|       l+++++r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   	test_imagzTestComplex.test_imag   r   r,   c                     t           }|                                 }|                     |t          j        t          j        g|           d S r$   )r	   rw   r   r   r   r   r   s      r*   test_conjugatezTestComplex.test_conjugate   sJ    """$$v)9:	 	 	 	 	r,   N)r   r   r   r   r   r   r   rj   r,   r*   r   r   s   sP          , , ,, , ,    r,   r   c                       e Zd ZdZd Z	 	 ddZd Zd Zd	 Zd
 Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )	TestCMathz)
    Tests for cmath module support.
    c                     |                      |d t          j        t          j        fD             |                                            d S )Nc                 6    g | ]}t          j        |          S rj   )r   booleanr'   s     r*   r1   z2TestCMath.check_predicate_func.<locals>.<listcomp>   s8     G G G b)) G G Gr,   )r   r   r   r   rw   )ru   r]   s     r*   check_predicate_funczTestCMath.check_predicate_func   s^    vG G#(#3U_"EG G G((**	, 	, 	, 	, 	,r,   r/   NFc                     |rd }nd }|                      | |t          j                  g|p|                                 ||           |                      | |t          j                  g|p|                                 ||           d S )Nc                 ,    |                      |           S r$   r   r)   s    r*   r   z'TestCMath.check_unary_func.<locals>.sig   s    **2...r,   c                      | |           S r$   rj   r   s    r*   r   z'TestCMath.check_unary_func.<locals>.sig   s    r"vvr,   r   r   )r   r   r   r|   r   rw   )ru   r]   r   rO   returns_floatr   r   s          r*   check_unary_funczTestCMath.check_unary_func   s     	/ / / /  vE$4 5 563!1!1!3!3$+> 	 	@ 	@ 	@ 	vEO 4 454!2!2!4!44+> 	 	@ 	@ 	@ 	@ 	@r,   c                 >    |                      t          d           d S )NT)r   )r   r
   r   s    r*   
test_phasezTestCMath.test_phase   s!    m4@@@@@r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   
test_polarzTestCMath.test_polar   s    677777r,   c                       fd} |t           j                                                     |t           j                                                    d S )Nc                 |    d |D             }| j         }                    t           | ||          g|           d S )Nc                 r    g | ]4}t          j        |j                  r|j        d k    &|j        |j        f5S )r   )rL   isinfimagreal)r(   zs     r*   r1   z8TestCMath.test_rect.<locals>.do_test.<locals>.<listcomp>   sK     @ @ @1!Z//@346Q;; vqv&3>;;r,   )r   r   r   )r)   seed_valuesrO   
float_typeru   s       r*   do_testz$TestCMath.test_rect.<locals>.do_test   sc    @ @ @ @ @F,JOOL22j*+E+E*F"$ $ $ $ $r,   )r   r   r|   r   rw   )ru   r   s   ` r*   	test_rectzTestCMath.test_rect   se    	$ 	$ 	$ 	$ 	$ 	 $"2"2"4"4555!2!2!4!455555r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   
test_isnanzTestCMath.test_isnan       !!-00000r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   
test_isinfzTestCMath.test_isinf   r   r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   test_isfinitezTestCMath.test_isfinite   s    !!"233333r,   c                 >    |                      t          d           d S Nr<   r   )r   r   r   s    r*   test_expzTestCMath.test_exp   !    k22222r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   test_logzTestCMath.test_log   s    k*****r,   c                 .   t          t          j        |                                 |                                                     }t          j        t          j        ft          j        t          j        fg}|                     t          ||d           d S )N   r   )	rN   rr   rs   r|   r   r   r   r   r   )ru   rO   value_typess      r*   test_log_basezTestCMath.test_log_base   s    i'(8(8(:(:D<L<L<N<NOOPP(%*:;9;(+v 	 	  	  	  	  	 r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   
test_log10zTestCMath.test_log10       m,,,,,r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   	test_sqrtzTestCMath.test_sqrt   r   r,   c                 >    |                      t          d           d S r   )r   r   r   s    r*   	test_acoszTestCMath.test_acos   !    l33333r,   c                 >    |                      t          d           d S r   )r   r   r   s    r*   	test_asinzTestCMath.test_asin   r   r,   c                 d    |                      t          d|                                            d S )Nr<   )r   rO   )r   r   r   r   s    r*   	test_atanzTestCMath.test_atan   s<    l%)%8%8%:%: 	 	< 	< 	< 	< 	<r,   c                 >    |                      t          d           d S r   )r   r   r   s    r*   test_coszTestCMath.test_cos   r   r,   c                 >    |                      t          d           d S r   )r   r   r   s    r*   test_sinzTestCMath.test_sin   s!    k22222r,   c                 @    |                      t          dd           d S Nr<   Tr   )r   r   r   s    r*   test_tanzTestCMath.test_tan   s0    k26 	 	8 	8 	8 	8 	8r,   c                 :    |                      t                     d S r$   )r   r   r   s    r*   
test_acoshzTestCMath.test_acosh   r   r,   c                 >    |                      t          d           d S r   )r   r   r   s    r*   
test_asinhzTestCMath.test_asinh   s!    m!44444r,   c                 @    |                      t          dd           d S r   )r   r   r   s    r*   
test_atanhzTestCMath.test_atanh   s0    m!26 	 	8 	8 	8 	8 	8r,   c                 >    |                      t          d           d S r   )r   r   r   s    r*   	test_coshzTestCMath.test_cosh   r   r,   c                 >    |                      t          d           d S r   )r   r   r   s    r*   	test_sinhzTestCMath.test_sinh   r   r,   c                 @    |                      t          dd           d S r   )r   r    r   s    r*   	test_tanhzTestCMath.test_tanh  s0    l26 	 	8 	8 	8 	8 	8r,   )r/   NFF)r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rj   r,   r*   r   r      s        , , , 7;BG@ @ @ @$A A A8 8 8	6 	6 	61 1 11 1 14 4 4
3 3 3+ + +     - - -, , ,
4 4 44 4 4< < <3 3 33 3 38 8 8- - -5 5 58 8 84 4 44 4 48 8 8 8 8r,   r   c                       e Zd Zd Zd ZdS )TestAtomicOnComplexComponentsc                     t           j        d             }d}t          j        |          t          j        |          dz  z   }|                                } |d|f         |           t          j                            |dz   |           d S )Nc                 z    t          j        d          }t           j                            | j        |d           d S Nr/   )r   r5   atomicaddr   rO   r9   s     r*   atomic_add_onezITestAtomicOnComplexComponents.test_atomic_on_real.<locals>.atomic_add_one  /    	!AKOOFKA.....r,                     ?r/   r   r[   rC   arangecopytestingassert_equal)ru   r  Narr1arr2s        r*   test_atomic_on_realz1TestAtomicOnComplexComponents.test_atomic_on_real  s    		/ 	/ 
	/ y||billR//yy{{q!tT"""

q$/////r,   c                     t           j        d             }d}t          j        |          t          j        |          dz  z   }|                                } |d|f         |           t          j                            |dz   |           d S )Nc                 z    t          j        d          }t           j                            | j        |d           d S r  )r   r5   r  r  r   r  s     r*   atomic_add_one_jzKTestAtomicOnComplexComponents.test_atomic_on_imag.<locals>.atomic_add_one_j  r  r,   r	  r
  r/   r  )ru   r  r  r  r  s        r*   test_atomic_on_imagz1TestAtomicOnComplexComponents.test_atomic_on_imag  s    		/ 	/ 
	/ y||billR//yy{{At$$$

r	400000r,   N)r   r   r   r  r  rj   r,   r*   r   r     s2        
0 
0 
0
1 
1 
1 
1 
1r,   r   __main__)/rL   rr   numpyrC   numba.cuda.testingr   r   
numba.corer   numbar   numba.tests.complex_usecasesr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    numba.npr!   r_   ra   r   r   r   r   mainrj   r,   r*   <module>r      sw            5 5 5 5 5 5 5 5            8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 # " " " " "# # #L0 0 0 0 0l 0 0 0f    /   .y8 y8 y8 y8 y8 y8 y8 y8x1 1 1 1 1L 1 1 1B zHMOOOOO r,   