
    d                       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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mZmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$  ej%        d          Z& ej%        d          Z' ej%        d          Z(ej)        dk    Z*d Z+ G d d          Z, G d de,          Z- G d de,          Z. G d d          Z/ej0        1                    dddg          d             Z2ej0        1                    dg d          d             Z3ej0        1                    dg d          d             Z4d a5d Z6d  Z7ej0        1                    d!d" d# g          d$             Z8ej0        1                    d!d% d& g          d'             Z9d( Z:d) Z;d* Z<d+ Z=d, Z>ej?        d-             Z@ej?        d.             ZAd/ ZBej0        1                    d0 e>             e=            g          ej0        1                    d1d2 d3 g          d4                         ZCej0        1                    d0 e=            g          d5             ZDd6 ZEej0        1                    d0 e=             e>            g          d7             ZFej0        1                    d0 e=             e>            g          d8             ZGej0        1                    d0 e=             e>            g          d9             ZHd: ZIej0        1                    d0 e=             e>            g          d;             ZJd< ZKej0        1                    d0 e=             e>            g          d=             ZLd> ZMej0        1                    d?d@ dA dB dC dD dE dF dG g          dH             ZNej0        1                    d?dI dJ dK dL dM dN dO dP g          dQ             ZOej0        1                    d0 e=             e>            g          dR             ZPdS ZQej0        1                    d0 e=             e>            g          dT             ZRdU ZSej0        1                    d0 e=             e>            g          dV             ZTdW ZUdX ZVdY ZWej0        1                    d0 e=             e=            X                                 e>             e>            X                                g          ej0        1                    d1dZ d[ d\ d] d^ d_ d` g          da                         ZYej0        1                    d0 e=             e=            X                                 e>             e>            X                                g          db             ZZej0        1                    d0 e=            X                                 e>            X                                g          dc             Z[ej0        1                    d1dd de df g          ej0        1                    d0 e=             e>             e>            j\        dg         g          dh                         Z]di Z^e"dj             Z_ej0        1                    dkg dl          dm             Z`ej0        1                    dkg dl          dn             Zaej0        b                    do          ej0        1                    d0 e=             e>            g          ej0        1                    d1dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d d d g          d                                     Zcd Zdd Zed Zfd ZgdS )    )annotationsN)suppress)dedent)	DataArrayDatasetVariable)duck_array_ops)lazy_array_equiv)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                 |   t                               t          j                            d                              dd          d          } t          j        t          d          5  t                      5  | 
                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr            r   chunkszToo many computesmatch)da
from_arraynprandomRandomStaterandnpytestraisesRuntimeErrorr   computedatas    6lib/python3.11/site-packages/xarray/tests/test_dask.pytest_raise_if_dask_computesr.   &   s   ==..q11771==f=MMD	|+?	@	@	@  #%% 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s6   )B18BB1B	B1 B	!B11B58B5c                      e Zd Zd ZdS )DaskTestCasec                H   t           j                            d          5   |||           d d d            n# 1 swxY w Y   t          |t                    rm|j                                        D ]Q\  }}||j        v r"t          |j        t          j
                  sJ 0t          |j        t          j                  sJ Rd S t          |t                    rt          |j        t          j                  sJ |j                                        D ]Q\  }}||j        v r"t          |j        t          j
                  sJ 0t          |j        t          j                  sJ Rd S t          |t                    r#t          |j        t          j                  sJ d S J )Nsynchronous	scheduler)r   configset
isinstancer   	variablesitemsxindexesr,   r#   ndarrayr!   Arrayr   coordsr   )selfexpectedactualtestkvs         r-   assertLazyAndzDaskTestCase.assertLazyAnd.   s   [__}_55 	# 	#D"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# fg&& 	(..00 8 81''%afbj999999%afbh777777	8 8
 	** 
	fk2844444++-- 8 81''%afbj999999%afbh777777	8 8
 )) 	fk284444444Ls   :>>N)__name__
__module____qualname__rD        r-   r0   r0   -   s#            rI   r0   c                     e Zd Zd Zd Z ej        d          d             Zd Zd Z	d Z
d	 Zej                            d
e                    g d          dfe                    g d           eddd          fe                    g d          g dfe                    g d           ej        d          fe                    g d          g dfe                    g d           ej        g d          fe                    g d           ed ej        dgdz                      fg          d             Zd Zd Zd Zd Zd Zd Zd  Zd/d#Zd$ Zd% Zd& Zd' Z d( Z!d) Z"d* Z#d+ Z$d, Z%d- Z&e'd.             Z(dS )0TestVariablec                >    |                      ||t                     d S NrD   r   r>   r?   r@   s      r-   assertLazyAndIdenticalz#TestVariable.assertLazyAndIdenticalF   !    8V-=>>>>>rI   c                >    |                      ||t                     d S rM   rD   r   rO   s      r-   assertLazyAndAllClosez"TestVariable.assertLazyAndAllCloseI        8V_=====rI   Tautousec                *   t           j                            d                              dd          | _        t
                              | j        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>   s    r-   setUpzTestVariable.setUpL   sl    i++A..44Q::MM$+fM==	!*dk:: TY77rI   c                    | j         }| j        |j        u sJ | j        j        |j        k    sJ t          | j        |           d S rM   )r^   r,   r   r   r\   r>   rC   s     r-   test_basicszTestVariable.test_basicsT   sN    MyAF""""y18++++4;*****rI   c                    |                      | j        | j                                                   |                      | j        | j                            d                     d S NTdeep)rP   r]   r^   copyr_   s    r-   	test_copyzTestVariable.test_copyZ   sY    ##DNDM4F4F4H4HIII##DNDM4F4FD4F4Q4QRRRRRrI   c                $   i dfdddddfddidfddidffD ]x\  }}| j                             |          }|j        |k    sJ |                     | j        |           d	 t          | j         j        |          D             }|j        |k    sJ yd S )
Nr   r   r   r      rn      )rn   rn   rn   rY   ro   rZ   rp   rl   rp   c                    i | ]\  }}||	S rH   rH   .0dimr   s      r-   
<dictcomp>z+TestVariable.test_chunk.<locals>.<dictcomp>j   +     # # # +VV# # #rI   )r^   chunkr   rP   r]   zipdims
chunksizes)r>   r   r?   	rechunkedexpected_chunksizess        r-   
test_chunkzTestVariable.test_chunk^   s    $%!1/01X*+6]/0!
 	? 	?FH ++F33I#x////''	BBB# #/24=3Ex/P/P# # # '+>>>>>>	? 	?rI   c                   | j         }| j        }|                     |d         |d                    |                     |d d         |d d                    |                     |ddgg df         |ddgg df                    d S )Nr   rq   )r   rq   r   r]   r^   rP   r>   urC   s      r-   test_indexingzTestVariable.test_indexingo   s    NM##AaD!A$///##AbqbE1RaR5111##Aq!fiii&7$8!QFIII<M:NOOOOOrI   zexpected_data, index)c   r   rn   r   r   )r   r   r   r   r   N)r   r   rn   r   )r   r   rq   rn   )rq   r   r   r   )FTTT)r   r   r   r   rZ   r   c                    t          dt                              g d                    }t          d|          }t                      5  d||<   d d d            n# 1 swxY w Y   t	          ||           d S )NrZ   )rq   r   rn   r   r   )r   r!   arrayr   r   )r>   expected_dataindexarrr?   s        r-   test_setitem_dask_arrayz$TestVariable.test_setitem_dask_arrayv   s     bhh|||4455S=11#%% 	 	CJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	h'''''s   	AA"Ac                    | j         }| j        }|                     |d                                         |d                                                    d S Nr   )r]   r^   rP   squeezer   s      r-   test_squeezezTestVariable.test_squeeze   sD    NM##AaDLLNNAaDLLNNCCCCCrI   c                    | j         }|                    |          sJ t          |j        t          j                  sJ |                    |          sJ t          |j        t          j                  sJ d S rM   )r^   equalsr7   r,   r!   r<   	identicalrb   s     r-   test_equalszTestVariable.test_equals   so    Mxx{{!&"(+++++{{1~~!&"(+++++++rI   c                b    | j         }| j        }|                     |j        |j                   d S rM   )r]   r^   rP   Tr   s      r-   test_transposezTestVariable.test_transpose   s0    NM##AC-----rI   c                z   | j         }| j        }|                     |                    d          |                    d                     |                     |                    d          |                    d                     |j        j        |                    d          j        j        k    sJ d S )Nr   rZ   rq   )r]   r^   rP   shiftr,   r   r   s      r-   
test_shiftzTestVariable.test_shift   s    NM##AGGaGLL!''A',,???##AGGbGMM177R7==AAAv}! 1 8888888rI   c                    | j         }| j        }|                     |                    d          |                    d                     |j        j        |                    d          j        j        k    sJ d S )Nr   r   rq   )r]   r^   rP   rollr,   r   r   s      r-   	test_rollzTestVariable.test_roll   sk    NM##AFFQFKK!===v} 0 7777777rI   c                &   | j         }| j        }|                     | |            |                     t          |          t          |                     |                     |                                |                                           d S rM   )r]   r^   rP   absroundr   s      r-   test_unary_opzTestVariable.test_unary_op   sx    NM##QB+++##CFFCFF333##AGGIIqwwyy99999rI   c                    | j         }| j        }|                     d|z  d|z             |                     ||z   ||z              |                     |d         |z   |d         |z              d S )Nr   r   r   r   s      r-   test_binary_opzTestVariable.test_binary_op   sx    NM##AE1q5111##AE1q5111##AaD1HadQh77777rI   returnNonec                   t           j                            d          }|                    ddd          }t                              |d          }t          d|          }t          d|          }|                     |d	z  |d	z             |                     |d
z  |d
z             |                     |d	z	  |d	z	             |                     |d
z	  |d
z	             d S )Nr   i'  )r   r   )lowhighsizer   r   rY   r      )r#   r$   default_rngintegersr!   r"   r   rP   )r>   rngr\   r,   r   rC   s         r-   test_binary_op_bitshiftz$TestVariable.test_binary_op_bitshift   s     i##A&&&u6BB}}VF}33Z((Z&&##AFAF333##AFAF333##AFAF333##AFAF33333rI   c                    t          d                    | j        j                            }|t	          | j                  k    sJ d S )Nz;            <xarray.Variable (x: 4, y: 6)>
            {!r})r   formatr^   r,   repr)r>   r?   s     r-   	test_reprzTestVariable.test_repr   sP    F" 
 
 4........rI   c                @   t          dgt          d                    }|                                 |j        rJ t          dk    sJ t          j        t          j        |                    }t          dk    sJ t          ||           |j        rJ |j        rJ d S )NrZ   rq   )	r   build_dask_arrayr*   
_in_memorykernel_call_countpickleloadsdumpsr   )r>   a1a2s      r-   test_picklezTestVariable.test_pickle   s     se-c2233


=    A%%%%\&,r**++ A%%%%R   =   =     rI   c                b   | j         }| j        }|                     |                                |                                           |                     |                                |                                           t                      5  |                    d          }d d d            n# 1 swxY w Y   |                     |                    d          |           t                      5  |                    d          }d d d            n# 1 swxY w Y   |                     |                    d          |           |                     |dk                                    |dk                                               |                     |dk     	                    d          |dk     	                    d                     t          j        t          d          5  |                                 d d d            n# 1 swxY w Y   t          j        t          d          5  |                    |j                   d d d            n# 1 swxY w Y   t                      5  |                    t           j                   d d d            d S # 1 swxY w Y   d S )NrZ   )rv   rq   zonly works along an axisr   )r]   r^   rT   meanstdr   argmaxargminanyallr'   r(   NotImplementedErrormedianr{   reducer	   r>   r   rC   r@   s       r-   test_reducezTestVariable.test_reduce   sn   NM""16688QVVXX666""15577AEEGG444#%% 	' 	'XX#X&&F	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'""1888#4#4f===#%% 	' 	'XX#X&&F	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'""1888#4#4f===""AE;;==1q5++--@@@""AE;;s#3#3a!e[[5E5EFFF].6QRRR 	 	HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	].6QRRR 	 	HHQV	 	 	 	 	 	 	 	 	 	 	 	 	 	 	#%% 	* 	*HH^()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*sZ   B44B8;B87DD!D0HHH7II"%I"7 J$$J(+J(c                   t          j        ddt           j        dg          }t                              |d          }t          d|          }t          d|          }|                     ||                    |                     |                     t          dt          d                    |                    d                     |                     |	                                |	                                           d S )	Nr   rq   rn   r   r   rZ   r   r   )
r#   r   nanr!   r"   r   rP   fillnarangecount)r>   r\   r,   r]   r^   s        r-   test_missing_valuesz TestVariable.test_missing_values   s    1a+,,}}VD}11S&))	C&&##Ixx/H/HIII##HS%(($;$;X__Q=O=OPPP##IOO$5$5x~~7G7GHHHHHrI   c           	        | j         }| j        }|                     |t          j        |d d         |dd          gd                     |                     |d d         t          j        |d         |d         gd                     |                     |d d         t          j        |d         |d         gd                     |                     |d d         t          j        |d         |d         gd                     |                     |d d         t          j        |ddg         |dg         gdddgdgg                     d S )Nr   rZ   r   rq   rn   )	positions)r]   r^   rP   r   concatr   s      r-   test_concatzTestVariable.test_concat   sG   NM##Ax"1"qu~s'K'KLLL##AbqbE8?AaD!A$<+M+MNNN##AbqbE8?AaD!A$<+M+MNNN##AbqbE8?AaD!A$<+M+MNNN##bqbE8?Aq!fIq!v#6AQRPS}UUU	
 	
 	
 	
 	
rI   c                    | j         }	 |                                 n*# t          $ r}dt          |          v sJ Y d }~nd }~ww xY w	 |d                                          d S # t          $ r}dt          |          v sJ Y d }~d S d }~ww xY w)Nr   r   )r^   argsortr   stritem)r>   rC   errs      r-   test_missing_methodsz!TestVariable.test_missing_methods  s    M	&IIKKKK" 	& 	& 	&SXX%%%%%%%%%	&	&aDIIKKKKK" 	& 	& 	&SXX%%%%%%%%%%	&s,    
AA  A	A% %
B/BBc                    | j         }| j        }|                     t          j        |          t          j        |                     d S rM   )r]   r^   rT   r#   sinr   s      r-   test_univariate_ufuncz"TestVariable.test_univariate_ufunc  s<    NM""26!99bfQii88888rI   c                   | j         }| j        }|                     t          j        |d          t          j        |d                     |                     t          j        |d          t          j        d|                     d S r   )r]   r^   rT   r#   maximumr   s      r-   test_bivariate_ufuncz!TestVariable.test_bivariate_ufunc  sr    NM""2:a#3#3RZ15E5EFFF""2:a#3#3RZ15E5EFFFFFrI   c                   | j         }| j        }t                              |          sJ t                              |dz             \  }t                              |          rJ |dz   j        |j        k                                    sJ d S Nrq   )r]   r^   r   is_dask_collectionr*   r,   r   r>   r   rC   v2s       r-   test_computezTestVariable.test_compute  s    NM&&q)))))QU##**2.....Q',,.......rI   c                $   | j         }| j        dz   }t                              |          \  }||usJ t	          |                                          t	          |                                          k     sJ |                                |                                k    sJ t                              |          sJ t                              |          sJ |                     |dz   |           |                     |dz   |           d S r   )	r]   r^   r   persistlen__dask_graph____dask_keys__r   rT   r   s       r-   test_persistzTestVariable.test_persist"  s   NMAQ{{{{2$$&&''#a.>.>.@.@*A*AAAAA!!Q__%6%66666&&q)))))&&r*****""1q5!,,,""1q5"-----rI   c                   dd l }|                                }|                    | j        d          }t	          j        d|          }t          j                            |          }|d|j	        z  z   }t          j                            |          t          j                            |          k    sJ t          j                            |          |k    sJ d S )Nr   meterrY   r   )
pintUnitRegistryQuantityr,   xrr   r   basetokenizer   )r>   r   unit_registryqvariabletokenpost_ops          r-   test_tokenize_duck_dask_arrayz*TestVariable.test_tokenize_duck_dask_array0  s    ))++""49g66;z1--	""8,,Q!444y!!(++ty/A/A'/J/JJJJJy!!(++u444444rI   )r   r   ))rE   rF   rG   rP   rT   r'   fixturer`   rc   ri   r   r   markparametrizer!   r   slicer#   aranger   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   rI   r-   rK   rK   E   s       ? ? ?> > > V^D!!!8 8 "!8+ + +S S S? ? ?"P P P [XXmmm$$a(XXooo&&ar(:(:;XXooo&&


3XXooo&&		!5XXooo&&(A(A(ABXXooo&&1J1J1J(K(KLXX&&&''34&1*9M9M)N)NO	
 ( ( (D D D
, , ,. . .
9 9 98 8 8: : :8 8 84 4 4 4/ / /! ! !* * *(I I I	
 	
 	
	& 	& 	&9 9 9
G G G/ / /. . . 5 5 ]5 5 5rI   rK   c                  R   e Zd Zd Zd Zd Z ej        d          d             Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zej                            dddg          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%e&d%             Z'd&S )'TestDataArrayAndDatasetc                >    |                      ||t                     d S rM   rN   rO   s      r-   rP   z.TestDataArrayAndDataset.assertLazyAndIdenticalB  rQ   rI   c                >    |                      ||t                     d S rM   rS   rO   s      r-   rT   z-TestDataArrayAndDataset.assertLazyAndAllCloseE  rU   rI   c                >    |                      ||t                     d S rM   )rD   r   rO   s      r-   assertLazyAndEqualz*TestDataArrayAndDataset.assertLazyAndEqualH  s     8V\:::::rI   TrV   c                L   t           j                            dd          | _        t                              | j        d          | _        t          | j        dt          d          idd          | _	        t          | j        dt          d          idd          | _
        d S )	Nr   r   r   r   rZ   rY   foo)r=   r{   name)r#   r$   r&   r\   r!   r"   r,   r   r   eager_array
lazy_arrayr_   s    r-   r`   zTestDataArrayAndDataset.setUpK  s    iooa++MM$+fM==	$KeAhhju
 
 
 $IsE!HHoJU
 
 
rI   c                T   i dfdddddfddidfddidffD ]\  }}| j                             |          }|j        |k    sJ |                     | j        |           d	 t          | j         j        |          D             }|j        |k    sJ | j                                         }| j                                        }d
 t          |j        |          D             }|                    |          }|j        |k    sJ |                     ||           |j        |k    sJ d S )Nrk   rm   rn   rY   ro   rZ   rr   rp   c                    i | ]\  }}||	S rH   rH   rt   s      r-   rw   z6TestDataArrayAndDataset.test_chunk.<locals>.<dictcomp>c  rx   rI   c                    i | ]\  }}||	S rH   rH   rt   s      r-   rw   z6TestDataArrayAndDataset.test_chunk.<locals>.<dictcomp>k  rx   rI   )	r  ry   r   rP   r  rz   r{   r|   
to_dataset)r>   r   r?   r}   r~   lazy_dataseteager_datasets          r-   r   z"TestDataArrayAndDataset.test_chunkV  s   $%!1/01X*+6]/0!
 	? 	?FH --f55I#x////''(8)DDD# #/24?3G/R/R# # # '+>>>>>  ?5577L ,7799M# #/2<3Dh/O/O# # # %**622I #':::::''yAAA'+>>>>>>;	? 	?rI   c                    | j                             ddi                              ddi          }|j        dk    sJ |                     | j        |           d S )NrZ   r   r[   rk   )r  ry   r   rP   r  r>   chunkeds     r-   test_rechunkz$TestDataArrayAndDataset.test_rechunkv  s`    "((#q2288#qBB~!55555##DOW=====rI   c                z    | j                                         }|j        j                            d          sJ d S )Nzxarray-<this-array>)r  ry   r,   r
  
startswithr  s     r-   test_new_chunkz&TestDataArrayAndDataset.test_new_chunk{  s<    "((**| ++,ABBBBBBBrI   c                    t          dd| j        fi          }t          |j        j        j        t
          j                  sJ d S )Nr	  rY   )r   r,   r7   r	  r   r!   r<   )r>   lazy_dss     r-   test_lazy_datasetz)TestDataArrayAndDataset.test_lazy_dataset  sA    5:ty"9:;;'+.3RX>>>>>>>rI   c                   | j         }| j        }|                     ||           |                     | |            |                     |j        |j                   |                     |                                |                                           |                     d|z   d|z              t          j        |d d         |dd          gd          }|                     ||           d S )Nrq   r   rZ   )r  r  rT   r   r   r   r   r   s       r-   test_lazy_arrayz'TestDataArrayAndDataset.test_lazy_array  s    O""1a(((""A2r***""13,,,""16688QVVXX666""1q5!a%000AbqbE1QRR5>3//""1f-----rI   c                   | j         }| j        }t                              |          sJ t                              |dz             \  }t                              |          rJ |dz   j        |j        k                                    sJ d S r   )r  r  r   r   r*   r,   r   r   s       r-   r   z$TestDataArrayAndDataset.test_compute  s    O&&q)))))QU##**2.....Q',,.......rI   c                $   | j         }| j        dz   }t                              |          \  }||usJ t	          |                                          t	          |                                          k     sJ |                                |                                k    sJ t                              |          sJ t                              |          sJ |                     |dz   |           |                     |dz   |           d S r   )	r  r  r   r   r   r   r   r   rT   r   s       r-   r   z$TestDataArrayAndDataset.test_persist  s   OaQ{{{{2$$&&''#a.>.>.@.@*A*AAAAA!!Q__%6%66666&&q)))))&&r*****""1q5!,,,""1q5"-----rI   c                4   t          d          }t          d          }t          d          }t          d          }t          d          }t          d          }t          dd|fid	d|fi
          }t          dd|fid	d|fi
          }t          dd|fid	d|fi
          }	t          dk    sJ t          j        |||	gddd          }
t          dk    sJ t          |
d         j        t          j                  sJ t          |
d	         j        t          j                  sJ t          j        |||	gddd          }
t          dk    sJ t          |
d         j        t          j
        j                  sJ t          |
d	         j        t          j
        j                  sJ t          j        |||	gddgd	g          }
t          dk    sJ t          |
d         j        t          j
        j                  sJ t          |
d	         j        t          j
        j                  sJ t          j        |||	gdg g           }
t          dk    sJ t          |
d         j        t          j                  sJ t          |
d	         j        t          j                  sJ t          j        |||	gdddd          }
t          dk    sJ t          |
d         j        t          j                  sJ t          |
d	         j        t          j                  sJ t          dddgfid	ddgfi
          }t          j        ||||	gddd          }
t          dk    sJ t          |
d         j        t          j
        j                  sJ t          |
d	         j        t          j
        j                  sJ |
                                 t          dk    sJ |d         j        |u sJ |d	         j        |u sJ |d         j        |u sJ |d	         j        |u sJ |	d         j        |u sJ |	d	         j        |u sJ t          j        |||gddd          }
t          dk    sJ t          |
d         j        t          j
        j                  sJ t          |
d	         j        t          j
        j                  sJ t          j        |||gdg g d          }
t          dk    sJ t          |
d         j        t          j
        j                  sJ t          |
d	         j        t          j
        j                  sJ t          j        ||                                |	gdddd          }
t          dk    sJ t          j        ||                                |	gdddd          }
t          dk    sJ |d         j        |u sJ |d	         j        |u sJ |d         j        |u sJ |d	         j        |u sJ |	d         j        |u sJ |	d	         j        |u sJ d S )Nd1c1d2c2d3c3drZ   c	data_varsr=   r   n	different)rv   r+  r=   r   r      r   )rv   r+  r=   compat   g       @            )r   r   r   r   r   r7   r,   r#   r;   r   r   r<   r*   )r>   r"  r#  r$  r%  r&  r'  ds1ds2ds3outds4s               r-   test_concat_loads_variablesz3TestDataArrayAndDataset.test_concat_loads_variables  s{    d##d##d##d##d##d## sBi 0#Ry9IJJJsBi 0#Ry9IJJJsBi 0#Ry9IJJJ A%%%%i#sOK
 
 
 !A%%%%#c(-44444#c(-44444ic3SE%PPP A%%%%#c(-)9:::::#c(-)9:::::ic3SSE3%PPP A%%%%#c(-)9:::::#c(-)9:::::ic3SBrJJJ B&&&&#c(-44444#c(-44444i#sO!
 
 
 !B&&&&#c(-44444#c(-44444 sSEl 3S3,<OPPPi#sC c[
 
 
 !B&&&&#c(-)9:::::#c(-)9::::: 	 B&&&& 3x}""""3x}""""3x}""""3x}""""3x}""""3x}"""" i#sOK
 
 
 !B&&&&#c(-)9:::::#c(-)9:::::i#sO2k
 
 
 !B&&&&#c(-)9:::::#c(-)9:::::i#++--%
 
 
 !B&&&&i#++--%
 
 
 !B&&&& 3x}""""3x}""""3x}""""3x}""""3x}""""3x}""""""rI   c                :   | j         }| j        }|                    d                              d          }t	                      5  |                    d                              d          }d d d            n# 1 swxY w Y   |                     ||           d S )NrZ   .)r  r  groupbyr   r   rT   r>   r   rC   r?   r@   s        r-   test_groupbyz$TestDataArrayAndDataset.test_groupby$  s    O99S>>&&s++#%% 	. 	.YYs^^((--F	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.""8V44444   )A::A>A>c                :   | j         }| j        }|                    d                                          }t	                      5  |                    d                                          }d d d            n# 1 swxY w Y   |                     ||           d S )Nr   r   )r  r  rollingr   r   rT   r=  s        r-   test_rollingz$TestDataArrayAndDataset.test_rolling-  s    O99q9>>&&((#%% 	+ 	+YYY^^((**F	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+""8V44444r?  funcfirstlastc                "   t          j        |          }| j        }| j        }|j        |j        fD ]}dg df|d<    ||                    d                    }t                      5   ||                    d                    }d d d            n# 1 swxY w Y   |                     ||           t                      5   ||                    d                    }d d d            n# 1 swxY w Y   |                     ||           d S )NrZ   )arG  brH  ab)operatormethodcallerr  r  r=   r<  r   rT   )r>   rC  methodr   rC   r=   r?   r@   s           r-   test_groupby_first_lastz/TestDataArrayAndDataset.test_groupby_first_last6  s   &t,,Ox* 	7 	7F!5!5!56F4LL6!))D//**#%% 	- 	-VAIIdOO,,F	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-""8V444#%% 	- 	-VAIIdOO,,F	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-""8V44444s$   )BBBC..C25C2c                4   | j                             t          d                    }| j                            t          d                    }dg didg dig dg ddfD ]2} |j        d	i |} |j        d	i |}|                     ||           3d S )
Nr   )r[   rZ   r   rn   r   )rq   d   r   e   rn   )      @rn   g      @)r   rR  rn   rY   rH   )r  assign_coordsr   r  reindexrT   )r>   r   rC   kwargsr?   r@   s         r-   test_reindexz$TestDataArrayAndDataset.test_reindexH  s    **U1XX*66O))E!HH)55 )))%%%&--kkk22
 	9 	9F
 !qy**6**HQY((((F&&x8888	9 	9rI   c                    | j         }| j        }|                    |d                   }|                     ||                    d                              d                     d S NrZ   r   )r  r  rS  r  r  to_array)r>   r   rC   r?   s       r-   test_to_dataset_roundtripz1TestDataArrayAndDataset.test_to_dataset_roundtripU  s^    O??QsV?,,!,,s*;*;*D*DS*I*IJJJJJrI   c                x    d } || j                   } || j                  }|                     ||           d S )Nc                x    t          j        | |                     d          g                                          S )Nbar)r   mergerenamerY  )r   s    r-   duplicate_and_mergez?TestDataArrayAndDataset.test_merge.<locals>.duplicate_and_merge]  s/    8UELL$7$7899BBDDDrI   )r  r  r  )r>   r`  r?   r@   s       r-   
test_mergez"TestDataArrayAndDataset.test_merge\  sW    	E 	E 	E '&t'788$$T_55&11111rI   c                    | j         }| j        }|                     t          j        |          t          j        |                     d S rM   )r  r  rT   r#   r   r   s      r-   test_ufuncsz#TestDataArrayAndDataset.test_ufuncsd  s=    O""26!99bfQii88888rI   c                .   t          j        d          }|dk    }t                              |d          }t                              |d          }t	          |                              |          }|                     |t	          |                              |                     |                     |t	          |                              |                     |                     |t	          |                              |                     d S )N
   rn   r   )r#   r  r!   r"   r   wherer  )r>   rG  rH  rZ   r[   r?   s         r-   test_where_dispatchingz.TestDataArrayAndDataset.test_where_dispatchingi  s    IbMMEMM!QMM!QQ<<%%a(()A,,*<*<Q*?*?@@@)A,,*<*<Q*?*?@@@)A,,*<*<Q*?*?@@@@@rI   c                    t          dt          d          fdt          d          fd                                          }dgfd}|                    |           d         dk    sJ d S )NrZ   r   r	  r]  r   c                 F    dxx         dz  cc<   t          j        | i |S )Nr   rq   )r   get)argsrU  r   s     r-   counting_getzGTestDataArrayAndDataset.test_simultaneous_compute.<locals>.counting_getx  s-    !HHHMHHH8T,V,,,rI   r3   rq   )r   r   ry   load)r>   dsrm  r   s      @r-   test_simultaneous_computez1TestDataArrayAndDataset.test_simultaneous_computes  s    c588_c588_EEFFLLNN	- 	- 	- 	- 	- 	,'''Qx1}}}}}}rI   c                   t           j                            dd          }t          |d          }|                    d          }t
          j                            t          j	        d          t          j	        d	          gd
dg          }t          |
                    dd          d|iddg          }|j        j        |j        j        k    sJ |                     ||           d S )NrO  )rq   rn   r   )r   r   )wrZ   r[   r{   rY   )zrn   r   rZ   r[   namesr   r   rt  rr  )r!   r$   normalr   stackpd
MultiIndexfrom_productr#   r  reshaper,   r   r  )r>   r,   r   stackedrt  r?   s         r-   
test_stackz"TestDataArrayAndDataset.test_stack  s    yYyAA?333))j)))M&&	!bill'CCQT:&VVT\\!R003(#sLLL|"hm&:::::'22222rI   c                    | j                             | j         d                   }| j                            | j        d                   }|                     ||           d S r   )r  dotr  rT   )r>   eagerlazys      r-   test_dotz TestDataArrayAndDataset.test_dot  sX     $$T%5a%899""4?1#566""5$/////rI   c                    t          d          }t          d          }t          |dgdd|fi          }t          d                    |                    }|t	          |          k    sJ t
          dk    sJ d S )Nr,   coordrZ   r[   r{   r=   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   r   )r>   r,   nonindex_coordrG  r?   s        r-   test_dataarray_reprz+TestDataArrayAndDataset.test_dataarray_repr  s    '')'22d#c>5J/KLLL1
 282 2	
 	
 477"""" A%%%%%%rI   c                    t          d          }t          d          }t          dd|fidd|fi          }t          d          }|t          |          k    sJ t          dk    sJ d S )	Nr,   r  rG  rZ   r[   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   r   )r>   r,   r  ro  r?   s        r-   test_dataset_reprz)TestDataArrayAndDataset.test_dataset_repr  s    '')'22c4[13n@U:VWWWR	
 	
 488#### A%%%%%%rI   c                   t          d          }t          d          }t          |dgdd|fi          }|                                 |j        rJ |j        d         j        rJ t
          dk    sJ t          j        t          j        |                    }t
          dk    sJ t          ||           |j        rJ |j        rJ |j        d         j        rJ |j        d         j        rJ d S )Nr,   r  rZ   r[   r  r   )
r   r   r*   r   r=   r   r   r   r   r   )r>   r,   r  r   r   s        r-   test_dataarray_picklez-TestDataArrayAndDataset.test_dataarray_pickle  s     '')'22t3%sN6K0LMMM


=   9S>,,,, A%%%%\&,r**++ A%%%%R   =   =   9S>,,,,9S>,,,,,,rI   c                   t          d          }t          d          }t          dd|fidd|fi          }|                                 |d         j        rJ |d         j        rJ t          dk    sJ t          j        t          j        |                    }t          dk    sJ t          ||           |d         j        rJ |d         j        rJ |d         j        rJ |d         j        rJ d S )Nr,   r  rG  rZ   r[   r*  r   )	r   r   r*   r   r   r   r   r   r   )r>   r,   r  r5  r6  s        r-   test_dataset_picklez+TestDataArrayAndDataset.test_dataset_pickle  s     '')'22sDk 2C#~AV;WXXXs8&&&&s8&&&& A%%%%l6<,,-- A%%%%c"""s8&&&&s8&&&&s8&&&&s8&&&&&&rI   c                   t          d          }t          d          }t          |dgdd|fi          }t          t                    5  t	          |d           d d d            n# 1 swxY w Y   t
          dk    sJ d S )Nr,   r  rZ   r[   r  NOTEXISTr   )r   r   r   AttributeErrorgetattrr   )r>   r,   r  rG  s       r-   test_dataarray_getattrz.TestDataArrayAndDataset.test_dataarray_getattr  s      '')'22d#c>5J/KLLLn%% 	# 	#Az"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# A%%%%%%s   
A''A+.A+c                   t          d          }t          d          }t          dd|fidd|fi          }t          t                    5  t	          |d           d d d            n# 1 swxY w Y   t
          dk    sJ d S )	Nr,   r  rG  rZ   r[   r*  r  r   )r   r   r   r  r  r   )r>   r,   r  ro  s       r-   test_dataset_getattrz,TestDataArrayAndDataset.test_dataset_getattr  s      '')'22c4[13n@U:VWWWn%% 	$ 	$B
###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ A%%%%%%s   A))A-0A-c                    t          ddg                                          }|j        rJ |j                                        ddgk    sJ |j        rJ d S )Nrq   r   )r   ry   r   r\   tolistr>   rG  s     r-   test_valuesz#TestDataArrayAndDataset.test_values  sd     q!f##%%<x  QF****<rI   c                    t          | j        j        dt          d          id          }|                     | j        |           d S )NrZ   r   r	  )r=   r
  )r   r  r   r   rP   r  s     r-   test_from_dask_variablez/TestDataArrayAndDataset.test_from_dask_variable  sE     do.U1XXUSSS##DOQ77777rI   c                   dd l }|                                }|                    | j        |j                  }t          j        |dt          d          idd          }t          j	        
                    |          }|d|j        z  z   }t          j	        
                    |          t          j	        
                    |          k    sJ t          j	        
                    |          |k    sJ d S )Nr   rZ   r   rY   r	  )r,   r=   r{   r
  r   )r   r   r   r,   r   r   r   r   r   r   r   )r>   r   r   r   
data_arrayr   r   s          r-   r   z5TestDataArrayAndDataset.test_tokenize_duck_dask_array  s    ))++""49m.ABB\Cq?%
 
 

 	"":..q=#666y!!*--1C1CG1L1LLLLLy!!*--666666rI   N)(rE   rF   rG   rP   rT   r  r'   r   r`   r   r  r  r  r  r   r   r:  r>  rB  r   r   rM  rV  rZ  ra  rc  rg  rp  r~  r  r  r  r  r  r  r  r  r  r   r   rH   rI   r-   r  r  A  sN       ? ? ?> > >; ; ; V^D!!!
 
 "!
? ? ?@> > >
C C C? ? ?. . ./ / /. . .z# z# z#x5 5 55 5 5 [Vgv%6775 5 875"9 9 9K K K2 2 29 9 9
A A A  3 3 30 0 0
& & &"& & &"- - -$' ' '$	& 	& 	&& & &     8 8 8 7 7 ]7 7 7rI   r  c                  z    e Zd Zd Zd Zej                            e          d             Z	d Z
d Zd Zd Zd	S )
TestToDaskDataFramec                ~   t           j                            d          }t          j        dd          }t	          d          }t          dt                              |d          fd|fd|fd          }t          j	        ||d	t          j
        |d
                    }t                              |d          }|                    d          }t          |t          j	                  sJ t          |                                |                                           t                              |                    d          d          }|                    d          }t          |t          j	                  sJ t          |                                |                                           d S )Nre  uint8dtype
abcdefghijtr   r   rG  rH  r  rG  rH  r
  r   	chunksizeT	set_indexFdrop)r#   r$   r&   r  listr   r!   r"   ry  	DataFrameIndexddfrom_pandasto_dask_dataframer7   r   r*   reset_index)r>   rZ   r[   r  ro  expected_pdr?   r@   s           r-   test_to_dask_dataframez*TestToDaskDataFrame.test_to_dask_dataframe  s   IOOBIb(((a2233(#qRR
 
 l#3#328AC;P;P;PQQQ >>+>;;%%%55&",///// 	8++--v~~/?/?@@@ >>+"9"9u"9"E"EQR>SS%%%66&",/////8++--v~~/?/?@@@@@rI   c                   t           j                            dd          }t          ddt                              |d          fi          }dt          j        dd	gt           j                  f|d<   d
t          d          f|d
<   t          j
                            g dg dgdd
g          }t          j        d|                    d          i|          }|                    d          }|                    d          }t!          |t"          j                  sJ t%          ||                                           d S )Nr   rn   rr  rY   rq   r   r   rZ   r   rq   r[   abc)r   r   r   rq   rq   rq   )rG  rH  r)  rG  rH  r)  ru  r   r  Fr  r  )r#   r$   r&   r   r!   r"   r   int64r  ry  rz  from_arraysr  r|  r  r  r7   r  r   r*   )r>   rr  ro  	exp_indexr?   r@   s         r-   test_to_dask_dataframe_2Dz-TestToDaskDataFrame.test_to_dask_dataframe_2D(  s4   IOOAq!!cJa(G(GHIJJ!Q2233U$3 M--!?!?!?@c
 . 
 
	 <aiimm 4IFFF''U'33%%%66&",/////8V^^%5%566666rI   )r(   c                   t                               t          j                            dd          d          }t          dd|fi          }dt          j        dd	gt          j                  f|d<   d
t          d          f|d
<   |	                                
                                }|                    d          }t          |t          j                  sJ t          ||	                                           d S )Nr   rn   r  r   rr  rY   rZ   r   rq   r[   r  Tr  )r!   r"   r#   r$   r&   r   r   r  r  r*   to_dataframer  r7   r  r  r   )r>   rr  ro  r?   r@   s        r-   #test_to_dask_dataframe_2D_set_indexz7TestToDaskDataFrame.test_to_dask_dataframe_2D_set_index<  s     MM")//!Q//M??cJ?+,,!Q2233U$3::<<,,..%%%55&",/////8V^^%5%566666rI   c                b   t           j                            d          }t          j        d          dz  }t	          dt
                              |d          fdt
                              |d          fd          }t          j        d|it          j	        |d          	          }t                              |d
          }|                    d          }t          |t          j                  sJ t          |                                |                                           d S )Nre  r   r  r   r   )rG  r  rG  r  r  r  Tr  )r#   r$   r&   r  r   r!   r"   ry  r  r  r  r  r  r7   r   r*   )r>   rZ   r  ro  r  r?   r@   s          r-   "test_to_dask_dataframe_coordinatesz6TestToDaskDataFrame.test_to_dask_dataframe_coordinatesI  s   IOOBIbMMA2==1=5562==1=556 
 
 lC828AC3H3H3HIII>>+>;;%%%55&",/////8++--v~~/?/?@@@@@rI   c                   t           j                            d          }t          j        dd          }t	          d          }t          d|fd|fd|fd          }t          j        ||dt          j        |d          	          }|	                    d
          }t          |t          j                  sJ t          ||                                           d S )Nre  r  r  r  r  r  r  r  r  Tr  )r#   r$   r&   r  r  r   ry  r  r  r  r7   r  r   r*   )r>   rZ   r[   r  ro  r?   r@   s          r-   $test_to_dask_dataframe_not_daskarrayz8TestToDaskDataFrame.test_to_dask_dataframe_not_daskarray[  s    IOOBIb(((C83(#qBBCC<aa 0 08M8M8MNNN%%%55&",/////8V^^%5%566666rI   c                   t                               t          j                            d          d          }t          dd|fi          }|                                                                                                }|	                                }t          |t          j                  sJ t          ||                                           |                                                                }|	                    d          }t          |t          j                  sJ t          ||                                           d S )Nre  r   r   rZ   dim_0Tr  )r!   r"   r#   r$   r&   r   r*   r  r  r  r7   r  r  r   )r>   rZ   ro  r?   r@   s        r-   $test_to_dask_dataframe_no_coordinatez8TestToDaskDataFrame.test_to_dask_dataframe_no_coordinatei  s
   MM")//"--aM88cGQ<())::<<,,..::<<%%''&",/////8V^^%5%5666::<<,,..%%%55&",/////8V^^%5%566666rI   c                F   t          j        ddgddggt           j                  }t          dd|fi                              d          }|d                                                                         }|                    dd	g
          }t          |t          j
                  sJ t          ||                                           |d         j                                                                        }|                    d	dg
          }t          |t          j
                  sJ t          ||                                           t          j        t           d          5  |                    dg
           d d d            d S # 1 swxY w Y   d S )Nrq   r   rn   r   r  rr  rY   rZ   r[   )	dim_orderz$does not match the set of dimensionsr   )r#   r   r  r   ry   	to_seriesr  r  r7   r  r  r   r*   r   r'   r(   
ValueError)r>   r\   ro  r?   r@   s        r-    test_to_dask_dataframe_dim_orderz4TestToDaskDataFrame.test_to_dask_dataframe_dim_orderw  s   Aq6Aq6*"(;;;cJ/01177::c7$$&&2244%%c
%;;&",/////8V^^%5%5666c79&&((4466%%c
%;;&",/////8V^^%5%5666]:-TUUU 	2 	2  C5 111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   1FFFN)rE   rF   rG   r  r  r'   r   xfailr   r  r  r  r  r  rH   rI   r-   r  r  
  s        A A A:7 7 7( [122
7 
7 32
7A A A$7 7 77 7 72 2 2 2 2rI   r  rL  rn  r*   c                   t                               t          j        d          d          }t	          d|          }t
          j                            t           dt          j        d          f          5 } t          ||           d           d d d            n# 1 swxY w Y   |	                    |d           d S )	Nrn   r   r   r[   r*   )return_valuer]  r	  )
r!   r"   r#   r  r   r   patchobjectr  assert_called_with)rL  chunked_arrayrZ   mock_computes       r-   test_dask_kwargs_variabler    s    MM")A,,tM<<Mm$$A			2y	!		G	G &<6u%%%%& & & & & & & & & & & & & & &##Mu#=====s   9B  B$'B$)rn  r*   r   c                L   t                               t          j        d          d          }t	          |          }| dv rd}nd}t          j        |          5 } t          ||           d           d d d            n# 1 swxY w Y   |                    |d           d S )	Nrn   r   r   rn  r*   dask.array.computedask.persistr]  r  )	r!   r"   r#   r  r   r   r  r  r  rL  r,   rZ   	dask_func	mock_funcs        r-   test_dask_kwargs_dataarrayr    s    ==1d=33D$A$$$(		"		I		 &)6u%%%%& & & & & & & & & & & & & & &  5 11111s   BB	Bc                T   t                               t          j        d          d          }t	          dd|fi          }| dv rd}nd}t          j        |          5 } t          ||           d	
           d d d            n# 1 swxY w Y   |                    |d	
           d S )Nrn   r   r   rZ   r[   r  r  r  r]  r  )	r!   r"   r#   r  r   r   r  r  r  r  s        r-   test_dask_kwargs_datasetr    s    ==1d=33Ddm$%%A$$$(		"		I		 &)6u%%%%& & & & & & & & & & & & & & &  5 11111s   BB
B
c                V    t           dz  a t          j        dt          j                  S )zdDask kernel to test pickling/unpickling and __repr__.
    Must be global to make it pickleable.
    rq   r  )r   r#   onesr  r  s    r-   kernelr    s&    
 71BH%%%%rI   c                v    da t          j                            | dft          | fi| dt
          j                  S )Nr   ))rq   )r   r
  r   r  )r   r   r   r<   r  r#   r  r  s    r-   r   r     s?    :Qi&$(tG28    rI   r   c                *    |                                  S rM   r   r   s    r-   <lambda>r        !))++ rI   c                B    t                               |           d         S r   r   r   r   s    r-   r  r        a1C rI   c                v   t          dt          d          fdt          d          fd                                          }|dz   }t          |j        j        j                  } | |          }t          |j        j        j                  dk    sJ t          |j        j        j                  |k    sJ d S )NrZ   r   ri  rq   )r   r   ry   r   r	  r,   r   )r   ro  r,  r6  s       r-   test_persist_Datasetr    s     
#uQxx#uQxxAA	B	B	H	H	J	JB	aBBFKA
'"++Csw| !!Q&&&&rv{  A%%%%%%rI   c                *    |                                  S rM   r  r   s    r-   r  r    r  rI   c                B    t                               |           d         S r   r  r   s    r-   r  r    r  rI   c                >   t                               dd          }t          |          }|dz   }t          |j        j                  } | |          }t          |j        j                  |k    sJ t          |j        j                  |j        j        k    sJ d S )Nre  r   r   rq   )r!   r  r   r   r,   r   npartitions)r   rZ   r[   rt  r,  zzs         r-   test_persist_DataArrayr    s     			"T	""A!A	AAAFKA	Bqv{q    rw| 3333333rI   c                 (   dd l } t          j        dt                              dd                    }t          j        dt                              dd          dz            }t          j                            dd	          d
z   }t          j        |ddg          }||j        d<   ||j        d<   t          |	                                          | 
                    |	                                |	                                |	                                          k    sJ t                              |          \  }t                              |          rJ t          d |j                                        D                       sJ d S )Nr   rZ      )r   r   r[   r   )r  r  )r   r   rq   rs  xxyyc              3  ^   K   | ](}t          |j        j        t          j                  V  )d S rM   )r7   	_variabler,   r#   r;   )ru   rC   s     r-   	<genexpr>z2test_dataarray_with_dask_coords.<locals>.<genexpr>  s3      XXAz!+*BJ77XXXXXXrI   )toolzr   r   r!   r  r$   r   r=   dictr   r^  r   r*   r   r   r\   )r  rZ   r[   r,   r   array2s         r-   test_dataarray_with_dask_coordsr    sm   LLL
C1T2233A
C1T22Q677A9F622Q6DLS#J///EELEL$$&&''5;;q//1113C3C3E3E, ,     U##IV&&v.....XXAUAUAWAWXXXXXXXXXXrI   c                    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	        
                    |          5  |                                  | j                                         | j        j                                         d d d            n# 1 swxY w Y   d S )NrZ   r   ri  r   r3   )r   r   ry   r   threadedrk  multiprocessinglocalget_syncr5   r6   r*   r	  r   )ro  rk  s     r-   test_basic_computer    s   	#uQxx#uQxxAA	B	B	H	H#q	R	RB!4#7#;TZ=PRVW & &[__s_++ 	& 	&JJLLLFNNFO##%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&& &s   AC33C7	:C7	c                    t          dt          d          fdt          d          fd                                          } t                              |           }t          |                                j                                      |                                 j                  sJ t          |j	                                        j                                      |                                 j                  sJ d S )NrZ   r   ri  )
r   r   ry   r   delayedr6   r   dependencies
issupersetr	  )ro  rZ   s     r-   !test_dask_layers_and_dependenciesr    s    	#uQxx#uQxxAA	B	B	H	H	J	JBRAq!!.//::
(     qu##%%233>>
(      rI   c            	        t          j        t          j        d          ddgt          j        d          t          j        dd          dd	                              d
dd          } d| j        j        d<   d| j        d<   d| j        d<   | j        dz  | j        d<   | j        | j	        z                      d
dd          | j        d<   | S )Nre     rZ   r[   re  rP  x   rY   rG  )r{   r=   r
  r   r   	long_namerA         ?r%  r   ndcoordcxy)
r   r   r#   r  r  ry   rZ   attrsr=   r[   )r!   s    r-   make_dar  	  s    	
3ZYr]]3)<)<==	
 
 

 e!!  "BDJ{BHVBIdO4!8BIirt**+;+;<<BIeIrI   c                    t          j                    } t                      | d<   | j        dz   | d<   | j        dz   | d<   |                     ddd          } d	g d
f| d<   g d| d	<   | j        | j        z   | d<   d| j        d<   dt          j	        t          | j                            f| j        d<   d| j        d         j        d<   d| j        d<   | d         | j        z  | j        d<   d| j        j        d<   d| j        j        d<   | S )NrG  2   rH  r  r)  r   r   rY   rt  )rq   rq   rq   rq   r(  )r   rq   r   rn   er  r#  rZ   cxtest2rA   r  r  r[   )r   r   r  rG  rZ   ry   r[   r=   r#   r  r   r  map_dss    r-   make_dsr    s	   Z\\F))F3K(R-F3K(R-F3K\\**++F%F3K,,F3K(VX%F3KFM$	#fh-- 8 89FM$)0FM$g&!FL +0FM$"%FHN;"%FHN;MrI   c                     t                      S rM   )r  rH   rI   r-   map_dar   1      99rI   c                     t                      S rM   )r  rH   rI   r-   r  r  6  r!  rI   c           	        |                                  }|j                            ddi          |d<   t          j        t
          d          5  |j         d d d            n# 1 swxY w Y   ddd}t                      5  |                                j        }d d d            n# 1 swxY w Y   ||k    sJ t          | |                                           t          j        |j        |                    d                    \  }}|j        d	k    sJ |j        |k    sJ |d         }t          j        |                    d
di          |j                            ddi                    \  }}|j        d	k    sJ |j        dk    sJ t          j        t
          d          5  t          j        ||                    t          d                               d d d            d S # 1 swxY w Y   d S )Nr[   re  r  inconsistent chunksr   r   r   r   r   r   r   r   rY   )r%  r&  rZ   r   )r&  r%  z$Dimension 'x' size mismatch: 10 != 2r   r   )rh   r  ry   r'   r(   r  r   r   unify_chunksr   r   	drop_varsr   iselr   )r  ds_copyexpected_chunksactual_chunksout_aout_br!   s          r-   test_unify_chunksr/  ;  s   kkmmG[&&Ry11GEN	z)?	@	@	@                 &L99O		!	! 6 6,,..56 6 6 6 6 6 6 6 6 6 6 6 6 6 6O++++VW1133444?7;0A0A%0H0HIILE5<44444<?**** 
B?288S"I#6#6

C98M8MNNLE5<44444<44444 
z)P	Q	Q	Q 1 1
BGGeAhhG//0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s6   A##A'*A'B''B+.B+*7G..G25G2obj	transformc                *    |                                  S rM   )r*   r   s    r-   r  r  Y  s    AIIKK rI   c                *    |                                  S rM   )r'  r   s    r-   r  r  Y  s    1>>3C3C rI   c                     ||           } |                                  }t          | |          o| |                                  u d S  d S rM   )r'  r   )r0  r1  unifieds      r-   test_unify_chunks_shallow_copyr6  W  sW    
 )C..C  GS'""Ds#2B2B2D2D'D'D'D'DDDDrI   c                    |                      d          j        }| j                            d          }t          j                            ||           |j        |j        k    sJ d S )Nauto)ry   r,   rechunkr#   testingr   r   )r0  r@   r?   s      r-   test_auto_chunk_dar;  a  s^    YYv#Fx''HJ!!&(333=HO++++++rI   c           	        d }t          j        t          d          5  t          j        ||                                            d d d            n# 1 swxY w Y   d }t          j        t          d          5  t          j        ||            d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        t          j        | d           d d d            n# 1 swxY w Y   t          j        t          d	          5  t          j        t          j        | dgd
g           d d d            n# 1 swxY w Y   d }t          j        t          d          5  t          j        ||            d d d            n# 1 swxY w Y   |
                                }|j                            ddi          |d<   t          j        t          d          5  t          j        ||           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        || t          |                                                      d d d            d S # 1 swxY w Y   d S )Nc                D    | | j         z  d| j        z  z   d dd df         S )Nr   rq   rY   darrays    r-   bad_funcz'test_map_blocks_error.<locals>.bad_funcj  s+    !AL0"1"bqb&99rI   "Received dimension 'x' of length 1r   c                6    | | j         z  d| j        z  z   j        S Nr   )rZ   r[   r\   r>  s    r-   returns_numpyz,test_map_blocks_error.<locals>.returns_numpyp  s    !AL088rI   z(Function must return an xarray DataArrayzargs must bere  rl  zkwargs must ber  )rl  rU  c                     t          d          )Nzcouldn't do anything.)r  r>  s    r-   really_bad_funcz.test_map_blocks_error.<locals>.really_bad_func|  s    0111rI   zCannot inferr[   r  r$  zCannot pass dask collectionsrG  rU  )r'   r(   r  r   
map_blocksr*   	TypeErrorrJ  add	Exceptionrh   r  ry   r  )r   r  r@  rD  rG  r*  s         r-   test_map_blocks_errorrN  i  s<   : : : 
z)N	O	O	O 2 2
h''//1112 2 2 2 2 2 2 2 2 2 2 2 2 2 29 9 9 
y(S	T	T	T - -
mV,,,- - - - - - - - - - - - - - - 
y	8	8	8 5 5
hlF44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
y(9	:	:	: D D
hlF"rdCCCCD D D D D D D D D D D D D D D2 2 2 
y	8	8	8 / /
ov.../ / / / / / / / / / / / / / / kkmmG[&&Ry11GEN	z)?	@	@	@ ) )
h((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 
y(G	H	H	H G G
htfllnn/E/E/EFFFFG G G G G G G G G G G G G G G G G Gs}   (AAA<BB"%B""C22C69C6%E		EE2FFF-HHH58I::I>I>c                    d }t                      5  t          j        ||           }d d d            n# 1 swxY w Y    ||           }t          |                                |           t          ||           d S )Nc                0    | | j         z   d| j        z  z   }|S rC  rY   r0  results     r-   rC  ztest_map_blocks.<locals>.func      suq35y(rI   r   r   rJ  r   ry   r   r0  rC  r@   r?   s       r-   test_map_blocksrV    s       
 	!	! * *tS))* * * * * * * * * * * * * * *tCyyH((&111VX&&&&&s   488c                   d }t                      5  t          j        || d| g          }d d d            n# 1 swxY w Y    || d|           }t          |                                |           t          ||           d S )Nc                0    | | j         z   d| j        z  z   }|S rC  rY   )obj1non_xarray_inputobj2rR  s       r-   rC  z/test_map_blocks_mixed_type_inputs.<locals>.func  s    TV+rI   rZ  rE  rT  rU  s       r-   !test_map_blocks_mixed_type_inputsr\    s       
 	!	! J JtS0BC/HIIIJ J J J J J J J J J J J J J JtC+S11H((&111VX&&&&&s   8<<c                   | dz   }t                      5  t          j        t          j        | dg          }d d d            n# 1 swxY w Y   t          |                                |           t          ||           d S )Nre  )r   r   rJ  rJ  rL  r   ry   r   r0  r?   r@   s      r-   $test_map_blocks_convert_args_to_listr_    s    RxH		!	! 8 8x|S2$778 8 8 8 8 8 8 8 8 8 8 8 8 8 8((&111VX&&&&&s   "AA	Ac            
     	   t          j        t          j        d          ddgt          j        d          t          j        d          d                              dd	d          } d
 }| dz   }t                      5  t          j        || |g          }d d d            n# 1 swxY w Y   t           j        	                    | |z   |           | dz   
                    dd          }t                      5  t          j        t          j        | |g          }d d d            n# 1 swxY w Y   t           j        	                    | |z   |           | dz   
                    dd                              ddi          }t                      5  t          j        t          j        | |g          }d d d            n# 1 swxY w Y   t           j        	                    | |z   |           t          j        t           d          5  t          j        t          j        | |                     ddi          g           d d d            n# 1 swxY w Y   t          j        t           d          5  t          j        t          j        | |                     t          j        d                    g           d d d            n# 1 swxY w Y   |                     ddi          } | dz   }t                      5  t          j        d | |g          }d d d            n# 1 swxY w Y   t           j        	                    | |z                       d          |           |                     ddi          } | dz   }t                      5  t          j        d | |g|                     d                    }d d d            n# 1 swxY w Y   t           j        	                    | |z                       d          |           t          j        t           d          5  t          j        d | |g|                     d                                                     d d d            d S # 1 swxY w Y   d S )Nr  rZ   r[   re  r  rY   r  r   r   c                0    | j         |j         k    sJ | |z   S rM   )shape)da1da2s     r-   sumdaz(test_map_blocks_dask_args.<locals>.sumda  s!    yCI%%%%SyrI   rq   rE  T)rZ   r  rB   zChunk sizes along dimension 'x'r   z"cannot align.*index.*are not equalr   r   c                2    | |z                        d          S NrZ   sumr  s     r-   r  z+test_map_blocks_dask_args.<locals>.<lambda>  s    QUKK,<,< rI   c                2    | |z                        d          S rg  rh  r  s     r-   r  z+test_map_blocks_dask_args.<locals>.<lambda>      !a%S)) rI   )rl  templatez$Provided template has no dask arraysc                2    | |z                        d          S rg  rh  r  s     r-   r  z+test_map_blocks_dask_args.<locals>.<lambda>  rk  rI   )r   r   r#   r  r  ry   r   rJ  r:  r   r)  rJ  rL  r_  r'   r(   r  rT  ri  r*   )rc  re  rd  mappeds       r-   test_map_blocks_dask_argsro    sI   
,
3ZYr]]277   e!!	    'C		!	! 7 7uc6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7JC#Iv... 7..14.
(
(C		!	! > >x|Su===> > > > > > > > > > > > > > >JC#Iv... 7..14.
(
(
/
/c

;
;C		!	! > >x|Su===> > > > > > > > > > > > > > >JC#Iv...	z)K	L	L	L E E
hlCsyy#q/B/B.CDDDDE E E E E E E E E E E E E E E 
z)N	O	O	O N N
hlCs{{RYr]]{/K/K.LMMMMN N N N N N N N N N N N N N N ))S"I

C
'C		!	! O O<<cNNNO O O O O O O O O O O O O O OJS3YOOC00&999 ))S"I

C
'C		!	! 
 
))3cUSWWS\\
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 JS3YOOC00&999 
z)O	P	P	P 
 

))WWS\\))++		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   ?B$$B(+B(:#D))D-0D-#GG
G8III6A	KKK L&&L*-L*.OOO'A Q44Q8;Q8c                R   d } ||           }t                      5  t          j        ||           }d d d            n# 1 swxY w Y   t          ||           t                      5  t          j        || |           }d d d            n# 1 swxY w Y   t          ||            d S )Nc                d    |                      d          } d| j        d<   d| j        j        d<   | S )NTrf   newnew2)rh   r  r  r0  s    r-   	add_attrsz,test_map_blocks_add_attrs.<locals>.add_attrs  s4    hhDh!! 	% &f
rI   rl  r   r   rJ  r   )r0  ru  r?   r@   s       r-   test_map_blocks_add_attrsrx    s3      y~~H		!	! / /y#../ / / / / / / / / / / / / / / VX&&& 
 	!	! = =y#<<<= = = = = = = = = = = = = = =VS!!!!!s!   ?AA(BBBc                    d } ||           }t                      5  t          j        ||           }d d d            n# 1 swxY w Y   t          ||           d S )Nc                @    |                      d          } d| _        | S )NTrf   rr  )rh   r
  rt  s    r-   change_namez0test_map_blocks_change_name.<locals>.change_name  s!    hhDh!!
rI   rw  )r   r{  r?   r@   s       r-   test_map_blocks_change_namer|     s      
 {6""H		!	! 4 4{F334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 VX&&&&&s   ?AAc                h   t          j        | t          j                  }t	                      5  t          j        t           j        | t          t          j                            }d d d            n# 1 swxY w Y   t          |                                |           t          ||           d S )N)
fill_valuerI  )
r   	full_liker#   r   r   rJ  r  r   ry   r   r^  s      r-   test_map_blocks_kwargsr    s    |CBF333H		!	! R Rr|S9P9P9PQQQR R R R R R R R R R R R R R R((&111VX&&&&&s   :A55A9<A9c                    t                      5  t          j        d |           }d d d            n# 1 swxY w Y   t          ||                                            d S )Nc                *    |                                  S rM   )rY  r   s    r-   r  z*test_map_blocks_to_array.<locals>.<lambda>  s     rI   )r   r   rJ  r   rY  )r  r@   s     r-   test_map_blocks_to_arrayr    s    		!	! ? ?55v>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? **+++++s   266rC  c                    | S rM   rH   r   s    r-   r  r  !      ! rI   c                *    |                                  S rM   )r  r   s    r-   r  r  "  s    !,,.. rI   c                ,    |                      d          S rg  r(  r   s    r-   r  r  #      !++c"" rI   c                2    |                      g d          S N)rq   r   rn   rB   expand_dimsr   s    r-   r  r  $      !--)))-,, rI   c                .    |                      d          S Nrn   r  r  r   s    r-   r  r  %      !--!-$$ rI   c                L    |                      d| j        j        dz  f          S )Nr[   r   )	new_coord)rS  r[   r,   r   s    r-   r  r  &  s!    !//S!#(Q,,?/@@ rI   c                @    |                      t          j                  S rM   )astyper#   int32r   s    r-   r  r  '  s    !((28$$ rI   c                    | j         S rM   r   r   s    r-   r  r  (      !# rI   c                    t                      5  t          j        | |          }d d d            n# 1 swxY w Y   t          | | |                     d S rM   rw  )rC  r   r@   s      r-   "test_map_blocks_da_transformationsr         
 	!	! - -tV,,- - - - - - - - - - - - - - - VTT&\\*****   155c                    | S rM   rH   r   s    r-   r  r  5  r  rI   c                ,    |                      d          S Nr  r  r   s    r-   r  r  6  s    !++e$$ rI   c                ,    |                      d          S )NrG  r  r   s    r-   r  r  7  r  rI   c                ,    |                      d          S rg  r  r   s    r-   r  r  8  r  rI   c                2    |                      g d          S r  r  r   s    r-   r  r  9  r  rI   c                .    |                      d          S r  r  r   s    r-   r  r  :  r  rI   c                2    |                      ddd          S )Nnew1rs  r  r_  r   s    r-   r  r  ;  s    !((f5566 rI   c                    | j         S rM   r   r   s    r-   r  r  <  r  rI   c                    t                      5  t          j        | |          }d d d            n# 1 swxY w Y   t          | | |                     d S rM   rw  )rC  r  r@   s      r-   "test_map_blocks_ds_transformationsr  2  r  r  c                p   d }|                      g d          }t                      5  t          j        || |          }d d d            n# 1 swxY w Y   t	          ||           t                      5  |                     ||          }d d d            n# 1 swxY w Y   t	          ||           d S )Nc                0    |                      dg          S Nrq   r   r)  r   s    r-   r  z5test_map_blocks_da_ds_with_template.<locals>.<lambda>H  s    QVVqcV]] rI   rq   r   	   r   rv  )r)  r   r   rJ  r   )r0  rC  rl  r@   s       r-   #test_map_blocks_da_ds_with_templater  F  s4   ""Dxx)))x$$H		!	! = =tS8<<<= = = = = = = = = = = = = = =VX&&&		!	! 9 9x889 9 9 9 9 9 9 9 9 9 9 9 9 9 9VX&&&&&s#   AAA7BB"Bc                 2   t                      } d }|                                                     g d          }t                      5  t	          j        || |          }d d d            n# 1 swxY w Y   t          ||           |                                 }d }|                                                    g d          }t                      5  t	          j        |||          }d d d            n# 1 swxY w Y   t          ||           d S )Nc                T    |                                                      dg          S r  )r  r)  r   s    r-   r  z9test_map_blocks_template_convert_object.<locals>.<lambda>U  s!    Q\\^^((A3(// rI   r  r   rv  c                T    |                                                      dg          S r  )rY  r)  r   s    r-   r  z9test_map_blocks_template_convert_object.<locals>.<lambda>\  s!    QZZ\\&&!&-- rI   )r  r  r)  r   r   rJ  r   rY  )r!   rC  rl  r@   ro  s        r-   'test_map_blocks_template_convert_objectr  S  s   	B//D}}##iii#00H		!	! < <tR(;;;< < < < < < < < < < < < < < <VX&&&	B--D{{}}!!III!..H		!	! < <tR(;;;< < < < < < < < < < < < < < <VX&&&&&s$   
A..A25A2C<<D D c           	     v   t          j        t          d          5  t          j        d | |                                            d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        d | |                                            d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        d | |                                            d d d            n# 1 swxY w Y   t          j        t          d	          5  t          j        d
 | |                                            d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        d | | f                                           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        d | |                     dg                                                     d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        d | |                     g d                                                     d d d            d S # 1 swxY w Y   d S )Nzunexpected coordinate variablesr   c                .    |                      d          S )Nre  rH  rS  r   s    r-   r  z5test_map_blocks_errors_bad_template.<locals>.<lambda>f  s    " 5 5 rI   rv  z%does not contain coordinate variablesc                ,    |                      d          S r  r  r   s    r-   r  z5test_map_blocks_errors_bad_template.<locals>.<lambda>h  s    E 2 2 rI   zDimensions {'x'} missingc                .    |                      d          S r  r  r   s    r-   r  z5test_map_blocks_errors_bad_template.<locals>.<lambda>j  s     rI   rA  c                0    |                      dg          S r  r  r   s    r-   r  z5test_map_blocks_errors_bad_template.<locals>.<lambda>l      ! rI   zmust be a DataArrayc                0    |                      dg          S r  r  r   s    r-   r  z5test_map_blocks_errors_bad_template.<locals>.<lambda>n  r  rI   z"map_blocks requires that one blockc                X    |                      dg                              d          S )Nrq   r   re  r)  rS  r   s    r-   r  z5test_map_blocks_errors_bad_template.<locals>.<lambda>q  s%    affsfmm11B177 rI   rq   r   zExpected index 'x' to bec                Z    |                      dg                              dg          S )Nrq   r   r  r  rH  s    r-   r  z5test_map_blocks_errors_bad_template.<locals>.<lambda>u  s'    affsfmm11SE1:: rI   r  )r'   r(   r  r   rJ  r*   rK  r)  rt  s    r-   #test_map_blocks_errors_bad_templater  c  s   	z)K	L	L	L T T
55sSIIIQQSSST T T T T T T T T T T T T T T	z)Q	R	R	R Q Q
22C#FFFNNPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q	z)D	E	E	E J J
++S3???GGIIIJ J J J J J J J J J J J J J J	z)N	O	O	O L L
--sSAAAIIKKKL L L L L L L L L L L L L L L	y(>	?	?	? O O
--scVDDDLLNNNO O O O O O O O O O O O O O O	z)N	O	O	O  
77sxxSTRUx	
 	
 	

')))               
z)D	E	E	E  
::XX			X**	
 	
 	
 ')))                 s   +AAA9+B00B47B4+DDD3+E**E.1E.,GGG.A H::H>H> AJ..J25J2c                    t          j        t          d          5  t          j        d | |                                            d d d            d S # 1 swxY w Y   d S )Nz!unexpected data variables {'xyz'}r   c                .    |                      d          S )Nrq   )xyz)assignr   s    r-   r  z7test_map_blocks_errors_bad_template_2.<locals>.<lambda>}  s    Q rI   rv  )r'   r(   r  r   rJ  r*   r  s    r-   %test_map_blocks_errors_bad_template_2r  {  s    	z)M	N	N	N T T
//&IIIQQSSST T T T T T T T T T T T T T T T T Ts   +AAAc                    d }t                      5  t          j        ||           }|                     |          }d d d            n# 1 swxY w Y   t          ||           d S )Nc                0    | | j         z   d| j        z  z   }|S rC  rY   rQ  s     r-   rC  z+test_map_blocks_object_method.<locals>.func  rS  rI   rw  )r0  rC  r?   r@   s       r-   test_map_blocks_object_methodr    s       
 	!	! & &=s++%%& & & & & & & & & & & & & & & Xv&&&&&s   +A		AAc                 $   t          j        dt          j                            dd          fdt          j                            dd          fd          } |                     d           }t           j                            ||            d S )NrH  re  r  r   )rH  )rZ   rt  c                    | S rM   rH   r   s    r-   r  z,test_map_blocks_hlg_layers.<locals>.<lambda>  s    Q rI   )r   r   r   r   r  rJ  r:  r   )ro  rn  s     r-   test_map_blocks_hlg_layersr    s    	$*//"T/::;$*//"T/::;	
 	

 
B ]];;''FJFB'''''rI   c                (   ddl m}  ||           }| j        D ]8}||j        v sJ |j        |         j        d|j        |         j        z  k    sJ 9| j        D ]8}||j        v sJ |j        |         j        d|j        |         j        z  k    sJ 9d S )Nr   )	make_meta)r   )xarray.core.parallelr  _coord_namesr=   rb  ndimr+  )r  r  metar   s       r-   test_make_metar    s    ......9VD' P P4,,,,,{8$*dT[5J5O.OOOOOO$ V V4>))))~h'-x8P8U1UUUUUUV VrI   c                    t          j        t                              dd          d          } t          j        t                              dd          dd| i          }t          j        t                              dd          dd| i          }t	                      5  ||z   }d d d            n# 1 swxY w Y   t          ||           d S )Nre  re  r   r   r[   rZ   rs  lonsr  )r   r   r!   zerosr   r   )lons2rG  rH  r)  s       r-   !test_identical_coords_no_computesr    s   L(155JGGGE

!$$:vuo	 	 	A 	
!$$:vuo	 	 	A 
 	!	!  E              Qs   %B77B;>B;c                *    |                                  S rM   reset_coordsr   s    r-   r  r    s    !.."" rI   c                .    |                      d          S )NTr  r  r   s    r-   r  r    s    !..d.++ rI   c                .    |                      d          S r  r  r   s    r-   r  r    s    !&&1&++ rI   c                8    | j                             d          S )Nrq   )	new_attrs)r  updater   s    r-   r  r    s    !'..1.-- rI   c                .    |                      d          S )Nrq   r  r  r   s    r-   r  r    s    !//a/(( rI   c                0    |                      ddi          S )NrZ   xnewr  r   s    r-   r  r    s    !((C=)) rI   c                0    |                      ddi          S )Nr  cxynewr  r   s    r-   r  r    s    !((E8,-- rI   c                    t                      5  t          j                            |           t          j                             ||                     k    sJ 	 d d d            d S # 1 swxY w Y   d S rM   )r   r   r   r   r0  r1  s     r-   test_token_changes_on_transformr    s      
 	!	! M My!!#&&$)*<*<YYs^^*L*LLLLLLM M M M M M M M M M M M M M M M M Ms   AA))A-0A-c                   t                      5  t          j                            |           }d d d            n# 1 swxY w Y   t	          | t
                    r| dz  } n| dxx         dz  cc<   t                      5  t          j                            |           }d d d            n# 1 swxY w Y   ||k    sJ | j        dxx         dz  cc<   t                      5  t          j                            |           }d d d            n# 1 swxY w Y   ||k    sJ |                     | j        dz            } t                      5  t          j                            |           }d d d            n# 1 swxY w Y   ||k    sJ d S )Nr   rG  r  r   )	r   r   r   r   r7   r   r=   rS  rZ   )r0  t1t2t3t4s        r-   $test_token_changes_when_data_changesr    sy    
 	!	! % %Y$$% % % % % % % % % % % % % % % #y!! qCA		!	! % %Y$$% % % % % % % % % % % % % % %8888 JyQ		!	! % %Y$$% % % % % % % % % % % % % % %8888 

ceai

(
(C		!	! % %Y$$% % % % % % % % % % % % % % %888888sC    ;??? B++B/2B/! DDD E88E<?E<c                0   t                      5  t          j                            |           }d d d            n# 1 swxY w Y   t	          | t
                    rd| d<   nd| d         d<   t                      5  t          j                            |           }d d d            n# 1 swxY w Y   ||k    sJ d| j        d         d<   t                      5  t          j                            |           }d d d            n# 1 swxY w Y   ||k    sJ d S )N{   )r   r   rG  r  r   )r   r   r   r   r7   r   r=   )r0  r  r  r  s       r-   &test_token_changes_when_buffer_changesr    s   		!	! % %Y$$% % % % % % % % % % % % % % % #y!! D		C		!	! % %Y$$% % % % % % % % % % % % % % %8888"CJy!		!	! % %Y$$% % % % % % % % % % % % % % %888888s1    ;??: B&&B*-B* DD
Dc                    | S rM   rH   r   s    r-   r  r    s    q rI   c                .    |                      d          S )NFrf   rh   r   s    r-   r  r    s    AFFF.. rI   c                .    |                      d          S re   r  r   s    r-   r  r    s    !&&d&:K:K rI   rG  c                   t                      5  t          j                            |           t          j                             ||                     k    sJ 	 d d d            n# 1 swxY w Y   t          j                            |                                           t          j                             ||                                                     k    sJ d S rM   )r   r   r   r   r*   r  s     r-   test_token_identicalr    s    
 	!	! M My!!#&&$)*<*<YYs^^*L*LLLLLLM M M M M M M M M M M M M M M9ckkmm,,	0B0B	#++--  1 1      s   AA((A,/A,c                    t          j        d          } t          j        d          }d|d<   t          |           t          |          k    sJ t          j                            |           t          j                            |          k    sJ t          |           }t          |          }t          j                            |          t          j                            |          k    sJ |                    d          }|                    d          }t          j                            |          t          j                            |          k    sJ t          | dgd| i          }t          | dgd|i          }t          j                            |          t          j                            |          k    sJ dS )zdTest that tokenization is invoked recursively, and doesn't just rely on the
    output of str()
    r   r   i  rZ   r  r  N)r#   r  r   r   r   r   r   r  )rG  rH  da_ada_bds_ads_bs         r-   test_recursive_tokenr     s    	A
AAdGq66SVV9a  DI$6$6q$9$99999 Q<<DQ<<D9d##ty'9'9$'?'????? ???$$D???$$D9d##ty'9'9$'?'????? QcUC8444DQcUC8444D9d##ty'9'9$'?'???????rI   c                `   t          t                    5 }|                     |           t          j        |          }t
          j                            |           t
          j                            |          k    rJ |                                 d d d            d S # 1 swxY w Y   d S )N)allow_cleanup_failure)	r   
ON_WINDOWS	to_netcdfr   open_datasetr   r   r   close)r  tmp_filereads      r-   !test_normalize_token_with_backendr	     s    	z	:	:	: h"""x((9%%f--1C1CD1I1IIIII

	                 s   B B##B'*B'r/  )broadcast_equalsr   r   no_conflictsc                   t          j        dt                              dd                    }t          j        dt                              dd                    }t          j        dt                              dd                    }t	                      5   t          ||           |t                    sJ 	 d d d            n# 1 swxY w Y   t	                      5   t          ||           |dz  t                    J 	 d d d            n# 1 swxY w Y   t	                      5   t          ||           |t                    du sJ 	 d d d            n# 1 swxY w Y    t          ||           |                                t                    J  t          |                                |           |                                t                    J t	                      5   t          ||           |                    dd	                    sJ 	 d d d            d S # 1 swxY w Y   d S )
Nr  r  r   r   r  re  )equivFr[   rZ   )	r   r   r!   r  r   r  r
   r*   	transpose)r/  var1var2var3s       r-   test_lazy_array_equiv_variablesr  )  sN    ;z288HQ8#?#?@@D;z288HQ8#?#?@@D;z288HQ8#?#?@@D		!	! C C$wtV$$T1ABBBBBBBC C C C C C C C C C C C C C C 
 	!	! O O$wtV$$TAX5EFFFNNNNO O O O O O O O O O O O O O O 
 	!	! L L$wtV$$T1ABBBeKKKKKL L L L L L L L L L L L L L L !74  7GHHHPPP'''>NOOOWWW 
 	!	! ? ?$wtV$$T^^C%=%=>>>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sH   #CCC%&DDD1%E##E'*E'60H44H8;H8c                   t          j        t                              dd          d          }t          j        t                              dd          d          }t          j        t                              dd          d          }t                      5  t          j        ||g|            d d d            n# 1 swxY w Y   t          d	          5  t          j        t                    5  t          j        ||g|            d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          d	          5  t          j        ||dz  g|            d d d            d S # 1 swxY w Y   d S )
Nr  r   r   r  rs  r  )r/  r   max_computes)
r   r   r!   r  r  r   r^  r'   r(   r  )r/  rc  rd  da3s       r-   test_lazy_array_equiv_merger  E  sd    ,rxxx33*
E
E
EC
,rxxx33*
E
E
EC
,rwwxw22
D
D
DC		!	! , ,
#sF++++, , , , , , , , , , , , , , , 
 Q	/	/	/ 0 0]:&& 	0 	0Hc3Z////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 Q	/	/	/ 0 0
#sQw////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0sZ   CCCD59DD5D"	"D5%D"	&D55D9<D9E99E= E=zignore::FutureWarningc                .    |                      d          S )Nanew)new_attr)assign_attrsrH  s    r-   r  r  \  s    !..&.11 rI   c                8    |                      | j                  S )Nr  )rS  r  rH  s    r-   r  r  ]  s    !//ae/,, rI   c                *    |                                  S rM   r  rH  s    r-   r  r  ^  s    !&&(( rI   c                h    |                      t          j        | j        d                             S rX  )r)  r#   r  sizesrH  s    r-   r  r  _  s$    !&&29QWS\22&33 rI   c                H    |                      t          d                     S Nr   )r)  r   rH  s    r-   r  r  `  s    !&&5;;&'' rI   c                R    | j         t          t          d                              S r"  )locr  r   rH  s    r-   r  r  a  s    !%uT{{+++, rI   c                r    | j         t          t          j        | j        d                                      S rX  )r$  r  r#   r  r   rH  s    r-   r  r  b  s(    !%ry667778 rI   c                B    | j         t          | j                           S r"  )r$  r  rZ   rH  s    r-   r  r  c  s    !%qs$ rI   c                8    |                      | j                  S r"  )selrZ   rH  s    r-   r  r  d  s    !%%!#%,, rI   c                B    |                      | j        j                  S r"  )r(  rZ   r\   rH  s    r-   r  r  e  s    !%%!#*%%% rI   c                ,    |                      d          S )N.)r  rH  s    r-   r  r  f  r  rI   c                *    |                                  S rM   )r   rH  s    r-   r  r  g  s    !))++ rI   c                ,    |                      d          S rg  )sortbyrH  s    r-   r  r  h  s    !((3-- rI   c                8    |                      | j                  S r"  )rT  rZ   rH  s    r-   r  r  i  s    !))ac)"" rI   c                ,    |                      |           S rM   )reindex_likerH  s    r-   r  r  j  s    !..## rI   c                Z    |                      ddi                               ddi          S )Nr  cnewr  rH  s    r-   r  r  k  s(    !((E6?++22FE?CC rI   c                .    |                      d           S )Nc                    | S rM   rH   r   s    r-   r  z<lambda>.<locals>.<lambda>l  s    1 rI   )piperH  s    r-   r  r  l  s    !&&%% rI   c                \    t          j        | t          j        |                     d         S r   )r   align
zeros_likerH  s    r-   r  r  m  s!    "(1bmA..//2 rI   c                    t                      5  t          |  ||                      d d d            d S # 1 swxY w Y   d S rM   )r   r   r  s     r-   %test_transforms_pass_lazy_array_equivr:  W  s    : 
 	!	! * *S))C..)))* * * * * * * * * * * * * * * * * *s   6::c                   t                      5  t          |j                            |j                  |j                   t          t	          j        |j        |j                  d         |j                   t          |                    d           |           t          |                    d                              d          |           t          |	                    d|j
        i          |           t          |                    ddi                              ddi          |           t          |                     |                                           |            t          |                     | j                  |            t          |                     ddd	          j        | j                   d d d            d S # 1 swxY w Y   d S )
Nr   c                    | S rM   rH   r   s    r-   r  z<test_more_transforms_pass_lazy_array_equiv.<locals>.<lambda>|  s    ! rI   rG  r  r2  r[   rZ   F)transpose_coords)r   r   r  broadcast_liker   	broadcastmap
set_coordsr  r  rG  rename_vars_from_temp_dataset_to_temp_datasetr  r  r  )r   r  s     r-   *test_more_transforms_pass_lazy_array_equivrE  x  s   		!	! Y YVZ..vz::FJGGGR\&*fj99!<fjIIIVZZ,,f555V&&s++88==vFFFV]]C?33V<<< 	v//;;VUOLLf	
 	
 	
 	V..v/F/F/H/HII6RRRV]]6<00&999V%%c3%GGKVZXXX%Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Ys   F6GGGc                     t           j                            dd          } t          j        |                               d          }t                               |          \  }|                                 d S )N)re  r   )r   r   r   r   )r   r   r  r   r   ry   optimizer*   )rG  r   arr2s      r-   test_optimizerI    sX    
//A
,q//


"
"CmmC  GTLLNNNNNrI   c                 b   ddl m}  t          dgddg                              d                              d          dz  }t	          |          }t          |d         |d         dddgfd	          }|                     |||          \  }}}t          ||           t          ||           t          ||           ||f||f||ffD ]\  }}|                                |                                k    sJ t          |                                          t          |                                          k    sJ |
                                                                |
                                                                k    sJ t          |
                                          t          |
                                          k    sJ |
                                j                                        |
                                j                                        k    sJ t          |
                                j                  t          |
                                j                  k    sJ t          |j        |j        z   |j        |j        z              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   NrZ   rq   r   r   rn   r   )r"  r$  r&  )dask.graph_manipulationgraph_manipulationr   ry   r   r   cloner   __dask_layers__r   r   keyslayersr"  r$  )	gmrC   r!   ro  r   rd  r6  rG  rH  s	            r-   test_graph_manipulationrR    s~   
 )(((((#A%%b))//22Q6A	1B	!AaDq!f>>	?	?B88Ar2&&LBSQbbR2s)b#Y/ P P1  ""a&7&7&9&999991$$&&''3q/@/@/B/B+C+CCCCC!!&&((A,<,<,>,>,C,C,E,EEEEE1##%%&&#a.>.>.@.@*A*AAAAA!!(--//13C3C3E3E3L3Q3Q3S3SSSSS1##%%,--Q5E5E5G5G5N1O1OOOOOO #&"%"%-00000rI   c                     t           j                            t          j        ddg                    } t	          d          5  t          dd| fi           d d d            d S # 1 swxY w Y   d S )NrP     rq   r  rt  )r=   )r   r   r"   r#   r   r   r+   s    r-    test_new_index_var_computes_oncerU    s    :  3*!5!566D	Q	/	/	/ + +c4[)****+ + + + + + + + + + + + + + + + + +s   A&&A*-A*)h
__future__r   rJ  r   sys
contextlibr   textwrapr   numpyr#   pandasry  r'   xarrayr   r   r   r   xarray.corer	   xarray.core.duck_array_opsr
   xarray.testingr   xarray.testsr   r   r   r   r   r   r   r   r   xarray.tests.test_backendsr   importorskipr   r!   r  platformr  r.   r0   rK   r  r  r   r   r  r  r  r   r  r   r  r  r  r  r  r  r  r   r   r  r/  r6  r;  rN  rV  r\  r_  ro  rx  r|  r  r  r  r  r  r  r  r  r  r  r  r  r*   r  r  r  r8   r  r   r	  r  r  filterwarningsr:  rE  rI  rR  rU  rH   rI   r-   <module>re     s9   " " " " " "   



                          / / / / / / / / / / & & & & & & 7 7 7 7 7 7 . . . . . .
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7 6 6 6 6 6v6""V&&V)**\W$
         0y5 y5 y5 y5 y5< y5 y5 y5xF7 F7 F7 F7 F7l F7 F7 F7R|2 |2 |2 |2 |2 |2 |2 |2~ FI#677> > 87> #A#A#ABB
2 
2 CB
2 #A#A#ABB
2 
2 CB
2  & & &   %%'C'CD & & & %%'C'CD 	4 	4 	4Y Y Y(& & &	 	 	     0      1 1 18 GGII 677'')C)CD E E  87E ,,, , -,, G  G  GF GGII 677	' 	' 87	' GGII 677	' 	' 87	' GGII 677' ' 87':
 :
 :
z GGII 677" " 87"&
' 
' 
' GGII 677' ' 87', , , 
  "",,$$@@$$	 + + + 
$$"""",,$$66	 + + + GGII 677	' 	' 87	'' ' '  GGII 677  87.T T T
 GGII 677	' 	' 87	'
( 
( 
(V V V
 
 
 	GGIIwwyy((**GGIIwwyy7H7H7J7JK  ""++--(())-- M M  M
 	GGIIwwyy((**GGIIwwyy7H7H7J7JK   4 !2!2!4!4ggii6G6G6I6I JKK  LK$ [..0K0KL  GGIIwwyy7J37O PQQ  RQ	 
@ @ @4    III ? ? ?2 III 0 0 0 344GGII 67711,,33'',,88$$%%""""##CC%%22% 4* *5  87 548*
Y Y Y,  1 1 1@+ + + + +rI   