U
    ,‰d>  ã                   @   s„   d dl Zd dlmZ d dlmZ d dlmZ d dlmZm	Z	 e 
dejfdejdfg¡Zed	ƒG d
d„ de	ƒƒZedkr€e ¡  dS )é    N)Úcuda)Ú	transpose)Úunittest)Úskip_on_cudasimÚCUDATestCaseÚiÚj)é   é   z-Device Array API unsupported in the simulatorc                   @   s0   e Zd Zdd„ ZdZdd„ Zdd„ Zdd	„ Zd
S )ÚTestTransposec           	   
   C   sÄ   ddt jfddt jfddt jff}|D ]˜\}}}| j|||dx t j|| |d ||¡}t j|| |d ||¡}t |¡}tj	j
 |¡}t||ƒ | |¡ t j | ¡ |¡ W 5 Q R X q&d S )Né   é   é€   i  i   )ÚrowsÚcolsÚdtype©r   )ÚnpZfloat64Z
complex128ÚsubTestÚarangeÚreshapeÚzerosr   Ú	to_deviceZcudadrvZdevicearrayZfrom_array_liker   Úcopy_to_hostÚtestingÚassert_array_equal)	ÚselfÚvariantsr   r   r   ÚxÚyZdxZdy© r    úJ/tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/tests/cudapy/test_transpose.pyÚtest_transpose   s    


þ


zTestTranspose.test_transpose))r
   r	   )é   r#   )r#   é   )r$   r#   )é   é   )r&   r%   )r%   r%   c              
   C   sÚ   | j D ]Î\}}| j||d² tj||ftd}t|ƒD ]V}t|ƒD ]H}|d | |||f _tjdtjd}| 	dd¡| | |||f _
qDq8|j}t |¡}t |¡}	t||	ƒ |	 ¡ }
tj ||
¡ W 5 Q R X qd S )N©r   r   r   r
   r   r	   )Úsmall_variantsr   r   ZrecarrayÚrecordwith2darrayÚranger   r   Úfloat32r   r   ÚTr   r   Údevice_array_liker   r   r   r   )r   r   r   Úarrr   r   r   Ú
transposedÚd_arrÚd_transposedÚhost_transposedr    r    r!   Útest_transpose_record!   s    "


z#TestTranspose.test_transpose_recordc              
   C   s€   | j D ]t\}}| j||dX tjjd||ftjd}|j}t |¡}t 	|¡}t
||ƒ | ¡ }tj ||¡ W 5 Q R X qd S )Nr'   r
   )Úsizer   )r(   r   r   ÚrandomÚrandintZbool_r,   r   r   r-   r   r   r   r   )r   r   r   r.   r/   r0   r1   r2   r    r    r!   Útest_transpose_bool2   s    


z!TestTranspose.test_transpose_boolc                 C   sŠ   t jdt jd d¡}|d d d…d d d…f j}t |¡}|d d d…d d d…f j}|  |jd¡ |  |j	d¡ | 
¡ }t j ||¡ d S )Néx   r   )é
   é   r
   )r   r   )é(   é   )r   r   Zint64r   r,   r   r   ÚassertEqualÚshapeÚstridesr   r   r   )r   ÚaZa_view_tZd_aZ
d_a_view_tZ
h_a_view_tr    r    r!   Útest_transpose_view?   s    
z!TestTranspose.test_transpose_viewN)Ú__name__Ú
__module__Ú__qualname__r"   r(   r3   r7   rA   r    r    r    r!   r      s
   r   Ú__main__)Znumpyr   Znumbar   Znumba.cuda.kernels.transposer   Znumba.cuda.testingr   r   r   r   Zint32r+   r)   r   rB   Úmainr    r    r    r!   Ú<module>   s   
ÿB