U
    /eY                  
   @   s  d dl Zd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZ ejdddgd	d
dgdd ddgdejd	d
dgdddgdd
ddgdejdddgd d d gddddgddZedddeg de dZeeded d
ddgZe Zi Zer,ded< dd Zdd Zdd Zdd Zdd  Z d!d" Z!d#d$ Z"d%d& Z#d'd( Z$d)d* Z%d+d, Z&d-d. Z'd/d0 Z(d1d2 Z)d3d4 Z*d5d6 Z+d7d8 Z,d9d: Z-d;d< Z.d=d> Z/d?d@ Z0dAdB Z1ej2j3e dCdDdEdF Z4dGdH Z5ej26dIej7dJdKdLdMe8dLgdNdO Z9ej26dIej7dJdKdLdMe8dLgdPdQ Z:ej26dRd d gd dgdd gddSdSggdTdU Z;dVdW Z<dXdY Z=dZd[ Z>d\d] Z?d^d_ Z@d`da ZAdbdc ZBddde ZCej2jDdfdg ZEdS )h    N)tokenize)PANDAS_GT_110PANDAS_GT_120tm)_coerce_loc_index)	assert_eq	make_meta                  )abindex      	   ))xr   )r   r	   )r   r
   i8)r   Zparent_metar   FZ
check_freqc                   C   s  t jdd jd dkstt jdd jd dks8tt jd jdksLttt jd tjdd  tt jdd tjdd  tt jd d tjd d  tt jdd  tjdd   tt jdg tjdg  tt jjd tjjdd  tt jjdd tjjdd  tt jjd d tjjd d  tt jjdd  tjjdd   tt jjdg tjjdg  tt jjg  tjjg   tt jjtg  tjjtg   t	
tdd  tt jd	d  tjd	d   tt jd	d
 tjd	d
  tt jd d tjd d  tt jdd tjdd  tt jd jtt jd jksjttt jd jtt jd jkstd S )Nr   r   r   r   )r   r   c                   S   s
   t jd S )N  )dloc r   r   F/tmp/pip-unpacked-wheel-dbjnr7gq/dask/dataframe/tests/test_indexing.py<lambda>/       ztest_loc.<locals>.<lambda>r   i  ii0r   )r   r   	divisionsAssertionErrorr   fullr   nparraypytestraisesKeyErrorsorteddaskr   r   r   r   test_loc   s,    """&&r*   c                  C   s   t jdddddgidddd	gd
} tj| ddd}d|_|jrBt|jdd jdd t	|jdd | jdd  t jdddddgidddd	gd
} tj| ddd}t	|jd | jdd  d S )Nr   r	   r
   r   r   
         (   r   T)npartitionssort)NNNsync)Z	scheduler)
pd	DataFrameddfrom_pandasr    known_divisionsr!   r   computer   dfddfr   r   r   test_loc_non_informative_index9   s    "
"r;   c               	   C   s   t j jd d } t j jdd  }t | |dd| | j |j |j g}|jdd j	|j	kspt
t|jdd | t|jdd  dkst
d S )	Nr   ))r9   r   )r9   r	   r9   2000Z2010z
2000-01-03z
2000-01-05r   )r4   _compatZmakeTimeSeriesilocSeriesr   minmaxr   r    r!   r   lenr7   )ABsr   r   r   test_loc_with_text_datesH   s    rF   c                   C   s   t tjtjd dk tjtjd dk  ttjtjd dk jttjtjd dk jksbtttjtjd dk jttjtjd dk jkstd S Nr
   r   r   )r   r   r   r   r"   r(   r)   r!   r   r   r   r   test_loc_with_seriesW   s    *8rH   c                   C   s   t tjtjd dkj tjtjd dkj  ttjtjd dkj jttjtjd dkj jksjtttjtjd dkj jttjtjd dkj jkstd S rG   )	r   r   r   r   valuesr"   r(   r)   r!   r   r   r   r   test_loc_with_array^   s    .
rJ   c                  C   s`   t tjdd d d f tjdd d d f  dd } t tjd d | f tjd d | f  d S )Nc                 S   s   | d dkS )Nr   r   r   r9   r   r   r   r   j   r   z(test_loc_with_function.<locals>.<lambda>c                 S   s   | j jdS )Nr   )columnsstrcontains)Z_dfr   r   r   _col_loc_funl   s    z,test_loc_with_function.<locals>._col_loc_fun)r   r   r   r"   )rO   r   r   r   test_loc_with_functioni   s    .rP   c               	   C   s   t jtjddtdtdd} t| d}t|j	|j
dkj | j	| j
dkj  tt( |j	|j
dkdd	d
ddgj  W 5 Q R X d S Nr,   r   abcdefghijklmnopqrstABCDEr   rL   r   r   r   gkot)r2   r3   r#   randomrandnlistr4   r5   r   r   rC   rI   r%   r&   
ValueErrorrepartitionr8   r   r   r   'test_loc_with_array_different_partitionr   s    &r^   c               	   C   s   t jtjddtdtdd} t| d}t|j	|j
dk | j	| j
dk  t|j	|j
dkdd	d
ddg | j	| j
dk  d S rQ   )r2   r3   r#   rY   rZ   r[   r4   r5   r   r   rC   r]   r8   r   r   r   (test_loc_with_series_different_partition   s    " r_   c               	   C   s  t jtjdtdd} t| d}t td}tj|dd}d}tj	t
|d |j|  W 5 Q R X t|j| | j|  tj	t
|d |j|j  W 5 Q R X t|j|j | j|  | }tj	t
|d |j|  W 5 Q R X tj	t
d	d |j|  W 5 Q R X d S )
Nr,   rR   r   r   Zbdmnatr/   zNCannot index with non-boolean dask Series. Try passing computed values insteadmatchz/Cannot index with list against unknown division)r2   r?   r#   rY   rZ   r[   r4   r5   r%   r&   r'   r   r   rI   Zclear_divisions)r9   r:   rE   dsmsgr   r   r    test_loc_with_non_boolean_series   s.    
 re   c                	   C   s  t tjd tjdddf  t tjddgf tjdddgf  t tjdddf tjdddf  t tjd ddf tjd ddf  t tjdd df tjdd df  t tjdgdf tjdgdf  t tjdddgf tjdddgf  t tjd ddgf tjd ddgf  t tjdd dgf tjdd dgf  ttjjj	 tjd  W 5 Q R X ttjjj	 tj
jd  W 5 Q R X ttjjj	 tj
jdd df  W 5 Q R X ttjjj	  tj
jtj
d d	kdf  W 5 Q R X d S )
N)r   r   r   r   r   r   )r   r   r   )r   r   r
   r   )r   r   r   r"   r%   r&   r2   coreZindexingZIndexingErrorr   r   r   r   r   
test_loc2d   s"    &&&&"***rg   c                  C   sv  t jtjddtdtdd} t| d}t|j	d | j	dgd	f  t|j	dd	gf | j	dgd	gf  t|j	dd
d	f | j	dd
d	f  t|j	dd
d	gf | j	dd
d	gf  t|j	dgd	gf | j	dgd	gf  t|j	dddgd	gf | j	dddgd	gf  t|j	ddgd	gf | j	ddgd	gf  t|j	dddddgd	gf | j	dddddgd	gf  d S )Nr,   r   rR   rS   rT   r   r   rC   r   rC   rW   ncrX   r   rrU   h)
r2   r3   r#   rY   rZ   r[   r4   r5   r   r   r8   r   r   r   test_loc2d_with_known_divisions   s"    $&*&.*rm   c                  C   s   t jtjddtdtdd} t| d}dt|j	 |_	|j
dksLtt|jd	 | jd
gdf  t|jd
dgf | jd
gdgf  t|jd
ddf | jd
ddf  t|jd
ddgf | jd
ddgf  d S )Nr,   r   rR   rS   rT   r   NFrh   r   rC   rW   )r2   r3   r#   rY   rZ   r[   r4   r5   rB   r    r6   r!   r   r   r8   r   r   r   !test_loc2d_with_unknown_divisions   s    $&ro   c                  C   sf  t jtjddtdtdd} t| d}t|j	d | j	dgd	f  t|j	dd	gf | j	dgd	gf  t|j	d
 | j	dgdf  t|j	ddgf | j	dgdgf  t|j	ddd	f | j	ddd	f  t|j	ddd	gf | j	ddd	gf  t|j	dddf | j	dddf  t|j	dddgf | j	dddgf  t|j	ddddf | j	ddddf  t|j	ddddf | j	ddddf  t|j	dddd	f | j	dddd	f  t|j	dddd	f | j	dddd	f  t|j	|j
dkdf | j	| j
dkdf  t|j	|j
dkd	dgf | j	| j
dkd	dgf  d S )Nr,   r   rR   ZAABCDrT   r   rh   r   rC   )jrD   rp   rD   rW   qDr   C)r2   r3   r#   rY   rZ   r[   r4   r5   r   r   rD   r8   r   r   r   test_loc2d_duplicated_columns   s(    $$&*&*....*rt   c                     s  t jddddddddd	g	d	ddddddddg	d
dd
gd dtdd t d} t| d  d  t| d j| jd  t| ddg  ddg  t	| ddg j| jddg  t| | j
   j
  t| j
j| jj
 t| | j
ddddg   j
  tt fdd tt fdd tt fdd t tjdd t d} t| d  d  t| ddg  ddg  tt fdd tt fdd d S )Nr	   r
   r   r   r   r   r   r   r   TFrC   rD   rs   ABCrL   rC   rD   r   c                      s    d S )NXr   r   rK   r   r   r   $  r   ztest_getitem.<locals>.<lambda>c                      s    ddg S )NrC   rx   r   r   rK   r   r   r   %  r   c                      s    j S rn   )rx   r   rK   r   r   r   &  r   r+   c                      s    d S )Nr   r   r   rK   r   r   r   .  r   c                      s    ddg S )Nr	   r   r   r   rK   r   r   r   /  r   )r2   r3   r[   r4   r5   r   r   Zassert_series_equalZ_metaZassert_frame_equalrs   r]   r%   r&   r'   AttributeErrorr#   rY   rZ   )r:   r   rK   r   test_getitem  s0     $rz   c                  C   s   t jddddddddd	g	d	ddddddddg	d
dd
gd dtdd} t| d}t|dd | dd  t|dd | dd  t|dd  | dd   d S )Nr	   r
   r   r   r   r   r   r   r   TFru   Z	abcdefghir   r   er   f)r2   r3   r[   r4   r5   r   r8   r   r   r   test_getitem_slice2  s    r}   c               	   C   s   t dtdi} t| d}tt |dd  W 5 Q R X t jdtdidddd	d
dgd} t| d}t|dd | dd  t|dd  | dd   t|d d | d d  d S )NrC   r   r
   r	   r   g      ?g       @g      @g      @g      $@g      &@r   r   )	r2   r3   ranger4   r5   r%   r&   NotImplementedErrorr   r8   r   r   r   test_getitem_integer_sliceA  s    "r   c                  C   sl   t jddddgitttjdddgd} t| d}tttj|j	|_	t
|jdd |jdd  d S 	Nr   r	   r
   r   20142015Z2016r   )r2   r3   r[   mapr#   
datetime64r4   r5   tupler    r   r   r9   r   r   r   r   test_loc_on_numpy_datetimesP  s     r   c                  C   sl   t jddddgittt jdddgd} t| d}ttt j|j|_t	|j
dd |j
dd  d S r   )r2   r3   r[   r   	Timestampr4   r5   r   r    r   r   r   r   r   r   test_loc_on_pandas_datetimesZ  s     r   c                  C   sz   t jdddd} d | _t jdtt| i| d}tj|dd}td	d
}|j	|d d f }|j	|d d f }t
|| d S )Nz
2016-01-01z
2016-01-31Z12h)freqnumr   r	   r`   z
2016-01-03z
2016-01-05)r2   
date_ranger   r3   r~   rB   r4   r5   slicer   r   )Zdatetime_indexr9   r:   Zslice_resultexpectedr   r   r   test_loc_datetime_no_freqd  s    
r   c                  C   s0   t jtjfD ]} tt| dgd| stqd S )Nr   )r2   r   r#   r   
isinstancer   r!   )rX   r   r   r   test_coerce_loc_indexr  s    r   c                  C   s  t jtjdtjddt jddddd} t| d}t| j	d |j	d  t| j	dd	 |j	dd	  t| j	d
 
 j|j	d
 ft t| jj	d |jj	d ft t| jj	dd	 |jj	dd	 ft t| j	t d 
 j|j	t d ft t| j	t dt d	 |j	t dt d	 ft t| j	t d
 
 j|j	t d
 ft t jtjdtjddt jddddd} t| d}t| j	d |j	d  t| j	d |j	d  t| j	dd |j	dd  t| j	dd |j	dd  t| jj	d |jj	d  t| jj	d |jj	d  t| jj	dd |jj	dd  t| jj	dd |jj	dd  d S )Nd   rC   rD   
2011-01-01Hr   Zperiodsr   r+   
2011-01-02
2011-01-10z2011-01-02 10:00M2   2011-0120112012-05r   )r2   r3   r#   rY   rZ   r   r4   r5   r   r   to_frameT
CHECK_FREQrC   r   rD   r8   r   r   r   test_loc_timestamp_strw  sf    "r   c               	   C   s>  t jtjdtjddt jddddd} t| d}trpt	j
tdd	 t| jd
 |d
  W 5 Q R X nt| jd
 |d
  t| d
d |d
d  t jtjdtjddt jddddd} t| d}t| jd |jd  t| jd |jd  t| dd |dd  t| dd |dd  d S Nr   r   r   r   r   r   r+   z(Indexing a DataFrame with a datetimelikera   r   r   rr   r   r   r   r   r   )r2   r3   r#   rY   rZ   r   r4   r5   r   r%   warnsFutureWarningr   r   r8   r   r   r   test_getitem_timestamp_str  s,      r   z5.loc partial index with PeriodIndex not yet supported)reasonc                  C   s  t jtjdtjddt jddddd} t| d}t| j	d |j	d  t| j	dd	 |j	dd	  t jtjdtjddt jdd
ddd} t| d}t| j	d |j	d  t| j	d |j	d  t| j	dd |j	dd  t| j	dd |j	dd  d S )Nr   r   r   r   r   r   r+   r   r   rr   r   r   r   r   r   )
r2   r3   r#   rY   rZ   period_ranger4   r5   r   r   r8   r   r   r   test_loc_period_str  s     r   c               	   C   s  t jtjdtjddt jddddd} t| d}trpt	j
tdd	 t| jd
 |d
  W 5 Q R X nt| d
 |d
  t| d
d |d
d  t jtjdtjddt jddddd} t| d}trt	j
tdd	 t| jd |d  W 5 Q R X nt| d |d  trVt	j
tdd	 t| jd |d  W 5 Q R X nt| d |d  t| dd |dd  t| dd |dd  d S r   )r2   r3   r#   rY   rZ   r   r4   r5   r   r%   r   r   r   r   r8   r   r   r   test_getitem_period_str  sD          r   r   r   r   r   r   c                 C   sR   t jdtjdi| d}t|d}|j }|j }|j	sDt
t|| d S )NrC   r   r   r+   )r2   r3   r#   rY   rZ   r4   r5   r   Z	to_seriesr6   r!   r   r   r9   r:   r   actualr   r   r   test_to_series  s    


r   c                 C   sp   t jdtjdi| d}t|d}|j }|j }|j	sDt
t|| t|jjdd|jjdd d S )NrC   r   r   r+   Zfoo)name)r2   r3   r#   rY   rZ   r4   r5   r   r   r6   r!   r   r   r   r   r   test_to_frame/  s    



r   indexerTc                 C   s\   t ddgddgddgd}t|d}|jd d | f }|jd d | f }t|| d S )Nr	   r
   r   r   r   r   ru   )r2   r3   r4   r5   r>   r   )r   r9   r:   r   r   r   r   r   	test_ilocD  s
    r   c               	   C   sD   t dddg} t| d}tt |jd d   W 5 Q R X d S )Nr	   r
   r   )r2   r?   r4   r5   r%   r&   ry   r>   )rE   rc   r   r   r   test_iloc_seriesO  s    r   c               	   C   s   t ddgddgddgd} t| d}tt |jddgd d f  W 5 Q R X tt |jddgddgf  W 5 Q R X tt" |jddgddgddgf  W 5 Q R X tt	 |jd d ddgf  W 5 Q R X d S )	Nr	   r
   r   r   r   r   ru   r   )
r2   r3   r4   r5   r%   r&   r   r>   r\   
IndexErrorr8   r   r   r   test_iloc_raisesV  s      &r   c                  C   s2  t ddgddgddgd} t| d}ddd	g| _ddd	g|_|jd d df }td
d |jj	 D srt
|jd d df }t|| jd d df  |jd d df }t|| jd d df  |jd d ddgf }t|| jd d ddgf  |jd d dddf }t|| jd d dddf  d S )Nr	   r
   r   r   r   r   ru   rC   rs   c                 S   s   g | ]}| d qS r>   
startswith.0keyr   r   r   
<listcomp>o  s     z/test_iloc_duplicate_columns.<locals>.<listcomp>r   r   )r2   r3   r4   r5   rL   r>   anyr)   layerskeysr!   r   r9   r:   Z	selectionZselect_firstZselect_zerothZselect_list_colsZselect_negativer   r   r   test_iloc_duplicate_columnsg  s    r   c                  C   s8  t ddgddgddgd} t| d}|jd d df }tdd	 |jj D sZt	t
d
d	 |jj D sxt	|jd d df }t|| jd d df  |jd d df }t|| jd d df  |jd d ddgf }t|| jd d ddgf  |jd d dddf }t|| jd d dddf  d S )Nr	   r
   r   r   r   r   ru   c                 S   s   g | ]}| d  qS r   r   r   r   r   r   r     s     z1test_iloc_dispatch_to_getitem.<locals>.<listcomp>c                 S   s   g | ]}| d qS )getitemr   r   r   r   r   r     s     r   r   r   )r2   r3   r4   r5   r>   allr)   r   r   r!   r   r   r   r   r   r   test_iloc_dispatch_to_getitem~  s    r   c                  C   s   t dgd dgd dgd dgd d} t| d}|ddd	g }|jd d d
f }|jd d df }|jd d df }|jdkst|jdkst|jd	kstt|||\}}}|jdkst|jdkst|jd	kstd S )Nr	   r   r
   r   r   )rC   rD   rs   rr   rs   rC   rD   r   )	r2   r3   r4   r5   r>   r   r!   r)   r7   )r9   r:   r   r   rj   Za1Zb1Zc1r   r   r    test_iloc_out_of_order_selection  s    ,r   c                  C   sn   t dddg} t jddt jgdd}tj| dd}tj|dd}t|| | |  t|j| | j|  d S )	Nr   r	   r
   TFboolean)Zdtyper`   )r2   r?   ZNAr4   r5   r   r   )s1s2ddf1ddf2r   r   r   &test_pandas_nullable_boolean_data_type  s    r   c                  C   st   t dddg} tj| dd}|jdd }|jdd }t|t|ksNt|jdd }t|t|ksptd S )Nr   r	   r
   r`   )r2   r?   r4   r5   r   r   r!   objZdask_dfr   r   r   r   r   !test_deterministic_hashing_series  s    r   c                  C   s   t jddddgddddggd	d
ddgd} tj| dd}|jddd	dgf }|jddd	dgf }t|t|ksxt|jdddf }|jdddf }t|t|kst|jd d ddgf }|jd d ddgf }t|t|kst|jd d ddgf }t|t|kstd S )Nr   r	   r
   r   r   r   r   r   r   r   rj   rw   r`   )r2   r3   r4   r5   r   r   r!   r>   r   r   r   r   $test_deterministic_hashing_dataframe  s    *r   c                  C   s   t d} t d}ddddddd	d
g}| td|dd}tj|dd}| ddd
g}|ddd
g}t	|j
| |j
|  t	|j
| |j
|  d S )Ncudfcupyr	   r   r+         r      i,  r   )r   r   r   r   r`   )r%   Zimportorskipr3   r~   Z	set_indexr4   r5   r?   r$   r   r   )r   r   r   r9   r:   Z	cdf_indexZ
cupy_indexr   r   r   test_gpu_loc  s    

r   )FZnumpyr#   Zpandasr2   r%   r)   Zdask.dataframeZ	dataframer4   Z	dask.baser   Zdask.dataframe._compatr   r   r   Zdask.dataframe.indexingr   Zdask.dataframe.utilsr   r   r3   ZdskZIndexmetar   r7   r"   r   r*   r;   rF   rH   rJ   rP   r^   r_   re   rg   rm   ro   rt   rz   r}   r   r   r   r   r   r   r   markZxfailr   r   Zparametrizer   r~   r   r   r   r   r   r   r   r   r   r   r   Zgpur   r   r   r   r   <module>   s   $$$ 
 	!$

> 
-

&

