U
    Cvf                 !   @  s  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZ d dlZd dlZd dlZd dlmZ d dlZd dlmZmZmZmZmZmZmZ d dlmZ d d	l m!Z! d d
l"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB zd dlCmDZD W n" eEk
r   d dlFmDZD Y nX ejGHdejGHdgZIG dd dZJG dd dZKejGLddddgejMeNd ddd dddgdddd d!ejMeNd"d#d$d"d%d&d$gdddd'd!ejMeNd#ejOd$ejOd%d&d$gdddd(d!ejMeNd#ejOd$ejOd%d&d$gPd)dddejGHd*d+d,ejMeNejOejOgejOejOd d-d!ejMejNd.d/d0d1gd2d3d ddd4d!gG d5d6 d6eKZQejGLddddgejMeNd ddd dddgdddddddgd d d7dd8d d ggdd dgdd d9gdddgd d!ejMeNd$d#d$d"d%d&d$gd&ejOd$ejOd%d&d$gejOgd: gdd ejOgd dejOgddd gd(d!ejMeNd$d#d$d"d%d&d$gd&ejOd$ejOd%d&d$gejOgd: gPd)dd ejOgd dejOgddd gejGHd;d+d,ejMejNd.d/d0d1gd/d/d/d/gd<d=d>d=ggd2d3d d dgdd dgdddgd4d!gG d?d@ d@eKZRejGLdAejMeNd ddd gdddd ggddddgddddggd d d7dgd8d d d gggdeNd ddd gd d dd ggidBeNddd d gd d d d gd d d dggidCeNd dgd d gddggieNd d dd geNddd d gdDeNdd geNddgdEeNdd d geNdd dgdFeNdeNd eNddGdeNdd d dgddd dggidBeNd d d d gd d d d gdd dd ggidCeNddgd d gdHd ggieNdd d dgeNdd d d gdDeNddgeNdHd gdEeNd d dgeNdd d gdFeNdeNdeNd dGdeNddddgddddggidBeNddddgddddgddddggidCeNddgddgddggieNddddgeNddddgdDeNddgeNddgdEeNdddgeNdddgdFeNdeNdeNddGd d!ejMeNd$d#d$d"gd%d&d$d"ggd&ejOd$ejOgd%d&d$d"ggejOgd9 ejOgd9 ggdeNdd d d gd d d d ggidBeNddd d gd dd dgejOejOejOejOggidCeNdHdgd dgejOejOggieNdd d d geNd dd d gdDeNdd geNd dgdEeNdd ejOgeNdd ejOgdFeNd eNdeNddGdeNd d d d gd d d d ggidBeNd d d d gddd dgejOejOejOejOggidCeNd dgddgejOejOggieNd d d d geNd d d d gdDeNd d geNddgdEeNd d ejOgeNd dejOgdFeNd eNd eNd dGdeNddddgddddggidBeNddddgdd dd gd d d d ggidCeNddgddgd d ggieNddddgeNd d d d gdDeNddgeNdd gdEeNdd d geNddd gdFeNdeNd eNddGd(d!ejMeNd$d#d$d"gd%d&d$d"ggd&ejOd$ejOgd%d&d$d"ggejOgd9 ejOgd9 ggPd)deNdd d d gd d d d ggidBeNddd d gd dd dgejOejOejOejOggidCeNdHdgd dgejOejOggieNdd d d geNd dd d gdDeNdd geNd dgdEeNdd ejOgeNdd ejOgdFeNd eNdeNddGdeNd d d d gd d d d ggidBeNd d d d gddd dgejOejOejOejOggidCeNd dgddgejOejOggieNd d d d geNd d d d gdDeNd d geNddgdEeNd d ejOgeNd dejOgdFeNd eNd eNd dGdeNddddgddddggidBeNddddgdd dd gd d d d ggidCeNddgddgd d ggieNddddgeNd d d d gdDeNddgeNdd gdEeNdd d geNddd gdFeNdeNd eNddGd+d!ejMejNd.d/gd0d1ggd/d/gd/d/ggd<d=gd>d=gggd2d3deNddgddggidBeNd dgd d gd d ggidCeNd dgd d gddggieNddgeNd d gdDeNddgeNddgdEeNd d d geNd d dgdFeNdeNd eNddGdeNdd gddggidBeNdd gd d gdd ggidCeNdd gd d gd d ggieNdd geNd d gdDeNd dgeNdd gdEeNd d dgeNdd d gdFeNd eNd eNddGdeNddgddggidBeNddgddgddggidCeNddgddgddggieNddgeNddgdDeNddgeNddgdEeNdddgeNdddgdFeNdeNdeNddGd4d!gG dIdJ dJeKZSG dKdL dLeKZTejGjLdMdNdOdPdQdRdSdTZUdQdRdUdVZVejGHdWdQdRdXdYZWdQdRdZd[ZXG d\d] d]ZYdQdRd^d_ZZdQdRd`daZ[dQdRdbdcZ\dQdRdddeZ]dQdRdfdgZ^dQdRdhdiZ_dQdRdjdkZ`dldQdmdndoZaG dpdq dqZbG drds dsZcG dtdu duZddS )v    )annotationsN)deepcopy)dedent)AnyFinalHashablecast)Version)	DataArrayDatasetIndexVariableVariablealign	broadcastset_options)CFDatetimeCoder)
from_cdms2)dtypes)	full_like)IndexPandasIndexfilter_indexes_from_coords)QueryEngineOptionsQueryParserOptions)	is_scalar)InaccessibleArray
ReturnItemassert_allcloseassert_array_equalassert_chunks_equalassert_equalassert_identicalassert_no_warningshas_daskraise_if_dask_computesrequires_bottleneckrequires_cupyrequires_daskrequires_irisrequires_numexprrequires_pintrequires_scipyrequires_sparsesource_ndarray)UndefinedVariableErrorzerror:Mean of empty slicez&error:All-NaN (slice|axis) encounteredc                   @  s  e Zd Zejdddd ZddddZddd	d
ZddddZddddZ	ddddZ
ddddZddddZddddZddddZddddZddddZddddZdddd Zddd!d"Zddd#d$Zddd%d&Zeddd'd(Zddd)d*Zeddd+d,Zddd-d.Zddd/d0Zddd1d2Zddd3d4Zddd5d6Zddd7d8Zddd9d:Z ddd;d<Z!ddd=d>Z"ddd?d@Z#dddAdBZ$dddCdDZ%dddEdFZ&edddGdHZ'dddIdJZ(dddKdLZ)ej*+dMdddNdOZ,dddPdQZ-dddRdSZ.dddTdUZ/dddVdWZ0dddXdYZ1dddZd[Z2ddd\d]Z3ddd^d_Z4ddd`daZ5dddbdcZ6dddddeZ7dddfdgZ8dddhdiZ9dddjdkZ:dddldmZ;dddndoZ<dddpdqZ=dddrdsZ>dddtduZ?dddvdwZ@dddxdyZAdddzd{ZBddd|d}ZCddd~dZDddddZEddddZFddddZGddddZHddddZIddddZJddddZKddddZLddddZMddddZNddddZOddddZPddddZQddddZRddddZSddddZTddddZUddddZVej*WdeXjYdddddgddddZZej*Wde[e\gddddZ]ddddZ^ddddZ_ddddZ`ddddZaddddZbddddZcddddZdddddZeddddZfddddZgddddÄZhddddńZiddddǄZjddddɄZkdddd˄Zldddd̈́ZmddddτZnddddфZoddddӄZpddddՄZqddddׄZrddddلZsddddۄZtdddd݄Zudddd߄ZvddddZwddddZxddddZyddddZzddddZ{ddddZ|ddddZ}ddddZ~ddddZddddZddddZddddZddddZddddZddddZddddZddd dZddddZddddZddddZdddd	Zddd
dZddddZddddZddddZddddZddddZeddddZddddZddddZej*Wddddgej*Wdd d!gd d"ggej*Wd#edd$d$gd$dggdd%d%gd%d&ggddd'd(Zej*Wd)d*d+gddd,d-Zej*Wd)d*d+gddd.d/Zddd0d1Zddd2d3Zej*Wd4d5d6 d7d6 ejegddd8d9Zddd:d;Zddd<d=Zddd>d?Zddd@dAZdddBdCZej*WdDed$edgd%dgfgeddEgd%ddEgfggeddEgd%ddEgfgedgd%dgfged$ggdddFdGZdddHdIZdddJdKZdddLdMZdddNdOZdddPdQZdddRdSZdddTdUZdddVdWZdddXdYZdddZd[Zddd\d]Zddd^d_Zddd`daZdddbdcZdddddeZdddfdgZdddhdiZdddjdkZedddldmZedddndoZdddpdqZdddrdsZdddtduZej*WdvddgdddwdxZdddydzZddd{d|Zddd}d~ZddddZddddZddddZddddZddddZddddZddddZddddZddddZddddZddddZej*Wddd$ddgej*WddefeXjYefgddddZddddZddddZddddZej*jeԐdej*Wddejeՠ֐deddgdddgidgdgdejeՠ֐deאddgdddgidgdggddddZddddZddddZddddZddddZddddZddddZddddZddddZddddZddddZddddZeddddZej*Wdddgej*Wdddgej*+dddddÄZdddĐdńZdddƐdǄZej*WdȐdɡej*WdʐddEdːd̐d͐dΜfdddϐdЄZej*WdѐddEdҐd̐d͐dΜfdddӐdԄZej*WdȐdաej*Wd֐dסdddؐdلZej*Wdڐdېdgejddddݜdddݜdސdߍejddddݜi ddߍejddddݜdddݜddߍgddddZej*Wdddgej*Wdddejdegdgej*WddejdegdgddddddZeej*WdddgddddZddddZdS (  TestDataArrayTZautousec                 C  s   ddd| _ tjd| _tddg| j| _tddg| j| j | _td| ji| _| jd | _	t
jjdd	gd
dggdd| _tdd
ddgd| jidd| _d S )Nvalue1q  attr1Zattr2
      xyfooab      level_1level_2namesr      coordsdims)attrsnprandomr8   r   vvar   dsdvpd
MultiIndexfrom_productmindexr
   mdaself rV   ?/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_dataarray.pysetupD   s     zTestDataArray.setupNonereturnc                 C  sj   t ddgdddgdddggd	d
i}tjdtjdtdd}t||dd}td}|t|ksftd S )Ntimer8   r=   r>   rD            r:   bardtyper   )r8   otherZmy_variablenameaC              <xarray.DataArray 'my_variable' (time: 2, x: 3)>
            array([[1, 2, 3],
                   [4, 5, 6]])
            Coordinates:
              * x        (x) int64 0 1 2
                other    int64 0
            Dimensions without coordinates: time
            Attributes:
                foo:      bar)r   rI   arangeint64r
   r   reprAssertionError)rU   rK   rF   
data_arrayexpectedrV   rV   rW   	test_reprR   s    $zTestDataArray.test_reprc                 C  s   t d}|t| jkstd S )Nz            <xarray.DataArray (x: 4)>
            array([0, 1, 2, 3])
            Coordinates:
              * x        (x) object MultiIndex
              * level_1  (x) object 'a' 'a' 'b' 'b'
              * level_2  (x) int64 1 2 1 2)r   rh   rS   ri   )rU   rk   rV   rV   rW   test_repr_multiindexd   s    	z"TestDataArray.test_repr_multiindexc              
   C  sb   t jjddddgddddd	d
ddggdd}tttdd|idd}td}|t|ks^td S )Nr;   r<   cdr=   r>   rD   r]   r^   r_         r?   rB       r8   rE   a              <xarray.DataArray (x: 32)>
            array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
                   17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
            Coordinates:
              * x        (x) object MultiIndex
              * level_1  (x) object 'a' 'a' 'a' 'a' 'a' 'a' 'a' ... 'd' 'd' 'd' 'd' 'd' 'd'
              * level_2  (x) int64 1 2 3 4 5 6 7 8 1 2 3 4 5 6 ... 4 5 6 7 8 1 2 3 4 5 6 7 8)	rO   rP   rQ   r
   listranger   rh   ri   )rU   Zmindex_longZmda_longrk   rV   rV   rW   test_repr_multiindex_longp   s    
z'TestDataArray.test_repr_multiindex_longc              	   C  s8  t | jj| j t| jj| jj dD ] }t| j|t| j|ks&tq&t| jt| jks`tt | jj| j t	| jj
t	| jj
kst| jj
 D ]\}}t|| jj
|  qtt | jj W 5 Q R X t| jd  tjsttjtdd | jd   W 5 Q R X tt | j| j_W 5 Q R X d S )N)rG   rb   shapesizenbytesndimrH   r8   zmust be 1-dimensionalmatchr:   )r    rN   variablerK   r   valuesgetattrri   lensetrF   rM   itemspytestraisesAttributeErrordataset
isinstanceto_indexrO   r   
ValueError)rU   attrkrK   rV   rV   rW   test_properties   s     zTestDataArray.test_propertiesc                 C  sl   t td}| }td|_ttd|j dtd |_tdtd |j t|j|j d S )NrD   r]   r>   )r
   rI   zeroscopyonesr}   r   data)rU   arrayactualrV   rV   rW   test_data_property   s    z TestDataArray.test_data_propertyc                 C  s   t tddddgfddddgfg}tddgtdddgd	}d
d | D }|j | ksnt|j	 | kstt
dd |j	 D stt
dd |j D st|D ]4}|j| || st|j	| || stqd S )Nr>   rD   r8   r   r=   r9   r;   r<   rn   r8   r9   c                 S  s   i | ]\}}|t ||qS rV   )r   ).0r   idxrV   rV   rW   
<dictcomp>   s     z.TestDataArray.test_indexes.<locals>.<dictcomp>c                 S  s   g | ]}t |tjqS rV   )r   rO   r   r   r   rV   rV   rW   
<listcomp>   s     z.TestDataArray.test_indexes.<locals>.<listcomp>c                 S  s   g | ]}t |tqS rV   )r   r   r   rV   rV   rW   r      s     )r
   rI   r   rO   r   r   xindexeskeysri   indexesallr}   equals)rU   r   Zexpected_indexesZexpected_xindexesr   rV   rV   rW   test_indexes   s    & zTestDataArray.test_indexesc              	   C  s   t tddddgiddgd}|dtddgs>t|dtddd	gs^tt	t
 |d
 W 5 Q R X d S )Nr   r8   r;   r<   r9   rE   r   r=   r>   z)r
   rI   r   	get_indexr   rO   r   ri   r   r   KeyErrorrU   r   rV   rV   rW   test_get_index   s
      zTestDataArray.test_get_indexc                 C  sP   t tddgd}|d}tjg tjd}||s<t|j	|j	ksLtd S )Nr   r8   rG   ra   )
r
   rI   r   r   rO   r   rg   r   ri   rb   )rU   r   r   rk   rV   rV   rW   test_get_index_size_zero   s
    
z&TestDataArray.test_get_index_size_zeroc                 C  sV  t jdddgddtfgd}tddd	gd
gd
|id}tdddgd
gd
|id}|| }tdddgd
gd
|id}t|| t jdddgddtfgd}tdddgd
gd
|id}|| }tddgd
gd
|ddg id}t|| t jddt jfdgddtfgd}tdddgd
gd
|id}|| }tddgd
gd
|ddg id}t|| dS )z{
        This test checks subtraction of two DataArrays for the case
        when dimension is a structured array.
        )ZAbe   )Stacy   )ZDick   )re   z|S256heightra   P   8   x   ZparticipantrG   rF   Q   4   s   r=   )r      r   r>   r   N)rI   r   objectr
   r!   nan)rU   Zp_dataZ	weights_0Z	weights_1r   rk   Z
p_data_altZ
p_data_nanrV   rV   rW   test_struct_array_dims   sj    
      

    

    z$TestDataArray.test_struct_array_dimsc                 C  sv   | j }|jdkst| }d|_|jdks0tt|| ttddg}d|_tdgddgfgdd}t|| d S )Nr:   r`   r8   rD   r9   rd   )rN   re   ri   r   r    r
   r   r!   )rU   arrcopiedr   rk   rV   rV   rW   	test_name   s    
zTestDataArray.test_namec              	   C  s8   | j }|jdksttjtdd d|_W 5 Q R X d S )Nr   zyou cannot assignrz   )wr   )rN   rG   ri   r   r   r   rU   r   rV   rV   rW   	test_dims  s    zTestDataArray.test_dimsc              	   C  sb   t tdddgd}|jdddks*tt|j|jks>ttt	 d|jd	< W 5 Q R X d S )
Nr   r8   r9   r   rD   r]   r   r^   r:   )
r
   rI   r   sizesri   tuplerG   r   r   	TypeErrorr   rV   rV   rW   
test_sizes  s
    zTestDataArray.test_sizesc                 C  sH   ddi}d| j jd< || j jks$tddi}|| j _|| j jk	sDtd S )Nr:   r`   bazr   )rN   encodingri   )rU   rk   	expected2rV   rV   rW   test_encoding  s    zTestDataArray.test_encodingc                 C  s^  t jd}t|}td ddg|fid  }t|| t|ddgdddgg}tddg|fdddgfddddgfd	d  }t|| t|tjddgd
dtjdddgddg}td
dg|fd
ddgfddddgfdd  }t|| ddgdddgg}t||d
dg}t|| tjddgddtjdddgddg}t||d
dg}t|| ddgdddgd}t||d
dg}t|| t||}t|| d
ddgfddddgfg}t||}t|| td
dg|fd
ddgfdd  }t|d
ddgid
dg}t|| t|d
dgd}td d
dg|fid  }t|| t|d
dgdd}tdd
dg|fid }t|| t|dd}tdddg|fid }t|| t|d
dgddid}td d
dg|ddifid  }t|| t|d
dgd}td d
dg|i ddifid  }t|| tdddgd
dddgid}tdddgd
dddgfgd}t|| d S )Nr   dim_0dim_1r;   r<   )Nr   r   r8   rd   r9   )Nr8   r9   ABr   )Nr8   r   r:   rG   re   r`   r>   rG   rH   r=   rD   r   rF   )rI   rJ   r
   r   r!   rO   r   )rU   r   r   rk   Zcoords1Zcoords2Zcoords3Zcoords4rV   rV   rW   test_constructor  sv    



 $$

&





"




 
zTestDataArray.test_constructorc              	   C  s  t jdd}tjtdd t|dddggddg W 5 Q R X tjtd	d  t|ddddgid
dg W 5 Q R X tjtd	d t|ddddgi W 5 Q R X tjtdd t|dd gd W 5 Q R X tjtdd" tdddgdddgfgd W 5 Q R X tjtdd( tddgddgddgfddd W 5 Q R X tjtdd* tt jddd| j	fd| j	fg W 5 Q R X tjtdd, tt jddd| j	fdt
dfg W 5 Q R X tjtdd t|ddiddgd W 5 Q R X d S )NrD   r>   zcoords is not dict-likerz   r   r=   r8   r9   znot a subset of the .* dimr;   r<   zis not a stringr   zconflicting sizes for dimr   r   rE   zconflicting MultiIndexr]   r@   zmatching the dimension size)rI   rJ   randnr   r   r   r
   r   randrR   rt   rU   r   rV   rV   rW   test_constructor_invalidn  s&    "$&,.0z&TestDataArray.test_constructor_invalidc                 C  s  ddgddgg}t |ddgddgd	d
dgdddid}t |}t|| t |j|j}t|| tj|tjddgd
dtjddgddd}t |}t|| tj|d tjddgddd}t |}t|d j	d
dd| t |ddgddgdd
ddgfdd
dgd}t |}t|| t |j|j}t|| t
ddddgfid }t tjddgdd}t|| t tdddg}t|| d S )N皙   r   r>   r;   r<   r   r   r   r8   r9   foobarr`   rF   rG   re   rH   rd   )indexcolumnsr   Tdropg            ?)r8   r9   r;   r   rE   r:   )r
   r!   r}   rF   r    rO   	DataFramer   Seriesreset_coordsr   r   )rU   r   rk   r   frameseriesrV   rV   rW   $test_constructor_from_self_described  sH    


 


z2TestDataArray.test_constructor_from_self_describedc                 C  sX   t ddgddggddgddgd	d
dgdddid }t |}t|| t|| d S )Nr   r   r   r>   r;   r<   r   r   r   r8   r9   r   r`   r   )r
   chunkr!   r   rU   rk   r   rV   rV   rW   ,test_constructor_from_self_described_chunked  s    

z:TestDataArray.test_constructor_from_self_described_chunkedc                 C  s*   t d g dfid  }td}t|| d S Nr   )r   r
   r!   r   rV   rV   rW   test_constructor_from_0d  s    z&TestDataArray.test_constructor_from_0dc                 C  sv   dd l m} |jddd}|jjdddd }t|||dd	d
gd}td}t|||dd	d
gd}t|| d S )Nr   rq   r]   chunks)rq   rq   r]   r]   r=   r   r8   r9   rE   )
dask.arrayr   rf   rJ   r
   rI   r    )rU   dacoordr   r   Zecoordrk   rV   rV   rW   test_constructor_dask_coords  s    
z*TestDataArray.test_constructor_dask_coordsc                 C  s  t tdddidd}|}| }||s2t||s@t|d}||sXt||rft|ddi}||rt||rt| }d|jd	< ||st||rt| }dtd
 f|d< ||rt||rt|j	dd}||rt||r"t| }tj
|d< | }||sLt||s\ttj
|d d < ||rzt||rt| }d|d< ||rt||rtd S )N      @r;   *   r8   r   r   Zxxxr`   r:   r^   Tr   r   i )r
   rI   rf   r   r   ri   	identicalrenamerH   r   r   )rU   origrk   r   rV   rV   rW   test_equals_and_identical  sD    


z'TestDataArray.test_equals_and_identicalc                 C  sP   t tdddidd}|tdr,t|dr:t|dd	irLtd S )
Nr   r;   r   r8   r   r^   {   r=   r>   )r
   rI   rf   r   ri   r   broadcast_equals)rU   r   rV   rV   rW   test_equals_failures  s    z"TestDataArray.test_equals_failuresc                 C  s   t ddgddidd}t ddgddddgfidd}||sBt||sPt||r^t||rltt dgddidd}||rt||rtd S )Nr   r9   r8   r   rE   )r
   r   ri   r   r   )rU   r;   r<   rn   rV   rV   rW   test_broadcast_equals  s    z#TestDataArray.test_broadcast_equalsc                 C  s  t | j| jd  | jd }| jd }t | jd | t | jd | t }|d d  |d ||j ||j || |||f ||jdk ||jdk ||dk ||dk|dkf f
D ]}t| j| j|  q|d |d d df |d dd df ||jd d  ||jd d  ||d d  ||d d |d d	 f ||jdk ||jdk ||dk ||dk|dkf fD ]}t| j| | j|  qrd S )
Nr:   r8   r9   .r   r   rD   r>   r]   )	r!   rN   rM   r   r}   r|   r    r   rK   )rU   r8   r9   r   irV   rV   rW   test_getitem  s>    





zTestDataArray.test_getitemc                 C  s6   | j tddd }| j jtddd}t|| d S )NrD   r   r   )rN   sliceiselr!   )rU   r   rk   rV   rV   rW   test_getitem_dict9  s    zTestDataArray.test_getitem_dictc              
   C  sx  t dgdggddgdgdddd	gfd
dgfd
dgddggfddd
gd}t||d d   t||d d d d f  t||d  t||d dd df  t||ddgdgf  |d }t dddddddd}t|| |dd d f }t dgddgddd
dgfd
dgfdd
d}t|| |d d df }t ddgddgddddd	gfddddgfddd}t|| d S )Nr6   r7   r=   r>   rD   r]   r8   r;   r<   r9   rn   ro   e)r8   r9   r   x2y2xyr   .r   r   r   r
   r!   rU   r   r   rk   rV   rV   rW   test_getitem_coords>  s`    

 



z!TestDataArray.test_getitem_coordsc                 C  sT  t tddddgd}t ddgddggddgd}|| }t||jddgddggd d f  t tddddgddd	gd
dddgdd}tj ddgddggddgd}|| }|jddgddggd d f }t|| |jdksttj dddgdgd}t	|| |ddgd d f  t	|| |ddg  t	|| ||j  d S )N   r   r8   r9   r   r   r=   r   r>   r;   r<   rn   ro   r   r   XY)r  r  r9   TF)
r
   rI   rf   reshaper   r}   xrrG   ri   r    )rU   r   indr   rk   rV   rV   rW   test_getitem_dataarrayv  s$    $
z$TestDataArray.test_getitem_dataarrayc                 C  s   t tddddgd}t|dg i t tdddgd t|jdg i t tdddgd t|g  t tdddgd d S )Nr  r   r8   r9   r   )r   r]   )rD   r   )r
   rI   rf   r  r!   r   locrU   r   rV   rV   rW   test_getitem_empty_index  s    $ z&TestDataArray.test_getitem_empty_indexc              
   C  s   ddt d d ft d d t d d ft d d dfddgt d d ft d d ddgfg}|D ]z}tddd}ttddddddgddgd	d
dddgfdddgfdd
dgd}d||< d||< t|j| qTd S )Nr  r   r=   r_   rD   r>   r;   r<   r]   r8   rn   r9   ro   r  )r8   r9   r   r  r  r   )r  rI   rf   r  r
   r   r}   )rU   Ztuplestrk   r   rV   rV   rW   test_setitem  s,    
zTestDataArray.test_setitemc                 C  s  t tdddgd}tdgddg}d|t||d< t ddgddgddggddgd}t|| td	d|t||d< t ddgddgddggddgd}t|| tdgd
dg|t||d< t d
dgddgddggddgd}t|| t tdddgd}t ddggddgd}t ddggddgd}d|t||d< t ddgddgddggddgd}t|| t tdddgd}tdgddg}d||< t ddgddgddggddgd}t|| d S )NrD   r>   r8   r9   r   r;   r   r=   r   rV   r>   rD   r<   )r
   rI   r   r   dictr!   )rU   r   r  rk   Zind_xZind_yrV   rV   rW   test_setitem_fancy  s,    "
"
"
"
"z TestDataArray.test_setitem_fancyc              	   C  s  dd }| }t tdddgdtjdid}tjtdd	 d
|t|d< W 5 Q R X t tdddgdtddid}d
|t|d< t	|t|d j
d
stt|d | d  t|d | d  | }tj tddddgd
ddgdd
ddgfdd}tjtdd	 ||t|d< W 5 Q R X tj tddddgdddgdd
ddgfdd}||t|d< t	|t|d j
d
stt|d | d  t|d | d  tj tddddgdddgdd
ddgfdd}||t|d< tj tddddgd
ddgdd
ddgfdd}tjtdd	 ||t|d< W 5 Q R X tj tddddgdddgdd
ddgfdd}||t|d< d S )Nc                
   S  s:   t tddddgtddddgdd	d
ddgfddS Nr]   rD   r>   r8   r9   r   r]   r;   r<   rn   r=   rD   r>   )r8   r9   non-dimr   r
   rI   r   rf   rV   rV   rV   rW   get_data  s    z6TestDataArray.test_setitem_dataarray.<locals>.get_datar=   r]   r8   rD   r   dimension coordinate 'x'rz   r   r8   r  rD   rD   r>   r9   r   r>   r8   r  )r
   rI   rf   rJ   r   r   r   
IndexErrorr  allcloser}   ri   r!   r  r   rU   r  r   r  valuerV   rV   rW   test_setitem_dataarray  s\    $$z$TestDataArray.test_setitem_dataarrayc                 C  s(   t ddg}d|kstd|ks$td S )Nr=   r>   rD   )r
   ri   )rU   rj   rV   rV   rW   test_contains  s    zTestDataArray.test_containsc                 C  s2   t tjddd}tt|}t|| d S )NrD   rD   )idr\   r   )r
   rI   rJ   pickleloadsdumpsr!   )rU   r   roundtrippedrV   rV   rW   test_pickle  s    zTestDataArray.test_picklec                 C  s.  t td}|jd kst| }|jdks2t|jj}|jdd}|jdksTt|jj|ksdt|jdd}|jdks~t|jj|kst|djj|djjkst| jd kstdd l	m
} |jd	d
}t|j|jstd	|jjkst|jddd}|jdkst|jj|ks*td S )Nr   )rD   r   )r>   r=   r>   r>   r   r*  )r1  )rD   r=   r>   r   Z	testname_)Zname_prefixrD   )r   r   )r
   rI   r   r   ri   r   r   re   loadr   r   r   Array)rU   Z	unblockedZblockedZfirst_dask_namer   rV   rV   rW   
test_chunk   s(     zTestDataArray.test_chunkc              	   C  s   t | jd | jjdd t | j| jjtd d t | jd d | jjtdd t | jd dd df | jjtdtdd tjtdd | jjdd W 5 Q R X tjtdd | jjdd	d
 W 5 Q R X t | j| jjddd
 d S )Nr   r!  rD   r^   r   zKDimensions {'not_a_dim'} do not exist. Expected one or more of \('x', 'y'\)rz   )	not_a_dimwarn)r7  missing_dimsignore)	r!   rN   r  r  r   r   r   warnsUserWarningrT   rV   rV   rW   	test_iselC  s    "0zTestDataArray.test_iselc                 C  s   t dddgdd}t|jtjdgddd	|jtdgd	 t|jtjdgd
dd	|jtdgd	 t|jtjdgddd	|jtdgd	 d S )Nr=   r>   rD   r8   r   r   Zuint64ra   r!  Zuint32rg   )r
   r!   r  rI   r   r  rV   rV   rW   test_isel_typesV  s       zTestDataArray.test_isel_typeszignore::DeprecationWarningc              
   C  s  d}t j|}t|dddgdt dddid}d	d
g}d
dg}|jd d ||f }|jd|fd|fd}|jd jt|fkst	t
|jdgkst	|jdkst	t j|| |jdd	dgfdddgfdd
dgfd t j|jdd	gfddgfddgfdj |d   |jdd	dgfd ddg}ddg}|jd d ||f }|jd|fd|fdj}	t j|	| t|jd|fd|fd|jd|fd|fd tjtdd& |jdd	dgfdd	dd
gfd W 5 Q R X t }
ddddgf|
d< dd	dd
gf|
d < ddd!d	gf|
d"< |j|
d  |
d" d}d|jks@t	d|jksPt	t|d |
d  tjtd#dH |jtdd	dgdddd	dgidtdd	dgdddd	d
gidd W 5 Q R X t }
d$dddgf|
d%< d&dd	gf|
d'< d(d	dgdd
gd
dggf|
d < d$dd!d	gf|
d"< |j|
d  |
d" d}d%|jks<t	d%|jksLt	d'|jks\t	d'|jkslt	t|d% |
d%  t|d' |
d'  |jd d |
d" j|
d  jf }t|| d S ))N)r6   rp   r_   r\   r9   r8   r   d   r6   r   r=   rD   )
test_coordr9   r8   r@  )r\   r@  )pointsr>   r]   )r\   r8   r9   )p)r=   r]   r>   r\   r   r   r   zDimensions of indexers mismatchrz   )stationr   r   CrE  Zdim1sr^   Zdim2szconflicting values/indexes on r;   r;   )r<   r<   r;   r<   )rI   rJ   r
   rf   r}   r  rF   rv   r   ri   rs   rG   testingr    r   squeezer!   r   r   r$  r   r   r|   r   )rU   rv   Znp_arrayr   r9   r8   rk   r   r   actual2Zstationsactual3actual4	expected4rV   rV   rW   test_isel_fancyf  s      
 
 
  

*
 zTestDataArray.test_isel_fancyc                 C  s   dt tdf| jd< | jd }t||jtd d t|d |jdd t|d d |jtdd t|d d |jd	ddgd t|d d d d
f |j| jd d
k d td}t|d |j|d t|dg |jt||d d S )Nr8   
abcdefghijr:   r!  r=   r<   rD   rn   r;   r]   r9   r9   )rI   r   rs   rM   r!   selr  r
   )rU   r   r<   rV   rV   rW   test_sel  s    
 ,zTestDataArray.test_selc                 C  s  dt tdf| jd< | jd }tdddgdgd}|j|d}t||jd	d
dgd tdddgdgd}|j|d}t||jd	d
dgd d|j	kst
tdddgdgdd	d
dgid}|j|d}t||jd	d
dgd d|j	kst
d|jkst
t|d d|d  d S )Nr8   rP  r:   r;   r<   rn   r   r!  r   r=   r>   new_dimr   )rI   r   rs   rM   r
   rR  r!   r  r   rG   ri   rF   r    	drop_vars)rU   r   r  r   rV   rV   rW   test_sel_dataarray  s&    
  z TestDataArray.test_sel_dataarrayc              	   C  sL   t tddtdfg}tjtdd |jt|jd W 5 Q R X d S )Nr6   r8   zcannot use non-scalar arraysrz   r!  )	r
   rI   rf   r   r   r   rR  r  r8   r   rV   rV   rW   test_sel_invalid_slice  s    z$TestDataArray.test_sel_invalid_slicec                 C  s   t jdddd}ttdd|fg}|jt|jd |jd d}t|| ttdd	||d  fg}|jt|j	d |j	d d
}t|| d S )N
2000-01-01Dim  freqperiodsr\   r   r   rD  delta)r]  )
rO   
date_ranger
   rI   rf   rR  r  r\   r    r]  )rU   timesr   resultrV   rV   rW   !test_sel_dataarray_datetime_slice  s    
z/TestDataArray.test_sel_dataarray_datetime_slicec                 C  s  t d}ddddg}t j|dd}t|d|fg}t|d	d
 d|d	d
 fg}|j|d	d
 d}t j|dd}t|d	d
 d|d	d
 fg}t|d|fg}	|	j|d	d
 d}
t|d d|d id}|j|d d}t|| t|| t||
 d S )Nr]           g"~j?g"~j?gZd;O?float32ra   float32_coordr=   rD   )rd  float16float16_coord)rf  r>   r   )rI   rf   asarrayr
   rR  r    )rU   Zdata_valuesZfloat_valuescoord_valuesr   rk   r   Zcoord_values_16Zexpected_16Zarray_16Z	actual_16Zexpected_scalarZactual_scalarrV   rV   rW   test_sel_float  s*    
 
  


zTestDataArray.test_sel_floatc                 C  s   ddddg}t jddddgt jd}tjdd	d
dgdd|fd|fdd}|jddgd}|jddd}|jdd}t|| d S )Nr;   r<   皙?皙?333333?g?ra   r=   r>   rD   r]   r8   lvl1lvl2r   rn  ro  r!  r   )	rI   r   rc  r  r
   	set_indexrR  r  r    )rU   rn  ro  r   r   rk   rV   rV   rW   test_sel_float_multiindex	  s    
  z'TestDataArray.test_sel_float_multiindexc                 C  s   t tddd}t|d |jdd t|d d |jtdd t|ddg |jddgd t||dk  |j|dk d d S )Nr6   r8   r   r   r!  r^   r   )r
   rI   rf   r!   rR  r  r   rV   rV   rW   test_sel_no_index  s
    zTestDataArray.test_sel_no_indexc              	   C  s   t tjddddddgfdtdfg}tjtd	d
 |jdd W 5 Q R X |jddgd}|jddgdd}t	|| |jddgd}|jddgddd}t	|| d S )NrD   r]   r8   r   r=   r>   r9   ZabcdzTry setting the `method`rz   abrQ  r;   r<   bapad)r9   methodr!  g?gffffff?backfill)r8   rv  	tolerance)
r
   rI   rJ   r   rs   r   r   r   rR  r!   )rU   r   rk   r   rV   rV   rW   test_sel_method  s    *
zTestDataArray.test_sel_methodc                 C  s   t dddgddddgfg}t d}|jddd}t|| t dddi}|jddd}t|| t dddgdgd	}t d}|jddd}t|| d S )
Nr=   r>   rD   r8   r   Tr8   r   Fr   )r
   rR  r!   rU   r   rk   selectedrV   rV   rW   test_sel_drop-  s    

zTestDataArray.test_sel_dropc                 C  sf   t dddgddddgfg}t d}|jddd}t|| t dddi}|jddd}t|| d S )	Nr=   r>   rD   r8   r   Trz  F)r
   r  r!   r{  rV   rV   rW   test_isel_drop<  s    
zTestDataArray.test_isel_dropc              	   C  s  t | jjtdd| jjdd t | jjtdd| jjdd t | jdd | jjD | jd t | jdd | jjD | j  tjtdd	 | jd
g W 5 Q R X tjtdd	 | jjdd W 5 Q R X tjt	dd	 | jd W 5 Q R X d S )Nr^   r!  r   c                 S  s   i | ]}|t d qS )r_   r  r   dimrV   rV   rW   r   J  s      z+TestDataArray.test_head.<locals>.<dictcomp>r_   c                 S  s   i | ]}|t d qS r^   r  r  rV   rV   rW   r   M  s       either dict-like or a single intrz   rD   expected integer type@expected positive intr   )
r    rN   r  r  headrG   r   r   r   r   rT   rV   rV   rW   	test_headF  s     "" 
 zTestDataArray.test_headc              	   C  s  t | jjtdd d| jjdd t | jjtdd| jjdd t | jdd | jjD | jd t | jdd | jjD | j  tjtd	d
 | jdg W 5 Q R X tjtdd
 | jjdd W 5 Q R X tjt	dd
 | jd W 5 Q R X d S )Nr   r!  r^   r   c                 S  s   i | ]}|t d dqS )iNr  r  rV   rV   rW   r   Z  s      z+TestDataArray.test_tail.<locals>.<dictcomp>r_   c                 S  s   i | ]}|t d dqS )r   Nr  r  rV   rV   rW   r   ^  s      r  rz   rD   r  r  r  r   )
r    rN   r  r  tailrG   r   r   r   r   rT   rV   rV   rW   	test_tailV  s     $"
 zTestDataArray.test_tailc              	   C  s   t | jjtd d dd| jjdd t | jdd | jjD | jd tjtdd | jdg W 5 Q R X tjtd	d | jjd
d W 5 Q R X tjt	dd | jd W 5 Q R X tjt	dd | jjdd W 5 Q R X d S )Nr^   r!  c                 S  s   i | ]}|t d d dqS )Nr_   r  r  rV   rV   rW   r   j  s      z+TestDataArray.test_thin.<locals>.<dictcomp>r_   r  rz   rD   r  r  r  r   zcannot be zeror   rD  )
r    rN   r  r  ZthinrG   r   r   r   r   rT   rV   rV   rW   	test_thing  s    &
zTestDataArray.test_thinc                 C  s  dt tdf| jd< | jd }t|d d |jd d  t|d |jd  t|d |jddi  t|d |jd  t|d d |jd	ddg  t|d dd d
f |jd	ddgt d
f  t|d d d d
f |jd d | jd d
k f  d S )Nr8   rP  r:   rD   rn   r=   r<   )r<   .r;   r]   r9   )rI   r   rs   rM   r!   r  rf   r  rV   rV   rW   test_locv  s    
0zTestDataArray.test_locc                 C  sJ   t jddgdd}tt |jd|fd}t|jd|d i |d  d S )	Nz2017-09-05T12z2017-09-05T15datetime64[ns]ra   rD  r   r\   r   )rI   r   r
   r   rv   r!   r  )rU   r  r   rV   rV   rW   test_loc_datetime64_value  s    z'TestDataArray.test_loc_datetime64_valuec                 C  s@  dt tdf| jd< | jd }d|jdd< t |jdksDtd|jdtddi< t |jdksltd|jdtddi< t |jdkstt	t 
dd	d
ddgd}d|jd< |jd dkst|jd dkstt	t 
dd	d
ddgd}d|jd< t |jd t d
ks(t|jd dks<td S )Nr8   rP  r:   r   r;   jr>   r  rD   r]   r9   r   r  )r   r=   )r=   r   )rI   r   rs   rM   r  r   r}   ri   r  r
   rf   r  r   r  rV   rV   rW   test_loc_assign  s     


 zTestDataArray.test_loc_assignc              	   C  s  dd }| }t tdddgdtjdid}tjtdd	 d
|jt	|d< W 5 Q R X t tdddgdtddid}d
|jt	|d< t
|t	|d jd
stt|d | d  t|d | d  | }tj tddddgd
ddgdd
ddgfdd}tjtdd	 ||jt	|d< W 5 Q R X tj tddddgdddgdd
ddgfdd}||jt	|d< t
|t	|d jd
stt|d | d  t|d | d  d S )Nc                
   S  s:   t tddddgtddddgdd	d
ddgfddS r  r  rV   rV   rV   rW   r    s    z9TestDataArray.test_loc_assign_dataarray.<locals>.get_datar=   r]   r9   rD   r   zdimension coordinate 'y'rz   r   r!  r8   r  r"  r   r>   r#  r   )r
   rI   rf   rJ   r   r   r   r$  r  r  r%  r}   ri   r!   r  r   r&  rV   rV   rW   test_loc_assign_dataarray  s6    $$z'TestDataArray.test_loc_assign_dataarrayc                 C  s>   t ddgddggd}|jd dks(t|jd dks:td S )Nr   r=   TFr   )r
   r  ri   r   rV   rV   rW   test_loc_single_boolean  s    z%TestDataArray.test_loc_single_booleanc                 C  s\   t jddgddggddgddgddgd	d
}tj|jtddgdgd	 dgdgg d S )Nr   r=   dim1rv  r8   r9   r;   r<   )r  rv  r   )r  r
   rI   rI  r   r  r  r  rV   rV   rW   +test_loc_dim_name_collision_with_sel_params  s     
z9TestDataArray.test_loc_dim_name_collision_with_sel_paramsc              	     s  t jjddgddgddggdd}ttd	d
|fg d"dd fdd}|dd |dd |dddgddd |dtddd |dtddd |ddgddg |tddtd	 |tddtd |ddddd |dddddgddd |dditddd t jd  jdd t jd   jdd t jddid!f  jddid t	
t  jd  W 5 Q R X t jdddd jddd d S )#Nr;   r<   r=   r>   r   r   )onetwothreerB   rq   r8   FrY   rZ   c                   st    j | d} j|d}|s(t|| nH|rL|jd |ks>t||di}t|j|j |d |d rptd S )Nr!  r   r8   )rR  r  r!   rG   ri   r   r|   r   )Zlab_indexerZpos_indexerreplaced_idxrenamed_dimr   expected_daZmdatarV   rW   rS    s    z9TestDataArray.test_selection_multiindex.<locals>.test_sel)r;   r=   r   r   )r<   r>   r   r;   r=   Tr  )r  r  rG  r]   )r  rp   )r<   r=   r_   )r  r  r  r!  )r  ..)FN)rO   rP   rQ   r
   rt   r  r!   r  rR  r   r   r$  )rU   rR   rS  rV   r  rW   test_selection_multiindex  s2        

$z'TestDataArray.test_selection_multiindexc              	   C  s   t jtdddddgtdtddd}|jddgd}|j|d d	k d}tt	 |j
dd
 W 5 Q R X | }|dj|d d	k d}|jddgd }t|| d S )N(   rq   r^   r8   r9   r   r   r  r]   r!  r  )r  r
   rI   rf   r  stackr  r   r   r   rR  unstackreset_indexrp  r!   )rU   rM   Zds_iselr   rk   rV   rV   rW   'test_selection_multiindex_remove_unused  s    z5TestDataArray.test_selection_multiindex_remove_unusedc                 C  s   t ddgdgddgddd}t ddgdgddgd	dd}tj||gdd
jddgd}|jdksht|jdd}|jddgdd	d}t
|| d S )Nr   r=   r8   r;   r   r   r>   rD   r<   r  r9   r  rQ  r  )r
   r  concatrp  rG   ri   rR  r  r  rJ  r    )rU   r   dbr   r   rk   rV   rV   rW   $test_selection_multiindex_from_level  s    z2TestDataArray.test_selection_multiindex_from_levelc                 C  sF   t tddd}t tdddd}t||d  t||jd  d S )Nr  r8   r   r^   r   )r
   rI   r   rt   r!   rF   )rU   r   rk   rV   rV   rW   test_virtual_default_coords   s    z)TestDataArray.test_virtual_default_coordsc                 C  sL   t jddd}ttddd|fg}t|d |j t|jd |j d S )NrX  r6   r\  r=      r\   ztime.dayofyear)rO   r^  r
   rI   rf   r   r}   rF   )rU   datesr   rV   rV   rW   test_virtual_time_components&  s    z*TestDataArray.test_virtual_time_componentsc              	   C  s  t dtddgdt dtdddgdg}ttjdd	|d
d}t|jdksXtt	|jddgksnt|d 
|jd st|d 
|jd std|jkstd|jkstd
|jksttt |jd  W 5 Q R X tt |jd
  W 5 Q R X td}t|j}||ks(t|jjtdtddksLt|jd= t|jt|j|_t|jddddgiddgd
d}t|| tjtdd0 dtdf| jd< dtdf| jjd< W 5 Q R X d S )Nr8   r   r   rg   r9   r   r=   r>   rD   r:   rd   z^        Coordinates:
          * x        (x) int64 -1 -2
          * y        (y) int64 0 1 2r   r   .cannot set or update variable.*corrupt.*index rz   r]   r@   )r   rI   r   r
   rJ   r   r   rF   ri   rs   r   r   r   r   r   rh   r   rb   r   r   r   Z_indexesr}   r!   r   rf   rS   )rU   rF   r   Zexpected_reprr   rk   rV   rV   rW   test_coords-  s>    
$ 
 zTestDataArray.test_coordsc              	   C  s"  t tddddgfdtdfg}tjtdd |d	 j  W 5 Q R X t	j
d
ddgdd}|d j }||s|tt	jjddgd
ddggddgd}|j }||stt	jjd
ddgddggddgd}|jddg}||sttjtdd |jdg W 5 Q R X d S )Nr   r8   r=   r>   r9   abczno valid indexrz   r  r;   r<   rn   rd   r   rB   zordered_dims must match)r
   rI   r   rs   r   r   r   rF   r   rO   r   r   ri   rP   rQ   )rU   r   rk   r   rV   rV   rW   test_coords_to_index_  s(    $ 
 z"TestDataArray.test_coords_to_indexc                 C  s   t ddgddgdddgfdd	dd
}|jd }t ddgddddgfddgdddd}t|| |jd= t|jddd| dddgf|jd< t ddgddddgfddgdddd}t|| d S )Nr6   r7   r=   r>   r8   r;   r<   r]   )r8   r  r   r   )r   r  r8   r   r  Tr   x3)r   r  r8   )r
   rF   r!   r   r
  rV   rV   rW   test_coord_coordsx  s.      
   
   zTestDataArray.test_coord_coordsc              	   C  sb  t tdddddgfdtdftddddgd	d
}| }tddgtdfddddgfdtdftdd}t|| |ddg}t|| |d}tddgtdfddddgfddtdftdd}t|| |dg}t|| |jdd}t tddtdiddgd	d}	t||	 | jdd}
t|
|	 |jddd}t tddtdftddddgd	d
}t|| tj	t
dd |jd	dd W 5 Q R X tj	t
dd |d W 5 Q R X tj	t
dd |d W 5 Q R X tjjddgddggdd}t ddddgd|idd	d}tj	t
dd |d W 5 Q R X d S )Nr   r8   r;   r<   rn   r9   r]   )r`   r   r9   r:   r   )r:   r`   r   r9   r`   r   )r:   r`   )r   r9   Tr   )rF   rG   re   cannot be foundrz   	not_foundzcannot remove indexr   r=   rm  rB   r>   rD   rn  )r
   rI   r   rt   r   r   r!   r   r   r   r   rO   rP   rQ   )rU   r   actual1	expected1rK  rL  	expected3rM  actual5	expected5actual6actual7	expected7midxrV   rV   rW   test_reset_coords  sj     



 

 
  


zTestDataArray.test_reset_coordsc              	   C  s   t d}|jdd}t dddi}t|| tjtdd | jjdtdfd	 W 5 Q R X tj d
ddgdd}tt d
dddg|d< W 5 Q R X tt d
dddg|j	d< W 5 Q R X tt ddddgf|j	d< W 5 Q R X d S )Nr6   r   rn   rn   r  rz   r8   r]   )r@   r   r=   r>   r   rD   r9   )
r
   assign_coordsr!   r   r   r   rS   rt   r  rF   )rU   r   r   rk   r   rV   rV   rW   test_assign_coords  s     
  z TestDataArray.test_assign_coordsc              	   C  s4   | j }tjtdd |jtdd W 5 Q R X d S )Nz Updating MultiIndexed coordinaterz   r]   r!  )rS   r   r;  FutureWarningr  rt   r   rV   rV   rW   &test_assign_coords_existing_multiindex  s    z4TestDataArray.test_assign_coords_existing_multiindexc                 C  s|   t dddgddddgfg}t dddgddddgfg}||jd< t dddgdtjddgfdddgddd	}t|| d S )
Nr=   r>   rD   r8   r   r]   rhs)r  r8   rE   )r
   rF   rI   r   r!   )rU   lhsr  rk   rV   rV   rW   test_coords_alignment  s    
  z#TestDataArray.test_coords_alignmentc                 C  sT   t dddgddddgfg}dddg|jd< |jd  tdddgsPtd S )Nr=   r>   rD   r8   r;   r<   rn   )r
   rF   r   Zto_pandas_indexr   rO   r   ri   )rU   r   rV   rV   rW   test_set_coords_update_index  s    z*TestDataArray.test_set_coords_update_indexc              	   C  s,   t jtdd td| jd< W 5 Q R X d S )Nr  rz   r]   r@   )r   r   r   rt   rS   rT   rV   rV   rW    test_set_coords_multiindex_level  s
     z.TestDataArray.test_set_coords_multiindex_levelc                 C  sf   t dddgdgd}t dddgdgdddggd}||d< t dddgddddgfgd}t|| d S )	Nr   r=   r>   r  r   rD   r   r   r	  )rU   r   Z	new_coordrk   rV   rV   rW   !test_coords_replacement_alignment  s
    z/TestDataArray.test_coords_replacement_alignmentc                 C  s:   t dddid}|jd }t dddidd}t|| d S )Nr   r=   r>   r   rF   re   )r
   rF   r!   rU   r   r   rk   rV   rV   rW   test_coords_non_string  s    
z$TestDataArray.test_coords_non_stringc                 C  s6   t tdddddgid}|jd= d|jks2td S )Nr>   r8   r   r=   r   )r
   rI   r   rF   r   ri   r   rV   rV   rW   "test_coords_delitem_delete_indexes  s    z0TestDataArray.test_coords_delitem_delete_indexesc              	   C  s(   t jtdd | jjd= W 5 Q R X d S )Nz)cannot remove coordinate.*corrupt.*index rz   r@   )r   r   r   rS   rF   rT   rV   rV   rW   $test_coords_delitem_multiindex_level  s
     z2TestDataArray.test_coords_delitem_multiindex_levelc                 C  s   t tdddgddgdddgdd}t td	ddgdddgddgdd}t||\}}||}||}t|| t|| t tjd
dtd
fg}t tjddtdfg}t||\}	}
t|||		dd t|||
 d S )Nr   r8   r9   r;   r<   rn   r   r   r  r^   r_   )
r
   rI   r   r   Zbroadcast_liker!   rJ   r   rt   	transpose)rU   Zarr1Zarr2Zorig1Zorig2Znew1new2Zorig3Zorig4Znew3Znew4rV   rV   rW   test_broadcast_like  s(    



z!TestDataArray.test_broadcast_likec                 C  s   t tjdddtdfdtdfg}|d dd df }t||| | }tj|d d < ||d dd df< t||| d S )Nr^   r_   r8   r9   r>   )	r
   rI   rJ   r   rt   r!   reindex_liker   r   )rU   r:   r`   rk   rV   rV   rW   test_reindex_like,  s    (zTestDataArray.test_reindex_likec              	   C  s^   t tjddddgd}t||| |d d }tjtdd || W 5 Q R X d S )	Nr^   r_   r8   r9   r   r]   zdifferent size for unlabeledrz   )	r
   rI   rJ   r   r!   r  r   r   r   )rU   r:   r`   rV   rV   rW   test_reindex_like_no_index6  s
    z(TestDataArray.test_reindex_like_no_indexc              	   C  s   t tjddtdfgd}t tddd}tt |j	|d W 5 Q R X tj
ddd	gtd
}t |dddggd}t dddddgdddddggd}|j|ddj}|j|kstd S )Nr^   r\   r   time2r   rD  r=   r>   rD   ra   rj  rk  rl  r_   rp   rq   皙gzG?gףp=
?g=
ףp=?gRQ?ru  rv  )r
   rI   rJ   r   rt   rf   r   r   r   reindexr   complexr  rb   ri   )rU   r   r  Zxnpr8   r9   Zre_dtyperV   rV   rW   test_reindex_regressions>  s    "z&TestDataArray.test_reindex_regressionsc                 C  s   t ddgddddgid}ddd	g}|j|d
dd}t dtjtjgd|fgd}t|| |j|d
dddgd}t dtjtjgd|fgd}t|| td|i}|j|d
d}t ddtjgd|fgd}t|| d S )Nr6   r7   r9   r   r=   r   r   r   皙?rw  rk  )r9   rv  rx  r   rj  g{Gz?r  )r
   r  rI   r   r!   r   r  )rU   r8   r9   r   rk   altrV   rV   rW   test_reindex_methodK  s    


z!TestDataArray.test_reindex_method
fill_valuer>          @r=   )Nuc                 C  s   t ddgdddgdddgfdd}dddg}|tjkrDtj }}n$t|tr`|d  }|d	 }n| }}|j||d
}t dd|gd|ddd|gfdd}t|| d S )Nr6   r7   r9   r   r=   r>   )r9   r  r   r  )r9   r  )	r
   r   NArI   r   r   r  r  r!   )rU   r  r8   r9   Zfill_value_varZfill_value_ur   rk   rV   rV   rW   test_reindex_fill_value[  s    $



z%TestDataArray.test_reindex_fill_valuerb   c                 C  sT   t ddgddtjddg|did}|j|jd}|}t|| |j|jksPtd S )	Nr=   r>   r8   r;   r<   ra   r   r!  )r
   rI   r   r  r8   r!   rb   ri   )rU   rb   r   r   rk   rV   rV   rW   test_reindex_str_dtypep  s      
z$TestDataArray.test_reindex_str_dtypec              	   C  s  t jdddgddddddd	gfid
}|d}|jdks>t| }d|_t|| |d }|jd ksnt| }d |_t|| | }|jd kstt|| |ddi}|jdkstt jdddgddddddd	gfid
}t|| |jdd}|jdkstt|| |ddi}	d|	jks6tt jdddgddddddd	gfid
}
t|	|
 |jdd}d|jkstt||
 |ddd}|jdkstd|jkstt jdddgddddddd	gfid
}t|| |jddd}|jdks
td|jkstt|| |jdddd}|jdksDt|jdksTtd|jksdtt jdddgddddddd	gfid
}t|| d S )Nr=   r>   rD   r  re   r   r^   r_   rp   )rG   re   rF   Zname_newdim_new)r  r  Z	coord_new)r   )r  r   )	r  r
   r   re   ri   r   r!   rG   rF   )rU   r   Zrenamed_nameZexpected_nameZrenamed_nonameZexpected_nonamer  Zexpected_dimZrenamed_dimkwZrenamed_coordZexpected_coordZrenamed_coordkwZrenamed_bothZexpected_bothZrenamed_bothkwZrenamed_allZexpected_allrV   rV   rW   test_rename}  s       






   



zTestDataArray.test_renamec              	   C  s   t ddgddddgfidd}tjtdd |jdd W 5 Q R X tj ddgddddgfidd}tjtdd |jdd W 5 Q R X d S )	Nr   r8   r9   r=   rE   z,rename 'x' to 'y' does not create an index.*rz   r!  )r
   r   r;  r<  r   r  r  rV   rV   rW   $test_rename_dimension_coord_warnings  s       z2TestDataArray.test_rename_dimension_coord_warningsc              	   C  sb  t tddddgtdtdgd}t dddgtdtdgd}t|| t tddd	ddgtd
ddgdd}t d|j|jd}t|| t tdtjdtd
fdddgfgd}t dtd
fdddgfgd}t|| t	j
tdd& t tddtd
idgd W 5 Q R X t	j
tdd$ t tddtd
fgd W 5 Q R X d S )Nr   rD   r8   r9   r]   r   )r=   r6   r>   r   r   r6   ZnorthZsouthr   )r6   r>   r;   r<   r   zdifferent number of dimrz   r=   rE   zdoes not match the 0 dim)r
   rI   fullrt   r!   rf   rG   rF   r   r   r   r   r   r   rV   rV   rW   test_init_value  s0    
  


  
*zTestDataArray.test_init_valuec                 C  s  t tjddtdid}t |jddtdfidd}|ddi}t|| t 	|j
 |j
 D ]}|j
| |j
| sjtqjt tjddtdid}t |jddtdfidd}|jdd}t|| t 	|j
 |j
 D ]}|j
| |j
| stqtjjtdtdgd	d
gd}t tjddd|fid}t |jd|id}|ddi}t|| t 	|j
 |j
 D ]"}|j
| |j
| stqd S )NrD   r8   r  r9   r   r!  ZaabZyzzy1r  rB   )r
   rI   rJ   r   rs   r}   Z	swap_dimsr!   r   unionr   r   r   ri   rO   rP   Zfrom_arrays)rU   r   rk   r   Zdim_namer   rV   rV   rW   test_swap_dims  s&    

 
zTestDataArray.test_swap_dimsc              	   C  s<  t tjddddgdtdddiddid	}tjtd
d |d W 5 Q R X tjt	dd |jddgdddgd W 5 Q R X tjt	dd |jdgd W 5 Q R X tjt	dd |jddgd W 5 Q R X tjt	dd |jddgddgd W 5 Q R X tjt	dd |jddgddgd W 5 Q R X tt
 |jddgddgd W 5 Q R X tt
 |jddgddgd W 5 Q R X |jddgddgd |jddgddgd t tjddddgdtdddiddid	}tt |ddi W 5 Q R X tt	 |jddidd W 5 Q R X d S )NrD   r]   r8   r   rb        ?keyentryrG   rF   rH   zdim should be Hashable orrz   r   zlengths of dim and axisr;   r<   r=   r>   r  axiszDimension x alreadyr  zduplicate valuesr9   r   r   r   r   rT  g	@ro   )r  )r
   rI   rJ   r   linspacer   r   r   expand_dimsr   r$  r   rV   rV   rW   test_expand_dims_error  sD    "    z$TestDataArray.test_expand_dims_errorc              	   C  s  t tjddddgdtdddiddid	}|jd
d}t t|jdd
ddgdtdddiddid	}t|| |jd
dd}t|| |jd
dgd}t tt|jddd
dddgdtdddiddid	}t|| |jd
dgdd}t|| |jdd
gddgd}t tt|jdddd
ddgdtdddiddid	}t|| |j	d dksrt
|jdd
gdd}t|| |jd
dgddgd}t tt|jdddddd
gdtdddiddid	}t|| |j	d dkst
|jd
dgdd}t|| d S )NrD   r]   r8   r   rb  r  r  r  r  r9   r  r   Tr   r   r>   r=   r  r   r   )r
   rI   rJ   r   r  r  r}   r!   rJ  rH   ri   rU   r   r   rk   r/  rV   rV   rW   test_expand_dimsB  s`    









zTestDataArray.test_expand_dimsc                 C  s   t tjddddgtddddddd	id
}|jdd}t t|jddddgtdddtdddd	id
}t|| |j	dgdd}t|| d S )NrD   r]   r8   r   rb  r  r8   r   r  r  r  r   r  r   r=   Fr   )
r
   rI   rJ   r   r  r  r}   r   r!   rJ  r  rV   rV   rW   'test_expand_dims_with_scalar_coordinate|  s     
z5TestDataArray.test_expand_dims_with_scalar_coordinatec              	   C  s*  t tjddddgtddddddd	id
}|dddddgd}ddgdgdddgtdddtdd}t |jtdddddg |t	|
 dd	idddg}t|| |jdddgd}t |jtdddg dddgtdddtddddddgdd	idd}t|| d S )NrD   r]   r8   r   rb  r  r  r  r  r  r>   r=   r;   r<   rn   )r9   r   r   r   )r9   r   r   r8   r   )rF   rG   rH   r9   )r   )r   r8   r   r   r   )r
   rI   rJ   r   r  r  rt   r}   r   rs   r   rU  r!   )rU   r   r   expected_coordsrk   Z	other_wayZother_way_expectedrV   rV   rW   &test_expand_dims_with_greater_dim_size  sH    


z4TestDataArray.test_expand_dims_with_greater_dim_sizec              	     s>   fdd j jD }dd |D }t jj|dd} j }dddd	d
gf}||d< ||d< |j j jd}t|| |jddd}|jdddgd}t|| |jdddgd}t|| ttj	
dddddgfdddgfddd}tjtdd |jdd W 5 Q R X tjtdd |jdd W 5 Q R X d S )Nc                   s   g | ]} j |qS rV   rR   get_level_valuesr   nrT   rV   rW   r     s     z0TestDataArray.test_set_index.<locals>.<listcomp>c                 S  s   i | ]}|j d |fqS r!  rd   r   rV   rV   rW   r     s      z0TestDataArray.test_set_index.<locals>.<dictcomp>r8   rE   r=   r>   rD   r]   level_3r!  T)r8   appendr@   rA   r   r9   )r8   levelr   zdimension mismatchrz   r  z.*variable\(s\) do not existZlevel_4)rR   rC   r
   rS   r}   r   rp  r!   rI   rJ   r   r   r   r   )rU   r   rF   r   rk   r   objZarray2drV   rT   rW   test_set_index  s.    



zTestDataArray.test_set_indexc                   s    fdd j jD }dd |D }t jj|dd} jd}t||dd t|jd	ksbt	 j j j}t||dd t|jd	kst	 jdd
g}t||dd t|jd	kst	d j 
d
fd j d
fd}t jj|dd} jd
g}t||dd t|jdgks(t	t|jd tks@t	t jjdd} jjddd}t||dd  j }|jdgdd}t||dd tddgdddgidd}|d}t|jj t|jj t|jj|jj  t|jd	kst	d S )Nc                   s   g | ]} j |qS rV   r  r  rT   rV   rW   r     s     z2TestDataArray.test_reset_index.<locals>.<listcomp>c                 S  s   i | ]}|j d |fqS r!  rd   r   rV   rV   rW   r     s      z2TestDataArray.test_reset_index.<locals>.<dictcomp>r8   rE   F)Zcheck_default_indexesr   r@   )r8   r@   r   Tr   r=   r>   r;   r<   )rR   rC   r
   rS   r}   r  r!   r   r   ri   Z	droplevelr  rs   typer   r   printr8   r|   r    Zto_base_variable)rU   r   rF   rk   r  r   rV   rT   rW   test_reset_index  s@    

zTestDataArray.test_reset_indexc                 C  s\   t ddgdgddid}t ddg|g}|d}|jj|jjksFtt|jdksXtd S )Nr=   r>   coord_1rH   Tr   r   )r
   r  r  rH   ri   r   r   )rU   r  r   r  rV   rV   rW   test_reset_index_keep_attrs  s
    
z)TestDataArray.test_reset_index_keep_attrsc              	   C  s   | j ddg}t| jjd|idd}| jjddgd}t|| tddgdd}tt |jddgd W 5 Q R X d	dg|d< tjt	d
d |jddgd W 5 Q R X d S )NrA   r@   r8   rE   r!  r=   r>   r   r   zhas no MultiIndexrz   )
rR   Zreorder_levelsr
   rS   r}   r!   r   r   r   r   )rU   r  rk   r  r   rV   rV   rW   test_reorder_levels  s    
z!TestDataArray.test_reorder_levelsc                 C  sp   t ddddgddddddgfidd	}G d
d dt}|jd|dd}d|jksTtt|jd ddksltd S )Nr=   r>   rD   r]   r:   r8   r;   r<   rE   c                   @  s    e Zd Zdd Zedd ZdS )z7TestDataArray.test_set_xindex.<locals>.IndexWithOptionsc                 S  s
   || _ d S Nopt)rU   r  rV   rV   rW   __init__  s    z@TestDataArray.test_set_xindex.<locals>.IndexWithOptions.__init__c                 S  s   | |d S )Nr  rV   )cls	variablesoptionsrV   rV   rW   from_variables  s    zFTestDataArray.test_set_xindex.<locals>.IndexWithOptions.from_variablesN)__name__
__module____qualname__r  classmethodr  rV   rV   rV   rW   IndexWithOptions  s   r  r  r  )r
   r   Z
set_xindexr   ri   r~   )rU   r   r  ZindexedrV   rV   rW   test_set_xindex  s    
  zTestDataArray.test_set_xindexc                 C  s   | j d }t|| j d S )Nr:   )rM   r!   rN   )rU   rN   rV   rV   rW   test_dataset_getitem&  s    
z"TestDataArray.test_dataset_getitemc                 C  s   t t| j| j t | jt| jt t | j | j  t | j	dd| j	dd t
| j}t| j|d d d < t|d t| j t | jt| j| j tddgtd}t| jt| j| d S )Nr>   rD   r:   r8   r9   r5   )r   rI   rg  rN   r8   astypefloatrK   Zargsortclipr   rM   sinr    maximumr   r   )rU   rk   r`   rV   rV   rW   test_array_interface*  s    
z"TestDataArray.test_array_interfacec                 C  sZ   | j  | j | j fD ]8}d|jd< |j|tjks@t|jtddjrtqd S )Nr`   r:   F
keep_attrs)rL   r   rS   rM   rH   r  r  ri   )rU   rK   rV   rV   rW   test_astype_attrs8  s     
zTestDataArray.test_astype_attrsc                 C  sR   t dddddg}|t}t|| t|jtjs:tt|jtj	sNtd S )Nr   r=   r>   rD   i  )
r
   r  r  r   rI   Z
issubdtyperb   integerri   ZfloatingrU   originalZ	convertedrV   rV   rW   test_astype_dtype>  s
    

zTestDataArray.test_astype_dtypec                 C  sP   t ddgddgg}|jddd}t|| |jjd s<t|jjd	 sLtd S )
Nr=   r>   rD   r]   ro   F)orderZC_CONTIGUOUSZF_CONTIGUOUS)r
   r  r    r}   flagsri   r$  rV   rV   rW   test_astype_orderE  s
    
zTestDataArray.test_astype_orderc                 C  s   G dd dt j}t|t d}|jddd}|jddd}t|j|sVtd t|jt jsht	t|j|rxt	t|j|st	d S )	Nc                   @  s   e Zd ZdS )z8TestDataArray.test_astype_subok.<locals>.NdArraySubclassNr  r  r  rV   rV   rV   rW   NdArraySubclassM  s   r,  rD   ro   F)ZsubokTz<DataArray cannot be backed yet by a subclasses of np.ndarray)
rI   Zndarrayr
   rf   r  r   r   r   xfailri   )rU   r,  r%  Zconverted_not_subokZconverted_subokrV   rV   rW   test_astype_subokL  s    
zTestDataArray.test_astype_subokc                 C  s   t jddd}t j||dk < t|t d t dgddg}tt|t d t dgddg}t	||  t	| |
  d S )Nr   r^   r_   r   r8   r9   )rI   rJ   RandomStater   r   r
   rf   rO   isnullr!   Znotnull)rU   r8   r%  rk   rV   rV   rW   test_is_nullY  s    "(zTestDataArray.test_is_nullc                 C  s   | j }| j}| j}t||
  t||d  t|d|  t||d|   t|d| |  t||d|   t|d| |  t||d|   t|d| |  d S r   )r8   rK   rN   r    )rU   r8   rK   r;   rV   rV   rW   	test_matha  s    zTestDataArray.test_mathc                 C  sb   t tddtdfg}t tddtddfg}t tddddddgfg}t|| | d S )Nr^   r8   r=   r_   r]   r>   rD   )r
   rt   rI   r   r!   )rU   r;   r<   rk   rV   rV   rW   test_math_automatic_alignmentq  s    z+TestDataArray.test_math_automatic_alignmentc                 C  sR   t tddtdfg}|jtdd|jtdd d }t|d dksNtd S )Nr^   r8   r>   r!  r   )r
   rt   r  r  r   ri   rU   r;   r`  rV   rV   rW   3test_non_overlapping_dataarrays_return_empty_resultw  s    "zATestDataArray.test_non_overlapping_dataarrays_return_empty_resultc                 C  s*   t g d}|| }t|d dks&td S )Nr   r   r   )r
   r   ri   r4  rV   rV   rW   )test_empty_dataarrays_return_empty_result}  s    
z7TestDataArray.test_empty_dataarrays_return_empty_resultc                 C  sZ   | j }| j}|j}|}|d7 }||ks*t|j|ks8tt|j| t|j|ksVtd S )Nr=   )r8   rN   r|   ri   r   r}   r-   )rU   r8   r;   rK   r<   rV   rV   rW   test_inplace_math_basics  s    z&TestDataArray.test_inplace_math_basicsc              	   C  sp   t jd}t d}t||gdgd}| }tjtdd |j	d  d7  < W 5 Q R X t
|j	d | d S )Nr]   r\   rE   z(Values of an IndexVariable are immutablerz   r=   )rI   rJ   r   rf   r
   r   r   r   r   rF   r   )rU   r   r_  r:   r<   rV   rV   rW   test_inplace_math_error  s    
 z%TestDataArray.test_inplace_math_errorc              	   C  s   t tddtdfg}t tdddtddfg}tjtjdd ||7 }W 5 Q R X tjtjdd ||7 }W 5 Q R X d S )Nr^   r8   r=   r_   z$Automatic alignment is not supportedrz   )r
   rt   r   r   r  Z
MergeError)rU   r;   r<   rV   rV   rW   %test_inplace_math_automatic_alignment  s    z3TestDataArray.test_inplace_math_automatic_alignmentc                 C  s   | j }|
 jdkst|d jdks(t||d  jd ks@t||d jd ksXt|| jdksjt|d 
 jdks~t|d d jdkst||d  jd kstd S )Nr:   r   r`   r8   )rN   re   ri   r   )rU   r;   rV   rV   rW   test_math_name  s    zTestDataArray.test_math_namec                 C  sl  ddgdddgddgdd	d
gdddggfdd}t tjd	d
|ddgd}|d }t |jd |j}t|| d| }t|| ||d  }dd | D }t |j|jd  |ddgd}t|| |d | }t|| |d |d  }t |jd |jd  ddi}t|| |d d df |dd d f  }|d d df jd d d f |dd d f jd d d f  }t ||ddgd}t|| |dd d f |d d df  }t|jdd| ||jdd }t t	d|j}t|| |jdd| }t|jdd| t ddgddgdddd}|| }|d }d|jd< |jd= t|| || }t|| d S )Nr   r   rs  cdefr8   r9   r=   r>   rD   r   r8   r9   latrn   r   r  c                 S  s   i | ]\}}|d kr||qS )r@  rV   r   r   rK   rV   rV   rW   r     s       z7TestDataArray.test_math_with_coords.<locals>.<dictcomp>)r   r   rn   r   Ttranspose_coordsr   r:   i+  )r8   rn   ro   ro   )
r
   rI   rJ   r   r}   rF   r!   r   r  r   )rU   rF   r   r   rk   Z
exp_coordsZ
exp_valuesr  rV   rV   rW   test_math_with_coords  sV    

  


 <
 


z#TestDataArray.test_math_with_coordsc                 C  s   t tdddd}|d }t dtd ddd}t|| |d |k }t dddgddd}t|| ||d k}t|| d S )NrD   r8   r   r=   r   FT)r
   rt   rI   rf   r!   r
  rV   rV   rW   test_index_math  s    

zTestDataArray.test_index_mathc                 C  s  t dtdfddtd fdddtd fdtddfd}d	|d
  }td	dtd  |jd
d}t|| |d
 |d  }tdtd |j}t|| t ddtd fddtd fddtd fd}|d |d  }ttd|jdd}t|| |d  |d  }	t|	| |d  }
|
|d 8 }
t|
| | }|d |d  |d< t dtdfd|d
 j	fd|j}t|| | }|d  |d 8  < t|| d S )Nr8   r^   r6   )tmintmaxr   r   rD   )r8   r  r>   rG  rd   rF  r=   r  )rF  rG  r8   )
r   rI   rf   rt   r
   rF   r!   r   r   r}   )rU   Zobsr  r  rK  r   simrL  r  rM  r  r  	expected6r  rV   rV   rW   test_dataset_math  sD      

	


 
zTestDataArray.test_dataset_mathc           	      C  s  t ddgddggddgddid}t||  |d dd df jd	d
jd }tjtg tj	tdgtj	gg g gddgd}tj
|| |jddgddddg}t|| |jdgddddg}t|| dddddg}dgddgdddgddgdgd}tj tjddddd||d}|jddgddgd}|ddg}t||j|  | }t||j|  d S )Nr   r=   r>   rD   r8   r9   r:   r   r   r  r  )levelscodesrC   r   r   .r;   r<   rn   ro   r  r]   r^   r_   rp   rq   )r;   r<   rn   ro   r  rE   )rs  r<  rs  r<  )r
   r!   r  r  r   rO   rP   r   rI   rg   rI  Zassert_index_equalrU  r  rJ   r   r  )	rU   r   r;   r<   r   rG   rF   stackedZ	unstackedrV   rV   rW   test_stack_unstack$	  s<    " 

 z TestDataArray.test_stack_unstackc              	   C  sV   t tjdddtdtddddd}|jdd	gd
}|d}t|| d S )NrD   r]   rA  r   r   r   r   r9   r8   )	allpointsrP  )r
   rI   rJ   r   rf   r  r  r!   )rU   r   rN  r   rV   rV   rW   (test_stack_unstack_decreasing_coordinateL	  s    
z6TestDataArray.test_stack_unstack_decreasing_coordinatec                 C  sd   t tddddgdddgd}|ddgd	 }t| d	d
}t|ddd}t|| d S )NrD   r;   r<   r   r=   )r:   r8   r9   r8   r9   r:   rd   r   r   )rO   r   rt   rp  r
   r  r!   )rU   dfsrk   r   rV   rV   rW   test_unstack_pandas_consistencyW	  s
    "z-TestDataArray.test_unstack_pandas_consistencyc                 C  s@   |j ddd}|jddgd}t|  dd}t|| d S )	Nr   T)r\   r   r;   r8   rM  r   r   )r  r  r
   	to_pandasr!   rU   r   r   rk   rV   rV   rW    test_stack_nonunique_consistency^	  s    z.TestDataArray.test_stack_nonunique_consistencyc              	   C  sD   t ddgddddgid}tjtdd |dd W 5 Q R X d S )Nr   r=   r8   r   z'x' is not a stacked coordinaterz   )r
   r   r   r   Zto_unstacked_datasetr   rV   rV   rW   ,test_to_unstacked_dataset_raises_value_errord	  s    z:TestDataArray.test_to_unstacked_dataset_raises_value_errorc                 C  sh  t tjddddtdtdtddtjddfdd}|jdd	}t |jjd
|jd}t	|| |jddddd	}t |jjd
|j
j|jj|jjd|jjjfdd}t	|| |jddddd	}t	|| |jddddddd}t	|| tt |dd W 5 Q R X tt |dddd W 5 Q R X tt |jdddddd W 5 Q R X d S )NrD   r]   r^   r8   r9   r   r   )r8   r9   r   r  r   FrB  )r   r9   r8   r   r9   r8   TrA  .r7  r:  )rC  r9  r8  )r9  )r
   rI   rJ   r   rt   r  r}   TrF   r    r8   r9   r   r  r   r   r   r;  r<  rV  rV   rV   rW   test_transposei	  sP    



     
zTestDataArray.test_transposec                 C  s   t | jj | j j d S r  )r    rN   r|   rJ  rT   rV   rV   rW   test_squeeze	  s    zTestDataArray.test_squeezec              	   C  s(  t dgddgfg}t d}|jdd}t|| t dddi}|jdd}t|| t ddgggd	d
dgd}t ddggd
dgd}|jdd}t|| t ddggggd	d
ddgd}t ddggd
dgd}|jdd}t|| t ddgggd	d
dgd}tt |jdd
d W 5 Q R X d S )Nr=   r8   r   Tr   Frb  r  r   r   dim_2r   r  Zdim_3r   r>   )r  r  )r
   rJ  r!   r   r   r   rU   r   rk   r   rV   rV   rW   test_squeeze_drop	  s$    



zTestDataArray.test_squeeze_dropc              	   C  s   t tjddddgd}| }d|jd< |d}t|| t	t
 |d W 5 Q R X |jddd	}t|| tj	t
d
d |d W 5 Q R X |jddd	}t|| |d}tj	t
d
d |d W 5 Q R X |jddd	}t|| d S )Nr>   rD   r8   r9   r   r   z	not foundr:  errorsr  rz   r   r:   )r
   rI   rJ   r   r   rF   rU  r!   r   r   r   r   )rU   rk   r   r   ZrenamedrV   rV   rW   test_drop_coordinates	  s$    





z#TestDataArray.test_drop_coordinatesc              	   C  sB   | j dddg}tt | j d}W 5 Q R X t|| d S Nr8   r@   rA   )rS   rU  r   r;  DeprecationWarningr!   r   rV   rV   rW   test_drop_multiindex_level	  s    z(TestDataArray.test_drop_multiindex_levelc                 C  s2   dddg}| j |}|D ]}||jkstqd S re  )rS   rU  r   ri   )rU   Z
dim_levelsr   r  rV   rV   rW   test_drop_all_multiindex_levels	  s    
z-TestDataArray.test_drop_all_multiindex_levelsc              	   C  s   t tjddddddgiddgd}|jddgd}|d d dd f }t|| tjtt	fd	d
 |jdddgd}W 5 Q R X |jdddgdd}t|| t
t |jdddgddd W 5 Q R X d S )Nr>   rD   r9   r   r=   r8   rE   rQ  znot .* in axisrz   r:  )r9   rc  )r  rc  )r
   rI   rJ   r   Zdrop_selr!   r   r   r   r   r;  rf  r   r  rV   rV   rW   test_drop_index_labels	  s    &

z$TestDataArray.test_drop_index_labelsc                 C  sL   t tjddddgd}|jddgd}|d d dd f }t|| d S )	Nr>   rD   r8   r9   r   r   r=   rQ  )r
   rI   rJ   r   Z	drop_iselr!   r  rV   rV   rW   test_drop_index_positions	  s    z'TestDataArray.test_drop_index_positionsc                 C  sV   t dddgdddddgfidd}|d}d|jks:t|jddd}t|| d S )	Nr=   r>   rD   r8   rE   Znot_a_coordr:  rb  )r
   Zdrop_indexesr   ri   r!   )rU   r   r   rV   rV   rW   test_drop_indexes	  s
    "
zTestDataArray.test_drop_indexesc                 C  s   t jdd}t j|d d ddf< t|ddgd}|d}|dd d }t|| |jddd	}t|| |jddd
}t|| |jddd
}|d d dd f }t|| d S )Nr]   r>   r   r;   r<   r   r=   r   )how)ZthreshrD   )rI   rJ   r   r   r
   Zdropnar!   )rU   r8   r   r   rk   rV   rV   rW   test_dropna	  s    



zTestDataArray.test_dropnac                 C  sD   t tddd}|jtdd}|j|jdk dd}t|| d S )Nr]   r8   r   r>   r!  Tr   )r
   rI   rf   rR  r  wherer8   r!   rU   r   rk   r   rV   rV   rW   
test_where
  s    zTestDataArray.test_wherec                 C  sB   t tddd}|jtdd}|jdd dd	}t|| d S )
Nr]   r9   r   r>   rQ  c                 S  s
   | j dk S )Nr>   rQ  r!  rV   rV   rW   <lambda>
      z1TestDataArray.test_where_lambda.<locals>.<lambda>Tr   )r
   rI   rf   rR  r  rn  r!   ro  rV   rV   rW   test_where_lambda
  s    zTestDataArray.test_where_lambdac                 C  s@   t ddg}t tjdtjgtd}|ddg}t|| d S )Nr;   r<   ra   TF)r
   rI   r   r   r   rn  r!   r`  rV   rV   rW   test_where_string
  s    zTestDataArray.test_where_stringc                 C  sb  ddgdddgddgdd	d
gdddggfdd}t dddgddd
gg|ddgd}| }t dddgdddgg|ddgd}t|| |d}t dddgdddgg|ddgd}t|| |d}t dddgdddgg|ddgd}t|| |d}t dddgd
dd
gg|ddgd}t|| |d}t dddgdddgg|ddgd}t|| d S )Nr   r   rs  r<  r=  r8   r9   r=   r>   rD   r   r>  r?  r   r   r   r]   )r
   Zcumsumr!   ZcumprodrU   rF   r   r   rk   rV   rV   rW   test_cumops
  s*    ""

"

"

"

"zTestDataArray.test_cumopsc                 C  s  ddgdddgddgdd	d
gdddggfdd}t dddgddd
gg|ddgd}| }t dddi}t|| |ddg}t|| |d}t ddd	g|d ddd}t|| |dg}t|| |d}t ddg|d ddd}t|| t| jtjdj| jtjd t ddtj	gd
dd
gg|ddgd}|
 }t dddi}t|| t tdd
d	dddgd}|jjdkst|jddd}t |jtddgdd}t|| d S )Nr   r   rs  r<  r=  r8   r9   r=   r>   rD   r   r>  r?  r   r   rn   )r9   rn   )r8   rn   r^   r_   Zuintr  Tr  skipna)r
   meanr!   r    rN   reducerI   r|   rK   r   countrf   r  r  rb   kindri   r}   intru  rV   rV   rW   test_reduce;
  s:    "






$$
$zTestDataArray.test_reducec                 C  s   ddgdddgddgdd	d
gdddggfdd}t dddgddd
gg|ddgd}|jdd}t |jjdd|jdd | D d}t|| |jd dkst|jd dkst|jddd}t |jjddd|jdd | D d}t|| d S )Nr   r   rs  r<  r=  r8   r9   r=   r>   rD   r   r>  r?  r   r   Tkeepdimsc                 S  s   i | ]\}}|d kr||qS )r  rV   rA  rV   rV   rW   r   r
  s       z6TestDataArray.test_reduce_keepdims.<locals>.<dictcomp>r   )r  r  c                 S  s   i | ]\}}|d kr||qS ))r9   r@  rV   rA  rV   rV   rW   r   ~
  s       )r
   ry  r   rG   r   r    r   ri   ru  rV   rV   rW   test_reduce_keepdimsd
  s,    "
z"TestDataArray.test_reduce_keepdimsc                 C  s   dd l }ddgdddgddgd	d
dgdddggfdd}tddd	gdddgg|ddgd}|j|jdd}|jdd}t|| d S )Nr   r   r   rs  r<  r=  r8   r9   r=   r>   rD   r   r>  r?  r   Tr  )
bottleneckr
   rz  Znanmeanry  r    )rU   r  rF   r   r   rk   rV   rV   rW   test_reduce_keepdims_bottleneck
  s    "z-TestDataArray.test_reduce_keepdims_bottleneckc                 C  s   ddgdddgddgdd	d
gdddggfdd}t dddgddd
gg|ddgd}tjtjtjfD ] }|tj|dj|ksbt	qbd S )Nr   r   rs  r<  r=  r8   r9   r=   r>   rD   r   r>  r?  r   r   ra   )
r
   rI   re  rc  float64r  r  ry  rb   ri   )rU   rF   r   rb   rV   rV   rW   test_reduce_dtype
  s    "zTestDataArray.test_reduce_dtypec              	   C  s   ddgdddgddgdd	d
gdddggfdd}t dddgddd
gg|ddgd}tt |jt|jd W 5 Q R X d S )Nr   r   rs  r<  r=  r8   r9   r=   r>   rD   r   r>  r?  r   r   )out)r
   r   r   r   ry  rI   r   rv   )rU   rF   r   rV   rV   rW   test_reduce_out
  s    "zTestDataArray.test_reduce_outrx  FNq      ?r         ?z	axis, dimr   r8   r9   c           	      C  s   | j jdd}tj|d< t|j||d|d}|dkr<tjntj}||jt	|d |d}tj
|j| t|rd|jkstnd|jkst|j| jkstd S )	NTdeepr  )r  r!  rx  )TNr?  r^  quantile)rL   r   rI   NaNr
   r  ZnanpercentileZ
percentiler}   r   rI  r   r   rG   ri   rH   )	rU   r  r  r  rx  rL   r   Z_percentile_funcrk   rV   rV   rW   test_quantile
  s    
zTestDataArray.test_quantilerv  Zmidpointlowerc                 C  sz   dddg}t | jj||d}ttjtdkrLtj| jjt	||d}ntj| jjt	||d}tj
|j| d S )Nr  r   r  r  z1.22.0interpolation)r
   rL   r  r	   rI   __version__ZnanquantilerN   r}   r   rI  r   )rU   rv  r  r   rk   rV   rV   rW   test_quantile_method
  s    
z"TestDataArray.test_quantile_methodc              
   C  s   t | j}dddg}tjtdd |j||d}W 5 Q R X |j||d}tj|j	|j	 t
jdd	0 tjtd
d |j|||d W 5 Q R X W 5 Q R X d S )Nr  r   r  z<`interpolation` argument to quantile was renamed to `method`rz   r  r  T)recordz!interpolation and method keywords)rv  r  )r
   rL   r   r;  r  r  rI   rI  r   r}   warningscatch_warningsr   r   )rU   rv  r   r  r   rk   rV   rV   rW   &test_quantile_interpolation_deprecated
  s    

z4TestDataArray.test_quantile_interpolation_deprecatedc                 C  sd   | j  }t|jdkst|ji ks*t| j jdd}t|jt| jksPt|j| jks`td S )Nr   Tr   )rL   ry  r   rH   ri   )rU   ZvmrV   rV   rW   test_reduce_keep_attrs
  s    
z$TestDataArray.test_reduce_keep_attrsc                 C  s   t g tdddd}d|jd< d|jd< t g }t g jddd}t|| |ji ksZtd|jd< |ddi}t|| |jdddkstd S )	Nr=   r>   rH  rH   r;   r<   rD   rn   )r
   r  rH   Zassign_attrsr!   ri   )rU   rk   newr   Z
new_actualrV   rV   rW   test_assign_attrs
  s    




zTestDataArray.test_assign_attrsfuncc                 C  s   |  ddS )Nr   r=   )r  r!  rV   rV   rW   rq  
  rr  zTestDataArray.<lambda>c                 C  s   t d|  S )Nr  )rI   r  r!  rV   rV   rW   rq  
  rr  c              	   C  st   t | j}||j|jksttdd ||ji ks<tW 5 Q R X tdd ||j|jksftW 5 Q R X d S )NFr   T)r
   rL   rH   ri   r   )rU   r  r   rV   rV   rW   test_propagate_attrs
  s    
z"TestDataArray.test_propagate_attrsc              	   C  s.  t tjdtjdgdtdidd}|d}t ddddgdtdidd}t|| t tddtdidd}||}| }t|| |td}t|| ||d d }t|| ||d d }t|| tjt	dd	 |ddi W 5 Q R X tjt
d
d	 |ddg W 5 Q R X d S )Nr=   rD   r8   r]   rE   r   r   zfillna on a DataArrayrz   r   r>   )r
   rI   r   rt   Zfillnar!   r   r   r   r   r   )rU   r;   r   rk   r<   rV   rV   rW   test_fillna  s$    "






zTestDataArray.test_fillnac                 C  sd   t tjddtdiddgd}t||d d dd\}}t||d d  t||d d  d S )	N)r_   rq   r8   Zabcdefr9   rE   r^   innerjoin)r
   rI   rJ   rs   r   r!   )rU   r   Zarray1Zarray2rV   rV   rW   
test_align"  s    
 
 zTestDataArray.test_alignc                 C  s|   t d}t dd}tt jdt jd|fg}tt jdt jd|fg}t||dd\}}|jt jksxtd S )N   r^   #   )r  r8   outerr  )	rI   rf   r
   rJ   r  rc  r   rb   ri   )rU   x1r  r;   r<   rn   ro   rV   rV   rW   test_align_dtype*  s    
  zTestDataArray.test_align_dtypec                 C  sb  t dddgddddgfgd}t ddgdddgfgd}|}t dtjdgddddgfgd}t||ddd\}}t|| t|| t|jt|jkstt||dd	d\}}t|| t|| t|jt|jk	stt dddgddddgfgd}t|dd
\}t|| t|jt|jks,tt|d	d
\}t|| t|jt|jk	s^td S )Nr=   r>   rD   r;   r   r  F)r  r   Tr   )r
   rI   r   r   r!   r-   r   ri   rU   r8   r9   expected_x2expected_y2r  r  rV   rV   rW   test_align_copy3  s&     





zTestDataArray.test_align_copyc              	   C  sF  t dddgdddddgid}t tdddd	gd
ddgdddgdd}t tddddd	gdddgdddgdd}t||dd\}}t|| t|| t||ddd\}}t|| t|| tj|jddd|ddd\}}t|jddd| t|| tj	t
dd" t|jddd|dd W 5 Q R X d S )Nr=   r>   rD   r8   r   r   	   r*  r9   rj  r  g @r   overrider  )excluder  Trz  'cannot align.*join.*override.*same sizerz   r!  )r
   rI   rf   r  r   r!   r  r  r   r   r   r  )rU   leftrightZexpected_rightZnew_leftZ	new_rightrV   rV   rW   test_align_overrideN  s<    



   

 z!TestDataArray.test_align_overridedarraysrD   c              	   C  s.   t jtdd tj|ddi W 5 Q R X d S )Nr  rz   r  r  )r   r   r   r  r   )rU   r  rV   rV   rW   test_align_override_erroro  s
     z'TestDataArray.test_align_override_errorc           
      C  sD  t ddgddggdddgfdddgfgd	}t ddgddggddd
gfdddgfgd	}t dgdgd
gddd}t|||ddgd\}}}t ddgddgtjtjggdddd
gfdddgfgd	}t tjtjgddgddggdddd
gfdddgfgd	}t tjtjdgdgddd
gddd}	t|| t|| t|	| d S )Nr=   r>   rD   r]   r;   r   r   r<   r   r7   r^   r_   rp   rH  r   r  )r  r  r
   r   rI   r   r!   
rU   r8   r9   r   r  r  Zz2r  r  Zexpected_z2rV   rV   rW   test_align_exclude  s(    ,,  

z TestDataArray.test_align_excludec                 C  s   t dddgddddgfgd}t ddgdddgfgd}t||d	ddddgid
\}}t dddgddddgfgd}t tjddgddddgfgd}t|| t|| t|d	dddddgid
\}t dtjddgdddddgfgd}t|| d S )Nr=   r>   rD   r;   r   r6   r   r   r  )r  r   rp   r  )rU   r8   r9   r  r  r  r  rV   rV   rW   test_align_indexes  s     

$z TestDataArray.test_align_indexesc                 C  sZ   t dddgdgdt ddgdgdg}t|ddgi\}}t||d  t||d  d S )Nr=   r>   rD   r8   r   r  r   r
   r   r!   )rU   Zarraysresult0result1rV   rV   rW   "test_align_without_indexes_exclude  s    &z0TestDataArray.test_align_without_indexes_excludec                 C  sz   t ddgdgd}t ddgdddgfgd}t||\}}t|| t|| t||dgd\}}t|| t|| d S )	Nr=   r>   r8   r   r;   r<   r   r  r  )rU   Zarray_no_coordZarray_with_coordr  r  rV   rV   rW   test_align_mixed_indexes  s    


z&TestDataArray.test_align_mixed_indexesc              	   C  s   t jtdd. ttdddgdgdtddgdgd W 5 Q R X t jtdd6 ttdddgdgdtddgdddgfgd	 W 5 Q R X d S )
Nz.cannot.*align.*dimension.*conflicting.*sizes.*rz   r=   r>   rD   r8   r   r   r   )r   r   r   r   r
   rT   rV   rV   rW   !test_align_without_indexes_errors  s    2z/TestDataArray.test_align_without_indexes_errorsc                 C  s   t ddgdgdddgid}t ddgdgdddgid}t ddtjgdgddddgid}t tjddgdgddddgid}tj||d	d
\}}t|| |jj|jjkstt|| |jj|jjkstd S )Nr   r=   r8   r;   r<   r   r>   rn   r  r  )	r
   rI   r  r  r   r!   r8   rb   ri   )rU   r;   r<   Z
expected_aZ
expected_bZactual_aZactual_brV   rV   rW   test_align_str_dtype  s"    
  
  

z"TestDataArray.test_align_str_dtypec                 C  s
  t ddgdddgfgdd}t ddgdd	d
gfgdd}t||\}}dddgfdd	d
gfg}t ddgddgg|dd}t ddgddgg|dd}t|| t|| t tjdd	ddgd}t tjd	dddgd}t||\}}|}|j}t|| t|| d S )Nr=   r>   r;   r   r   r8   r  r<   rD   r]   r9   rd   r   )r
   r   r!   rI   rJ   r   rZ  )rU   r8   r9   r  r  r  r  r  rV   rV   rW   test_broadcast_arrays  s    


z#TestDataArray.test_broadcast_arraysc                 C  s   t ddgddggdddgfdddgfgd	}t ddgddd
gfgd	}t ddgddgtjtjggdddd
gfdddgfgd	}t tjtjgddgddggdddd
gfdddgfgd	}t||\}}t|| t|| d S )Nr=   r>   rD   r]   r;   r   r   r<   r   r7   )r
   rI   r   r   r!   r  rV   rV   rW    test_broadcast_arrays_misaligned  s    ,
z.TestDataArray.test_broadcast_arrays_misalignedc                 C  s   t ddgdddgfgdd}t dd	d
}t ddgdddgfgdd}t ddgdddgfgd	d}t||\}}t|| t|| t|jt|jkstt|\}t|| t|jt|jkstd S )Nr=   r>   r;   r   r   r8   r  rD   r9   rd   )r
   r   r!   r-   r   ri   r  rV   rV   rW   test_broadcast_arrays_nocopy  s    



z*TestDataArray.test_broadcast_arrays_nocopyc           
      C  s
  t ddgddggdddgfdddgfgd	}t ddgddd
gfgd	}t dddid	}t|||dgd\}}}t ddgddgtjtjggdddd
gfdddgfgd	}t tjddgdddd
gfgd	}t dddgdgddd
gddd}	t|| t|| t|	| d S )Nr=   r>   rD   r]   r;   r   r   r<   r   r7   r^   r  rH  r   )r
   r   rI   r   r!   r  rV   rV   rW   test_broadcast_arrays_exclude  s"    ,   

z+TestDataArray.test_broadcast_arrays_excludec           	      C  s   t dddgtdfi}t|j|j|j\}}}t|j| tjt	dt	ddd\}}t
|ddgdd	}t
|ddgdd	}t|| t|| d S )
Nr;   r8   r9   )r^   r_   r^   r_   Zij)Zindexingr   )r   rI   r   r   r8   r9   r;   r!   Zmeshgridrf   r
   )	rU   rM   Zx_bcZy_bcZa_bcr  r  Zexp_xZexp_yrV   rV   rW   test_broadcast_coordinates"  s     
z(TestDataArray.test_broadcast_coordinatesc           	   	   C  sl  t d }td}t|| tjd}tjdddgdd}t ||gd}| }t|j	| t|j
| t|j
jd tjdd	}t |ddddgfd
ddgfgdd}| }t|j	| t|j
dddg t|jddg dD ]H}tdd t| }t tjj| |d}t | |}t|| qtjtdd" t tjdd	ddd  W 5 Q R X d S )Nr   rD   r;   r<   rn   r8   rd   r   r>   r9   r   r=   r:   r  )r1  r   r  r   zCannot convertrz   r]   r^   )r
   rU  rI   r   r   rJ   r   rO   r   r}   r   re   r   rs   r   rU  r!   r   r   r   )	rU   r   rk   r}   r   r   rv   rG   r/  rV   rV   rW   test_to_pandas.  s6    

  zTestDataArray.test_to_pandasc              	   C  s  t jdd}t|ddddgfdtdfgdd	}| }| d }t|j|j t|j	|j	 t|j
j|j
j |jddgd
d }t| d|j ddddgf|jd< |  }dgd dgd  dgd  |d< |ddg }| }t|j|j t|jj|jj t|j
j|j
j tjtdd |jdddgd
 W 5 Q R X tjtdd |jddd  W 5 Q R X d |_	tjtdd |  W 5 Q R X d S )NrD   r]   r   r=   r>   r   Zcdefr:   rd   )Z	dim_orderr   r   r   rF  z$does not match the set of dimensionsrz   zcannot convert a scalarrn   )r   r   unnamed)rI   rJ   r   r
   rs   	to_seriesto_dataframer   r}   re   r   r  r  rF   to_framer   r   r   r   rR  )rU   arr_npr   rk   r   rV   rV   rW   test_to_dataframeQ  s0    $"zTestDataArray.test_to_dataframec                 C  s   t jdd}tjjddgtdgddgd}t|d	|fd
dddgfgdd}| }t	|d j
|  t	|jjtd t	|jjd ddg t	|jjd ddg t	|jjd dddg d S )Nr]   rD   r=   r>   rs  r   r   rB   MIrF  r^   r_   rp   r:   rd   ABCr   r;   r<   )rI   rJ   r   rO   rP   rQ   rs   r
   r  r   r}   flattenr   rC   rK  rU   r  rR   r   r   rV   rV   rW   test_to_dataframe_multiindexs  s      z*TestDataArray.test_to_dataframe_multiindexc                 C  sv   t jdd}tjjddgtdgddgd}t|d	|fd
g fgdd}| }t	|dks`t
t|jjtd d S )Nr]   r   r=   r>   rs  r   r   rB   r  rF  r:   rd   r  )rI   rJ   r   rO   rP   rQ   rs   r
   r  r   ri   r   r   rC   r  rV   rV   rW   test_to_dataframe_0length  s     z'TestDataArray.test_to_dataframe_0lengthc                 C  s   t dddgddd}| }tdddg|j tdddg|jj d|jksPtd|jjks`t| }| }|	|s~td S )Nr=   r>   rD   r8   r   r   )
r
   r  r   r}   r   re   ri   r  r  r   )rU   r   r   r   rk   rV   rV   rW   &test_to_pandas_name_matches_coordinate  s    z4TestDataArray.test_to_pandas_name_matches_coordinatec                 C  s   | j  d }| j  }t|j|j t|jj|jj d|jksFtt| j t	
|ddg d |_| j d }t|t	
|ddg d S )Nr:   r8   r9   )rN   r  r  r   r}   r   re   ri   r!   r
   from_seriesrU  r   )rU   rk   r   r  rV   rV   rW   test_to_and_from_series  s    
 z%TestDataArray.test_to_and_from_seriesc                 C  s~   t dddgdddgd}|djd	dd
}|d	 }|jdddddgk s\t|jdddddgk sztd S )Nr=   r>   rD   r]   r^   r_   )r   r   numalphar^  r   )r  r   )rO   r   Zrename_axisr  Z	to_xarrayrR  r   ri   )rU   rR  r   rV   rV   rW   test_from_series_multiindex  s
    z)TestDataArray.test_from_series_multiindexc                 C  sf   dd l }tjddgddgd}tj|dd}tj|d	d}t|j|jsLt|j	 |_t
|| d S )
Nr   r=   r>   r  )r<   r>   r   TsparseF)r  rO   r   r
   r  r   r   COOri   Ztodenser!   )rU   r  r   actual_sparseZactual_denserV   rV   rW   test_from_series_sparse  s    z%TestDataArray.test_from_series_sparsec                 C  s   dd l }tjjtdtdgddgd}tjtjdt	||dj
ddd}tj|d	d
}|j|jtjj}tjj|dd
}|jj}tj|| d S )Nr   rD   r^   r;   r<   rB   r   )r  Zrandom_stateFr  T)r  rO   rP   rQ   rI   rf   r   rJ   r/  r   sampler
   r  r  
from_numpyr   r   rF   r  rI  r    )rU   r  r   r   Zdenser  r  Zactual_coordsrV   rV   rW   "test_from_multiindex_series_sparse  s    $  z0TestDataArray.test_from_multiindex_series_sparsec                 C  sD   t tjddd}tj|ddgd}|jdks2tt|dr@td S )	Nr*  Zuint8ra   r8   r9   r   r  rx   )r   rI   r   r  r
   rx   ri   hasattr)rU   r   r   rV   rV   rW   test_nbytes_does_not_load_data  s    z,TestDataArray.test_nbytes_does_not_load_datac                 C  sT   t jg tjd}t|}t|dks*t| }t|dksBt|	|sPtd S )Nra   r   )
rO   r   rI   r  r
   r  r   ri   r  r   )rU   rk   r   r   rV   rV   rW   test_to_and_from_empty_series  s    
z+TestDataArray.test_to_and_from_empty_seriesc                 C  sN   t tdstd tjtdttdd}t	|}dt
|ksJtd S )NCategoricalIndexz%requires pandas with CategoricalIndexr^   Zaabbcr   z'a')r  rO   r   skipr   rI   rf   r  rs   r
   rh   ri   )rU   rS  r   rV   rV   rW   test_series_categorical_index  s
    

z+TestDataArray.test_series_categorical_indexr   c           	   	   C  s  t tjdddddgiddgdd}d	d
i|_dd|j i ddddgi did}|rfd	d
i|d< |j|d}||ks~tt	|t 
| dd|j ddddgdid}t	|t 
| dd|jd}t	|dt 
| d|jddddgiid}tjtdd t 
| W 5 Q R X ddi}tjtdd t 
| W 5 Q R X | }|d= |d d d= tjdkrzdnd}|d d |dd  |d!d"d  |jd#|d$}||kstd S )%Nr>   rD   r8   r;   r<   r9   r:   rd   r`   spamr   r!  )rG   r   rH   )re   rG   r   rH   rF   r   )r   )rG   r   )re   rG   r   rF   )re   rG   r   r   )rG   r   rF   z:cannot convert dict when coords are missing the key 'dims'rz   rG   r  z*cannot convert dict without the key 'data'rF   littlez<U1z>U1r  )rb   rv   r  r   F)r   r   )r
   rI   rJ   r   r   r}   tolistto_dictri   r!   	from_dictrU  r   r   r   r   sys	byteorderupdate)	rU   r   r   rk   r   ro   Zexpected_no_dataZ
endiantypeZactual_no_datarV   rV   rW   test_to_and_from_dict  sb     
  
 z#TestDataArray.test_to_and_from_dictc                 C  sZ   t jdd}tjddd}dddg}t|||dd	d
gd}t| }t|| d S )Nr6   rD   20130101r  lS@T@L   r  r@  r  r@  r   )	rI   rJ   r   rO   r^  r
   r  r  r!   )rU   r8   r  r@  r   r/  rV   rV   rW   #test_to_and_from_dict_with_time_dim3  s    
z1TestDataArray.test_to_and_from_dict_with_time_dimc                 C  st   t jdd}t j|d< ttjddd}t j|d< dddg}t|||d	d
dgd}t|	 }t
|| d S )Nr6   rD   r>   r  r  r  r  r  r  r  r@  r   )rI   rJ   r   r   rO   r   r^  r
   r  r  r!   )rU   r9   r  r@  r   r/  rV   rV   rW   "test_to_and_from_dict_with_nan_nat;  s    


z0TestDataArray.test_to_and_from_dict_with_nan_natc                 C  s   t jdd}td}dddg}t dt dd	d
gdd}t|||dddg|d}|d  |d  dd}|	 }||d kst
d S )Nr6   rD   rP  r  r  r  i  %   gfffff[r?  r`   )createdrF   
maintainerr  r  r@  r   r  rF   rH   )rI   rJ   r   rs   r  r   r
   itemr  r  ri   )rU   r8   r  r@  rH   r   Zexpected_attrsr   rV   rV   rW   test_to_dict_with_numpy_attrsE  s    


z+TestDataArray.test_to_dict_with_numpy_attrsc                 C  sr  t jd}|jdd}t j|dk |}t|}| }t|}t|| t	|| |jdd}t
|t jjsttt|j|j t|j|t j t||t j |jdd}d|d	< |d	 dkst|d	 jdkst|j|jkstt
|t jjstd
t jdddfD ]*}	t|	}| }
t
|
t jjstqd
}t|}	t|	}| }
t|
j|ksntd S )N,   r5   rw   r   Tr  Fg      $@r  r]   4Zfour)rI   rJ   r/  random_samplemaZmasked_wherer
   Zto_masked_arrayr   r    r   ZMaskedArrayri   maskr}   Zfilledr   basert   r   )rU   rsr8   Zx_maskedr   Z
x_masked_2Zda_2Zda_masked_arrayZmasked_arrayrK   r  NrV   rV   rW   test_to_masked_arrayZ  s8    

z"TestDataArray.test_to_masked_arrayc           
      C  s  t d ttddddddgddifd	tjd
ddfgdddid}tdddgtd	dddgg}|	 }t
| | |j|jkstt| |jkstt| |D ]$\}}|j|jkstt
||j q|j|jd kst|d }t|dkstt|d dks$tt|}t|| t|}|j|jksRt|j |j kslt|j D ]}	t
|j|	 |j|	  qvdS )zClassic with 1D axescdms2r_   r>   rD   distancer   unitsmetersr\   rX  r  r:   r   r   re   rH   r   r=   z2000-1-1 0:0:0.0N)r   importorskipr
   rI   rf   r  rO   r^  r   to_cdms2r   asmar+  re   ri   r   
getAxisIdsrG   zipZgetAxisListr}   r   rH   ZgetAxisZasComponentTimer   strr   r!   rF   r   )
rU   r%  r  r   r  r   Zcomponent_timesr/  backZ
coord_namerV   rV   rW   test_to_and_from_cdms2_classic  s<    



z,TestDataArray.test_to_and_from_cdms2_classicc           	   	   C  sf  t d tjddddf }t|d ddgdd	}t|d
 ddgdd	}tt|jd dgdd	}tt|jd
 dgdd	}t|jd
dddgt||||ddd}|	 }t
| |jkstt|jd |   t|jd |   t|}|j|jkstt|j t|j ks6tt|jd |jd  t|jd |jd  dS )zhCurvilinear (structured) grid

        The rectangular grid case is covered by the classic case
        r  NrD   r]   r=   r9   r8   lonr   r   r@  r^  )r8   r9   r  r@  ZsstrG   rF   re   )r   r  rI   Zmgridr
   rf   rv   sumr  r  r   r  rG   ri   r   rF   getLongituder  getLatituder   r   r   )	rU   Zlonlatr  r@  r8   r9   r%  r   r  rV   rV   rW   test_to_and_from_cdms2_sgrid  s*    

"z*TestDataArray.test_to_and_from_cdms2_sgridc                 C  s2  t d ttjjdddgdd}ttjjdddgdd}ttddgdd}ttddg|||dd	}| }t|	 |j
kstt|jd |   t|jd |   t|}t|j
t|j
kstt|j t|j kstt|jd |jd  t|jd |jd  d
S )zUnstructured gridr  r^   r  cellr  r   r@  )r  r@  r  r   N)r   r  r
   rI   rJ   uniformrf   r  r   r  rG   ri   r   rF   r  getValuer  r   r   r   )rU   r  r@  r  r%  r   r  rV   rV   rW   test_to_and_from_cdms2_ugrid  s$    
  
"z*TestDataArray.test_to_and_from_cdms2_ugridc              	   C  s   t ddgdd}tjtdd |  W 5 Q R X |jdd}tddddgfi}t|| t ddgddd	d
id}| }tddddgd	d
ifi}t|| |jdd}tddddgd	d
ifid	d
id}t|| tt |d}W 5 Q R X d S )Nr=   r>   r8   r   zunable to convert unnamedrz   r:   rd   r9   Ztestattr)rG   re   rH   T)Zpromote_attrsr  r`   )r
   r   r   r   
to_datasetr   r!   r   )rU   r  r   rk   namedrV   rV   rW   test_to_dataset_whole  s$    

 
z#TestDataArray.test_to_dataset_wholec              	   C  s   t dddgdtdfgddid}tddddddid	}|d}t|| tt |jdd
d W 5 Q R X |jdd}t|| t dddgdd}tdddd}|d}t|| d S )Nr=   r>   rD   r8   r  r;   rF   rH   r;   r<   rn   r  r:   rd   r  r   )r   r=   r>   )	r
   rs   r   r  r!   r   r   r   to_array)rU   r   rk   r   r/  rV   rV   rW   test_to_dataset_split  s    "



z#TestDataArray.test_to_dataset_splitc                   s^   dd l   fddtddD }tdddgd|fgd	did
}|djdd}t|| d S )Nr   c                   s   g | ]}  d d|qS )i  r=   )dater   ro   datetimerV   rW   r     s     z>TestDataArray.test_to_dataset_retains_keys.<locals>.<listcomp>r=   r]   r>   rD   r8   r;   r"  r  )r)  rt   r
   r  r$  r    )rU   r  r   r`  rV   r(  rW   test_to_dataset_retains_keys  s
    z*TestDataArray.test_to_dataset_retains_keysc                 C  s   t tddddgtdtdtddd	}d
| ks>td|jdd ksVt|jddd }d|ks|d|ks|tt tdddgd}d
| kstd S )Nr  r;   r<   rn   r]   rD   r>   r#  r    zc = 0r   r  r=   )r<   rn   zb = 1, c = 0zc = 0, b = 1)r]   r=   r   )r
   rI   r   rt   _title_for_sliceri   r  )rU   r   titleZa2rV   rV   rW   test__title_for_slice  s    z#TestDataArray.test__title_for_slicec                 C  sT   t td}d|jd< d|jd< d}|j|d}|t|ksBt|dsPtd S )	Nr]   Zdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar;   Zdbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr<   r   )truncatez...)r
   rI   r   rF   r,  r   ri   endswith)rU   r   Zncharr-  rV   rV   rW   test__title_for_slice_truncate"  s    

z,TestDataArray.test__title_for_slice_truncatec                 C  sN   t tjddddgd}|d}t tj|jddddgd}t|| d S )NrD   r]   r8   r9   r   r=   r^  )r
   rI   rJ   r   diffr}   r    rV  rV   rV   rW   test_dataarray_diff_n1-  s    
z$TestDataArray.test_dataarray_diff_n1c                 C  s`   t tddddgtdgd}|jd }t dgd dgtddgdd	}|d}t|| d S )
Nr   r7   r>   r  r6   r   r=   r  r  )r
   rt   rF   r2  r    )rU   r   r  rk   r   rV   rV   rW   test_coordinate_diff3  s
    
 
z"TestDataArray.test_coordinate_diffoffsetr   zfill_value, dtypec                 C  s   t dddgdd}|jd|d}|tjkr0tj}t |ddgdd}t|| |j|ksZtt dddgdddd	gfg}t |	 |}|j|d
}t|| d S )Nr=   r>   rD   r8   r   )r8   r  r;   r<   rn   r!  )
r
   shiftr   r  rI   r   r!   rb   ri   rU  )rU   r5  r  rb   r   r   rk   rV   rV   rW   
test_shift;  s    

zTestDataArray.test_shiftc                 C  sV   t dddgdtdidd}|jddd}t dddgddddgfgd	}t|| d S )
Nr=   r>   rD   r8   rE   T)r8   Zroll_coordsr   r   r
   rt   Zrollr!   r  rV   rV   rW   test_roll_coordsM  s    zTestDataArray.test_roll_coordsc                 C  sT   t dddgdtdidd}|jdd}t dddgddddgfgd}t|| d S )	Nr=   r>   rD   r8   rE   r!  r   r   r8  r  rV   rV   rW   test_roll_no_coordsS  s    z!TestDataArray.test_roll_no_coordsc                 C  sb   t tjjdddddidddgid	d
}tddd}|j|d}| }||_t|| d S )Nr3  r  r   r4   r1   r8   r]   rD   
helloworldrG   rH   rF   re   r>   r6  )r
   rI   rJ   rf   r  r   r   r!   )rU   r   Znew_datar   rk   rV   rV   rW   test_copy_with_dataY  s    
z!TestDataArray.test_copy_with_data)r   zdeep, expected_origr;   rE     c                 C  s   t jtdddgddgddgddgdddd	gd
}||}d|d jd< t jt dtddgdddgidgd
}t|d | t|d | dS )zThe test fails for the shallow copy, and apparently only on Windows
        for some reason. In windows coords seem to be immutable unless it's one
        dataarray deep copied from another.r>   r=   r8   r9   r   r#  r;   r<   rn   rE   r>  N)	r  r
   rI   r   r   r   r   r   r!   )rU   r  Zexpected_origr   Zda_cpZexpected_cprV   rV   rW   test_copy_coordsg  s    

zTestDataArray.test_copy_coordsc                 C  s,   t d}t|jt d t|jt d d S )Ny      ?       @r=   r>   )r
   r!   realimagr   rV   rV   rW   test_real_and_imag  s    z TestDataArray.test_real_and_imagc              	   C  sz   t dddiddid}tjtdd d	|_W 5 Q R X tjtdd d	|_W 5 Q R X tjtdd d	|_W 5 Q R X d S )
Nr   scalarr=   r:   r`   r"  zcannot set attrrz   r>   )r
   r   r   r   rC  r:   rc   r   rV   rV   rW   test_setattr_raises  s    z!TestDataArray.test_setattr_raisesc              	   C  s   t tjjdddddidddgid	d
}t|d}|jdd}tddgddgg|_t|| t|dtd}tddgddgg|_|j	tkst
t|| tjtdd t|ddtid W 5 Q R X d S )Nr3  r  r   r4   r1   r8   r]   rD   r;  r<  r>   Tr  r  )r  rb   z'dtype' cannot be dict-likerz   )r
   rI   rJ   r   r   r   r}   r!   boolrb   ri   r   r   r   )rU   r   r   expectrV   rV   rW   test_full_like  s"    



zTestDataArray.test_full_likec              	   C  s  t ddd}t ddd}td}t dd}t||||gdd	d
gd}td}t||gd
gd}||}t ||d}	t|	||gdd	gd}
t|
| ||}t j||dddgdddgfd}t|}t|| t dd}t ddd}t||||gdd	d
gd}||}t j||ddgddgfd}t|||gddgd}t|| |j|dd}||}t|| |j|dd}|j|dd}t|| t	
t ||jdd W 5 Q R X t	
t ||j W 5 Q R X d S )Nr   rD   r_   r^   r]   r   r_   r^   r]   r8   r9   r   rE   r>   r   r   r=   r>   Zaxes  r7   r^   r]   r7   r  .r   )r  r8   r9   r   dmrd   )rI   r  rt   rf   r  r
   dot	tensordotr    r   r   NotImplementedErrorr  r   r}   )rU   r8   r9   r   da_valsr   dm_vals1dm1r  expected_vals1r  rK  expected_vals2r   Zdm_vals3r  Zdm3rL  Zexpected_vals3r  rM  rN  r  r  rV   rV   rW   test_dot  s@    


 





zTestDataArray.test_dotc              
   C  s  t ddd}t ddd}td}t dd}t||||gdd	d
gd}tdd}td}t||gd
gd}tjdd* tj	t
dd || W 5 Q R X W 5 Q R X tj||dd\}	}
||}t |	j|
jd}t|||	jgdd	gd}t|| t dd}t ddd}t||||gdd	d
gd}tj||dd\}	}
||}t j|	j|
jddgddgfd}t|||gddgd}t|| d S )Nr   rD   r_   r^   r]   r   rH  r8   r9   r   rE   r>   exactZarithmetic_join&cannot align.*join.*exact.*not equal.*rz   r  r  rI  rK  rL  r7   r  r=   rJ  )rI   r  rt   rf   r  r
   r  r   r   r   r   rN  r   rO  r}   r9   r    )rU   r8   r9   Zz_arQ  r   Zz_mrR  rS  Z
da_alignedZ
dm_alignedr  rT  r  Zdm_vals2r  Zdm2rK  rU  r   rV   rV   rW   test_dot_align_coords  s>    
 


  z#TestDataArray.test_dot_align_coordsc                 C  sn   t ddd}t ddd}td}t dd}t||||gdd	d
gd}|| }||}t|| d S )Nr   rD   r_   r^   r]   r   rH  r8   r9   r   rE   )rI   r  rt   rf   r  r
   rN  r!   )rU   r8   r9   r   rQ  r   r`  rk   rV   rV   rW   test_matmul  s    
zTestDataArray.test_matmulc              
   C  s   t d}t dd}t d}t||gdgd}t||gdgd}|| }||}t|| tjdd( tjt	dd	 ||  W 5 Q R X W 5 Q R X d S )
Nr_   r>   rq   r8   rE   rW  rX  rY  rz   )
rI   rf   r
   rN  r!   r  r   r   r   r   )rU   Zx_aZx_brQ  Zda_aZda_br`  rk   rV   rV   rW   test_matmul_align_coords  s    



 z&TestDataArray.test_matmul_align_coordsc                 C  s`   t | jjd | jd< | jjd }| jd jd }||ks@t| jdkjd }||ks\td S )Nr8   r6   )rI   rf   rN   r   r   ri   r   rV   rV   rW    test_binary_op_propagate_indexes.  s    z.TestDataArray.test_binary_op_propagate_indexesc              	   C  s   d}d}dddgdddg }}t |||fg}t |||fg}t j|d || }W 5 Q R X t j|||d\}}	t tjdd	tjg|ddddgfg}
t||
 d S )
Nr8   r  r   r=   r>   rD   rX  r  r]   )r  r
   r   r   rI   r   r    )rU   r  Z
align_typeZcoords_lZcoords_rZ	missing_3Z	missing_0r   Zmissing_0_alignedZmissing_3_alignedrk   rV   rV   rW   test_binary_op_join_setting9  s      
&z)TestDataArray.test_binary_op_join_settingc                 C  sV  t ddgddggdddgfdddgfg}t ddgddggdddgfdddgfg}t d	gdd
gfg}||}t ddtjgdddgtjddggddddgfddddgfg}t|| ||}t ddtjgdddgtjddggddddgfddddgfg}t|| ||}t ddgddgd	d	ggdddd
gfdddgfg}t|| d S )Nr   r8   r;   r<   r9   r   r=   rn   r>   ro   )r
   Zcombine_firstrI   r   r    )rU   ar0ar1Zar2r   rk   rV   rV   rW   test_combine_firstG  s*    **




 z TestDataArray.test_combine_firstc           	      C  s  t ddgddgddggddd	d
gfdddgfg}t ddgddgddggdd
d	dgfdddgfg}t ddgddgddggdd
d	dgfdddgfg}|}t dddgddd	d
gfg}||}t|| |j|dd}t|| t ddgdd	d
gfg}||}t|| |}t dddgddd	d
gfg}t ddgdddgfg}|||g}t|| |}|d}t|| |}|ddg}t|| d S )Nr=   r>   rD   r]   r^   r_   r8   rn   r<   r;   r9   r   r?  c   b   F)Z	ascendinga   Z   r   )r
   Zsortbyr    )	rU   r   Zsorted1dZsorted2drk   Zdaxr   Z	dax_shortdayrV   rV   rW   test_sortby`  s@       







zTestDataArray.test_sortbyc                 C  s   t ddtjdgg}t ddtjdgg}t ddtjdgg}t|d| t|d| t dddg}t|d| t ddd	g}t|d| t d
dtjddgdd}t ddtjddgdd}t|jddd| d S )NrD   r]   r=   r>   r   r   rn   r<   r;   g      @r  r  g      @rM  r   r  r  r   r   T)Zpct)r
   rI   r   r    Zrank)rU   arZexpect_0Zexpect_1r8   r9   rV   rV   rW   	test_rank  s    zTestDataArray.test_rankuse_daskuse_datetimez'ignore:overflow encountered in multiplyc           	   	   C  s*  |rt std tjtjddddddd}tjj	|d}|sF|}tt
dd	|  d
|d   dd|  d|d   fd|ddgdd}|r|ddi}n|}|dd}td
d	dgdddggddddgddgddj}t|j|dd t 8 tdt
j |jdddd}|j  s0tW 5 Q R X t
j|dddf< |rb|ddi}n|}|jddddd}t|j|dd d|kst|jddddd }t|j|dd |jdkstt
j|jddg t < tdt
j |jdd!dd}t
j|j dd"g W 5 Q R X d S )#Nrequires daskz
1970-01-01rY  r6   rZ  r!  r8   r   gV瞯<g`P/:r>   r  g+=gG^Z9)ro   r8   r   r=   )r8   ro   r   ro   )ro   degree)rm  ro   MbP?Zrtolr:  r  T)r  rD   )rx  ZcovZpolyfit_covariance)rx  r  rq   F)r#   r   r  r  r
   rO   r^  coremissingZget_clean_interp_indexrI   r  r   ZpolyfitrZ  r   Zpolyfit_coefficientsr  r  simplefilterZRankWarningZpolyfit_residualsr0  r   ri   r   Zx_matrix_rankrI  Zassert_almost_equalr   )	rU   rj  rk  Zxcoordr8   Zda_rawr   r  rk   rV   rV   rW   test_polyfit  s\    
  .

zTestDataArray.test_polyfitc              	   C  sH  t tdddd}|jdd}t tjtddddtjddtjd	}|jd
ksbt	t
|| tj dgdd}|jdd}tj tjdtjgdd}t
|| |jddd}tj dddgdd}t
|| ttjtdkrtjtdd |jdtjd W 5 Q R X n.|jdtjd}tj dddgdd}t
|| d S )N<   rD   r]   r^   r=   rD   )r   constantru  r  r  mode	pad_widthconstant_values)rp   r]   r^   r  r8   r   r=   r!  g82?r8   r{  z1.20z#cannot convert float NaN to integerrz   l         )r
   rI   rf   r  ru  r  rc  r   rv   ri   r!   r  r  r	   r  r   r   r   rU   rh  r   rk   rV   rV   rW   test_pad_constant  s8    


 zTestDataArray.test_pad_constantc              	   C  s   t tdddddtdfdtdfdtdfg}|jdd	d
}t tjtddddddd	ddtjtdtjddtjdfdtdfdtdfg}t|| d S )Nrt  rD   r]   r^   r8   r9   r   ru  r=   r|  rv  rw  rx  )	r
   rI   rf   r  ru  r  rc  r   r!   r}  rV   rV   rW   test_pad_coords  s2    &	zTestDataArray.test_pad_coordsry  )Zminimumr  ry  Zmedianstat_lengthru  r2  )r]   r>   )r   r]  c                 C  s   t tdddd}|jdd||d}t|trF|d d	|d
 f}t tjtddddd||d}|jdksztt	|| d S )Nrt  rD   r]   r^   ru  r3  )r   r]  ry  r  r   r   r]  ru  r  r3  )rz  ry  r  rp   r]   r  
r
   rI   rf   r  ru  r   r  rv   ri   r!   )rU   ry  r  rh  r   rk   rV   rV   rW   test_pad_stat_length  s    
z"TestDataArray.test_pad_stat_length
end_values)rD   r^   c                 C  s   t tdddd}|jddd|d}|d kr8d	}nt|trT|d
 d|d f}t tjtdddddd|d}|jdkstt	|| d S )Nrt  rD   r]   r^   ru  r3  Zlinear_ramp)r   r]  ry  r  r   r   r   r]  r  )rz  ry  r  r  r  )rU   r  rh  r   rk   rV   rV   rW   test_pad_linear_ramp-  s*       
z"TestDataArray.test_pad_linear_ramp)ZreflectZ	symmetricreflect_type)NZevenZoddc                 C  s   t tdddd}|jdd||d}tddddd|d	}|d k	rV||d
< t tjf |}|jdksttt|| d S )Nrt  rD   r]   r^   ru  r3  )r   r]  ry  r  r  )r   rz  ry  r  r  )r
   rI   rf   r  ru  rv   ri   r!   )rU   ry  r  rh  r   Z	np_kwargsrk   rV   rV   rW   test_pad_reflectD  s        zTestDataArray.test_pad_reflectr!  rH   rk   rH  defaultr+  FalseTruec              	   C  s   t jddgdddddg|fi|d}t jddddgdddtjddtjg|fi|d}|d kr`dn|}t|d	( |jdd
iddd}t j|| W 5 Q R X |jdd
idd|d}t j|| d S )Nr=   r>   r8   rn   r   r  r   r  r   )r=   r=   rv  )ry  r{  )ry  r{  r!  )r  r
   rI   r   r   ru  rI  r!   )rU   r!  rH   rk   r   Zkeep_attrs_r   rV   rV   rW   test_pad_keep_attrsY  s.    	   
   z!TestDataArray.test_pad_keep_attrsparserpandaspythonengineZnumexpr)marksbackendnumpydaskr   r   )r  r  r[   c              	   C  sr  t jd t ddd}t jjdddd}t ddd}t jjdd	d
gdddt}|dkrt	|dgdd}t	|dgdd}	t	|dgdd}
t	|dgdd}n~|dkr ddl
m} t	|j|dddgdd}t	|j|dddgdd}	t	|j|dddgdd}
t	|j|dddgdd}|jd||d}|j|dkd }t|| |jtdd ||d!}|t|dkd }t|| |	jd"||d}|	j|d#kd }t|| |
jd$||d%}|
j|d&k d'}t|| |d(kr|jd)||d*}|j|d	kd+}t|| tt |d W 5 Q R X tt |j|dkd  W 5 Q R X tt |jd,d  W 5 Q R X dS )-zTest querying a dataset.r   r   r6   r=   r?  r  r7   r:   r`   r   r  T)rw   replacer  r8   r;   )r   rG   re   r<   r9   rn   r   ro   r  NrD   r   rp   r  za > 5)r8   r  r  r^   r!  )r  r  zb > 502   zc < .5)r9   r  r  r   rQ  r  z
d == "bar")r   r  r  rM  z	spam > 50)rI   rJ   seedrf   randintr  choicer  r   r
   r   r   
from_arrayqueryr  r!   r  r   r   r   r.   )rU   r  r  r  r;   r<   rn   ro   ZaaZbbccddr   r   rF  rV   rV   rW   
test_queryw  sP    






zTestDataArray.test_queryc                 C  s.  |rt std ddd}tddd}ttj||dd||dd	tj| gd
dd|dddgdd}tj|d< tddgdd	gtjtjggddddgddgdd}|r|ddi}|j	|j
g|dd	idddgid}t|j|dd | }|j	dtjddgd}d|jkstd|jks*td S )Nrl  r=   c                 S  s   |t |  |  S r  rI   expr  n0taurV   rV   rW   	exp_decay  s    z.TestDataArray.test_curvefit.<locals>.exp_decayr   r^   r   rD   r]   r   r^  )r  r8   r>   r   r  )r8   paramr  r  r8   r_   )rF   r  Zp0Zboundsrn  ro  r  r;   )rF   r  Zreduce_dimsparam_names)r=   )r#   r   r  rI   rf   r
   r  r   r   Zcurvefitr  r   Zcurvefit_coefficientscomputepowerr  ri   rG   )rU   rj  r  r  r   rk   ZfitrV   rV   rW   test_curvefit  s8    

(
   
zTestDataArray.test_curvefitc              	   C  s   ddd}t jj|g \}}|ddgks.tt jj|ddiddtjgi|\}}|ddd	ksft|tj tjfdtjfd	kstd
g}t jjtj|\}}||kstt	
t t jjtjg  W 5 Q R X d S )Nr=   c                 S  s   |t |  |  S r  r  r  rV   rV   rW   r    s    z6TestDataArray.test_curvefit_helpers.<locals>.exp_decayr  r  r]   r^   r_   )r  r  r;   )r=   )r  rp  r   Z_get_func_argsri   Z_initialize_curvefit_paramsrI   infr  r   r   r   )rU   r  params	func_argsZparam_defaultsZbounds_defaultsr  rV   rV   rW   test_curvefit_helpers  s     
   "z#TestDataArray.test_curvefit_helpers)r  r  r  r   fixturerX   rl   rm   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r   r   r   r   r   r   r   r  r  r  r  r  r  r(  r)  r0  r6  r=  r>  markfilterwarningsrO  rS  rV  rW  ra  ri  rq  rr  ry  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  parametrizer   r  r  r  bytesr  r  r  r  r  r  r  r  r  r  r  r	  r
  r  r  r  r"  r&  r*  r.  r1  r2  r3  r5  r7  r8  r9  r:  r;  rD  rE  rJ  rO  rQ  rT  rW  rX  r[  r\  ra  rd  rg  rh  ri  rj  rk  rm  rp  rs  rt  rv  r~  r  r%   r  r  r  r  r  r  r  r  r  rI   absr  r  r  r  r  r  r
   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,   r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r*  r.  r1  r3  r4  r}  r  r7  r9  r:  r=  r-  ri   r  r   r   r?  rB  rD  rG  rV  rZ  r[  r\  r]  r^  ra  rg  ri  rs  r~  r  r  r  r  r  r  r)   r  r+   r  r  rV   rV   rV   rW   r/   C   s\  

	:	V--%8G"
Q
.
(
2?

S.:))7.(0)" 6 	!#"		@
*'		.'*:"  &$  "?"r/   c                   @  s    e Zd Zejdddd ZdS )
TestReduceTr0   c                 C  s   ddd| _ d S )Nr1   r2   r3   r  rT   rV   rV   rW   rX     s    zTestReduce.setupN)r  r  r  r   r  rX   rV   rV   rV   rW   r    s   
r  r8   minindexmaxindexnanindexr=   r>   r   r   r^   r}  r  rb  r  r  g       g      r  r   r   z9ignore:invalid value encountered in reduce:RuntimeWarningr  )r  r+  Zallnanz
2015-12-31z
2020-01-02z
2020-01-01z
2016-01-01r  ra   r)  c                   @  s  e Zd ZddddddddZdddddddd	Zejd
ddddddddZejd
ddddddddZ	ej
dddgdddddddddZej
dddgdddddddddZejd
ddddddddZejd
ddddddddZdS )TestReduce1D
np.ndarrayzint | floatz
int | NonerY   r8   r  r  r  r[   c                 C  s   t j|dgdt|jd i| jd}t|r4d}|j|dd}|jdd}t	|| | }|
 }	i |	_t	||	 |jdd	}
|d k	r|jjd
kr|j|dd}i |_n|	}t	|
| d S Nr8   r]   r  r   Trz  r   Frx  O)r  r
   rI   rf   rw   rH   isnanr  minr!   r   rb   r|  rU   r8   r  r  r  rh  	expected0r  r  r  result2r   rV   rV   rW   test_min  s*       


zTestReduce1D.test_minc                 C  s   t j|dgdt|jd i| jd}t|r4d}|j|dd}|jdd}t	|| | }|
 }	i |	_t	||	 |jdd	}
|d k	r|jjd
kr|j|dd}i |_n|	}t	|
| d S r  )r  r
   rI   rf   rw   rH   r  r  maxr!   r   rb   r|  r  rV   rV   rW   test_max<  s*       


zTestReduce1D.test_maxJignore:Behaviour of argmin/argmax with neither dim nor :DeprecationWarningc              	   C  s   t j|dgdt|jd i| jd}t jtj|jtjddgd}t|rpt	t
 |  W 5 Q R X d S || }| }t|| |jdd}	| }
| j|
_t|	|
 |jdd	}|d k	r|jjd
kr|j|dd}i |_n|}t|| d S Nr8   r]   r  ra   r   Tr   Fr  r  rz  )r  r
   rI   rf   rw   rH   intpr  r   r   r   argminr!   r   rb   r|  r  rU   r8   r  r  r  rh  indarrr  r  r  r  r  r   rV   rV   rW   test_argmin\  s0    
   


zTestReduce1D.test_argminc              	   C  s   t j|dgdt|jd i| jd}t jtj|jtjddgd}t|rpt	t
 |  W 5 Q R X d S || }| }t|| |jdd}	| }
| j|
_t|	|
 |jdd	}|d k	r|jjd
kr|j|dd}i |_n|}t|| d S r  )r  r
   rI   rf   rw   rH   r  r  r   r   r   argmaxr!   r   rb   r|  r  r  rV   rV   rW   test_argmax  s0    
   


zTestReduce1D.test_argmaxrj  TFrE  r8   r  r  r  rj  r[   c              	   C  s  |rt std |r,|jjdkr,td tj|dgdt	|j
d i| jd}|rb|i }n|}tt |jdd W 5 Q R X tt td	  W 5 Q R X tj|jd dgd
}| }	t|}
t|rd}|
rd|	d< tj}nd}|	| j|ddd}d|_| }t|| |jtjd}t|| |jdd}| }| j|_t|| |d k	r|jjdkr|j|ddd}d|_i |_n| }|jdd}t|| |jddd}t|| |
rd}nd}|	| j|dd}d|_|jdd}t|| |
r"d}nd}|	| j|dd}d|_|jdd}t|| |
r`d}nd}|	| j|dd}d|_|jdd}t|| d S )Nrl  M;dask operation 'argmin' breaks when dtype is datetime64 (M)r8   r]   r  r  r  r^   r   r   r=   .Trz  r  r  r   r  Fr               Yrx  r  r  r                )r#   r   r  rb   r|  r-  r  r
   rI   rf   rw   rH   r   r   r   idxminr   rF   r   r  r  r  r  re   r!   rU   r8   r  r  r  rj  ar0_rawr_  	coordarr0	coordarr1hasnaZfill_value_0r  r  r  r  r   r  result3result4Zfill_value_5r  result5Zfill_value_6rI  result6Zfill_value_7r  result7rV   rV   rW   test_idxmin  s    	

   








zTestReduce1D.test_idxminc              	   C  s  |rt std |r,|jjdkr,td tj|dgdt	|j
d i| jd}|rb|i }n|}tt |jdd W 5 Q R X tt td	  W 5 Q R X tj|jd dgd
}| }	t|}
t|rd}|
rd|	d< tj}nd}|	| j|ddd}d|_| }t|| |jtjd}t|| |jdd}| }| j|_t|| |d k	r|jjdkr|j|ddd}d|_i |_n| }|jdd}t|| |jddd}t|| |
rd}nd}|	| j|dd}d|_|jdd}t|| |
r"d}nd}|	| j|dd}d|_|jdd}t|| |
r`d}nd}|	| j|dd}d|_|jdd}t|| d S )Nrl  r  ;dask operation 'argmax' breaks when dtype is datetime64 (M)r8   r]   r  r  r  r^   r   r   r=   .Trz  r  r  r   r  Fr  r  r  r  r   r  )r#   r   r  rb   r|  r-  r  r
   rI   rf   rw   rH   r   r   r   idxmaxr   rF   r   r  r  r  r  re   r!   r  rV   rV   rW   test_idxmax  s    	

   








zTestReduce1D.test_idxmaxc              	   C  sT  t j|dgdt|jd i| jd}t jtj|jtjddgd}t|rpt	t
 |  W 5 Q R X d S d|| i}|d}|D ]}	t||	 ||	  q|jddd}
t|}| D ]}| j|_q|D ]}	t|
|	 ||	  q|jdd	d
}|d k	r.|jjdkr.d|j|ddi}i |d _n|}|D ]}	t||	 ||	  q6d S Nr8   r]   r  ra   r   .Tr   Fr  r  rz  )r  r
   rI   rf   rw   rH   r  r  r   r   r   r  r!   r   r}   rb   r|  r  rU   r8   r  r  r  rh  r  r  r  r  r  r  r   r  r   rV   rV   rW   test_argmin_dim  s8    
   


zTestReduce1D.test_argmin_dimc              	   C  sT  t j|dgdt|jd i| jd}t jtj|jtjddgd}t|rpt	t
 |  W 5 Q R X d S d|| i}|d}|D ]}	t||	 ||	  q|jddd}
t|}| D ]}| j|_q|D ]}	t|
|	 ||	  q|jdd	d
}|d k	r.|jjdkr.d|j|ddi}i |d _n|}|D ]}	t||	 ||	  q6d S r  )r  r
   rI   rf   rw   rH   r  r  r   r   r   r  r!   r   r}   rb   r|  r  r  rV   rV   rW   test_argmax_dim  s8    
   


zTestReduce1D.test_argmax_dimN)r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  rV   rV   rV   rW   r    s,   "  ##pp'r  ir7   r]   rp   z:ignore:invalid value encountered in reduce:RuntimeWarning:z
1900-01-01z1-02-03z
1900-01-02c                   @  s$  e Zd ZddddddddZdddddddd	Zddddddd
dZddddddddZej	dej
dddej
dddgdddddddddZej	dej
dddej
dddgdddddddddZejdddddddddZejdddddddddZdS ) TestReduce2Dr  zlist[int | float]zlist[int | None]rY   r  c              	     s  t j|ddgt|jd d dt|jd  d| jd dd	 |D } fd
d	t|D }t j|dd} jddd}t	||  jdd}|}	i |	_t	||	  jdd}
t	|
|	  fdd	t
||D } fdd	t|D }t j|dd}i |_ jddd}t	|| d S )Nr9   r8   r=   r]   r   r   r  c                 S  s   g | ]}t |s|nd qS r   rI   r  r   r8   rV   rV   rW   r   +  s     z)TestReduce2D.test_min.<locals>.<listcomp>c                   s&   g | ]\}} j |d j |ddqS rQ  Trz  r  r   yiZindirh  rV   rW   r   ,  s    r  Tr  r!  r^  c                   s,   g | ]$\}}|d ks  j jdkr$|n|qS Nr  rb   r|  r   r8   r9   r  rV   rW   r   <  s   c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r   @  s    Frw  )r  r
   rI   rf   rv   rH   	enumerater  r  r!   r  rU   r8   r  r  r  expected0listr  r  r  r  r  expected2listr   r  rV   r  rW   r    s:    (





zTestReduce2D.test_minc              	     s   t j|ddgt|jd d dt|jd  d| jd dd	 |D } fd
d	t|D }t j|dd} jddd}t	||  jdd}|
 }	i |	_t	||	  jdd}
t	|
|	  fdd	t||D } fdd	t|D }t j|dd}i |_ jddd}t	|| d S )Nr9   r8   r=   r]   r   r   r  c                 S  s   g | ]}t |s|nd qS r   r  r  rV   rV   rW   r   X  s     z)TestReduce2D.test_max.<locals>.<listcomp>c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r   Y  s    r  Tr  r^  c                   s,   g | ]$\}}|d ks  j jdkr$|n|qS r  r  r  r  rV   rW   r   i  s   c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r   m  s    Frw  )r  r
   rI   rf   rv   rH   r  r  r  r!   r   r  r  rV   r  rW   r  J  s:    (





zTestReduce2D.test_maxc              	     s  t j|ddgt|jd d dt|jd  d| jd ttj|jd tjd|jd dg}t j| j j	d	t
| rtt  jdd
 W 5 Q R X d S fddt|D }t j|dd
} jdd
}t||  jdd}	t|	|  jddd}
| }| j|_t|
|  fddt||D }fddt|D }t j|dd
}i |_ jddd}t|| d S )Nr9   r8   r=   r]   r   r   r  ra   r   r  c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r     s   z,TestReduce2D.test_argmin.<locals>.<listcomp>r^  Tr  c                   s,   g | ]$\}}|d ks  j jdkr$|n|qS r  r  r  r  rV   rW   r     s   c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r     s   Frw  )r  r
   rI   rf   rv   rH   tiler  rG   rF   r  anyr   r   r   r  r  r  r!   r   r  )rU   r8   r  r  r  indarrnpr  r  r  r  r  r  r  r   r  rV   rh  r  rW   r  w  sD    ((





zTestReduce2D.test_argminc              	     s  t j|ddgt|jd d dt|jd  d| jd ttj|jd tjd|jd dg}t j| j j	d	t
| rtt  jdd
 W 5 Q R X d S fddt|D }t j|dd
} jdd
}t||  jdd}	t|	|  jddd}
| }| j|_t|
|  fddt||D }fddt|D }t j|dd
}i |_ jddd}t|| d S )Nr9   r8   r=   r]   r   r   r  ra   r   r  c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r     s   z,TestReduce2D.test_argmax.<locals>.<listcomp>r^  Tr  c                   s,   g | ]$\}}|d ks  j jdkr$|n|qS r  r  r  r  rV   rW   r     s   c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r     s   Frw  )r  r
   rI   rf   rv   rH   r  r  rG   rF   r  r  r   r   r   r  r  r  r!   r   r  )rU   r8   r  r  r  Z	indarr_npr  r  r  r  r  r  r  r   r  rV   r  rW   r    sD    ((





zTestReduce2D.test_argmaxrj  Tr  r  FZnodaskrE  r  c              	     sF  |rt std |r,|jjdkr,td |jjdkr>d}nd}tj|ddgt	|j
d d	 dt	|j
d  d
| jd}|r|i  n| t   tt    W 5 Q R X tt  jdd W 5 Q R X t   tjt jd |j
d dg j jddd |D } d|d d f< dd |D }	tdd |D d d d f fddt|	D }
tj|
dd}d|_t|d  jdd}W 5 Q R X t|| t|d  jdtjd}W 5 Q R X t|| t|d  jddd}W 5 Q R X | }| j|_t||  fddt|	|D }fddt|D }tj|dd}d|_i |_t|d  jddd}W 5 Q R X t|| t|d  jdddd}W 5 Q R X t|| tdd |D d d d f fddt|	D }tj|dd}d|_t|d  jdd d}W 5 Q R X t|| td!d |D d d d f fd"dt|	D }tj|dd}d|_t|d  jdd#d}W 5 Q R X t|| td$d |D d d d f fd%dt|	D }tj|dd}d|_t|d  jdd&d}W 5 Q R X t|| d S )'Nrl  r  r  r  r=   r   r9   r8   r]   r   r  r  r  r   c                 S  s   g | ]}t |qS rV   r  r  rV   rV   rW   r     s     z,TestReduce2D.test_idxmin.<locals>.<listcomp>c                 S  s   g | ]}t |s|nd qS r   r  r  rV   rV   rW   r     s     c                 S  s   g | ]}|rt jnd qS r=   rI   r  r  rV   rV   rW   r     s     c                   s*   g | ]"\}}  j |d j |ddqS r  r  r  r  
nan_mult_0rV   rW   r     s   max_computesr  r  Tr  c                   s,   g | ]$\}}|d ks  j jdkr$|n|qS r  r  r  r_  rV   rW   r   2  s   c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r   6  s   Frw  r  r  rx  r  c                 S  s   g | ]}|rd ndqS r  r=   rV   r  rV   rV   rW   r   H  s     c                   s*   g | ]"\}}  j |d j |ddqS r  r  r  r  
nan_mult_5rV   rW   r   I  s   r  c                 S  s   g | ]}|rd ndqS r   r=   rV   r  rV   rV   rW   r   U  s     c                   s*   g | ]"\}}  j |d j |ddqS r  r  r  r  
nan_mult_6rV   rW   r   V  s   r   c                 S  s   g | ]}|rd ndqS              r=   rV   r  rV   rV   rW   r   b  s     c                   s*   g | ]"\}}  j |d j |ddqS r  r  r  r  
nan_mult_7rV   rW   r   c  s   r  )r#   r   r  rb   r|  r-  r  r
   rI   rf   rv   rH   r   r!   r   r   r  r   r  rF   rG   r   r   r  r  re   r$   r  r  )rU   r8   r  r  r  rj  r  r  r  Z	minindex0r  r  r  r  r  r   Z	minindex3expected3listr  r  r  expected5listr  r  expected6listrI  r  expected7listr  r  rV   r_  r  r  r  r  r  r  rW   r    s    

(

   






 
 
 zTestReduce2D.test_idxminc              	     sd  |rt std |r,|jjdkr,td |jjdkr>d}nd}tj|ddgt	|j
d d	 dt	|j
d  d
| jd}|r|i  n| tt    W 5 Q R X tt  jdd W 5 Q R X   }|jd= tt |jdd W 5 Q R X tjt jd |j
d dg j jddd |D }	 d|	d d f< dd |D }
tdd |	D d d d f fddt|
D }tj|dd}d|_t|d  jdd}W 5 Q R X t|| t|d  jdtjd}W 5 Q R X t|| t|d  jddd}W 5 Q R X | }| j|_t||  fddt|
|D }fddt|D }tj|dd}d|_i |_t|d  jddd}W 5 Q R X t|| t|d  jdddd}W 5 Q R X t|| tdd |	D d d d f fddt|
D }tj|dd}d|_t|d  jdd d}W 5 Q R X t|| td!d |	D d d d f fd"dt|
D }tj|dd}d|_t|d  jdd#d}W 5 Q R X t|| td$d |	D d d d f fd%dt|
D }tj|dd}d|_t|d  jdd&d}W 5 Q R X t|| d S )'Nrl  r  r  r  r=   r   r9   r8   r]   r   r  r  r  r   c                 S  s   g | ]}t |qS rV   r  r  rV   rV   rW   r     s     z,TestReduce2D.test_idxmax.<locals>.<listcomp>c                 S  s   g | ]}t |s|nd qS r   r  r  rV   rV   rW   r     s     c                 S  s   g | ]}|rt jnd qS r  r   r  rV   rV   rW   r     s     c                   s*   g | ]"\}}  j |d j |ddqS r  r  r  r  rV   rW   r     s   r  r  Tr  c                   s,   g | ]$\}}|d ks  j jdkr$|n|qS r  r  r  r  rV   rW   r     s   c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r     s   Frw  r  r  c                 S  s   g | ]}|rd ndqS r	  rV   r  rV   rV   rW   r     s     c                   s*   g | ]"\}}  j |d j |ddqS r  r  r  r
  rV   rW   r     s   r  c                 S  s   g | ]}|rd ndqS r  rV   r  rV   rV   rW   r     s     c                   s*   g | ]"\}}  j |d j |ddqS r  r  r  r  rV   rW   r     s   r   c                 S  s   g | ]}|rd ndqS r  rV   r  rV   rV   rW   r     s     c                   s*   g | ]"\}}  j |d j |ddqS r  r  r  r  rV   rW   r     s   r  )r#   r   r  rb   r|  r-  r  r
   rI   rf   rv   rH   r   r   r   r  r   r   rF   r  rG   r   r  r  re   r$   r!   r  r  )rU   r8   r  r  r  rj  r  r  r`  r  Z	maxindex0r  r  r  r  r  r   Z	maxindex3r  r  r  r  r  r  r  r  rI  r  r  r  r  rV   r  rW   r  n  s    

(   






 
 
 zTestReduce2D.test_idxmaxr  c              	     s  t j|ddgt|jd d dt|jd  d| jd ttj|jd tjd|jd dg}t j| j j	d	t
| rtt  jdd
 W 5 Q R X d S fddt|D }dt j|dd
i} jdgd
}|D ]}	t||	 ||	  q jdgdd}
t|}| j|d _|D ]}	t|
|	 ||	  q( fddt||D }fddt|D }dt j|dd
i}i |d _ jdgdd}|D ]}	t||	 ||	  q d}tt | }t|t||  d}|D ]}	t||	 ||	  qd S )Nr9   r8   r=   r]   r   r   r  ra   r   r  c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r     s   z0TestReduce2D.test_argmin_dim.<locals>.<listcomp>Tr  c                   s,   g | ]$\}}|d ks  j jdkr$|n|qS r  r  r  r  rV   rW   r   $  s   c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r   (  s   Frw  .rA  )r  r
   rI   rf   rv   rH   r  r  rG   rF   r  r  r   r   r   r  r  r  r!   r   r  r   r  r  )rU   r8   r  r  r  r  r  r  r  r  r  r  r  r   r  r  Zmin_xindr  rV   r  rW   r    sT    
((




zTestReduce2D.test_argmin_dimc              	     s  t j|ddgt|jd d dt|jd  d| jd ttj|jd tjd|jd dg}t j| j j	d	t
| rtt  jdd
 W 5 Q R X d S fddt|D }dt j|dd
i} jdgd
}|D ]}	t||	 ||	  q jdgdd}
t|}| j|d _|D ]}	t|
|	 ||	  q( fddt||D }fddt|D }dt j|dd
i}i |d _ jdgdd}|D ]}	t||	 ||	  q d}tt | }t|t||  d}|D ]}	t||	 ||	  qd S )Nr9   r8   r=   r]   r   r   r  ra   r   r  c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r   W  s   z0TestReduce2D.test_argmax_dim.<locals>.<listcomp>Tr  c                   s,   g | ]$\}}|d ks  j jdkr$|n|qS r  r  r  r  rV   rW   r   g  s   c                   s&   g | ]\}} j |d j |ddqS r  r  r  r  rV   rW   r   k  s   Frw  .rA  )r  r
   rI   rf   rv   rH   r  r  rG   rF   r  r  r   r   r   r  r  r  r!   r   r  r   r  r  )rU   r8   r  r  r  r  r  r  r  r  r  r  r  r   r  r  Zmax_xindr  rV   r  rW   r  ?  sT    
((




zTestReduce2D.test_argmax_dimN)r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  rV   rV   rV   rW   r    s0   >--55    @r  a6  x, minindices_x, minindices_y, minindices_z, minindices_xy, minindices_xz, minindices_yz, minindices_xyz, maxindices_x, maxindices_y, maxindices_z, maxindices_xy, maxindices_xz, maxindices_yz, maxindices_xyz, nanindices_x, nanindices_y, nanindices_z, nanindices_xy, nanindices_xz, nanindices_yz, nanindices_xyzr9   r   r   r  r9   r   rY  rD   c                   @  s   e Zd ZddddddddddddddddddddddddddZddddddddddddddddddddddddddZd	S )
TestReduce3Dr  zdict[str, np.ndarray]rY   )r8   minindices_xminindices_yminindices_zminindices_xyminindices_xzminindices_yzminindices_xyzmaxindices_xmaxindices_ymaxindices_zmaxindices_xymaxindices_xzmaxindices_yzmaxindices_xyznanindices_xnanindices_ynanindices_znanindices_xynanindices_xznanindices_yznanindices_xyzr[   c           6        s  t j|dddgt|jd d dt|jd  ddt|jd   d	| jd
} fD ]R}tdd | D  rht	
t |jdd |D d W 5 Q R X  d S qh|jdgd}t|tstdd   D }|D ] }t|| ddg||  q|jdgd}t|ts.tdd  D }|D ]"}t|| ddg||  qD|jdgd}t|tstdd  D }|D ]"}t|| ddg||  q|jdd} t| tstdd  D }!|!D ]}t| | d|!|  q|jdd}"t|"ts.tdd  D }#|#D ]}t|"| d|#|  qD|jdd}$t|$tstdd  D }%|%D ]}t|$| d|%|  q|d}&t|&tstdd  D }'|'D ]}t|&| |'|  q fdd D  dd   D }(|jdgdd})t|)tsFt|(D ]"}t|)| ddg|(|  qJfddD d d  D }*|jdgdd}+t|+tst|*D ]"}t|+| ddg|*|  qfd!dD d"d  D },|jdgdd}-t|-ts"t|,D ]"}t|-| ddg|,|  q&fd#dD d$d  D }.|jddd}/t|/tst|.D ]}t|/| d|.|  q
fd%dD d&d  D }0|jddd}1t|1tst|0D ]}t|1| d|0|  qfd'dD d(d  D }2|jddd}3t|3ts^t|2D ]}t|3| d|2|  qb	fd)dD d*d  D }4|jddd+}5t|5tst|4D ]}t|5| |4|  qd S ),Nr8   r9   r   r   r]   r=   r>   rD   rY  r  c                 S  s   g | ]}t |qS rV   r  r   r   rV   rV   rW   r   [  s     z0TestReduce3D.test_argmin_dim.<locals>.<listcomp>c                 S  s   g | ]}|qS rV   rV   r'  rV   rV   rW   r   ]  s     r  c                 S  s    i | ]\}}|t j|d dqS r  r   r  r
   r   r  r'  rV   rV   rW   r   b  s    z0TestReduce3D.test_argmin_dim.<locals>.<dictcomp>c                 S  s    i | ]\}}|t j|d dqS r  r   r1  r2  rV   rV   rW   r   k  s    c                 S  s    i | ]\}}|t j|d dqS r   r   r1  r2  rV   rV   rW   r   t  s    r   c                 S  s    i | ]\}}|t j|d dqS r   r   r1  r2  rV   rV   rW   r   }  s     r  c                 S  s    i | ]\}}|t j|d dqS r9   r   r1  r2  rV   rV   rW   r     s     r  c                 S  s    i | ]\}}|t j|d dqS r8   r   r1  r2  rV   rV   rW   r     s     .c                 S  s   i | ]\}}|t |qS rV   r1  r2  rV   rV   rW   r     s      c              	     s,   i | ]$}|t | d k | | qS r  r  rn  r   r  )r  r(  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r0  r1  r2  rV   rV   rW   r     s    Frw  c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r  r)  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r3  r1  r2  rV   rV   rW   r     s    c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r  r*  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r4  r1  r2  rV   rV   rW   r     s    c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r  r+  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r5  r1  r2  rV   rV   rW   r     s     c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r  r,  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r6  r1  r2  rV   rV   rW   r     s     c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r  r-  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r7  r1  r2  rV   rV   rW   r     s     c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r   r.  rV   rW   r     s    
c                 S  s   i | ]\}}|t |qS rV   r1  r2  rV   rV   rW   r   
  s      r  )r  r
   rI   rf   rv   rH   r   r}   r  r   r   r   r  r   r  ri   r   r!   rU  6rU   r8   r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  rh  Zindsr  r  r  r  r  r  r   r  r  r  rN  r  r  r  rI  r  r  Z	expected8Zresult8Z	expected9Zresult9Z
expected10Zresult10Z
expected11Zresult11Z
expected12Zresult12Z
expected13Zresult13rV   )r  r  r   r  r  r  r  r(  r+  r.  r,  r)  r-  r*  rW   r  -  s   	   
   zTestReduce3D.test_argmin_dimc           6        s  t j|dddgt|jd d dt|jd  ddt|jd   d	| jd
} fD ]R}tdd | D  rht	
t |jdd |D d W 5 Q R X  d S qh|jdgd}t|tstdd   D }|D ] }t|| ddg||  q|jdgd}t|ts.tdd  D }|D ]"}t|| ddg||  qD|jdgd}t|tstdd  D }|D ]"}t|| ddg||  q|jdd} t| tstdd  D }!|!D ]}t| | d|!|  q|jdd}"t|"ts.tdd  D }#|#D ]}t|"| d|#|  qD|jdd}$t|$tstdd  D }%|%D ]}t|$| d|%|  q|d}&t|&tstdd  D }'|'D ]}t|&| |'|  q fdd D  dd   D }(|jdgdd})t|)tsFt|(D ]"}t|)| ddg|(|  qJfddD d d  D }*|jdgdd}+t|+tst|*D ]"}t|+| ddg|*|  qfd!dD d"d  D },|jdgdd}-t|-ts"t|,D ]"}t|-| ddg|,|  q&fd#dD d$d  D }.|jddd}/t|/tst|.D ]}t|/| d|.|  q
fd%dD d&d  D }0|jddd}1t|1tst|0D ]}t|1| d|0|  qfd'dD d(d  D }2|jddd}3t|3ts^t|2D ]}t|3| d|2|  qb	fd)dD d*d  D }4|jddd+}5t|5tst|4D ]}t|5| |4|  qd S ),Nr8   r9   r   r   r]   r=   r>   rD   rY  r  c                 S  s   g | ]}t |qS rV   r  r/  rV   rV   rW   r   ?  s     z0TestReduce3D.test_argmax_dim.<locals>.<listcomp>c                 S  s   g | ]}|qS rV   rV   r'  rV   rV   rW   r   A  s     r  c                 S  s    i | ]\}}|t j|d dqS r0  r1  r2  rV   rV   rW   r   F  s    z0TestReduce3D.test_argmax_dim.<locals>.<dictcomp>c                 S  s    i | ]\}}|t j|d dqS r3  r1  r2  rV   rV   rW   r   O  s    c                 S  s    i | ]\}}|t j|d dqS r4  r1  r2  rV   rV   rW   r   X  s    r   c                 S  s    i | ]\}}|t j|d dqS r5  r1  r2  rV   rV   rW   r   a  s     r  c                 S  s    i | ]\}}|t j|d dqS r6  r1  r2  rV   rV   rW   r   i  s     r  c                 S  s    i | ]\}}|t j|d dqS r7  r1  r2  rV   rV   rW   r   q  s     .c                 S  s   i | ]\}}|t |qS rV   r1  r2  rV   rV   rW   r   y  s      c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r!  r(  rV   rW   r   }  s    
c                 S  s    i | ]\}}|t j|d dqS r0  r1  r2  rV   rV   rW   r     s    Frw  c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r"  r)  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r3  r1  r2  rV   rV   rW   r     s    c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r#  r*  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r4  r1  r2  rV   rV   rW   r     s    c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r$  r+  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r5  r1  r2  rV   rV   rW   r     s     c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r%  r,  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r6  r1  r2  rV   rV   rW   r     s     c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r&  r-  rV   rW   r     s    
c                 S  s    i | ]\}}|t j|d dqS r7  r1  r2  rV   rV   rW   r     s     c              	     s,   i | ]$}|t | d k | | qS r  r8  r9  )r'  r.  rV   rW   r     s    
c                 S  s   i | ]\}}|t |qS rV   r1  r2  rV   rV   rW   r     s      r  )r  r
   rI   rf   rv   rH   r   r}   r  r   r   r   r  r   r  ri   r   r!   rU  r:  rV   )r!  r$  r'  r%  r"  r&  r#  r(  r+  r.  r,  r)  r-  r*  rW   r    s   	   
   zTestReduce3D.test_argmax_dimN)r  r  r  r  r  rV   rV   rV   rW   r    s    +: er  c                   @  sB   e Zd Zejdddgejdddgddd	d
ddZdS )TestReduceNDopr  r  ry   rD   r^   r  r}  rY   )r<  ry   r[   c                 C  s   t std tjtjjdg| ddd dd |d  D dg dtdi| j	d	}|
i }tt||dd
t||dd
 d S )Nrl  r6   r  c                 S  s   g | ]}|qS rV   rV   r/  rV   rV   rW   r     s     z4TestReduceND.test_idxminmax_dask.<locals>.<listcomp>rP  r=   r8   r  r  )r#   r   r  r  r
   rI   rJ   r  rf   rH   r   r    r~   )rU   r<  ry   r  Zar0_dskrV   rV   rW   test_idxminmax_dask  s    

z TestReduceND.test_idxminmax_daskN)r  r  r  r   r  r  r=  rV   rV   rV   rW   r;    s   r;  r   )Zrepeating_intsT)ZindirectrY   rZ   c                 C  s   t tdddgdddggtdtdtdddd}| d	gjtddd
}t|| t tdddgdddggtdtdtdddd}| dd	gjtddd
}t|| d S )Nr   r=   Zyxr  der   r   rE  rD   r  r>   )r
   rI   rg  rs   r  isinrR  r    )r   rk   r`  rV   rV   rW   	test_isin	  s$    
r@  c                	   C  s,   t   tddtjgdk W 5 Q R X d S )Nr=   r>   r   )r"   r  r
   rI   r  rV   rV   rV   rW   +test_raise_no_warning_for_nan_in_binary_ops  s    rA  errorc                  C  s   t tjtjg } d S r  )r  r
   rI   r  ry  )_rV   rV   rW   test_no_warning_for_all_nan"  s    rD  c                  C  s   d} t jtddtdfg| d}||dkj| ks:t||dkdj| ksXt|j|dkddj| kstt|j|dkdddj| kstd S )	NZ
RingoStarrr6   r8   r  r^   ZYokoOnoTr   )r  r
   rt   rn  re   ri   r   )re   r   rV   rV   rW   test_name_in_masking'  s    rE  c                   @  s6  e Zd ZeddddZeeddddZeej	ddd	d
dd	d
dfdd	d
d	d	d
dfddd
d
dd
ifddddi fgddddZ
eej	ddd	d
dd	d
dfdd	d
d	d	d
dfddd
d
dd
ifddddi fgddddZeddddZeej	ddddgdddggddddZdS )TestIrisConversionrY   rZ   c              	   C  sN  dd l }dd l}i }dddgddif|d< dtjdd	d
f|d< d|d< dddgddif|d< ddddgdd	dggf|d< ttjddddd	|dddddddd}tj|j	d< d|j
d < | }t|j	|j	 |j|jksttd!d" |jD |jkst|j|jjd#d$d%d&d'fks&tt| |jD ]`\}}|j| }|j|jksZtt|jt |j ||||j|j jks6tq6|djd |jd j
d kst|dj| |jd jkst|jd( |j
d( kst|j!|j
d) kstt"|}	t#||	 |$d t"|}
|
jd*ksJtd S )+Nr   r	  r   r>   r
  r  r\   rX  rD   r  r6   r   r=   r:   r`   	distance2r	  r\   r]   r  r_   r  ra   Temperaturer   Kelvinfire_temperatureFire Temperaturer   r
  standard_name	long_namere   rH   rG   r_  %height: mean (comment: A cell method)cell_methodsc                 s  s   | ]}|j V  qd S r  var_namer'  rV   rV   rW   	<genexpr>R  s     z;TestIrisConversion.test_to_and_from_iris.<locals>.<genexpr>ry  r   rV   zA cell methodrv  rF   Z	intervalscommentsr   rN  r	  r   )%cf_unitsirisrO   r^  r
   rI   rf   r  r  r   rH   to_irisr   rT  re   ri   r   
dim_coordsrG   rR  rF   
CellMethodr  rB  r   encoder}   
coord_dimsget_axis_numr   
attributesr
  UnitrN  	from_irisr!   remove_coord)rU   r[  r\  
coord_dictr%  r   r   orginal_keyoriginal_coordr/  auto_time_dimensionrV   rV   rW   test_to_and_from_iris1  sr    
 	
 




z(TestIrisConversion.test_to_and_from_irisc              
   C  s  dd l }dd lm} dd l}i }dddgddif|d< dtjdd	d
f|d< d|d< dddgddif|d< ddddgdd	dggf|d< t|tj	dddd
dd	d	|dtddddddd}|j|jd|_d|jd < | }t|d!r| n|j}t||j |j|jksttd"d# |jD |jks:t|j|jjd$d%d&d'd(fks\tt| |jD ]`\}}	|j|	 }
|j|
jkstt|jt  |
j! |"||#|j|j jksltql|$dj%d |jd jd kst|$dj&|'|jd j&kst|j%d) |jd) ks2t|j(|jd* ksHtt)|}t*|| t|d!rt+|jt,| stt+|jt,|jst|-d t)|}|jd+kstd S ),Nr   r	  r   r>   r
  r  r\   rX  rD   r  r6   r   r=   r:   r`   rG  rH  r]   r  r   r^   r  ra   rI  r   rJ  rK  rL  rM  rP  rQ  rR  	core_datac                 s  s   | ]}|j V  qd S r  rS  r'  rV   rV   rW   rU    s     z@TestIrisConversion.test_to_and_from_iris_dask.<locals>.<genexpr>ry  rV  rV   rW  rX  r   rN  rZ  ).r[  r   r   r\  rO   r^  r
   r  rI   rf   r  r  r  Zmasked_lessr   rH   r]  r  rl  r   rT  re   ri   r   r^  rG   rR  rF   r_  r  rB  r   r`  r}   ra  rb  r   rc  r
  rd  rN  re  r!   r   r  rf  )rU   r[  r   r\  rg  r%  r   Zactual_datar   rh  ri  r/  rj  rV   rV   rW   test_to_and_from_iris_daskw  s    
 	
 




z-TestIrisConversion.test_to_and_from_iris_daskz*var_name, std_name, long_name, name, attrsrT  r   ZHeight)rN  rO  NrO  c           
      C  sJ   ddl m} |g |||d}tj|}tjg ||d}	tj||	 d S )Nr   Cube)rT  rN  rO  r  )	iris.cubero  r  r
   re  rI  r!   )
rU   std_namerO  rT  re   rH   ro  cuber`  rk   rV   rV   rW   test_da_name_from_cube  s
    z)TestIrisConversion.test_da_name_from_cubeunknownc                 C  s   ddl m} ddlm} |dddg|||d}dddg}	||	|dfgd}
tj|
}tj|	|dddg|fgd}tj|| d S )	Nr   DimCoordrn  re  )rN  rT  rO  Zdim_coords_and_dimsr   )	iris.coordsrv  rp  ro  r  r
   re  rI  r!   )rU   rq  rO  rT  re   rH   rv  ro  latituder   rr  r`  rk   rV   rV   rW   test_da_coord_name_from_cube  s       
z/TestIrisConversion.test_da_coord_name_from_cubec              	   C  s   ddl m} ddlm} |ddgddd}|ddd	gd
dd}dddgdddgg}|||df|dfgd}tt tj	| W 5 Q R X d S )Nr   ru  rn  ih  	longitudeZ	duplicate)rN  rT  rw  re  rz  r=   rx  )
ry  rv  rp  ro  r   r   r   r  r
   re  )rU   rv  ro  r|  rz  r   rr  rV   rV   rW   "test_prevent_duplicate_coord_names  s      z5TestIrisConversion.test_prevent_duplicate_coord_namesrh  ZIAZILINr   r>   r=   c                 C  sl   ddl m} ddlm} dddg}tj||gdgd}tj|}||||dddfgd}||kshtd S )Nr   )AuxCoordrn  spacerE   rS  )Zaux_coords_and_dims)ry  r  rp  ro  r  r
   r]  ri   )rU   rh  r  ro  r   r   r`  rk   rV   rV   rW   test_fallback_to_iris_AuxCoord   s    
 z1TestIrisConversion.test_fallback_to_iris_AuxCoord)r  r  r  r(   rk  r'   rm  r   r  r  rs  r{  r}  r  rV   rV   rV   rW   rF  0  sj   EP
rF  c               	   C  s&   t  } tt | j W 5 Q R X d S r  )r
   r   r   r   __dict__)ro   rV   rV   rW   test_no_dict2  s    r  c               	   C  s<   t t} G dd dt}W 5 Q R X t| jdks8tdS )zTest that DataArray subclasses must explicitly define ``__slots__``.

    .. note::
       As of 0.13.0, this is actually mitigated into a FutureWarning for any class
       defined outside of the xarray package.
    c                   @  s   e Zd ZdS )z$test_subclass_slots.<locals>.MyArrayNr+  rV   rV   rV   rW   MyArrayA  s   r  z(MyArray must explicitly define __slots__N)r   r   r   r
   r  r'  ri   )r  r  rV   rV   rW   test_subclass_slots8  s    r  c                  C  s.   ddl m}  td}| |}| |ks*tdS )zClasses with __slots__ are incompatible with the weakref module unless they
    explicitly state __weakref__ among their slots
    r   )refr=   N)weakrefr  r
   ri   )r  r;   rrV   rV   rW   test_weakrefG  s    r  c                  C  s   t tdddgdddggddgd	d
dgddgdd} t| |  |  }|jd= t| |  | jdksjt|jdksxtt| j	 ddhkstt|j	 dhkstdS )zMake sure that deleting a coordinate doesn't corrupt the DataArray.
    See issue #3899.

    Also test that deleting succeeds and produces the expected output.
    r=   r>   rD   r]   r^   r_   r9   r8   r;   r<   rn   r   r   r   rA  N)
r
   rI   r   r!   r   rF   rG   ri   r   r   )Za0Za1rV   rV   rW   test_delete_coordsR  s    

r  c                  C  s   t jddgddggddddgid	} d
| jd< ddd| jd< | jdd}d|jd< |jddi d|jd< d|jd d< |jd ddi | |rt| jd |jd kst| jd |jd kstd| jkstd| jkstdS )z(Check attrs deep copy, see :issue:`2835`r=   r>   rD   r]   r   r8   r6   r7   r   0flat1)level1alevel1bnestedTr  2r  r  r  r  N)r  r
   rH   r   r  r   ri   )Zda1da2rV   rV   rW   test_deepcopy_nested_attrsk  s    $


r  c                  C  s6   t tt g} t| }| jd |jd k	s2td S r   )r
   rI   r   r   r   r}   ri   )Zx0r  rV   rV   rW   test_deepcopy_obj_array  s    r  c                  C  sn   t jddgdgd} | | jd< | jdd t jdd	gd
gd}|| jd< | |jd< | jdd |jdd d S )Nr=   r>   r8   r   rc   Tr  r^   r_   r9   )r  r
   rH   r   )r   r  rV   rV   rW   test_deepcopy_recursive  s    


r  r
   )r   r[   c              	   C  s  t   | jdd}W 5 Q R X | dks.t| jdd}| dksJt| jddd}| dksht| dksxtt    | j| d| dd}W 5 Q R X |j| jkstt|jt	| j| djd d d d t	j
f | dj | jd	d
gd| }t    | j| d| dd}W 5 Q R X | |}t|jd	d
gd|jd	d
gd tjtdd, | j| d| djd	d
gdd}W 5 Q R X d S )Nr   )r  )r  r  r  )r  r  r8   r;   r   r=   rD  z)cannot reindex or align along dimension.*rz   r!  )r$   r  r  ri   r  ry  rG   r   r   rI   Znewaxisr  r  r   r   r   )r   r`  Z	with_nansrV   rV   rW   	test_clip  s,    $2$
"r  c                   @  s<   e Zd ZejddddgddddZddd	d
ZdS )TestDropDuplicateskeepfirstlastFrY   rZ   c              	   C  s   t jddddgddddddgidd	}|d
krDdddg}dddg}n.|dkrbdddg}dddg}nddg}ddg}t j|dd|idd	}|jd|d}t|| tjtdd |jd|d W 5 Q R X d S )Nr   r^   r_   rp   r\   r=   r>   testr  r  r  r  z['space'] not foundrz   r  )r  r
   drop_duplicatesr    r   r   r   )rU   r  r   r   r\   rk   r`  rV   rV   rW   test_drop_duplicates_1d  s&    
   


z*TestDropDuplicates.test_drop_duplicates_1dc                 C  s   t jddddgddddggd	d
gddgddddgddd}t jdddggd	d
gd
dddgfd	dgfddd}|jd
d	gdd}t|| |jddd}t|| d S )Nr   r^   r_   rp   r>   r=   rD   r]   r  r\   r6   )r  r\   r  r  )r\   r  r  r  .)r  r
   r  r    )rU   r   rk   r`  rV   rV   rW   test_drop_duplicates_2d  s     

z*TestDropDuplicates.test_drop_duplicates_2dN)r  r  r  r   r  r  r  r  rV   rV   rV   rW   r    s   r  c                   @  sx   e Zd ZddddZeddddZeddddZeddd	d
Z	e
ddddZeeddddZdS )TestNumpyCoercionrY   rZ   c                 C  sv   t jdddgddddddgfid	}t| | tj| tdddg tj|d  tdddg d S 
Nr=   r>   rD   r8   r@  r]   r^   r_   r   )	r  r
   r!   as_numpyrI   rI  r    to_numpyr   r  rV   rV   rW   test_from_numpy  s    $z!TestNumpyCoercion.test_from_numpyc                 C  s   t jdddgddddddgfid	}|d}t| |  tj|	 t
dddg tj|d 	 t
dddg d S r  )r  r
   r   r!   r  r  rI   rI  r    r  r   )rU   r   Z
da_chunkedrV   rV   rW   test_from_dask  s
    $
z TestNumpyCoercion.test_from_daskc              	   C  s   ddl m} tdddg}tj||dddd	d||d d
dfid}tj|dd	d|d fid}t| | tj	|
 | tj	|d	 
 |d  d S Nr   )Quantityr=   r>   rD   ZPa)r
  r8   r@  mr   )pintr  rI   r   r  r
   r!   r  rI  r    r  )rU   r  r   r   rk   rV   rV   rW   test_from_pint  s    
z TestNumpyCoercion.test_from_pintc                 C  s   dd l }tdddg}|j|}tj|ddgdd|d fid	}tj|ddgdd|d fid	}t| | tj	
| | d S )
Nr   r=   r>   rD   r8   r9   Zelevr   r   )r  rI   Zdiagflatr  r  r  r
   r!   r  rI  r    r  )rU   r  r   Zsparrr   rk   rV   rV   rW   test_from_sparse  s        z"TestNumpyCoercion.test_from_sparsec              	   C  s   dd l }tdddg}tj||ddd||d fid}tj|ddd|d fid}t| | tj|	 | d S )Nr   r=   r>   rD   r8   r@  r   )
ZcupyrI   r   r  r
   r!   r  rI  r    r  )rU   cpr   r   rk   rV   rV   rW   test_from_cupy  s      z TestNumpyCoercion.test_from_cupyc              	   C  s   dd l }ddlm} tdddg}|j|}tj||dddd	d||d
dd fid}| }d |_	tj|dd	d|d fid}t
|| tj| | d S r  )r  r  r  rI   r   r  r  r
   r  re   r!   rI  r    r  )rU   r  r  r   ro   r   r`  rk   rV   rV   rW   test_from_pint_wrapping_dask,  s    

z.TestNumpyCoercion.test_from_pint_wrapping_daskN)r  r  r  r  r'   r  r*   r  r,   r  r&   r  r  rV   rV   rV   rW   r    s   r  c                   @  s(   e Zd ZddddZddddZdS )TestStackEllipsisrY   rZ   c                 C  sB   t ddgddggdd}|jdgd}|j|jd}t|| d S Nr=   r>   r   r   .)r  )r
   r  rG   r!   )rU   r   r`  rk   rV   rV   rW   test_result_as_expectedC  s    z)TestStackEllipsis.test_result_as_expectedc              	   C  s>   t ddgddggdd}tt |jdd W 5 Q R X d S r  )r
   r   r   r   r  r  rV   rV   rW   #test_error_on_ellipsis_without_listI  s    z5TestStackEllipsis.test_error_on_ellipsis_without_listN)r  r  r  r  r  rV   rV   rV   rW   r  A  s   r  )e
__future__r   r,  r  r  r   r   textwrapr   typingr   r   r   r   r  rI   r  rO   r   Zpackaging.versionr	   Zxarrayr  r
   r   r   r   r   r   r   Zxarray.coding.timesr   Zxarray.convertr   Zxarray.corer   Zxarray.core.commonr   Zxarray.core.indexesr   r   r   Zxarray.core.typesr   r   Zxarray.core.utilsr   Zxarray.testsr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   Zpandas.errorsr.   ImportErrorZpandas.core.computation.opsr  r  Z
pytestmarkr/   r  r  r  r   r  r  r  r  r  r;  r@  rA  rD  rE  rF  r  r  r  r  r  r  r  r  r  r  r  rV   rV   rV   rW   <module>   s  $	T

                                 R
&         
$
!   G









=    k *$  *$   


	 *  ("$$  ("$$   $ +  ("$$  ("$$   $ +     *   M
	   .T