U
    Cvfu                    @  s  d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dl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mZm Z 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-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH zd dlImJZJ W n" eKk
r   d dlLmJZJ Y nX zd dlMmNZO W n eKk
r   Y nX e1dZPejQRdejQRdgZSdsddddZTddddZUddddZVddd d!ZWG d"d# d#ejXZYG d$d% d%ZZejQ[d&d'd(geNd'd(ged'd(gfd)dd*d+Z\d)dd,d-Z]ejQ[d.d/d(d'd gid/d/ge^d(d'd gfid/d/ge^d'd(d gfid/e.d(d'd gid/ed/d d(d'gd0id/ed/d d'd(gd0id1d2id1d/d(d'd gfid1d/e^d(d'd gfid1d/ge^d(d'd gfif
ejQ[d3d/d/d d'd(gfid/d d'd(gifd)dd4d5Z_d)dd6d7Z`ejQ[d.d1d8e^d(d'd gfifd)dd9d:ZaejQj[d;d<gd=d>d)dd?d@Zbd)ddAdBZcd)ddCdDZdd)ddEdFZeejQRdGejQj[d;dHd=d>d)ddIdJZfejQ[dKd=dLgejQ[dMd'd(gd)ddNdOZgejQ[dKd=dLgd)ddPdQZhejQjie> dRdSejQ[dKd=dLgd)ddTdUZjejQ[dKd=dLgd)ddVdWZkeFejQ[dKd=dLgd)ddXdYZlejQ[dKd=dLgejQ[dZd[d\gd)dd]d^Zmd)dd_d`Znd)ddadbZod)ddcddZpd)ddedfZqd)ddgdhZrd)ddidjZsG dkdl dlZtG dmdn dnZud)ddodpZvd)ddqdrZwdS )t    )annotationsN)copydeepcopy)StringIO)dedent)AnyHashable)DatetimeIndex)
	DataArrayDatasetIndexVariable
MergeErrorVariablealignbackends	broadcastopen_datasetset_options)CFTimeIndex)dtypesindexingutils)duck_array_ops	full_like)DatasetCoordinates)IndexPandasIndex)
array_typeinteger_types)	is_scalar)InaccessibleArrayUnexpectedDataAccessassert_allcloseassert_array_equalassert_equalassert_identicalassert_no_warningscreate_test_data
has_cftimehas_daskrequires_bottleneckrequires_cftimerequires_cupyrequires_daskrequires_numexprrequires_pintrequires_scipyrequires_sparsesource_ndarray)UndefinedVariableErrorsparsezerror:Mean of empty slicez&error:All-NaN (slice|axis) encounteredz tuple[Dataset, Dataset, Dataset]returnc                 C  s  t j| }dddg}dddg}d}d}tjd|d}tjd|d}t jdd	d
gtd}t jddgtd}	t jdddgdd}
t jddgdd}dddg}t jdddgdd}t jddgdd}t jdddgtd}t jddgtd}tj	tj
|dd||||gdddgd tj
||gdgd tj
|
|gdgd tj
||gdgd t jtj
||gdgd tj
||gdgd d!d"}tj	tj
|dd||||gdddgd tj
|	|gdgd tj
||gdgd tj
|d | |gdgd t jtj
||gdgd tj
||gdgd d!d"}tj	d#tj
|dd|| ||||gdddgd id"}td$d% |j D spttd&d% |j D st|||fS )'N      r      
2000-01-01periodsz
2000-02-01ZaeZbcdfdtypeZasdfZasdfgaabbcc|S2ddeeu   áóz
2019-01-01z
2019-01-02z
2019-01-03zdatetime64[s]z
2019-01-04z
2019-01-05TFlatlontimecoordsdims)da
string_varstring_var_fixed_lengthunicode_vardatetime_varbool_var	data_varsZnew_varc                 s  s   | ]}|j jjV  qd S NdataflagsZ	writeable.0Zobjp rZ   =/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_dataset.py	<genexpr>   s     z*create_append_test_data.<locals>.<genexpr>c                 s  s   | ]}|j jjV  qd S rT   rU   rX   rZ   rZ   r[   r\      s     )nprandomRandomStatepd
date_rangearrayobjectboolxrr   r
   randastypeZunicode_appendall	variablesvaluesAssertionError)seedrsrF   rG   Znt1Znt2Ztime1time2rM   Zstring_var_to_appendrN   Z!string_var_fixed_length_to_appendrO   rP   Zdatetime_var_to_appendrQ   Zbool_var_to_appenddsds_to_appendZds_with_new_varrZ   rZ   r[   create_append_test_dataO   s    


          
     
rr   tuple[Dataset, Dataset]c                 C  s   dddd}dddg}dd	d
g}t jdddgdd}t jdddgdd}| dkr\|||S | dkrn|||S td|  dd S )Nrs   r5   c                 S  s   t jddg| fiddddgid}t jddg|fiddddgid}tdd |j D s`ttd	d |j D s|t||fS )
NZtemperaturerH   r   r8   r7   rJ   c                 s  s   | ]}|j jjV  qd S rT   rU   rX   rZ   rZ   r[   r\      s     zXcreate_append_string_length_mismatch_test_data.<locals>.make_datasets.<locals>.<genexpr>c                 s  s   | ]}|j jjV  qd S rT   rU   rX   rZ   rZ   r[   r\      s    )re   r   ri   rj   rk   rl   )rV   Zdata_to_appendrp   rq   rZ   rZ   r[   make_datasets   s     zEcreate_append_string_length_mismatch_test_data.<locals>.make_datasetsabZcdZefabcdefZghijkr@   rA   rB   rC   r>   Zaaabbbcccz|S3USzunsupported dtype .)r]   rb   
ValueError)r?   ru   Z
u2_stringsZ
u5_stringsZ
s2_stringsZ
s3_stringsrZ   rZ   r[   .create_append_string_length_mismatch_test_data   s    



r   r   c                  C  s*   t jjddgddggdd} ti d| iS )Nabr8   r7   level_1level_2namesx)r`   
MultiIndexfrom_productr   mindexrZ   rZ   r[   create_test_multiindex   s
     r   ztuple[DataArray, DataArray]c                  C  sT   t tjtjd d dd} t tjtjd d dd}| | }| | | }||fS )N
   r   name   y)r
   r`   r   r]   Zr_r   r   r   r   rZ   rZ   r[   create_test_stacked_array   s
    r   c                      s6   e Zd Z fddZdd fddZdd Z  ZS )	InaccessibleVariableDataStorec                   s   t    t | _d S rT   )super__init__set
_indexvarsself	__class__rZ   r[   r      s    
z&InaccessibleVariableDataStore.__init__Noner5   c                   s@   t  j|f|| | D ]\}}t|tr| j| qd S rT   )r   storeitems
isinstancer   r   add)r   rj   argskwargskvr   rZ   r[   r      s    
z#InaccessibleVariableDataStore.storec                   s$   fdd  fddj  D S )Nc                   s.   |  j kr|S tt|j}t|j||jS rT   )r   r   ZLazilyIndexedArrayr    rk   r   rK   attrs)r   r   rV   r   rZ   r[   lazy_inaccessible   s    
zFInaccessibleVariableDataStore.get_variables.<locals>.lazy_inaccessiblec                   s   i | ]\}}| ||qS rZ   rZ   rY   r   r   )r   rZ   r[   
<dictcomp>   s      z?InaccessibleVariableDataStore.get_variables.<locals>.<dictcomp>)Z
_variablesr   r   rZ   )r   r   r[   get_variables   s    z+InaccessibleVariableDataStore.get_variables)__name__
__module____qualname__r   r   r   __classcell__rZ   rZ   r   r[   r      s   r   c                   @  s  e Z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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/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$dddGdHZ%dddIdJZ&e'dddKdLZ(e'dddMdNZ)dddOdPZ*dddQdRZ+dddSdTZ,dddUdVZ-dddWdXZ.dddYdZZ/ddd[d\Z0ddd]d^Z1ddd_d`Z2dddadbZ3dddcddZ4dddedfZ5dddgdhZ6dddidjZ7dddkdlZ8dddmdnZ9dddodpZ:dddqdrZ;e<j=>ds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ZJe<j=KdeLjMdddddgddddZNe<j=KdeLjMdddddgddddZOe<j=KdePeQgddddZRe<j=KdeLjMdddddgd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[e<j=KdddgddddZ\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̈́Zke<j=jlemd΍e<j=Kddenjoenpdeqrddgdddgidgdҍgdenjoenpdeqrddgdddgidgdҍggd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}e~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ddZddddZdddd ZddddZddddZddddZddddZe<j=Kd	d
dg g ddifd
dАd
gg ddifddӐdgd
dgi fddАdd
dgg i fd
dgdӐdgd
dgi fd
dgdАdd
dgg i fdd
gdӐdgd
dgi fd
dgdАdd
dgg i fgddddZddddZddddZddddZddddZe<j=KddАdddgfdg fddddgf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&Zeddd'd(Zddd)d*Zddd+d,Zddd-d.Zddd/d0Zddd1d2Zddd3d4Zddd5d6Zddd7d8Zddd9d:Zddd;d<Zddd=d>Zddd?d@ZdddAdBZdddCdDZdddEdFZdddGdHZdddIdJZdddKdLZdddMdNZdddOdPZdddQdRZdddSdTZdddUdVZdddWdXZdddYdZZe<j=KdePeQgddd[d\Zddd]d^Ze<j=Kd_d`dagedbgeqjdcgddfg edbgeqjdcgdefd`dagenoddgdffgdddgdhZdddidjZdddkdlZdddmdnZdddodpZdddqdrZdddsdtZdddudvZd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Zed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ZddddZe<j=Kddd dd eqjeg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Ze<j=KdÐdbdĐdŐdƐdbgfdĐdŐdƐdbdgfdŐdĐdƐdbdgfdƐdĐdŐdbgfge<j=KddǐdgdddɐdʄZdddːd̄Ze<j=>d͡dddΐdτZdddАdфZdddҐdӄZe<j=>d͡dddԐdՄZddd֐dׄZdddؐdلZdddڐdۄZdddܐd݄Ze<j=KdddӐdge<j=KdߐddgddggddddZe<j=KdddgddddZe<j=KdddgddddZe<j=KdddgddddZeddddZddddZddddZddddZddddZ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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<j=KdeLjMddd
dig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/d0Zddd1d2Zddd3d4Zddd5d6Zddd7d8Zddd9d:Ze<j=Kd;d<d=ge<jdddd>ddd>d?d@e<jdddd>i dAd@e<jdddd>ddd>dBd@gdddCdDZdddEdFZe<j=KdGdHdIge<j=KdJdIde<jdKegdLge<j=KdMdNe<jdOe'gdLgdddPdQZdS (R  TestDatasetr   r5   c              	   C  sZ  t dd}d|jd< td|d j }ddd	 t|dD }t| ||ksXtt	d
d8 t
ttt|d}d|  k rd
k sn tW 5 Q R X td}ddd	 tt dD }t| ||ksttddtdfi }td}ddd	 t|dD }t| ||ks2ttddid}tt|dk sVtd S )N{   rm   barfooa+              <xarray.Dataset>
            Dimensions:  (dim2: 9, dim3: 10, time: 20, dim1: 8)
            Coordinates:
              * dim2     (dim2) float64 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0
              * dim3     (dim3) %s 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j'
              * time     (time) datetime64[ns] 2000-01-01 2000-01-02 ... 2000-01-20
                numbers  (dim3) int64 0 1 2 0 0 1 1 2 2 3
            Dimensions without coordinates: dim1
            Data variables:
                var1     (dim1, dim2) float64 -1.086 0.9973 0.283 ... 0.1995 0.4684 -0.8312
                var2     (dim1, dim2) float64 1.162 -1.097 -2.123 ... 0.1302 1.267 0.3328
                var3     (dim3, dim1) float64 0.5565 -0.2121 0.4563 ... -0.2452 -0.3616
            Attributes:
                foo:      bardim3
c                 s  s   | ]}|  V  qd S rT   rstriprY   r   rZ   rZ   r[   r\      s     z(TestDataset.test_repr.<locals>.<genexpr>d   )Zdisplay_widthZ   zl            <xarray.Dataset>
            Dimensions:  ()
            Data variables:
                *empty*c                 s  s   | ]}|  V  qd S rT   r   r   rZ   rZ   r[   r\     s     r   r   zy            <xarray.Dataset>
            Dimensions:  ()
            Data variables:
                foo      float64 1.0c                 s  s   | ]}|  V  qd S rT   r   r   rZ   rZ   r[   r\     s     A  barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarr     )r'   r   r   r?   joinreprsplitprintrl   r   maxmaplenr   r]   onesmean)r   rV   expectedactualmax_lenrZ   rZ   r[   	test_repr   s8    

$ zTestDataset.test_reprc                 C  s   t  }td}ddd t|dD }t| ||ks@ttjj	ddgddggd	d
}t
i d|i}td}ddd t|dD }t| ||kstd S )Na              <xarray.Dataset>
            Dimensions:  (x: 4)
            Coordinates:
              * x        (x) object MultiIndex
              * level_1  (x) object 'a' 'a' 'b' 'b'
              * level_2  (x) int64 1 2 1 2
            Data variables:
                *empty*r   c                 s  s   | ]}|  V  qd S rT   r   r   rZ   rZ   r[   r\   (  s     z3TestDataset.test_repr_multiindex.<locals>.<genexpr>r   r   r8   r7   )Za_quite_long_level_namer   r   r   aW              <xarray.Dataset>
            Dimensions:                  (x: 4)
            Coordinates:
              * x                        (x) object MultiIndex
              * a_quite_long_level_name  (x) object 'a' 'a' 'b' 'b'
              * level_2                  (x) int64 1 2 1 2
            Data variables:
                *empty*c                 s  s   | ]}|  V  qd S rT   r   r   rZ   rZ   r[   r\   <  s     )r   r   r   r   r   r   rl   r`   r   r   r   )r   rV   r   r   r   rZ   rZ   r[   test_repr_multiindex  s$     z TestDataset.test_repr_multiindexc                 C  s,   t dd}tjdddd|jd< t| d S )Ni  r   r:   r   Br<   freqrH   )r'   r`   period_rangerJ   r   r   rV   rZ   rZ   r[   test_repr_period_index@  s    
z"TestDataset.test_repr_period_indexc                 C  sX   t ddgiddid}t| tjdkr,dnd}td	|df }t|}||ksTtd S )
Nu   foø   ba®   åu   ∑r   little<>u               <xarray.Dataset>
            Dimensions:  (foø: 1)
            Coordinates:
              * foø      (foø) %cU3 %r
            Data variables:
                *empty*
            Attributes:
                å:        ∑)r   r   sys	byteorderr   strrl   )r   rV   r   r   r   rZ   rZ   r[   test_unicode_dataG  s    	zTestDataset.test_unicode_datac                 C  s<   G dd d}t dd| fi}td}|t|ks8td S )Nc                   @  s$   e Zd Zdd Zdd Zdd ZdS )z*TestDataset.test_repr_nep18.<locals>.Arrayc                 S  s   d| _ ttj| _d S )Nr7   )shaper]   r?   float64r   rZ   rZ   r[   r   ^  s    z3TestDataset.test_repr_nep18.<locals>.Array.__init__c                 _  s   d S rT   rZ   )r   r   r   rZ   rZ   r[   __array_function__b  s    z=TestDataset.test_repr_nep18.<locals>.Array.__array_function__c                 S  s   dS )NzCustom
ArrayrZ   r   rZ   rZ   r[   __repr__e  s    z3TestDataset.test_repr_nep18.<locals>.Array.__repr__N)r   r   r   r   r   r   rZ   rZ   rZ   r[   Array]  s   r   r   r   z            <xarray.Dataset>
            Dimensions:  (x: 2)
            Dimensions without coordinates: x
            Data variables:
                foo      (x) float64 Custom Array)r   r   r   rl   )r   r   datasetr   rZ   rZ   r[   test_repr_nep18\  s    zTestDataset.test_repr_nep18c                 C  sb   t dd}|d}d|jd< d|jd< t }|j|d td	}| }||ksVt|  d S )
Nr   r   r   r   Zunicode_attrr   Zstring_attr)bufu'          xarray.Dataset {
        dimensions:
        	dim2 = 9 ;
        	time = 20 ;
        	dim1 = 8 ;
        	dim3 = 10 ;

        variables:
        	float64 dim2(dim2) ;
        	datetime64[ns] time(time) ;
        	float64 var1(dim1, dim2) ;
        		var1:foo = variable ;
        	float64 var2(dim1, dim2) ;
        		var2:foo = variable ;
        	float64 var3(dim3, dim1) ;
        		var3:foo = variable ;
        	int64 numbers(dim3) ;

        // global attributes:
        	:unicode_attr = ba® ;
        	:string_attr = bar ;
        })	r'   	drop_varsr   r   infor   getvaluerl   close)r   rp   r   r   r   rZ   rZ   r[   	test_infos  s    



zTestDataset.test_infoc              	   C  s  ddt d f}dt df}ddgt dddf}tjtdd t||d	 W 5 Q R X tjtd
d t||d W 5 Q R X tjtdd tddi W 5 Q R X tjtdd tdddddgfd W 5 Q R X t||d}td|d i}t|| d S )Nr   r7   r   r   r   r   conflicting sizesmatchr   r   zdisallows such variablesr   r   ztuple of form)r8   r7   r9               already exists as a scalarr   r8   r9   r   r   r   zr   )	r]   arangereshapepytestraisesr~   r   	TypeErrorr%   )r   x1x2r   r   r   rZ   rZ   r[   test_constructor  s    "zTestDataset.test_constructorc              	   C  sN   t t: ttdddddgfdttddd	d
gdddd W 5 Q R X d S )Nr   r8   r7   r9   r   r   皙?皙?g333333?皙?r   rK   r   rS   rJ   )r   r   r   r   dictr
   r   rZ   rZ   r[   test_constructor_invalid_dims  s
    z)TestDataset.test_constructor_invalid_dimsc                 C  s`   t ddgdtd fi}t ddtd i}t|| t ddddddgi}t|| d S )Nr   g      @r   r   r      	   )r   r]   r   r%   r   r   r   rZ   rZ   r[   test_constructor_1d  s
    
zTestDataset.test_constructor_1dc              
   C  s   t dg dfi}dtd|d fD ]}t d|i}t|| q$G dd d}td}dd dtjdd	td
|| | g
}|D ]2}t	| t dg |fi}t d|i}t|| qd S )Nr   r8   c                   @  s   e Zd ZdS )z2TestDataset.test_constructor_0d.<locals>.ArbitraryNr   r   r   rZ   rZ   rZ   r[   	Arbitrary  s   r  z2000-01-01T12Tg333333@Zhellos   rawr:   )
r   r]   rb   r%   r`   Z	Timestampnan
datetime64Zto_pydatetimer   )r   r   argr   r  dr   rZ   rZ   r[   test_constructor_0d  s,    
zTestDataset.test_constructor_0dc           
   	   C  s2  t ddgdddgfg}t ddgdddgfg}tdddtjgfdtjddgfdddddgi}t||d}t|| t|jd tstdddgf}|	d	|i}t|||d
}t|| ddddgf}|	d|i}t|||d}t|| dddgf}	t
jtdd t|||	d W 5 Q R X d S )Nr8   r7   r   r   r9   r   r   r   cr   r   r  r  )r   r   r  r   r   )r   r   e)r
   r   r]   r  r%   r   rj   r   rl   merger   r   r~   )
r   r   r   r   r   r  	expected2r  	expected3r  rZ   rZ   r[   test_constructor_auto_align  s(      


z'TestDataset.test_constructor_auto_alignc                   s   |     fdddD }t| j jd}|d= t | t|d j}|d ||d< t| j jd}|d= t | d S )Nc                   s   i | ]}| |   qS rZ   )	to_pandas)rY   var_namerp   rZ   r[   r     s     z@TestDataset.test_constructor_pandas_sequence.<locals>.<dictcomp>r   r   r   r   r   )make_example_math_datasetr   rJ   r   r$   reversedindexreindex)r   Zpandas_objsds_based_on_pandasZrearranged_indexrZ   r  r[    test_constructor_pandas_sequence  s    

z,TestDataset.test_constructor_pandas_sequencec                 C  sl   t tjddgdt tjddddgdg}|D ]2}| }t|}|jD ]}t|| ||  qNq4d S )Nr   r   r  r9   r   )r
   r]   r^   rf   r  r   rS   r#   )r   Zdasr   Z
pandas_objr   dimrZ   rZ   r[   test_constructor_pandas_single  s    
z*TestDataset.test_constructor_pandas_singlec              	   C  s  t dddidddddgfd}tddidddddgfi}t|}t|| ddddgft dddidd}t|}t|| td	dtd
fidtd
fddgd}tdtdfdtdfddtd
fddgd}t|d	 d d df |d	 d dd}t|| t dddidddddgfd}tt	 t| W 5 Q R X t dddidddgd}t|}tddidddgi}t|| d S )Nr   r   r8   rt   r   r   r   r   r   r   r7   r9   )r  r   r7   r9   r   )
r
   r   r%   r]   r   zerosr   r   r   r   )r   rV   r   r   originalrZ   rZ   r[   test_constructor_compat  s4     
 
&
 z#TestDataset.test_constructor_compatc              	   C  s   t jtdd$ tdddgfidddgfi W 5 Q R X ti dddgfi}|jrVtt|j dgksntt	j
jddgddggdd	}t jtd
d* ti ||d ti |tdd W 5 Q R X d S )Nzfound in both data_vars andr   r   r   r8   r   r7   r   r   zconflicting MultiIndexr   r   )r   r   )r   r   r~   r   rS   rl   listrJ   keysr`   r   r   range)r   rp   r   rZ   rZ   r[   test_constructor_with_coords5  s    (
 z(TestDataset.test_constructor_with_coordsc                 C  s  t  }t|jtjstt|jjts*tt|jjtks>t|jdddddksVt|j	|jksftt|j
tjsxtt|j
jtst|j
tdtdtddkstt|t|jkstt| t|jkstd|jkstd	t|jkstt|d
kstt|s$tt|jdddgks>tt|j dddgks\td|jksltd	|jks|td|jkstt|jd
kstt|jdddhkstt|jd
kstdt|jksttdd |j D s tt|jdddhkstt|jd
ks.tdt|jksBttdd |j D s`tt|jddddgks|td|jkstd|jkstd|jkstd	|jkstt|jdkstttdtjddgtjddjdks td S )Nr  r  r   r   dim1dim2r   rH   r   var1var2var3Zaasldfjalskdfjr.  r9   r1  r2  r3  numbersr/  r   rH   c                 S  s   g | ]}t |tqS rZ   )r   r   rY   idxrZ   rZ   r[   
<listcomp>l  s     z/TestDataset.test_properties.<locals>.<listcomp>c                 S  s   g | ]}t |tjqS rZ   )r   r`   r   r5  rZ   rZ   r[   r7  r  s     r   r8   r7   r>   r      )r'   r   rK   r   ZFrozenrl   mappingr  typesizesr   r]   r?   r)  rS   r*  rj   r   r   rd   r   xindexesri   rk   indexesrJ   r   int64rb   Zfloat32nbytesr   rp   rZ   rZ   r[   test_propertiesD  sV    $zTestDataset.test_propertiesc              	   C  s4   t ddi}tjtdd t| W 5 Q R X d S )Nr   r   zcannot directly convertr   )r   r   r   r   r]   asarrayr@  rZ   rZ   r[   test_asarray  s    zTestDataset.test_asarrayc              	   C  s   t ddtdfidddgi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   r   r%  r   r   r   rt   r   r   r8   r7   r   )r   r]   r&  Z	get_indexequalsr`   r   rl   r   r   KeyErrorr@  rZ   rZ   r[   test_get_index  s
    " zTestDataset.test_get_indexc                 C  s   t dddgddifiddid}t|j|d  t|jj|j |j|jd ksTt|jj|d jd ksntddhtt	|kstdtt	|jkstd	|jd< |jd d	kstt|j|d  d S )
Ntminr   *   unitsZCelsiustitlezMy test datar   i)
r   r%   rG  r   rJ  r   rl   rI  r   dirr@  rZ   rZ   r[   test_attr_access  s     
zTestDataset.test_attr_accessc              	   C  s   t  }tjd}d|f|d< d|jks,td|ks8td|f|d< t|jddgksZtt|d j| t	t
 d|jf|d< W 5 Q R X d S )N)r   r9   )rH   r   r   r   qux)r   r]   r^   rj   rl   r)  r#   rk   r   r   r~   T)r   r   r  rZ   rZ   r[   test_variable  s    zTestDataset.test_variablec              	   C  s\  t  }tjd}ddi}d||f|d< d|jks6tt|jd  tjsPtt	|jd j
|jd  t  }d||f|d< t	|d |d  |j|jkstd|d d f|d< dtdf|d< tt d|d d f|d< W 5 Q R X tjd}td	}tt d
|f|d
< W 5 Q R X tt d
|f|d
< W 5 Q R X d
|jksXtd S )Nr   r   r   r   r   r   r   )r   r8   r   r   )r   r]   r^   rJ   rl   r   to_indexr`   r   r%   variablerj   rK   r   r   r   r~   rb   )r   r   Zvec
attributesr   arrZscalrZ   rZ   r[   test_modify_inplace  s,    
zTestDataset.test_modify_inplacec              	   C  s  t dtddgdfdtdddgdfddgtjdd	fd
dtddgdftdd}|j}t|tsvt	t
|dkst	t|ddddgkst	t|d j|d j t|d j|d j d|kst	d|kst	d|kst	d|kst	tt |d  W 5 Q R X tt |d  W 5 Q R X td}t|}||ksTt	|jdd	dksjt	|jtdtdtdtddkst	d S )Nr   r>  r   r   r8   r7   r9   r   r   r   r   r   r   r   r   r   z        Coordinates:
          * x        (x) int64 -1 -2
          * y        (y) int64 0 1 2
            a        (x) int64 4 5
            b        int64 -10r   r   )r   r]   rb   r^   randnr>  rJ   r   r   rl   r   r)  r%   rR  r   r   rE  r   r   rK   r   r?   )r   rV   rJ   r   r   rZ   rZ   r[   test_coords_properties  sB    	z"TestDataset.test_coords_propertiesc              	   C  s  t dddgfddddgfddgtjddfd	dd
dgfdd}|jdd}dddgf|jd< t|d ddg |jdd}dddgf|jd< t|d ddg |jdd}tjt	dd ddgf|jd< W 5 Q R X t
|| | }|jd= |jddd}t
|| tt |jd= W 5 Q R X tt |jd= W 5 Q R X |jdd}|jddi |ddid}t
|| |jd= d|jkstd S )Nr   rV  rW  r   r   r8   r7   r9   rX  r   r   rY  r   Tdeepr   r   r   r   r   drop	not_foundr   r     )r   r]   r^   rZ  r   rJ   r#   r   r   r~   r%   reset_coordsrE  updater  
set_coordsr<  rl   r   rV   r   r   rZ   rZ   r[   test_coords_modify   s>    
	


zTestDataset.test_coords_modifyc                 C  sJ   t ddddgid}dddg|d< |jd  tdddgsFtd S )	Nr   r8   r7   r9   rt   r   r   r  )r   r<  to_pandas_indexrD  r`   r   rl   )r   r   rZ   rZ   r[   test_update_index+  s    zTestDataset.test_update_indexc                 C  s@   t  }ddddgf|jd< t dddddgfid}t|| d S )Nr   r8   r7   r9   r   rt   )r   rJ   r%   )r   r   r   rZ   rZ   r[   &test_coords_setitem_with_new_dimension0  s    z2TestDataset.test_coords_setitem_with_new_dimensionc              	   C  s2   t  }tjtdd td|jd< W 5 Q R X d S N.cannot set or update variable.*corrupt.*index r   r   r   )r   r   r   r~   r+  rJ   r   rZ   rZ   r[   test_coords_setitem_multiindex6  s     z*TestDataset.test_coords_setitem_multiindexc              	   C  s  t ddgfddgfddgfd}t dddgfiddgfddgfd}t ddgfddgfddgfdd}|d}t|| |dg}t|| |d	}t|| |d	dg}t|| | }t|| | }t|| | }t|| |d	dg}t|| |d}t|| tjtd
d |d W 5 Q R X |jddd}|d}t|| |d}t|| d S )Nr   r   r8   r7   )r   yyzzzrn  )r   rm  rt   rm  zcannot remove indexr   Tr^  )r   rd  r%   rb  r   r   r~   r   )r   Z	one_coordZ
two_coordsZ
all_coordsr   r   rZ   rZ   r[   test_coords_set=  s<    "&














zTestDataset.test_coords_setc                 C  sR   t dddddgfidddd	gd
}t dddd	gd
d}|j }t|| d S )Nr   r   rV  r   r8   r   r7   r9   r   r   rt   )r   rJ   
to_datasetr%   )r   origr   r   rZ   rZ   r[   test_coords_to_datasetd  s    $
z"TestDataset.test_coords_to_datasetc              	   C  s  t dddgfddgddj}t dddgfddgd	dj}t dddgfdddgfddgd
d}||}t|| ||}t|| t dddgfidj}tt || W 5 Q R X t ddddgfidj}tt || W 5 Q R X t dddddgfidj}tt || W 5 Q R X t ddddgfidj}t dtdid}||}t|| ||}t|| t dtj	idj}||}t|
 | ||}t|
 | d S )Nr   r8   r7   r   r   rt   r   r   )r   r   )r   r   r   r  r  r  )r   rJ   r  r%   r   r   r   r+  r]   r  rp  r   Zorig_coordsZother_coordsr   r   rZ   rZ   r[   test_coords_mergej  s:    









zTestDataset.test_coords_mergec                 C  s   t ddddgfidj}t ddidj}| }||}t|| t dddgfidj}t dddgdgdggfid}||}t|| ||}t| | t ddtjgfidj}t dtjidj}| }||}t|| d S )Nr   r   r8   rt   r   )r   rJ   rp  r  r%   	transposer]   r  rs  rZ   rZ   r[   "test_coords_merge_mismatched_shape  s     





z.TestDataset.test_coords_merge_mismatched_shapec                 C  s   t  }ddgf|d< d|d< t|jddhks2td|jks@td|jksNtt|d |jd  td}t|j}||kst|jjt	dt	dd	kstd S )
Nr         ?r          @r   r   z]        Data variables:
            foo      (x) float64 1.0
            bar      float64 2.0r   r  )
r   r   rS   rl   r%   r   r   r   r]   r?   r   rp   r   r   rZ   rZ   r[   test_data_vars_properties  s     
z%TestDataset.test_data_vars_propertiesc                 C  s   t dd}||st||s&tt dd}d|jd< ||sHt||rVt|d= ||rjtt dddd i}||st||st| }||rt||rtd S )NrH  r   bazfoobarrH   r1  )r'   rD  rl   	identicalr   renamerb  )r   rV   data2rZ   rZ   r[   test_equals_and_identical  s    


z%TestDataset.test_equals_and_identicalc                 C  s8   t  }|drt|dr"t|ddir4td S )Nr   r   r8   r7   )r'   rD  rl   r~  broadcast_equalsr   rZ   rZ   r[   test_equals_failures  s    z TestDataset.test_equals_failuresc                 C  sL   t ddid}t ddgid}||s,t||r:t||rHtd S )Nr   r   rt   )r   r  rl   rD  r~  )r   data1r  rZ   rZ   r[   test_broadcast_equals  s
    z!TestDataset.test_broadcast_equalsc                 C  s:   t dd}ddi|_|jd s&tdt|jts6td S )NrH  r   r}  r|  )r'   r   rl   r   r  r   rZ   rZ   r[   
test_attrs  s    

zTestDataset.test_attrsc                 C  s,   t  }t | t|}|ji ks(td S rT   )r   r'   dump_to_storer   chunksrl   r   r   rp   rZ   rZ   r[   test_chunks_does_not_load_data  s    z*TestDataset.test_chunks_does_not_load_datac           	   	   C  s  t  }|j D ]}t|jtjstq|ji ks6t|	 }|j
 D ]8\}}||jkrnt|jtjstqHt|jtjsHtqHdddd}|j|kst|	|j|kstdd }||}|	ddddd}d	d
dd}|j|kst||}|
 D ]\}}||| kstq|	|}|j|ks2t||}|	|}||}|j|ks\tt|| |
 D ]\}}||| ksntqntjtdd |	ddi W 5 Q R X d S )N)r  )r  rP  r.  r/  r   c                 S  s   dd |   D S )Nc                 S  s   i | ]\}}||j jqS rZ   )rV   r   r   rZ   rZ   r[   r     s      zBTestDataset.test_chunk.<locals>.get_dask_names.<locals>.<dictcomp>)r   r  rZ   rZ   r[   get_dask_names  s    z.TestDataset.test_chunk.<locals>.get_dask_namesr   )rH   r.  r/  r   )r   r9   )r   r   )r   r   zsome chunksr   r   r   )r'   rj   rk   r   rV   r]   Zndarrayrl   r  chunkr   rK   rL   r   r%   r   r   r~   )	r   rV   r   Z	reblockedr   Zexpected_chunksr  Zorig_dask_namesZnew_dask_namesrZ   rZ   r[   
test_chunk  sD    



zTestDataset.test_chunkc              	   C  s   t  }t | t| }tt |  W 5 Q R X tt |d j	 W 5 Q R X |j
j |jdd |jtddgdjddd |  |  |d |dd	i |d |d d S )
Nr1  r   rH   r   rH   r.  rV  r.  r/  r.  r}  )r   r'   r  r   r  r   r   r!   loadrk   r1  rV   iselsliceru  r   fillnar  rd  r   r  rZ   rZ   r[   test_dask_is_lazy$  s     

zTestDataset.test_dask_is_lazyc              	   C  sv  t  }td d dtddd}||}t|jt|jks@t|jD ]N}||kr||j| t|j| ||  jkstqF|j| |j| ksFtqF|j	D ]}|| j|| jkst|| j
|| j
ksttd g|| jj }| D ]H\}}||| jkrtt|| j|kd }|D ]}	|||	< q&q|| jt| }
|| j}tj|
| qtt |jtddd W 5 Q R X tjtdd |jtddd W 5 Q R X tjtdd |jtdddd W 5 Q R X t||jtddd	d |jdd
}dddd|jks$tt|jt|jks>tt|jt|jksXtt|jt|jksrt|jtddtdd}dddd|jkstt|jt|jkstt|jt|jkstt|jt|jkst|jddtdd}ddd|jkstt|jt|jks4tt|jt|jksNtt|jtt|jdg ksrtd S )Nr7   r   r  )	not_a_dimz}Dimensions {'not_a_dim'} do not exist. Expected one or more of [\w\W]*'dim\d'[\w\W]*'dim\d'[\w\W]*'time'[\w\W]*'dim\d'[\w\W]*r   warn)r  missing_dimsignorer.  r   r  r   rH   r/  r   r   )rH   r.  r/  )r/  r   rH   )r'   r  r  r)  rK   rl   r]   r   sizerj   r   rk   ndimr   Znonzerorb   tupletestingr#   r   r   r~   warnsUserWarningr%   r   rS   rJ   r<  )r   rV   Zslicersretr  r   Z
slice_listsZindsindr   r   rZ   rZ   r[   	test_isel:  sd    


*

zTestDataset.test_iselc              
   C  s@  t  }dddg}dddg}dddg}|jd|fd|fd|fd}d|jksNt|jd jt|fksht|jt|dd	d|fd|fd}d|jkst|jd jt|fkst|jd|fd|fd|fd}t|| t|d
gd
t	j
did}t|dgdt	j
did}t|dgdt	j
did}	|j|||	d}d
|jksJtd|jksZtd|jksjtd|jksztd|jkstd|jkst|jd|fd|fd|fd}|j|d
 |d |	d d}t|| t|d
gd
t	j
did}t|d
gd	}t|d
gd	}	|j|||	d}d
|jks4td|jksDtd|jksTtd|jksdt|jd|fd|fd|fd}|j|d
 d}t|| |jd|fd|fd}d|jkstd|jkstd|jkstt	j|d | |d  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jtdd |jtdddgid W 5 Q R X tddddgdd}
|
jddddgfd}t|
d  |d   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s4td%|jksDtt|d% dg|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s8td
|jksHtd|jksXtd|jkshtd|jksxtd
|d jkstt|d
 dg|d
  t|d |d  |d* j|d& j|d' jf }|d+ j|d& j|d' jf }|d, jtd |d& jf }t|d
 d|d
  t|d* | t|d+ | t|d, | tjd
ddddgfidddd-d.gfid/}
|
jd0did1d2}tjd
didd-id/}t|| |
jd0did3d2}td
di}t|| |
jd0tdid1d2}tjd
didd-id/}t|| |
jd0tdid3d2}td
di}t|| d S )4Nr8   r7   r9   r   r   
test_coordr  r  r  r   rK   rJ   r   r  rH   r/  r   r   r   r  r  pointsr  r  )r/  r.  zDimensions of indexers mismatchr   zcannot use a Datasetr  r   r   rw  r   )stationAr   Cr  Zdim1sZdim2szconflicting values/indexes on r   r1  r2  r3  r   r   rt   r   Fr^  T)r'   r  rK   rl   rJ   r   r   r
   r%   r]   r^   rZ  assign_coordsrS   r  r#   r   r   
IndexErrorr   r   r   r~   rR  r  r$   re   )r   rV   pdim1pdim2pdim3r   r   Zidx1Zidx2Zidx3rp   ZstationsZexpected_var1Zexpected_var2Zexpected_var3rZ   rZ   r[   test_isel_fancy{  s   




  
  
*"    
*


zTestDataset.test_isel_fancyc              	   C  s^  t  }ttdddgdtjdid}|j|d}t|d |d  t|d |d  ttdddgdtjdid}tj	t
dd	 |j|d
 W 5 Q R X tj	t
dd	 |d j|d
 W 5 Q R X tj	t
dd	 |d j|d
 W 5 Q R X ttdddgd|d jdd id}|j|d
}t|d |d  ttdddg|d jdd dtddfdd}|j|d
}t|d |d  ttdddgd|d jid}|dk }|j|d
}t|d |d dd  ttdddg|d jd
tjdfddd}|dk }|j|d
}t|d dd|d dd  t|d |d dd  t|d |d  ttdddgdd
tjdfid}|j|d
}d|kstd|jksttdg ddid}|j|d
}d|kst|j|d d
}d|kstti ddddgid}tj	t
dd	 |j|d d
}W 5 Q R X dS )zTest for indexing by DataArrayr8   r   r.  r9   r  r  r/  zdimension coordinate 'dim2'r   r/  r2  r7   r   )r/  r4  r4  r   Nr  r   )r/  non_dimnon_dim2r  r  r  rt   )r'   r
   r]   r   r^   rZ  r  r%   r   r   r  rk   r   rl   rJ   r   )r   rV   Zindexing_dar   Zindexing_dsrZ   rZ   r[   test_isel_dataarray  s    
  
  
  

  
	 
zTestDataset.test_isel_dataarrayc                 C  sh   t jdddddgfiddddgid}t jdgddd	}|j|d
}d|jksRtt|jjt	rdtd S )Nr   r   r8   r7   r9   r   rt   r   rK   r   rw  )
re   r   r
   r  r<  rl   r   r   rR  r   )r   rp   Zidxrr   rZ   rZ   r[   &test_isel_fancy_convert_index_variablen  s
    &z2TestDataset.test_isel_fancy_convert_index_variablec                 C  s  t  }td d dtdtdd}td d dtddtddd}t|||| dtjd	d
df|d< t|jdd|jd	d t|jtdd|jtd	dd t||jtddd tjd	dd}t|jtdd|j|d t|jtdd|j|d dkd tjt	ddd}t
dt	df|d}t||j|d t||jtdd t|jdd|jtdd t|jdd|jtdd t|jtddd|jtddd d S )Nr7   r9   r  r         ?r   r  rH   r:   r   r;   r  r   z
2000-01-10Z1999Z2005time.dayofyeardays)unittd)r   r  )r  z3 daysz0 daysZ0hr8   z1 daysz2 days)r'   r  r$   r  selr`   ra   Zto_timedeltar]   r   r   Z	Timedelta)r   rV   Zint_slicersZloc_slicerstimesr  rZ   rZ   r[   test_selw  s6    
    zTestDataset.test_selc              	   C  s  t  }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}|jtd
ddd	gd}d
|jkstt|| tdgdgdggd
dgd}|j|d}|jtddgdgd	ggd}d
|jkstd|jkstt|| tdddgd
gd
dddgid}|j|d}|jddd	gddd
i}d
|jksRtd
|j	ksbtt|
d

d|
d
 t|d
 
d|d
  tdddgdgddddgid}|j|d}|jddd	gd}t|| tdddgd
gdddgddd}|j|d}t|d
 
d|d
 
d |jddd	gd}d
|d jf|d< t|d 
d
|d  |d jdkszttdddgdgdddgdddd	gfddddgfdd}|j|d}|jddd	gd}t|
d
| t|d
 j|d
 jstd S )N        r  rx  r/  r  r  r   r8   r7   new_dimnew_dim2)r  r  r   r   r  r  r9   )r  r/  r1  )r.  r  皙?333333?g?)r/  r4  r  )r'   r
   r  r$   r  r   rK   rl   r  rJ   r   rk   r]   allclose)r   rV   r  r   r   rZ   rZ   r[   test_sel_dataarray  s~    

     
 	zTestDataset.test_sel_dataarrayc              	   C  s  t jjtdddggdd}tjddtjdd	fi|t	d	dd
}|j
tjtd	ddd}|jt|d d	 ddd}|d jdkst|d jdkstt|| |j
tjtd	ddd}|jtd|d d	 d}|d jdkst|d jdkstt|| |j
tjtd	dddddgidd}|jtj|d d	 dddddgidd}|d jdksxt|d jdkstt|| tjtdd |jddgd W 5 Q R X tjtdd@ |jtjt|d d t|dd  gddgdd W 5 Q R X d S )Nrw   r   r8   onetwor   varr   r   r9   rt   r   r  rw  r   r   r7   r  zVectorized selection is r   r   r   )r  zMVectorized selection is not available along coordinate 'x' with a multi-indexrW  )r`   r   r   r)  re   r   r]   r^   rf   r+  r  r
   r   r  rK   rl   r%   r   r   r   r~   rb   )r   midxZmdsZactual_iselZ
actual_selrZ   rZ   r[   test_sel_dataarray_mindex  sH    

 
" z%TestDataset.test_sel_dataarray_mindexc                 C  sZ   t jddgdd}t |ddgd}|d }|jdd	}|jdd	}t|| d S )
Nr   r   categoryr>   r8   r7   r  rk   r  )r  )r`   Series	DataFrame	set_index	to_xarrayr  r  r%   )r   r  r=   rp   r   r   rZ   rZ   r[   test_sel_categorical	  s    z TestDataset.test_sel_categoricalc              	   C  s   t jddgdd}t |ddgd}|d }tt |jdd	d
 W 5 Q R X tt |jdd	d W 5 Q R X d S )Nr   r   r  r>   r8   r7   r  r  nearest)r  method)r  	tolerance)	r`   r  r  r  r  r   r   r~   r  )r   r  r=   rp   rZ   rZ   r[   test_sel_categorical_error  s    z&TestDataset.test_sel_categorical_errorc                 C  s   t jdddgddddddgd}tjdd	td
fid	|fd	dddgfdd}|jdd}|jddgd}t|| |jddd	 j	}|t
ddgk st|jd	dgd}|d}|d jdkstd S )Nr   r   r|  rM  quuxcorge
categoriesr  catr9   r   r8   r  r  rt   r  r7   r  r  r  r7   r7   )r`   CategoricalIndexre   r   r]   r   r  r  r%   rk   rb   ri   rl   r  unstackr   )r   r  rp   actual1	expected1actual2actual3rZ   rZ   r[   test_categorical_index  s     

z"TestDataset.test_categorical_indexc                 C  s   t jdddgddddddgd}tjdd	td
fid	|fd	dddgfdd}|jdgdd	 j}|tdgk	 s|t
d S )Nr   r   r|  rM  r  r  r  r  r  r9   r   r8   r7   r  rt   r  )r`   r  re   r   r]   r   r  rk   rb   ri   rl   )r   r  rp   r   rZ   rZ   r[   test_categorical_reindex/  s    z$TestDataset.test_categorical_reindexc                 C  sp   t ddg}t jdddgd}t jddg|d}t ||ddgd	d
dg}| }|d jdksltd S )Nr   r   r|  r   r  r>   r8   r7   i1i2rk   r  r  rk   )r8   r7   )r`   r  CategoricalDtyper  r  r  r   rl   )r   r  r  r  r=   r   rZ   rZ   r[   test_categorical_multiindex;  s    z'TestDataset.test_categorical_multiindexc                 C  s   t dddddgfiddddgi}t ddi}|jddd}t|| t ddiddi}|jdd	d}t|| t dddddgfi}t ddi}|jddd}t|| d S 
Nr   r   r8   r7   r9   r   Tr   r_  F)r   r  r%   r   rV   r   selectedrZ   rZ   r[   test_sel_dropF  s    "

zTestDataset.test_sel_dropc                 C  sp   t jjddgddggdd}td|id}|jddd	}d
|jksFt|jddd	}t|jt	dd
did d S )Nr   r8   r7   r  r   r   rt   T)r   r_  r   F)
r`   r   from_arraysr   r  rJ   rl   r$   r   r
   )r   r  rV   r   rZ   rZ   r[   test_sel_drop_mindexU  s    z TestDataset.test_sel_drop_mindexc                 C  st   t dddddgfiddddgi}t ddi}|jddd}t|| t ddiddi}|jdd	d}t|| d S r  )r   r  r%   r  rZ   rZ   r[   test_isel_drop_  s    "
zTestDataset.test_isel_dropc              	   C  s"  t  }|jtdtdd}|jddd}t|| |jtdd}|jdd}t|| |dd |jD }|d}t|| |dd |jD }| }t|| tjtd	d
 |dg W 5 Q R X 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 )Nr   r   rH   r/  r   r  c                 S  s   i | ]}|t d qS )r   r  rY   r"  rZ   rZ   r[   r   t  s      z)TestDataset.test_head.<locals>.<dictcomp>c                 S  s   i | ]}|t d qS )r   r  r  rZ   rZ   r[   r   x  s       either dict-like or a single intr   r9   expected integer type@r  expected positive int)
r'   r  r  headr$   rK   r   r   r   r~   r   rV   r   r   rZ   rZ   r[   	test_headi  s&    




zTestDataset.test_headc              	   C  s&  t  }|jtdd tdd d}|jddd}t|| |jtdd}|jdd}t|| |dd	 |jD }|d}t|| |d
d	 |jD }| }t|| tjtdd |dg W 5 Q R X 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 )Nr  r   r   r   r  c                 S  s   i | ]}|t d dqS )r	  Nr  r  rZ   rZ   r[   r     s      z)TestDataset.test_tail.<locals>.<dictcomp>c                 S  s   i | ]}|t d dqS )r  Nr  r  rZ   rZ   r[   r     s      r   r   r9   r  r  r  r  r  r  )
r'   r  r  tailr$   rK   r   r   r   r~   r  rZ   rZ   r[   	test_tail  s&    




zTestDataset.test_tailc              	   C  s  t  }|jtd d dtd d dd}|jddd}t|| |dd |jD }|d}t|| tjtdd |dg W 5 Q R X 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 tjt	dd |jdd W 5 Q R X d S )Nr   r   r  c                 S  s   i | ]}|t d d dqS )Nr   r  r  rZ   rZ   r[   r     s      z)TestDataset.test_thin.<locals>.<dictcomp>r   r   r9   r  r  r  zcannot be zeror   r  r  r  )
r'   r  r  Zthinr$   rK   r   r   r   r~   r  rZ   rZ   r[   	test_thin  s    


zTestDataset.test_thinzignore::DeprecationWarningc              	   C  s&  t  }|j|d< dddg}dddg}dddg}|jtd|td|td|d	}|jtd|j| td|j| td|j| d	}t|| t|d
 dddg j	dgddddgid}t|d dddg j	dgddddgid}t|d dddg j	dgddddgid}	|j|||	d}|jtddddgtddddgtddddgd}|j
|d d}t|| t|d
 dddg j	dgddddgid}t|d dddg j	dgddddgid}t|d dddg j	dgddddgid}	|j|||	d}|jtddddgtddddgtddddgd}|j
|d |d |	d d}t|| tddtdddfi}|jdddgdddgd tdddddgfitddddgtddddgdd }|jtddddgtddddgd}t|| |jddddgfddddgfd |jtdd!dd"gtddd#d$gd%d&}t|| tdddgdgddddgid}
tdddgdgdddd'gid}|d dddgdddgf }|j|
|d}t||d  t|d d(|
d  t|d d)|d  tt |jd"gd$gd%d*d+ W 5 Q R X d S ),Nr.  r8   r7   r9   r   r   r  r  r  rH   r   r   r  r  r/  r   r  r  r   r  r  皙@r  r  r  r   r   r  r  r  r  rt   r         @r  ry  pad)r   r   r  r   r   r   gMbP?)r   r   r  r  )r'   r.  r  r   r  r/  r   r%   r
   rk   r  r   r]   r   r   rJ   rc  r#   r   r   r   rE  )r   rV   r  r  r  r   r   Zidx_tZidx_2Zidx_3Zidx_xZidx_yZexpected_aryrZ   rZ   r[   test_sel_fancy  s    




      
      
 
&
  zTestDataset.test_sel_fancyc              	   C  s  t  }|jdd}|jddd}t|| |jdddd}t|| tt |jtjddd}W 5 Q R X |jdgd}|jd	gd
d}t|| tjtdd |jt	dddd W 5 Q R X tjt
dd |jd|d W 5 Q R X tjtdd |jddd W 5 Q R X d S )Nr8   r  gffffff?r  )r/  r  )r/  r  r  r         ?g333333?backfillzslice objectsr   r9   Zffillz
``method``zcannot supply)r.  r  )r'   r  r%   r   r   rE  r]   piNotImplementedErrorr  r   r~   r  rZ   rZ   r[   test_sel_method  s"    


zTestDataset.test_sel_methodc              	   C  sT   t  }|jdd}|jtdd }t|| tjtdd |jd  W 5 Q R X d S )Nr   r   zcan only lookup dictr   )r'   r  locr  r%   r   r   r   r  rZ   rZ   r[   test_loc+  s    
zTestDataset.test_locc                   s  t jjddgddgddggdd}td	d
tdfid
|id 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
d dii  jd did! t jd
di  jdd! t jd
di  jdd! t jd
di  jdd! t jdddd! jddd d S )#Nr   r   r8   r7   rV  rW  )r  r  threer   r  r   r  r  Fr   r5   c                   s    j | d} j|d}|s(t|| nT|rP|d jd |ksBt||di}t|d j|d j |d |d r|td S )Nrw  r  r   r   )r  r  r%   rK   rl   r  rR  rD  )Zlab_indexerZpos_indexerreplaced_idxrenamed_dimrp   expected_dsZmdatarZ   r[   r  9  s    z7TestDataset.test_selection_multiindex.<locals>.test_sel)r   r8   rV  r   )r   r7   rW  r   r8   Tr  )r  r  r  r   )r  r   r   r8   r   r  r  rw  )FN)	r`   r   r   r   r+  r  r%   r  r  )r   r   r  rZ   r  r[   test_selection_multiindex3  s0        

$z%TestDataset.test_selection_multiindexc                 C  s~   t tjddtdfgdd }t tjddtdfgdd}t||\}}t|||	dd t||| d S )Nr   r   r   r   r   r   r   )
r
   r]   r^   rZ  r+  rp  r   r%   Zbroadcast_likeru  )r   Z	original1Z	original2r  r  rZ   rZ   r[   test_broadcast_likeZ  s    
  
  
zTestDataset.test_broadcast_likec           	   	   C  s   t ddd }tddgddg}t|| tjd}tjd}td}t d|fd|fd|fd	}| }|	 }|
|st||ftjdd}tjdd}tjtd
d( t ddg|fddg|fd  W 5 Q R X d S )Nr8   r7   r   r   r   r   
abcdefghijtr   r   r#  zcannot convert Datasetsr   r)r   r  r`   r  r#   r]   r^   rZ  r)  to_dataframerD  rl   r   r   r~   )	r   r   r   r   r   r#  rp   x2dZy2drZ   rZ   r[   test_to_pandasi  s    
zTestDataset.test_to_pandasc                 C  s  t  }dddg f|d< |jtdtdd}||}t|| |jdd}dtd	f|d< |d
 dd  j|d
 d d< tj	|d
 dd < |d 
t|d< tj	|d dd < |d 
t|d< |d dd  j|d d d< tj	|d dd < ||}t|| d S )Nr   r   r   letters   )r.  rH   Tr\  
cdefghijklr3  r7   rW  r4  )r'   r  r  reindex_liker%   r   r)  rk   r]   r  rg   rc   floatr  rZ   rZ   r[   test_reindex_like~  s     


zTestDataset.test_reindex_likec              	   C  s   t  }t||  |j|d d}|j|d d}t|| |j|d jd}t|| |j|d  d}t|| tjtdd |j|d d d d W 5 Q R X |j	t
dd}|j|d d d d}t|| |d|d i}|}t|| tjtdd |jd	d
id
d W 5 Q R X tjtdd |d W 5 Q R X |j|d d dd d}|j|d d dd d}t|| |jddddgdjdd dd d}|jddddgdddd}t|| |jddddgdjdd dd d}|jddddgddid}t|| td	dtjdfidtdi}ttddd}tt |j|d }W 5 Q R X tdd	d!gtd"fitd#td$d%}tdd	d!gtd&fid
d'd#gd
d'gd%}tj|d d< |jd
d'd#gd
d'gd%}t|| d S )(Nr.  r  z'cannot reindex or align along dimensionr   r   r  r/  zcannot specify bothr   r   rw  
dictionaryr   rV  r    @r  gffffff@c                 S  s"   | j jddddggt| j dS NrY  rV   r1  r   r   r.  r  rZ   rZ   r[   <lambda>      z*TestDataset.test_reindex.<locals>.<lambda>c                 S  s"   | j jddddggt| j dS )Nr2  )r2  r   r   r.  r  rZ   rZ   r[   r4    r5  r1  r2  rY  r6  )r/  
fill_valuec                 S  s"   | j jddddggt| j dS r1  r3  r  rZ   rZ   r[   r4    r5  c                 S  s*   | j jtjtjtjtjggt| j dS )Nr2  )r2  r   r]   r  r   r.  r  rZ   rZ   r[   r4    s   r1  rH   ro   r  r  r   r9   r   r9   r   r   )r9   r7   r8   )r'   r%   r  r  rk   rQ  r   r   r~   r  r  r  assignr   r]   r^   rZ  r+  r
   r   r&  r  )r   rV   r   r   ro   rp   rZ   rZ   r[   test_reindex  sr    


 "

	

 

"  zTestDataset.test_reindexc                 C  s   t dddddgfidddddgddidd	ifi}|jddgd
}t ddddgfiddddgddidd	ifi}t|| |jj|jjkstd S )NrV   r   r8   r7   r9   r   r   r   r|  rw  )r   r  r%   r   encodingrl   r   rp   r   r   rZ   rZ   r[   test_reindex_attrs_encoding  s    
z'TestDataset.test_reindex_attrs_encodingc              	   C  s   t  }tt( tjddgdgdd}|j|d W 5 Q R X tjddgdgdd}tjdd	"}|j|d t	|d
ks~t
W 5 Q R X d S )Nr  rx  r  r  r  r  r/  Trecordr   )r'   r   r   r~   re   r
   r  warningscatch_warningsr   rl   )r   rV   r  wsrZ   rZ   r[   test_reindex_warning  s    z TestDataset.test_reindex_warningc                 C  s:   t  }|jdd}|jD ]}|j| |j| k	stqd S )NF)r   )r'   r  rj   rl   )r   rV   Zreindexed_datar   rZ   rZ   r[   test_reindex_variables_copied  s    
z)TestDataset.test_reindex_variables_copiedc                 C  sf  t dddgfddgd}ddd	g}|j|d
d}t dddtjgf|d}t|| |j|d
dd}t ddtjg f|d}t|| |j|d
dddgd}t dtjdtjgf|d}t|| |jdddgdddgdd}t dtjddgfdddgd}t|| |j|dd}t dtjddgf|d}t|| t d|i}|j|dd}t|| d S )Nr   r   r   r   r8   r   g      r  r  r  )r   r  r   )r   r  r  r9   r  )r   r  r  r  r  )r   r  r]   r  r%   r,  )r   rp   r   r   r   altrZ   rZ   r[   test_reindex_method  s(    



 

zTestDataset.test_reindex_methodr8  r7   ry  r8   r   c                 C  s   t dddgfdddgfddgd}ddd	g}|j||d
}|tjkrRtj }}n$t|trn|d }|d }n| }}t ddd|gfddd|gf|d}t|| d S )Nr   r   r   r6  rY  r   r8   r   r   r   r7   )r   r8  r   r   )	r   r  r   NAr]   r  r   r  r%   )r   r8  rp   r   r   fill_value_xfill_value_zr   rZ   rZ   r[   test_reindex_fill_value  s     $



z#TestDataset.test_reindex_fill_valuec           	      C  s   t dddgfdddgfddgd}ddd	g}t d|i}|j||d
}|tjkr^tj }}n$t|trz|d }|d }n| }}t ddd|gfddd|gf|d}t|| d S )Nr   r   r   r6  rY  r   r8   rI  r7   r8  r   r   )	r   r,  r   rJ  r]   r  r   r  r%   )	r   r8  rp   r   rG  r   rK  rL  r   rZ   rZ   r[   test_reindex_like_fill_value4  s"    $



z(TestDataset.test_reindex_like_fill_valuer?   c                 C  sX   t dddgftjddg|dd}|j|jd}|}t|| |jj|jjksTtd S )	Nr   r8   r7   r   r   r>   )rV   r   rw  )r   r]   rb   r  r   r%   r?   rl   )r   r?   rV   r   r   rZ   rZ   r[   test_reindex_str_dtypeL  s
    $
z"TestDataset.test_reindex_str_dtyper  c           
   	   C  s   t dtddgdgdddgidi}t dtddgdgdddgidi}t||d|d	\}}|tjkrrtj }}n$t|tr|d }|d }n| }}t dtdd|gdgddddgidi}t dtd|dgdgddddgidi}	t	|| t	|	| d S )
Nr   r8   r7   r   r  r   r9   outer)r   r8  )
r   r
   r   r   rJ  r]   r  r   r  r%   )
r   r8  r   r   r   y2Zfill_value_fooZfill_value_barexpected_x2expected_y2rZ   rZ   r[   test_align_fill_valueV  s:    $$


      
z!TestDataset.test_align_fill_valuec              	   C  s  t  }|jdd}dtdf|d< |d dd  j|d d d< tjj|d dd  j |d dd < |d dd  j|d d d< d	|d dd < td
}td}t||dd\}}t	|d | t
|| t||dd\}}t	|d | t|d j|d j t
|j|d|j|d t|d dd   s>tt|d d d  s^tt||dd\}}t|d j|d j t|d j|d j t
|j|d|j|d t|d d d  stt||dd\}}t|d j|d j t|d j|d j t
|j|d|j|d t|d dd   sNttjtdd t||dd W 5 Q R X tt t||dd W 5 Q R X d S )NTr\  r   r+  r3  r7   rW  r4  rY  ZcdefghijZabcdefghijklinnerr   rQ  r  leftrightzinvalid value for joinr   r}  r   r   )r'   r   r)  rk   r]   r^   rZ  r   r   r#   r%   r$   rR  r  isnanri   rl   r   r   r~   r   )r   rX  rY  intersectionunionleft2Zright2rZ   rZ   r[   
test_alignv  s@    &
    zTestDataset.test_alignc              	   C  s~   t jdddgid}t jdddgid}t j||dd\}}t|| t|| tjtdd	 t j||dd W 5 Q R X d S )
Nr   r   r8   rt   r7   exactrW  z&cannot align.*join.*exact.*not equal.*r   )re   r   r   r%   r   r   r~   )r   rX  rY  Zleft1r^  rZ   rZ   r[   test_align_exact  s    

zTestDataset.test_align_exactc              	   C  s  t jddddgid}t jdddgddd	gd
d}t jdddgddd	gd
d}t j||dd\}}t|| t|| t j||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|jddd|dd W 5 Q R X d S )Nr   r   r8   r7   rt   r   r  r0  r9   r   overriderW  excluder   Tr  z'cannot align.*join.*override.*same sizer   rw  )	re   r   r   r%   r  r   r   r~   expand_dims)r   rX  rY  Zexpected_rightZnew_leftZ	new_rightrZ   rZ   r[   test_align_override  s,    



   

 zTestDataset.test_align_overridec                 C  s  t dtddgddggddgddgddgdd	i}t d
tddgddggddgddgddgdd	i}t||dgdd\}}t dtddgddgtjtjggddgdddgddgdd	i}t d
tddgtjtjgddggddgdddgddgdd	i}t|| t|| d S )Nr   r8   r7   r9   r   r   r   r   r  r   r   r   rQ  rc  )r   r
   r   r]   r  r%   r   r   r   r   rR  rS  rT  rZ   rZ   r[   test_align_exclude  sN           	 	
zTestDataset.test_align_excludec                 C  s  t dtdddgddddgfgdi}t dtddgdddgfgdi}|}t dtddtjgddddgfgdi}t||ddd	\}}t|| t|| t|d jt|d jkstt||d
dd	\}}t|d jt|d jk	stt|| t|| d S )Nr   r8   r7   r9   r   rt   FrQ  )r   r   T)	r   r
   r]   r  r   r%   r2   rV   rl   )r   r   r   rS  rT  r   rR  rZ   rZ   r[   test_align_nocopy  s    &""

  
zTestDataset.test_align_nocopyc              	   C  st   t dtdddgdddddgfgdi}t|ddddgid\}t dtdddgdddddgidi}t|| d S )Nr   r8   r7   r9   r   r  )r=  )r   r
   r   r%   )r   r   r   rS  rZ   rZ   r[   test_align_indexes  s    ( zTestDataset.test_align_indexesc              	   C  s   t ddddgfdddgd}t||\}}t|| t|| t ddd	gfddgd
}tjtdd t|| W 5 Q R X d S )Nr   r9   r   r   r   r8   )r   r   r   r   r   r   zcannot reindex or alignr   )r   r   r%   r   r   r~   )r   r   r   r   r   rZ   rZ   r[   test_align_non_unique	  s    

z!TestDataset.test_align_non_uniquec                 C  s   t ddddgfidddgid}t ddddgfiddd	gid}t ddddtjgfidddd	gid}t ddtjddgfi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   r   r8   r   r   rt   r7   r  rQ  rW  )	r   r]   NaNre   r   r%   r   r?   rl   )r   r   r   Z
expected_aZ
expected_bZactual_aZactual_brZ   rZ   r[   test_align_str_dtype	  s        

z TestDataset.test_align_str_dtyper   rX  rb  c                 C  sn   t dddddgddifid}t dddddgfid}tj|||d |jjddiksZt|jji ksjtd S )	Nr   r8   r7   r9   rI  mrt   rW  )r   re   r   r   r   rl   )r   r   rp   Z	ds_noattrrZ   rZ   r[   test_align_index_var_attrs%	  s
    z&TestDataset.test_align_index_var_attrsc                 C  s"  t dddgfdddgfdddd	gfi}t d
ddggfd
ddggfd
ddggfdddd	gfi}t|\}t|| t dddgfi}t ddddgfi}t dd
ddggfi}t dd
ddggfi}t||\}}	t|| t||	 |d }
|d }t||
\}}t|| t|| d S )Nr   r   r8   r   r7   r9   r   r   r|  r  r   r   r   r   )r   r   r%   )r   rp   r   r   Zds_xZds_y
expected_x
expected_yactual_xactual_yZarray_yrT  Z	actual_x2Z	actual_y2rZ   rZ   r[   test_broadcast3	  s2     




zTestDataset.test_broadcastc                 C  s   t ddddggfi}t ddddgfi}t|\}t|| t|d jt|d jks^tt||\}}t|| t|d jt|d jkstd S )Nr   r   r8   r   r   r7   r9   )r   r   r%   r2   rV   rl   )r   r   r   rt  ru  rZ   rZ   r[   test_broadcast_nocopyP	  s    

 
z!TestDataset.test_broadcast_nocopyc              	   C  s2  t tddgddggddgddgddgddtd	d
}t dtddggddgdgd	dgddi}t||dgd\}}t tddggddgggdddgdgddgddgddtd	gd	ggddgddgdgddd
}t dtddggddgggdddgdgddgd	dgddi}t|| t|| d S )Nr8   r7   r9   r   r   r   r   r  r   r  r   r   r   )r   r   )rd  )r   r   r   r   )r   r
   r   r%   rg  rZ   rZ   r[   test_broadcast_exclude]	  sV         
   	
z"TestDataset.test_broadcast_excludec              
   C  s  t dtdddgddddgfgd	i}t d
tddgddggddgddgddgddi}t||\}}t dtddgddgddgtjtjggddgddgddddgddi}t d
tddgtjtjgtjtjgddggddgddgddddgddi}t|| t|| d S )Nr   r8   r7   r9   r   rV  rW  r  rt   r   r   r   r   r$  r  )r   r
   r   r]   r  r%   rg  rZ   rZ   r[   test_broadcast_misaligned	  s>    & 	 	 "	
z%TestDataset.test_broadcast_misalignedc                 C  s   t ddtdfidddgddd	d
gd}|jddgd}t||j\}}|jd |jd ksdt|jd |jd ks|td S )Nr   r   r   r   )r9   r   r7   r   r   r  r8   r7   r9   r   r   r   r   )spacer{  )r   r]   r   stackr   r{  r<  rl   )r   rp   stackedZbroadcasted_rZ   rZ   r[   test_broadcast_multi_index	  s    z&TestDataset.test_broadcast_multi_indexc                 C  s  t  }|d }|d }|d }t|||j  t|||  t|d d ||dk   t|d d dd f |d d |dkf  t|d ddd f ||dk |dkf  t|d dd df |tdtdf  t|d dd df |j|d d |d d f  d S )Nr1  r.  r/  r9   r  r7   )r'   r$   rk   r+  r  )r   rV   r   d1d2rZ   rZ   r[   test_variable_indexing	  s    ***z"TestDataset.test_variable_indexingc              	     s  t   t  g  t fdd jD } d}t||  dg}t|| tjtdd  d W 5 Q R X  jddd}t |  jdgdd}t |  jddgdd}t|| tt	  j
ddd}W 5 Q R X t | tt	  j
dgdd}W 5 Q R X t | tt	  j
ddgdd}W 5 Q R X t|| tt	  j
ddhdd}W 5 Q R X t|| d S )	Nc                   s   i | ]}|d kr| | qS r  rZ   )rY   r   r2  rZ   r[   r   	  s       z3TestDataset.test_drop_variables.<locals>.<dictcomp>rH   zcannot be foundr   Znot_found_herer  errors)r'   r%   r   r   rj   r   r   r~   r  PendingDeprecationWarningr_  r  rZ   r2  r[   test_drop_variables	  s6    








zTestDataset.test_drop_variablesc              	   C  sD   t  }|dddg}tt |d}W 5 Q R X t|| d S )Nr   r   r   )r   r   r   r  DeprecationWarningr%   r  rZ   rZ   r[   test_drop_multiindex_level	  s
    z&TestDataset.test_drop_multiindex_levelc              
   C  sZ  t ddgtjddfddgd}tt |jdgdd}W 5 Q R X |jd	gd
}t	|| tt |jddgdd}W 5 Q R X |jt
ddd
}t	|| tt, tt |jdgdd W 5 Q R X W 5 Q R X tt |jdgddd}W 5 Q R X t	|| tt. tt |jdgddd W 5 Q R X W 5 Q R X tt |jdddgddd}W 5 Q R X |jt
ddd
}t	|| |jtdddgdd}|jt
ddd
}t	|| tt  |jtdddgddd W 5 Q R X t	|| |jd	gd}|jddgd}t	|| tjtdd |jdd
 W 5 Q R X d S )Nr   r   r7   r9   r   r   )r  r   r"  r8   rw  r   r  r  )r"  r  wrong_valuer  )r   r  r  znot found in axisr   )r   r]   r^   rZ  r   r  r  r_  r  r%   r  r   rE  r~   drop_selr
   re  rZ   rZ   r[   test_drop_index_labels	  sB    $

$
& 

$

z"TestDataset.test_drop_index_labelsc              	   C  s  t ddgtjddfddgtdd}t|jd dks@tt	t
 |jdgdd}W 5 Q R X |jdd	}|jdgd	}|jddgd	}|jddgtd
ddd}ttddgd}t	t ||j W 5 Q R X t	t ||j W 5 Q R X t|jd dg t|jd dg t|jd dg |jd jd
ksLt|jd jd
ksbtt|jd dddg tt |jdgdd W 5 Q R X tt |jdgddd W 5 Q R X tdd tt |jddd W 5 Q R X d S )Nr   r   r7   r   r   r   r  r   r   r  rw  r   r   r9   r  r  r8   r   )labelsr   )r  r"  r   r  z\W*drop)r"  r   )r   r]   r^   rZ  r+  r   rJ   rl   r   r  r  r_  r  r
   FutureWarningr<  r#   r  r   r~   rA  filterwarnings)r   rV   ds1ds2Zds3Zds4Zds5rT  rZ   rZ   r[   test_drop_labels_by_keyword 
  s8    $z'TestDataset.test_drop_labels_by_keywordc              	   C  s@  t ddgtjddfddgtdd}t|jd dks@t|jdd	}|j	dd	}t
|| |jdgd	}|j	dgd	}t
|| |jdd
gd	}|j	ddgd	}t
|| |jd jdkst|jdd
gtdddd}|j	ddgtdddd}t
|| |jd jdksttt |jd
d W 5 Q R X d S )Nr   r   r7   r   r   r   r  r   rw  r8   r   r  )r   r]   r^   rZ  r+  r   rJ   rl   Z	drop_iselr  r%   r  r   r   rE  re  rZ   rZ   r[   test_drop_labels_by_positionD
  s(    $



z(TestDataset.test_drop_labels_by_positionc              	   C  sh  t ddddgfddddgfdd	d	d
gfdd}|d}d|jksHtt|jjtks\t|ddg}d|jksxtd|jkstt|jjtkstt|jjtkstt	j
tdd |d W 5 Q R X t	j
tdd |d W 5 Q R X |jddgdd}t|| tjjddgddggd	d
gd}t d|id}t	j
tdd |d	 W 5 Q R X d S )Nr   r   r8   r7   r   r9   r   r   r   r   rX  rt   zthose coordinates don't existr   Znot_a_coordz&those coordinates do not have an indexr   r  r  r   z%.*would corrupt the following index.*)r   drop_indexesr<  rl   r:  r   rR  r   r   r   r   r~   r%   r`   r   from_tuples)r   rp   r   r   rZ   rZ   r[   test_drop_indexes`
  s0    

 zTestDataset.test_drop_indexesc              	   C  sp  t ddgtjddfdtjdfddgtjd}|d}|dd	dg}t|| |d}|d}t|| |ddg}|dd	dg}t|| t	
ttf |d
 W 5 Q R X t	
ttf |d  W 5 Q R X |jd
dd}t|| |jd dd}t|| t	
t |jd
dd}W 5 Q R X |jddd
gdd}|dd	dg}t|| d S )Nr   r   r7   r9   r   r   )r  r   r   r   r  r   r   r  r  r  )re   r   r]   r^   rZ  r  Z	drop_dimsr   r%   r   r   r~   rE  re  rZ   rZ   r[   test_drop_dims
  s:    	







zTestDataset.test_drop_dimsc                 C  s:  t  }dddg|jd< |jddt|fD ]}t|| |j|jksHt|jD ]0}|j| }|j| }t|j	t|j	ksNtqNdt
df|d	< d	|kstd
|jd	< d	|jkst|jd |jd ks*tq*|jddt|fD ]P}t|| |j D ]\}}|j| }||k	stq|jd |jd k	stqd S )Nr8   r7   r9   ZTestFr\  r   r   r   r   T)r'   r   r   r%   r<  rl   rS   rj   r2   rV   r]   r   r   r   )r   rV   copiedr   Zv0Zv1rZ   rZ   r[   	test_copy
  s(    






zTestDataset.test_copyc                 C  sX   t  }dd |j D }|j|d}| }| D ]\}}||| _q6t|| d S )Nc                 S  s    i | ]\}}|t jj|j qS rZ   )r]   r^   rZ  r   r   rZ   rZ   r[   r   
  s      z3TestDataset.test_copy_with_data.<locals>.<dictcomp>r2  )r'   rS   r   r   rV   r%   )r   rq  Znew_datar   r   r   r   rZ   rZ   r[   test_copy_with_data
  s    zTestDataset.test_copy_with_data)r   zdeep, expected_origTr   rI   F  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 }|j|d}d|jd jd< t jt dt	ddgdddgidgd}t
|jd | t
|j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
        dataset deep copied from another.r7   r8   r   r   r   r  r   r   r  value)rJ   rK   r   r\  r  rI   N)re   r
   r]   r   rp  r   rJ   rV   r   rb   r%   )r   r]  Zexpected_origrp   Zds_cpZexpected_cprZ   rZ   r[   test_copy_coords
  s    

zTestDataset.test_copy_coordsc              	   C  s   t  }t|d j|d j}tjtdd |j	|d W 5 Q R X tjtdd |j	d|id W 5 Q R X tjtdd |j	d|id W 5 Q R X d S )Nr1  zData must be dict-liker   r2  z"only contain variables in originalZnot_in_originalz!contain all variables in original)
r'   r]   r   r  r   r   r   r   r~   r   )r   rq  Znew_var1rZ   rZ   r[   test_copy_with_data_errors   s    z&TestDataset.test_copy_with_data_errorsc              	   C  s  t  }ddd}||}t|j}| D ]\}}||||< q,| D ]\}}t|j}	| D ]\}
}|
|	krf||	|	|
< qft	t
|	|j|j|| j  |j|| jkstt|t|j| ksLtqLd|kstd|ksttjtdd |dd	i W 5 Q R X tjtd
d |ddi W 5 Q R X |d }|jt|jf|d< ||}tt |d j W 5 Q R X |jf |}t|| d S )NZrenamed_var1Zrenamed_dim2r1  r/  r1  r/  zcannot rename 'not_a_var'r   Z	not_a_varZnadaz'var1' conflictsr2  )r'   r  r  rj   r   popr)  rK   r  r$   r   rk   r   rR  to_base_variabler<  rl   r:  r   r   r~   r    r!   r%   )r   rV   newnamesrenamedrj   Znknvr   r   rK   r   Znewnamer1  Zrenamed_kwargsrZ   rZ   r[   test_rename
  s@    



zTestDataset.test_renamec              	   C  sD   t  }tjtdd |ddd W 5 Q R X |ddd d S )Nz'samecol' conflictsr   Zsamecolr7  r2  r1  )r'   r   r   r~   r  r   rZ   rZ   r[   test_rename_old_name7  s    z TestDataset.test_rename_old_namec              	   C  sB   t  }ddd}tjtdd ||}W 5 Q R X t|| d S )Nr1  r/  r   does not create an index anymorer   )r'   r   r  r  r  r%   )r   rV   r  r  rZ   rZ   r[   test_rename_same_nameA  s
    
z!TestDataset.test_rename_same_namec              	   C  s   t ddddgfddddgfdd	}t d
dddgfd
dddgfdd	}|d}|dd
i}t||dd |jd
d}t||dd dd
i}tt || W 5 Q R X tt |ddi W 5 Q R X d S )Nr   r   r8   r7   r   ra     rH  rz  x_newFZcheck_default_indexesrw  x_badr   )r   rd  rename_dimsr%   r   r   r~   )r   r'  r   r   actual_2Zdims_dict_badrZ   rZ   r[   test_rename_dimsH  s    $
zTestDataset.test_rename_dimsc              	   C  s   t ddddgfddddgfdd	}t ddddgfddddgfdd
}|d}|ddi}t||dd |jdd}t||dd ddi}tt || W 5 Q R X d S )Nr   r   r8   r7   r   ra  r  rH  rz  )r  r   r   r  Fr  rw  r  )r   rd  rename_varsr%   r   r   r~   )r   r'  r   r   r  Znames_dict_badrZ   rZ   r[   test_rename_vars]  s    $
zTestDataset.test_rename_varsc                 C  sT   t dddddgfid}|ddi}d|jks4t|ddi}d|jksPtd S )Nr   r   r8   r7   rt   r  )r   r  r<  rl   r  )r   r'  r   r  rZ   rZ   r[   test_rename_dimension_coordo  s
    z'TestDataset.test_rename_dimension_coordc              	   C  s|   t ddddgfid}tjtdd |jdd W 5 Q R X t ddddgfid}tjtdd |jdd W 5 Q R X d S )	Nr   r   r   r8   rt   z,rename 'x' to 'y' does not create an index.*r   rw  )r   r   r  r  r  r@  rZ   rZ   r[   $test_rename_dimension_coord_warningsz  s      z0TestDataset.test_rename_dimension_coord_warningsc              
   C  s(  t jjddgddggddgd}ti d|i}ti d|dd	gi}|dd	i}t|| tjtd
d. tj	t
dd |ddi W 5 Q R X W 5 Q R X tjtdd. tj	t
dd |ddi W 5 Q R X W 5 Q R X tjtdd. tj	t
dd |ddi W 5 Q R X W 5 Q R X d S )Nr8   r7   r9   r   r   r   r   r   r  z'a' conflictsr   r  z'x' conflictsz'b' conflicts)r`   r   r  r   r  r%   r   r   r~   r  r  )r   r   r'  r   r   rZ   rZ   r[   test_rename_multiindex  s     
""z"TestDataset.test_rename_multiindexc                 C  s   t dddddgfid}t dddddgfid}t||gddgD ]$\}}ddi|| _ddi|| _qB|ddi}t|| d S )	Nr   r   r8   r7   rt   r   r   r   )r   zipr   r<  r  r%   )r   r'  r   rp   r"  r   rZ   rZ   r[   #test_rename_perserve_attrs_encoding  s    z/TestDataset.test_rename_perserve_attrs_encodingc                 C  s   t jddddd}td|id}|jdd	}d|jks:tt|jd  tsRt|jd  j	dksjtd|jksxtt|jd  tst|jd  j	dkst|
 }t|jd  tst| }t|jd  tstd S )
N2000r   2MSZnoleap)startr<   r   calendarrH   rt   time_newr  )re   cftime_ranger   r  r<  rl   r   rg  r   r   r  r  r   rH   rq  r  rZ   rZ   r[   ,test_rename_does_not_change_CFTimeIndex_type  s    z8TestDataset.test_rename_does_not_change_CFTimeIndex_typec                 C  s   t jdddd}td|id}|jdd}d|jks8tt|jd  tsPt|jd  j	dkshtd|jksvtt|jd  tst|jd  j	dkst|
 }t|jd  tst| }t|jd  tstd S )	Nr  r   r  )r  r<   r   rH   rt   r  r  )r`   ra   r   r  r<  rl   r   rg  r	   r   r  r  r  rZ   rZ   r[   .test_rename_does_not_change_DatetimeIndex_type  s    z:TestDataset.test_rename_does_not_change_DatetimeIndex_typec              	   C  sB  t dddgdtdfdd}t ddid	dddgftdd
}|dd	i}t|| t|jd	 tsltt|jd tst|j	d	 
|j	d	 st|d	di}t|d	| tjtdd |d	di W 5 Q R X tjtdd |ddi W 5 Q R X t dtdfdddddddgfid}|ddi}t|| t dtdfdddddddgfid}|jdd}t|| tjjtdtdgddgd}t dddgd|fdd}t ddid	dddgf|d
}|dd	i}t|| t|jd	 tstt|jd ts"t|j	d	 
|j	d	 s>td S )Nr8   r7   r9   r   rw   rH  rz  r   r   r   zcannot swapr   zreplacement dimensionu)r   r   rt   rw  ZaabZyzzy1rR  r   )r   r)  Z	swap_dimsr%   r   rj   r   rl   r   r<  rD  rd  r   r   r~   r`   r   r  )r   r'  r   r   roundtrippedr6  rZ   rZ   r[   test_swap_dims  sB    "
 
 
 
zTestDataset.test_swap_dimsc              	   C  s  t dtjdfddgtjddfdtjdfdtdddtdddtdddd	d
did}tjtdd |jdgd W 5 Q R X |	d}tjtdd |jdgd W 5 Q R X t dtjdfddgtjddfdtjdfdtdddtdddtdddd	d
did}tjt
dd |ddi W 5 Q R X tjtdd |jddidd W 5 Q R X d S )Nr   r9   r   r   rz  r   r8   r   r  keyentryrJ   r   zalready existsr   r   r  r   zvalue of new dimensionr  g	@zboth keyword and positionalr  )r   r]   r^   rZ  linspacer   r   r~   re  rd  r   )r   r'  rZ   rZ   r[   test_expand_dims_error  s>    
z"TestDataset.test_expand_dims_errorc              	   C  sh  t dtjdfddgtjddfdtdddtdddtdddd	d
did}|dgdg}t |d dd|d dddtdddtdddtdddd	d
did}t|| |d}t|| |dgdg}t |d dd|d dddtdddtdddtdddd	d
did}t|| |d}t|| d S )Nr   r9   r   r   r   r   r8   r   r  r  r  r  r   r   r   rV  )r   r]   r^   rZ  r  re  r%   squeeze)r   r'  r   r   r  rZ   rZ   r[   test_expand_dims_int/  sH    &





z TestDataset.test_expand_dims_intc              	   C  s~   t ddtdddgfi}t ddtdddgdddggfidddgid}|tddgd	}t|| d|jksztd S )
Nr   r   r8   r7   r9   )r   r   r   rt   r  )r   r]   rb   re  r  r%   Z_coord_namesrl   r   r'  r   r   rZ   rZ   r[   test_expand_dims_coords_  s      

z#TestDataset.test_expand_dims_coordsc                 C  sD   t ddiddi}t dddgfiddgi}|d}t|| d S )Nr   r8   r   r7   r  )r   re  r%   r  rZ   rZ   r[   &test_expand_dims_existing_scalar_coordh  s    
z2TestDataset.test_expand_dims_existing_scalar_coordc                 C  s:   t dddgfiddgi}|jddd}t|| d S )Nr   r  r8   r   r7   r   )r   r  re  r%   )r   r'  r   rZ   rZ   r[   test_isel_expand_dims_roundtripn  s    z+TestDataset.test_isel_expand_dims_roundtripc                 C  sB  t dtjdfddgtjddfdtdddtdddtdddd	d
}|ddddgd}t tj|d jt	dddg t
tddddgtdddddddgddtj|d jt	ddddg t
tddddgtdddtddddddddgddddtdddid
}t|| d S )Nr   r9   r   r   r   r   r8   r   r  rt   lro  n)r  r  r   )r  r  r   r  r  rI   r   )r  r  r   r   r  )r   r]   r^   rZ  r  re  re   r
   rk   r   r  r+  r   r%   )r   r'  r   r   rZ   rZ   r[   %test_expand_dims_mixed_int_and_coordss  s@    &	 
	z1TestDataset.test_expand_dims_mixed_int_and_coordsc                 C  s*  t dtjdfddgtjddfdtdddtdddtdddd	d
did}|jdddgd}t tj|d jt	ddg t
dddgtddddddgdtj|d jt	dddg t
dddgtdddtdddddddgdddtdddid
did}t|| d S )Nr   r9   r   r   r   r   r8   r   r  r  r  r  r  ro  r  r  r   )r  r   r  rI   r   )r  r   r   r  )r   r]   r^   rZ  r  re  re   r
   rk   r   r  r%   )r   r'  Z	other_wayZother_way_expectedrZ   rZ   r[   $test_expand_dims_kwargs_python36plus  s:    &	z0TestDataset.test_expand_dims_kwargs_python36plusc              	     s   t  }|d    fdd jD }dd |D }ti |d}|j jd}t|| t  }|d |d	 d
}ti |d}|jdd}t|| tdddddgfid}tddddgid}t|j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 )Nr   c                   s   g | ]}  |qS rZ   get_level_valuesrY   r  r   rZ   r[   r7    s     z.TestDataset.test_set_index.<locals>.<listcomp>c                 S  s   i | ]}|j d |fqS rw  r   r5  rZ   rZ   r[   r     s      z.TestDataset.test_set_index.<locals>.<dictcomp>rt   rw  r   r   )r   r   Zx_varr   r8   r7   rR   zbar variable\(s\) do not existr   r   rZ  zdimension mismatch.*r  )	r   rQ  r   r   r  r%   r   r   r~   )r   r   r=  rJ   rp   objrZ   r   r[   test_set_index  s&    

zTestDataset.test_set_indexc           
      C  s   ddddg}ddddg}ddddg}ddddg}t jj||gd	d
gd}t jj||gddgd}tj|d|fd|fdd}|jddgd}tj|d|fd|fdd}	t||	 d S )Nr   r   r8   r7   r  r  r9   r   r  r  r   r  fourr   )r   r  r  rt   rw  )r   r  r  )r`   r   r  re   r   r  r%   )
r   r  r  r  r  Z	mindex_12Z	mindex_34rp   r   r   rZ   rZ   r[   test_set_index_deindexed_coords  s    z+TestDataset.test_set_index_deindexed_coordsc              	     s   t  }|d    fdd jD }dd |D }ti |d}|d}t||dd t|jd	ksjttd
ddddgfid}t	j
tdd |d
 W 5 Q R X d S )Nr   c                   s   g | ]}  |qS rZ   r  r  r   rZ   r[   r7    s     z0TestDataset.test_reset_index.<locals>.<listcomp>c                 S  s   i | ]}|j d |fqS rw  r   r5  rZ   rZ   r[   r     s      z0TestDataset.test_reset_index.<locals>.<dictcomp>rt   Fr  r   r   r8   r7   r9   z.*not coordinates with an indexr   )r   rQ  r   r   reset_indexr%   r   r<  rl   r   r   r~   )r   rp   r=  rJ   r   r  rZ   r   r[   test_reset_index  s    
zTestDataset.test_reset_indexc                 C  sZ   t ddgdgddid}ti d|i}|d}|jj|jjksDtt|jdksVtd S )Nr8   r7   coord_1r   T)rK   r   r   )r
   r   r  r  r   rl   r   r<  )r   r  rp   r  rZ   rZ   r[   test_reset_index_keep_attrs  s
    
z'TestDataset.test_reset_index_keep_attrsc                 C  s6   t dddgid}|jddd}t|jdks2td S )Nr   r8   r7   rt   Tr^  r   )r   r  r   rK   rl   )r   rp   resetrZ   rZ   r[   test_reset_index_drop_dims  s    z&TestDataset.test_reset_index_drop_dimsz"arg,drop,dropped,converted,renamedr   r   r   c                 C  s   t jjddgddggdd}tjd|id}|j||d	}|D ]}	|	|jks>tq>|D ]}	t||	 j	||	 j	
  qV| D ]\}
}t||
 j	|| j	 q~d S )
Nr   r   r8   r7   r  r   r   rt   r^  )r`   r   r   re   r   r  rj   rl   r%   rR  r  r   )r   r  r_  ZdroppedZ	convertedr  r  rp   r  r   Zold_namenew_namerZ   rZ   r[   test_reset_index_drop_convert  s    z)TestDataset.test_reset_index_drop_convertc              	   C  s   t  }|d  }|ddg}ti d|id}d|d jd< d|d jd< |jddgd}t|| ti ddd	gid}tjtd
d |jddgd W 5 Q R X d S )Nr   r   r   rt   r   r   rw  r8   r7   zhas no MultiIndexr   )	r   rQ  Zreorder_levelsr   r   r%   r   r   r~   )r   rp   r   r  r   Z	reindexedrZ   rZ   r[   test_reorder_levels&  s    
zTestDataset.test_reorder_levelsc              	   C  sT  t dddddgfdddddgfdd	}|d
}|jd
djd
d}t||dd |d
dg}|jd
dgd}t|| G dd d}tjtdd |d
| W 5 Q R X tjtdd |dt	 W 5 Q R X dddddgf|d< tjtdd |dt	 W 5 Q R X t ddddddgfid	}tjtdd |dt	 W 5 Q R X d S )Nr   r   r   r   r8   r7   r9   r  rt   r   rw  Fr  r   c                   @  s   e Zd ZdS )z/TestDataset.test_set_xindex.<locals>.NotAnIndexNr
  rZ   rZ   rZ   r[   
NotAnIndexD  s   r  z .*not a subclass of xarray.Indexr   zthose variables don't existZnot_a_coordinater   Zdata_varz"those variables are data variablesz'those coordinates already have an index)
r   
set_xindexr  r  r%   r   r   r   r~   r   )r   rp   r   r   Zactual_mindexZexpected_mindexr  r  rZ   rZ   r[   test_set_xindex7  s(     

zTestDataset.test_set_xindexc                 C  sV   t ddddddgfid}G dd dt}|jd|dd	}t|jd d
dksRtd S )Nr   r   r   r   rt   c                   @  s    e Zd Zdd Zedd ZdS )z=TestDataset.test_set_xindex_options.<locals>.IndexWithOptionsc                 S  s
   || _ d S rT   opt)r   r  rZ   rZ   r[   r   [  s    zFTestDataset.test_set_xindex_options.<locals>.IndexWithOptions.__init__c                 S  s   | |d S )Nr  rZ   )clsrj   optionsrZ   rZ   r[   from_variables^  s    zLTestDataset.test_set_xindex_options.<locals>.IndexWithOptions.from_variablesN)r   r   r   r   classmethodr  rZ   rZ   rZ   r[   IndexWithOptionsZ  s   r  r8   r  r  )r   r   r  getattrr<  rl   )r   rp   r  ZindexedrZ   rZ   r[   test_set_xindex_optionsW  s    z#TestDataset.test_set_xindex_optionsc                 C  s  t ddddgddggfidddgfddgdd	}tjjddgddggdd
gd}t ddddddgfid|id	}d|d jd< d|d jd< |jdd
gd}t|| t|jddd
gkst	|jdgd}t|| |jdd}t|| |jdd
gd}t|| tjjddgddggd
dgd}t ddddddgfid|id	}d|d jd< |jd
dgd}t|| t|jdd
dgkst	d S )Nr   r   r   r8   r7   r9   r   r   r  r   r   r   r   r   r  .).)
r   r`   r   r   r   r|  r%   r)  r<  rl   r   rp   	exp_indexr   r   rZ   rZ   r[   
test_stacke  s:     



 
zTestDataset.test_stackzcreate_index,expected_keysr   r   Nc                 C  sZ   t ddddgddggfidddgfddgdd	}|jdd
g|d}t|j|ksVtd S )Nr   r   r   r8   r7   r9   r   r   r  r   r   create_index)r   r|  r)  r<  rl   )r   r  Zexpected_keysrp   r   rZ   rZ   r[   test_stack_create_index  s    	z#TestDataset.test_stack_create_indexc                 C  s"  t jjddgddggdd}tjddddgdd	gd
dgddggfi|ddgdd}tdddddd	d
dddgfidt|jdfdt|ddfdt|ddfdddddgd fdd}|j	ddgdd}t
|| t|jdksttjtdd |j	ddgdd W 5 Q R X d S )Nr   r   r   r8   )lvl1lvl2r   r   r7   r9   r   r   r   r   r  r   r  r  )r   r  r  r   r   r   Fr  z"cannot create.*wraps a multi-indexr   T)r`   r   r   re   r   r]   repeatrk   r  r|  r%   r   r<  rl   r   r   r~   )r   r  rp   r   r   rZ   rZ   r[   test_stack_multi_index  s$    "	
z"TestDataset.test_stack_multi_indexc                 C  s   t ddddgddggfidddgfddgdd	jd
d}tjjddgddggd
dgd}t ddddddgfid|id	}|jddgd}t|| t|jdd
dgkst	d S )Nr   r   r   r8   r7   r9   r   r   r  Zxxrw  r   r   r   r  )
r   r  r`   r   r   r|  r%   r)  r<  rl   r  rZ   rZ   r[   test_stack_non_dim_coords  s     
z%TestDataset.test_stack_non_dim_coordsc                 C  s   t jjddgddggddgd}tddddd	d
gfid|id}tdddgd	d
ggfddgddgd}d|d jd< d|d jd< ddgd fD ]}||}t|| qd S )Nr   r8   r   r   r   r   r   r   r7   r9   r  r   )r   r   r   r   r   )r`   r   r   r   r   r  r%   )r   r  rp   r   r"  r   rZ   rZ   r[   test_unstack  s      "
zTestDataset.test_unstackc              	   C  s^   t ddddgi}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   r8   r7   r9   zdoes not contain the dimensionsr   r   z%.*do not have exactly one multi-index)r   r   r   r~   r  r@  rZ   rZ   r[   test_unstack_errors  s
    zTestDataset.test_unstack_errorsc                 C  s"  t jdtdfdtddfddddgd dd	gd d
gd  fdd}|jddddgdjddgd}|jddd}|ddt	}|d j
t	kstt|| |d jddd}|d ddt	}t|| |jddddd}|ddddt	}t|| d S )Nrw  r   r9   r  )r  Z	other_varr   r8   r7   r   r   r   rt   r   r   r   r  r  rV  rN  r  )re   r   r]   r   r  r  r  r  rg   intr?   rl   r$   )r   rp   r  r  r  r  r  r  rZ   rZ   r[   test_unstack_fill_value  s    & 

z#TestDataset.test_unstack_fill_valuec           
   	   C  s  t jddtdfidddgd ddgd d	gd  fd
d}|jddddgdjddgd}|jddd}|d}t|d jt	st
|d j |d jst
|d jjdk st
|d jddd}|d d}t|jt	st
|j |jst
|jjdk st
tjjtdtdgdd	gd}tddtdfi|tdtddd}|jddd}t|d jt	st
t jddttdddfitdtdtdtddd}	|d j |d _t|	| d S )Nr  rw  r   r   r8   r7   r   r9   r   r   rt   r   r   r   r  r  Tr4   rx  r   )r   r   r   )r9   r   r   r   )r4   r8  )r   r   r   r   )r   r   r9   r9   )re   r   r]   r   r  r  r  r   rV   sparse_array_typerl   rR  Z	_to_denserD  Zdensityr`   r   r  r   Zbroadcast_toZeyetodenser$   )
r   rp   r  r  r  r  r   Zds_eyer  r  rZ   rZ   r[   test_unstack_sparse  sN    & 
 zTestDataset.test_unstack_sparsec                 C  s   t dddgfdddgddggfddgddgd	}|jdd
gdd}||sVt|dg jdd
gdd}||dg std S )Nr   r   r8   r   r7   r9   r   r   )r   r   r   r   r   r  r   )r   r|  r  r  rl   r~  r   rp   r   rZ   rZ   r[   test_stack_unstack_fast#  s    
z#TestDataset.test_stack_unstack_fastc                 C  s   t dddgfdddgddggfdddgdd	gdd
}|jddgd}|jtd d ddd}||spt|d	g jddgd}|jtd d ddd}||d	g std S )Nr   r   r8   r   r7   r9   r   r   r   r  r   r  rV  r   )r   r|  r  r  r  r  rl   r~  )r   rp   r}  r   rZ   rZ   r[   test_stack_unstack_slow2  s    
z#TestDataset.test_stack_unstack_slowc              	   C  sd   t jddddgdddggfdd	d
gfdddddgid}tt |jddgd W 5 Q R X d S )Nr   r   r8   r7   r9   r   r   r   r   r   r   r   r  r   wr  featuressample_dims)re   r   r   r   r~   to_stacked_arrayr   rZ   rZ   r[   )test_to_stacked_array_invalid_sample_dimsB  s    $z5TestDataset.test_to_stacked_array_invalid_sample_dimsc                 C  sF   d}t  \}}t||d}dg}|jd||d}|j|ksBtd S )NZadf9dr   r   r  r   )r   re   r   r  r   rl   )r   r   r   r   Dr
  r   rZ   rZ   r[   test_to_stacked_array_nameJ  s    
z&TestDataset.test_to_stacked_array_namec                 C  s`   t  \}}t||d}dg}|d|}|jd  jd j|jjksNt	|j
dks\t	d S )Nr   r   r  r8   )r   r  )r   re   r   r  r<  rg  levelsr?   r   rl   rK   )r   r   r   r  r
  r   rZ   rZ   r[    test_to_stacked_array_dtype_dimsU  s    
"z,TestDataset.test_to_stacked_array_dtype_dimsc                 C  s   t jtdddddgfgd}t ||d}|jddgd	}|d}t|| t \}}t ||d}dg}|d
|	dd
}	|	d
}
t||
 |	d d
}|j
dd}t|| d S )Nr9   r   r   r8   r7   rt   r   r   r	  r  rw  )re   r
   r]   r   r   r  to_unstacked_datasetr%   r   ru  r  )r   rT  rV   r}  Z	unstackedr   r   r  r
  r   r   x0Zd0rZ   rZ   r[   *test_to_stacked_array_to_unstacked_dataset^  s     




z6TestDataset.test_to_stacked_array_to_unstacked_datasetc                 C  sL   t  \}}dg}t||jddd}|d|}|d}t|| d S )Nr   r   r  r   r  )r   re   r   r  r  r  r%   )r   r   r   r
  r  r   r   rZ   rZ   r[   >test_to_stacked_array_to_unstacked_dataset_different_dimensionu  s    

zJTestDataset.test_to_stacked_array_to_unstacked_dataset_different_dimensionc                 C  s   t dd}| }tdtd}|}|d|i ||d< t|| | }|| t|| tddid}| }|| t|| d S )	Nr   r   r.  r  r2  newattrr   )r'   r   r   r]   r   rc  r%   r   )r   rV   r   r2  r   otherrZ   rZ   r[   test_update  s    




zTestDataset.test_updatec                 C  s
  t ddddgfiddi}|t ddid t ddddgfiddi}t|| t ddddgfiddi}|t d	d
iddid t dddgfd
dddi}t|| t ddddgfiddi}|d	td
ddidi t dddgfd
dddi}t|| d S )Nr   r   r8   r7   r   r9   r   rt   r  r   )r   r  )r   rc  r%   r
   r   rV   r   rZ   rZ   r[   test_update_overwrite_coords  s    

z(TestDataset.test_update_overwrite_coordsc              	   C  s6   t  }tjtdd |dtdi W 5 Q R X d S )Nrk  r   r   r   )r   r   r   r~   rc  r+  r   rZ   rZ   r[   test_update_multiindex_level  s     z(TestDataset.test_update_multiindex_levelc              	   C  s   t ddddgfidddgi}t dddgfdtjdgfddddgi}| }ddgfdgd	}tjtd
d || W 5 Q R X |t | t|| | }t ddgfdgd	}|| t dddgfdtjgd fddddgi}t|| d S )Nr   r#  r9   r   r   r8   r   r   )r   r#  r   r   r   r7   )	r   r]   r  r   r   r   r~   rc  r%   )r   rp   r  r  Zother1r  Zother2r  rZ   rZ   r[   test_update_auto_align  s&     


 
z"TestDataset.test_update_auto_alignc              	   C  s   t  }t|d tstt|d j|jd  tt	 |d  W 5 Q R X tt	 |ddg  W 5 Q R X |ddg }t
|d |d d}t|| |d }t|d j|d |d dddd}t|| |td	d
 }|jd	d
}t|| d S )Nr1  Znotfoundr2  r7  r4  r   )r   r4  r  r   r  )r'   r   r
   rl   r$   rR  rj   r   r   rE  r   r%   r  r  )r   rV   r  r  r  r  r  r  rZ   rZ   r[   test_getitem  s*    

zTestDataset.test_getitemc              	   C  s\   t  }|d d |d< |d d }d|_t||d  tjtdd |d  W 5 Q R X d S )Nr1  r8   r9  z('var1', 'var2')r   r7  )r'   r   r%   r   r   rE  r  rZ   rZ   r[   test_getitem_hashable  s    z!TestDataset.test_getitem_hashablec                 C  s,   ddg}t dd |D }t|||  d S )Nr   r8   c                 S  s   i | ]}|d t dfqS )Zdim0r8   )r+  )rY   r  rZ   rZ   r[   r     s      z;TestDataset.test_getitem_multiple_dtype.<locals>.<dictcomp>)r   r%   )r   r*  r   rZ   rZ   r[   test_getitem_multiple_dtype  s    z'TestDataset.test_getitem_multiple_dtypec                 C  sr   t ddtdfi}ttdddd}|d }t|| t|jtsHt|ddg }|jtdd}t|| d S )Nr   r   r   r  rw  )	r   r+  r
   r%   r   rR  r   rl   r  )r   r   r  r  r  r  rZ   rZ   r[   %test_virtual_variables_default_coords  s    
z1TestDataset.test_virtual_variables_default_coordsc                 C  s   t  }t|d j|jd  j t|d jd t|d d dtd  tt|d tdtd  t	i d	|d i}|dg }t
|| t	d
dtjdddfi}|d dk std S )Nz
time.monthrH   ztime.seasonDJFr  r8   r7   r   Z	dayofyearr#  r   r:   r9   r;   zt.year  )r'   r#   rk   rj   rQ  monthr]   r   sinr   r$   r`   ra   ri   rl   )r   rV   r   r   rp   rZ   rZ   r[   test_virtual_variables_time  s     $

z'TestDataset.test_virtual_variables_timec                 C  sH   t jdddd}td|i}|d }t|jd|fgdd}t|| d S )Nr:   Hr   )r   r<   rH   z	time.timer   )r`   ra   r   r
   rH   r%   )r   r  rV   r   r   rZ   rZ   r[   test_virtual_variable_same_name  s
    z+TestDataset.test_virtual_variable_same_namec                 C  sX   t dtjddddi}dgd dgd	  d
gd	  dgd	  dg }t||d  d S )Nr#  r:   r  Mr   r!  r7   ZMAMr9   ZJJAZSONzt.season)r   r`   ra   r#   )r   rp   ZseasrZ   rZ   r[   test_time_season  s    .zTestDataset.test_time_seasonc                 C  sN   t  }t|d d d jtdgdtd  t|d d jtg d d S )Nr  r   rH   r8   r   )r'   r$   rR  r   r]   r   r   rZ   rZ   r[   test_slice_virtual_variable  s     z'TestDataset.test_slice_virtual_variablec              	   C  s  t dgtjd}t }||d< | }||d< t|| d|d  }|j|d< ||d< t|| tj	t
dd |jdd|d	< W 5 Q R X |j|d	< d	|jf|d	< t|| d
|d< g d
f|d< t|| tj	t
dd ddddgf|d< W 5 Q R X tj	t
dd |d d d |d< W 5 Q R X d|d  |d< t|d d|d   tj	tdd t |d< W 5 Q R X |ddg }|jjd
d|d< | }d}tj	t|d d
|jd< W 5 Q R X d}tj	t
|d |ddi |ddi< W 5 Q R X d}tj	t
|d d|dd
i< W 5 Q R X d}tj	t
|d |ddi |ddi< W 5 Q R X d }tj	t|d |ddgi |ddi< W 5 Q R X d!}|d j|d< tj	t
|d" |dddgi |dddgi< W 5 Q R X |d j|d< d"}tj	t
|d$ |ddddgi |dddgi< W 5 Q R X d#}tj	t|d( |d dddgi j|dddgi< W 5 Q R X |t}|d |d$< d%}tj	t
|d d|ddi< W 5 Q R X d|dd
i< |ddi |ddi< d&|jdd'i< |jdd(i |jdd)i< | D ]\}	}
||	 }t|dd
i d t|ddi |
ddi  t|jdd'i d& t|jdd)i |
jdd(i  d&d(d*d+d,g}t|jd|i |
jd|i  qd S )-Nr.  r  r  r7   r   z without explicit dimension namesr   r   r  r   scalarr   r9   r   Znewvarzconflicting dimension sizesz'Cannot assign a Dataset to a single keyr  r1  r2  r  r3  zGcan only set locations defined by dictionaries from Dataset.loc. Got: ar   zQVariables \['A', 'B', 'scalar'\] in new values not available in original dataset:r/  r8   z2Variable 'var3': indexer {'dim2': 0} not availabler  z3Variable 'var1': indexer {'dim2': 10} not availabler   z7Variable 'var1': dimension 'dim2' appears in new valueszFVariable 'var2': dimension order differs between original and new dataz9cannot align objects.*not equal along these coordinates.*zBDataset assignment only accepts DataArrays, Datasets, and scalars.var4z&could not convert string to float: 'a'rx  r  r  ry        @g      @      @)r   r]   r^   rZ  r'   r   r%   rR  r   r   r~   rk   r   r$   r   re   r   r1  r  r  rE  rN  rg   r   r   r#   )r   r  r  r  dvZdata3Zdata4err_msgZdata5r   Zdat3Zdat4Z	unchangedrZ   rZ   r[   test_setitem  s    





 &(,
 zTestDataset.test_setitemc                 C  s<   |   }td|d< | }|d  |d< t|| d S )Nr9   r   r   )r  r]   r   r   r  r$   )r   rp   Zds_copyrZ   rZ   r[   test_setitem_pandass  s
    zTestDataset.test_setitem_pandasc                 C  sP  t  }dtdf|d< dtd |d< t dtdfdtd d}t|| ttddd|d< t ddtdfidtdi}t|| tddgdddgfgd	|d< t ddddtjgfidtdi}t|| d
|d< t d
tdd}t|| tddddgdddddgfgd	|d< t dddddgfidtdi}t|| d S )Nr   r9   r   r8   r   r  r7   r   rt   rH  r   r   r   r   )r   r+  r]   r   r%   r
   r  r   rp   r   rZ   rZ   r[   test_setitem_auto_align|  s"     

"

& z#TestDataset.test_setitem_auto_alignc                 C  s   t ddddgi}|d d d |d< tdddgi}t|| t ddddgi}tddg|d< t|| t ddddgi}ddg|jd< t|| d S )Nr   r   r8   r7   )re   r   r%   r]   rb   rJ   r3  rZ   rZ   r[   test_setitem_dimension_override  s    

z+TestDataset.test_setitem_dimension_overridec                 C  s  t  }ttddddtdfid}| }|d|d< | }||d< t|| d|jksft|d j	t
ddd}dtd	f|d< | }||d< d|jkst| }|d j	t
ddd|d< t|| |d j	t
ddd}dtd	f|d< dtd	f|d
< | }||d< d
|ks0td
|jks@t| }|d }d|d< ||d< |d d dksvttdddddgfidddgddddgfddddgfdd}|d d |d< t|d dddgstd S )Nr   r   r4  r  r3  r8   rV  r  r  positionr   r  r   r7   r9   )r   Zz1Zz2rt   r   r   )r'   r
   r]   r   r   r   r%   rJ   rl   r  r  r   r  )r   rp   r  r   r   rZ   rZ   r[   test_setitem_with_coords  sL      

$z$TestDataset.test_setitem_with_coordsc                 C  s   t dddddgfiddddgi}tdddgddddgfg|d< t ddddgfdtjddgfd	ddddgi}t|| d S )
Nr   r   r8   r7   r9   r   r   r   r  )r   r
   r]   r  r%   r3  rZ   rZ   r[   test_setitem_align_new_indexes  s    "  z*TestDataset.test_setitem_align_new_indexesc                 C  sT   t jdtjddg|did}t jtddgdgd|d< t|jj|sPtd S )Nr   r   r>   rt   r   r  r   )	re   r   r]   rb   r
   Z
issubdtyper   r?   rl   )r   r?   rp   rZ   rZ   r[   test_setitem_str_dtype  s    z"TestDataset.test_setitem_str_dtypec                 C  s   t dgtjd}t dgtjd}t }| }||d< ||d< ||g|ddg< t|| d|ddg  }dd |j D |dd	g< ||dd	g< t|| d S )
Nr.  r  r  r   r7   c                 S  s   g | ]
}|j qS rZ   )rR  rY   r  rZ   rZ   r[   r7    s     z7TestDataset.test_setitem_using_list.<locals>.<listcomp>r  r  )	r   r]   r^   rZ  r'   r   r%   rS   rk   )r   r1  r2  r   r   r/  rZ   rZ   r[   test_setitem_using_list  s    
z#TestDataset.test_setitem_using_listzvar_list, data, error_regexr  r   r.  r  zDifferent lengthszEmpty list of variableszassign single DataArrayc              	   C  s,   t  }tjt|d |||< W 5 Q R X d S )Nr   )r'   r   r   r~   )r   Zvar_listrV   Zerror_regexr   rZ   rZ   r[   test_setitem_using_list_errors  s    z*TestDataset.test_setitem_using_list_errorsc                 C  s   t  }|jdddgdd}t dddgdd}t|| t|jddgksNtt|t   |jdd d	}t dddd
gfdddgd}t|| |jdd}t ddddd
gfiddddgd}t|| d S )Nr   r8   r7   r   r   r   c                 S  s
   | j d S Nr7   rw  r  rZ   rZ   r[   r4    r5  z)TestDataset.test_assign.<locals>.<lambda>r  r   r$  r  )r   r   )r   r:  r%   r)  rj   rl   r  r=  rZ   rZ   r[   test_assign  s    

$zTestDataset.test_assignc                 C  s   t  }|jdddgdd}|jtdd}t tddd}t|| |jdddgddgd}|dd	d
gi}|jdddgd	d
gd}t|| d S )Nr   r8   r7   r   rw   rw  r9   r   ry  r-  )r   r:  r  r)  r%   r=  rZ   rZ   r[   test_assign_coords  s    
zTestDataset.test_assign_coordsc                 C  sz   t tdddd}t  }|jddd}t|| |ji ks>td|jd< |ddi}t|| |jtdddksvtd S )Nr8   r7   r   r   r9   r  )r   r  Zassign_attrsr%   r   rl   )r   r   r  r   Z
new_actualrZ   rZ   r[   test_assign_attrs"  s    


zTestDataset.test_assign_attrsc              	   C  sD   t  }tjtdd& |jtdd |jtdd W 5 Q R X d S )Nrk  r   r   )r   )r   r   r   r~   r:  r+  r  r   rZ   rZ   r[   test_assign_multiindex_level.  s     z(TestDataset.test_assign_multiindex_levelc              	   C  s   t  }tjtdd |jtdd W 5 Q R X tjtdd |jtdd W 5 Q R X |jtdd}t|jdks|t	d S )Nz Updating MultiIndexed coordinater   r   rw  r8   )
r   r   r  r  r  r+  r:  r   rJ   rl   )r   rV   updatedrZ   rZ   r[   &test_assign_coords_existing_multiindex6  s    z2TestDataset.test_assign_coords_existing_multiindexc                 C  sR   t  }|jtdtdtdd}|jd |jd   k	rH|jd k	sNn td S )Nr   )r   r   r   r   r   r   )r   r:  r+  r<  rl   )r   rV   r   rZ   rZ   r[   !test_assign_all_multiindex_coordsB  s    z-TestDataset.test_assign_all_multiindex_coordsc                 C  s\   G dd dt }tddddgiddd|}|jdd	d
gd}t|jd |sXtd S )Nc                   @  s   e Zd ZdS )zLTestDataset.test_assign_coords_custom_index_side_effect.<locals>.CustomIndexNr
  rZ   rZ   rZ   r[   CustomIndexO  s   rE  r   r8   r7   r9   rt   r   r   r   r  )r   r   r  r  r  r   r<  rl   )r   rE  rp   r   rZ   rZ   r[   +test_assign_coords_custom_index_side_effectL  s     z7TestDataset.test_assign_coords_custom_index_side_effectc              	   C  s   t  }tddddgfi}tjtdd || W 5 Q R X tddtdfi}tjtdd || W 5 Q R X tddtdfid	}t||| d S )
Nr   r   r   r8   z.*conflicting dimension sizes.*r   r   z)unable to determine.*coordinates or not.*rt   )r   r   r   r   r~   r  r+  r%   )r   rV   r  rZ   rZ   r[   test_merge_multiindex_levelZ  s     z'TestDataset.test_merge_multiindex_levelc                 C  s   t ddtdfiddddddgid}t ddtdfidtdi}| }ttd|d< t|| | }dttdf|d< t|| | }ttd|jd< t|| d S )NrV   r   r   r   r8   r7   rt   )r   r]   r   r+  r   r)  r%   rJ   r  rZ   rZ   r[   &test_setitem_original_non_unique_indexk  s    ( 

z2TestDataset.test_setitem_original_non_unique_indexc                 C  sn   dddg}t jddd}t|dddg|td	td	gd
}t||d}|d }||d< t|| d S )NZjoaquinZmanolor      )r9   r   r   r   rowcolumnr   r  )firstsecondrL  rM  )	r]   r^   randintr
   r+  r   r  rp  r%   )r   r   rk   rb   r   r   rZ   rZ   r[   "test_setitem_both_non_unique_index|  s    
  z.TestDataset.test_setitem_both_non_unique_indexc              	   C  s0   t  }tjtdd td|d< W 5 Q R X d S rj  )r   r   r   r~   r+  r   rZ   rZ   r[   test_setitem_multiindex_level  s     z)TestDataset.test_setitem_multiindex_levelc                 C  s   t  }t|j}t|j|ks"t|d= t|j|dh ks@t|d= t|j|ddh ks`td|jksntt }tddddgfi}|d= t|| d S )Nr1  r4  r   r   r8   r7   )r'   r   rj   rl   rJ   r   r%   )r   rV   Z	all_itemsr   r   rZ   rZ   r[   test_delitem  s    
zTestDataset.test_delitemc              	   C  s*   t  }tjtdd |d= W 5 Q R X d S )Nz)cannot remove coordinate.*corrupt.*index r   r   )r   r   r   r~   r   rZ   rZ   r[   test_delitem_multiindex_level  s     z)TestDataset.test_delitem_multiindex_levelc              	     s   t ddddgdgdgggfi}g dggddggg}|D ]H  fddt fd	d
|j D }||j}t||j   q8tjt	dd |d W 5 Q R X d S )Nr   r   r   r   r8   r7   c                   s     rt  d t | j@ gS g S )Nr   )r   rK   r   )r   rZ   r[   get_args  s    z*TestDataset.test_squeeze.<locals>.get_argsc                   s    i | ]\}}||j  | qS rZ   )r  r   )rS  rZ   r[   r     s      z,TestDataset.test_squeeze.<locals>.<dictcomp>zcannot select a dimensionr   )
r   rj   r   rd  rJ   r%   r  r   r   r~   )r   rV   Z	test_argsr   rZ   )r   rS  r[   test_squeeze  s     zTestDataset.test_squeezec                 C  s  t dddgfiddgi}t ddi}|jdd}t|| t ddiddi}|jdd}t|| t dddggfidgdgd}t ddi}|jdd}t|| t dddgfiddgi}|jd	dd
}t|| t ddg fidg i}|jdd}t|| d S )Nr   r   r8   r   Tr^  Fr   r   )r"  r_  rw  )r   r  r%   r  rZ   rZ   r[   test_squeeze_drop  s"    

 

zTestDataset.test_squeeze_dropc                 C  s   t dddddgfdddidd	id
}dddgdddgg}dddgd}d}t||||jd}| }t|| |jddd}|ddid}t|| d S )Nr8   r   r7   r9   r   r  rH  ZConventionsr   r  r   r   )r  rR  )rR  r   r   rw   r   r   rR  )r   r
   r   Zto_arrayr%   r  )r   rp   rV   rJ   rK   r   r   rZ   rZ   r[   test_to_array  s    
zTestDataset.test_to_arrayc              	   C  s  t jd}t jd}td}td|fd|fd|fd}tjt ||gjddgtj	|ddd}|
 }||st||f|d
 }||st||ft|t| t jd	d
}tdd|fi}dtdf|d< tjjddddddgddddddggddgd}tj|ddg|d}|
 }||sFtt|jddgdt| ddg}	|j
|	d}||stddg}	tjjddddddgddddddggddgd}tj| ddg|d}|j
|	d}||stdg}
tjtdd |j
|
d W 5 Q R X ddg}
tjtdd |j
|
d W 5 Q R X tdg}t|}tdddgfiddgi}t|| t }t|}tdg id}t|| tdg i}t|}tdtg ddidg i}t|| tt	dgdt dgd fd!jdd}|
 jd d ddgf }tjddggtj	dgddddgd"}||stt||ftt dgd t dgd d}|
 }tjjdgdggddgd}tjg g|d}||st||fd S )#Nr   r"  r#  r$  r   r   r   )columnsr  r7   r9   r  r   r   rw   r   r8   r  r   r   rV  rw  )Z	dim_orderz,does not match the set of dimensions of thisr   r   r  rt   r  r  r  r   r>  )r   r   )r  rW  )r]   r^   rZ  r)  r   r`   r  rb   rN  r   r&  rD  rl   rd  r%   from_dataframer   r  r   r  ru  r   r   r~   r
   r  r  )r   r   r   r#  rp   r   r   r  r  	new_orderZinvalid_orderr=   r6  rZ   rZ   r[   test_to_and_from_dataframe  s            





$  "z&TestDataset.test_to_and_from_dataframec                 C  s   t jddddddgd}t jdddg|d}t jdddg|d}t ||d	d
dgd}|d }t|d dkszt|ddg }t|d d
kstt|d d
kstd S )Nr   r   r|  rM  r  r  r  r>   r8   r7   r9   r  r  r  )r`   r  r  r  r  r  r   rl   )r   r  r  r  r=   rp   rZ   rZ   r[   test_from_dataframe_categorical>  s    z+TestDataset.test_from_dataframe_categoricalc              	   C  s  dd l }ttdtdtdddd}tj|	ddd}tj|	dd	d}t
|d
 j|jsjtt
|d j|jst|d
 j |d
 _|d j |d _t|| tj|	dd
gdd}tj|	dd
gd	d}t
|d j|jst|d j |d _t|| d S )Nr   r   r"  r   rz  r   Tr   Fr   r   )r4   r`   r  r+  r)  r]   r   r   rX  r  r   rV   COOrl   r  r%   )r   r4   Zdf_baseZ	ds_sparseZds_denserZ   rZ   r[   test_from_dataframe_sparseM  s     
z&TestDataset.test_from_dataframe_sparsec                 C  sV   t dg i}t|}t|d dks,t| }t|dksDt||sRtd S )Nr   r   )r`   r  r   rX  r   rl   r&  rD  r   r   rp   r   rZ   rZ   r[    test_to_and_from_empty_dataframec  s    
z,TestDataset.test_to_and_from_empty_dataframec           	   	   C  sT  t jjddgdddggddgd}t jd	td
i|d}td	ddddgdddggfiddgdddgdd}t|}t|| |j	ddddddgd d f }t|}t|| |j	d dd d f }td	ddddgdtj
tj
ggfiddgdddgdd}t|}t|| |j	ddgd d f }tjtdd t| W 5 Q R X d S )Nr   r   r8   r7   r9   r   r   r   r   r   r  r   r   r   r   rt   znon-unique MultiIndexr   )r`   r   r   r  r]   r   r   rX  r%   Zilocr  r   r   r~   )	r   r  r=   r   r   Zdf2Zdf3r  Zdf_nonuniquerZ   rZ   r[   test_from_dataframe_multiindexl  s*    "





z*TestDataset.test_from_dataframe_multiindexc                 C  s   t jddgdggddgddggddgd}t jdd	gdd
gd|d}tddgd	ggfddgd
ggfdddgdgdd}t|}t|| d S )Nr   r   r   r   r8   lev1lev2)r  codesr   r7   r9   )Zc1c2r  )ra  rb  rt   )r`   r   r  r   rX  r%   )r   r  r=   r   r   rZ   rZ   r[   #test_from_dataframe_unsorted_levels  s      
z/TestDataset.test_from_dataframe_unsorted_levelsc              	   C  sB   t td}ddg|_tjtdd t	| W 5 Q R X d S )Nr  r   znon-unique columnsr   )
r`   r  r]   r&  rW  r   r   r~   r   rX  )r   r=   rZ   rZ   r[   &test_from_dataframe_non_unique_columns  s    
z2TestDataset.test_from_dataframe_non_unique_columnsc                 C  s   t tdttddtdddtjddd	d
dddgt tdt jdddt jddddd}t j	j
dgtdgddgd|_t| }|tj}||std S )Nrw   r8   r   r9   r   u1r.  g      @r   r>   TF20130101r;   z
US/Eastern)r<   tz)r   r   r  r  r  fghr   r  r  r   )r`   r  r)  r+  r]   r   rg   ZCategoricalra   r   r   r  r   rX  r&  applyrB  rD  rl   )r   r=   r  r   rZ   rZ   r[   5test_convert_dataframe_with_many_types_and_multiindex  s     zATestDataset.test_convert_dataframe_with_many_types_and_multiindexc              	   C  s  t jd}t jd}td}td|fd|fd|fd}dd|i dii ddid| i dd| i ddd}| }||kstt|t	| |
 }|d	 d d
= |d d d
= |d d d
= tjdkrdnd}|d	 d |dd |d d ddd |d d ddd |jdd}	||	ksBt|d}
t	|
 }t|
| dd|didd|dd|ddd}t|t	| d|d|ddd|dd}t|t	| d
|i|ddd|dd}tjtdd t	| W 5 Q R X d S )Nr   r"  r#  r$  )r#  )rK   rV   r   r   )rJ   r   rK   rS   rJ   rV   rS   r   r   r   z<U1z>U1rP  )r?   r   r   Fr2  rK   rV   )rJ   rK   rS   )rV   rK   )r   r#  r   z*cannot convert dict without the key 'dims'r   )r]   r^   rZ  r)  r   tolistto_dictrl   r%   	from_dictr   r   r   rc  rd  r   r   r~   )r   r   r   r#  rp   r   r   Zexpected_no_dataZ
endiantypeZactual_no_datar  r  r  rZ   rZ   r[   test_to_and_from_dict  s\    


 z!TestDataset.test_to_and_from_dictc                 C  sz   t jdd}t jdd}tjddd}dddg}tdd	g|fdd	g|fd|fd	|fd
}t| }t|| d S )Nr   r9   rh  r;   lS@T@L   r#  rF   r   r   r#  rF   )	r]   r^   rZ  r`   ra   r   rr  rq  r%   r   r   r   r#  rF   rp   r  rZ   rZ   r[   #test_to_and_from_dict_with_time_dim  s    


z/TestDataset.test_to_and_from_dict_with_time_dimc                 C  s   t jdd}t jdd}t j|d< ttjddd}t j|d< dddg}td	d
g|fd	d
g|fd	|fd
|fd}t|	 }t
|| d S )Nr   r9   r7   rh  r;   rt  ru  rv  r#  rF   rw  )r]   r^   rZ  r  r`   r  ra   r   rr  rq  r%   rx  rZ   rZ   r[   "test_to_and_from_dict_with_nan_nat  s    




z.TestDataset.test_to_and_from_dict_with_nan_natc                 C  s   t jd}t jd}td}t dt dddgdd}td	||fd	||fd	|fd
}|d  |d  dd}|	 }||d d d kst
d S )Nr   r"  i  %   gfffff[r   r   )createdrJ   
maintainerr#  r$  r|  rJ   rS   r   r   )r]   r^   rZ  r)  r   rb   r   itemrp  rq  rl   )r   r   r   r#  r   rp   Zexpected_attrsr   rZ   rZ   r[   test_to_dict_with_numpy_attrs$  s     

z)TestDataset.test_to_dict_with_numpy_attrsc                 C  s4   t  }tt|}t|| |j|jks0td S rT   )r'   pickleloadsdumpsr%   rK   rl   )r   rV   r  rZ   rZ   r[   test_pickle9  s    
zTestDataset.test_picklec              
   C  s   t  }t | dD ]x}t||d}tt |  W 5 Q R X tt |d j W 5 Q R X |j	dd |j	t
ddgdj	ddd	 qd S )
N)TF)	decode_cfr1  r   r  r   r  rV  r  )r   r'   r  r   r   r   r!   r  rk   r  r  )r   r   r  rp   rZ   rZ   r[   test_lazy_load@  s    zTestDataset.test_lazy_loadc              	   C  s  t jdd}t j|d d ddf< t jd}t j|d< td|fd|fd}|jtdd dd	}|d
}t|| |jtddd}|d}t|| |jdddgd}t|| |jtdd d}|jddgd}t|| |jtdd}|jddgd}t|| |jd
g d}t|| |jd
dgd}t|| |jd
dd}t|| |jdddgd}|jdddgd}t|| |jdddgd}t|| |jddd}t|| |jddd}|jdddgd}t|| |jd
dd}|jddgd	}t|| t	j
tdd |d W 5 Q R X t	j
tdd |jd
dd W 5 Q R X t	j
tdd |jd
d d W 5 Q R X d S )Nr   r7   r   rV  r   r   r  r8   r  r   r9   r  r   r   )subsetri   )how)r  r  )threshr  )r  za single dataset dimensionr   zinvalid howZsomehowzmust specify how or thresh)r]   r^   rZ  r  r   r  r  Zdropnar%   r   r   r~   r   )r   r   r   rp   r   r   rZ   rZ   r[   test_dropnaO  sX    















zTestDataset.test_dropnac              	   C  s  t ddtjdtjdgfidddddgi}|d}t ddddddgfidddddgi}t|| |ddi}t|| t ddi}||}t|| |d|ji}t|| ttddtdfgd	}||}	|d	 }t||	 ||}
t||
 |td}t|| ||d d }t|| tj|d
< |ddi}t dddddgftjddddddgi}t|| t
jtdd |ddi W 5 Q R X |i }t|| |t ddid	}|jdd}t|| ttddddid}|d}|jdkst|j|jks.tt d|iddid}|ddi}|j|jksbt|jjdkstt|jj|jjkstd S )Nr   r   r8   r9   r   r7   rV  r   rt   r   r   zmust be containedr   r  rH  r  r   r  rL   r   r   rp   r   )r   r]   r  r  r%   r   r
   r+  r  rp  r   r   r~   r  r   rl   r   )r   rp   r  r   r  r  r  actual4r   actual5actual6actual7actual8actual9Zresult1Zresult2rL   Zactual10Zactual11rZ   rZ   r[   test_fillna  sX    *
&











 




zTestDataset.test_fillnafuncc                 C  s   |  ddS )Nr   r8   )cliprw  rZ   rZ   r[   r4    r5  zTestDataset.<lambda>c                 C  s   t d|  S )Nrx  )r]   r   rw  rZ   rZ   r[   r4    r5  c              	   C  s  t tddddid}td|iddid}||j|jks>ttdd	2 ||j|jks^t||jj|jjksvtW 5 Q R X tdd	2 ||j|jkst||jj|jjkstW 5 Q R X td
d	2 ||j|jkst||jj|jjkstW 5 Q R X d S )Nr   r   r  rL   r  rp   r   F
keep_attrsT)r
   r+  r   r   rl   r   r   )r   r  rL   rp   rZ   rZ   r[   test_propagate_attrs  s    ""z TestDataset.test_propagate_attrsc                 C  s  t ddtdfi}t ddtjtjdddgfi}||dk}t|| ||jdk}t|| ||jjdk}t|| |d}t|| |jdd	}t	tjgd |d _|d
}t|| t ddddgddggfi}t ddtjdgddggfi}	||dk}
t|	|
 t
tddddid}||jdk}|jdksTt|j|jksftt d|iddid}||dk}|j|jkst|jjdkst|jj|jjkstt ddtdfi}t ddtjtjdddgfi}|dd }t|| d S )Nr   r   r   r7   r9   r   r8   Tr\  Fr   r   r  rL   r  rp   r   c                 S  s   | dkS Nr8   rZ   rw  rZ   rZ   r[   r4  
  r5  z(TestDataset.test_where.<locals>.<lambda>)r   r+  r]   r  wherer%   r   rk   r   rb   r
   r   rl   r   )r   rp   r  r  r  r  r  	expected5r  	expected6r  rL   r  r  	expected9r  rZ   rZ   r[   
test_where  s>    







zTestDataset.test_wherec              	   C  sD  t ddtdfidtdi}t dddddddgfidtdi}||dkd}t|| |jjtkslt|d	d
 d}t|| |j|dkddd}||dkd}tj	||dd\}}t|| |jjtkstt
jtdd" ||dk|jtdd W 5 Q R X t
jtdd ||dk|jdd W 5 Q R X d S )Nr   r   r   rV  r7   r9   r   r8   c                 S  s   | dkS r  rZ   rw  rZ   rZ   r[   r4    r5  z.TestDataset.test_where_other.<locals>.<lambda>T)r  r_  rX  rW  zcannot align .* are not equalr   rw  zexact match requiredr  )r   r+  r  r$   r   r?   r  rl   re   r   r   r   r~   r  r  r:  )r   rp   r   r   Zexpected_nodropr~  rZ   rZ   r[   test_where_other  s     $


&zTestDataset.test_where_otherc              	   C  s  t tdtdgdgd}t tddd  tddd  gdgd}|j|dkdd}t|| td|i}td|i}|j|dkdd}t|| |j|jdkdd}t|| tjtd	d
 |jt	
ddkdd W 5 Q R X t t	dddddgt	dddddggdgd}t t	dddgt	dddggdgd}|j|dkdd}	t||	 tdddddgfdddddgfd}tdt	jdddgfddddt	jgfd}
|j|dk|dk @ dd}t|
| tddddgddggfi}tddt	jdgddggfi}|j|dkdd}t|| tddddgddggfiddgddgddgt	jt	jgt	jt	j t	jd ggfdd}tdddggfidgdgddgt	jd ggfdd}|j|dkdd}t|| tdddgddggfdddgddggfd}tdt	jdgddggfdddgddggfd}|j|dkdd}t|| tddddgfddddgfdt	
ddfd}tdt	jdgfdt	jddgfdt	
dddfd}|j|dkdd}|jd dkstt|| d S )Nr   r   rI   r7   r8   Tr^  r   z	must be ar   r   r  r9   r   r  r   r   r   r   r   rz  rt   )r9   r9   r  r-  g      "@r%  )r
   r+  r  r%   r   r   r   r   r   r]   r   rb   r  r  r  re   r   r;  rl   )r   rb   r  r  rp   r  r  r  Z	expected4r  r  r  r  r  Z	expected7r  Z	expected8r  r  r  rZ   rZ   r[   test_where_drop#  s    *


"    
&$

( 
(
zTestDataset.test_where_dropc                 C  sb   t tjddddgd}t tjddddd}|j|d	d
}t tdddgd}t|| d S )Nr   r   ZnCellsZnVertLevelsr  )r   rd   r>   Tr^  )r   r   )r
   r]   r^   rf   r&  r  r%   )r   rb   maskr   r   rZ   rZ   r[   test_where_drop_empty  s
    z!TestDataset.test_where_drop_emptyc                 C  sF   t ddddgfi}t dddgfi}|j|dkdd}t|| d S )Nr   r   r  rx  r8   Tr^  )r   r  r%   rz  rZ   rZ   r[   test_where_drop_no_indexes  s    z&TestDataset.test_where_drop_no_indexesc              	   C  s   t  }t| jdkst| }tdd |j D }t	|| t	|j
dgd|j
dd ddddgfddgddgfd	ddgfd
ddddgffD ]&\}}t|j
|dj}||kstqt	|jg d| tt |jdd W 5 Q R X d S )Nr   c                 S  s   i | ]\}}||  qS rZ   r   r   rZ   rZ   r[   r     s      z+TestDataset.test_reduce.<locals>.<dictcomp>r.  r  r/  r   rH   )r/  rH   rZ   axis)r'   r   r   rJ   rl   r   r   rS   r   r$   minr)  rK   r   r   r~   )r   rV   r   r   reductexpected_dimsZactual_dimsrZ   rZ   r[   test_reduce  s     

zTestDataset.test_reducec                 C  sj   t jdddddgfiddid}t jddiddid}|d}t|| |d d }t|| d S )	Nr   r   r8   r7   r9   r   r   rt   )re   r   r   r%   rp  r  rZ   rZ   r[   test_reduce_coords  s     

zTestDataset.test_reduce_coordsc              	   C  s~   t dtddddfdtddtjgfd	}|jd
dd}t |d d
|d jd
ddd	}t	|| d S )Nr   r   r9   r7   Zuintrw  r   r   r   r   T)skipnar   r   )
re   r   r]   r   r   rg   rb   r  r   r%   re  rZ   rZ   r[   test_mean_uint_dtype  s     z TestDataset.test_mean_uint_dtypec              	   C  s0   t  }tjtdd |jdd W 5 Q R X d S NzDataset does not containr   Zbad_dimr  )r'   r   r   r~   r   r   rZ   rZ   r[   test_reduce_bad_dim  s    zTestDataset.test_reduce_bad_dimc                 C  s~   t ddddgfdtjdgddggfd}t|d|d	 t ddddgfdddgdd
ggfd}t||  d S )Nr8   r   r7   r   r9   r   r   r  r   r   )re   r   r]   r  r%   r  cumsumr  rZ   rZ   r[   test_reduce_cumsum  s    $"zTestDataset.test_reduce_cumsumzreduct, expectedr/  r   rH   r  Zcumprodc              	   C  sV   t  }tjtdd t||dd W 5 Q R X t|||dj}t||ksRtd S r  )r'   r   r   r~   r  rK   r)  rl   )r   r  r   r  rV   r   rZ   rZ   r[   test_reduce_cumsum_test_dims  s
    z(TestDataset.test_reduce_cumsum_test_dimsc                   s   t dd t dd}ddgdgd}t| D ]J\}}t fdd|D }tjjdd	|d
tj}||ddif |< q0d 	 krd 	 kst
t 	 |	  t j	dd|j	dd d j	ddkrd j	ddkst
d S )N,   r   r.  r/  )r,  var5c                 3  s   | ]} j | V  qd S rT   r  r:  r  rZ   r[   r\     s     z6TestDataset.test_reduce_non_numeric.<locals>.<genexpr>r   r   r  r   rR  r,  r  r  )r'   sortedr   r  r]   r^   rN  rg   Zstr_r   rl   r$   )r   r  Zadd_varsr   rK   r  rV   rZ   r  r[   test_reduce_non_numeric  s    

z#TestDataset.test_reduce_non_numericz9ignore:Once the behaviour of DataArray:DeprecationWarningc                 C  sN  t ddi}t ddddgfi}ddg|jd< | }t|| t ddi}| }t|| t ddi}| }t|| t ddi}| }t|| t ddi}| }t|| t ddi}| }t|| t dd	i}t ddt	
ddgd
fi}| }t|| t ddi}t ddt	
ddgdfi}| }t|| d S )Nr   r   r   r   rY  r   r   r8      aZS1ZU1)r   rJ   r  r%   r   argminZargmaxZidxminZidxmaxr]   rb   r^  rZ   rZ   r[   test_reduce_strings  s8    






zTestDataset.test_reduce_stringsc                 C  s   t ddi}t ddi }t|| t ddi}t ddtddgdfi }t|| t ddi}t dddd	gfi }t|| d S )
Nr   r8   Tr9   r   r7   Zuint16y      ?      ?y              ?)r   sumr%   r]   rb   r  rZ   rZ   r[   test_reduce_dtypes  s    
 
zTestDataset.test_reduce_dtypesc                 C  s   t  }ddd}t|}||_| }|ji ks4t|j D ]}|ji ks>tq>|jdd}|j|kslt|j D ]\}}|j|| jksvtqvd S )NZvalue1iq  )Zattr1Zattr2Tr  )r'   r  r   r   rl   rS   rk   r   )r   rV   _attrsr   rp   r   r   rZ   rZ   r[   test_reduce_keep_attrs)  s    
z"TestDataset.test_reduce_keep_attrsc                 C  sN   t ddddgfi}t dg dfi}| }t|| |d}t|| d S )Nr   r   r   r8   )r   r  r%   rz  rZ   rZ   r[   test_reduce_argmin<  s    

zTestDataset.test_reduce_argminc                 C  sn   t dddgfdddgfd}t dddd}| }t|| t ddddgfd}|d}t|| d S )Nr   r7   r   rz  r   )r   r  r%   rz  rZ   rZ   r[   test_reduce_scalarsI  s    

zTestDataset.test_reduce_scalarsc              	   C  sx   dd }t dddgdddd	d
ggfi}t dddgfi}||d}t|| tjtdd || W 5 Q R X d S )Nc                 S  s   t |tstd| |S )Nznon-integer axis)r   r   r   r   )r   r  rZ   rZ   r[   mean_only_one_axisT  s    
zATestDataset.test_reduce_only_one_axis.<locals>.mean_only_one_axisr   r   r   r   r8   r7   r9   r   z.missing 1 required positional argument: 'axis'r   r   reducer%   r   r   r   )r   r  rp   r   r   rZ   rZ   r[   test_reduce_only_one_axisS  s     
 z%TestDataset.test_reduce_only_one_axisc              	   C  st   dd }t dddgdddd	d
ggfi}t ddi}||}t|| tjtdd |j|dd W 5 Q R X d S )Nc                 S  s   t |  S rT   )r]   r  flattenrw  rZ   rZ   r[   	total_sumd  s    z2TestDataset.test_reduce_no_axis.<locals>.total_sumr   r   r   r   r8   r7   r9   r   )rZ   r   z"unexpected keyword argument 'axis'r   r  r  )r   r  rp   r   r   rZ   rZ   r[   test_reduce_no_axisc  s     

zTestDataset.test_reduce_no_axisc              
   C  s   t dddgdddddggfidddddgdgddgdddddggfd	d
d}|jdd}t dddgtj|jddjfid|jid}t|| |jddd}t dddgtj|jdddjfi|j|jdd}t|| d S )Nr   r   r   r   r8   r7   r9   r   g     8)r   r   rF   r  rt   T)keepdimsr  )r  r  )r   r  )r   r   r]   r   rV   r  r%   r   r=  rZ   rZ   r[   test_reduce_keepdimso  s(     
z TestDataset.test_reduce_keepdimsr  q      ?r        ?c              	     s   t dd}tj|jjd< d ddgfD ]t}|j|||d t|rPd jks^tnd jks^t|j	
 D ].\}}| ks|tt | |j|||d qhq$ddg}|j|||d d jkstt fd	d
|D std S )Nr   r   r   r   r.  )r"  r  quantiler/  r   c                 3  s   | ]}| j kV  qd S rT   r  r:  Zds_quantilerZ   r[   r\     s     z,TestDataset.test_quantile.<locals>.<genexpr>)r'   r]   rm  r1  rV   r  r   rK   rl   rS   r   r%   ri   )r   r  r  rp   r"  r  ZdarrZ   r  r[   test_quantile  s"    
 zTestDataset.test_quantilec                 C  sp   d}d}t d|gtddfi}||dk}|j|||d}|rHdntj}t d|id	|id
}t|| d S )Nr   rH   r   r   ra  r8   )r  r"  r  gffffff?r  rt   )r   r]   r   r  r  r  r%   )r   r  r  r"  rp   resultr  r   rZ   rZ   r[   test_quantile_skipna  s    z TestDataset.test_quantile_skipnar  Zmidpointlowerc                 C  sn   t dd}dddg}|j||d}t|j|jj||d t|j|jj||d t|j|jj||d d S )Nr   r   r  r  r  rF  )r'   r  r%   r1  r2  r3  )r   r  rp   r  r  rZ   rZ   r[   test_quantile_method  s    

z TestDataset.test_quantile_methodc              
   C  s   t dd}dddg}tjdd$}|j||d t|d	ks@tW 5 Q R X 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  r  r  Tr?  )interpolationr8   z!interpolation and method keywordsr   )r  r  )	r'   rA  rB  r  r   rl   r   r   r   )r   r  rp   r  r  rZ   rZ   r[   &test_quantile_interpolation_deprecated  s    

z2TestDataset.test_quantile_interpolation_deprecatedc              	   C  s   t dd}|d}dgt|jks(t|j}|jd}t|| t|jt|jks\tt|jt|jkstttj	t
dd |d W 5 Q R X d S )Ni  r   r   r3  zdoes not containr   Zinvalid_dim)r'   rankr)  rS   rl   r3  r$   rJ   r   r   r~   )r   rp   r   r   r   rZ   rZ   r[   	test_rank  s    


zTestDataset.test_rankc              
   C  sb   t ddtjdgfdddddgfd}tjd	d
& tt |d W 5 Q R X W 5 Q R X d S )Nr   r   r7   r   r   r   r9   r   F)Zuse_bottleneck)	r   r]   r  re   r   r   r   RuntimeErrorr  r@  rZ   rZ   r[   test_rank_use_bottleneck  s    &z$TestDataset.test_rank_use_bottleneckc                 C  sB   t dtjdgfdtjd}t dddd}| }t|| d S )Nr   r8   r   rz  )r   r]   r  countr%   rz  rZ   rZ   r[   
test_count  s    zTestDataset.test_countc                 C  s   t  }d|jd< t|tj|  |jdd}|jdd dd}t|| t|jdd dd|d dd
d}|j|dd}t|d d|d   t|d |d  |tj}|d}t|| d S )Nr   r   Tr  c                 S  s   | j ddS )NTr  )r   rw  rZ   rZ   r[   r4    r5  z&TestDataset.test_map.<locals>.<lambda>c                 S  s   | S rT   rZ   rw  rZ   rZ   r[   r4    r5  rH   r8   c                 S  s   ||  S rT   rZ   )r   multiplerZ   rZ   r[   scale  s    z#TestDataset.test_map.<locals>.scaler7   )r  r1  r4  )r8   )	r'   r   r%   r   r]   r   r   r$   rB  )r   rV   r   r   r  rZ   rZ   r[   test_map  s    



zTestDataset.test_mapc              	   C  s@   t  }d|jd< tt t|tj|  W 5 Q R X d S )Nr   r   )	r'   r   r   r  r  r%   rm  r]   r   r   rZ   rZ   r[   !test_apply_pending_deprecated_map  s    
z-TestDataset.test_apply_pending_deprecated_mapc                 C  sh   dt dddfddt ddd fd	}dd
ddgfdt d d}t||}t j|d d< |S )Nr   r   i  r   rx  r  r9   r   )r   r   r   r   r  r   )rw   r   r   r  )r]   r   r   r   r  )r   rj   rJ   rp   rZ   rZ   r[   r    s    
z%TestDataset.make_example_math_datasetc                 C  sz   |   }t||
  t||d  t|d|  t||td  t|td|  |jdd}|d7 }t|| d S )Nr   Tr\  )r  r%   r]   rb   r   r  rZ   rZ   r[   test_dataset_number_math  s    z$TestDataset.test_dataset_number_mathc              	   C  s   |   }t|tt| t|dd |d  dd dd dd fD ]}t|||| qJt| |   tt |j	 W 5 Q R X tt |j
 W 5 Q R X d S )Nc                 S  s   | d S )Nr   rZ   rw  rZ   rZ   r[   r4    r5  z,TestDataset.test_unary_ops.<locals>.<lambda>r   c                 S  s   |   S rT   )isnullrw  rZ   rZ   r[   r4  "  r5  c                 S  s   |   S rT   )roundrw  rZ   rZ   r[   r4  #  r5  c                 S  s
   |  tS rT   )rg   r  rw  rZ   rZ   r[   r4  $  r5  )r  r%   r   absr  notnullr   r   AttributeErrorr~  Zsearchsorted)r   rp   r  rZ   rZ   r[   test_unary_ops  s    zTestDataset.test_unary_opsc                   s$  |      fdd}t|  d   t| d     t|  d j  t| d j     jdd}| d 8 }t||   fdd}t|  d    jdd}| d 7 }t|| td d td i}t| dg td  t|td dg   d S )	Nc                   s   |  d  S )Nr   rZ   rw  r  rZ   r[   r4  3  r5  z5TestDataset.test_dataset_array_math.<locals>.<lambda>r   Tr\  c                   s   |  d  S )Nr   rZ   rw  r  rZ   r[   r4  <  r5  r   r9   )r  r   r%   rR  r   r   r]   r   r  rZ   r  r[   test_dataset_array_math0  s"    

z#TestDataset.test_dataset_array_mathc                 C  s   |   }t||d|   t||ddd  |dd }t|d|  t|||  t|||j  t||t|j  |jdd}t|}||7 }t|| |t|kstt||k|  |j	t
dd}d| }t|||  t|||  d S )	Nr   r  c                 S  s   d|  S r=  rZ   rw  rZ   rZ   r[   r4  L  r5  z7TestDataset.test_dataset_dataset_math.<locals>.<lambda>r7   Tr\  r  )r  r%   r   rS   r  r   idrl   r  r  r  )r   rp   r   r   Zexpected_idZ
subsampledrZ   rZ   r[   test_dataset_dataset_mathF  s$    
z%TestDataset.test_dataset_dataset_mathc                 C  s>  |   }|jddgd}d| }|| }t|| |jtdd|jtdd d }d|j|jd }t|| ||dg  }d|dg  |j}t|| t|t	  |j
  tt	 t	  t	  t	ddid}t|| |j| tt	 d t	  |jdd	}|jtdd}||7 }||| }t|| d S )
Nr8   r9   r  r7   r   rH  rt   Tr\  )r  r  r%   r  r  r   r$   r  rJ   r   rp  r   r,  )r   rp   r  r   r   r  r  rZ   rZ   r[   test_dataset_math_auto_align_  s*    
"

z(TestDataset.test_dataset_math_auto_alignc              	   C  s   |   }tt |d  |7  < W 5 Q R X tt |d  j|7  _W 5 Q R X tjtdd ||dg 7 }W 5 Q R X ttdddid}|j	d	d
}tt ||7 }W 5 Q R X t
|| d S )Nr   zmust have the samer   r   r:   r  r7   rt   Tr\  )r  r   r   r   rR  r~   r
   r]   r  r   r%   )r   rp   r  r   rZ   rZ   r[   test_dataset_math_errors}  s    z$TestDataset.test_dataset_math_errorsc              	     s6  t dtjddfdtjddfdtdtddtjddfdd   }t d jjjfd j	jjfd j
j jjd jjjfdd}t||  d} }t||  d	d
} dd }t|| t    } jD ]&| jd d d   jkstqd} j| } jD ]2t fdd|D }| j|ks*tq*d} ddd} jD ]2t fdd|D }| j|ksvtqvtt  dd W 5 Q R X  jdddd} d}t|| tt   jdddd}t|| W 5 Q R X dt ks2td S )Nr   r9   r   r$  r   )r   r   xyrt   .r   r   c                 S  s   | j ddddS )Nr   r   T)Ztranspose_coords)ru  rw  rZ   rZ   r[   r4    r5  z4TestDataset.test_dataset_transpose.<locals>.<lambda>rV  )r/  r   r.  rH   c                 3  s    | ]}|  j kr|V  qd S rT   r  r:  rp   r   rZ   r[   r\     s      z5TestDataset.test_dataset_transpose.<locals>.<genexpr>r/  r   c                 3  s    | ]}|  j kr|V  qd S rT   r  r:  r  rZ   r[   r\     s      r  r  )r  r  rN  )r   r]   r^   rZ  r+  ru  r   rk   rN  r   r   r   r  r%   r   r'   rj   rK   rl   r  r   r   r~   r  r  rK  )r   r   r   rY  r  Zexpected_ellrZ   r  r[   test_dataset_transpose  s^    




$




z"TestDataset.test_dataset_transposec                 C  sj   t tdtdfdtdfd}|ddd}t|d	 jtd
ksLtt|d jtdksftd S )N)r  r   r   r   )r7   r9   r   r   )r   r  r   r   )r9   r7   r   r   r   .r   r   r   Zwxzyr   Zxwzy)	r   r  r]   r   r&  ru  r)  rK   rl   )r   rp   r  rZ   rZ   r[   6test_dataset_ellipsis_transpose_different_ordered_vars  s    zBTestDataset.test_dataset_ellipsis_transpose_different_ordered_varsc                 C  s:   t  }tjddd|d< | }t|j tjs6td S )Nr:   r   r;   rH   )	r'   r`   r   ru  r   rH   rQ  ZPeriodIndexrl   )r   rp   Z
transposedrZ   rZ   r[   .test_dataset_retains_period_index_on_transpose  s    z:TestDataset.test_dataset_retains_period_index_on_transposec                 C  sF   t ddddddgfi}|d}t dddddgfi}t|| d S )Nr   r   r   r   r   r8   r   diffr$   r=  rZ   rZ   r[   test_dataset_diff_n1_simple  s    
z'TestDataset.test_dataset_diff_n1_simplec                 C  s   t ddddddgfidddddgi}|jdd	d
}t dddddgfiddddgi}t|| |jddd
}t dddddgfiddddgi}t|| d S )Nr   r   r   r   r   r8   r7   r9   r  labelupperr  r=  rZ   rZ   r[   test_dataset_diff_n1_label  s    &"
"z&TestDataset.test_dataset_diff_n1_labelc                 C  s   t dd}|d}i }ttj|d jddd|d jdd  iddg|d< ttj|d jddd|d jdd  iddg|d< |d |d< t|d	|d	 jid
}d|d jf|jd< t|| d S )Nr8   r   r/  r1  r  r.  r2  r3  rH   rt   r   r4  r'   r  r
   r]   rk   r   rJ   r$   r   rp   r   expected_dictr   rZ   rZ   r[   test_dataset_diff_n1  s"    

z TestDataset.test_dataset_diff_n1c                 C  s   t dd}|jddd}i }ttj|d jdddd|d jdd  iddg|d< ttj|d	 jdddd|d jdd  iddg|d	< |d
 |d
< t|d|d jid}d|d jf|jd< t|| d S )Nr8   r   r/  r7   r  r1  )r  r  r.  r2  r3  rH   rt   r   r4  r  r  rZ   rZ   r[   test_dataset_diff_n2
  s"    
z TestDataset.test_dataset_diff_n2c              	   C  s6   t dd}tjtdd |jddd W 5 Q R X d S )Nr8   r   zmust be non-negativer   r/  rV  r  r'   r   r   r~   r  r@  rZ   rZ   r[   !test_dataset_diff_exception_n_neg  s    
z-TestDataset.test_dataset_diff_exception_n_negc              	   C  s6   t dd}tjtdd |jddd W 5 Q R X d S )Nr8   r   z'label' argument has tor   r/  Zraise_mer  r  r@  rZ   rZ   r[   %test_dataset_diff_exception_label_str"  s    
z1TestDataset.test_dataset_diff_exception_label_strrY  c              	   C  s   dt dfdddgd}ddi}td	dd
ddgfi||}|jd
|d}|tjkrZtj}nt|trr|	d	tj}td	d|d
dgfi||}t
|| tjtdd |jdd W 5 Q R X d S )Nr   rw   r9   r7   rk  metarV   r   r8   )r   r8  
dimensionsr   r   rZ  )r)  r   shiftr   rJ  r]   r  r   r  getr%   r   r   r~   )r   r8  rJ   r   rp   r   r   rZ   rZ   r[   
test_shift'  s    


zTestDataset.test_shiftc              	   C  s   dt dfdddgd}ddi}td	dd
ddgfi||}|jd
dd}dt dfdddgd}td	ddd
dgfi||}t|| tjtdd |jddd W 5 Q R X d S )Nr   rw   r  r9   r7   rk  r  rV   r   r8   Tr   roll_coordsZcabr  r   r   )r   r  r)  r   rollr%   r   r   r~   )r   rJ   r   rp   r   Z	ex_coordsr   rZ   rZ   r[   test_roll_coords9  s    
zTestDataset.test_roll_coordsc              	   C  s   dt dfdddgd}ddi}td	dd
ddgfi||}|jd
d}td	ddd
dgfi||}t|| tjtdd |jdd W 5 Q R X d S )Nr   rw   r  r9   r7   rk  r  rV   r   r8   rw  r  r   iA  )rw   r	  )r   rJ   r   rp   r   r   rZ   rZ   r[   test_roll_no_coordsF  s    
zTestDataset.test_roll_no_coordsc                 C  s~   t jdddgdddggtdtdddd	}|jdd
d}t jdddgdddggdddgfddddgfgd}t|| d S )Nr8   r7   r9   r   r   r   r   r$  rI   Tr  r   r   r   rt   )re   r
   r+  r
  r%   )r   rT  r   r   rZ   rZ   r[   test_roll_multidimR  s     zTestDataset.test_roll_multidimc                 C  sf   ddi}t ddd|fi|d}t ddd|fi|d}t|j| t ddd|fi|d}t|j| d S )	Nr   r   r   rZ   y      ?       @r   r8   r7   )r   r%   realimag)r   r   rp   Zexpected_reZexpected_imrZ   rZ   r[   test_real_and_imag_  s    zTestDataset.test_real_and_imagc              	   C  sz   t i 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+  r8   r   r   r  zcannot set attrr   r7   )r   r   r   r  r+  r   r  r@  rZ   rZ   r[   test_setattr_raisesi  s    zTestDataset.test_setattr_raisesc              	   C  sV  t dd}t ddd}t ddd}tdgdg|fdgdg|fdgdg|fd	d
dgdgt dddfid}|jdd |jdd}t|jrt|jdd}|d jdkstt|d |d  |jdd}|d
 jdkstt|jrt|jdd}t	|jdkst|jD ]}|| jdkstq|jdd d}t	|jdksRt|jD ]}|| jdksXtqX|jdd}t	|jdkst|jD ]}|| j
dkstq|jddd}t|jrt|jddd}|jD ]B}|| jdks t|| j
dkst|| j
dkstq|jdd dd d}t|jrRtd S )NZconvective_precipitation_flux)standard_nameZair_potential_temperaturez0 m)r  heightz10 mr#  r   )Ztemperature_0Ztemperature_10precipitationrH   rN  Ztime_in_seconds)r  	long_namert   Zinvalid_standard_namer  )r  r7   c                 S  s   | d k	S rT   rZ   r   rZ   rZ   r[   r4    r5  z2TestDataset.test_filter_by_attrs.<locals>.<lambda>)r  r8   c                 S  s   dS )NFrZ   r   rZ   rZ   r[   r4    r5  c                 S  s   dS )NTrZ   r   rZ   rZ   r[   r4    r5  )r  r   Zfilter_by_attrsrd   rS   rl   r  r$   r  r   r  )r   ZprecipZtemp0Ztemp10rp   Znew_dsr  rZ   rZ   r[   test_filter_by_attrsr  sb    




  
 z TestDataset.test_filter_by_attrsc              	   C  sP   t dtdddgdgddddgid	i}|jd }|d jd }||ksLtd S )
Nr  r8   r7   r9   r   r   r      r  )r   r
   r<  rl   rz  rZ   rZ   r[    test_binary_op_propagate_indexes  s    "
z,TestDataset.test_binary_op_propagate_indexesc              	   C  s^  t dddgi}t dddgi}t jdd || }W 5 Q R X t ddddgi}t|| t ddd}t ddd	}t d
di}|| }t|| t jdd. t tjdtjd}|| }t|| W 5 Q R X t jdd* t tjdd}|| }t|| W 5 Q R X t jdd* t dtjd	}|| }t|| W 5 Q R X d S )Nr   r   r8   r7   rQ  )Zarithmetic_joinr  r9   )r   r|  r   r   rq  rX  rY  )re   r   r   r$   r]   r  )r   Z	missing_2Z	missing_0r   r   r  r  rZ   rZ   r[   test_binary_op_join_setting  s.    

z'TestDataset.test_binary_op_join_settingc                 C  s  t tdddgdgddddgidtd	d
dgdgddddid}t|d}|jdd}dddg|d _dddg|d _|d jtkst|d jtkstt	|| t|dt
d}|jdd}dddg|d _dddg|d _|d jt
kst|d jt
kstt	|| t|ddd}|jddddgfddddgfd}|d jtksVt|d jtksjtt	|| t|ddddt
id}|jddddgfddddgfd}|d jt
kst|d jtkstt	|| d S )Nr8   r7   r9   r   r   r   r  r  r  r  gffffff
@r   r  )r  r  r   r   r   Tr\  r  ry  r  )r8  r?   gffffff@)r   r
   r   r   rk   r?   r  rl   r-  r%   rd   r:  r=  rZ   rZ   r[   test_full_like  s<    


"
"zTestDataset.test_full_likec                 C  s   t ddgdddgfgjdd}t ddgdddgfgjd	d}||}tdddtjgfdtjddgfd
ddddgid}t|| t|t||g t dddgddddgfgjdd}||}t||g}t|| d S )Nr   r   r   r   dsx0r   r8   r  dsx1)r  r  rt   r7   r  dsy2)	r
   rp  Zcombine_firstr   r]   r  r$   re   r  )r   r  r  r   r   r  rZ   rZ   r[   test_combine_first  s      
 
$
zTestDataset.test_combine_firstc              	   C  s  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dgddgddggddgdd}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dgddgddggddgdd}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dgddgddggddgdd}|}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dgddd	d
gfg}	|||	g}t|| |}tddgdddgfg}
||
|g}t|| tt |d}W 5 Q R X tt}||d }W 5 Q R X dt|j	ksbt
|}|d}t|| d}tjj|d d!gd"}t tddgddgddgddggd|fdddgfgtddgddgddgd#d$ggddgdd}|d}tjjtt|d d!gd"}t tddgddgddgddggd|fdddgfgtd#d$gddgddgddggddgdd}t|| |}|ddg}t|| |jddgdd}t|| d S )%Nr8   r7   r9   r   r   r   r   r  r   r   r   r   r   r  r  r   r  )r  r   r   c   b   F)Z	ascendinga   _   r   P   r   r  zDataArray is not 1-D)r  )r   r   r  )r   r   r  r  r   ra  r  )r   r
   Zsortbyr$   r   r   rE  r~   r   r  rl   r`   r   r  r  r  )r   rp   Zsorted1dZsorted2dr   Zdaxr   Z	dax_shortZdax0Zdax1dayexcinfoindicesr  ds_midxZmidx_reversedrZ   rZ   r[   test_sortby  s      	  	  	








 &

 &	

zTestDataset.test_sortbyc                 C  s   t dd}dD ](}t|| t|| |t|kstqdD ]2}t|d | t|j| |t|d ks<tq<|d jd |jjkstdt|d kstd S )Nr8   r   )r1  r2  r3  rH   r.  r/  r   r4  )r   r.  r4  r3  r   )r'   r$   r  rK  rl   r3  r   r   )r   rp   r  rZ   rZ   r[   test_attribute_access  s    
z!TestDataset.test_attribute_accessc              	   C  s  t dd}| }ddddddd	d
g}|D ]}||  q*t|t|ksLt|d  }d	dd
g}|D ]}|d |  qft|t|kst|jdd	gd}| }ddddddd	d
dg	}|D ]}||  qt|t|kst|j }dddd	d
g}|D ]}|j|  qt|t|ks"t|d j }dd	d
g}|D ]}|d j|  q>t|t|ksjt|j }ddddg}|D ]}|j|  qt|t|kstd S )Nr8   r   r1  r2  r3  rH   r.  r/  r   r4  )dim12r*  )r'   Z_ipython_key_completions_r  rl   r|  rJ   rS   )r   rp   r   r   r~  r'  rZ   rZ   r[   test_ipython_key_completion  sR    






z'TestDataset.test_ipython_key_completionc                 C  sp   t dd}|jdddd}d|ks&t|jddd	d}d|ksBtd
|ksNt|dd}t|jdksltd S )Nr8   r   r/  r7   FfullZvar1_polyfit_coefficientsr.  TZdim1_matrix_rankrH   r   )r'   polyfitrl   r   rS   )r   rp   outrZ   rZ   r[   test_polyfit_output  s    
zTestDataset.test_polyfit_outputc              	   C  s~   t dd}tjdd^}|jjdddd t|dks:t|d	 jtj	ksNt|jjdddd t|dksptW 5 Q R X d S )
Nr8   r   Tr?  r/  r   Fr,  r   )
r'   rA  rB  r1  r.  r   rl   r  r]   ZRankWarning)r   rp   rC  rZ   rZ   r[   test_polyfit_warnings  s    
z!TestDataset.test_polyfit_warningsc                 C  s   t dd}|jddd}|d jdks*t|d jd	ks<t|d
 jd	ksNt|d jdks`tt|jdddddks|ttj|d j	ddgdj
d tj|d ddg j
tj d S )Nr8   r   r8   r8   rH  )r/  constant_valuesr/  )ra  r1  )r  ra  r2  r3  )r   r  r  ra  r   r   r-  r   rV  r  )r'   r  r   rl   r  rK   r]   r  r$   r  rV   r  )r   rp   ZpaddedrZ   rZ   r[   test_pad  s    
 zTestDataset.test_padr  r   r   r   default)r  FalseTruec              	   C  s  t jdddg|fdddg|fddddg|fdddg|fd|d}t jdd	ddd	g|fdddg|fddtjddtjg|fdddg|fd|d}|d krd
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   r8   r7   r   r   rV  )r  r  r  r   r5  r  r2  Zconstant)moder3  )r8  r3  r  )re   r   r]   r  r   r  r  r%   )r   r  r   r   rp   Zkeep_attrs_r   rZ   rZ   r[   test_pad_keep_attrs  s.    	 	   zTestDataset.test_pad_keep_attrsc                 C  sr   t dd}d|jd< |j|tjks*t|jj|tjjksDt|jtddjrXt|jtddjjrntd S )Nr   r   r   r   Fr  )r'   r   rg   r-  rl   r1  r   rZ   rZ   r[   test_astype_attrs  s    

zTestDataset.test_astype_attrsparserpandaspythonengineZnumexpr)Zmarksbackendnumpydaskc                 C  s~  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}t dd	dd}t jj
dddd}	|dkrtd|fd|fd|fd|fd|fd|	fd}
nt|dkr*tdtj|ddfdtj|ddfdtj|ddfdtj|ddfdtj|ddfdtj|	ddf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|| |
jd-||d}|
j|d k|d$k@ d!}t|| |
jd.||d}|
j|| d/kd!}t|| |d)kr|
jd0||d}|
j|d k|d$k@ d!}t|| |
jdd%||d1}|
j|d k|d'k d}t|| |d)kr"|
jdd%d2||d3}|
j|d k|d'k |d	kd}t|| |
jtdd%d||d"}|
t|d k|d'k d}t|| |d)kr|
jtdd%d2d||d"}|
t|d k|d'k |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 tt |
jd%d! W 5 Q R X tt |
jd4d! W 5 Q R X tt |
jd5d! W 5 Q R X d6S )7zTest querying a dataset.rH  r   r   r8   r   r  r   r   r   r|  r  T)r  replace   )r   r   r  r@  r   r   r   r   rz  )r   r   r  r  r  rj  rA  r9   )r  r   r  )r9   r   )r9   r   r  za > 5)r   r>  r;  r   rw  )r>  r;  zb > 502   zc < .5)r   r>  r;  r  r  r<  z
d == "bar")r   r>  r;  r  z(a > 5) & (b > 50)z(a * b) > 250   z(a > 5) and (b > 50))r   r   r>  r;  z
d == 'bar')r   r   r   r>  r;  ze > 100z	spam > 50N)r]   r^   rm   r   rN  r  choicerg   rc   r   normalr   rL   
from_arrayqueryr  r%   r  r   r   r~   r  r3   )r   r?  r>  r;  r   r   r  r  r  rj  rp   r   expectrZ   rZ   r[   
test_query  s    













    


 
zTestDataset.test_query(   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r!  r#  r(  r,  rA  rC  rF  rL  rO  rU  r[  rf  rh  ri  rl  ro  rr  rt  rv  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   markr  r  r  r  r   r!  r(  r.  r;  r>  rD  rE  rH  parametrizer   rJ  rM  rO  r   bytesrP  rU  r_  ra  rf  rh  ri  rj  rl  rn  rp  rv  rw  rx  ry  r  r  r  r  r  r  r  r  r  r  r  Zxfailrl   re   r
   r   r]   rb   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   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r%  r'  r)  r*  r1  r2  r4  r5  r7  r8  r9  r;  r   r^   rZ  r<  r>  r?  r@  rA  rC  rD  rF  rG  rH  rO  rP  rQ  rR  rT  rU  rV  rZ  r[  r]  r_  r`  re  rf  rn  rs  ry  rz  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  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  r1  r4  paramr9  r:  r.   rK  rZ   rZ   rZ   r[   r      s  :%&!>8+'"8A Z	I,	


]'O	-&	
*!)/$#*

	

-
(*0	%!     ).	
	\	0
 
`	N<@ ,_		%

"
B	

	C+g5
(&	   r   test_elementsr8   r7   r   c                 C  s~   t dddgfdddgfdddgfddd}|dkr@| }t dddgfdddgfdddgfdd| }t|| d S )	Nr  r   r8   r0  rR   rd   rA  r7   )r   rg   r  isinr$   )rP  r?  r   r  rZ   rZ   r[   	test_isin  s&    





rR  c               	   C  s4   t dddgi} tt | |  W 5 Q R X d S )Nr   r8   r7   )r   r   r   r   rQ  r  rZ   rZ   r[   test_isin_dataset  s    rS  unaligned_coordsr   ro  r   rH  rJ   c                 C  sL   t jdddgdg| d}t j|d}||d< t jd|i|d}t|| d S )Nr8   r7   r9   r   r  rt   r   )re   r
   r   r$   )rT  rJ   r   r   r  rZ   rZ   r[   2test_dataset_constructor_aligns_to_explicit_coords  s
    rU  c                	   C  s8   t jtdd  ttdddgdhd W 5 Q R X d S )Nzhas invalid type <class 'set'>r   r8   r7   r9   r   )datesec)r   r   r   re   r   r  rZ   rZ   rZ   r[   "test_error_message_on_set_supplied  s    rX  r   c              	   C  s6   t jtdd tjdddgdg| d W 5 Q R X d S )Nz(not a subset of the DataArray dimensionsr   r8   r7   r9   r   r  )r   r   r~   re   r
   )rT  rZ   rZ   r[   +test_constructor_raises_with_invalid_coords  s    rY  rp   r9   T)Zindirectc                 C  s,   ddddddh}t | }t||ks(td S )Npiper   r  r1  r/  r4  )rK  r   rl   )rp   Zsome_expected_attrsr  rZ   rZ   r[   test_dir_expected_attrs  s    r[  c                 C  sX   d| d< t | }d|ksttjjdddgd}td|j|fi}|d }t | d S )Nr   r   r7   r"  i'  r  sample_data)rK  rl   r]   r^   uniformre   r   r   )rp   r  r\  r   r   rZ   rZ   r[   test_dir_non_string  s    r^  c                 C  s    d| d< t | }d|kstd S )Nuniunicode)rK  rl   rp   r  rZ   rZ   r[   test_dir_unicode  s    rb  c                	   C  s4   t  $ tddddtjgfiddk W 5 Q R X d S )Nr   r   r8   r7   rR   r   )r&   r   r]   rm  rZ   rZ   rZ   r[   +test_raise_no_warning_for_nan_in_binary_ops  s    rc  errorr   c                 C  s   t | |  d S rT   )r"   r  rZ   rZ   r[   "test_raise_no_warning_assert_close  s    re  rA  F
edge_orderc           	   
   C  s  t jd}dddddddd	g}tj|d
dddg|dd|d
dfdd}| rftrf|ddi}td|i}|	d|}tjt j
||d d|d|j|jd}t|| t|d j	d|d|j	d|dd  t|d |d  |	d|}tjt j
||d d|d|j|jd}t|| t||j	d|dd  t|d j	d|d|j	d|dd  tt |	d W 5 Q R X d S )NrH  r   ffffff?r   333333?ffffff?r  RQ?皙?r  r   r   r   r9   r   r   r   r'  r  r   r  r   r  rf  rf  r8   r'  )r]   r^   r_   re   r
   rZ  r)   r  r   differentiategradientrK   rJ   r$   r   r   r~   )	rA  rf  rn   coordrL   rp   r   rr  rs  rZ   rZ   r[   test_differentiate  sH    


rr  c              
   C  sD  t jd}t jdddddddd	gd
d}tj|ddddg|dd|ddfdd}| rptrp|ddi}|j	dddd}tjt j
||d jjddddd|j|jd}t|| |j	dddd}t ||d st|d j	dddd}t |dsttj|ddgd|id}|j	ddd}t |ds@td S ) NrH  
2004-07-13
2006-01-13
2010-08-13
2010-09-13
2010-10-11
2010-12-13
2011-02-13
2012-08-13r  r>   r  r   r   r   r9   r   rl  r  r   r8   r  rf  datetime_unitr|  r   rm  rl     rx  zdatetime64[ms]rn  )r]   r^   r_   rb   re   r
   rZ  r)   r  ro  rp  rR  _to_numericrK   rJ   r$   r  rl   rg   )rA  rn   rq  rL   r   rr  r  rZ   rZ   r[   test_differentiate_datetime5  sN    

   
r  Test requires cftime.)reasonc              	   C  s   t jd}tjdddd}tj|dd|dd|ddfd	d
dgd}| rbtrb|d
di}|j	d
ddd}t j
||d
 jjddddd}tj||j|jd}t|| |j	d
ddd}t||d  |d
 j	d
ddd}t|t|d
 t d S )NrH  r  r  Z2Mr   r   r9   rH   r   rH   r   Zt2drH   r   rI   r   r8   r  r{  r}  r   rm  rl  r~  )r]   r^   r_   re   r  r
   rZ  r)   r  ro  rp  rR  r  rJ   rK   r$   r"   Z	ones_likerg   r-  )rA  rn   rq  rL   r   expected_datar   r  rZ   rZ   r[   test_differentiate_cftimef  s,    
   
r  c                 C  s  t jd}dddddddd	g}tj|d
dddg|d|d
fdd|d
dfdd}| rrtrr|ddi}td|i}|	d}tjt j
| |d dddgdd |j D d}t||  t|d 	d|	dd  t|jt|jst|	d}tjt j
||d dddgdd |j D d}t||  t||	dd  t|d 	d|	dd  |	d}|jdksttt |	d W 5 Q R X d S )NrH  r   rg  r   rh  ri  r  rj  rk  r  r   r   r   rw  r9   r   r   r   r   r'  r  r   r  r   r  c                 S  s    i | ]\}}d |j kr||qS rw  r  r   rZ   rZ   r[   r     s     
  z"test_integrate.<locals>.<dictcomp>r8   c                 S  s    i | ]\}}d |j kr||qS r  r  r   rZ   rZ   r[   r     s     
  r$  r'  )r]   r^   r_   re   r
   rZ  r)   r  r   	integratetrapzcomputerJ   r   r"   r$   r   rV   r:  rl   r  r   r   r~   )rA  rn   rq  rL   rp   r   rr  rs  rZ   rZ   r[   test_integrate  sH    




r  c           	      C  s  t jd}dddddddd	g}tj|d
dddg|d|d
fdd|d
dfdd}| rrtrr|ddi}td|i}|	d}ddl
m} tj|| |d dddddg|jd}t||  t|d 	d|	dd  t|jt|jst|	d}tj|||d dddddg|jd}t||  t||	dd  t|d 	d|	dd  |	d}|jdksttt |	d W 5 Q R X d S )N+   r   rg  r   rh  ri  r  rj  rk  r  r   r   r   rw  r9   r   r  r  r   r  r   )cumtrapzr  )r  initialr8   r$  r7   r'  )r]   r^   r_   re   r
   rZ  r)   r  r   Zcumulative_integrateZscipy.integrater  r  rJ   r"   r$   r   rV   r:  rl   r  r   r   r~   )	rA  rn   rq  rL   rp   r   r  rr  rs  rZ   rZ   r[   test_cumulative_integrate  sV    




r  which_datetimer]   Zcftimec           	   	   C  s4  t jd}|dkr4t jddddddd	d
gdd}ntsBtd tjdddd}tj	|
dd|dd|
ddfdddgd}| rtr|ddi}|jddd}t j| jtj|d jdddd}tj	|dgdd |j D d }t||  t|jt|jst|jdd!d}t||d"  d S )#NrH  r]   rs  rt  ru  rv  rw  rx  ry  rz  r  r>   r  r  r  Z2Dr   r   r9   r  r  rH   r   rI   r   r  r}  r   r  c                 S  s    i | ]\}}d |j kr||qS r  r  r   rZ   rZ   r[   r   "  s     
  z'test_trapz_datetime.<locals>.<dictcomp>r  rl  g      8@)r]   r^   r_   rb   r(   r   skipre   r  r
   rZ  r)   r  r  r  r  rV   r   Zdatetime_to_numericrJ   r   r"   r   r:  rl   )	rA  r  rn   rq  rL   r   r  r   r  rZ   rZ   r[   test_trapz_datetime  sN    


r  c               	   C  s&   t  } tt | j W 5 Q R X d S rT   )r   r   r   r  __dict__)r  rZ   rZ   r[   test_no_dict-  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 Dataset 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>.MyDSNr
  rZ   rZ   rZ   r[   MyDS<  s   r  z%MyDS must explicitly define __slots__N)r   r   r  r   r   r  rl   )r  r  rZ   rZ   r[   test_subclass_slots3  s    r  c                  C  s,   ddl m}  t }| |}| |ks(tdS )zClasses with __slots__ are incompatible with the weakref module unless they
    explicitly state __weakref__ among their slots
    r   )refN)weakrefr  r   rl   )r  rp   r%  rZ   rZ   r[   test_weakrefB  s    r  c                  C  sH   t tttt gd} t| }| d jd |d jd k	sDtd S )NrZ  r   r   )	r   r  r
   r]   rb   rc   r   rk   rl   )r  r   rZ   rZ   r[   test_deepcopy_obj_arrayM  s    r  c                  C  sv   t ddgddgfi} | | jd< | jdd t dd	gd
dgfi}|| jd< | |jd< | jdd |jdd d S )Nr   r   r8   r7   r  Tr\  r   r   r9   r   )re   r   r   r   )rp   r  rZ   rZ   r[   test_deepcopy_recursiveS  s    


r  c                 C  s   | j dd}t|ddk s&t| j dd}t|ddk sLt| j ddd}t|ddk sttt|ddk st| j | d| dd}|j| jkstd S )	Nr  )r  .r  r  r  )r  r   r   )r  ri   r  rk   rl   r   r   rK   ra  rZ   rZ   r[   	test_clipi  s    r  c                   @  s.   e Zd ZejddddgddddZd	S )
TestDropDuplicateskeeprL  lastFr   r5   c              	   C  s  t jdddddgfddddd	gfd
ddddd	gid}|dkr`dddg}ddd	g}ddd	g}n@|dkrdddg}ddd	g}ddd	g}nddg}dd	g}dd	g}t jd|fd|fd
d|id}|jd|d}t|| tjtdd |jd|d W 5 Q R X d S )NrH   r   r   r   r   r  r9   r  r7   r   r8   rt   rL  r  )r  z['space'] not foundr   r{  )re   r   Zdrop_duplicatesr$   r   r   r~   )r   r  rp   r   r   rH   r   r  rZ   rZ   r[   test_drop_duplicates_1dy  s.     



 
z*TestDropDuplicates.test_drop_duplicates_1dN)r   r   r   r   rL  rM  r  rZ   rZ   rZ   r[   r  x  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 )TestNumpyCoercionr   r5   c                 C  s<   t jdddddgfiddddd	gfid
}t| | d S Nr   r   r8   r7   r9   rF   r   r   r   rt   )re   r   r%   as_numpyr@  rZ   rZ   r[   test_from_numpy  s    *z!TestNumpyCoercion.test_from_numpyc                 C  sJ   t jdddddgfiddddd	gfid
}|d}t| |  d S r  )re   r   r  r%   r  r  )r   rp   Z
ds_chunkedrZ   rZ   r[   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	fid
d||d dd	fid}tjdddddgfid
d|d fid}t| | d S Nr   )Quantityr8   r7   r9   r   r   ZPa)rI  rF   ro  rt   )pintr  r]   rb   re   r   r%   r  )r   r  rT  rp   r   rZ   rZ   r[   test_from_pint  s    (z TestNumpyCoercion.test_from_pintc                 C  s   dd l }tdddg}|j|}tjdddg|fidd	|d fid
}tjdddg|fidd	|d fid
}t| | d S )Nr   r8   r7   r9   r   r   r   Zelevr   rt   )	r4   r]   Zdiagflatr\  Z
from_numpyre   r   r%   r  )r   r4   rT  Zsparrrp   r   rZ   rZ   r[   test_from_sparse  s      z"TestNumpyCoercion.test_from_sparsec                 C  s   dd l }tdddg}tjdd||fidd||d fid}tjdddddgfidd|d fid}t| | d S )	Nr   r8   r7   r9   r   r   rF   rt   )Zcupyr]   rb   re   r   r%   r  )r   cprT  rp   r   rZ   rZ   r[   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	fid
d||dd	d fid}| }tjdd|fid
d|d fid}t	|| d S r  )
rA  r  r  r]   rb   rH  re   r   r  r%   )r   rA  r  rT  r  rp   r  r   rZ   rZ   r[   test_from_pint_wrapping_dask  s    "z.TestNumpyCoercion.test_from_pint_wrapping_daskN)r   r   r   r  r-   r  r/   r  r1   r  r,   r  r  rZ   rZ   rZ   r[   r    s   r  c                  C  s>   t jtddgd} t t| d}d| i}|j|d dS )z;Tests that string keys to `variables` are permitted by mypyr   r   r  rw  r   )rj   N)re   r
   r]   r   r   r  r:  )rL   rp   r9  rZ   rZ   r[   test_string_keys_typing  s    r  c               	   C  sR   t ddggfddggfd} tjttdd | ddg W 5 Q R X d S )	Nr      r  r  zntranspose requires dims to be passed as multiple arguments. Expected `'y', 'x'`. Received `['y', 'x']` insteadr   r   r   )re   r   r   r   r   reescaperu  r  rZ   rZ   r[   test_transpose_error  s     r  )N)x
__future__r   r  r  r   rA  r   r   ior   textwrapr   typingr   r   r@  r]   r<  r`   r   Zpandas.core.indexes.datetimesr	   Zxarrayre   r
   r   r   r   r   r   r   r   r   r   Zxarray.coding.cftimeindexr   Zxarray.corer   r   r   Zxarray.core.commonr   r   Zxarray.core.coordinatesr   Zxarray.core.indexesr   r   Zxarray.core.pycompatr   r   Zxarray.core.utilsr   Zxarray.testsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   Zpandas.errorsr3   ImportErrorZpandas.core.computation.opsZ
dask.arrayrb   rL   r  rL  r  Z
pytestmarkrr   r   r   r   ZInMemoryDataStorer   r   rM  rR  rS  rB  rU  rX  rY  r[  r^  rb  rc  re  rr  r  Zskipifr  r  r  r  r  r  r  r  r  r  r  r  r  r  rZ   rZ   rZ   r[   <module>   s  0T

P                                               e(("
/04>2G	