
    J/Phb"                     H   d dl 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 d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ d dlZd dl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, G d de          Z-e.dk    r ej/                     dS dS )    N)compile_ptx)	f2i1i2i4i8u1u2u4u8)cuda)types)CUDATestCaseskip_on_cudasimskip_unless_cc_53)float16float32c                      t          |           S N)floatxs    d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/tests/cudapy/test_casting.pynative_castr      s    88O    c                 *    t          j        |           S r   )npint8r   s    r   to_int8r      s    71::r   c                 *    t          j        |           S r   )r   int16r   s    r   to_int16r"          8A;;r   c                 *    t          j        |           S r   )r   int32r   s    r   to_int32r&      r#   r   c                 *    t          j        |           S r   )r   int64r   s    r   to_int64r)      r#   r   c                 *    t          j        |           S r   )r   uint8r   s    r   to_uint8r,   "   r#   r   c                 *    t          j        |           S r   )r   uint16r   s    r   	to_uint16r/   &   s    9Q<<r   c                 *    t          j        |           S r   )r   uint32r   s    r   	to_uint32r2   *       <??r   c                 *    t          j        |           S r   )r   uint64r   s    r   	to_uint64r6   .   r3   r   c                 T    t          j        |           t          j        d          z  S )Ng      ?r   r   r   s    r   
to_float16r9   2   s     JqMMBJsOO+,r   c                 T    t          j        |           t          j        d          z  S N   )r   r   r   s    r   
to_float32r=   8       :a==2:a==((r   c                 T    t          j        |           t          j        d          z  S r;   )r   float64r   s    r   
to_float64rA   <   r>   r   c                 *    t          j        |           S r   )r   	complex64r   s    r   to_complex64rD   @   s    <??r   c                 *    t          j        |           S r   )r   
complex128r   s    r   to_complex128rG   D   s    =r   c                 f    t           j                            t          j        |           d          S r;   r   fp16hmulr   r   r   s    r   cuda_int_literal_to_float16rL   O   s"     9>>"*Q--+++r   c                 T    t          j        |           t          j        d          z  S r;   r8   r   s    r    reference_int_literal_to_float16rN   U   r>   r   c                 f    t           j                            t          j        |           d          S Ng      @rI   r   s    r   cuda_float_literal_to_float16rQ   Y   s"     9>>"*Q-----r   c                 T    t          j        |           t          j        d          z  S rP   r8   r   s    r   "reference_float_literal_to_float16rS   _   s    :a==2:c??**r   c                      e Zd Zd Zed             Z ed          d             Zed             Z ed          d             Z	ed             Z
ed             Z ed          d	             Z ed          d
             Zed             Z ed          d             Zed             Z ed          d             ZdS )TestCastingc                      t          j        d          |          t           j        fd            fd}|S )NTdevicec                 0     | d                   |d<   d S )Nr    )argreswrapped_funcs     r   cuda_wrapper_fnz4TestCasting._create_wrapped.<locals>.cuda_wrapper_fng   s    !\#a&))CFFFr   c                     t          j        d          }| |d<   t          j        d          } d         ||           |d         S )N   )dtyper   )r`   r`   )r   zeros)r[   argarrayresarrayr^   intypeouttypes      r   
wrapper_fnz/TestCasting._create_wrapped.<locals>.wrapper_fnk   sU    x000HHQKx111H!OD!(H555A;r   )r   jit)selfpyfuncre   rf   rg   r^   r]   s     `` @@r   _create_wrappedzTestCasting._create_wrappedd   sr    ,txt,,,V44		* 	* 	* 	* 
	*	 	 	 	 	 	 	 r   c           	         t           t          t          t          f}t          j        t          j        t          j        t          j        f}t          j	        t          j
        t          j        f}t          ||          D ]\  }}|D ]}|                     ||          5  |                     |||          }|                      |d           |d                     |                      |d          t!          d                     |                      |d           |d                     |                      |d          t!          d                     d d d            n# 1 swxY w Y   d S )Nfromtytoty皙(@皙()r   r"   r&   r)   r   r   r!   r%   r(   r   r   r@   zipsubTestrk   assertEqualintri   pyfuncstotysfromtysrj   ro   rn   cfuncs           r   test_float_to_intzTestCasting.test_float_to_intt   s   Hh9"(BHbh7:rz2:6// 	? 	?LFD! ? ?\\d\;; ? ? 00FFE$$UU4[[&&,,???$$UU4[[#d))<<<$$UU5\\66%==AAA$$UU5\\3u::>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ??	? 	?s   C E((E,/E,z(Compilation unsupported in the simulatorc                     t           t          t          t          f}d}t	          ||          D ]:\  }}t          |t          fd          \  }}|                     d| d|           ;d S )N          @   TrW   z	cvt.rni.s.f16)r   r"   r&   r)   rr   r   r   assertInri   rw   sizesrj   sizeptx_s          r   test_float16_to_int_ptxz#TestCasting.test_float16_to_int_ptx   sy    Hh9// 	7 	7LFD "t<<<FCMM0d000#6666	7 	7r   c           	      F   t           t          t          t          f}t          j        t          j        t          j        t          j        f}t          j	        t          j
        t          j        f}t          ||          D ]\  }}|D ]}|                     ||          5  |                     |||          }|                      |d           |d                     |                      |d          t!          d                     d d d            n# 1 swxY w Y   d S )Nrm   rp   )r   r"   r&   r)   r   r+   r.   r1   r5   r   r   r@   rr   rs   rk   rt   ru   rv   s           r   test_float_to_uintzTestCasting.test_float_to_uint   s@   Hh929bi;:rz2:6// 	= 	=LFD! = =\\d\;; = = 00FFE$$UU4[[&&,,???$$UU4[[#d))<<<= = = = = = = = = = = = = = ==	= 	=s   A,DDDc                     t           t          t          t          f}d}t	          ||          D ]:\  }}t          |t          fd          \  }}|                     d| d|           ;d S )Nr}   TrW   z	cvt.rni.ur   )r,   r/   r2   r6   rr   r   r   r   r   s          r   test_float16_to_uint_ptxz$TestCasting.test_float16_to_uint_ptx   sy    Y	9=// 	7 	7LFD "t<<<FCMM0d000#6666	7 	7r   c                    t           t          t          f}t          j        t          j        t          j        f}t          ||          D ]|\  }}|                     |          5  | 	                    |t          j
        |          }|                      |d           |d                     d d d            n# 1 swxY w Y   }d S )N)ro   A  )r9   r=   rA   r   r   r   r@   rr   rs   rk   r(   rt   )ri   rw   rx   rj   ro   rz   s         r   test_int_to_floatzTestCasting.test_int_to_float   s    z:6RZ4// 	: 	:LFD4(( : :,,VRXtDD  sVVC[[999: : : : : : : : : : : : : : :	: 	:s   #A
B99B=	 B=	c                 l   t           t          f}t          t          f}t	          ||          D ]\  }}|                     |          5  |                     |t          j        t          j                  }| 	                     |d           |d                     d d d            n# 1 swxY w Y   d S )N)funcr   )
rL   rQ   rN   rS   rr   rs   rk   r   r   rt   )ri   	cudafuncs	hostfuncscudafunchostfuncrz   s         r   test_literal_to_float16z#TestCasting.test_literal_to_float16   s    024	579	 #&i";"; 	< 	<Hh8,, < <,,Xrz2:NN  sXXc]];;;< < < < < < < < < < < < < < <	< 	<s   AB((B,	/B,	c                     t           t          t          t          f}d}t	          ||          D ]9\  }}t          t          |fd          \  }}|                     d| |           :d S )Nr}   TrW   zcvt.rn.f16.s)r   r   r   r   rr   r   r9   r   ri   ry   r   tyr   r   r   s          r   test_int_to_float16_ptxz#TestCasting.test_int_to_float16_ptx   v    r2r"GU++ 	6 	6HB bU4@@@FCMM///5555	6 	6r   c                     t           t          t          t          f}d}t	          ||          D ]9\  }}t          t          |fd          \  }}|                     d| |           :d S )Nr}   TrW   zcvt.rn.f16.u)r	   r
   r   r   rr   r   r9   r   r   s          r   test_uint_to_float16_ptxz$TestCasting.test_uint_to_float16_ptx   r   r   c           	      X   t           t          t          f}t          j        t          j        t          j        f}t          j        t          ||          |          D ]\  \  }}}| 
                    ||          5  |                     |||          }t          j                             |d           |d           |d          z  d           t          j                             |d           |d           |d          z  d           d d d            n# 1 swxY w Y   d S )Nrm   rp   r<   ga2U0*3?)rtolrq   )r9   r=   rA   r   r   r   r@   	itertoolsproductrr   rs   rk   testingassert_allclose)ri   rw   tysrj   rn   ro   rz   s          r   test_float_to_floatzTestCasting.test_float_to_float   s   z:6z2:rz2&/&7GS8I8I3&O&O 
	O 
	O"VVdV$77 	O 	O,,VVTBB
 
**55;;+/4::Q+?f + N N N
**55<<+/4;;a+@v + O O O	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O
	O 
	Os   :BDD"	%D"	c                     t           t          f}d}t          ||          D ]:\  }}t          |t          fd          \  }}|                     d| d|           ;d S )N)f32f64TrW   zcvt.r   )r=   rA   rr   r   r   r   )ri   rw   	postfixesrj   postfixr   r   s          r   test_float16_to_float_ptxz%TestCasting.test_float16_to_float_ptx   su    z*"	"7I66 	5 	5OFG "t<<<FCMM....4444	5 	5r   c                 L   t           t          f}t          j        t          j        f}t          j        t          j        t          j        f}t          ||          D ]\  }}|D ]}| 	                    ||          5  | 
                    |||          }t          j                             |d           | |d                               t          j                             |d           | |d                    dz              d d d            n# 1 swxY w Y   d S )Nrm   gGz	@gGz	y                )rD   rG   r   rC   rF   r   r   r@   rr   rs   rk   r   r   rv   s           r   test_float_to_complexz!TestCasting.test_float_to_complex   s   /r}-:rz2:6// 	K 	KLFD! 
K 
K\\d\;; 	K 	K 00FFE
 J..uuT{{/5vffTll/C/CE E EJ..uuU||/5vffUmm/D/Dr/IK K K	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K
K	K 	Ks   :BDDDc                     t          j        t          t          fd          \  }}|                     d|           t          j        t          t
          fd          \  }}|                     d|           d S )NTrW   zst.f32zst.u16)r   r   r   r   r   r   )ri   float32_ptxr   float16_ptxs       r   test_native_castzTestCasting.test_native_cast   sj    )+z$OOOQh,,,)+z$OOOQh,,,,,r   N)__name__
__module____qualname__rk   r   r{   r   r   r   r   r   r   r   r   r   r   r   r   rZ   r   r   rU   rU   c   s           ? ? ? _?@@7 7 A@7 
= 
= 
= _?@@7 7 A@7 : : : 	< 	< 	< _?@@6 6 A@6 _?@@6 6 A@6 O O O  _?@@5 5 A@5 K K K$ _?@@- - A@- - -r   rU   __main__)0numpyr   
numba.cudar   numba.core.typesr   r   r   r   r   r	   r
   r   r   numbar   
numba.corer   numba.cuda.testingr   r   r   numba.typesr   r   r   unittestr   r   r"   r&   r)   r,   r/   r2   r6   r9   r=   rA   rD   rG   rL   rN   rQ   rS   rU   r   mainrZ   r   r   <module>r      sO       " " " " " " ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?            3 3 3 3 3 3 3 3 3 3 ( ( ( ( ( ( ( (                       - - -) ) )) ) )    , , ,) ) ). . .+ + +Z- Z- Z- Z- Z-, Z- Z- Z-z zHMOOOOO r   