
    dd                       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Z  G d de          Z! G d d          Z" G d d          Z# G d d          Z$ G d d          Z%d Z&ed             Z'ed             Z(e
j)        *                    dddg          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returnNonec                    t          d          } t          | t          j                  sJ | j        dk    sJ |                                 dk    sJ t          ddg          } | j        dk    sJ | d         dk    sJ | d         dk    sJ d S )Na   r   )r   r   )   r   )r   
isinstancenpndarrayndimitemshape)ress    9lib/python3.11/site-packages/xarray/tests/test_indexes.pytest_asarray_tuplesafer%      s    
X
&
&Cc2:&&&&&8q====88::!!!!
dD\
*
*C9q6T>>>>q6T>>>>>>    c                      e Zd ZddZdS )CustomIndexr   r   c                    || _         d S Ndims)selfr,   s     r$   __init__zCustomIndex.__init__(   s    			r&   Nr   r   )__name__
__module____qualname__r.    r&   r$   r(   r(   '   s(             r&   r(   c                      e Zd Zej        dd            ZddZddZddZddZ	dd	Z
dd
ZddZddZddZddZddZddZddZej                            dddg          dd            ZddZdS )	TestIndexr   r(   c                $    t          ddi          S )Nxr   )r(   r-   s    r$   indexzTestIndex.index-   s    C8$$$r&   r   c                    t          j        t                    5  t          j        i i            d d d            d S # 1 swxY w Y   d S )Noptions)pytestraisesNotImplementedErrorr	   from_variablesr8   s    r$   test_from_variableszTestIndex.test_from_variables1   s    ].// 	1 	1 R0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   >AAc                    t          j        t                    5  t          j        g d           d d d            d S # 1 swxY w Y   d S Nr7   )r=   r>   r?   r	   concatr8   s    r$   test_concatzTestIndex.test_concat5   s    ].// 	" 	"LS!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"   =AAc                    t          j        t                    5  t          j        i d           d d d            d S # 1 swxY w Y   d S rC   )r=   r>   r?   r	   stackr8   s    r$   
test_stackzTestIndex.test_stack9   s    ].// 	! 	!KC   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!rF   c                    t          j        t                    5  |                                 d d d            d S # 1 swxY w Y   d S r*   )r=   r>   r?   unstackr-   r9   s     r$   test_unstackzTestIndex.test_unstack=   s    ].// 	 	MMOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   <A A c                x    |                                 i k    sJ |                     ddi          ddik    sJ d S )Nr7   var)create_variablesrL   s     r$   test_create_variableszTestIndex.test_create_variablesA   sL    %%''2----%%sEl33U|CCCCCCr&   c                    t          j        t                    5  |                                 d d d            d S # 1 swxY w Y   d S r*   )r=   r>   	TypeErrorto_pandas_indexrL   s     r$   test_to_pandas_indexzTestIndex.test_to_pandas_indexE   s    ]9%% 	$ 	$!!###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$rN   c                4    |                     i           J d S r*   )iselrL   s     r$   	test_iselzTestIndex.test_iselI       zz"~~%%%%%r&   c                    t          j        t                    5  |                    i            d d d            d S # 1 swxY w Y   d S r*   )r=   r>   r?   selrL   s     r$   test_selzTestIndex.test_selL   s    ].// 	 	IIbMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	rF   c                    t          j        t                    5  |                    t	          ddi                     d d d            d S # 1 swxY w Y   d S Nyr   )r=   r>   r?   joinr(   rL   s     r$   	test_joinzTestIndex.test_joinP   s    ].// 	. 	.JJ{C8,,---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.   %AAAc                    t          j        t                    5  |                    t	          ddi                     d d d            d S # 1 swxY w Y   d S r_   )r=   r>   r?   reindex_liker(   rL   s     r$   test_reindex_likezTestIndex.test_reindex_likeT   s    ].// 	6 	6{C844555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6rc   c                    t          j        t                    5  |                    t	          ddi                     d d d            d S # 1 swxY w Y   d S r_   )r=   r>   r?   equalsr(   rL   s     r$   test_equalszTestIndex.test_equalsX   s    ].// 	0 	0LLc1X..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0rc   c                4    |                     i           J d S r*   )rollrL   s     r$   	test_rollzTestIndex.test_roll\   rZ   r&   c                :    |                     i i           |u sJ d S r*   )renamerL   s     r$   test_renamezTestIndex.test_rename_   s'    ||B##u,,,,,,r&   deepTFc                X   |                     |          }t          |t                    sJ ||usJ d|j        d<   |r8|j        |j        k    sJ |j        t          j        |          j        k    sJ d S |j        |j        u sJ |j        t          j         |          j        u sJ d S )N)rp      r7   )copyr   r(   r,   deepcopy)r-   r9   rp   copieds       r$   	test_copyzTestIndex.test_copyb   s    &&&+.....U""""C 	8;%*,,,,;$-"6"6";;;;;;;;%*,,,,;$)E"2"2"7777777r&   c                ~    t          j        t                    5  |d d           d d d            d S # 1 swxY w Y   d S r*   )r=   r>   r?   rL   s     r$   test_getitemzTestIndex.test_getitemp   s    ].// 	 	!!!HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   266N)r   r(   r/   )r0   r1   r2   r=   fixturer9   rA   rE   rI   rM   rR   rV   rY   r]   rb   rf   ri   rl   ro   markparametrizerv   rx   r3   r&   r$   r5   r5   ,   s       ^% % % ^%1 1 1 1" " " "! ! ! !   D D D D$ $ $ $& & & &   . . . .6 6 6 60 0 0 0& & & &- - - - [VdE]338 8 8 438     r&   r5   c                      e Zd ZddZddZddZd Zej        	                    de
eg          dd            Zdd	Zdd
ZddZddZddZddZddZddZddZddZddZddZddZddZdS )TestPandasIndexr   r   c                   t          j        g d          }t          |d          }|j                            |          sJ |j        |usJ |j        dk    sJ d |_        t          |d          }|j        j        dk    sJ d S )Nr   r   rr   r7   )pdr	   r   r9   rh   dimnamer-   pd_idxr9   s      r$   test_constructorz TestPandasIndex.test_constructorv   s    )))$$FC(({!!&))))){&((((yC FC(({3&&&&&&r&   c                   t          j        g dt           j                  }t          j        d|ddidt           j        i          }t          j        d|ii           }|j        dk    sJ |j	        
                    t          j        |                    sJ |j        |j        k    sJ t          j        d	g d
g dg          }t          j        t"          d          5  t          j        ||di            d d d            n# 1 swxY w Y   t          j        t"          d          5  t          j        d|ii            d d d            d S # 1 swxY w Y   d S )N皙?g@gffffff
@dtyper7   unitmr   attrsencodingr;   r7   r`   r            z.*only accepts one variable.*match)r7   fooz).*only accepts a 1-dimensional variable.*r   )r   arrayfloat32xrr   float64r   r@   r   r9   rh   r   r	   coord_dtyper   r=   r>   
ValueError)r-   datarP   r9   var2s        r$   rA   z#TestPandasIndex.test_from_variables   s   xrz:::kfc]grz5J
 
 
 *C:rBBByC{!!"(4..11111 DJ....{:			999'=>>]:-MNNN 	L 	L&S'>'>KKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L ]J
 
 
 	B 	B &t}bAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs$   $D

DD0EEEc                    t          j        ddgd          }t          j        |          }t          j        d|          }t          j        d|ii           }t          |j        t           j	                  sJ d S )Nr   barcategoryr   r7   r;   )
r   Seriesr	   r   r   r   r@   r   r9   CategoricalIndex)r-   r   r   rP   r9   s        r$   !test_from_variables_index_adapterz1TestPandasIndex.test_from_variables_index_adapter   sr    y%z:::$k#v&&*C:rBBB%+r':;;;;;;;r&   c                ^   t          j        dd          }t          |d d         d          t          |dd          d          g}t          |d          }t          j        |d          }|                    |          sJ t          |j        t           j                  sJ t          t          d                    t          t          dd                    g}t          j        |d|          }|                    |          sJ t          |j        t           j                  sJ d S )N
2000-01-01
   periodsr   t)r   )r   	positions)
r   period_ranger   rD   rh   r   r9   PeriodIndexlistrange)r-   r   indexesexpectedactualr   s         r$   test_concat_periodsz#TestPandasIndex.test_concat_periods   s   /,;;;wrr{C00+gabbk32O2OPw,,#G555}}X&&&&&&,77777%((^^T%2,,%7%78	#G	JJJ}}X&&&&&&,7777777r&   r   c                   t          t          j        dg|          d|          }t          t          j        dg|          d|          }t          t          j        ddg|          d|          }t          j        ||gd          }|                    |          sJ t          j        |j        |          sJ d S )Nr   r   r7   r   b)r   r   r   rD   rh   
issubdtyper   )r-   r   r   r   r   r   s         r$   test_concat_str_dtypez%TestPandasIndex.test_concat_str_dtype   s    #e444cuMMM#e444cuMMMHc3Zu---s
 
 
 #QFC00}}X&&&&&}V/7777777r&   c                j    t          j        g d          }|j        t          j        d          u sJ d S )Nr7   O)r   rD   r   r   r   )r-   idxs     r$   test_concat_emptyz!TestPandasIndex.test_concat_empty   s5     S))"(3--//////r&   c                    t          ddgd          t          ddgd          g}t          j        t          d          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )	Nr   r   r7   r   rr   r`   z Cannot concatenate.*dimensions.*r   )r   r=   r>   r   rD   r-   r   s     r$   test_concat_dim_errorz%TestPandasIndex.test_concat_dim_error   s    1vs++[!Q-E-EF]:-PQQQ 	- 	-w,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s    A##A'*A'c                   t          j        g dt           j                  }t          j        |d          }t          |d|j                  }dt          d|ddid	d
i          i}|                    |          }t          |d         |d                    |d         j        |d         j        k    sJ |d         j        |j
        k    sJ d S )Nr   r   r   r   r7   r   r   r   
fill_value        r   )r   r   r   r   r	   r   r   r   rQ   r   r   )r-   r   r   r9   
index_varsr   s         r$   rR   z%TestPandasIndex.test_create_variables   s    xrz:::$U+++FCTZ@@@=T&#,9L  

 ''
33
5(9:::e}"j&7&=====e}"e&7777777r&   c                    t          j        g dd          }t          |d          }|                                |j        u sJ d S )Nr   r   r   r7   )r   r	   r   rU   r9   r   s      r$   rV   z$TestPandasIndex.test_to_pandas_index   sN    )))%000FC(($$&&%+555555r&   c                   t          t          j        g d          d          }t          j        t
          d          5  |                    ddgi           d d d            n# 1 swxY w Y   t          j        t
                    5  |                    ddi           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    dddii           d d d            d S # 1 swxY w Y   d S )Nr   r7   not all values foundr   r   zdoes not have a MultiIndexone)r   r   r	   r=   r>   KeyErrorr\   r   rL   s     r$   r]   zTestPandasIndex.test_sel   s   BHYYY//55]8+BCCC 	" 	"IIsQCj!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]8$$ 	  	 IIsAh	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 ]:-JKKK 	) 	)IIsUAJ'(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s6    A%%A),A)	B--B14B1C::C>C>c                    t          t          j        g d          d          }|                    dg di          }dg di}t          j                            |j        d         |d                    d S )N)r   g       @g      ?g      @r7   )FTFT)r   r   r	   r\   r   testingr   dim_indexersr-   r9   r   expected_dim_indexerss       r$   test_sel_booleanz TestPandasIndex.test_sel_boolean   s     BH%9%9%9::C@@C!;!;!;<==!$&@&@&@ A

%%$&;C&@	
 	
 	
 	
 	
r&   c                :   t          t          j        g d          d          }|                    ddi          }ddi}|j        |k    sJ |                    d|                                                                d         i          }|j        |k    sJ d S )N)r   
2001-01-01z
2002-01-01r7   r   r   )r   r   to_datetimer\   r   rU   to_numpyr   s       r$   test_sel_datetimez!TestPandasIndex.test_sel_datetime   s    NEEEFF
 
 C.//!$a"&;;;;;C!6!6!8!8!A!A!C!CA!FGHH"&;;;;;;;r&   c                    t          t          j        g d          d          }t          j        t
                    5  |                    dt          dd          i           d d d            d S # 1 swxY w Y   d S )N)200120002002r7   r   r   )r   r   r   r=   r>   r   r\   slicerL   s     r$   'test_sel_unsorted_datetime_index_raisesz7TestPandasIndex.test_sel_unsorted_datetime_index_raises   s    BN+C+C+CDDcJJ]8$$ 	4 	4 IIsE&&112333		4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   &A11A58A5c                    t          g dd          }t          g dd          }|                    |          du sJ d S )Nr   r7   T)r   rh   )r-   index1index2s      r$   ri   zTestPandasIndex.test_equals  sK    YYY,,YYY,,}}V$$,,,,,,r&   c                   t          g ddd          }t          g ddd          }t          ddgd          }|                    |          }t          |j                   |                    |          sJ |j        d	k    sJ t          g d
d          }|                    |d          }t          |j                   |                    |          sJ |j        d	k    sJ d S )N)r   aaaaar7   z<U3r   )r   r   aaaaz<U4r   r   z=U4)r   r   r   r   outerhow)r   ra   printr9   rh   r   )r-   r   r   r   r   s        r$   rb   zTestPandasIndex.test_join  s   ///%HHH222CUKKKe}c22V$$fl}}X&&&&&!U****9993??V11fl}}X&&&&&!U******r&   c                   t          g dd          }t          g dd          }dg di}|                    |          }|                                |                                k    sJ t          j                            |d         |d                    t          g dd          }t          j        t          d          5  |                    |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r7   )r   r   rr   r   )r   r   r   r   r   r   z.*index has duplicate valuesr   )	r   re   keysr   r   r   r=   r>   r   )r-   r   r   r   r   index3s         r$   rf   z!TestPandasIndex.test_reindex_like  s+   YYY,,\\\3//($$V,,{{}}////

%%fSk8C=AAAYYY,,]:-LMMM 	( 	('''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   C((C,/C,c                   t          t          j        g dd          dt          j                  }|                    i i           }||u sJ |                    ddii           }|j        j        dk    sJ |j        dk    sJ |j	        t          j        k    sJ |                    i ddi          }|j        j        dk    sJ |j        dk    sJ |j	        t          j        k    sJ d S )Nr   r   r   r7   r   r   r`   )
r   r   r	   r   int32rn   r9   r   r   r   )r-   r9   	new_indexs      r$   ro   zTestPandasIndex.test_rename#  s   BHYYYS9993BHUUU LLR((	E!!!!LL#sR00	#s****}####$0000LLc3Z00	#s****}####$000000r&   c                   t          g ddt          j                  }|                                }|j                            |j                  sJ |j        |j        usJ |j        |j        k    sJ |j        |j        k    sJ d S )Nr   r7   r   )r   r   r   rs   r9   rh   r   r   )r-   r   r   s      r$   rv   zTestPandasIndex.test_copy4  s    yyy#28DDD|""8>22222|8>1111zX\))))!X%9999999r&   c                   t          j        g d          }t          |dt          j                  }|dd          }|j                            |dd                    sJ |j        |j        k    sJ |j        |j        k    sJ d S )Nr   r7   r   r   )	r   r	   r   r   r   r9   rh   r   r   )r-   r   r   r   s       r$   rx   zTestPandasIndex.test_getitem=  s    )))$$vsAAA!""|""6!"":.....zX\))))!X%9999999r&   Nr/   )r0   r1   r2   r   rA   r   r   r=   rz   r{   strbytesr   r   r   rR   rV   r]   r   r   r   ri   rb   rf   ro   rv   rx   r3   r&   r$   r}   r}   u   s       ' ' ' 'B B B B*< < < <8 8 8 [WsEl33	8 	8 	8 43	80 0 0 0- - - -8 8 8 8 6 6 6 6
) ) ) )
 
 
 
	< 	< 	< 	<4 4 4 4- - - -
+ + + + ( ( ( (1 1 1 1": : : :: : : : : :r&   r}   c                  d    e Zd ZddZddZddZddZddZddZdd	Z	dd
Z
d ZddZddZdS )TestPandasMultiIndexr   r   c                   t          j        g dd          }t          j        g dd          }t          j                            ||gd          }t          |d          }|j        dk    sJ |j                            |          sJ |j        j	        dk    sJ |j        j
        dk    sJ |j        |j        |j        dk    sJ t          j        t          d	
          5  t          |d           d d d            n# 1 swxY w Y   t          j                            ||g          }t          |d          }|j        j	        dk    sJ d S )Nr   r   r   int64r   r   g333333?g?r   r   r   namesr7   z&.*conflicting multi-index level name.*r   r   )	x_level_0	x_level_1)r   r   r   
MultiIndexfrom_arraysr   r   r9   rh   r   r   level_coords_dtyper   r=   r>   r   )r-   foo_databar_datar   r9   s        r$   r   z%TestPandasMultiIndex.test_constructorH  s   8IIIW5558OOO9===**Hh+?~*VV --yC{!!&))))){ N2222{3&&&&'>>,
 ,
 
 
 
 

 ]:-UVVV 	, 	,VU+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, **Hh+?@@ --{ $>>>>>>>s   &DD
Dc                L   t          j        dg dddidt          j        i          }t          j        dg dddiddi          }t	          j        ||d	i 
          }t          j                            |j	        |j	        g          }|j
        dk    sJ |j                            |          sJ |j        j        dk    sJ |j        j        ddgk    sJ t          j        dg dg dg          }t          j        t"          d          5  t	          j        d|ii 
           d d d            n# 1 swxY w Y   t          j        dg d          }t          j        t"          d          5  t	          j        ||di 
           d d d            d S # 1 swxY w Y   d S )Nr7   r   r   r   r   r   )r   r   cU)level1level2r;   r  r  r   r   z(.*only accepts 1-dimensional variables.*r   rP   r`   z0unmatched dimensions for multi-index variables.*)r  level3)r   r   r   r   r   r@   r   r   r   r   r   r9   rh   r   r   r=   r>   r   )r-   v_level1v_level2r9   expected_idxrP   v_level3s          r$   rA   z(TestPandasMultiIndex.test_from_variables`  s   ;63-7BH:M
 
 
 ;#
 
 
 !/844b
 
 
 }00(-1OPPyC{!!,/////{3&&&&{ Xx$88888k*yyy)))&<==]I
 
 
 	F 	F +UCL"EEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F
 ;sIII..]Q
 
 
 	 	 +#x88"   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   D55D9<D92FF Fc                ~   t           j                            g dddggd          }t          j        dd}t          |d d         d|	          }t          |dd          d|	          }t          |d|	          }t          j        ||gd          }|                    |          sJ |j        |j        k    sJ d S )
Nr   r   r   r   r   z=U1r   r7   r  )	r   r   from_productr   r   r   rD   rh   r  )r-   pd_midxr  midx1midx2r   r   s          r$   rE   z TestPandasMultiIndex.test_concat  s    -,,YYc
#> - 
 
 &(Xe<< BQBK1C
 
 
 !ABBK1C
 
 
 $GSEWXXX!(%==}}X&&&&&(H,GGGGGGGr&   c           	     l   t          j        dt          j        ddg          ddi          t          j        dt          j        g d                    d	}t	          j        |d
          }|j        d
k    sJ |j        j        ddgk    sJ t          j
                            |j        j        g dg dg           t          j        t          d          5  t	          j        t          j        dddg          t          j        dddg          dd
           d d d            d S # 1 swxY w Y   d S )Nr7   r   r   r   r   r   r`   )r   rr   r   r   zr   r   r   r   r   r   )r   r   r   r   r   r   z0conflicting dimensions for multi-index product.*r   r   r   )r7   x2)r   r   r   r	   r   rH   r   r9   r   r   r   r   codesr=   r>   r   r-   	prod_varsr9   s      r$   rI   zTestPandasMultiIndex.test_stack  s   S"(C:"6"6uenMMMS"(999"5"566
 
	
 !&y#66yC{ S#J....

%%K 2 2 24F4F4FG	
 	
 	
 ]Q
 
 
 	 	 "k#Sz22"+cAq6:R:RSS  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AD))D-0D-c                   t          j        dt          j        ddg          ddi          t          j        dt          j        g d                    d	}t	          j        |d
          }t          j                            |j	        j
        g dg dg           t          j                            |j	        j        d         ddg           t          j                            |j	        j        d         ddg           d S )Nr7   r   r   r   r   r  r`   r   r   r  r  )r   r   r   r   r   r   r   r   r   )r   r   r   r	   r   rH   r   r   r   r9   r  levelsr  s      r$   test_stack_non_uniquez*TestPandasMultiIndex.test_stack_non_unique  s    S"(C:"6"6uenMMMS"(999"5"566
 
	
 !&y#66

%%K 2 2 24F4F4FG	
 	
 	
 	
%%ek&8&;c3ZHHH

%%ek&8&;aVDDDDDr&   c                   t           j                            ddgg dgddg          }t          |d          }|                                \  }}t          |          ddgk    sJ |d                             t          ddgd                    sJ |d                             t          g dd                    sJ |                    |          sJ d S )Nr   r   r   r   twor   r7   )r   r   r  r   rK   r   rh   r   )r-   r  r9   new_indexes
new_pd_idxs        r$   rM   z!TestPandasMultiIndex.test_unstack  s    -,,3Z#E5> - 
 
 !#.."'--//ZK  UEN22225!((c3Z)G)GHHHHH5!((YYY)F)FGGGGG  )))))))r&   c                >   t          j        g dd          }t          j        g dd          }t          j                            ||gd          }t          d|          t          d|d	d
i          t          d|ddi          d}t          |d          }|                    |          }|                                D ]W\  }}t          ||         |           ||         j
        |j
        k    sJ |dk    r||         j
        |j        |         k    sJ Xd S )Nr   r   r   r   r   r   r   r7   r   r   r  r   r   )r   )r7   r   r   )r   r   r   r   r   r   r   rQ   itemsr   r   r  )	r-   r  r  r   r   r9   r   kr   s	            r$   rR   z*TestPandasMultiIndex.test_create_variables  s>   8IIIW5558OOO9===**Hh+?~*VVsF++ hvsmDDD h,9JKKK
 

 !--''
33%++-- 	F 	FKAxVAY111!9?hn4444Cxxay%*B1*EEEEE		F 	Fr&   c                   t          t          j                            ddgddggd          d          }|                    dt          dd	          i          }dt          d
d          i}|j        |k    sJ t          j        t          d          5  |                    dd
gi           d d d            n# 1 swxY w Y   t          j        t                    5  |                    dd
i           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    d
dd           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    ddd
ii           d d d            n# 1 swxY w Y   t          j        t                    5  |                    dt          d           ddfi           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   r   r   r7   r   )r   r   r   r   r   r   z cannot provide labels for both.*)r   r7   zinvalid multi-index level namesthreeno_level)r   r   r   r  r\   r   r   r=   r>   r   r   
IndexErrorr   s       r$   r]   zTestPandasMultiIndex.test_sel  s$    M&&c
QF';>&RRTW
 

 Cx!:!:;<<!$eAqkk 2"&;;;;;]8+BCCC 	" 	"IIsQCj!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]8$$ 	  	 IIsAh	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 ]:-PQQQ 	, 	,IIac**+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]:-OPPP 	+ 	+IIsWaL)***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+]:&& 	; 	;IIsU4[[!Z89:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;sZ   B::B>B>DD	D(EEE3FF F=(G22G69G6c                   t           j                            ddgddggd          }ddd}t          |d	|
          }t          |dd         d	|
          }|                    |          }|                    |          sJ |j        |k    sJ |                    |d          }|                    |          sJ |j        |k    sJ d S )Nr   r   r   r   r'  r   z=U2ir7   r  r   r   r   )r   r   r  r   ra   rh   r  )r-   midxr  r   r   r   s         r$   rb   zTestPandasMultiIndex.test_join  s    }))C;A*?~)VV%*377!$@RSSS!$qs)SEWXXXV$$}}V$$$$$(,>>>>>V11}}V$$$$$(,>>>>>>>r&   c                   dt           j        d}t          t          j                            ddgddggd          d|	          }|                    i i           }||u sJ |                    d
dii           }|j        j        ddgk    sJ |j	        dk    sJ |j
        dt           j        dk    sJ |                    i ddi          }|j        j        dd
gk    sJ |j	        dk    sJ |j
        |k    sJ d S )Nz<U1r'  r   r   r   r   r   r7   r  r   r(  r   )r   r(  r`   )r   r   r   r   r   r  rn   r9   r   r   r  )r-   r  r9   r   s       r$   ro   z TestPandasMultiIndex.test_rename  s:   %*28<< M&&c
QF';>&RR1
 
 
 LLR((	E!!!!LL%!1266	$(88888}####+urx/P/PPPPPLLc3Z00	$6666}####+/AAAAAAAr&   c                d   dt           j        d}t          t          j                            ddgddggd          d|	          }|                                }|j                            |j                  sJ |j        |j        usJ |j	        |j	        k    sJ |j
        |j
        k    sJ d S )
NzU<1r'  r   r   r   r   r   r7   r  )r   r   r   r   r   r  rs   r9   rh   r   r  )r-   r  r   r   s       r$   rv   zTestPandasMultiIndex.test_copy  s    %*28<<#M&&c
QF';>&RR1
 
 

 |""8>22222|8>1111zX\))))(H,GGGGGGGr&   Nr/   )r0   r1   r2   r   rA   rE   rI   r  rM   rR   r]   rb   ro   rv   r3   r&   r$   r   r   G  s       ? ? ? ?0   @H H H H$   ,E E E E
* 
* 
* 
*F F F F&; ; ; ;*? ? ?B B B B,H H H H H Hr&   r   c                      e Zd Zej        dd            Z ej        ddg          dd            Zej        dd
            ZddZddZ	ddZ
ddZddZddZddZd ZddZddZdS )TestIndexesr   2tuple[list[PandasIndex], dict[Hashable, Variable]]c                z   t          t          j        g dd          d          }t          t          j        g dd          d          }t          j                            ddgdd	ggd
dg          }t          |d          }|||g}i }|D ])}|                    |                                           *||fS )Nr   r7   r   r   r`   r   r   r   r   r   r   r   r  )r   r   r	   r   r  r   updaterQ   )r-   x_idxy_idx	z_pd_midxz_midxr   	variablesr   s           r$   indexes_and_varszTestIndexes.indexes_and_vars  s    BHYYYS9993??BHYYYS9993??M..3Z!Q  / 
 
	 ")S11%(	 	5 	5CS11334444	!!r&   pd_indexxr_index)params"list[PandasIndex] | list[pd.Index]c                >    |\  }}|j         dk    rd |D             S |S )Nr;  c                    g | ]	}|j         
S r3   )r9   .0r   s     r$   
<listcomp>z.TestIndexes.unique_indexes.<locals>.<listcomp>6  s    444#CI444r&   )param)r-   requestr:  
xr_indexes_s        r$   unique_indexeszTestIndexes.unique_indexes/  s4     )
A=J&&444444r&   "Indexes[Index] | Indexes[pd.Index]c                H    |\  }}}|||||d}|\  }}t          ||          S Nr7   r`   r  r   r   )r
   )	r-   rH  r:  r5  r6  r8  r   rG  r9  s	            r$   r   zTestIndexes.indexes:  sF      .uf%
 %
 (9w	***r&   r   c                    |d         }t          |          g dk    sJ t          |          dk    sJ d|v sJ |d         |u sJ d S )Nr   rL  r   r7   )r   len)r-   rH  r   r5  s       r$   test_interfacezTestIndexes.test_interfaceK  si    q!G}} = = =====7||q    g~~~~s|u$$$$$$r&   c                :    t          |j                  dk    sJ d S rK  )tupler9  r   s     r$   test_variableszTestIndexes.test_variablesR  s%    W&''+HHHHHHHr&   c                (    |j         ddddk    sJ d S )Nrr   r   )r7   r`   r  r+   r   s     r$   	test_dimszTestIndexes.test_dimsU  s%    |QQQ77777777r&   c                :    |                                 |k    sJ d S r*   )
get_unique)r-   rH  r   s      r$   test_get_uniquezTestIndexes.test_get_uniqueX  s%    !!##~555555r&   c                j    |                     d          du sJ |                     d          du sJ d S )Nr   Tr7   F)is_multir   s     r$   test_is_multizTestIndexes.test_is_multi[  sF    &&$....$$------r&   c                   |j         d         |j         d         |j         d         d}|                    d          |k    sJ t          j        t          d          5  |                    dd	           d d d            n# 1 swxY w Y   t          j        t          d
          5  |                    d           d d d            n# 1 swxY w Y   |                    dd	          i k    sJ d S )Nr  r   r   r  r   r   zerrors must be.*r   r7   invalid)errorszno index found.*no_coordignore)r9  get_all_coordsr=   r>   r   r-   r   r   s      r$   test_get_all_coordszTestIndexes.test_get_all_coords_  s   "3'$U+$U+
 

 %%e,,8888]:-?@@@ 	: 	:""3y"999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ]:-?@@@ 	/ 	/"":...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ %%j%BBbHHHHHHs$   BB	B(C

CCc                D    ddi}|                     d          |k    sJ d S )Nr  r   r   )get_all_dimsrb  s      r$   test_get_all_dimszTestIndexes.test_get_all_dimso  s0    8##E**h666666r&   c                    |d         d|j         d         if|d         d|j         d         if|d         |j         d         |j         d         |j         d         d	fg}|                                |k    sJ d S )
Nr   r7   r   r`   r   r  r   r   r\  )r9  group_by_index)r-   rH  r   r   s       r$   test_group_by_indexzTestIndexes.test_group_by_indexs  s    Ag&7&< =>Ag&7&< =>q! *3/",U3",U3 
 %%''8333333r&   c                    |                                 }t          |t                    sJ t          d |                                D                       sJ |j        |j        k    sJ d S )Nc                B    g | ]}t          |t          j                  S r3   )r   r   r	   rA  s     r$   rC  z6TestIndexes.test_to_pandas_indexes.<locals>.<listcomp>  s$    MMM#JsBH--MMMr&   )to_pandas_indexesr   r
   allvaluesr9  )r-   r   
pd_indexess      r$   test_to_pandas_indexesz"TestIndexes.test_to_pandas_indexes  su    ..00
*g.....MM9J9J9L9LMMMNNNNN J$8888888r&   c                l   |                                 \  }}|                                |                                k    sJ t          |                                |                                          D ]\  }}|                    |          sJ |d         |d         cxu r
|d         u sn J |                                |j                                        k    sJ t          |                                |j                                                  D ]\  }}t          ||           d S )Nr  r   r   )copy_indexesr   ziprn  rh   r9  r   )r-   r   ru   r   neworiginals         r$   test_copy_indexeszTestIndexes.test_copy_indexes  s3   $1133
{{}}.... '..2B2BCC 	( 	(MC::h''''''c{fUm<<<<ve}<<<<<<  G$5$:$:$<$<<<<< !2!2!4!4g6G6N6N6P6PQQ 	, 	,MCS(++++	, 	,r&   N)r   r2  )r   r>  )r   rI  r/   )r0   r1   r2   r=   ry   r:  rH  r   rO  rR  rT  rW  rZ  rc  rf  ri  rp  rv  r3   r&   r$   r1  r1    sV       ^" " " ^"  V^J
3444   54 ^+ + + ^+ % % % %I I I I8 8 8 86 6 6 6. . . .I I I I 7 7 7 74 4 4 9 9 9 9, , , , , ,r&   r1  c                    t          j        dd          } t          j        d          }|t          j        dd          z  }| | j        ft          j        |t                    |                    t                    ft          j        |          |ft          j        |t                    |                    t                    ffD ]6\  }}t          |          }t          ||           |j        |j        k    sJ 7d S )Nr   r   r   r   r   Dr   )r   
date_ranger   arangetimedelta64rn  r	   objectastyper   r   r   )datesr7   tdr   r   r   s         r$   test_safe_cast_to_indexr    s    M,333E
	!A	
R^As##	#B		!6	"	"	"AHHV$4$45	"r	"F	#	#	#RYYv%6%67	 . .% $E**8V,,,~-----. .r&   c                 l   t                      } |                                 D ]fdt          dd          D             }t          |          }t	          t          j        |                    }t          ||           |j        |j        k    sJ t          |t          |                    sJ d S )Nc                *    g | ]} d d |          S r   r3   )rB  day	date_types     r$   rC  z7test_safe_cast_to_index_cftimeindex.<locals>.<listcomp>  s'    >>>#1a%%>>>r&   r      )r   rn  r   r   r   r   r   r   r   r   type)
date_typesr~  r   r   r  s       @r$   #test_safe_cast_to_index_cftimeindexr    s    '))J&&(( 2 2	>>>>q">>>u%%#BHUOO448V,,,~----&$x..1111112 2r&   c                     d t          dd          D             } t          j        |           }t          t	          j        |                     }t          ||           t          |t          j                  sJ d S )Nc                0    g | ]}t          d d |          S r   r   )rB  r  s     r$   rC  z=test_safe_cast_to_index_datetime_datetime.<locals>.<listcomp>  s$    999SXaC  999r&   r   r  )r   r   r	   r   r   r   r   r   )r~  r   r   s      r$   )test_safe_cast_to_index_datetime_datetimer    sm    99E!RLL999ExH00Fx(((fbh'''''''r&   r   r   r   r   c                    t          j        ddt          j        ddg|           fi          }|                    d          }t          |d         j        j                  | k    sJ d S )Nr   r   r   r   )coords)r   )baz)r   Datasetr   r   rH   r   rn  r   )r   r   s     r$   "test_restore_dtype_on_multiindexesr    sm    
*UUBHaV5,I,I,I$JK
L
L
LC
)))
!
!Cs5z &''5000000r&   r/   )r   r   r   r   ),
__future__r   rs   r   typingr   numpyr   pandasr   r=   xarrayr   xarray.coding.cftimeindexr   xarray.core.indexesr   r	   r
   r   r   r   r   xarray.core.variabler   r   xarray.testsr   r   r   xarray.tests.test_coding_timesr   r%   r(   r5   r}   r   r1  r  r  r  rz   r{   r  r3   r&   r$   <module>r     s   " " " " " "                           1 1 1 1 1 1                  9 8 8 8 8 8 8 8 N N N N N N N N N N A A A A A A	 	 	 	    %   
F F F F F F F FRO: O: O: O: O: O: O: O:dSH SH SH SH SH SH SH SHlw, w, w, w, w, w, w, w,t. . . 2 2 2 ( ( ( 7I"6771 1 1 871 1 1r&   