U
    /e6m                     @   s  d dl Z e d d dlZd dl Z d dlmZ d dlZd dlmZ	 d dl
mZ d dlmZmZ e jdde jde jjdge jd	d
dddddddge jdeeejge jdeeejge jddge jdddge jdddge jddgdd Ze jdd
i fdi fdi fdd d!ifge jd"d#d$d%d&d'd(d)d*ge jddgd+d, Ze jd-d.d/gd0d1 Zd2d3 Ze jd4d5d6d7d8ed9ed:ed9dfed9ed:ed9dfed9ed:ed9dfed9ed:ed9dfed9ed:ed9ejfed9ed:ed9ejfg
d;d< Ze jjd=d>d?d@ Z dAdB Z!dCdD Z"dEdF Z#dGdH Z$dIdJ Z%e jdKdLgdLgfdMgdMgfdNdOgdPdNgfdNdOdQgdPdNdOgfdNdOdQdRgdPdNdOdQgfdSdQgdTdOgfge jdUdVdWge jdXd/d.gdYdZ Z&d[d\ Z'e jd]d^dd e(d_fd`dd e(d_fd^d`d e)d_fd^dd9e*d_fd^ddae*d_fd^dd:e*d9fdbdcdde*defdbdcd e*dffgdgdh Z+didj Z,e jdkd d^dldcgdmdn Z-e jdkd d^dldcgdodp Z.e jdkd d^dldcgdqdr Z/dsdt Z0e jdddudvge jdwdxdy i fddzdyi fdd{dyd|d^ifgd}d~ Z1dd Z2e jdd:ddTddgdd Z3e jdddge jdd d9d:d^d!dPdTgdd Z4e jdddge jddadgdd Z5e jdddge jdd dMddgdd Z6e jdddge jdd:dgdd Z7e jddOdSddddge jddNdTddddgdd Z8e jdddd ddd:ifddd di fddd ddd:ifddd di fddd di fddd di fddd di fgdd Z9e jdddOd9di fddOd:dddaifddOdSdddifddddddifddOd^di fddOd^di fddOd^ddd ifddddddifddddi fddddi fddddi fddOdSdddTifddddddifddOdSdddSifddOd9di fgdd Z:e jdej;ej<eje)ge jdd:dNdSddge jddddddde jde jj=dd>de jde jj=dd>de jde jj=dd>de jde jj=dd>de jde jj=dd>dgdd Z>e jdi dd:igddń Z?ddǄ Z@ddɄ ZAdd˄ ZBdS )    Nnumpy)concat)normalize_chunks)	assert_eq	same_keysbackendZcupy)ZmarksfuncnameZ
empty_likeemptyZ	ones_likeonesZ
zeros_likezerosZ	full_likefull
cast_shapecast_chunkszshape, chunks)
   r      r   namezmy-nameorderCFdtypei4c	              	      s  t |}	tjd|i t|	| }
tt| }||}||}d| krj|
| fdd}
 fdd}t|}d| kr|	j	
dd||}|
||d	}|||||d
}n |
|||d}||||||d}|j|jkst|j|jkstt|j|	jstt| |	jstd| kr.t|| |d krT| dd |jksdtn|j|ksdtddkrt| stnt| rtW 5 Q R X d S )Nzarray.backendr   c                     s    | ddi|S N
fill_value    ak)old_np_funcr   B/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/tests/test_creation.py<lambda>5       ztest_arr_like.<locals>.<lambda>c                     s    | ddi|S r   r   r   )old_da_funcr   r!   r"   6   r#   liker   r   )r   )r   chunksr   )r   r   )r   r   r&   r   r	   _r   r   )pytestimportorskipdaskconfigsetgetattrdanpr   randomrandintastypeshapeAssertionError
isinstanceZ_metaZndarraycomputer   splitr   Z	isfortran)r   r3   r   r   r   r&   r   r   r   Zbackend_libnp_funcda_funcr   np_rda_rr   )r$   r    r!   test_arr_like   s<    







r<   zfuncname, kwargsr   r   zshape, chunks, out_shape)r   r   N)r   r   )      )r   r   r=   ))r   r   r   )r      r   r   )r?   r>   r      Nr>   r   rB   )rA   )r?   r   r>   rC   )rA   )r?   r   r>   autor>   )   r?   r>   r   rB   )rA   rD   rC   c                 C   s   t t| }t t| }tjdd||}||fd|i|}	||f||d|}
|	j|
jksdt|	j|
jksttd| krt	|	|
 d S )Nr   r   r3   )r&   r3   r	   )
r-   r/   r.   r0   r1   r2   r3   r4   r   r   )r   kwargsr3   r   r&   Z	out_shaper8   r9   r   r:   r;   r   r   r!   test_arr_like_shapeX   s    

rG   endpointTFc              	   C   s  t jdd| dd}tjdd| d}t|| t jdd| ddd	}tjdd| dd
}t|| t jdd| dtd}tjdd| td}t|| t jdd| ddd\}}tjdd| dd\}}t||stt|| t jdd| ddtd}tjddd| td}t|| tt jdd| ddd	j	tt jdd| ddd	j	ksBttt jdd| dtdj	tt jdd| dtdj	ks|tt 
ddddg}tjddd| d}t jt |t |d d| d}t|| tjddd| d}t jddd| d}t|| tjddd| d}t jddd| d}t|| tjddd| d}t jddd| d}t|| tjddd| d}t jddd| d}t|| tjddd| d}t jddd| d}t|| tjddd| d}t jddd| d}t|| d S )N   1   r   )rH   r&   )rH   gffffff?g@   )rH   r&   num)rH   rL   )rH   r&   r   )rH   r   T)rH   r&   retstep)rH   rM   )rH   r&   rL   r   )rL   rH   r   g?g@g      @g?r   r?         )r.   Zlinspacer/   r   floatZallcloser4   intsortedr*   arrayZargminZargmax)rH   darrnparrZdstepZnpstepxr   r   r!   test_linspace}   s`    






"





rW   c               	   C   s  t jddd} td}t| | t jdddd} tdd}t| | t jddddd} tddd}t| | t jd	dd
dd} td	dd
}t| | t jddtd} tjdtd}t| | t jdddtd} tjddtd}t| | tt jddddjtt jddddjks"ttt jddtdjtt jddtdjksTtt jddddd} tddd}t| | t jddddd} tddd}t| | t	j
tdd t jdddd W 5 Q R X t djdkstd S )NM   rK   r&   r?   r   r      	   5   r&   r   r   r   rO   g      r=         ?	whatsthismatchr   )r&   rb   )r   )r.   aranger/   r   rP   rQ   rR   r*   r4   r(   raises	TypeErrorr&   rT   rU   r   r   r!   test_arange   sB    








rj   zstart,stop,step,dtype)r   rO   rO   N)      ?r?   rO   N)rO   g      @rO   N)rO   r?   ra   NrO   r?   c                 C   s4   t j| |||d}tj| |||dd}t|| d S )Nr_   r`   )r   r&   )r/   rf   r.   r   )startstopstepr   Za_npZa_dar   r   r!   test_arange_dtypes   s    ro   zcCasting floats to ints is not supported since edgebehavior is not specified or guaranteed by NumPy.)reasonc                  C   s4   t jdddddd} tjddddd}t| | d S )Ngffffff
@g333333"g      пr>   i8r^   r_   r.   rf   r/   r   ri   r   r   r!   test_arange_cast_float_int_step  s    rs   c                  C   s   t jddddd} tddd}t| | t jdddd	d} tddd}t| | t jd
dddd} td
dd}t| | t jd
dddd} td
dd}t| | d S )N       @g      *@g333333?r   rY   g@rk   gr>   r   rO   g{Gz?r=   gQ?rr   ri   r   r   r!   test_arange_float_step  s    


ru   c                	   C   s*   t t tjdt d W 5 Q R X d S )NrO   rY   )r(   rg   
ValueErrorr.   indicestupler   r   r   r!   test_indices_wrong_chunks  s    rz   c               	   C   s~   d} t jd| d}|jd|  ks$ttjddi@ d}td|td	}t j|dd}|jd
d  }||ksptW 5 Q R X d S )N))rO   r   r?   r>   r@   r   rY   ))rO   rO   array.chunk-size50 MiB'  r~   rD   r3   r   rO   )	r.   rx   r&   r4   r*   r+   r,   r   rQ   )r&   rT   r3   expectedresultactualr   r   r!   test_indices_dimensions_chunks$  s    r   c                  C   s(  t jt t d} tt }| j|jks.t| j|jks>tt| | t jt tt d} tt t}| j|jkszt| j|jkstt| | t jdtdd} tdt}| j|jkst| j|jkstt| | t jdtdd} tdt}| j|jkst| j|jkstt| | d S )NrY   r   rv   )r   rO   r?   )rO   rO   r?   )	r.   rx   ry   r/   r3   r4   r   r   rP   ri   r   r   r!   test_empty_indices2  s(    


r   c                  C   s   t jddd} td}t| | t jdtdd} tdt}t| | t jddd} td}t| | t jddd} td}t| | d S )Nrv   rY   r?   rO   r?   r>   rO   r?   )r.   rx   r/   r   rP   ri   r   r   r!   test_indicesL  s    





r   zshapes, chunksr   r   r?   )r>   rv   )r   )r   r   r   indexingijxysparsec                 C   sf  g }g }g }t | |D ]N\}}|tj| tj|d |d}	||	 |	 }
||
jd  qtt	t
|}|dkrt
|dkr|d |d  |d< |d< |d |d  |d< |d< t|}tj|||d}tj|||d}t|tstt
|t
|kstt |||D ]F\}}}t|| |rN|j| || ks^tn|j|kstqd S )Nr`   rY   r   r   rO   )r   r   )zipappendr/   r0   r.   
from_arrayflattenr&   listrangelenry   meshgridr5   r4   r   )Zshapesr&   r   r   Zxi_aZxi_dZxi_dcZ
each_shapeZ
each_chunkZxi_d_eZxi_d_efZdoZr_aZr_dZe_r_aZe_r_dir   r   r!   test_meshgrid^  s.    

r   c                  C   s|   dddg} t ddddg}t j| |dd	\}}|| }tj| |dd	\}}|| }|jt| t|fksntt|| d S )
NrO   r?   r>   r   r   rI   rB   r   )r   )r/   rS   r   r.   r3   r   r4   r   )r   brV   yzZx_dZy_dZz_dr   r   r!   test_meshgrid_inputcoercion  s    
r   zN, M, k, dtype, chunksr>   rD   r   r`   rI   rN   r>   r   )r>   rD   c                 C   s(   t t| ||||t| ||| d S N)r   r.   Ztrir/   )NMr   r   r&   r   r   r!   test_tri  s    r   c               	   C   sf  t tjdddtd t tdtd t tjdddtd t tjddddtjddd t tjddddtjddd t tjddddtjddd t tjddddtjddd t tjddd	d
tjdd	d t tjdddd
tjddd t tjdddddtjdddd t tjdddddtjdddd t tjdddddtjdddd t tjdddddtjdddd t tjddtdtjdtd t tjddtdtjdtd t tjddtdtjdtd t tjddd dtjdd d tjddi2 tdd} d| j  k rRdk sXn t	W 5 Q R X d S )Nr[   r>   rY   r   rE   )r&   r   )r   rB   r?   )r&   r   )r   r   r   )r&   r   r   )r   r   rI      r]   r^   r_   r`   r{   r|   r~   rD   r       )
r   r.   Zeyer/   rQ   r*   r+   r,   npartitionsr4   rV   r   r   r!   test_eye  s(          $$$$    r   r   r]   c              	   C   s   t dd}tjtdd t||  W 5 Q R X tdd}tjtdd t||  W 5 Q R X d}tjtdd t||  W 5 Q R X d S )N   )r?   r>   r   zArray must be 1d or 2d onlyrc   rO   z%v must be a dask array or numpy array)	r/   rf   reshaper(   rg   rw   r.   diagrh   )r   vr   r   r!   test_diag_bad_input  s    r   c                 C   s  t d}tt|| t ||  tjddd}t|| }t || }t|| tt|| jtt|| jks|t|| d }t|| }t || }t|| tjddd}t|| }t || }t|| tt|| jtt|| jkstd S )NrE   r>   rY   )r/   rf   r   r.   r   rR   r*   r4   )r   r   rT   rU   r   r   r!   test_diag_2d_array_creation  s     

(

r   c                 C   s   t dd}tt|| t ||  tj|dd}tt|| t ||  tj|dd}tt|| t ||  t dd}tt|| t ||  tj|dd}tt|| t ||  tj|dd}tt|| t ||  d S )	N@   rN   rN   r   rY   )r>   r?   r>   r   rO   r?   rO   (   )r   rN   )r>   r?   r   )r/   rf   r   r   r.   r   r   )r   rV   dr   r   r   r!   test_diag_extraction  s    r   c               	   C   sR  t d} tt t|  W 5 Q R X t dd} tt tj| ddd W 5 Q R X tt j tj| dd W 5 Q R X tt j tj| dd W 5 Q R X t d	d
} tj	| dd} t
t| t |  t
tj| ddt j| dd t
tj| ddt j| dd tt tj| dd W 5 Q R X t
tj| ddt j| dd t
tj| dddt j| ddd t dd} tj	| dd} t
t| t |  t
tj| ddddt j| dddd t
tj| ddddt j| dddd t
tj| ddddt j| dddd t
t| dt | d t
t| dt | d t
t| dddt | ddd t dd} t
tj| dddt j| ddd t
tj| ddddt j| dddd t
tj| ddddt j| dddd t
tj| ddddt j| dddd t
tj| ddddt j| dddd t
tj| ddddt j| dddd t
tj| ddddt j| dddd tj	| dd} t
tj| ddddt j| dddd t
tj| ddddt j| dddd t dd} t
tj| dddt j| ddd tj	| dd} t
tj| dddt j| ddd d S )NrE   r   r?   r?   r   )axis1axis2)r   )r   x   )r   r   rI   r?   rY   r   )offsetir   r`   rO   )r   r   i  )r?   r>   r   r   rI   )rO   r   )rO   r?   rO   )r?   rO   r?   )r   rO   r>   )r   r   r   r   r]   i  )rN   rN   rI   )r   r   r?   )r/   rf   r(   rg   rw   r.   diagonalr   Z	AxisErrorr   r   )r   r   r   r!   test_diagonal  s    
""""r   Zf8rq   zfunc, kwargsc                 C   s   | | S r   r   )rV   r   r   r   r!   r"   m  r#   r"   c                 C   s   | ||  S r   r   rV   r   cr   r   r!   r"   n  r#   c                 C   s   | ||  S r   r   r   r   r   r!   r"   o  r#   r   c                 C   sh   t j| fd|d|}tj| fdd|d|}t|| tj| fdd|d|}t||sdtd S )Nr@   r   r   )r3   r&   r   )r/   Zfromfunctionr.   r   r   r4   )funcr   rF   r   r   Zd2r   r   r!   test_fromfunctioni  s
    

r   c               
   C   sz  t jd} tj| dd}ddddg}dd	d
dddg}|D ],}|D ]"}t| j||d|j||d qBq:t|ddt|dd tt t|t 	d W 5 Q R X tt t|dd  W 5 Q R X tt t|d W 5 Q R X dD ]*}tt
 tj|d|d W 5 Q R X qt 	d} tj	ddd}t| d|d dD ] }tt||jsTtqTd S )Nr   rE   rK   r   r   r>   rY   r   rO   r?   r   r]   r   r`   )Zaxisr   )r>   r   r   r>   )rO   r?   r>   r   )r/   r0   r.   r   r   repeatr(   rg   NotImplementedErrorrf   rw   allr   r&   r4   )rV   r   ZrepeatsZaxesrr   Zinvalid_axisr   r   r!   test_repeat}  s,    "
r   repsr   r   )r?   r>   r   r   c                 C   s\   t dddg}ddgddgg}tt| | t ||  tt|| t ||  d S )Nr   rO   r?   r>   r   )r.   asarrayr   r/   tiler6   )r   r   r   r   r   r!   test_tile_basic  s    r   )re   rv   )r   r   c                 C   s8   t j| }tj||d}tt ||t|| d S NrY   r/   r0   r.   r   r   r   r3   r&   r   rV   r   r   r   r!   test_tile_chunks  s    r   r   c              	   C   s@   t j| }tj||d}tt t|| W 5 Q R X d S r   )r/   r0   r.   r   r(   rg   rw   r   r   r   r   r!   test_tile_neg_reps  s    r   r?   r   )r   r>   r   r   c                 C   s8   t j| }tj||d}tt ||t|| d S r   r   r   r   r   r!   test_tile_zero_reps  s    r   )rO   rO   r   r   )r   )rO   r   )r>   r?   r   c                 C   s6   t | }tj||d}tt ||t|| d S r   )r/   r	   r.   r   r   r   r   r   r   r!   test_tile_empty_array  s    
r   r3   )r>   r   r>   r   )r   r>   r?   r   )r?   r>   r?   r   c                 C   s4   t j| }t|}tt ||t|| d S r   )r/   r0   r.   r   r   r   )r3   r   rV   r   r   r   r!   !test_tile_np_kroncompare_examples  s    
r   z&shape, chunks, pad_width, mode, kwargsr   rE   r   r   ZconstantZconstant_valuesZedgeZlinear_rampZ
end_valuesZreflectZ	symmetricwrapc           	      C   sX   t j| }tj||d}t j|||f|}tj|||f|}||ksJtt|| d S r   )r/   r0   r.   r   padr4   r   	r3   r&   	pad_widthmoderF   np_ada_ar:   r;   r   r   r!   test_pad_0_width  s    r   re   r`   r   ))rO   r   r   )r   r   )r   )r   r>   maximumZstat_lengthZmean)r   r   Zminimumc           	      C   st   t j| }tj||d}t j|||f|}tj|||f|}|dkrft|||  |||   n
t|| d S )NrY   r	   r/   r0   r.   r   r   r   r   r   r   r!   test_pad  s    ! r   
pad_widths)r   ))r>   rO   )r   r   r   r   zUBug when pad_width is larger than dimension: https://github.com/dask/dask/issues/5303ZmedianzNot implementedz7Empty leads to undefined values, which may be differentc                 C   sV   t dddd| }tj|dd}t j|||d}tj|||d}t|| d S )Nr   r?   r>   r   rD   rY   )r   )r/   rf   r   r2   r.   r   r   r   )r   r   r   r   r   r:   r;   r   r   r!   test_pad_3d_data  s
    ,r   rF   scalerc           	         sd    fdd}d}d}d}t j|}tj||d}t j|||f }tj|||f }t|| d S )Nc                    sP    |kst |dd}| |d  | d |d < ||d  | |d  d < | S )Nr   rO   r   )r4   get)Zvectorr   ZiaxisZinner_kwargsr   rF   r   r!   udf_padV  s
    ztest_pad_udf.<locals>.udf_padr   r   )r   r   rY   r   )	rF   r   r3   r&   r   r   r   r:   r;   r   r   r!   test_pad_udfT  s    r   c               	   C   sF   t jddi, td} d| j  k r2dk s8n tW 5 Q R X d S )Nr{   r|   r}   r   r   )r*   r+   r,   r.   r
   r   r4   r   r   r   r!   test_auto_chunksj  s    
r   c                	   C   s*   t t tjdddd W 5 Q R X d S )Nr}   Z
auto_chunkrD   rY   )r(   rg   rw   r.   r   r   r   r   r!   test_string_auto_chunkp  s    r   c                  C   sj   t jddd} t jddd}t |}td}t|| t|| d|  ||  }t|tdd d S )Nr   r   rY   )rN   r?   rt   )r.   r
   r   r/   r   r   )rV   ddr   r   Ar   r   r!   test_diagonal_zero_chunksu  s    


r   )rO   )rO   )Cr(   r)   r   r/   Ztlzr   r*   Z
dask.arrayrS   r.   Zdask.array.corer   Zdask.array.utilsr   r   markZparametrizeparamZgpury   r   r   r<   rG   rW   rj   Zfloat32Zint32Zuint32Zuint64ro   Zxfailrs   ru   rz   r   r   r   r   r   rP   boolrQ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zuint8Zint16skipr   r   r   r   r   r   r   r   r!   <module>   s  
2
	
:0







g
#
 
 
 '

