U
    ,d                     @   sd   d dl Zd dlmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlZG dd de	Zedkr`e  dS )    N)cuda	vectorizeguvectorize)
from_dtype)CUDATestCaseskip_on_cudasimc                   @   s\   e Zd Zdd Zdd Zeddd Zeddd	 Zed
dd Zed
dd Z	dS )TestCudaDateTimec                 C   sf   t jdd }tjdddd}|tjdd|j }tj|d	d}|d
 ||| | |||  d S )Nc                 S   s8   t td|jtdD ]}|| | |  ||< qd S N   ranger   ZgridsizeZgridsize)startenddeltai r   I/tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/tests/cudapy/test_datetime.pyfoo   s    z8TestCudaDateTime.test_basic_datetime_kernel.<locals>.foo2005-022006-02datetime64[D]dtyper   '  timedelta64[D]r
       )	r   jitnparangerandomrandintr   
zeros_likeassertPreciseEqual)selfr   arr1arr2r   r   r   r   test_basic_datetime_kernel
   s    
z+TestCudaDateTime.test_basic_datetime_kernelc                 C   s   t jdd }tjdddd}|d }|d |d  }tj|tjd}tj|dd}|d	 ||||| | }| t|dg | 	|||  d S )
Nc                 S   sD   t td|jtdD ]$}| | |k||< | | | ||< qd S r	   r   )datestargetr   matchesoutdeltar   r   r   r   r      s    z9TestCudaDateTime.test_scalar_datetime_kernel.<locals>.foor   r   r   r         r   )
r   r   r   r    r#   Zbool_ZnonzeroassertEquallistr$   )r%   r   r&   r*   r   r+   r,   wherer   r   r   test_scalar_datetime_kernel   s    
z,TestCudaDateTime.test_scalar_datetime_kernelz&ufunc API unsupported in the simulatorc                 C   sl   t td}t||fgdddd }tjdddd}|tjd	d
|j }|||}| |||  d S )Nr   r   r*   c                 S   s   ||  S )Nr   )r   r   r   r   r   timediff.   s    z-TestCudaDateTime.test_ufunc.<locals>.timediffr   r   r   r   r   )	r   r   r   r   r    r!   r"   r   r$   )r%   
datetime_tr4   r&   r'   r   r   r   r   
test_ufunc*   s    

zTestCudaDateTime.test_ufuncc                 C   s   t td}t td}t|||d d  fgddddd }tjdd	dd
}|tjdd|j }|||}| |||  d S )Nr   r   z	(),()->()r   r3   c                 S   s   ||  |d< d S )Nr   r   )r   r   outr   r   r   r4   >   s    z.TestCudaDateTime.test_gufunc.<locals>.timediffr   r   r   r   r   )	r   r   r   r   r    r!   r"   r   r$   )r%   r5   Ztimedelta_tr4   r&   r'   r   r   r   r   test_gufunc9   s    

zTestCudaDateTime.test_gufuncz#no .copy_to_host() in the simulatorc                 C   sR   t jdddd}t|}|t j}| |t j|  | |j	|j	 d S )Nr   r   r   r   )
r   r    r   	to_deviceviewint64r$   copy_to_hostr/   gpu_datar%   ZarrdarrZviewedr   r   r   test_datetime_view_as_int64J   s
    
z,TestCudaDateTime.test_datetime_view_as_int64c                 C   sr   t jdddd}||d  }| |jt d t|}|t j}| |t j|	  | |j
|j
 d S )Nr   r   r   r   r
   r   )r   r    r/   r   r   r9   r:   r;   r$   r<   r=   r>   r   r   r   test_timedelta_view_as_int64R   s    
z-TestCudaDateTime.test_timedelta_view_as_int64N)
__name__
__module____qualname__r(   r2   r   r6   r8   r@   rA   r   r   r   r   r   	   s   


r   __main__)Znumpyr   Znumbar   r   r   Znumba.np.numpy_supportr   Znumba.cuda.testingr   r   Zunittestr   rB   mainr   r   r   r   <module>   s   T