
    dy                       d dl mZ d dlZd dlmZ d dlZd dlZd dl	Z	d dl
mZmZmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZ  eej                  Z G d	 d
          Z G d d          Z  G d d          Z! G d d          Z"dJdZ#e	j$        %                    dej        ej&        ej'        g          dJd            Z(d Z)d Z*d Z+d Z,dJdZ-dJdZ.dJdZ/ G d d          Z0d Z1e	j$        %                    d d!d"g          e	j$        %                    d# e2d$d%d$           e2dd%d&           e2d%d$d%           e2d%d$d'          g          dJd(                        Z3e	j$        %                    d)d*d+g          e	j$        %                    d,g d-          e	j$        %                    d.ej4        j5        ej4        j6        ej4        j7        ej4        j8        g          dJd/                                    Z9dJd0Z:dJd1Z;dJd2Z<dJd3Z=dJd4Z>dJd5Z?dJd6Z@dJd7ZAe	j$        %                    d8 ejB        d9           ejB        d9          f ejC        g d:           ejC        g d;          f ejC        g d<           ejC        g d=          f ejC        g d>           ejC        g d?          f ejC        d%g           ejC        d g          f ejC        g d@           ejC        g dA          f ejC        g dB           ejC        g dC          fg          dJdD            ZDdJdEZEedF             ZFedG             ZGedH             ZHedI             ZIdS )K    )annotationsN)Any)	DataArrayDatasetVariable)indexingnputils)PandasIndexPandasMultiIndex)T_Xarray)IndexerMaker
ReturnItemassert_array_equalassert_identicalraise_if_dask_computesrequires_daskc                  <    e Zd Zd Zd
dZd
dZd
dZd
dZd
dZd	S )TestIndexersc                8    |                                 }d||<   |S )Nr   )copy)selfxis      :lib/python3.11/site-packages/xarray/tests/test_indexing.pyset_to_zerozTestIndexers.set_to_zero   s    FFHH!    returnNonec                   t           j                            ddddd          }t          j        d          }t	                      }|d d          |d         |dd d df         |d	         |d dddf         |ddd d f         ||         |||f         |d||f         |d
         f
D ]p}t          j        ||j                  }t          ||         ||                    t          | 	                    ||          | 	                    ||                     qt          j        t          d          5  t          j        |d         d           d d d            d S # 1 swxY w Y   d S )N
                  .r   ).r    ).r               ztoo many indicesmatchr&   r'   r(   r'   )nprandomrandnaranger   r   expanded_indexerndimr   r   pytestraises
IndexError)r   r   yarrr   js         r   test_expanded_indexerz"TestIndexers.test_expanded_indexer    s   IOOBBB//IaLLllFH111bMLC
OQ	NF1IQ	N"#
 	O 	OA )!QV44AqtQqT***t//155t7G7G17M7MNNNN]:-@AAA 	7 	7%c'lA666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   0EE Ec                   t           j                            ddd          }t          |dg dt	          g dg dt          t          d                              	          }|                    d
          }|j        }t          |j
        d|                                f         |d                    t          |j
        d|                                f         |d                    d S )Nr(      r)   value)	replicatersampleexpr   r&   r'   )abcd)r=   r?   r>   )namedimscoords)r=   r>   )samplerA   )r'      r   rB   )r   r   r&   )r-   r.   r/   r   dictlistrangestackrH   r   locmaxmin)r   datadada2ss        r   test_stacked_multiindex_min_maxz,TestIndexers.test_stacked_multiindex_min_max6   s    yq"a((000#)))=)=)=tERTII  	
 
 
 hh6h77J373<0$x.AAA373<0$w-@@@@@r   c                   t           j                            ddgddggd          }t          t	          j        d          |ddgdd	
          }dddgf|j        d<   t          j        |dddddi           }|D ]h\  }}||ddik    sJ |	                    |j
        d                   r|dddk    sJ >|	                    |j
        d                   r
|ddik    sJ it          |          dk    sJ t          j        t          d          5  t          j        |ddii            d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        |ddii            d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        |ddiddi           d d d            d S # 1 swxY w Y   d S )NrA   rB   r&   r'   onetwonames)r)   r'   r'   r   r6   )r   r6   zrG   rF   r6   g       @g      @y2r   )r]   rX   rY   r6   r]   r   r(   z"no index found for coordinate 'y2'r*   z*'w' is not a valid dimension or coordinatewzcannot supply.*methodnearest)pd
MultiIndexfrom_productr   r-   zerosrG   r   group_indexers_by_indexequalsxindexeslenr3   r4   KeyError
ValueError)r   mindexrQ   grouped_indexersidxindexerss         r   test_group_indexers_by_indexz)TestIndexers.test_group_indexers_by_indexE   s,   ++c3Z!Q,@+WWHYfAq6(B(B
 
 
 !3*-D#;#aa88"
 
 . 	, 	,MC{C8+++++DM#.// ,3q#9#999999DM#.// ,C8++++#$$))))]8+PQQQ 	D 	D,TD#;CCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D]I
 
 
 	C 	C ,TC:rBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C ]:-?@@@ 	T 	T,TC8h	=RSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts6   D::D>D> FF	F	+GGGc                   d }d(d
}t          ddg dfi          }t          j                            ddgddgddggd          }t	          t          d          d|fg          } ||dt          j        ddi                      ||t          j	        d          t          j        ddi                      ||t          g d          t          j        ddi                      ||dt          j        ddi                      |g dt          t          j        ddg          d          t          dd          t          dd          ddgddgddi          } ||d|            |t          ddd           t          t          j                            ddgddggd          d          dt          dd          ig dgi           } ||d|            |g d t          t          j                            ddgddggd          d          dt          dd          ig dgi           } ||d!|            ||dd"gt          j        ddd#gi                      ||t          dd          t          j        dt          ddd           i                      ||t          dd$          t          j        dt          dd%d           i                      ||ddddt          j        ddi                      |g dt          t          j        ddg          d          t          dd          t          dd          ddgddgddi          } ||ddd|            |g d&t          t          j        ddg          d          t          dd          t          dd          d'dgddgddi          } ||ddd'|            |g d t          t          j                            ddgddggd          d          dt          dd          ig dgi           } ||ddi|           d S ))Nc                    d| i}                                 }fd|D             }i }	|	                    |           |	                    |           t          j        |||	|||          S )Nr   c                    i | ]}|S  ru   ).0kx_indexs     r   
<dictcomp>zSTestIndexers.test_map_index_queries.<locals>.create_sel_results.<locals>.<dictcomp>m   s    666aq'666r   )dim_indexersindexes	variablesdrop_coordsdrop_indexesrename_dims)create_variablesupdater   IndexSelResult)
	x_indexerrx   
other_varsr}   r~   r   rz   
index_varsr{   r|   s
    `        r   create_sel_resultsz?TestIndexers.test_map_index_queries.<locals>.create_sel_resultsc   s      +L 1133J6666:666GIZ(((Z(((*)#')'   r   rQ   r   r   r   expectedindexing.IndexSelResultr   r   c                f   t          j        | d|i          }|j                                        |j                                        k    sJ t	          |j        d         |j        d                    |j                                        |j                                        k    sJ |j        D ]/}|j        |                             |j        |                   sJ 0|j                                        |j                                        k    sJ |j        D ](}t	          |j        |         |j        |                    )t          |j	                  t          |j	                  k    sJ t          |j
                  t          |j
                  k    sJ |j        |j        k    sJ d S )Nr   )r   map_index_queriesrz   keysr   r{   rh   r|   setr}   r~   r   )rQ   r   r   resultsrw   s        r   test_indexerz9TestIndexers.test_map_index_queries.<locals>.test_indexer{   s   
 0Qx@@G',,..(2G2L2L2N2NNNNNw3C8(:OPS:TUUU?''))X-=-B-B-D-DDDDD_ F Fq)001A!1DEEEEEE$))++x/A/F/F/H/HHHHH& P P"7#4Q#79KA9NOOOOw*++s83G/H/HHHHHw+,,H4I0J0JJJJJ&(*>>>>>>>r   r,   rA   rB   r&   r'   )rX   rY   threerZ      r   )rA   r&   r   )TTFFFFFFr   ru   rW   rX   rY   )rA   r&   r)   )rY   r   )TTTTFFFF)rA   )rB   r'   r      )rB   r&      )TFTFFFFF)rX   r   )rQ   r   r   r   r   r   r   r   )r   rc   rd   re   r   rL   r   r   r-   int32r   r
   Indexslicer   )r   r   r   rQ   rm   mdatar   s          r   test_map_index_queriesz#TestIndexers.test_map_index_queriesb   sN   	 	 	0	? 	? 	? 	?, c999-.//++3Z!Q"b*2I , 
 
 %((c6]O44T1h5sAh??@@@T28A;;(?a(I(IJJJT8B??H,CS!H,M,MNNNUL(*A3(*K*KLLL%%BBB"b**G44R%%hr1oo>>EEN'N
 
 	UHh///%%!Q**QFRH+=EU*VV  HR%%&G

 

 	UC***%%@@@**QFRH+=EU*VV  HR%%&G

 

 	UFH---L,/1H#PQSTv1W1W	
 	
 	
 	5c??H$;S%1dBSBS<T$U$U	
 	
 	
 	(H%%#S%1d*;*;$<==	
 	
 	

 	B//#S!H--	
 	
 	
 &%BBB"b**G44R%%hr1oo>>EEN'N
 
 	UC22H===%%BBB!Q((%00R%%R0@0@AAEG%L
 
 	UC"55x@@@%%@@@**QFRH+=EU*VV  HR%%&G

 

 	UUCL(33333r   c                   t          t          j                            dd          t          j        d          t          j        d          dd          }|                    ddid          }t          j        d          |d<   t          j        t          d          5  d|j	        d	<   d d d            d S # 1 swxY w Y   d S )
Nr(   r\   r^   r]   r   zDo you want to .copy()r*   i  r   r   r   )
r   r-   r.   randr0   expand_dimsr3   r4   rl   rN   )r   r7   s     r   test_read_only_viewz TestIndexers.test_read_only_view   s    INN1a  1BIaLL99
 
 

 oosAh++9Q<<C]:-EFFF 	# 	#"CGG	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   "B::B>B>Nr   r   )	__name__
__module____qualname__r   r9   rU   rq   r   r   ru   r   r   r   r      s          
7 7 7 7,A A A AT T T T:N4 N4 N4 N4`	# 	# 	# 	# 	# 	#r   r   c                  &    e Zd ZddZddZddZdS )TestLazyArrayr   r   c                   t                      }dD ]}t          j        |          }|d d         |d d         |dd         |d d         |d d         |dd         |dd         |d d d         |dd d         |d dd         |d d	d         |d
d         |d d d         |ddd         |d dd         |d d d         g}|D ]D}|D ]?}||         |         }t          j        |||          }||         }	t          ||	           @Ed S )N)d   c   r(   r)   r'   r&   r   r%      r    r   size)r   r-   r0   r   slice_slicer   )
r   r7   r   r   slicesr   r8   r   	new_sliceactuals
             r   test_slice_slicezTestLazyArray.test_slice_slice   sb   ll 	9 	9D	$ABQBBQBAaCBQBCRCAbD	BrE
DDbD	AErE
EQrE
FRFBqE
CCaCAaE
EQrE
DDbD	!F$  9 9 9 9A tAwH ( 4Q E E EIy\F&x8888	99+	9 	9r   c           
        t           j                            ddd          }t          j        |          }t          g d|          }t          j        |          }t          g d|          }t                      }|d d          dd|d d         g ddgt          j        d          d	k     g}|D ]}|D ]}	|D ]}
t          |	t           j
                  r(|	j        j        d
k    rt          j        d          d	k     }	t          |
t           j
                  r(|
j        j        d
k    rt          j        d          d	k     }
t          j        |||	|
f                   }|||	|
f         |d d |	|
f         |         |d d d d |
f         d d |	f         |         fD ]}|j        |j        k    sJ t          ||           t          |j        t          j                  sJ t#          d |j        j        j        D                       r't          |j        j        t          j                  sJ t          |j        j        t          j                  sJ d|d d          df|d d         df|d d         dgfdd	gdfg dddgfg d|d d         fg}|D ](\  }}	||         |	         }||         |	         }|j        |j        k    sJ t          ||           |j        dk    rt           j                            |j        |j                  }t          j        |j                  } |j        | }t           |j        | |           t          |j        t          j        t          j        f          sJ t          |j        t          j                  sJ t          |j        j        t          j                  sJ *d S )Nr       r   r   r8   rw   r   r   r(   r   r&   r'   r(   r%   rB   c              3  N   K   | ] }t          |t          t          f          V  !d S N)
isinstanceintr   rv   rw   s     r   	<genexpr>z:TestLazyArray.test_lazily_indexed_array.<locals>.<genexpr>8  sA        <=Jq3,77     r   r(   r'   r'   r   r)   r@   r&   )r   r(   r%   )r-   r.   r   r   NumpyIndexingAdapterr   LazilyIndexedArrayr   r0   r   ndarraydtypekindasarrayshaper   _dataallkeytupleBasicIndexerOuterIndexerr2   choicearrayrF   	transposeLazilyVectorizedIndexedArray)r   originalr   vlazyv_lazyr7   rp   r   r8   rw   r   r   
expected_border
transposeds                   r   test_lazily_indexed_arrayz'TestLazyArray.test_lazily_indexed_array  s!   9>>"b"--)(33___h//*1--///400llFAr3rr7LLL1#ry}}q?PQ 	W 	WA W W! W WA!!RZ00 .QW\S5H5HIbMMA-!!RZ00 .QW\S5H5HIbMMA-!z!Aq!G*55Hq!Qwqqq!Qw*qqq!!!Qw1-a0# W W
  (~====*8V<<<)&,8STTTTT   AGAQAW     W $.fl.>@U#V#VVVVV#-fl.>@U#V#VVVVVWWW4 VQK!WbM!WqcNVQKYYAYYBQB 
  	Q 	QDAq1aJAYq\F#v|3333z6222 {Q	((fkBB---V-u5
"#7:#7#?LLL!L = 3     flH,GHHHHHfl0(2OPPPPPP+	Q 	Qr   c                j   t           j                            ddd          }t          j        |          }t          g d|          }t          j        |          }t          g d|          }t                      }d }|d d          ddft          dddg          fg} ||||           t          dddg          t          dddg          t          d           ft          dd	d
          dfg} ||||           t          d d d
          dt          d d          ft          dg d          t          dg d          ft          ddgddgdd
gg          fg} ||||           t          dg d          t          dg d          ft          ddgddgdd
gg          fg} ||||           d S )Nr    r   r   r   c                    |D ]e}||         }| |         }|j         |j         k    sJ t          |j        t          j        t          j        f          sJ t          ||           |} |}fd S r   )r   r   r   r   r   r   r   )v_eagerr   rp   indexerr   r   s         r   check_indexingzJTestLazyArray.test_vectorized_lazily_indexed_array.<locals>.check_indexingh  s    #    "7+~5555!L = 3     #8V444"   r   r   r&   r   r(   r'   )r(   r'   r)   r(   )r(   r'   r&   r   r8   )	r-   r.   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r7   r   rp   s	            r   $test_vectorized_lazily_indexed_arrayz2TestLazyArray.test_vectorized_lazily_indexed_array`  s   9>>"b"--)(33???A..*1--///400ll	  	  	 " VQNXcAq6%:%:$<=w111 cAq6""HS1a&$9$95;;G1a^^Q
 	w111 4q!!1eD"oo6c<<<(((3*E*EFsCjAq6Aq6"2335

 	w111 c<<<(((3*E*EFsCjAq6Aq6"2335
 	w11111r   Nr   )r   r   r   r   r   r   ru   r   r   r   r      sY        9 9 9 9<AQ AQ AQ AQF.2 .2 .2 .2 .2 .2r   r   c                  &    e Zd ZddZddZddZdS )TestCopyOnWriteArrayr   r   c                   t          j        d          }t          j        |          }d|t          d d          <   t          |t          j        d                     t          |t          j        d                     d S Nr    r   )r-   r0   r   CopyOnWriteArrayBr   rf   r   r   wrappeds      r   test_setitemz!TestCopyOnWriteArray.test_setitem  sf    9R==+H55!!!8RYr]]3337BHRLL11111r   c                   t          j        d          }t          j        |          }|t          d d                  }t          |t          j                  sJ d|t          d d          <   t          |t          j        d                     t          |t          j        d                     t          |t          j        d                     d S )Nr    r%   r   )r-   r0   r   r   r   r   r   rf   r   r   r   childs       r   test_sub_arrayz#TestCopyOnWriteArray.test_sub_array  s    9R==+H55"1"%!:;;;;;ad8RYr]]3337BIbMM2225"(1++.....r   c                    t          j        t          j        ddg                    }t          j        |t          d                  t          d                            dk    sJ d S Nfoobarr   ru   )r   r   r-   r   r   r   r   s     r   test_index_scalarz&TestCopyOnWriteArray.test_index_scalar  sQ    %bhu~&>&>??x!A$"''5000000r   Nr   )r   r   r   r   r   r   ru   r   r   r   r     sP        2 2 2 2/ / / /1 1 1 1 1 1r   r   c                  .    e Zd ZddZddZddZddZdS )	TestMemoryCachedArrayr   r   c                    t          j        t          j        d                    }t          j        |          }t          |t          j        d                     t          |j        t           j                  sJ d S )Nr    )	r   r   r-   r0   MemoryCachedArrayr   r   r   r   r   s      r   test_wrapperz"TestMemoryCachedArray.test_wrapper  sc    .ry}}==,X667BIbMM222'-)FGGGGGGGr   c                   t          j        t          j        d                    }t          j        |          }|t
          d d                  }t          |t           j                  sJ t          |t          j        d                     t          |j        t           j	                  sJ t          |j        t           j                  sJ d S )Nr    r%   )
r   r   r-   r0   r   r   r   r   r   r   r   s       r   r   z$TestMemoryCachedArray.test_sub_array  s    .ry}}==,X66"1"%!;<<<<<5")A,,///%+x'DEEEEE'-)DEEEEEEEr   c                    t          j        d          }t          j        |          }d|t          d d          <   t          |t          j        d                     d S r   )r-   r0   r   r   r   r   rf   r   s      r   r   z"TestMemoryCachedArray.test_setitem  sN    9R==,X66!!!8RXb\\22222r   c                    t          j        t          j        ddg                    }t          j        |t          d                  t          d                            dk    sJ d S r   )r   r   r-   r   r   r   s     r   r   z'TestMemoryCachedArray.test_index_scalar  sQ    &rx'?'?@@x!A$"''5000000r   Nr   )r   r   r   r   r   r   r   ru   r   r   r   r     sl        H H H HF F F F3 3 3 31 1 1 1 1 1r   r   r   r   c                    t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y    G d dt          j                  }  | d          }|j        dk    sJ t          |          dk    sJ d S )Nru   c                      e Zd ZdS ),test_base_explicit_indexer.<locals>.SubclassN)r   r   r   ru   r   r   Subclassr     s        r   r   r,   zSubclass((1, 2, 3)))r3   r4   	TypeErrorr   ExplicitIndexerr   repr)r   r<   s     r   test_base_explicit_indexerr     s    	y	!	! % % $$$% % % % % % % % % % % % % % %    8+    HYE;)####;;///////s   ;??indexer_clsc                   t          j        t                    5   | d            d d d            n# 1 swxY w Y   t          j        t                    5   | g f           d d d            n# 1 swxY w Y   t          j        t                    5   | d           d d d            n# 1 swxY w Y   t          j        t                    5   | d           d d d            n# 1 swxY w Y   t          j        t                    5   | d           d d d            n# 1 swxY w Y   t          j        t                    5   | t          d          f           d d d            n# 1 swxY w Y   t          j        t                    5   | t	          j        dg          f           d d d            d S # 1 swxY w Y   d S )Nr   )r   )      ?r   )r3   r4   r   r   r-   r   )r   s    r   test_invalid_for_allr    s_   
 
y	!	!  D              	y	!	!  RE              	y	!	!  G              	y	!	!  H              	y	!	!  F              	y	!	! % %U5\\O$$$% % % % % % % % % % % % % % %	y	!	! * *RXug&&()))* * * * * * * * * * * * * * * * * *sx   266A//A36A3B++B/2B/C''C+.C+D##D'*D'E--E14E1 F>>GGc                     | dt          j        d          f          j        }t          d |D                       sJ |dk    sJ d S )Nr&   r'   c              3  @   K   | ]}t          |t                    V  d S r   )r   r   )rv   r   s     r   r   z check_integer.<locals>.<genexpr>  s,      11az!S!!111111r   r&   r'   )r-   uint64r   r   r   r<   s     r   check_integerr    sU    KBIaLL)**0E11511111111F??????r   c           	          | t          dd t          j        d                    f          j        \  }|t          dd d          k    sJ t	          |j        t                    sJ d S )Nr&   r'   )r   r-   int64r   r   stepr   r  s     r   check_slicer    sh    {E!T28A;;779::@HUE!T1%%%%%%ej#&&&&&&&r   c                     | t          j        dt           j                  f          j        \  }|j        t           j        k    sJ t           j                            |g d           d S )Nr(   r   r@   )r-   r0   r   r   r   r
  testingr   r  s     r   check_array1dr    sa    {BIarx888:;;AHU;"(""""J!!%33333r   c                    t          j        ddgddggt           j                  } | |f          j        \  }|j        t           j        k    sJ t           j                            ||           d S )Nr&   r'   r(   r)   r  )r-   r   r
  r   r   r  r   )r   r   r<   s      r   check_array2dr    sn    Hq!fq!f%RX666E{E8$$*HU;"(""""J!!%/////r   c                    t          t          j                   t          t          j                   t	          j        t                    5  t          t          j                   d d d            n# 1 swxY w Y   t	          j        t                    5  t          t          j                   d d d            d S # 1 swxY w Y   d S r   )	r  r   r   r  r3   r4   r   r  r  ru   r   r   test_basic_indexerr    s   ('(((%&&&	y	!	! - -h+,,,- - - - - - - - - - - - - - -	y	!	! - -h+,,,- - - - - - - - - - - - - - - - - -s$   A22A69A6B==CCc                 2   t          t          j                   t          t          j                   t	          t          j                   t          j        t                    5  t          t          j                   d d d            d S # 1 swxY w Y   d S r   )	r  r   r   r  r  r3   r4   r   r  ru   r   r   test_outer_indexerr    s    ('(((%&&&('(((	y	!	! - -h+,,,- - - - - - - - - - - - - - - - - -s   %BBBc                 <   t          j        t                    5  t          t          j                   d d d            n# 1 swxY w Y   t          t          j                   t          t          j                   t          t          j                   t          j        t          d          5  t	          j        t          j        dt          j                  t          j        dt          j                  f           d d d            d S # 1 swxY w Y   d S )Nznumbers of dimensionsr*   r&   r  r%   )r3   r4   r   r  r   VectorizedIndexerr  r  r  rl   r-   r   r
  r0   ru   r   r   test_vectorized_indexerr    sd   	y	!	! 2 2h01112 2 2 2 2 2 2 2 2 2 2 2 2 2 2*+++(,---(,---	z)A	B	B	B 
 
"Xarx(((")ARX*F*F*FG	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s$   A  AA1ADDDc                  J    e Zd Z ej        d          d             ZddZdS )	Test_vectorized_indexerT)autousec                >   t          j        t          j                            ddd                    | _        t          j        g dg          t          j        g dg dg          t          ddd          t          ddd	          t          d           g| _        d S )
Nr    r"   r#   )r   r(   r'   )r   r(   r(   )r)   r   r   r'   r   r(   )	r   r   r-   r.   r/   rQ   r   r   rp   )r   s    r   setupzTest_vectorized_indexer.setup  s    1")//"b"2M2MNN	Hiii[!!Hiii+,,!ROO!ROO$KK
r   r   r   c                   t          j        | j        d          D ]r\  }}}t          j        |||f          }t          j        || j        j                  }t          j	        
                    | j        |         | j        |                    st          j        t          j        t          d           f          d          }t          j	        
                    |j        t          j        d          g           t          j        t          j        t          j        d          fdz            d          }t          j        t          j        d          gdz            }t          j	        
                    t          j        |j                  |           t          j        t          j        t          j        d          t          d           f          d          }|j        \  }}	t          j	        
                    |t          j        d          d d t          j        f                    t          j	        
                    |	t          j        d          t          j        d d f                    t          j        t          j        t          d           t          j        d          f          d          }|j        \  }}	t          j	        
                    |t          j        d	          t          j        d d f                    t          j	        
                    |	t          j        d          d d t          j        f                    d S )
Nr(   repeatr%   )r   r%   )r   r    r"   )r   r    r    r   )	itertoolsproductrp   r   r  _arrayize_vectorized_indexerrQ   r   r-   r  r   r   r   r0   rM   newaxis)
r   r   r8   rw   vindexvindex_arrayr   r   rA   rB   s
             r    test_arrayize_vectorized_indexerz8Test_vectorized_indexer.test_arrayize_vectorized_indexer(  s    (qAAA 	V 	VGAq!/Aq	::F#@	 L J))$)F*;TY|=TUUUU6&d~66d
 
 
 	
%%flRYq\\NCCC6&	!':;;;
 
 
 8RYq\\NQ.//

%%bhv|&<&<hGGG6&	!eDkk'BCC7
 
 
 |1

%%a1aaam)DEEE

%%a2rz111})EFFF6&dRYq\\'BCC7
 
 
 |1

%%a1bj!!!m)DEEE

%%a1aaam)DEEEEEr   Nr   )r   r   r   r3   fixturer  r)  ru   r   r   r  r    sW        V^D!!!
 
 "!
F F F F F Fr   r  c           	     4   |dk    r1dt          fd| D                       }t          j        |          S |dk    r-t          d | D                       }t          j        |          S |dk    r\t          j                            ddd	          dt          d d d
          f}t          j        |d t          |                              S |dk    r\t          j                            ddd	          dt          d d d
          f}t          j        |d t          |                              S |dk    r`d | D             }t          j                            d| d         | d         d
z             |d<   t          j        t          |                    S |dk    r2d | D             }d|d<   t          j	        t          |                    S |dk    rt          j	        d          S |dk    r:g d}t          j	        t          |d t          |                                        S |dk    rjd | D             }t          dd
d          |d<   t          ddd
          |d<   t          j	        t          |d t          |                                        S d S )N
vectorizedr(   r)   c              3  \   K   | ]&}t           j                            d |          V  'dS )r   r   Nr-   r.   randint)rv   rT   indexed_shapes     r   r   zget_indexers.<locals>.<genexpr>M  s:      SS	))!Q])CCSSSSSSr   outerc              3  ^   K   | ](}t           j                            d ||dz             V  )dS )r   r'   Nr/  rv   rT   s     r   r   zget_indexers.<locals>.<genexpr>Q  s:      FF1	))!QA66FFFFFFr   outer_scalarr   r(   r)   r'   outer_scalar2r   	outer1vecc                .    g | ]}t          d d          S r'   r   r4  s     r   
<listcomp>z get_indexers.<locals>.<listcomp>]       ///A5B<<///r   r&   basicc                .    g | ]}t          d d          S r9  r;  r4  s     r   r<  z get_indexers.<locals>.<listcomp>b  r=  r   basic1r(   basic2)r   r'   r)   basic3c                ,    g | ]}t          d           S r   r;  r4  s     r   r<  z get_indexers.<locals>.<listcomp>n  s    ...15;;...r   r   )
r   r   r  r   r-   r.   r0  r   rj   r   )r   moder   r1  s      @r   get_indexersrF  J  s   |SSSSUSSSSS)'222	FFFFFFF$W---			9$$Q1--q%dA2F2FG$W\s5zz\%:;;;		 	 9$$Q1--r5tQ3G3GH$W\s5zz\%:;;;			/////Y&&q%(E!HqLAA
$U7^^444	/////
$U7^^444			$T***			))$U7<SZZ<+@%A%ABBB			.....2q"%%
1b!__
$U7<SZZ<+@%A%ABBB	 
	r   r   r   r   slr&   r   r'   r   c                    t          j        |           }t          j        ||           \  }}||         }||         |         }t	          ||           d S r   )r-   r0   r   _decompose_slicer   )r   rG  r   slice1slice2r   r   s          r   test_decompose_slicerL  t  sT    
 		$A.r488NFFuHvYvFx(((((r   r   )r    r%   r   )r    r(   indexer_mode)	r,  r2  r5  r6  r7  r>  r@  rB  rC  indexing_supportc                j   t          j        j        |  }t          | |          }t	          j        || |          \  }}t	          j        |          |         }t	          j        |          |         }t          |j                  dk    rt	          j        |          |         }t           j	        
                    ||           t          d |j        D                       sRt	          j        || |          }	t	          j        |          |	         }t           j	        
                    ||           d S d S )Nr   c              3  J   K   | ]}t          |t          j                  V  d S r   )r   r   integer_typesr   s     r   r   z*test_decompose_indexers.<locals>.<genexpr>  s/      KKz!X344KKKKKKr   )r-   r.   r/   rF  r   decompose_indexerr   rj   r   r  r   r   _combine_indexers)
r   rM  rN  rQ   r   backend_indnp_indr   r   combined_inds
             r   test_decompose_indexersrW    s   2 9?E"D5,//G"4WeEUVVK,T227;H)$//<E
6<1-e44V<J!!(E222KKflKKKKK 71+ufMM-d33LA

%%h666667 7r   c                 \   t          j        dt           j                  } t          j        t          j        |           t          j                  }t           j                            | t          j	        |                     t           j                            | |d d                     d S Nr    r  )
r-   r0   r
  r   !ImplicitToExplicitIndexingAdapterr   r   r  r   r   r   implicits     r   test_implicit_indexing_adapterr]    s    Ib)))E9%e,,h.C H J!!%H)=)=>>>J!!%!!!55555r   c                     t          j        dt           j                  } t          j        t          j        |                     }t          |d d          t          j                  sJ d S rY  )r-   r0   r
  r   rZ  r   r   r[  s     r   ,test_implicit_indexing_adapter_copy_on_writer_    sa    Ib)))E9!%(( H hqqqk8#MNNNNNNNr   c            	     Z   d } t           j                            ddd          }t          g d|          }t	                      }|d d          dd|d d         t          j        g d	          t          j        dg          t          j        d          d
k     g}t          j        |d          D ]x\  }}}t          |t           j
                  r(|j        j        dk    rt          j        d          dk     }t          |t           j
                  r(|j        j        dk    rt          j        d          dk     }|                    |||f          \  }}	}
t          j        |j                  |	j                 }|
r2t%          t'          |
                    }t          j        |||
          }t+          j         | |           | |           | |          f          }t+          j        ||j                  }|j        |         }t           j                            ||           zd S )Nc                    t          | t          j                  r*| j        j        dk    r|                                 d         } | S )NrB   r   )r   r-   r   r   r   nonzeror   s    r   rb  zQtest_outer_indexer_consistency_with_broadcast_indexes_vectorized.<locals>.nonzero  s:    a$$ 	)<)<		AAr   r    r   r   r   r   r   r(   r   r%   r   rB   r)   r   )r-   r.   r   r   r   r   r0   r#  r$  r   r   r   r   _broadcast_indexes_vectorizedr	   NumpyVIndexAdapterrQ   r   rL   rj   moveaxisr   r   _outer_to_numpy_indexerr   r  r   )rb  r   r   r7   rp   r   r8   rw   _r   	new_orderexpected_data	old_orderouter_indexr   actual_datas                   r   @test_outer_indexer_consistency_with_broadcast_indexes_vectorizedrn    s     
 y~~b"b))H(++A
,,C 	AAA	
BQB

!
	"H $Xa888 B B1aa$$ 	")<)<	"!Aa$$ 	")<)<	"!A!"!@!@!Q!K!K8Y216::8>J 	Mc)nn--IKy)LLM+WWQZZWWQZZ,PQQ1+qwGGfVn

%%k=AAAAB Br   c                    t          j        t          j        g d          f          } t          j        g d          }t          j        | d          }t          j                            ||           t          j        dt          d          t          j        g d          f          } t          j        dg dgz            }t          j        | d          }t          j                            ||           d S )Nr   r   r'   FTFr"  r&   r'   r%   r%   r%   )r   r   r-   r   create_maskr  r   r   r   r   r   s      r   test_create_mask_outer_indexerru    s    #RXjjj%9%9$;<<Gx,,,--H!'400FJ!!(F333#Qa"(:::2F2F$GHHGx1112233H!'955FJ!!(F33333r   c                 X   t          j        t          j        g d          t          j        g d          f          } t          j        g d          }t          j        | d          }t          j                            ||           t          j        t          j        g d          t          d           t          j        g d          f          } t          j        g dgdz            j        }t          j        | d          }t          j                            ||           d S )Nrp  r   r&   r   FTTr"  r'   r%   r'   )	r   r  r-   r   rs  r  r   r   Trt  s      r   #test_create_mask_vectorized_indexerr{    s   ("(:::*>*>@T@T)UVVGx+++,,H!'400FJ!!(F333(	***		uT{{BHZZZ,@,@A G x,,,-1224H!'622FJ!!(F33333r   c                 *   t          j        d          } t          j        | d          }t          j                            d|           t          j        d          } t          j        | d          }t          j                            d|           d S )N)r   rA  T)r   F)r   r   rs  r-   r  r   )r   r   s     r   test_create_mask_basic_indexerr}    s|    #E**G!'400FJ!!$///#D))G!'400FJ!!%00000r   c            	        t          j        d          } t          j        dt	          d          t          j        g d          f          }t          j        dg dgz            }t          j        |d|                     dd	                    }|j	        dk    sJ t
          j
                            ||           t          j        t          j        g d          t	          d           t          j        g d
          f          }t          j        g dgdz            j        }t          j        |d|                     dd	                    }t          || j                  sJ t
          j
                            ||           t          j        t"                    5  t          j        |d|                     dd	                     d d d            d S # 1 swxY w Y   d S )Nz
dask.arrayr&   r'   rp  rq  rr  )r'   r(   ))r&   r&   )r'   r&   chunksrw  rx  ry  r   )rA  )r'   r"  r&   )r3   importorskipr   r   r   r-   r   rs  emptyr  r  r   r  rz  r   Arrayr4   rl   )rR   r   r   r   indexer_vecs        r   test_create_mask_daskr    s   		\	*	*B#Qa"(:::2F2F$GHHGx1112233H!BHHV4DHEE F =,,,,,J!!(F333,	***		uT{{BHZZZ,@,@A K x,,,-1224H!VRXXf\XBB F fbh'''''J!!(F333	z	"	" O O[&"((4(2M2MNNNO O O O O O O O O O O O O O O O O Os   %,GG"%G"c                     t          j        t          d          5  t          j        dd           d d d            d S # 1 swxY w Y   d S )Nzunexpected key typer*   r  r-  )r3   r4   r   r   rs  ru   r   r   test_create_mask_errorr    s    	y(>	?	?	? - -VV,,,- - - - - - - - - - - - - - - - - -s   ?AAzindices, expectedr%   )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&   c                n    t          j        |           }t          j                            ||           d S r   )r   _posify_mask_subindexerr-   r  r   )indicesr   r   s      r   test_posify_mask_subindexerr  "  s2     -g66FJ!!(F33333r   c                    t          j        d          t          j        d          f} t          t          j        | t                              }|d         }t          j        dt                    }| d         |d<   t          |          }|j                                        g|j                                        gk    sJ d S )Nr(   r   r  r   ru   )r-   r0   r   r   objectr  rQ   item)itemsr7   r   rj  r   s        r   test_indexing_1d_object_arrayr  3  s    Yq\\29Q<<(E
BHU&111
2
2CVFHRv...MaM"''HKHM$6$6$8$8#9999999r   c                    dd l } t          t          j        d                              d          d                              t          ddd                    }t                      5  |                    | j	        
                    dgd	
                    }d d d            n# 1 swxY w Y   |                    dg          }t          ||           d S )Nr   Z   )r    r(   r(   )timer   r6   rF   r   r&   	   r  r  )r  )
dask.arrayr   r-   onesreshapechunkrJ   r   iselr   
from_arrayr   )daskrR   r   r   s       r   test_indexing_dask_arrayr  @  s*   	

##J//
 
 
 eDbA###$$  
 	!	! G Gdj33QC3EEFFG G G G G G G G G G G G G G GwwQCw  HVX&&&&&s   ,2B**B.1B.c                 x   dd l } | j                            t          j        dd                    }t          |d          }|                    d          }t                      5  |                    |          }d d d            n# 1 swxY w Y   |                    d	          }t          ||           d S )
Nr   g        r  r   r  .)dimr   rc  )
r  r   r  r-   linspacer   argmaxr   r  r   )r  rA   rR   
x_selectorr   r   s         r   test_indexing_dask_array_scalarr  N  s     
bk#s3344A	13			Bs##J		!	! % %$$% % % % % % % % % % % % % % %www}}HVX&&&&&s   'B		BBc                    t          g ddt          d          id          } t          t          j                            ddd                              dd	                              t                    t          d          t          d	          d
d
          }t          j	        t          d          5  | |                    dd	i                    d d d            d S # 1 swxY w Y   d S )N)g?g?g333333?r]   r(   )r]   )rQ   rG   rF   r   r   r)   r'   )r6   r   z$Vectorized indexing with Dask arraysr*   r6   )r   rL   r-   r.   r0  r  astyper   r3   r4   rl   r  )darrr   s     r   #test_vectorized_indexing_dask_arrayr  \  s     ///3a/OOODYq!Q''//155<<SAA1XXE!HH--  G
 
z)O	P	P	P & &W]]C8$$%%& & & & & & & & & & & & & & & & & &s   9C$$C(+C(c                    dd l m}  t          t          d|                     t
          j                            ddd                    fd| j                            d          f                    }|j        	                    |j
                                                  }t                      5  |j        	                    |j
                  }d d d            n# 1 swxY w Y   t          ||           t                      5  |j        	                    |j
        j                  }d d d            n# 1 swxY w Y   t          ||           d S )Nr   r   r   r\   )r   r    )rA   rB   rc  )r  r   r   rJ   r  r-   r.   r0  rB   selrA   computer   r   rQ   )rR   dsr   r   s       r   !test_advanced_indexing_dask_arrayr  i  s    	BMM")"3"3AsC"@"@AAB29++I667	
 	
 	

 
B txx"$,,..x))H		!	! " "BD!!" " " " " " " " " " " " " " "Xv&&&		!	! ' 'BDI&&' ' ' ' ' ' ' ' ' ' ' ' ' ' 'Xv&&&&&s$   3!C  C$'C$	&D;;D?D?r   )J
__future__r   r#  typingr   numpyr-   pandasrc   r3   xarrayr   r   r   xarray.corer   r	   xarray.core.indexesr
   r   xarray.core.typesr   xarray.testsr   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r  r  r  r  r  r  r  r  r  r  rF  r   rL  IndexingSupportBASICOUTEROUTER_1VECTOR
VECTORIZEDrW  r]  r_  rn  ru  r{  r}  r  r  r0   r   r  r  r  r  r  r  ru   r   r   <module>r     s   " " " " " "                    / / / / / / / / / / ) ) ) ) ) ) ) ) = = = = = = = = & & & & & &                L&''a# a# a# a# a# a# a# a#HP2 P2 P2 P2 P2 P2 P2 P2f1 1 1 1 1 1 1 101 1 1 1 1 1 1 18	0 	0 	0 	0 H183MN * * *	 *"  ' ' '4 4 40 0 0- - - -- - - -	
 	
 	
 	
+F +F +F +F +F +F +F +F\'C 'C 'CT #r++55B??EE$A..b!R0@0@%%ArBRBR
S ) ) )  ,+) :w"788
 
 
   & & . +	 7 7 7   9807$6 6 6 6O O O O"B "B "B "BJ	4 	4 	4 	44 4 4 41 1 1 1O O O O2- - - -
 	1yry||$	+++		 3 34	+++		 3 34	+++		 3 34	2$1#'	$$$	%	%xrx'@'@A	$$$	%	%xrx'@'@A 4 4 4 4

: 
: 
: 
: 
' 
' 
' 
' 
' 
' 	& 	& 	& ' ' ' ' 'r   