
    >ie.~                       d dl mZ d dlZd dlZd dlZd dlmZ  ej        d          Zd dl	Z	d dl
mZ d dl	mZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d	 Zd
 Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z- G d d          Z.ej/        0                    d          d             Z1d Z2d Z3d  Z4d! Z5d" Z6d# Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>d+ Z?ej/        @                    d,g d-          ej/        @                    d.g d/          d0                         ZAej/        @                    d1g d2          d3             ZBej/        @                    d1g d4          d5             ZCej/        @                    d1d6d7g          d8             ZDej/        @                    d1d6d7g          d9             ZEej/        @                    d:g d;          d<             ZFd= ZGd> ZHd? ZIej/        jJ        d@             ZKej/        @                    dAg dB          ej/        @                    dCeLfdeLfeLdfdeLdfg          dD                         ZMeL eNd6          d dEdFdG eNdFd          dgZO	 dH ZPej/        jQ        dI             ZRdJ ZSdK ZTdL ZUdM ZVdN ZWdO ZXej/        @                    dPdQeY                    dRdS          dTz  dEeY                    dR          fd eY                    dR          fgfdUeY                    dV          d6z  d eY                    dT          d6z  fdEeY                    dT          d6z  fgfdWg dXdEdRgfd d6dYgfdEdRgfgfg          dZ             ZZd[ Z[d\ Z\d] Z]d^ Z^d_ Z_ej/        @                    d`dadbg          dc             Z`dd Zade Zbej/        c                    df          ej/        @                    dgg dh          di                         Zdej/        @                    djdkdlg          ej/        @                    dmdkdlg          ej/        @                    dndkdlg          do                                     Zedp Zfdq ZgdS )r    )annotationsN)mergenumpy)config)getitem)
_sanitize_index_element	_slice_1dmake_block_sorted_slicesnew_blockdimnormalize_indexsanitize_indexshuffle_sliceslice_arrayslicing_plantake)	assert_eq	same_keysc            	     x   t          ddd          t          d d d           t          ddd          d} t          ddgdz  t          ddd                     }| |k    sJ t          d	d
d          t          ddd          t          ddd          t          d	dd          t          ddd          d} t          ddgdz  t          ddd                    }| |k    sJ t          d	dd          t          ddd          t          ddd          t          d	dd          t          ddd          d} t          ddgdz  t          dd d                    }| |k    sJ t          ddd          t          ddd          t          ddd          t          ddd          t          ddd          d} t          ddgdz  t          d d d                    }| |k    sJ t          ddd          t          ddd          t          ddd          t          d	dd          t          ddd          d} t          ddgdz  t          d d d                    }| |k    sJ t          ddd          t          d	dd          t          ddd          t          ddd          t          ddd          d} t          ddgdz  t          d d d                    }| |k    sJ t          ddd          t          ddd          t          d	dd          t          ddd          d} t          ddgdz  t          dd d                    }| |k    sJ dt          dd
d          i} t          dg dt          ddd                    }| |k    sJ t          ddd          t          ddd          d} t          dg dt          ddd                    }| |k    sJ i } t          dg dt          d                    }|sJ t          ddd          t          d	dd          t          ddd          t          d	dd          t          ddd          d} t          d g d!t          dd d                    }| |k    sJ t          ddd          t          ddd          t          dd"d          t          dd#d          t          dd$d          d} t          d%g d&t          d d d                    }| |k    sJ t          dd'd          t          dd"d          t          dd#d          t          dd$d          d(} t          d%g d&t          d d)d                    }| |k    sJ t          dd'd          t          dd"d          t          dd#d          t          dd$d          d(} t          d%g d&t          dd)d                    }| |k    sJ dt          d*d+d          i} |                     d, t          dd*          D                        t          d-d+gd*z  t          d*d d                     }| |k    sJ d S ).N
         r   r   r      d      3   ii)r   r   r      r            f   iis      )r   r   r   r    O   )r!   r!   r!   r!   r!   \   i)r   r   c   )r!   r!   r!      r!   iiih   )r!   r)            i)r   r   r    r   r/     i ʚ;c                2    i | ]}|t          d d d           S N)slice).0iis     =lib/python3.11/site-packages/dask/array/tests/test_slicing.py
<dictcomp>z!test_slice_1d.<locals>.<dictcomp>   s&    JJJRRtT400JJJ    l    J))r5   r	   updaterange)expectedresults     r8   test_slice_1dr?      s(   R##dD$(?(?E!QPQNNSSHsRD1HeBD&9&9::Fv RS"S"S"S" H sRD1HeCR&8&899Fv S"S"S"S"S" H sRD1HeCr&:&:;;Fv S"S"S"S"S" H sRD1HeD$&;&;<<Fv S"S"S"S"S" H sRD1HeD$&;&;<<Fv
 S"S"S"S"S" H sRD1HeD$&;&;<<Fv S"S"S"S"	 H sRD1HeBb&9&9::Fv 5R$$%Hs000%B2C2CDDFv S"%%%S"*=*=>>Hs000%Ar2B2BCCFv Hs000%((;;FMMM S"S"S"S"S" H r///sD"1E1EFFFv
 S"S"S"S"S" H s000%dB2G2GHHFv
 S"S"S"S"	 H s000%b"2E2EFFFv
 S"S"S"S"	 H s000%R2D2DEEFv 5z1--.HOOJJ5D>>JJJKKK}zlT&95tT;R;RSSFvr:   c                 n    t          dg dd          ddik    sJ t          ddd          ddik    sJ d S )N   r"   r"   r"   r   r   r      )r"   r"   r"   r"   r"   r"   )r	    r:   r8   &test_slice_singleton_value_on_boundaryrE      sO    RB''Aq61111R+R00QF::::::r:   c            
     b   t           dt          ddd          fft           dt          ddd          fft           dt          ddd          fft           d	t          ddd          ffd
} t          dddgdz  gt          dd d          gd          \  }}| |k    sJ t           dt          ddd          fft           dt          ddd          fft           d	t          ddd          ffd} t          dddgdz  gt          dd d          gd          \  }}| |k    sJ t           dt          ddd          fft           dt          ddd          fft           dt          ddd          fft           d	t          ddd          ffd
} t          dddgt          dd d          fd          \  }}| |k    sJ t           dt          ddd          fft           dt          ddd          fft           d	t          ddd          ffd} t          dddgt          dd d          fd          \  }}| |k    sJ d S )Nxr      r   r   )rH   r   r   rH   r   r   )rH   r    )yr   rL   r   rL   r   )rL   r    rL   rH   r      rK   rM   rN      )r   r   r   r   r   r5   r   r=   r>   chunkss      r8   test_slice_array_1drU      s    HuRQ'7'7&9:HuQA&89HuQA&89HuQA&89	 H !cRD1H:b$8J8J7KQOONFFv HuQA&89HuQA&89HuQA&89 H !cRD1H:b$8J8J7KQOONFFv HuRQ'7'7&9:HuQA&89HuQA&89HuQA&89	 H !cI;r49K9K8MqQQNFFv HuQA&89HuQA&89HuQA&89 H !cI;r49K9K8MqQQNFFvr:   c                    t           dt          ddd          t          ddd          fft           dt          ddd          t          d d d           fft           dt          ddd          t          d d d           ffd	} t          d
ddgg dgt          dd d          t          dd d          gd          \  }}| |k    sJ t           ddt          ddd          fft           ddt          d d d           fft           ddt          d d d           ffd} t          d
ddgg dfdt          dd d          gd          \  }}| |k    sJ d S )NrH   r   r   r0   r!   r   r   r   rH   r   r   )rH   r   r   )rL   r   r   rL   r   r   )rL   r   r   rL   rH   )r!   r!   r"   rO   itemsizer"   rP   rR   rS   s      r8   test_slice_array_2dr]      s    {U2r1-=-=uRQ?O?O,PQ2r1uT4667
 2r1uT4667
 H !
{{{	r4		U2tQ//0  NFF v K!U2r1-=-=)>?K!U4t-D-D)EFK!U4t-D-D)EF H !SB4%5T1+=+='> NFF vr:   c                    ddi} t          dddggt          d d d           fd          \  }}| |k    sJ dddd	} t          ddd
gt          d d d           t          d d d           t          d d d           fd          \  }}| |k    sJ d S )Nfoor   )barr   r`   ra   r   rO   )ra   r   )ra   r   )r_   )r`   r   )r`   r   )r   r2   i'  r[   )r   r5   rS   s      r8   test_slice_optimizationsrb     s    J'H wtT49P9P8RTUVVNFFv 'JJWWH 		tT4	 	 %dD"9"95tT;R;RS  NFF vr:   c            	         t          ddddgddgft          dd          dfd          \  } }dt          dt          d d d           d	ffi}|| k    sJ d S )
NrL   rH   r"   r   rO   r[   rK   rX   r    r   r5   r   r>   rT   r=   s      r8   #test_slicing_with_singleton_indicesrf     sz     SAq6Aq6"U1a[[!$4q  NFF 7K%dD2I2I11MNOHvr:   c                 N   t          ddddgddgft          dd          d t          d d d           fd          \  } }t          dt          ddd	          d t          d d d           fft          d
t          ddd	          d t          d d d           ffd}|| k    sJ |dk    sJ d S )NrL   rH   r"   r   r    rO   r[   rW   r   rX   ))rL   r   r   r   )rL   r   r   r   )r    )r   r"   r"   rd   re   s      r8   test_slicing_with_newaxisrj   #  s     
Q!Q	q!dE$d334  NFF 1a^^T5tT#:#:;
 1a^^T5tT#:#:;
 H v)))))))r:   c                 T   t          dddgg ddd          \  } }t          dt                              d	d
g          fft          dt                              dg          fft          dt                              dg          ffd}t          j                            t          |                                          t          |                                                     | dk    sJ t          ddddgg ddd          \  } }t          dt                              d	d
g          t          d d d           fft          dt                              d	d
g          t          d d d           fft          dt                              dg          t          d d d           fft          dt                              dg          t          d d d           fft          dt                              dg          t          d d d           fft          dt                              dg          t          d d d           ffd}t          j                            t          |                                          t          |                                                     | dk    sJ d S )NrL   rH   r!   r!   r!   r!   )r"   r   /   r    rO   r   r\   axisrG   r"   r   rJ      r    rP   )r   r   r   r!   r!   rW   rX   )rH   r   r   )rH   r   r   )rY   rZ   )rL   r   r   )rL   r   r   )rL   r   r   )rL   r   r   )rq   rr   )	r   r   nparraytestingassert_equalsorteditemsr5   rT   dskr=   s      r8   	test_taker{   =  sa   sC"2!3]]]QUVWWWKFCHrxxA'7'7&9:Hrxx}}&67Hrxx}}&67 H
 JF399;;//8H8H1I1IJJJ\!!!!S#X.PQ  KFC
 XXq!fuT4667
 XXq!fuT4667

 {RXXqc]]E$d<S<S,TU{RXXqc]]E$d<S<S,TU{RXXqc]]E$d<S<S,TU{RXXqc]]E$d<S<S,TU H  JF399;;//8H8H1I1IJJJ*******r:   c                    t          dddgg ddd          \  } }t          dg d	fft          d
dgffd}t          j                            ||           | dk    sJ t          ddddgg ddd          \  } }t          d t          d          D             d t          d          D                       }t          j                            ||           | dk    sJ d S )NrL   rH   rl   )r   r    r"   rm   rO   r   rn   rG   r   r    r"   rJ   rp   )rK   rM   )r    r   rr   )r   r    r"   %   r   c           
     V    i | ]&}d |dft           d|dft          ddd          g dff'S )rL   r   rH   Nr}   r   r5   r6   is     r8   r9   z$test_take_sorted.<locals>.<dictcomp>k  sR     	
 	
 	
 !QK'CA;tT41H1H)))0TU	
 	
 	
r:   r   c           
     T    i | ]%}d |dft           d|dft          ddd          dgff&S )rL   r   rH   N   r   r   s     r8   r9   z$test_take_sorted.<locals>.<dictcomp>o  sP     	
 	
 	
 !QK'CA;tT41H1H2$0OP	
 	
 	
r:   )rl   r~   )r   r   rs   ru   rv   r   r<   ry   s      r8   test_take_sortedr   ^  s5   sC"2!3]]]QUVWWWKFCHyyyl3Hsf- H JC***YS#X.PQ  KFC 	
 	
1XX	
 	
 	
	
 	
1XX	
 	
 	
	 	H JC***///////r:   c            
        t          ddddgddgfdt                              g d          fd          \  } }|dk    sJ t          ddddgddgft          d	d
          t                              g d          fd          \  } }|dk    sJ t          ddddgddgft          d	d
          dfd          \  } }|dk    sJ d S )NrL   rH   r"   r   )r   r   r    rO   r[   )rh   r   rp   )r"   r   rh   )r   )r   rs   rt   r5   )r>   rT   s     r8   test_slicing_chunksr   x  s    SAq6Aq6"Q(;(;$<q  NFF W SAq6Aq6"U1a[["((9992E2E$FQR  NFF ^#### SAq6Aq6"U1a[[!$4q  NFF Yr:   c                 *   t          dddt                              g d          t          d d d           fd          \  } }t          dddt                              g d          t          d d d           fd          \  }}||k    sJ t          j                            | |           g d}|t          d d d           f}t          |d          }t          ddd|d          \  }}||k    sJ t          j                            | |           d S )	NrL   rH   )r    r    r    r   r   )r   r   	   rO   r[   )
FTTFFFFFFTr   r   )r   rs   rt   r5   ru   rv   r   )abd1bbd2r   indexcbd3s           r8   test_slicing_with_numpy_arraysr     s4   $	)))		eD$556  FAs $	)))		eD$556  FAs #::::JAq!!!KKKAdD$''(EE8,,Ec#?QRSSSFAs#::::JAq!!!!!r:   c                 h    t          j        dd          } | ddddf         }|j        dk    sJ d S )	NrI      )r   rO   rO   r   )r      r   r   rT   r   r%   r   r   ))rO   rO   r   r   daonesrT   )ots     r8   test_slicing_and_chunksr     sF    
!=>>>A	!B$"*A8'''''''r:   c                    t          j        dd          } t          j        t          j        fdf| _        t          j        t          d          5  | ddg                                          d d d            d S # 1 swxY w Y   d S )N)r   r"   r"   r   r"   z$Array chunk size or shape is unknown)matchr   )	r   r   rs   nan_chunkspytestraises
ValueErrorcomputer   s    r8   test_slicing_and_unknown_chunksr     s    
"""A&"&!4(AI	z)O	P	P	P  	1a&	                 s   A;;A?A?c                    t          j        dd          } | | t          d                    u sJ | | d d          u sJ | | d d          u sJ | | d         u sJ | | dd          u sJ | | dd          u sJ | | d d d         u sJ | | dt          |                    u sJ | | dd d         u sJ | | dt          |           d         u sJ d S )Nr   r   r   .r   r   )r   r   r5   lenr   s    r8   test_slicing_identitiesr     s   
!=>>>A%++!!!9999"""::::#;;;;!""::::!##;;;;##A#;;;;!c!ff*!$Q$<<<<!c!ffq.!!!!!!!r:   c                     t          j        dd          d d                                         } t                              d          d d         }t	          | |           d S )Nr   r   r   r   )r   r   r   rs   r   )r   r   s     r8   test_slice_stop_0r     sS    
5!!!"1"%--//A
BQBAaOOOOOr:   c                     t          j        dd          } | ddg         d          }t          |t                              d                     d S )Nri   r    r    )shaperT   r   r   )r   r   r"   )r   zerosr   rs   rH   rL   s     r8   test_slice_list_then_Noner     sI    
vf---A	1a&	$Aa)$$%%%%%r:   c                      e Zd Zd ZdS )
ReturnItemc                    |S r4   rD   )selfkeys     r8   __getitem__zReturnItem.__getitem__  s    
r:   N)__name__
__module____qualname__r   rD   r:   r8   r   r     s#            r:   r   zreally long test)reasonc                 0   t           j                                                            ddd          } t          j        | d          }t                      }dd|d d          |d d         dd	gg d
ddg|d d d         d |d d         g g}|D ]}t          | |         ||                   |f |D ]}t          | |         d d |f         ||         d d |f                   ||ff t          | d d |f         |         |d d |f         |                   ||ff |D ]G}t          | d|f         d d |f         |         |d|f         d d |f         |                   |||ff H|d d          |d d         t                               d          g dt                               d          dk     g}ddd|d d          |d d         |dd         ddgg |d d         g	}|D ]3}|D ].}t          | |         |         ||         |                   ||ff /4d S )Nr   rp   rO   r    r    r    r   r   r   r"   r   r   r   r   r   .)r    r   r   r"   r   r    )rs   randomdefault_rngr   
from_arrayr   r   arange)	rH   r   Iindexersr   jkfirst_indexerssecond_indexerss	            r8   test_slicing_exhaustivelyr     s   
	&&q!Q//A
a	***AA 2qtQrrUQFIII1vq2waPRQRPReUWXH M M!A$!q   	M 	MAad111a4j!A$qqq!t*--1v55a1gaj!AAAqD'!*--1v55 M M!CF)AAAqD/!,aQi1oa.@AAAq!9LLLM	M dAbqbE299Q<<"))A,,QRBRSN"a111q!ua"g1vr1RaR5IO 0 0  	0 	0Aad1gqtAw''!Q///	00 0r:   c                 $   t          j        dd          } | d dd         }| j        df|j        |j        df         v sJ | j        df|j        |j        df         v sJ t	          |t
                              d          d dd                    |j        dk    sJ |j        |j        df         t          | j        dft          ddd          ffk    sJ |j        |j        df         t          | j        dft          dd	d          ffk    sJ d S )
Nr   r"   r   r   r   r   ))r"   r    r'   r%   )	r   r   namedaskr   rs   rT   r   r5   r   s     r8   *test_slicing_with_negative_step_flops_keysr     s   
	"QA	%1R%AFA;!&!&!-----FA;!&!&!-----a2u"u%&&&8y    6161+7QVQK%B:K:K9M"NNNNN6161+7QVQK%B:K:K9M"NNNNNNNr:   c                     t          j        ddd          } | d d         }t          |t                              dd          d d                    d S )Nri   r   r   i4)rT   dtyper   r   )r   r   r   rs   r   s     r8   test_empty_slicer     sT    
vT222A	"1"Aat,,RaR011111r:   c                    t           j                                                            d          } t          j        | d          }t          | d d g df         ddg         |d d g df         ddg                    d S )N)r   rp   rO   r   r   r   r   r   rs   r   r   r   r   r   rH   r   s     r8   test_multiple_list_slicingr      s    
	&&y11A
a	***Aa999oq!f%qIII1v'>?????r:   c                    t          j        t                    5  t          j        t          d                    dg          d d d            n# 1 swxY w Y   t          j        t                    5  t          j        t          d                    g d          d d d            n# 1 swxY w Y   t                              d          } g d}t          t          j        |           |         | |                    dg}t          t          j        dg          |         t                              d          |                    d S Nr   T)FFFr"   )TFFFTr   r   )	r   r   
IndexErrorr   asarrayr<   rs   r   r   rH   inds     r8   test_boolean_list_slicingr     s   	z	"	" % %

588dV$$% % % % % % % % % % % % % % %	z	"	" 4 4

588222334 4 4 4 4 4 4 4 4 4 4 4 4 4 4
		!A
+
+
+CbjmmC !C&)))&Cbj!ooc"BIIaLL$566666s#   )AAA3*B))B-0B-c                 X   t          j        t                    5  t          j        t          d                    t                              dg                    d d d            n# 1 swxY w Y   t          j        t                    5  t          j        t          d                    t                              g d                    d d d            n# 1 swxY w Y   t                              d          } t                              g d          }t          t          j        |           |         | |                    t                              dg          }t          t          j        dg          |         t                              d          |                    d S r   )
r   r   r   r   r   r<   rs   rt   r   r   r   s     r8    test_boolean_numpy_array_slicingr     s   	z	"	" / /

588RXXtf--../ / / / / / / / / / / / / / /	z	"	" > >

588RXX&;&;&;<<==> > > > > > > > > > > > > > >
		!A
((444
5
5CbjmmC !C&)))
((D6

Cbj!ooc"BIIaLL$566666s%   AA''A+.A+ACC Cc                 f   t                               dd          } t          j        | d          }t	          |g d dd df         | g d dd df                    t	          |d dg d df         | d dg d df                    t	          |d dd dg f         | d dd dg f                    d S )NrB   r   r   r   r   r    )rs   r   r   r   r   rH   dxs     r8   test_empty_listr      s    
	&&A	q	#	#	#BbRaR!naBQB
m,,,b!R!naB
m,,,b!RaRnaBQB
m,,,,,r:   c                 Z    t          j        dd          d d d         j        dk    sJ d S )Nr!   r"   r   r   )r    r   r    r   r   rD   r:   r8   test_uneven_chunksr   )  s6    72a   1%,??????r:   c            	     Z    t          dg dt          dd d                    g dk    sJ d S )Nr!   r"   r"   r"   r"   r   r   r   )r   r5   rD   r:   r8   test_new_blockdimr   -  s9    LLL%4*;*;<<LLLLLLr:   c                 <   t                               d                              d          } t          j        | d          }t          |d         |d                   sJ t          |d d g df         |d d g df                   sJ t          |d d ddd	f         |d d ddd	f                   sJ t          |d
         |d
                   sJ t          |d         |d                   sJ t          |g d         |g d                   sJ t          |dd         |d d                    sJ t          |dd         |d d                   sJ t          |d	         |d                   sJ t          |dd d	         |ddd	                   sJ d S )Nr   r   ri   r   r   r   r   r    r"   r   r   )r   ..r}   i   ir   r   )rs   r   reshaper   r   r   r   s     r8   test_slicing_consistent_namesr   1  s   
		#x((A
a'''AQqT1Q4     Qqqq)))|_a999o66666Qqqq!Ab&y\1QQQ!BY<00000QvY&	*****QsVQsV$$$$$Qyyy\1YYY<00000Qs2vY!!!%%%%%Qs2vY"1"&&&&&QrUAaD!!!!!Qqu"uXq3r{+++++++r:   c                 F   t          j        dd          } t          | dd          | d d                   sJ t          | dd          | dd                   sJ t          | dd          | ddd                   sJ t          | d d          | ddd                   sJ d S )Nr   r   r   r   r   )r   r   r   rH   s    r8   1test_slicing_consistent_names_after_normalizationr   @  s    
D!!!AQqrrUAcrcF#####QqrrUAadG$$$$$QqrrUAa1fI&&&&&QqqqT1Qr!V9%%%%%%%r:   c                     t          j        t                    5  t          d           d d d            d S # 1 swxY w Y   d S )NHello!)r   r   	TypeErrorr   rD   r:   r8   test_sanitize_index_elementr   H  s    	y	!	! * *)))* * * * * * * * * * * * * * * * * *s   7;;c                    t          j        d          } t          j        t                    5  t	          d           d d d            n# 1 swxY w Y   t
          j                            t	          |                     g d                    g d           t
          j                            t	          d          g d           d S )Npandasr   r   )	r   importorskipr   r   r   rs   ru   rv   Series)pds    r8   test_sanitize_indexr  M  s    		X	&	&B	y	!	! ! !x   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! JN299YYY+?+?@@)))LLLJN955yyyAAAAAs   A

AAc                    d} t          dd          t          d           f}t          dd| |d          \  }}t          dt          d	d
d          t          d           fft          dt          ddd          t          d           ffd}||k    sJ |dk    sJ d} t          dd          t          dd          f}t          dd| |d          \  }}t          dt          d	d
d          t          ddd          fft          dt          d	d
d          t          d           fft          dt          d	d
d          t          ddd          fft          dt          ddd          t          ddd          fft          dt          ddd          t          d           fft          dt          ddd          t          ddd          ffd}||k    sJ |dk    sJ d S )N)      r  rC   r  rC   r  r  rC   r  rC   r      i  inoutrO   r[   )r  rp   r   r  r  r   )r  rO   r   r   r/   )r
  r   r   r
  r   r   )r    r/   r  )r  r        )r  rp   r"      rC   )r  rp   r   )r  rp   rp      )r  rO   r"   )r  rO   r   )r  rO   rp   )r  )r
  r   r   )r
  r   r   r  )r
  r   r   )r
  r   r   )r  )r   r  r  )r5   r   r   )	blockdimsr   dsk_outbd_outsols        r8   test_uneven_blockdimsr  V  s   FI3__eDkk*E!$y%!LLLOGVb"a0@0@%++/NOaQt/MN C c>>>>&&&&&CI3__eCoo.E!$y%!LLLOGVb"a0@0@%BPQBRBR/STb"a0@0@%++/NOb"a0@0@%2q///RSaQr2qAQAQ/RSaQt/MNaQq"a/QR C c>>>>+++++++r:   c                 r   t          j        dd          } t          j        t                    5  | d          d d d            n# 1 swxY w Y   t          j        t                    5  | dg          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g          d d d            n# 1 swxY w Y   t          j        t                    5  | d          d d d            d S # 1 swxY w Y   d S )Nr"   r   r   r   i)r   r   )r   r   r   r   r   r   s    r8   test_oob_checkr  p  sO   
$A	z	"	"  	!              	z	"	"  	1#              	z	"	"  	#              	z	"	"  	3%              	z	"	"  	$                 sY   	AA	A	)
A??BB#	B88B<?B<
C22C69C6	D,,D03D0
idx_chunks)Nr    r   r   x_chunks)N)r    r"   r   r    )r   r   )r   r   c                   t                               g dg dg dg          }t                               g d          }t                               g dg dg dg          }| t          j        ||           }|t          j        ||          }t	          |d d |f         |           t	          |j        |d d f         |j                   d S )	N)r   r!   rC   (   2   )<   F   P   Z   r   )n   x            )r    r   r   )r  r   r!   )r$  r!  r"  )r(  r%  r&  r   )rs   rt   r   r   r   T)r  r  rH   idxexpects        r8   test_index_with_int_dask_arrayr-  ~  s     				4446O6O6OP	 	A ((999

CXX|||\\\???CDDFM!H---mC
333a3i   ac#qqq&k68$$$$$r:   rT   r   c                    t          j        g dg dg|           }t          j        dd          }t          ||d d f         |dd d f                    t          |d d |f         |d d df                    d S )N)r   r!   rC   )r  r   r!  r   r   )r   r   r   )rT   rH   idx0s      r8   !test_index_with_int_dask_array_0dr0    s     	|||\\\26BBBA=1%%%Daaaaj!AqqqD'"""a4j!AAAqD'"""""r:   )r   r   r    r   r"   c                d   t          j        dd|           }t          ||                                         t                              g d                     t          j        d|           }t          ||                                         t                              g                      d S )Nr   r    r   )r   r   r   r   r"   )r   r   r   nonzerors   rt   r   )rT   r   s     r8   (test_index_with_int_dask_array_nanchunksr3    s     		"a'''Aa		nbhh~~~66777
6"""Aa		nbhhrll+++++r:   r   r   c                    t          j        d|           }t          j        ddgd          }t          ||         t                              ddg                     d S )Nr   r   r   r%   r   r    r   )r   r   r   r   rs   rt   rT   r   r+  s      r8   'test_index_with_int_dask_array_negindexr6    sX    
	!F###A
-R
+
+
+Cafbhh1v&&'''''r:   c                   t          j        d|           }t          j        dgd          }t          j        t
                    5  ||                                          d d d            n# 1 swxY w Y   t          j        dgd          }t          j        t
                    5  ||                                          d d d            d S # 1 swxY w Y   d S )Nr   r   r   r&   )r   r   r   r   r   r   r   r5  s      r8   )test_index_with_int_dask_array_indexerrorr8    sC   
	!F###A
-A
&
&
&C	z	"	"  	#              
-Q
'
'
'C	z	"	"  	#                 s$   A..A25A2)CCCr   )int8int16int32int64uint8uint16uint32uint64c                   t          j        g dd          }t          j        t                              ddg                              |           d          }t          ||         t                              ddg                     d S )N)r   r!   rC   r  r   r   r   r   r!   rC   )r   r   rs   rt   astyper   )r   r   r+  s      r8   %test_index_with_int_dask_array_dtypesrC    s{     	&&&r222A
-!Q((//66q
A
A
ACafbhhBx(()))))r:   c                    d } t          j        dd          }t          j        d| fiddt          j                  }||         }t          j        t                    5  |                                 d	d	d	           d	S # 1 swxY w Y   d	S )
zWTest that when the indices are a dask array
    they are not accidentally computed
    c                     t                      r4   )NotImplementedErrorrD   r:   r8   crashz7test_index_with_int_dask_array_nocompute.<locals>.crash  s    !###r:   r"   r   r   rG   rH   )r  )r   rT   r   N)	r   r   Arrayrs   r<  r   r   rF  r   )rG  rH   r+  r>   s       r8   (test_index_with_int_dask_array_nocomputerI    s    
$ $ $ 		!BA
(Huh'c'
R
R
RCsVF	*	+	+                   s    BB	Bc                    t                               d                              d          } t          j        | d          }t                               g dt                    }t          j        |d          }|t          dd	d          |f|t          dd
d          ffD ]8}t          j	        |          d         }t          | |         ||                    9d S )N$   r   r   r   )TTFTFFr   r   r   r   rO   r   )rs   r   r   r   r   r   boolr5   r   r   r   )rH   dr   r   x_indexs        r8   test_index_with_bool_dask_arrayrO    s    
		"f%%A
a'''A
**<<<D*
I
IC
-A
&
&
&CaA,sE!QNN.CD ( (,u%%a(!G*ah''''( (r:   c                 P   t           j                                        } |                     d          }|                     d          dk    }t          j        |d          }t          j        |d          }t          ddd          t          d           g}t          |j                  D ]x}|d d          }|                    ||           |d d          }|                    ||           t          |t          |                   |t          |                              yd S )	N)r   r   r   r   g      ?)r    r   r"   r   r   r   r   )rs   r   r   r   r   r5   r<   ndiminsertr   tuple)	rngrH   r   rM  dindr   r   index2index3s	            r8   !test_index_with_bool_dask_array_2rX    s   
)


!
!C

<  A
**R..3
C
a	***A=Q'''D1a^^U4[[)E16]] 6 6qqqaqqqa!E&MM"AeFmm$455556 6r:   c                     t          j        dd          } dt          dd          t          dd d          fD ]6}| |         }t          |j                  t          | j                  k     sJ 7d S )Nr2   r   r   r   r   rC   r   )r   r   r5   r   r   )rH   slcrL   s      r8   	test_cullr[    sw    
U###A5B<<q$!4!45 ) )cF16{{S[[((((() )r:   r   )r  r  )r   r    r"   r   c                    t           j                                                            |           }t          j        ||           }t          ||         ||                    d S )Nr   r   )r   r   rH   rM  s       r8   test_slicing_with_Nonesr]    sW    
 		&&u--A
a&&&Aah%!!!!!r:   r   r   r   c                 :   t           j                                                            dd          } t                              g d          }t          j        d          5 }| |                                          d d d            n# 1 swxY w Y   |rJ d S )Nr   r   r   sizerT   )r   r   r   r   Trecord)r   r   r   rs   rt   warningscatch_warningsr   )Xr+  rc  s      r8    test_slicing_integer_no_warningsrg    s    
	&&HV&DDA
((<<<
 
 C		 	-	-	- 	#              s   %BBBc                    d} t                               t                               |                                         |           }t          j                            |          }t          j        t          t          t          t                    D ]=}|
                    t                    dk    r!t          ||         ||                    >d S )Nr   r    r"   rp   r   r   )rs   r   prodr   r   corer   	itertoolsproductr   countEllipsisr   )r   rH   rL   r   s       r8   test_slicing_none_int_ellipesrp  "  s    E
		"''%..!!))%00A
A 8XxHH " "99X""!C&!C&!!!!	" "r:   c                 `   dt          d dd           d t          f\  } }}}d}t                              t                              |                                        |          }t          j                            |          }|| |||f         }|| |||f         }t          ||           d S )Nr   r   ri  )
r5   ro  rs   r   rj  r   r   rk  r   r   )	r   r   r   rM  r   rH   rL   xxyys	            r8   test_None_overlap_intrt  .  s    U4D))4:JAq!QE
		"''%..!!))%00A
A	
1aA:B	
1aA:Bb"r:   c                     t          t          j        dd          d         t                              d          d                    d S )Nr   r   r   )r   r   r   rs   rD   r:   r8   test_negative_n_slicingrv  9  s:    bga"""2&

277777r:   c                     t                               d          } t          j        | d          }t	          |ddg         | ddg                    t	          |ddg         | ddg                    d S )Nr"   r   r   r   r&   r   r   rs   r   r   r   r   r   s     r8   test_negative_list_slicingry  =  sk    
		!A	q	#	#	#Bb!Rk1aW:&&&b!Rk1aW:&&&&&r:   c                 f   t                               d          } t          j        | d          }t	          | dd          |dd                     t	          | dd          |dd                     t	          | d d         |d d                    t	          | d d         |d d                    d S )Nr"   r   r   ir$   rx  r   s     r8   test_permit_oob_slicesr{  D  s    
		!A	q	#	#	#Bah455	"""agr#$$x   agr$3$x   ah5D5	"""""r:   c                    t          t          d fd          t          d           d fk    sJ t          dt          j        f          dk    sJ t          dt          j        f          dk    sJ t          g dt          j        f          \  } |                                 g dk    sJ t          t          dd          t          j        f          t          dd          fk    sJ d S )Nr   r"   r   r&   )r&   )r&   r   r   r   )r   ro  r5   rs   r   tolist)r>   s    r8   test_normalize_indexr~  N  s    Hd+U33dT7JJJJJ1rvi((D00002y))U2222bfY77IV==??kkk))))5R==26)44r28HHHHHHHr:   c                     t          j        dd          } t                              d          dz  }| |         }|j        dk    sJ d S )Nr   r   r   rA   )rB   )r   r   rs   r   rT   )rH   r   rL   s      r8   test_take_semi_sortedr  W  sL    
4   AIIbMMBE	%A8|######r:   zchunks,index,expectedrB   r"   rA   r   r   r!   r   )rA   r   r    rA   r    c                ,   t          | |          }t          |          t          |          k    sJ t          ||          D ]O\  \  }}\  }}||k    sJ t          |          t          |          k    sJ ||k                                    sJ Pd S )N)r   )r   r   zipall)rT   r   r=   planr   rH   r   rL   s           r8   test_slicing_planr  _  s     e,,,Dt99H%%%%dH--  AAAvvvv1vvQQ||~~ r:   c                 t   t           j                            ddi          5  t                              dd                              ddd          } dgd	gd
z  z   }t          j        | d          }||         }| |         }t          ||           t          j        | d          }| |         }t          j
        t          j                  5  ||         }d d d            n# 1 swxY w Y   t          ||           |j        dk    sJ t           j                            ddi          5  t          j        d          5 }||         }d d d            n# 1 swxY w Y   t          ||           |rJ 	 d d d            n# 1 swxY w Y   t           j                            ddi          5  t          j        d          5 }||         }d d d            n# 1 swxY w Y   t          ||           |rJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Narray.chunk-size0.1Mbi   r<  r   r      r   r   r   )r   rO   rO   r   )r   r  r  ))r   r   r  r   array.slicing.split-large-chunksFTrb  ))r   r   r   r   r   r   r   r   r   r   r   r   r  r  )r   r   setrs   r   r   r   r   r   r   warnsPerformanceWarningrT   rd  re  )r   indexerarrr>   r=   rc  s         r8    test_getitem_avoids_large_chunksr  t  s   	,g6	7	7 "@ "@IIm7I33;;AsCHH#b.mAi000
 W:&(###mAm444W: \"/00 	" 	"\F	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	&(###} 99999 [__@%HII 	 	(555 &W& & & & & & & & & & & & & & &fh'''		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 [__@$GHH 	@ 	@(555 &W& & & & & & & & & & & & & & &fh'''=$??????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@9"@ "@ "@ "@ "@ "@ "@ "@ "@ "@ "@ "@ "@ "@ "@ "@ "@ "@s   B.H-	C%H-%C)	)H-,C)	-AH-.F	EFEF E!F9H-F			H-F		$H-1H	GHG  H#G $$H	H-H	H-H	H--H14H1c                    t           j                            ddi          5  t                              d                              ddd          } t          j        | d          }dt          j        ft          j        ff|_	        d	d
gdgdz  z   dgz   }| |         }||         }t          ||           d d d            d S # 1 swxY w Y   d S )Nr  r  i@B r     )r   r  r  r   r   r   r   r   r   r   r   r   r    )r   r   r  rs   r   r   r   r   r   r   r   )r   r  r  r=   r>   s        r8   (test_getitem_avoids_large_chunks_missingr    s    
,g6	7	7 $ $IIm$$,,QS99mAm444#bfY	:a&A39$s*W:W&(###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   BCCCc            	     D   t           j                            ddi          5  d} d}t                              ddgdgdz  z   d	gz             }t          d
d| ||          \  }}|dk    sJ t          |          dk    sJ t                              dgdz  g dz             }t          d
d| ||          \  }}|dk    sJ t          |          dk    sJ t                              g dd	gdz  z             }t          d
d| ||          \  }}|dk    sJ t          |          dk    sJ d} t                              g dd	gdz  z             }t          d
d| ||d          \  }}|dk    sJ t          |          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  Tr  r  r  rO   r   r   r   e   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  )ro   )r  r  r  r   r   r  rs   rt   r   r   )rT   r\   r   chunks2rz   s        r8   test_take_avoids_large_chunksr    s   	<dC	D	D  /!Q1#)+qc122CfeX>>=====3xx1}}}}!sYYY.//CfeX>>=====3xx1}}}}aS3Y.//CfeX>>=====3xx1}}}}/aS3Y.//CfeXAFFF=====3xx1}}}}}-                 s   E%FFFc            	        t           j                            ddi          5  d} t                              ddgdgdz  z   dgz             }d	}t          j        d
di          5  t          dd| ||          \  }}d d d            n# 1 swxY w Y   |dk    sJ t          |          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  Tr  r   r   r   r  r    rO   r  10GBr   r   ))r   r   r  r   r  r  r   r  )rT   r   r\   r  rz   s        r8   test_take_uses_configr    sm   	<dC	D	D  /!Q1#)+qc122Z+V455 	C 	CS&%BBLGS	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C:::::3xx1}}}}}                 s6   AB=$B;B=B	B=B	 B==CCc                    t          j        dd          } t                              d                              dd                              d          }t          j        t           j                  5 }| |          d d d            n# 1 swxY w Y   dt          |j
        d                   v sJ dt          |j
        d                   v sJ d S )	Nr   r   r   F)order10r   zout-of-order)r   r   rs   r   r   ravelr   r  r  strlist)rH   r   infos      r8   "test_pathological_unsorted_slicingr    s    
BA IIcNN""2r**00s0;;E	b+	,	, 	%               3ty|$$$$$$S1........s   7	BBBparams)r   r   r   )r"   r    r   c                    | \  }}}t          j        ||          }t          j        ||          }d||<   |                                }|j        |j        k    sJ dS )a  Reproducer for https://github.com/dask/dask/issues/3730.

    Mutating based on an array with different chunks can cause new chunks to be
    used.  We need to ensure those new chunk sizes are applied to the mutated
    array, otherwise the array won't generate the correct keys.
    r   r   N)r   r   r   r   )r  
array_sizechunk_size1chunk_size2rH   maskr>   s          r8   2test_setitem_with_different_chunks_preserves_shaper    si     ,2(J[
K000A8J{333DAdGYY[[F7fl""""""r:   c                 >   t          t                              d          dd d         t          j        dd          dd d                    t          t                              d          d d d         t          j        dd          d d d                    d S )Nr   r   r   r    r   )r   rs   r   r   rD   r:   r8   test_gh3579r    s    biimmAErE"BIb$;$;$;AErE$BCCCbiimmDDbD!29R#:#:#:44R4#@AAAAAr:   c                    t          j        dd          } t                              g d          }t	          || j                  \  }}t                              g d          }t                              g d          }t          j                            ||           t          j                            ||           d S )NrO   r   r   )r   r   r   r   rp   r   r"   r    )r   r   r   r   r   r    r"   rp   )r    r   r   r   rp   r   r   r"   )r   r   rs   rt   r
   rT   ru   assert_array_equal)rH   r   r   r   rV  rW  s         r8    test_make_blockwise_sorted_slicer    s    
	!AAHH---..E#E1844DAqXX...//FXX...//FJ!!!V,,,J!!!V,,,,,r:   z1ignore:Slicing:dask.array.core.PerformanceWarningzsize, chunks))r_  )r   r   )r_  )r   r   )r  )7   c                p   t           j                                                            dd| |          }t                              t          |                    }t          j                                                            |           ||         }t          ||          }t          ||           d S )Nr   r2   r`  )
r   r   r   integersrs   r   r   shuffler   r   )ra  rT   rH   r   r   r   s         r8   test_shuffle_slicer    s    
 		((DtF(KKAIIc!ffEI##E***	%AaAaOOOOOr:   lockTFr   fancyc                   t          j        t                              d          d|| |          }t          j        t                              d          d|| |          }t          j        ||g          }t          ||           d S )Nr    r   )rT   r   r  r  )r   r   rs   r   r   stackr   )r  r   r  a1a2als         r8   test_gh4043r  	  sv     
rxx{{1gDPU	V	V	VB	rwwqzz!W4u	U	U	UB	2r(		Bb"r:   c                 D   t          j        dd                              d          } t                              dd                              d          dk    }| |                                         }t                              dd          }t          ||           d S )Nr   rI   )r   r    r   r#   r0   )r   r   r   rs   r   r   )rt   r  actualr=   s       r8   )test_slice_array_3d_with_bool_numpy_arrayr    s    Ia$$Y//E99Q##I..3D4[  ""FyyR  Hfhr:   c                     t          j        t                              d                    } t                              d          dg         }t	          | dg         |           d S )N)r    r   r   )r   r   rs   r   r   )rt   r=   s     r8   test_slice_array_null_dimensionr    sQ    M"((6**++Exx$HeQCj(#####r:   )h
__future__r   rl  rd  r   tlzr   r   rs   r   
dask.arrayrt   r   r   dask.array.chunkr   dask.array.slicingr   r	   r
   r   r   r   r   r   r   r   dask.array.utilsr   r   r?   rE   rU   r]   rb   rf   rj   r{   r   r   r   r   r   r   r   r   r   markskipr   r   r   r   r   r   r   r   r   r   r   r   r  r  r  parametrizer-  r0  r3  r6  r8  rC  rI  rO  rX  xfailr[  ro  r]  r5   r   rg  slowrp  rt  rv  ry  r{  r~  r  r   r  r  r  r  r  r  r  r  r  filterwarningsr  r  r  r  rD   r:   r8   <module>r     s   " " " " " "            V!!              $ $ $ $ $ $                        2 1 1 1 1 1 1 1M M M`; ; ;
) ) )X% % %P  $  * * *4+ + +B0 0 04  "" " "6( ( (  " " "  & & &       
 +,,0 0 -,0.O O O2 2 2@ @ @
7 
7 
7
7 
7 
7- - -@ @ @M M M, , ,& & &* * *
B B B, , ,4   77%K%K%KLL% % ML 87%( 999--# # .-# ???33, , 43, Aq6**( ( +*( Aq6**  +* WWW * * *  ( ( (6 6 6( ) ) ) ";";";<<xkD(+h-=hPT?UV " "  =<" eeAhh1b"eeBootD&   " " "  8 8 8' ' '# # #I I I$ $ $ 	BIIa$$r)Q		!,=299Q<<?P+QRIIbMMQ2!#$q"))B--1*<&=>	

 
>>>QHq1a&kAs8#DE   #@ #@ #@L
$ 
$ 
$  6  
/ 
/ 
/ Iy#9::# # ;:#B B B
	- 	- 	- OPPOOO    QP $//T5M224-00  10 32 0/     $ $ $ $ $r:   