U
    Cvfd                     @  sH  d dl mZ d dlZd dlmZ d dlmZ d dlZd dlZ	d dl
Z
d dlZd dlmZ d dlmZmZmZmZmZmZmZ d dlmZmZ d dlmZmZmZ d d	lmZ d
dddZ G dd deZ!G dd dZ"G dd dZ#G dd dZ$G dd dZ%dd Z&edd Z'edd Z(e
j)*ddd gd!d
d"d#d$Z+dS )%    )annotationsNdatetime)Any)CFTimeIndex)HashableIndexIndexesPandasIndexPandasMultiIndex_asarray_tuplesafesafe_cast_to_index)IndexVariableVariable)assert_array_equalassert_identicalrequires_cftime)_all_cftime_date_typesNonereturnc                  C  st   t d} t| tjst| jdks&t|  dks6tt ddg} | jdksPt| d dks`t| d dksptd S )Na   r   )r   r   )   r   )r   
isinstancenpZndarrayAssertionErrorndimitemshape)res r#   =/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_indexes.pytest_asarray_tuplesafe   s    r%   c                   @  s   e Zd ZddddZdS )CustomIndexr   r   c                 C  s
   || _ d S N)dims)selfr(   r#   r#   r$   __init__(   s    zCustomIndex.__init__N)__name__
__module____qualname__r*   r#   r#   r#   r$   r&   '   s   r&   c                   @  s  e Zd ZejddddZddddZdddd	Zddd
dZddddZ	ddddZ
ddddZddddZddddZddddZddddZddddZddddZddddZejd d!d"gddd#d$Zddd%d&Zd'S )(	TestIndexr&   r   c                 C  s   t ddiS )Nxr   )r&   r)   r#   r#   r$   index-   s    zTestIndex.indexr   c              	   C  s(   t t tji i d W 5 Q R X d S )Noptions)pytestraisesNotImplementedErrorr   from_variablesr0   r#   r#   r$   test_from_variables1   s    zTestIndex.test_from_variablesc              	   C  s&   t t tg d W 5 Q R X d S Nr/   )r4   r5   r6   r   concatr0   r#   r#   r$   test_concat5   s    zTestIndex.test_concatc              	   C  s&   t t ti d W 5 Q R X d S r9   )r4   r5   r6   r   stackr0   r#   r#   r$   
test_stack9   s    zTestIndex.test_stackc              	   C  s"   t t |  W 5 Q R X d S r'   )r4   r5   r6   unstackr)   r1   r#   r#   r$   test_unstack=   s    zTestIndex.test_unstackc                 C  s.   |  i kst| ddiddiks*td S )Nr/   var)create_variablesr   r?   r#   r#   r$   test_create_variablesA   s    zTestIndex.test_create_variablesc              	   C  s"   t t |  W 5 Q R X d S r'   )r4   r5   	TypeErrorto_pandas_indexr?   r#   r#   r$   test_to_pandas_indexE   s    zTestIndex.test_to_pandas_indexc                 C  s   | i d kstd S r'   )Ziselr   r?   r#   r#   r$   	test_iselI   s    zTestIndex.test_iselc              	   C  s$   t t |i  W 5 Q R X d S r'   )r4   r5   r6   selr?   r#   r#   r$   test_selL   s    zTestIndex.test_selc              	   C  s,   t t |tddi W 5 Q R X d S Nyr   )r4   r5   r6   joinr&   r?   r#   r#   r$   	test_joinP   s    zTestIndex.test_joinc              	   C  s,   t t |tddi W 5 Q R X d S rJ   )r4   r5   r6   reindex_liker&   r?   r#   r#   r$   test_reindex_likeT   s    zTestIndex.test_reindex_likec              	   C  s,   t t |tddi W 5 Q R X d S rJ   )r4   r5   r6   equalsr&   r?   r#   r#   r$   test_equalsX   s    zTestIndex.test_equalsc                 C  s   | i d kstd S r'   )Zrollr   r?   r#   r#   r$   	test_roll\   s    zTestIndex.test_rollc                 C  s   | i i |kstd S r'   )renamer   r?   r#   r#   r$   test_rename_   s    zTestIndex.test_renamedeepTFc                 C  s   |j |d}t|tst||k	s&td|jd< |r\|j|jksDt|jt |jkstn&|j|jkslt|jt  |jkstd S )N)rU      r/   )copyr   r&   r   r(   deepcopy)r)   r1   rU   copiedr#   r#   r$   	test_copyb   s    
zTestIndex.test_copyc              	   C  s&   t t |d d   W 5 Q R X d S r'   )r4   r5   r6   r?   r#   r#   r$   test_getitemp   s    zTestIndex.test_getitemN)r+   r,   r-   r4   fixturer1   r8   r;   r=   r@   rC   rF   rG   rI   rM   rO   rQ   rR   rT   markparametrizerZ   r[   r#   r#   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
 Zej	de
e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"d#Zddd$d%Zddd&d'Zddd(d)Zd*S )+TestPandasIndexr   r   c                 C  sj   t dddg}t|d}|j|s*t|j|k	s8t|jdksFtd |_t|d}|jjdksftd S )Nr   r   rV   r/   )pdr   r
   r1   rP   r   dimnamer)   pd_idxr1   r#   r#   r$   test_constructorv   s    

z TestPandasIndex.test_constructorc              	   C  s   t jdddgt jd}tjd|ddidt jid	}tjd|ii d
}|jdksRt	|j
t|sht	|j|jksxt	tddddgdddgg}tjtdd tj||di d
 W 5 Q R X tjtdd tjd|ii d
 W 5 Q R X d S )N皙?皙@ffffff
@dtyper/   unitmrj   attrsencodingr2   r/   rK   r   r   rV            z.*only accepts one variable.*match)r/   fooz).*only accepts a 1-dimensional variable.*rv   )r   arrayfloat32xrr   float64r
   r7   ra   r   r1   rP   r`   r   coord_dtyperj   r4   r5   
ValueError)r)   datarA   r1   Zvar2r#   r#   r$   r8      s&        z#TestPandasIndex.test_from_variablesc                 C  sP   t jddgdd}t |}td|}tjd|ii d}t|jt j	sLt
d S )Nrv   barcategoryri   r/   r2   )r`   ZSeriesr   ry   r   r
   r7   r   r1   ZCategoricalIndexr   )r)   r}   rd   rA   r1   r#   r#   r$   !test_from_variables_index_adapter   s
    
z1TestPandasIndex.test_from_variables_index_adapterc                 C  s   t jddd}t|d d dt|dd  dg}t|d}tj|dd}||sXtt|jt jsjtt	t
dt	t
ddg}tj|d|d}||stt|jt jstd S )N
2000-01-01
   periodsrr   t)ra   )ra   	positions)r`   Zperiod_ranger
   r:   rP   r   r   r1   ZPeriodIndexlistrange)r)   r   indexesexpectedactualr   r#   r#   r$   test_concat_periods   s    $
z#TestPandasIndex.test_concat_periodsrj   c                 C  s   t tjdg|dd|d}t tjdg|dd|d}t tjddg|dd|d}t ||gd}||sntt|j|std S )Nr   ri   r/   r{   b)r
   r   rw   r:   rP   r   Z
issubdtyper{   )r)   rj   r   r   r   r   r#   r#   r$   test_concat_str_dtype   s      z%TestPandasIndex.test_concat_str_dtypec                 C  s$   t g d}|jtdks td S )Nr/   O)r
   r:   r{   r   rj   r   )r)   idxr#   r#   r$   test_concat_empty   s    z!TestPandasIndex.test_concat_emptyc              	   C  sF   t ddgdt ddgdg}tjtdd t |d W 5 Q R X d S )	Nr   r   r/   r   rV   rK   z Cannot concatenate.*dimensions.*rt   )r
   r4   r5   r|   r:   r)   r   r#   r#   r$   test_concat_dim_error   s    z%TestPandasIndex.test_concat_dim_errorc                 C  s   t jdddgt jd}tj|dd}t|d|jd}dtd|d	d
iddidi}||}t	|d |d  |d j|d jkst
|d j|jkst
d S )Nrf   rg   rh   ri   rv   rb   r/   r   rk   rl   
fill_value        rm   )r   rw   rx   r`   r   r
   rj   r   rB   r   r   r{   )r)   r}   rd   r1   
index_varsr   r#   r#   r$   rC      s        
z%TestPandasIndex.test_create_variablesc                 C  s4   t jdddgdd}t|d}| |jks0td S )Nr   r   rV   rv   r   r/   )r`   r   r
   rE   r1   r   rc   r#   r#   r$   rF      s    
z$TestPandasIndex.test_to_pandas_indexc              	   C  s   t tdddgd}tjtdd |ddgi W 5 Q R X tt |ddi W 5 Q R X tjtdd |dd	dii W 5 Q R X d S )
Nr   r   rV   r/   not all values foundrt   r   zdoes not have a MultiIndexone)r
   r`   r   r4   r5   KeyErrorrH   r|   r?   r#   r#   r$   rI      s    zTestPandasIndex.test_selc                 C  sZ   t tddddgd}|dddddgi}dddddgi}tj|jd |d  d S )Nr   g       @g      ?g      @r/   FT)r
   r`   r   rH   r   testingr   dim_indexersr)   r1   r   Zexpected_dim_indexersr#   r#   r$   test_sel_boolean   s     z TestPandasIndex.test_sel_booleanc                 C  sf   t tdddgd}|ddi}ddi}|j|ks:t|d|  d i}|j|ksbtd S )Nr   z
2001-01-01z
2002-01-01r/   r   )r
   r`   to_datetimerH   r   r   rE   Zto_numpyr   r#   r#   r$   test_sel_datetime   s     z!TestPandasIndex.test_sel_datetimec              	   C  sD   t tdddgd}tt |dtddi W 5 Q R X d S )NZ20012000Z2002r/   )r
   r`   r   r4   r5   r   rH   slicer?   r#   r#   r$   'test_sel_unsorted_datetime_index_raises   s    z7TestPandasIndex.test_sel_unsorted_datetime_index_raisesc                 C  s6   t dddgd}t dddgd}||dks2td S )Nr   r   rV   r/   T)r
   rP   r   )r)   index1index2r#   r#   r$   rQ     s    zTestPandasIndex.test_equalsc                 C  s   t dddgddd}t dddgddd}t ddgd}||}t|j ||sXt|jd	ksftt ddddgd}|j|d
d}t|j ||st|jd	kstd S )Nr   aaZaaar/   z<U3r   Zaaaaz<U4z=U4outerhow)r
   rL   printr1   rP   r   r{   )r)   r   r   r   r   r#   r#   r$   rM     s    


zTestPandasIndex.test_joinc              	   C  s   t dddgd}t ddddgd}dddddgi}||}| | ksPttj|d |d  t dddgd}tjt	dd	 || W 5 Q R X d S )
Nr   r   r   r/   rV   rq   z.*index has duplicate valuesrt   )
r
   rN   keysr   r   r   r   r4   r5   r|   )r)   r   r   r   r   Zindex3r#   r#   r$   rO     s    
z!TestPandasIndex.test_reindex_likec                 C  s   t tjdddgdddtjd}|i i }||ks8t|ddii }|jjdksXt|j	dksft|j
tjksvt|i dd	i}|jjdkst|j	d	kst|j
tjkstd S )
Nr   r   rV   r   r   r/   r   r   rK   )r
   r`   r   r   int32rS   r   r1   rb   ra   r{   )r)   r1   	new_indexr#   r#   r$   rT   $  s     zTestPandasIndex.test_renamec                 C  sd   t dddgdtjd}| }|j|js0t|j|jk	s@t|j|jksPt|j|jks`td S Nr   r   rV   r/   r   )	r
   r   r   rW   r1   rP   r   ra   r{   )r)   r   r   r#   r#   r$   rZ   5  s    zTestPandasIndex.test_copyc                 C  sh   t dddg}t|dtjd}|dd  }|j|dd  sDt|j|jksTt|j	|j	ksdtd S r   )
r`   r   r
   r   r   r1   rP   r   ra   r{   )r)   rd   r   r   r#   r#   r$   r[   >  s    zTestPandasIndex.test_getitemN)r+   r,   r-   re   r8   r   r   r4   r]   r^   strbytesr   r   r   rC   rF   rI   r   r   r   rQ   rM   rO   rT   rZ   r[   r#   r#   r#   r$   r_   u   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 ZddddZddddZdS )TestPandasMultiIndexr   r   c              	   C  s   t jdddgdd}t jdddgdd}tjj||gd	d
}t|d}|jdksTt|j	|sdt|jj
d	kstt|jjdkst|j|j|jd	ksttjtdd t|d W 5 Q R X tj||g}t|d}|jj
dkstd S )Nr   r   int64ri   rf   333333??rz   rv   r~   namesr/   z&.*conflicting multi-index level name.*rt   rv   )Z	x_level_0Z	x_level_1)r   rw   r`   
MultiIndexfrom_arraysr   ra   r   r1   rP   r   rb   level_coords_dtyperj   r4   r5   r|   )r)   foo_databar_datard   r1   r#   r#   r$   re   I  s"    

z%TestPandasMultiIndex.test_constructorc              	   C  s8  t jddddgddidtjid}t jdd	d
dgddiddid}tj||di d}tj|j	|j	g}|j
dksxt|j|st|jjdkst|jjddgkstt ddddgdddgg}tjtdd tjd|ii d W 5 Q R X t ddddg}tjtdd tj||di d W 5 Q R X d S )Nr/   r   r   rV   rk   rl   rj   rm   r   r   cU)level1level2r2   r   r   rp   rq   rr   rs   z(.*only accepts 1-dimensional variables.*rt   rA   rK   z0unmatched dimensions for multi-index variables.*)r   Zlevel3)ry   r   r   r   r   r7   r`   r   r   r}   ra   r   r1   rP   rb   r   r4   r5   r|   )r)   Zv_level1Zv_level2r1   Zexpected_idxrA   Zv_level3r#   r#   r$   r8   a  sH              z(TestPandasMultiIndex.test_from_variablesc                 C  s   t jjdddgddggdd}tjdd}t|d d d	|d
}t|dd  d	|d
}t|d	|d
}t||gd	}||st|j	|j	kstd S )Nr   r   r   r   r   r   r   z=U1r/   r   )
r`   r   from_productr   r   r   r:   rP   r   r   )r)   pd_midxr   Zmidx1Zmidx2r   r   r#   r#   r$   r;     s&     
  
  z TestPandasMultiIndex.test_concatc              
   C  s   t jdtddgddidt dtdd	d
gd}t|d}|jdksRt|jj	ddgksftt
j|jjddddddgddd
ddd
gg tjtdd0 tt dddgt ddd
gdd W 5 Q R X d S )Nr/   r   r   rv   r~   rn   rK   r   rV   r   rp   zr   z0conflicting dimensions for multi-index product.*rt   )r/   Zx2)ry   r   r`   r   r   r<   ra   r   r1   r   r   r   r   codesr4   r5   r|   r)   Z	prod_varsr1   r#   r#   r$   r=     s$       zTestPandasMultiIndex.test_stackc              
   C  s   t jdtddgddidt dtddd	gd
}t|d}tj|j	j
ddddddgddddddgg tj|j	jd ddg tj|j	jd dd	g d S )Nr/   r   r   rv   r~   r   rK   r   r   rp   r   r   )ry   r   r`   r   r   r<   r   r   r   r1   r   levelsr   r#   r#   r$   test_stack_non_unique  s     z*TestPandasMultiIndex.test_stack_non_uniquec                 C  s   t jjddgdddggddgd}t|d	}| \}}t|ddgksLt|d tddgdsht|d tdddgdst||std S )
Nr   r   r   r   rV   r   twor   r/   )	r`   r   r   r   r>   r   r   rP   r
   )r)   r   r1   Znew_indexesZ
new_pd_idxr#   r#   r$   r@     s     
z!TestPandasMultiIndex.test_unstackc           	      C  s   t jdddgdd}t jdddgdd}tjj||gd	d
}td|td|ddidtd|ddidd}t|d}||}| D ]J\}}t	|| | || j
|j
kst|dkr|| j
|j| kstqd S )Nr   r   r   ri   rf   r   r   rz   r   r   r/   rk   rl   r   r   )ro   )r/   rv   r~   )r   rw   r`   r   r   r   r   rB   itemsr   rj   r   r   )	r)   r   r   rd   r   r1   r   kr   r#   r#   r$   rC     s    

z*TestPandasMultiIndex.test_create_variablesc              	   C  s(  t tjjddgddggddd}|dtdd	i}dtd
di}|j|ksRttj	t
dd |dd
gi W 5 Q R X t	t
 |dd
i W 5 Q R X tj	tdd |d
dd W 5 Q R X tj	tdd |ddd
ii W 5 Q R X t	t |dtd ddfi W 5 Q R X d S )Nr   r   r   r   r   r   r   r/   r   )r   r   r   rq   r   rt   z cannot provide labels for both.*)r   r/   zinvalid multi-index level namesthreeZno_level)r   r`   r   r   rH   r   r   r   r4   r5   r   r|   
IndexErrorr   r#   r#   r$   rI     s"     zTestPandasMultiIndex.test_selc                 C  s   t jjddgddggdd}ddd}t|d	|d
}t|dd d	|d
}||}||sbt|j|kspt|j|dd}||st|j|kstd S )Nr   r   r   r   r   r   z=U2ir/   r   r   r   r   )r`   r   r   r   rL   rP   r   r   )r)   Zmidxr   r   r   r   r#   r#   r$   rM     s    

zTestPandasMultiIndex.test_joinc                 C  s   dt jd}ttjjddgddggddd|d	}|i i }||ksJt|d
dii }|jj	ddgksnt|j
dks|t|jdt jdkst|i ddi}|jj	dd
gkst|j
dkst|j|kstd S )Nz<U1r   r   r   r   r   r   r/   r   r   r   r   )r   r   rK   )r   r   r   r`   r   r   rS   r   r1   r   ra   r   )r)   r   r1   r   r#   r#   r$   rT     s     z TestPandasMultiIndex.test_renamec                 C  s   dt jd}ttjjddgddggddd|d	}| }|j|jsLt	|j|jk	s\t	|j
|j
kslt	|j|jks|t	d S )
NzU<1r   r   r   r   r   r   r/   r   )r   r   r   r`   r   r   rW   r1   rP   r   ra   r   )r)   r   r   r   r#   r#   r$   rZ     s    zTestPandasMultiIndex.test_copyN)r+   r,   r-   re   r8   r;   r=   r   r@   rC   rI   rM   rT   rZ   r#   r#   r#   r$   r   H  s    r   c                   @  s   e Zd ZejddddZejddgdddd	d
ZejddddZddddZddddZ	ddddZ
ddddZddddZddddZddddZdd Zdddd Zddd!d"Zd#S )$TestIndexesz2tuple[list[PandasIndex], dict[Hashable, Variable]]r   c                 C  s   t tjdddgddd}t tjdddgd	dd	}tjjd
dgddggddgd}t|d}|||g}i }|D ]}||  qp||fS )Nr   r   rV   r/   r   rq   rr   rs   rK   r   r   r   r   r   r   )r
   r`   r   r   r   r   updaterB   )r)   x_idxy_idxZ	z_pd_midxz_midxr   	variablesr   r#   r#   r$   indexes_and_vars  s     

zTestIndexes.indexes_and_varspd_indexZxr_index)paramsz"list[PandasIndex] | list[pd.Index]c                 C  s(   |\}}|j dkr dd |D S |S d S )Nr   c                 S  s   g | ]
}|j qS r#   )r1   .0r   r#   r#   r$   
<listcomp>7  s     z.TestIndexes.unique_indexes.<locals>.<listcomp>)param)r)   requestr   Z
xr_indexes_r#   r#   r$   unique_indexes0  s    
zTestIndexes.unique_indexesz"Indexes[Index] | Indexes[pd.Index]c           	      C  s,   |\}}}|||||d}|\}}t ||S N)r/   rK   r   r   r   )r	   )	r)   r   r   r   r   r   r   r   r   r#   r#   r$   r   ;  s    
zTestIndexes.indexesr   c                 C  sR   |d }t |dddddgks"tt|dks2td|ks>t|d |ksNtd S )Nr   r/   rK   r   r   r   rr   )r   r   len)r)   r   r   r   r#   r#   r$   test_interfaceL  s
    zTestIndexes.test_interfacec                 C  s   t |jdkstd S r   )tupler   r   r   r#   r#   r$   test_variablesS  s    zTestIndexes.test_variablesc                 C  s   |j ddddkstd S )NrV   rq   )r/   rK   r   )r(   r   r   r#   r#   r$   	test_dimsV  s    zTestIndexes.test_dimsc                 C  s   |  |kstd S r'   )Z
get_uniquer   )r)   r   r   r#   r#   r$   test_get_uniqueY  s    zTestIndexes.test_get_uniquec                 C  s(   | ddkst| ddks$td S )Nr   Tr/   F)Zis_multir   r   r#   r#   r$   test_is_multi\  s    zTestIndexes.test_is_multic              	   C  s   |j d |j d |j d d}|d|ks0ttjtdd |jddd	 W 5 Q R X tjtd
d |d W 5 Q R X |jddd	i kstd S )Nr   r   r   r   r   r   zerrors must be.*rt   r/   invalid)errorszno index found.*Zno_coordignore)r   Zget_all_coordsr   r4   r5   r|   r)   r   r   r#   r#   r$   test_get_all_coords`  s    zTestIndexes.test_get_all_coordsc                 C  s   ddi}| d|kstd S )Nr   rq   r   )Zget_all_dimsr   r   r#   r#   r$   test_get_all_dimsp  s    zTestIndexes.test_get_all_dimsc                 C  sd   |d d|j d if|d d|j d if|d |j d |j d |j d d	fg}| |ks`td S )
Nr   r/   r   rK   r   r   r   r   r   )r   Zgroup_by_indexr   )r)   r   r   r   r#   r#   r$   test_group_by_indext  s    zTestIndexes.test_group_by_indexc                 C  sD   |  }t|tsttdd | D s0t|j|jks@td S )Nc                 S  s   g | ]}t |tjqS r#   )r   r`   r   r   r#   r#   r$   r     s     z6TestIndexes.test_to_pandas_indexes.<locals>.<listcomp>)Zto_pandas_indexesr   r	   r   allvaluesr   )r)   r   Z
pd_indexesr#   r#   r$   test_to_pandas_indexes  s    z"TestIndexes.test_to_pandas_indexesc                 C  s   |  \}}| | ks tt| | D ]\}}||s2tq2|d |d   krj|d kspn t| |j kstt| |j D ]\}}t|| qd S )Nr   r   r   )Zcopy_indexesr   r   zipr   rP   r   r   )r)   r   rY   r   neworiginalr#   r#   r$   test_copy_indexes  s    &zTestIndexes.test_copy_indexesN)r+   r,   r-   r4   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   r     s    
r   c                  C  s   t jddd} td}|tdd }| | jft j|td|tft ||ft j|td|tffD ]*\}}t	|}t
|| |j|jksltqld S )Nr   r   r   rr   r   Dri   )r`   Z
date_ranger   ZarangeZtimedelta64r   r   objectZastyper   r   rj   r   )datesr/   tdr   rw   r   r#   r#   r$   test_safe_cast_to_index  s    

r   c                    sr   t  } |  D ]^  fddtddD }t|}tt|}t|| |j|jksZt	t
|t|st	qd S )Nc                   s   g | ]} d d |qS r   r#   r   dayZ	date_typer#   r$   r     s     z7test_safe_cast_to_index_cftimeindex.<locals>.<listcomp>r      )r   r   r   r   r   r   rw   r   rj   r   r   type)Z
date_typesr   r   r   r#   r  r$   #test_safe_cast_to_index_cftimeindex  s    
r  c                  C  sJ   dd t ddD } t| }tt| }t|| t|tjsFtd S )Nc                 S  s   g | ]}t d d |qS r   r   r   r#   r#   r$   r     s     z=test_safe_cast_to_index_datetime_datetime.<locals>.<listcomp>r   r  )	r   r`   r   r   r   rw   r   r   r   )r   r   r   r#   r#   r$   )test_safe_cast_to_index_datetime_datetime  s
    

r  rj   r   rx   r   )rj   r   c                 C  sJ   t jddtjddg| dfid}|jdd}t|d jj| ksFtd S )Nr~   r   r   ri   )Zcoords)r~   )Zbaz)	ry   ZDatasetr   rw   r<   r   r   rj   r   )rj   rv   r#   r#   r$   "test_restore_dtype_on_multiindexes  s    "r  ),
__future__r   rW   r   typingr   Znumpyr   Zpandasr`   r4   Zxarrayry   Zxarray.coding.cftimeindexr   Zxarray.core.indexesr   r   r	   r
   r   r   r   Zxarray.core.variabler   r   Zxarray.testsr   r   r   Zxarray.tests.test_coding_timesr   r%   r&   r.   r_   r   r   r   r  r  r]   r^   r  r#   r#   r#   r$   <module>   s6   $	I T Wz

	