
    xKg2(                     L   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\                          yy)    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      |       gt              z   D cg c]  }t        j                  |dd       }}t              dk(  rfd}nt              dk(  rfd}nJ  t	        j
                  t        |            |      fd	}|S c c}w )
Nc              3   P   K   | ]  }t        |t        j                           y wN)
isinstancer   Array).0tps     h/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/cuda/tests/cudapy/test_complex.py	<genexpr>z&compile_scalar_func.<locals>.<genexpr>   s     B2:b%++.s   $&T)device   Cc                 r    t        j                  d      }|| j                  d   k  r ||         | |<   y y Nr,   r   r   gridshape)outaidevice_funcs      r)   kernel_funcz(compile_scalar_func.<locals>.kernel_func$   s7    		!A399Q<$QqT*A         c                 z    t        j                  d      }|| j                  d   k  r ||   ||         | |<   y y r/   r0   )r3   r4   br5   r6   s       r)   r7   z(compile_scalar_func.<locals>.kernel_func)   s=    		!A399Q<$QqT1Q40A  r8   c           	         t        |       }
D cg c],  }t        j                  |t        j                  |            . }}t        j                  |t        j                              }t        |       D ]  \  }}t        ||      D ]
  \  }}|||<      |g|z   }	 t        t        j                  |dz              df   |	  t        |      S c c}w )N)dtype   )lennpemptyr!   as_dtype	enumeratezipintmathceillist)valuesnr(   inputsoutputr5   vsvinpargsargtypeskernelrestypes             r)   kernel_wrapperz+compile_scalar_func.<locals>.kernel_wrapper2   s    K$&$b ((1M$:$:2$>?$ 	 &!=#9#9'#BCv&EArb&/3A * ' x& ,s499QW%&+,d3F|&s   1C)	anyr%   r   r&   r   jitrH   r?   tuple)	pyfuncrQ   rS   r(   kernel_typesr7   rT   r6   rR   s	    ``    @@r)   compile_scalar_funcrZ      s    BBBBB'5;;///;$((7H-d;FCK  'i$x.8:8 KKAs+8  : 8}	+ 
X!		1
 	q*TXXeL)*;7F
 ;:s   &Cc                   .    e Zd Zd Zd Zd ZddZeZeZy)BaseComplexTestc                     ddddddt        d      t        d      t        d	      g	}t        j                  ||      D cg c]  \  }}t        ||       c}}S c c}}w )
N               r,   g      ?g      -inf+infnan)float	itertoolsproductcomplexselfrealsxys       r)   basic_valueszBaseComplexTest.basic_valuesB   sZ    tQD$vfuU|=*3*;*;E5*IJ*I$!Q1*IJJJs    Ac                     ddddt         j                   t         j                  t        d      t        d      t        d      g	}t        j                  ||      D cg c]  \  }}t        ||       c}}S c c}}w )Nr_   r,   r`   ra   rb   rc   rF   pird   re   rf   rg   rh   s       r)   more_valueszBaseComplexTest.more_valuesG   sf    dArDGG8dggXvfuU|=*3*;*;E5*IJ*I$!Q1*IJJJs   A8c           
          ddddt         j                   t         j                  t        d      t        d      g}t        j                  ||      D cg c]  \  }}t        ||       c}}S c c}}w )Nr^   r_   r,   r`   infra   ro   rh   s       r)   non_nan_valueszBaseComplexTest.non_nan_valuesL   s`    tQTWWHtwwhuuV}.*3*;*;E5*IJ*I$!Q1*IJJJs   A.c           
         |D ]  }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 ]A  }t        |t        t        f      s|f}	 |
j                   ||        |	j                  |       C  ||	      }t        ||
|	      D ]%  \  }}}d|d|}| j                  ||||||       '  y # t        $ r%}| j                  dt        |             Y d }~d }~ww xY w)Nr   singledoublezmath domain errorz
for input z with prec )preculpsignore_sign_on_zeromsg)r%   r   TyperW   rP   float32	complex64rZ   return_typerH   append
ValueErrorassertInstrrD   assertPreciseEqual)ri   rX   sigsrI   ry   rz   sigrx   cudafunc	ok_valuesexpected_listrP   egot_listgotexpectedr{   s                    r)   run_funczBaseComplexTest.run_funcQ   sE   C#uzz*d#u%c!fclxx{u}}eoo&FF !  +6388S__MHIM!$u65D!((7$$T*   	*H'*8]I'N#Xt594@''XD-1<O,/ ( 1 (O- $ " MM"5s1v>s   3%D	E	$EE	N)r,   F)	__name__
__module____qualname__rm   rq   rt   r   	run_unary
run_binary r8   r)   r\   r\   @   s%    K
K
K
1< IJr8   r\   c                   $    e Zd Zd Zd Zd Zd Zy)TestComplexc           	          | j                         }| j                  |t        j                  t        j                  fD cg c]  }|j                  |       c}|       y c c}w r$   )rm   r   r   r~   
complex128underlying_float)ri   rX   rI   r(   s       r)   check_real_imagezTestComplex.check_real_imageu   s^    ""$v#(??E4D4D"EG"EB ++B/"EG	Gs   A 
c                 .    | j                  t               y r$   )r   r   ri   s    r)   	test_realzTestComplex.test_real|       l+r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   	test_imagzTestComplex.test_imag   r   r8   c                     t         }| j                         }| j                  |t        j                  t        j
                  g|       y r$   )r	   rm   r   r   r~   r   )ri   rX   rI   s      r)   test_conjugatezTestComplex.test_conjugate   s8    """$v)9)9:	r8   N)r   r   r   r   r   r   r   r   r8   r)   r   r   s   s    ,,r8   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y)	TestCMathz)
    Tests for cmath module support.
    c           	          | j                  |t        j                  t        j                  fD cg c]  }t        j                  |       c}| j                                y c c}w r$   )r   r   r   r~   booleanrm   )ri   rX   r(   s      r)   check_predicate_funczTestCMath.check_predicate_func   sW    v#(#3#3U__"EG"EB b)"EG((*	,Gs   A"
Nc                 
   |rd }nd }| j                  | |t        j                        g|xs | j                         ||       | j                  | |t        j                        g|xs | j                         ||       y )Nc                 $    | j                  |       S r$   )r   r(   s    r)   r   z'TestCMath.check_unary_func.<locals>.sig   s    **2..r8   c                      | |       S r$   r   r   s    r)   r   z'TestCMath.check_unary_func.<locals>.sig   s    "vr8   ry   rz   )r   r   r   rq   r~   rm   )ri   rX   ry   rI   returns_floatrz   r   s          r)   check_unary_funczTestCMath.check_unary_func   s    /vE$4$4 563!1!1!3$+> 	 	@ 	vEOO 454!2!2!44+> 	 	@r8   c                 2    | j                  t        d       y )NT)r   )r   r
   r   s    r)   
test_phasezTestCMath.test_phase   s    m4@r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   
test_polarzTestCMath.test_polar   s    67r8   c                       fd} |t         j                   j                                 |t         j                   j	                                y )Nc                    |D cg c]H  }t        j                  |j                        r|j                  dk(  r|j                  |j                  fJ }}| j                  }j                  t         | ||      g|       y c c}w )Nr   )rF   isinfimagrealr   r   r   )r(   seed_valueszrI   
float_typeri   s        r)   do_testz$TestCMath.test_rect.<locals>.do_test   su    0; @1!ZZ/166Q; vvqvv&F @,,JOOL2j*+E*F"$@s   AB)r   r   rq   r~   rm   )ri   r   s   ` r)   	test_rectzTestCMath.test_rect   s:    	$ 	  $"2"2"45!2!2!45r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   
test_isnanzTestCMath.test_isnan       !!-0r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   
test_isinfzTestCMath.test_isinf   r   r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   test_isfinitezTestCMath.test_isfinite   s    !!"23r8   c                 2    | j                  t        d       y Nr9   ry   )r   r   r   s    r)   test_expzTestCMath.test_exp       k2r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   test_logzTestCMath.test_log   s    k*r8   c                 ,   t        t        j                  | j                         | j                                     }t        j
                  t        j
                  ft        j                  t        j                  fg}| j                  t        ||d       y )N   r   )	rH   re   rf   rq   r   r   r~   r   r   )ri   rI   value_typess      r)   test_log_basezTestCMath.test_log_base   sq    i''(8(8(:D<L<L<NOP((%*:*:;9;(+v 	 	 r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   
test_log10zTestCMath.test_log10       m,r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   	test_sqrtzTestCMath.test_sqrt   r   r8   c                 2    | j                  t        d       y r   )r   r   r   s    r)   	test_acoszTestCMath.test_acos       l3r8   c                 2    | j                  t        d       y r   )r   r   r   s    r)   	test_asinzTestCMath.test_asin   r   r8   c                 P    | j                  t        d| j                                y )Nr9   )ry   rI   )r   r   rt   r   s    r)   	test_atanzTestCMath.test_atan   s%    l%)%8%8%: 	 	<r8   c                 2    | j                  t        d       y r   )r   r   r   s    r)   test_coszTestCMath.test_cos   r   r8   c                 2    | j                  t        d       y r   )r   r   r   s    r)   test_sinzTestCMath.test_sin   s    k2r8   c                 4    | j                  t        dd       y Nr9   Tr   )r   r   r   s    r)   test_tanzTestCMath.test_tan   s    k26 	 	8r8   c                 .    | j                  t               y r$   )r   r   r   s    r)   
test_acoshzTestCMath.test_acosh   r   r8   c                 2    | j                  t        d       y r   )r   r   r   s    r)   
test_asinhzTestCMath.test_asinh   s    m!4r8   c                 4    | j                  t        dd       y r   )r   r   r   s    r)   
test_atanhzTestCMath.test_atanh   s    m!26 	 	8r8   c                 2    | j                  t        d       y r   )r   r   r   s    r)   	test_coshzTestCMath.test_cosh   r   r8   c                 2    | j                  t        d       y r   )r   r   r   s    r)   	test_sinhzTestCMath.test_sinh   r   r8   c                 4    | j                  t        dd       y r   )r   r    r   s    r)   	test_tanhzTestCMath.test_tanh  s    l26 	 	8r8   )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   r   r8   r)   r   r      s    , 7;BG@$A8	6114
3+ -,
44<338-58448r8   r   c                       e Zd Zd Zd Zy)TestAtomicOnComplexComponentsc                    t         j                  d        }d}t        j                  |      t        j                  |      dz  z   }|j	                         } |d|f   |       t        j
                  j                  |dz   |       y )Nc                     t        j                  d      }t         j                  j                  | j                  |d       y Nr,   )r   r1   atomicaddr   rI   r5   s     r)   atomic_add_onezITestAtomicOnComplexComponents.test_atomic_on_real.<locals>.atomic_add_one  '    		!AKKOOFKKA.r8                     ?r,   r   rV   r@   arangecopytestingassert_equal)ri   r   Narr1arr2s        r)   test_atomic_on_realz1TestAtomicOnComplexComponents.test_atomic_on_real  st    		/ 
	/ yy|biilR//yy{q!tT"


q$/r8   c                    t         j                  d        }d}t        j                  |      t        j                  |      dz  z   }|j	                         } |d|f   |       t        j
                  j                  |dz   |       y )Nc                     t        j                  d      }t         j                  j                  | j                  |d       y r   )r   r1   r   r   r   r   s     r)   atomic_add_one_jzKTestAtomicOnComplexComponents.test_atomic_on_imag.<locals>.atomic_add_one_j  r   r8   r   r   r,   r   )ri   r  r   r  r  s        r)   test_atomic_on_imagz1TestAtomicOnComplexComponents.test_atomic_on_imag  su    		/ 
	/ yy|biilR//yy{At$


r	40r8   N)r   r   r   r  r  r   r8   r)   r   r     s    
0
1r8   r   __main__)/rF   re   numpyr@   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!   rZ   r\   r   r   r   r   mainr   r8   r)   <module>r     s       5  8 8 8 8 8 8 8 ##L0l 0f/ .y8 y8x1L 1B zHMMO r8   