U
    hâË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   ÚgridÚsizeZgridsize)ÚstartÚendÚdeltaÚi© r   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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_tr5   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   r4   c                 S   s   ||  |d< d S )Nr   r   )r   r   Úoutr   r   r   r5   >   s    z.TestCudaDateTime.test_gufunc.<locals>.timediffr   r   r   r   r   )	r   r    r   r   r!   r"   r#   r   r%   )r&   r6   Ztimedelta_tr5   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_hostr0   Ú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!   r0   r   r   r:   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)   r3   r   r7   r9   rA   rB   r   r   r   r   r   	   s   


r   Ú__main__)Únumpyr    Znumbar   r   r   Znumba.np.numpy_supportr   Znumba.cuda.testingr   r   Zunittestr   rC   Úmainr   r   r   r   Ú<module>   s   T