U
    Cvfk                     @  s  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z
d dlZd dlZd dlmZ d dlZd dlmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( e)dZ*e)dZ+e)dZ,edZ-ej.dkZ/dd Z0G dd dZ1G dd de1Z2G dd de1Z3G dd dZ4ej56dddgdd Z7ej56dddd gd!d" Z8ej56dddd gd#d$ Z9d a:d%d& Z;d'd( Z<ej56d d)d* d+d* gd,d- Z=ej56d d.d* d/d* gd0d1 Z>d2d3 Z?d4d5 Z@d6d7 ZAd8d9 ZBd:d; ZCejDd<d= ZEejDd>d? ZFd@dA ZGej56dBeC eB gej56dCdDd* dEd* gdFdG ZHej56dBeB gdHdI ZIdJdK ZJej56dBeB eC gdLdM ZKej56dBeB eC gdNdO ZLej56dBeB eC gdPdQ ZMdRdS ZNej56dBeB eC gdTdU ZOdVdW ZPej56dBeB eC gdXdY ZQdZd[ ZRej56d\d]d* d^d* d_d* d`d* dad* dbd* dcd* ddd* gdedf ZSej56d\dgd* dhd* did* djd* dkd* dld* dmd* dnd* gdodp ZTej56dBeB eC gdqdr ZUdsdt ZVej56dBeB eC gdudv ZWdwdx ZXej56dBeB eC gdydz ZYd{d| ZZd}d~ Z[dd Z\ej56dBeB eB ] eC eC ] gej56dCdd* dd* dd* dd* dd* dd* dd* gdd Z^ej56dBeB eB ] eC eC ] gdd Z_ej56dBeB ] eC ] gdd Z`ej56dCdd* dd* dd* gej56dBeB eC eC jad gdd Zbdd Zce&dd Zdej56dddddgdd Zeej56dddddgdd Zfej5gdej56dBeB eC gej56dCdd* dd* dd* dd* dd* dd* dd* dd* dd* dd* dd* dd* dd* dd* dd* dd* dd* dd* gdd Zhdd Zidd Zjej5jke-edkdddd ZldS )    )annotationsN)suppress)dedent)Version)	DataArrayDatasetVariable)duck_array_ops)lazy_array_equiv)mod_version)assert_chunks_equal)	assert_allcloseassert_array_equalassert_equalassert_frame_equalassert_identicalmockraise_if_dask_computesrequires_pintrequires_scipy_or_netCDF4)create_tmp_filedaskz
dask.arrayzdask.dataframewin32c               
   C  sV   t jtjddddd} tjtdd  t	  | 
  W 5 Q R X W 5 Q R X d S )Nr            r   chunkszToo many computesmatch)da
from_arraynprandomRandomStaterandnpytestraisesRuntimeErrorr   compute)data r,   :/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_dask.pytest_raise_if_dask_computes)   s    r.   c                   @  s   e Zd Zdd ZdS )DaskTestCasec              	   C  s   t jjdd ||| W 5 Q R X t|trt|j D ]8\}}||jkr^t|jt	j
sptq8t|jtjs8tq8nt|trt|jtjst|j D ]8\}}||jkrt|jt	j
stqt|jtjstqn&t|trt|jtjstndstd S )NZsynchronousZ	schedulerF)r   configset
isinstancer   	variablesitemsZxindexesr+   r#   ndarrayAssertionErrorr!   Arrayr   coordsr   )selfexpectedactualtestkvr,   r,   r-   assertLazyAnd1   s     




zDaskTestCase.assertLazyAndN)__name__
__module____qualname__r@   r,   r,   r,   r-   r/   0   s   r/   c                   @  s  e Zd Zdd Zdd Zejdddd Zd	d
 Zdd Z	dd Z
dd Zejjeedk ddejdeddddgdfeddddgedddfeddddgdddgfeddddgedfeddddgddddgfeddddgeddkfeddddgededdddgdkfgdd  Zejjeedkd!dd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Z d4d5 Z!d6d7 Z"d8d9 Z#d:d; Z$d<d= Z%d>d? Z&d@dA Z'dBdC Z(dDdE Z)e*dFdG Z+dS )HTestVariablec                 C  s   |  ||t d S Nr@   r   r:   r;   r<   r,   r,   r-   assertLazyAndIdenticalI   s    z#TestVariable.assertLazyAndIdenticalc                 C  s   |  ||t d S rE   r@   r   rG   r,   r,   r-   assertLazyAndAllCloseL   s    z"TestVariable.assertLazyAndAllCloseTZautousec                 C  sH   t jddd| _tj| jdd| _td| j| _	td| j| _
d S )Nr   r   r   r   r   xy)r#   r$   r%   r&   valuesr!   r"   r+   r   	eager_varlazy_varr:   r,   r,   r-   setUpO   s    zTestVariable.setUpc                 C  s8   | j }| j|jkst| jj|jks(tt| j| d S rE   )rQ   r+   r7   r   r   rO   r:   r?   r,   r,   r-   test_basicsW   s    zTestVariable.test_basicsc                 C  s0   |  | j| j  |  | j| jjdd d S NTdeep)rH   rP   rQ   copyrR   r,   r,   r-   	test_copy]   s    zTestVariable.test_copyc                 C  s   i dfdddddfddidfddidffD ]V\}}| j |}|j|ksNt| | j| d	d
 t| j j|D }|j|ks,tq,d S )Nr   r   r   r      r^      )r^   r^   r^   rL   r_   rM   r`   r\   r`   c                 S  s   i | ]\}}||qS r,   r,   .0dimr   r,   r,   r-   
<dictcomp>m   s     z+TestVariable.test_chunk.<locals>.<dictcomp>)	rQ   chunkr   r7   rH   rP   zipdims
chunksizes)r:   r   r;   	rechunkedexpected_chunksizesr,   r,   r-   
test_chunka   s    

zTestVariable.test_chunkc                 C  sp   | j }| j}| |d |d  | |d d |d d  | |ddgdddgf |ddgdddgf  d S )Nr   ra   r   rP   rQ   rH   r:   ur?   r,   r,   r-   test_indexingr   s
    zTestVariable.test_indexingz	2021.04.1zRequires dask >= 2021.04.1reasonzexpected_data, indexc   r   r^   r   r   Nra   FrM   c                 C  s8   t dtddddg}t d|}d||< t|| d S )NrM   ra   r   r^   r   rt   )r   r!   arrayr   )r:   Zexpected_dataindexarrr;   r,   r,   r-   test_setitem_dask_arrayy   s    
z$TestVariable.test_setitem_dask_arrayzRequires dask < 2021.04.1c              	   C  s0   t jtdd | j}d|d d< W 5 Q R X d S )Nzstored in a dask arrayr   r   ra   )r'   r(   	TypeErrorrQ   rT   r,   r,   r-   test_setitem_dask_array_error   s    z*TestVariable.test_setitem_dask_array_errorc                 C  s,   | j }| j}| |d  |d   d S Nr   )rP   rQ   rH   squeezero   r,   r,   r-   test_squeeze   s    zTestVariable.test_squeezec                 C  sJ   | j }||stt|jtjs&t||s4tt|jtjsFtd S rE   )rQ   equalsr7   r3   r+   r!   r8   	identicalrT   r,   r,   r-   test_equals   s
    zTestVariable.test_equalsc                 C  s    | j }| j}| |j|j d S rE   )rP   rQ   rH   Tro   r,   r,   r-   test_transpose   s    zTestVariable.test_transposec                 C  sd   | j }| j}| |jdd|jdd | |jdd|jdd |jj|jddjjks`td S )Nr   rM   ra   )rP   rQ   rH   shiftr+   r   r7   ro   r,   r,   r-   
test_shift   s
    zTestVariable.test_shiftc                 C  sH   | j }| j}| |jdd|jdd |jj|jddjjksDtd S )Nr   r   ra   )rP   rQ   rH   Zrollr+   r   r7   ro   r,   r,   r-   	test_roll   s    zTestVariable.test_rollc                 C  sH   | j }| j}| | |  | t|t| | | |  d S rE   )rP   rQ   rH   absroundro   r,   r,   r-   test_unary_op   s
    zTestVariable.test_unary_opc                 C  sT   | j }| j}| d| d|  | || ||  | |d | |d |  d S )Nr   r   rn   ro   r,   r,   r-   test_binary_op   s
    zTestVariable.test_binary_opc                 C  s(   t d| jj}|t| jks$td S )Nz;            <xarray.Variable (x: 4, y: 6)>
            {!r})r   formatrQ   r+   reprr7   )r:   r;   r,   r,   r-   	test_repr   s    zTestVariable.test_reprc                 C  sl   t dgtd}|  |jr"ttdks.ttt|}tdksJtt	|| |jr^t|jrhtd S )NrM   ra   )
r   build_dask_arrayr*   
_in_memoryr7   kernel_call_countpickleloadsdumpsr   )r:   a1a2r,   r,   r-   test_pickle   s    


zTestVariable.test_picklec              	   C  s>  | j }| j}| | |  | | |  t  |jdd}W 5 Q R X | |jdd| t  |jdd}W 5 Q R X | |jdd| | |dk |dk  | |dk 	d|dk 	d t
jtdd |  W 5 Q R X t
jtdd ||j W 5 Q R X t  |tj W 5 Q R X d S )NrM   )re   ra   zonly works along an axisr   )rP   rQ   rJ   meanZstdr   ZargmaxZargminanyallr'   r(   NotImplementedErrorZmedianri   reducer	   r:   rp   r?   r<   r,   r,   r-   test_reduce   s$     zTestVariable.test_reducec                 C  s|   t ddt jdg}tj|dd}td|}td|}| ||| | tdtd|d | |	 |	  d S )	Nr   ra   r^   r   r   rM   r   r   )
r#   rv   nanr!   r"   r   rH   Zfillnarangecount)r:   rO   r+   rP   rQ   r,   r,   r-   test_missing_values   s    

z TestVariable.test_missing_valuesc              	   C  s   | j }| j}| |t|d d |dd  gd | |d d t|d |d gd | |d d t|d |d gd | |d d t|d |d gd | |d d tj|ddg |dg gdddgdggd d S )Nr   rM   r   ra   r^   )Z	positions)rP   rQ   rH   r   concatro   r,   r,   r-   test_concat   s    ((((
 *zTestVariable.test_concatc              
   C  s   | j }z|  W n2 tk
rD } zdt|ks4tW 5 d }~X Y nX z|d   W n2 tk
r } zdt|ksxtW 5 d }~X Y nX d S )Nr   r   )rQ   Zargsortr   strr7   item)r:   r?   errr,   r,   r-   test_missing_methods  s    "z!TestVariable.test_missing_methodsc                 C  s(   | j }| j}| t|t| d S rE   )rP   rQ   rJ   r#   sinro   r,   r,   r-   test_univariate_ufunc  s    z"TestVariable.test_univariate_ufuncc                 C  sH   | j }| j}| t|dt|d | t|dtd| d S r|   )rP   rQ   rJ   r#   maximumro   r,   r,   r-   test_bivariate_ufunc  s    z!TestVariable.test_bivariate_ufuncc                 C  sT   | j }| j}t|stt|d \}t|r8t|d j|jk sPtd S Nra   )rP   rQ   r   is_dask_collectionr7   r*   r+   r   r:   rp   r?   v2r,   r,   r-   test_compute  s    zTestVariable.test_computec                 C  s   | j }| jd }t|\}||k	s(tt| t| k sDt| | ksXtt|sftt|stt| 	|d | | 	|d | d S r   )
rP   rQ   r   persistr7   len__dask_graph____dask_keys__r   rJ   r   r,   r,   r-   test_persist"  s    
zTestVariable.test_persistc                 C  sx   dd l }| }|| jd}td|}tj|}|d|j	  }tj|tj|ks`t
tj||kstt
d S )Nr   meterrL      )pintUnitRegistryQuantityr+   xrr   r   basetokenizer   r7   )r:   r   unit_registryqvariabletokenpost_opr,   r,   r-   test_tokenize_duck_dask_array0  s    z*TestVariable.test_tokenize_duck_dask_array),rA   rB   rC   rH   rJ   r'   fixturerS   rU   rZ   rm   rq   markskipifdask_versionr   parametrizer!   rv   slicer#   aranger   ry   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r-   rD   H   s`   


 ,
 



rD   c                   @  s  e Zd Zdd Zdd Zdd Zejdd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d'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#e$dAdB Z%dCS )DTestDataArrayAndDatasetc                 C  s   |  ||t d S rE   rF   rG   r,   r,   r-   rH   B  s    z.TestDataArrayAndDataset.assertLazyAndIdenticalc                 C  s   |  ||t d S rE   rI   rG   r,   r,   r-   rJ   E  s    z-TestDataArrayAndDataset.assertLazyAndAllClosec                 C  s   |  ||t d S rE   )r@   r   rG   r,   r,   r-   assertLazyAndEqualH  s    z*TestDataArrayAndDataset.assertLazyAndEqualTrK   c                 C  s^   t jdd| _tj| jdd| _t| jdtdiddd| _	t| jdtdiddd| _
d S )	Nr   r   r   r   rM   rL   foo)r9   ri   name)r#   r$   r&   rO   r!   r"   r+   r   r   eager_array
lazy_arrayrR   r,   r,   r-   rS   K  s     
   
  zTestDataArrayAndDataset.setUpc                 C  s   i dfdddddfddidfddidffD ]\}}| j |}|j|ksNt| | j| d	d
 t| j j|D }|j|kst| j 	 }| j	 }dd
 t|j|D }||}|j|kst| || |j|ks,tq,d S )Nr[   r]   r^   rL   r_   rM   rb   r`   c                 S  s   i | ]\}}||qS r,   r,   rc   r,   r,   r-   rf   c  s     z6TestDataArrayAndDataset.test_chunk.<locals>.<dictcomp>c                 S  s   i | ]\}}||qS r,   r,   rc   r,   r,   r-   rf   k  s     )
r   rg   r   r7   rH   r   rh   ri   rj   
to_dataset)r:   r   r;   rk   rl   Zlazy_datasetZeager_datasetr,   r,   r-   rm   V  s,    





z"TestDataArrayAndDataset.test_chunkc                 C  s:   | j ddiddi}|jdks(t| | j| d S )NrM   r   rN   r[   )r   rg   r   r7   rH   r   r:   chunkedr,   r,   r-   test_rechunkv  s    z$TestDataArrayAndDataset.test_rechunkc                 C  s    | j  }|jjdstd S )Nzxarray-<this-array>)r   rg   r+   r   
startswithr7   r   r,   r,   r-   test_new_chunk{  s    
z&TestDataArrayAndDataset.test_new_chunkc                 C  s,   t dd| jfi}t|jjjtjs(td S )Nr   rL   )r   r+   r3   r   r   r!   r8   r7   )r:   Zlazy_dsr,   r,   r-   test_lazy_dataset  s    z)TestDataArrayAndDataset.test_lazy_datasetc                 C  s   | j }| j}| || | | |  | |j|j | | |  | d| d|  t|d d |dd  gd}| || d S )Nra   r   rM   )r   r   rJ   r   r   r   r   r   r,   r,   r-   test_lazy_array  s     z'TestDataArrayAndDataset.test_lazy_arrayc                 C  sT   | j }| j}t|stt|d \}t|r8t|d j|jk sPtd S r   )r   r   r   r   r7   r*   r+   r   r   r,   r,   r-   r     s    z$TestDataArrayAndDataset.test_computec                 C  s   | j }| jd }t|\}||k	s(tt| t| k sDt| | ksXtt|sftt|stt| 	|d | | 	|d | d S r   )
r   r   r   r   r7   r   r   r   r   rJ   r   r,   r,   r-   r     s    
z$TestDataArrayAndDataset.test_persistc                 C  s  t d}t d}t d}t d}t d}t d}tdd|fid	d|fid
}tdd|fid	d|fid
}tdd|fid	d|fid
}	tdksttj|||	gdddd}
tdkstt|
d jtj	stt|
d	 jtj	sttj|||	gdddd}
tdkstt|
d jt
jjs tt|
d	 jt
jjs:ttj|||	gddgd	gd}
tdksdtt|
d jt
jjs~tt|
d	 jt
jjsttj|||	gdg g d}
tdkstt|
d jtj	stt|
d	 jtj	sttj|||	gddddd}
tdkstt|
d jtj	s.tt|
d	 jtj	sFttdddgfid	ddgfid
}tj||||	gdddd}
tdkstt|
d jt
jjstt|
d	 jt
jjst|
  tdkst|d j|kst|d	 j|ks t|d j|kst|d	 j|ks(t|	d j|ks<t|	d	 j|ksPttj|||gdddd}
tdksvtt|
d jt
jjstt|
d	 jt
jjsttj|||gdg g dd}
tdkstt|
d jt
jjstt|
d	 jt
jjsttj|| |	gddddd}
tdks2ttj|| |	gddddd}
tdks^t|d j|ksrt|d	 j|kst|d j|kst|d	 j|kst|	d j|kst|	d	 j|kstd S )Nd1c1d2c2d3c3drM   c	data_varsr9   r   nZ	different)re   r   r9   r   r      r   )re   r   r9   compat   g       @            )r   r   r   r7   r   r   r3   r+   r#   r6   r   rv   r8   r*   )r:   r   r   r   r   r   r   ds1ds2Zds3outZds4r,   r,   r-   test_concat_loads_variables  s        
          	z3TestDataArrayAndDataset.test_concat_loads_variablesc              	   C  sN   | j }| j}|dd}t  |dd}W 5 Q R X | || d S )NrM   .)r   r   groupbyr   r   rJ   r:   rp   r?   r;   r<   r,   r,   r-   test_groupby$  s    z$TestDataArrayAndDataset.test_groupbyc              	   C  sN   | j }| j}|jdd }t  |jdd }W 5 Q R X | || d S )Nr   r   )r   r   Zrollingr   r   rJ   r   r,   r,   r-   test_rolling-  s    z$TestDataArrayAndDataset.test_rollingc              	   C  s   | j }| j}|j|jfD ]}dddddgf|d< qtjtdd |d  W 5 Q R X |d }t  |djdd}W 5 Q R X | 	|| d S )	NrM   ababr   r   F)Zskipna)
r   r   r9   r'   r(   r   r   firstr   rJ   )r:   rp   r?   r9   r;   r<   r,   r,   r-   test_groupby_first6  s    z*TestDataArrayAndDataset.test_groupby_firstc                 C  s   | j jtdd}| jjtdd}ddddgiddddd	dgid
ddgdd
dgdfD ](}|jf |}|jf |}| || qXd S )Nr   )rN   rM   r   r^   r   ra   d   e   g      @g      @rL   )r   assign_coordsr   r   reindexrJ   )r:   rp   r?   kwargsr;   r<   r,   r,   r-   test_reindexC  s    z$TestDataArrayAndDataset.test_reindexc                 C  s8   | j }| j}|j|d d}| ||dd d S NrM   r   )r   r   r   r   r   to_array)r:   rp   r?   r;   r,   r,   r-   test_to_dataset_roundtripP  s    z1TestDataArrayAndDataset.test_to_dataset_roundtripc                 C  s,   dd }|| j }|| j}| || d S )Nc                 S  s   t | | dg S )Nbar)r   mergerenamer  )rv   r,   r,   r-   duplicate_and_mergeX  s    z?TestDataArrayAndDataset.test_merge.<locals>.duplicate_and_merge)r   r   r   )r:   r  r;   r<   r,   r,   r-   
test_mergeW  s    

z"TestDataArrayAndDataset.test_mergec                 C  s(   | j }| j}| t|t| d S rE   )r   r   rJ   r#   r   ro   r,   r,   r-   test_ufuncs_  s    z#TestDataArrayAndDataset.test_ufuncsc                 C  s~   t d}|dk}t|d}t|d}t||}| |t|| | |t|| | |t|| d S )N
   r^   r   )r#   r   r!   r"   r   wherer   )r:   r   r   rM   rN   r;   r,   r,   r-   test_where_dispatchingd  s    
z.TestDataArrayAndDataset.test_where_dispatchingc                   sT   t dtdfdtdfd }dg  fdd}|j|d  d dksPtd S )	NrM   r   r   r  r   c                    s    d  d7  < t j| |S )Nr   ra   )r   getargsr   r   r,   r-   counting_gets  s    zGTestDataArrayAndDataset.test_simultaneous_compute.<locals>.counting_getr0   ra   )r   r   rg   loadr7   )r:   dsr  r,   r  r-   test_simultaneous_computen  s
    "z1TestDataArrayAndDataset.test_simultaneous_computec                 C  s   t jjddd}t|dd}|jdd}tjjt	dt	d	gd
dgd}t|
ddd|iddgd}|jj|jjks~t| || d S )N)r   r^   r   )ra   r^   r   )sizer   )wrM   rN   ri   rL   )zr^   r   rM   rN   namesr   ru   r  r  )r!   r$   normalr   stackpd
MultiIndexZfrom_productr#   r   reshaper+   r   r7   r   )r:   r+   rx   Zstackedr  r;   r,   r,   r-   
test_stack{  s    $z"TestDataArrayAndDataset.test_stackc                 C  s4   | j | j d }| j| jd }| || d S r|   )r   dotr   rJ   )r:   eagerZlazyr,   r,   r-   test_dot  s    z TestDataArrayAndDataset.test_dotc                 C  sV   t d}t d}t|dgdd|fid}td|}|t|ksFttdksRtd S )Nr+   coordrM   rN   ri   r9   z            <xarray.DataArray 'data' (x: 1)>
            {!r}
            Coordinates:
                y        (x) int64 dask.array<chunksize=(1,), meta=np.ndarray>
            Dimensions without coordinates: xr   )r   r   r   r   r   r7   r   )r:   r+   nonindex_coordr   r;   r,   r,   r-   test_dataarray_repr  s    
z+TestDataArrayAndDataset.test_dataarray_reprc                 C  sT   t d}t d}tdd|fidd|fid}td}|t|ksDttdksPtd S )	Nr+   r%  r   rM   rN   r   a=              <xarray.Dataset>
            Dimensions:  (x: 1)
            Coordinates:
                y        (x) int64 dask.array<chunksize=(1,), meta=np.ndarray>
            Dimensions without coordinates: x
            Data variables:
                a        (x) int64 dask.array<chunksize=(1,), meta=np.ndarray>r   )r   r   r   r   r7   r   )r:   r+   r'  r  r;   r,   r,   r-   test_dataset_repr  s    
z)TestDataArrayAndDataset.test_dataset_reprc                 C  s   t d}t d}t|dgdd|fid}|  |jr:t|jd jrJttdksVttt	|}tdksrtt
|| |jrt|jrt|jd jrt|jd jrtd S )Nr+   r%  rM   rN   r&  r   )r   r   r*   r   r7   r9   r   r   r   r   r   )r:   r+   r'  r   r   r,   r,   r-   test_dataarray_pickle  s    



z-TestDataArrayAndDataset.test_dataarray_picklec                 C  s   t d}t d}tdd|fidd|fid}|  |d jrBt|d jrPttdks\ttt|}tdksxtt	|| |d jrt|d jrt|d jrt|d jrtd S )Nr+   r%  r   rM   rN   r   r   )
r   r   r*   r   r7   r   r   r   r   r   )r:   r+   r'  r   r   r,   r,   r-   test_dataset_pickle  s    
z+TestDataArrayAndDataset.test_dataset_picklec              	   C  sV   t d}t d}t|dgdd|fid}tt t|d W 5 Q R X tdksRtd S )Nr+   r%  rM   rN   r&  NOTEXISTr   )r   r   r   AttributeErrorgetattrr   r7   )r:   r+   r'  r   r,   r,   r-   test_dataarray_getattr  s    
z.TestDataArrayAndDataset.test_dataarray_getattrc              	   C  sZ   t d}t d}tdd|fidd|fid}tt t|d W 5 Q R X tdksVtd S )	Nr+   r%  r   rM   rN   r   r,  r   )r   r   r   r-  r.  r   r7   )r:   r+   r'  r  r,   r,   r-   test_dataset_getattr  s    
z,TestDataArrayAndDataset.test_dataset_getattrc                 C  s>   t ddg }|jrt|j ddgks0t|jr:td S )Nra   r   )r   rg   r   r7   rO   tolistr:   r   r,   r,   r-   test_values  s    
z#TestDataArrayAndDataset.test_valuesc                 C  s,   t | jjdtdidd}| | j| d S )NrM   r   r   )r9   r   )r   r   r   r   rH   r2  r,   r,   r-   test_from_dask_variable  s    z/TestDataArrayAndDataset.test_from_dask_variablec                 C  s   dd l }| }|| j|j}tj|dtdiddd}tj	
|}|d|j  }tj	
|tj	
|kspttj	
||kstd S )Nr   rM   r   rL   r   )r+   r9   ri   r   r   )r   r   r   r+   r   r   r   r   r   r   r   r7   )r:   r   r   r   Z
data_arrayr   r   r,   r,   r-   r     s     
  z5TestDataArrayAndDataset.test_tokenize_duck_dask_arrayN)&rA   rB   rC   rH   rJ   r   r'   r   rS   rm   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r!  r$  r(  r)  r*  r+  r/  r0  r3  r4  r   r   r,   r,   r,   r-   r   A  sD   


 
|		
	
r   c                   @  sR   e Zd Zdd Zdd Zejjeddd Z	dd	 Z
d
d Zdd Zdd ZdS )TestToDaskDataFramec                 C  s   t jd}t jddd}td}tdtj|ddfd|fd|fd}tj	||d	tj
|dd
d}tj|dd}|jdd}t|tj	stt| |  tj|jdddd}|jdd}t|tj	stt| |  d S )Nr
  uint8dtype
abcdefghijtr   r   r   r   r:  r   r   r   rw   	chunksizeTZ	set_indexFdrop)r#   r$   r&   r   listr   r!   r"   r  	DataFrameIndexddfrom_pandasto_dask_dataframer3   r7   r   r*   reset_index)r:   rM   rN   r:  r  expected_pdr;   r<   r,   r,   r-   test_to_dask_dataframe  s     z*TestToDaskDataFrame.test_to_dask_dataframec                 C  s   t jdd}tddtj|ddfi}dt dd	gt jf|d< d
tdf|d
< t	j
jdddd	d	d	gddddddggdd
gd}t	jd|di|d}|jdd}|jdd}t|tjstt||  d S )Nr   r^   r  rL   ra   r   r   rM   r   ra   rN   abcr   r   r   r  ru   r>  FrB  rA  )r#   r$   r&   r   r!   r"   rv   int64rD  r  r  Zfrom_arraysrE  r   rJ  rI  r3   rG  r7   r   r*   )r:   r  r  Z	exp_indexr;   r<   r,   r,   r-   test_to_dask_dataframe_2D#  s     z-TestToDaskDataFrame.test_to_dask_dataframe_2D)r(   c                 C  s   t jtjdddd}tdd|fi}dtdd	gtjf|d< d
tdf|d
< |	 
 }|jdd}t|tjsztt||	  d S )Nr   r^   rM  r   r  rL   rM   r   ra   rN   rN  TrA  )r!   r"   r#   r$   r&   r   rv   rO  rD  r*   to_dataframerI  r3   rG  rE  r7   r   )r:   r  r  r;   r<   r,   r,   r-   #test_to_dask_dataframe_2D_set_index7  s    z7TestToDaskDataFrame.test_to_dask_dataframe_2D_set_indexc                 C  s   t jd}t dd }tdtj|ddfdtj|ddfd}tjd|itj	|ddd	}t
j|dd
}|jdd}t|t
jstt| |  d S )Nr
  r   r:  r   r   )r   r:  r   r=  r>  r?  TrA  )r#   r$   r&   r   r   r!   r"   r  rE  rF  rG  rH  rI  r3   r7   r   r*   )r:   rM   r:  r  rK  r;   r<   r,   r,   r-   "test_to_dask_dataframe_coordinatesD  s    z6TestToDaskDataFrame.test_to_dask_dataframe_coordinatesc                 C  s   t jd}t jddd}td}td|fd|fd|fd}tj||dtj|ddd	}|j	d
d}t
|tjsxtt||  d S )Nr
  r6  r7  r9  r:  r;  r<  r=  r>  TrA  )r#   r$   r&   r   rD  r   r  rE  rF  rI  r3   rG  r7   r   r*   )r:   rM   rN   r:  r  r;   r<   r,   r,   r-   $test_to_dask_dataframe_not_daskarrayV  s    z8TestToDaskDataFrame.test_to_dask_dataframe_not_daskarrayc                 C  s   t jtjddd}tdd|fi}|   }|	 }t
|tjsNtt||  |  }|j	dd}t
|tjstt||  d S )Nr
  r   r   rM   Zdim_0TrA  )r!   r"   r#   r$   r&   r   r*   rQ  rJ  rI  r3   rG  rE  r7   r   )r:   rM   r  r;   r<   r,   r,   r-   $test_to_dask_dataframe_no_coordinated  s    z8TestToDaskDataFrame.test_to_dask_dataframe_no_coordinatec              	   C  s   t jddgddggt jd}tdd|fid}|d   }|jdd	gd
}t|t	j
sbtt||  |d j  }|jd	dgd
}t|t	j
stt||  tjtdd |jdgd
 W 5 Q R X d S )Nra   r   r^   r   r7  r  rL   rM   rN   )Z	dim_orderz$does not match the set of dimensionsr   )r#   rv   rO  r   rg   Z	to_seriesrJ  rI  r3   rG  rE  r7   r   r*   r   r'   r(   
ValueError)r:   rO   r  r;   r<   r,   r,   r-    test_to_dask_dataframe_dim_orderr  s    z4TestToDaskDataFrame.test_to_dask_dataframe_dim_orderN)rA   rB   rC   rL  rP  r'   r   Zxfailr   rR  rS  rT  rU  rW  r,   r,   r,   r-   r5    s   
r5  methodr  r*   c              	   C  s`   t dtjtddd}tjjtjdtdd}t	|| dd W 5 Q R X |j
dd d S )	NrN   r^   r   r   r*   )Zreturn_valuer  r   )r   r!   r"   r#   r   r   patchobjectr8   r.  assert_called_with)rX  rM   Zmock_computer,   r,   r-   test_dask_kwargs_variable  s      r]  r   c              	   C  sf   t jtddd}t|}| dkr*d}nd}t|}t|| dd W 5 Q R X |j|dd d S )	Nr^   r   r   r  r*   dask.array.computedask.persistr  rY  )	r!   r"   r#   r   r   r   rZ  r.  r\  rX  r+   rM   Z	dask_funcZ	mock_funcr,   r,   r-   test_dask_kwargs_dataarray  s    rb  c              	   C  sn   t jtddd}tdd|fi}| dkr2d}nd}t|}t|| d	d
 W 5 Q R X |j|d	d
 d S )Nr^   r   r   rM   rN   r^  r_  r`  r  rY  )	r!   r"   r#   r   r   r   rZ  r.  r\  ra  r,   r,   r-   test_dask_kwargs_dataset  s    rc  c                 C  s   t d7 a tjdtjdS )zdDask kernel to test pickling/unpickling and __repr__.
    Must be global to make it pickleable.
    ra   r7  )r   r#   onesrO  r=  r,   r,   r-   kernel  s    re  c                 C  s&   da tjj| dft| fi| dtjdS )Nr   ))ra   )r   r   r   r8  )r   r   rv   r8   re  r#   rO  r=  r,   r,   r-   r     s       r   c                 C  s   |   S rE   r   r   r,   r,   r-   <lambda>      rg  c                 C  s   t | d S r|   r   r   r   r,   r,   r-   rg    rh  c                 C  sp   t dtdfdtdfd }|d }t|jjj}| |}t|jjjdksVtt|jjj|ksltd S )NrM   r   r  ra   )r   r   rg   r   r   r+   r   r7   )r   r  r   r   r,   r,   r-   test_persist_Dataset  s    "rj  c                 C  s   |   S rE   rf  r   r,   r,   r-   rg    rh  c                 C  s   t | d S r|   ri  r   r,   r,   r-   rg    rh  c                 C  sb   t jddd}t|}|d }t|jj}| |}t|jj|ksFtt|jj|jjks^td S )Nr
  r   r   ra   )r!   r   r   r   r+   r   r7   Znpartitions)r   rM   rN   r  r   zzr,   r,   r-   test_persist_DataArray  s    rm  c                  C  s   dd l } tdtjddd}tdtjdddd }tjjdd	dd
 }tj|ddgd}||jd< ||jd< t|	 | 
|	 |	 |	 kstt|\}t|rttdd |j D std S )Nr   rM      )r   r   rN   r   )rn  rn  )r   r   ra   r  xxyyc                 s  s   | ]}t |jjtjV  qd S rE   )r3   Z	_variabler+   r#   r6   )rd   r?   r,   r,   r-   	<genexpr>  s     z2test_dataarray_with_dask_coords.<locals>.<genexpr>)toolzr   r   r!   r   r$   r   r9   dictr   r  r7   r   r*   r   r   rO   )rr  rM   rN   r+   rv   Zarray2r,   r,   r-   test_dataarray_with_dask_coords  s    

  
rt  c               
   C  s   t dtdfdtdfdddi} tjjtjjtjjd fD ]<}tj	j
|d$ |   | j  | jj  W 5 Q R X q@d S )NrM   r   r  r   r0   )r   r   rg   r   Zthreadedr  multiprocessinglocalZget_syncr1   r2   r*   r   r   )r  r  r,   r,   r-   test_basic_compute  s    (
rw  c                  C  sn   t dtdfdtdfd } t| }t| j|  jsJt	t|j
 j|  jsjt	d S )NrM   r   r  )r   r   rg   r   Zdelayedr2   r   Zdependencies
issupersetr7   r   )r  rM   r,   r,   r-   !test_dask_layers_and_dependencies  s    "
ry  c                  C  s   t jtdddgtdtddddd	d
dd} d| jjd< d| jd< d| jd< | jd | jd< | j| j	 d
dd| jd< | S )Nr
     rM   rN   r
  r   x   rL   r   )ri   r9   r   r   r   	long_namer=         ?r   r   ndcoordcxy)
r   r   r#   rd  r   rg   rM   attrsr9   rN   )r!   r,   r,   r-   make_da  s    

r  c                  C  s   t  } t | d< | jd | d< | jd | d< | ddd} d	d
d
d
d
gf| d< dd
ddg| d	< | j| j | d< d| jd< dt	t
| jf| jd< d| jd jd< d| jd< | d | j | jd< d| jjd< d| jjd< | S )Nr   2   r   r{  r   r   r   rL   r  ra   r   r   r   r^   er~  r   rM   ZcxZtest2r=   ro  r}  rN   )r   r   r  r   rM   rg   rN   r9   r#   r   r   r  map_dsr,   r,   r-   make_ds  s     


r  c                   C  s   t  S rE   )r  r,   r,   r,   r-   map_da-  s    r  c                   C  s   t  S rE   )r  r,   r,   r,   r-   r  2  s    r  c              	   C  s0  |   }|jddi|d< tjtdd |j W 5 Q R X ddd}t  | j}W 5 Q R X ||ksnt	t
| |  t|j|d\}}|jd	kst	|j|kst	|d }t|d
di|jddi\}}|jd	kst	|jdkst	tjtdd t||jtdd W 5 Q R X d S )NrN   r
  r  inconsistent chunksr   r   r   r   r   r   r   r   rL   )r  r  rM   ru   )r  r  z$Dimension 'x' size mismatch: 10 != 2r   r   )rY   r  rg   r'   r(   rV  r   r   unify_chunksr7   r   r   	drop_varsr   iselr   )r  ds_copyZexpected_chunksZactual_chunksZout_aZout_br!   r,   r,   r-   test_unify_chunks7  s$    
&r  obj	transformc                 C  s   |   S rE   )r*   r   r,   r,   r-   rg  U  rh  c                 C  s   |   S rE   )r  r   r,   r,   r-   rg  U  rh  c                 C  s*   || } |   }t| |o$| |   k	 d S rE   )r  r   )r  r  Zunifiedr,   r,   r-   test_unify_chunks_shallow_copyS  s    r  c                 C  s:   |  dj}| jd}tj|| |j|jks6td S )Nauto)rg   r+   Zrechunkr#   testingr   r   r7   )r  r<   r;   r,   r,   r-   test_auto_chunk_da]  s    r  c              	   C  sf  dd }t jtdd t||   W 5 Q R X dd }t jtdd t||  W 5 Q R X t jtdd tjtj| d	d
 W 5 Q R X t jtdd tjtj| d	gdgd W 5 Q R X dd }t jt	dd t||  W 5 Q R X |
 }|jdd	i|d< t jtdd t|| W 5 Q R X t jtdd  tj|| t|  dd W 5 Q R X d S )Nc                 S  s$   | | j  d| j  d dd df S )Nr   ra   rL   Zdarrayr,   r,   r-   bad_funcf  s    z'test_map_blocks_error.<locals>.bad_func"Received dimension 'x' of length 1r   c                 S  s   | | j  d| j  jS Nr   )rM   rN   rO   r  r,   r,   r-   returns_numpyl  s    z,test_map_blocks_error.<locals>.returns_numpyz(Function must return an xarray DataArrayzargs must ber
  r  zkwargs must ber{  r  c                 S  s   t dd S )Nzcouldn't do anything.)rV  r  r,   r,   r-   really_bad_funcx  s    z.test_map_blocks_error.<locals>.really_bad_funczCannot inferrN   r  r  zCannot pass dask collectionsr   r   )r'   r(   rV  r   
map_blocksr*   rz   operatoradd	ExceptionrY   r  rg   rs  )r  r  r  r  r  r  r,   r,   r-   test_map_blocks_errore  s&    "r  c              	   C  sJ   dd }t   t|| }W 5 Q R X || }t| | t|| d S )Nc                 S  s   | | j  d| j  }|S r  rL   r  resultr,   r,   r-   func  s    ztest_map_blocks.<locals>.funcr   r   r  r   rg   r   r  r  r<   r;   r,   r,   r-   test_map_blocks  s    r  c              	   C  sV   dd }t   tj|| d| gd}W 5 Q R X || d| }t| | t|| d S )Nc                 S  s   | | j  d| j  }|S r  rL   )Zobj1non_xarray_inputobj2r  r,   r,   r-   r    s    z/test_map_blocks_mixed_type_inputs.<locals>.funcr  r  r  r  r,   r,   r-   !test_map_blocks_mixed_type_inputs  s    r  c              	   C  sH   | d }t   ttj| dg}W 5 Q R X t| | t|| d S )Nr
  )r   r   r  r  r  r   rg   r   r  r;   r<   r,   r,   r-   $test_map_blocks_convert_args_to_list  s
    r  c               	   C  s  t jtdddgtdtddddd	d} d
d }| d }t  t j|| |gd}W 5 Q R X t j	| | | | d j
ddd}t  t jtj| |gd}W 5 Q R X t j	| | | | d j
dddddi}t  t jtj| |gd}W 5 Q R X t j	| | | tjtdd$ t jtj| | ddigd W 5 Q R X tjtdd( t jtj| | jtddgd W 5 Q R X | ddi} | d }t  t jdd | |gd}W 5 Q R X t j	| | d| | ddi} | d }t $ t jdd | |g| dd}W 5 Q R X t j	| | d| tjtdd( t jdd | |g| d d W 5 Q R X d S )Nrz  rM   rN   r
  r{  rL   r&  r   r   c                 S  s   | j |j kst| | S rE   )shaper7   )da1da2r,   r,   r-   sumda  s    z(test_map_blocks_dask_args.<locals>.sumdara   r  T)rM   rC  r>   zChunk sizes along dimension 'x'r   z"cannot align.*index.*are not equalr   ru   c                 S  s   | |  dS NrM   sumr<  r,   r,   r-   rg    rh  z+test_map_blocks_dask_args.<locals>.<lambda>c                 S  s   | |  dS r  r  r<  r,   r,   r-   rg    rh  )r  templatez$Provided template has no dask arraysc                 S  s   | |  dS r  r  r<  r,   r,   r-   rg    rh  )r   r   r#   rd  r   rg   r   r  r  r   r  r  r  r  r'   r(   rV  r   r  r*   )r  r  r  mappedr,   r,   r-   test_map_blocks_dask_args  s\    (,    r  c              	   C  sh   dd }|| }t   t|| }W 5 Q R X t|| t   tj|| | d}W 5 Q R X t||  d S )Nc                 S  s&   | j dd} d| jd< d| jjd< | S )NTrW   newnew2)rY   r  r  r  r,   r,   r-   	add_attrs  s    
z,test_map_blocks_add_attrs.<locals>.add_attrsr  r   r   r  r   )r  r  r;   r<   r,   r,   r-   test_map_blocks_add_attrs  s    
r  c              	   C  s<   dd }|| }t   t|| }W 5 Q R X t|| d S )Nc                 S  s   | j dd} d| _| S )NTrW   r  )rY   r   r  r,   r,   r-   change_name  s    z0test_map_blocks_change_name.<locals>.change_namer  )r  r  r;   r<   r,   r,   r-   test_map_blocks_change_name  s
    r  c              	   C  sX   t j| tjd}t   t jt j| ttjdd}W 5 Q R X t| | t	|| d S )N)Z
fill_valuer  )
r   Z	full_liker#   r   r   r  rs  r   rg   r   r  r,   r,   r-   test_map_blocks_kwargs	  s
    $r  c              	   C  s4   t   tdd | }W 5 Q R X t||   d S )Nc                 S  s   |   S rE   )r  r   r,   r,   r-   rg    rh  z*test_map_blocks_to_array.<locals>.<lambda>)r   r   r  r   r  )r  r<   r,   r,   r-   test_map_blocks_to_array  s    r  r  c                 C  s   | S rE   r,   r   r,   r,   r-   rg    rh  c                 C  s   |   S rE   )r   r   r,   r,   r-   rg    rh  c                 C  s
   |  dS r  r  r   r,   r,   r-   rg    rh  c                 C  s   | j dddgdS Nra   r   r^   r>   Zexpand_dimsr   r,   r,   r-   rg     rh  c                 C  s   | j ddS Nr^   r  r  r   r,   r,   r-   rg  !  rh  c                 C  s   | j d| jjd fdS )NrN   r   )Z	new_coord)r   rN   r+   r   r,   r,   r-   rg  "  rh  c                 C  s   |  tjS rE   )astyper#   Zint32r   r,   r,   r-   rg  #  rh  c                 C  s   | j S rE   r   r   r,   r,   r-   rg  $  rh  c              	   C  s0   t   t| |}W 5 Q R X t|| | d S rE   r  )r  r  r<   r,   r,   r-   "test_map_blocks_da_transformations  s    r  c                 C  s   | S rE   r,   r   r,   r,   r-   rg  1  rh  c                 C  s
   |  dS Nr  r  r   r,   r,   r-   rg  2  rh  c                 C  s
   |  dS )Nr   r  r   r,   r,   r-   rg  3  rh  c                 C  s
   |  dS r  r  r   r,   r,   r-   rg  4  rh  c                 C  s   | j dddgdS r  r  r   r,   r,   r-   rg  5  rh  c                 C  s   | j ddS r  r  r   r,   r,   r-   rg  6  rh  c                 C  s   |  dddS )NZnew1r  r<  r  r   r,   r,   r-   rg  7  rh  c                 C  s   | j S rE   r   r   r,   r,   r-   rg  8  rh  c              	   C  s0   t   t| |}W 5 Q R X t|| | d S rE   r  )r  r  r<   r,   r,   r-   "test_map_blocks_ds_transformations.  s    r  c              	   C  st   dd }| j dddgd}t  tj|| |d}W 5 Q R X t|| t  | j||d}W 5 Q R X t|| d S )Nc                 S  s   | j dgdS Nra   r   r  r   r,   r,   r-   rg  D  rh  z5test_map_blocks_da_ds_with_template.<locals>.<lambda>ra   r   	   r   r  )r  r   r   r  r   )r  r  r  r<   r,   r,   r-   #test_map_blocks_da_ds_with_templateB  s    
r  c               	   C  s   t  } dd }|  jdddgd}t  tj|| |d}W 5 Q R X t|| |  }dd }| jdddgd}t  tj|||d}W 5 Q R X t|| d S )	Nc                 S  s   |   jdgdS r  )r   r  r   r,   r,   r-   rg  Q  rh  z9test_map_blocks_template_convert_object.<locals>.<lambda>ra   r   r  r   r  c                 S  s   |   jdgdS r  )r  r  r   r,   r,   r-   rg  X  rh  )r  r   r  r   r   r  r   r  )r!   r  r  r<   r  r,   r,   r-   'test_map_blocks_template_convert_objectO  s    
r  c              	   C  s|  t jtdd tjdd | | d  W 5 Q R X t jtdd tjdd | | d  W 5 Q R X t jtdd tjd	d | | d  W 5 Q R X t jtd
d tjdd | | d  W 5 Q R X t jtdd  tjdd | | fd  W 5 Q R X t jtdd( tjdd | | jdgdd  W 5 Q R X t jtdd, tjdd | | jdddgdd  W 5 Q R X d S )Nzunexpected coordinate variablesr   c                 S  s   | j ddS )Nr
  r  r   r   r,   r,   r-   rg  b  rh  z5test_map_blocks_errors_bad_template.<locals>.<lambda>r  z%does not contain coordinate variablesc                 S  s
   |  dS r  r  r   r,   r,   r-   rg  d  rh  zDimensions {'x'} missingc                 S  s   | j ddS r  r  r   r,   r,   r-   rg  f  rh  r  c                 S  s   | j dgdS r  r  r   r,   r,   r-   rg  h  rh  zmust be a DataArrayc                 S  s   | j dgdS r  r  r   r,   r,   r-   rg  j  rh  z"map_blocks requires that one blockc                 S  s   | j dgdjddS )Nra   r   r
  r  r   r   r,   r,   r-   rg  m  rh  ra   r   zExpected index 'x' to bec                 S  s   | j dgdjdgdS )Nra   r   r|  r  r  r,   r,   r-   rg  q  rh  r   r  )r'   r(   rV  r   r  r*   rz   r  r  r,   r,   r-   #test_map_blocks_errors_bad_template_  s,    """"$  r  c              	   C  s6   t jtdd tjdd | | d  W 5 Q R X d S )Nz!unexpected data variables {'xyz'}r   c                 S  s   | j ddS )Nra   )Zxyz)assignr   r,   r,   r-   rg  y  rh  z7test_map_blocks_errors_bad_template_2.<locals>.<lambda>r  )r'   r(   rV  r   r  r*   r  r,   r,   r-   %test_map_blocks_errors_bad_template_2w  s    r  c              	   C  s>   dd }t   t|| }| |}W 5 Q R X t|| d S )Nc                 S  s   | | j  d| j  }|S r  rL   r  r,   r,   r-   r  ~  s    z+test_map_blocks_object_method.<locals>.funcr  )r  r  r;   r<   r,   r,   r-   test_map_blocks_object_method|  s
    r  c                  C  sP   t dtjjdddfdtjjdddfd} | dd }t j||  d S )	Nr  r
  rk  r   )r   )rM   r  c                 S  s   | S rE   r,   r   r,   r,   r-   rg    rh  z,test_map_blocks_hlg_layers.<locals>.<lambda>)r   r   r   rv   rd  r  r  r   )r  r  r,   r,   r-   test_map_blocks_hlg_layers  s    r  c                 C  s   ddl m} || }| jD ]2}||jks,t|j| jd|j| j kstq| jD ]2}||jksft|j| jd|j| j ksTtqTd S )Nr   )	make_meta)r   )Zxarray.core.parallelr  Z_coord_namesr7   r9   r  ndimr   )r  r  metar   r,   r,   r-   test_make_meta  s    
"
r  c               	   C  s|   t jtjddddd} t jtjddddd| id}t jtjddddd| id}t  || }W 5 Q R X t|| d S )Nr
  r
  r   r   rN   rM   r  Zlonsr&  )r   r   r!   zerosr   r   )Zlons2r   r   r   r,   r,   r-   !test_identical_coords_no_computes  s        r  c                 C  s   |   S rE   reset_coordsr   r,   r,   r-   rg    rh  c                 C  s   | j ddS )NTrB  r  r   r,   r,   r-   rg    rh  c                 C  s   | j ddS r  r  r   r,   r,   r-   rg    rh  c                 C  s   | j jddS )Nra   )Z	new_attrs)r  updater   r,   r,   r-   rg    rh  c                 C  s   | j ddS )Nra   r  r  r   r,   r,   r-   rg    rh  c                 C  s   |  ddiS )NrM   Zxnewr  r   r,   r,   r-   rg    rh  c                 C  s   |  ddiS )Nr  Zcxynewr  r   r,   r,   r-   rg    rh  c              	   C  s6   t  & tj| tj|| ks(tW 5 Q R X d S rE   )r   r   r   r   r7   r  r  r,   r,   r-   test_token_changes_on_transform  s    r  c              	   C  s   t   tj| }W 5 Q R X t| tr2| d9 } n| d  d9  < t   tj| }W 5 Q R X ||kslt| jd  d9  < t   tj| }W 5 Q R X ||kst| j| j	d d} t   tj| }W 5 Q R X ||kstd S )Nr   r   r  r   )
r   r   r   r   r3   r   r7   r9   r   rM   )r  t1t2t3Zt4r,   r,   r-   $test_token_changes_when_data_changes  s     

r  c              	   C  s   t   tj| }W 5 Q R X t| tr2d| d< nd| d d< t   tj| }W 5 Q R X ||kshtd| jd d< t   tj| }W 5 Q R X ||kstd S )N{   )r   r   r   r  r   )r   r   r   r   r3   r   r7   r9   )r  r  r  r  r,   r,   r-   &test_token_changes_when_buffer_changes  s    

r  c                 C  s   | S rE   r,   r   r,   r,   r-   rg    rh  c                 C  s   | j ddS )NFrW   rY   r   r,   r,   r-   rg    rh  c                 C  s   | j ddS rV   r  r   r,   r,   r-   rg    rh  r   c              	   C  s^   t  & tj| tj|| ks(tW 5 Q R X tj|  tj||  ksZtd S rE   )r   r   r   r   r7   r*   r  r,   r,   r-   test_token_identical  s
    *
r  c                  C  s   t d} t d}d|d< t| t|ks0ttj| tj|ksLtt| }t|}tj|tj|ksxt|jdd}|jdd}tj|tj|kstt| dgd| id}t| dgd|id}tj|tj|kstdS )zdTest that tokenization is invoked recursively, and doesn't just rely on the
    output of str()
    i'  r   i  rM   r=  r&  N)	r#   rd  r   r7   r   r   r   r   r   )r   r   Zda_aZda_bZds_aZds_br,   r,   r-   test_recursive_token  s    

r  c              	   C  sR   t td>}| | t|}tj| tj|kr<t|	  W 5 Q R X d S )N)Zallow_cleanup_failure)
r   
ON_WINDOWSZ	to_netcdfr   Zopen_datasetr   r   r   r7   close)r  Ztmp_filereadr,   r,   r-   !test_normalize_token_with_backend  s
    

r  r   Zbroadcast_equalsr   r   Zno_conflictsc              	   C  s:  t dtjddd}t dtjddd}t dtjddd}t  t|| |tds`tW 5 Q R X t $ t|| |d tdd kstW 5 Q R X t   t|| |tddkstW 5 Q R X t|| | tdd kstt| | | tdd kstt " t|| |	dd	s,tW 5 Q R X d S )
Nr  r  r   r   r{  r
  )equivFrN   rM   )
r   r   r!   r  r   r.  r
   r7   r*   	transpose)r   Zvar1Zvar2Zvar3r,   r,   r-   test_lazy_array_equiv_variables%  s     ($r  c              
   C  s   t jtjddddd}t jtjddddd}t jtjddddd}t  t j||g| d W 5 Q R X tdd	. tt	 t j||g| d W 5 Q R X W 5 Q R X tdd	 t j||d g| d W 5 Q R X d S )
Nr  r   r   r  r  r  )r   r   )Zmax_computes)
r   r   r!   r  rd  r   r  r'   r(   rV  )r   r  r  Zda3r,   r,   r-   test_lazy_array_equiv_mergeA  s    &r  zignore::FutureWarningc                 C  s   | j ddS )NZanew)new_attr)Zassign_attrsr  r,   r,   r-   rg  X  rh  c                 C  s   | j | jdS )Nr  )r   r  r  r,   r,   r-   rg  Y  rh  c                 C  s   |   S rE   r  r  r,   r,   r-   rg  Z  rh  c                 C  s   | j t| jd dS r  )r  r#   r   sizesr  r,   r,   r-   rg  [  rh  c                 C  s   | j td dS Nr   )r  r   r  r,   r,   r-   rg  \  rh  c                 C  s   | j ttd d S r  )locrs  r   r  r,   r,   r-   rg  ]  rh  c                 C  s   | j tt| jd d S r  )r  rs  r#   r   r  r  r,   r,   r-   rg  ^  rh  c                 C  s   | j t| jd S r  )r  rs  rM   r  r,   r,   r-   rg  _  rh  c                 C  s   | j | jdS r  )selrM   r  r,   r,   r-   rg  `  rh  c                 C  s   | j | jjdS r  )r  rM   rO   r  r,   r,   r-   rg  a  rh  c                 C  s
   |  dS )N.)r  r  r,   r,   r-   rg  b  rh  c                 C  s   |   S rE   )r}   r  r,   r,   r-   rg  c  rh  c                 C  s
   |  dS r  )Zsortbyr  r,   r,   r-   rg  d  rh  c                 C  s   | j | jdS r  )r   rM   r  r,   r,   r-   rg  e  rh  c                 C  s
   |  | S rE   )Zreindex_liker  r,   r,   r-   rg  f  rh  c                 C  s   |  ddi ddiS )Nr  cnewr  r  r,   r,   r-   rg  g  rh  c                 C  s   |  dd S )Nc                 S  s   | S rE   r,   r   r,   r,   r-   rg  h  rh  z<lambda>.<locals>.<lambda>)piper  r,   r,   r-   rg  h  rh  c                 C  s   t | t | d S r|   )r   ZalignZ
zeros_liker  r,   r,   r-   rg  i  rh  c              	   C  s$   t   t| ||  W 5 Q R X d S rE   )r   r   r  r,   r,   r-   %test_transforms_pass_lazy_array_equivS  s    r  c              	   C  s   t   t|j|j|j tt|j|jd |j t|dd | t|dd| t|	d|j
i| t|ddiddi| t| |  |  t| | j|  t| jddd	d
j| j W 5 Q R X d S )Nr   c                 S  s   | S rE   r,   r   r,   r,   r-   rg  x  rh  z<test_more_transforms_pass_lazy_array_equiv.<locals>.<lambda>r   r  r   rN   rM   F)Ztranspose_coords)r   r   r  Zbroadcast_liker   	broadcastmapZ
set_coordsr  r  r   Zrename_varsZ_from_temp_datasetZ_to_temp_datasetr  r8  r  )r  r  r,   r,   r-   *test_more_transforms_pass_lazy_array_equivt  s     r  c                  C  s8   t jjddd} t| d}t |\}|  d S )N)r
  r   )r   r   r   r   )r   rv   rd  r   r   rg   optimizer*   )r   rx   Zarr2r,   r,   r-   test_optimize  s    r  z	2021.02.0z
new modulerr   c            	      C  sp  ddl m}  tdgddgddd }t|}t|d |d dddgfd	}| |||\}}}t|| t|| t|| ||f||f||ffD ]\}}| | kst	t
| t
| kst	|  |  kst	t
| t
| kst	| j | j ks0t	t
| jt
| jkst	qt|j|j |j|j  dS )
a  dask.graph_manipulation passes an optional parameter, "rename", to the rebuilder
    function returned by __dask_postperist__; also, the dsk passed to the rebuilder is
    a HighLevelGraph whereas with dask.persist() and dask.optimize() it's a plain dict.
    r   NrM   ra   r   ru   r^   r   )r   r   r   )Zdask.graph_manipulationZgraph_manipulationr   rg   r   r   cloner   Z__dask_layers__r7   r   r   keysZlayersr   r   )	Zgmr?   r!   r  r   r  r   r   r   r,   r,   r-   test_graph_manipulation  s       


""r
  )m
__future__r   r  r   sys
contextlibr   textwrapr   Znumpyr#   Zpandasr  r'   Zpackaging.versionr   Zxarrayr   r   r   r   Zxarray.corer	   Zxarray.core.duck_array_opsr
   Zxarray.core.pycompatr   Zxarray.testingr   Zxarray.testsr   r   r   r   r   r   r   r   r   Zxarray.tests.test_backendsr   Zimportorskipr   r!   rG  r   platformr  r.   r/   rD   r   r5  r   r   r]  rb  rc  r   re  r   rj  rm  rt  rw  ry  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*   r  r  r  r4   r  r  r  r  r  filterwarningsr  r  r  r   r
  r,   r,   r,   r-   <module>   s|  ,



 z   G



	 
 
	

 
#


=






  


 

 



