U
    /e                  
   @   sp  d dl Zd dlZd dlmZ ejjZd dl	m
Z d dlmZ d dlmZmZ edZeejZejje ddejjeedk d	dd
d Zejje dddd Zejddd gddgddgddggejdd ddgdd Zejje ddejdd ddgdd Zejje ddejdd ddgdd Zejje ddejdeegdd Zejje ddejjeedk d	ddd Zejje ddejjeedk d	ddd  Zejd!d"d#gejd$d"d#gejd%d"d#gd&d' Zejd(d)d*gejd+d d,ggejd-d.d/gd.d0gd1d2gd3d1ggd4d5 Z dS )6    N)parse)
_numpy_120)	assert_eq	same_keyscupyzNEP-35 is not available)reasonz6.4.0zBRequires CuPy 6.4.0+ (with https://github.com/cupy/cupy/pull/2418)c                  C   s   t dddddg} tj| ddd}tj|dd}t|tj| dd ttj|dd|s^ttj|ddj	tj|ddj	ksttj|ddj	tj|ddj	kstd S )	N         Fchunksasarray   )Z	minlength   )
r   arrayda
from_arrayZbincountr   npr   AssertionErrorname)xde r   G/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/tests/test_cupy_routines.pytest_bincount   s    $r   c                  C   sb   t jjdddd} tj| dd}t dg}tj||dd}ttj|	 | 	 dd|d	d
 d S )Nr      
   r   size)   r
   r   T)axisFZ
check_type)
r   randomrandintr   r   r   compressr   r   tolist)Zcarrdarrcresr   r   r   test_compress   s
    r,   zshape, axis)r      r!   r	   r   nc                 C   sH   t jdd| }tj|t| d d}tt|||t ||| d S )Nr   r   r
   r"   )r   r%   r&   r   r   lenr   diff)shaper/   r#   r   ar   r   r   	test_diff.   s    r5   c              
   C   s  t dd }tj|dd}ttj|| ddt j|| dd ttj|| dgdt j|| dgd ttj|| ddgdt j|| ddgd t dd	d	}tj|dd}ttj|| ddd
t j|| ddd
 ttj|| ddgdgdgdggd
t j|| ddgdgdgdggd
 ttj|| ddd
t j|| ddd
 ttj|| dddddggd
t j|| dddddggd
 | dkrtt	 tj|| t 
dd W 5 Q R X d S )Nr
   r	   r   r"   r   )prependr.         )r#   r6   r   r   r   Zaranger   r   r   r2   Zreshapepytestraises
ValueErrorzerosr/   r   r4   r   r   r   test_diff_prepend:   s(    "&*&  &
r@   c              
   C   s  t dd }tj|dd}ttj|| ddt j|| dd ttj|| dgdt j|| dgd ttj|| ddgdt j|| ddgd t dd	d	}tj|dd}ttj|| ddd
t j|| ddd
 ttj|| ddgdgdgdggd
t j|| ddgdgdgdggd
 ttj|| ddd
t j|| ddd
 ttj|| dddddggd
t j|| dddddggd
 | dkrtt	 tj|| t 
dd W 5 Q R X d S )Nr
   r	   r   r"   r   )appendr.   r7   r8   )r#   rA   r9   r:   r?   r   r   r   test_diff_appendW   s(    "&*&  &
rB   	bins_typec              	   C   s   t dddddg}| dddddg}dD ]L}dD ]B}tj||d	}t |}ttj|||d
tj|||d
dd q4q,t jjdd}| jjdd}|  dD ]H}dD ]>}tj||d	}t |}ttj|||d
tj|||d
 qqd S )Nr   r8   r
   r   r	   r   )r   r8   )FTr"   )rightFr$   )d   rE   r      )r   )r   r!   )rF      )W   6   )	r   r   r   r   r   Zdigitizer   r%   sort)rC   r   Zbinsr   rD   r   Z	bins_cupyr   r   r   test_digitizet   s,    


rK   c                  C   s   t jdd} dD ]}tj| ||fdd}tt|t|  tt|t|  dD ]8}tt||t| | tt||t| | qZqd S )Nr!   )r
   r8   F)r   )iiir.   r	            )	r   r%   Zrandnr   r   r   triur   tril)AZchkdAkr   r   r   test_tril_triu   s    rT   c                  C   sP   t jddd} tj| ddd}tt|t|  tt|t|  d S )Nr      )   #   )r
   r
   Fr   )	r   r%   r&   r   r   r   rO   r   rP   )rQ   rR   r   r   r    test_tril_triu_non_square_arrays   s    rX   return_indexFTreturn_inversereturn_countsc              	      st   t dtddddddg tj dd fdd	}t rptt	 |  W 5 Q R X d S )
N)rY   rZ   r[   r	   r   r8   r
   r   r"   c                     s   t j f} tjf}tgsVt| tjs:tt|tjsJt| f} |f}t	| t	|ksjtrdt
 }jf|| jkstt| |D ]\}}t|| qd S )Nr	   )r   uniquer   any
isinstancer   Zndarrayr   Arrayr1   intr    r3   zipr   )r_ar_diZe_r_aZe_r_dr4   r   kwargsr[   rY   rZ   r   r   _test_unique_kwargs   s    z/test_unique_kwargs.<locals>._test_unique_kwargs)
dictr   r   r   r   r^   valuesr;   r<   r=   )rY   rZ   r[   rh   r   rf   r   test_unique_kwargs   s    rk   seed   i  z	low, highr   zshape, chunks)r   r0   r\   )r8   r
   )r   r   )r!   r!   c           	      C   sN   t j|  t jj|||d}tj||d}t|}t|}t|| d S )Nr   r"   )	r   r%   rl   r&   r   r   r   r]   r   )	rl   lowhighr3   r   r4   r   rc   rd   r   r   r   test_unique_rand   s    

rp   )!Znumpyr   r;   Zpackaging.versionr   parse_versionmarkZgpuZ
pytestmarkZ
dask.arrayr   r   Zdask.array.numpy_compatr   Zdask.array.utilsr   r   Zimportorskipr   __version__Zcupy_versionZskipifr   r,   Zparametrizer5   r@   rB   rK   rT   rX   rk   rp   r   r   r   r   <module>   sl   





%