U
    /e-                     @   sb  d dl Z e d d dlZd dl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 d dlmZmZ d dlmZ dd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z d d! Z!d"d# Z"d$d% Z#e j$j%e&ed& d'd(d)d* Z'd+d, Z(d-d. Z)d/d0 Z*d1d2 Z+d3d4 Z,d5d6 Z-d7d8 Z.d9d: Z/d;d< Z0d=d> Z1dS )?    Nnumpy)Array)exponentialnormalrandom)	assert_eq)_dumps_loads)	key_splitc                  C   sT   t jd} | jddddd}t|| t jd} | jddddd}t|| d S N   
      sizechunks)dar   RandomStater   r   statexy r   @/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/tests/test_random.pytest_RandomState   s    
r   c                  C   s`   t jd} | jddddd}t jd} | jddddd}|jdd|jddk s\td S )Nr   r   r      r   Z	processes)Z	scheduler)r   r   r   r   computeallAssertionErrorr   r   r   r   test_concurrency   s
    r   c                   C   s   dt jdjjkstd S )Nmeanr   )r   r   r   r   __doc__r   r   r   r   r   test_doc_randomstate#   s    r"   c                  C   s8   t jd} | jddddd}tt|}t|| d S r   )r   r   r   r   r	   r   r   r   r   r   r   test_serializability'   s    r#   c                  C   sR   t jdjddd} t jdjddd}t| jt|jksDtt| | d S )N*     r   r   )r   r   r   r   setdaskr   r   )Z	samples_1Z	samples_2r   r   r   %test_determinisim_through_dask_values0   s    r(   c                  C   s|   t jd} t jd}t| jdddjt|jdddjksDtt| jddddd	jt|jddddd	jksxtd S )
Nr$   )d   r)   r   r   r   r)   g      @g      @r   )r   locscaler   )r   r   r   sortedr   r'   r   )Zstate1Zstate2r   r   r   !test_randomstate_consistent_names8   s    
r.   c                  C   sp   t ddd} t| tstt| jtr,| js0t| jdks>t| jdksLttt	
| j}t|dksltd S )Nr*   r   r   r   r/   r/   Z   )r   
isinstancer   r   namestrshaper   r&   nparrayflatlenar   r   r   r   test_randomC   s    r=   c                  C   s   t dddd} t| tstt| jtr.| js2t| jdks@t| jdksNtt	| }d|
   k rpdk svn tt|j}t|dkstd S )	Nr%   r*   r/   r0   r1   r   順 r2   )r   r3   r   r   r4   r5   r6   r   r7   r8   r    r&   r9   r:   )r<   r   r   r   r   r   !test_parametrized_random_functionO   s    

r?   c                  C   sJ   t ddddd} t| tstt| }d|   k r@dk sFn td S )Ng      $@g?r*   r/   )r+   r,   r   r         )r   r3   r   r   r7   r8   r    r;   r   r   r   test_kwargs]   s    
rB   c                  C   s,   t ddd} t ddd}| j|jks(td S )Nr*   r/   r0   )r   r4   r   )r<   br   r   r   test_unique_namesd   s    rD   c                   C   s.   dt jkstdt jkstdtjks*td S )Nr   z# doctest: +SKIP)r   r!   r   __name__r   r   r   r   r   	test_docsk   s    rF   c                   C   s   t ddddd d S )Nr   r   )@B rG   )r>   r>   r0   )r   r   r   r   r   %test_can_make_really_big_random_arrayq   s    rH   c                  C   sp   t jd t jjddd} t jjddd}t jd t jjddd}t jjddd}t| | t|| d S )N{   r   r   r   )r   r   seedr   r   )r   r   r<   rC   r   r   r   test_random_seedu   s    
rK   c                  C   sj   t jdjddd} t jdjdddd d }t jdjdddd d }t| | t| | d S )NrI      r0   r)      )r   r   r   r   )x1Zx2Zx3r   r   r   test_consistent_across_sizes   s
    
rO   c                   C   s  t jjddddd  t jjddddd  t jjdddd  t jjdddd  t jjddddd  t jjddddd  t jj	dddd  t jj
dddd  t jjdddddd  t jjddd  t jjddd  t jjddd  t jjdddd  t jjdd	gd
 ddd  t jjddddd  t jjddddd  t jjdddddd  t jjddddd  t jjdddd  t jjddd  t jjdddd  t jjddd  t jjddd  t jjdddddd  t jjddd  t jjddddd  t jjddddd  t jjdddd  t jjdddd  t jj ddd  t jj!ddd  t jj"dddd  t jj#ddd  t jj$dddd  d S )Nr   r   r      r   r   g      ?rL   UUUUUU?   )%r   r   betar   ZbinomialZ	chisquarer   fgammaZ	geometricZgumbelZhypergeometricZlaplaceZlogisticZ	lognormalZ	logseriesmultinomialZnegative_binomialZnoncentral_chisquareZnoncentral_fr   ZparetopoissonpowerZrayleighZrandom_sample
triangularuniformZvonmisesZwaldZweibullZzipfZstandard_cauchyZstandard_exponentialZstandard_gammastandard_normalZ
standard_tr   r   r   r   test_random_all   sD    r\   Zbroadcast_toz)requires numpy 1.10 method "broadcast_to")reasonc               	   C   s  t dd} tjddd}tjj| dd jdks<t	| |fD ]:}tjj
|ddd}|j|jksjt	| j|jksDt	qDtjj
|ddd}t|jt|jst	tjj
t dtjddddd jdkst	tjj
t dtjdddddd	 jdkst	tt  tjj
| t d
ddd W 5 Q R X t dtjddddfD ]B}tjj
d| ddd}d|    k rdk sZn t	qZt dd }tj|dd}tjj
|ddd}d|  |    k rdk sn t	d S )NrR   r   rP   )r   rP      rP   r0   r   )r   r_   )r   r   rP   r_   )r,   r+   r   r   )rP   r   r   r)   )2   r   r%   g{Gz?i   i  r   )r   r   g?g333333?)r7   arangeZreshaper   Zonesr   rW   r   r6   r   r   r&   r'   issubsetpytestraises
ValueErrorr    
from_array)ZarrZdaonesr   r   or<   zr   r   r   test_array_broadcasting   sB      


$*rj   c                  C   sh   dD ]^\} }t jjddgd | |d}tjjddgd | d}|j|j  kr\| jksn tqd S )N))r   rP   ))r   r_   r^   rL   rQ   rR   r   r   )r   r   rV   r7   r6   r   r   )r   r   r   r   r   r   r   test_multinomial   s    rl   c               
   C   s  t jjdddj} d}d}tjjd||d}|j| ks:t|j|ksHt| }|j| ks^t|j|ksltdddd	d
g}t j|dd}tj	|dd}|||fD ]^}tjj|||d}| }t 
|j}	|j|	kst|j|	ksttt ||stqt dddddg}
tj	|
dd}||
f||ffD ]l\}}tjj||||d}| }|j|jksht|j|jkszttt ||dd  s2tq2t jjddt dgdj} tjjd|||
d}| }|j| kst|j| kstd|d d d f d f||
d d d f f||
d d fd|
fddddgfg}|D ]4\}}tt tjj||||d W 5 Q R X qFtt tjj|||dd W 5 Q R X tjj||jd ddd}| }t|tt |kstd S )Nr   r   rk   )r   rP   r_   rP   r   r      	   Zf8dtyper   r0   r   g?g333333?)r   r   p)r   rq   )NF)r   r   replacerr   )r7   r   choicerp   r   r   r6   r   r8   rg   Zasarrayr&   uniquerc   rd   re   rf   NotImplementedErrorr:   )Znp_dtyper   r   r   resZpy_aZnp_aZda_ar<   Zexpected_dtypeZnp_pZda_prq   Zerrsr   r   r   test_choice   s^    &	"ry   c               	   C   s\   t jddiB tjjddd} | jdks0ttjjddd}|jdksNtW 5 Q R X d S )	Narray.chunk-sizeZ128MiB'  r|   )rr   autor0   ))r|   )  r~   r~   r~   r~   iO  r}   )   r   i  r   )r'   configr&   r   r   r   r   )r   r   r   r   r    test_create_with_auto_dimensions"  s
    r   c                  C   s<   t jjdddddj} | ds$ttt| dk s8td S )Nr   r   )r%   )i  r   r   r   )r   r   r   r4   
startswithr   r:   r
   )r4   r   r   r   
test_names+  s    r   c                  C   s   t jddd} t j| }|j| jks*t|j| jks:t|  t jd}t jd}|| }|| }t	|| t jd} | jdkstd S )NrA   rP   r0   r   r)   )r)   )
r   rb   r   Zpermutationr6   r   rp   r   r   r   )r   r   r<   rC   Zr1Zr2r   r   r   test_permutation2  s    


r   c                     s   t d tjj fddd} | jddddd	}t|| tjj fd
ddd} | jddddd	}tjj fdddd} | jddddd	}|j|jkstt|| d S )N	randomgenc                    s      | S NZRandomGeneratorZDSFMTrJ   r   r   r   <lambda>I      z1test_external_randomstate_class.<locals>.<lambda>r   r   r   r   )r   r   c                    s      | S r   r   r   r   r   r   r   O  r   rI   )r   rJ   c                    s      | S r   r   r   r   r   r   r   T  r   )	rd   importorskipr   r   r   r   r   r4   r   )rsr   r<   rC   r   r   r   test_external_randomstate_classE  s$    




r   c               	   C   sH   t jddi. tjd} d| j  k r4dk s:n tW 5 Q R X d S )Nrz   z50 MiBr{   r_       )r'   r   r&   r   r   Znpartitionsr   r   r   r   r   test_auto_chunks\  s    r   c                  C   sB   t jjddddd} t| |  | jdks,t|  jdks>td S )Nr      r   Zuint8r   rp   )r   r   randintr   rp   r   r   r   r   r   r   test_randint_dtypeb  s    
r   c               	   C   s<   t t} tjjddd W 5 Q R X dt| jks8td S )Nra   Zfloat64r   rp   )	rd   re   	Exceptionr   r   r[   r5   valuer   )infor   r   r   test_raises_bad_kwargi  s    r   c                  C   s@   t d} tjj| jjd}|jdtjd}|jtjks<t	d S )Ncupyr   )r   r   ro   )
rd   r   r   r   r   r[   r7   Zfloat32rp   r   )r   r   r   r   r   r   test_randomstate_kwargsp  s    
r   )2rd   r   r   r7   r'   Z
dask.arrayr8   r   Zdask.array.corer   Zdask.array.randomr   r   r   Zdask.array.utilsr   Zdask.multiprocessingr   r	   Z
dask.utilsr
   r   r   r"   r#   r(   r.   r=   r?   rB   rD   rF   rH   rK   rO   r\   markZskipifhasattrrj   rl   ry   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sN   

		*
 
&=	