U
    sVc                     @   s  d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	Z
d dl	mZmZmZmZ d dlmZ G dd dZG dd dZG d	d
 d
Zdd Zdd Zejddgd edgd gejddddddgedddddggdd Zejddgedggejddgedggdd ZG dd dZG dd dZG dd dZdd Zejd ejd!d"gd#d$d%ggd ejd&fejd!d"gd#d$d%ggd'ejd#fd(fd!d"d#gd$ejd$ggd'd"ejfd&fgd)d* Z ejd+ejd'd,gd-d.dgge!d d,dejd'fejd'd,gd-d.dgge!d d-dejd/fd'd,d-gd.ejdgge!d'd-dd,ejfd-fd'd,d-gd.ejdgge!d'd-dd,ejfd0fgd1d2 Z"d3d4 Z#dS )5    )	timedeltaN)InvalidIndexErrorPerformanceWarning)CategoricalIndex
MultiIndex
date_rangec                   @   s
  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
dejddgdddggdejdfejddgdddggdejdfejddgdddggdejdfdddgdejdggddejfdfdddgdejdggddejfdfdddgdejdggddejfdfgdd ZdS )TestSliceLocsc                 C   sz   | d\}}|dd}|dks&t|d d}|dks>t|dd }|dt|fks^t|dd}|d	ksvtd S )
Nr   footwo)Zquxone)      )r   r   r   barbaz)      )	sortlevel
slice_locsAssertionErrorlen)selfidx
sorted_idx_result r   L/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/indexes/multi/test_indexing.pytest_slice_locs_partial   s    z%TestSliceLocs.test_slice_locs_partialc                 C   s   t  }| }|j}t||jd |jd  }|| }|dd  }t |j|j t||jd tdd |jd tdd  }|| }|dd  }t |j|j d S )Nr            seconds   )	tmmakeTimeDataFramestackindexslicer   assert_almost_equalvaluesr   )r   dfstackedr   ZslobZslicedexpectedr   r   r   test_slice_locs&   s     zTestSliceLocs.test_slice_locsc              	   C   s   t  }| }|j}tjtdd |d W 5 Q R X tjtdd" ||jd tdd d W 5 Q R X t 	dd}| }|j}tjtdd |tdd W 5 Q R X tjtdd ||jd d	 W 5 Q R X d S )
Nz^Level type mismatchmatchr      r   r"   r#   r   r   r   )r!   a)
r&   r'   r(   r)   pytestraises	TypeErrorr   r   ZmakeCustomDataframe)r   r-   r.   r   r   r   r   "test_slice_locs_with_type_mismatch:   s    &z0TestSliceLocs.test_slice_locs_with_type_mismatchc                 C   s   t ttdttdttdgtddddddddgtddddddddgtddddddddggd}d}tjt|d |d	d
 W 5 Q R X |	d\}}|d	d
 d S )Nr   r   r   r   r4   levelscodesz4[Kk]ey length.*greater than MultiIndex lexsort depthr1   )r   r   r   )r   r   r   )
r   r   nparangearrayr7   r8   KeyErrorr   r   )r   r)   msgZsorted_indexr   r   r   r   test_slice_locs_not_sortedK   s    &z(TestSliceLocs.test_slice_locs_not_sortedc                 C   s   t ddddgdddggdddddddddg	dddddddddg	gd}|dd	}|d
ks^t|dd}|d
ksvt|dd	}|d
kst|dd}|d
kst|dd}|dkst|dd}|dt|fkstd S )Nr   r   r   r%   r   r4   r;   r   r   r5   )r4   r%   r   r   r   )r%   r4   )r4      
   )r   r   r   r   )r   r)   r   r   r   r   test_slice_locs_not_contained]   s     *z+TestSliceLocs.test_slice_locs_not_contained$index_arr,expected,start_idx,end_idxr6   bcde)r   r4   N)rK   rN   r3   )rL   rN   c                 C   s(   t |}|j||d}||ks$td S N)startend)r   from_arraysr   r   )r   	index_arrr/   	start_idxend_idxr   r   r   r   r   "test_slice_locs_with_missing_valuew   s    
z0TestSliceLocs.test_slice_locs_with_missing_value)__name__
__module____qualname__r   r0   r:   rC   rI   r7   markparametrizer>   nanrV   r   r   r   r   r	      s    """r	   c                   @   s   e Zd Zdd Zdd ZdS )TestPutmaskc              	   C   s   d}t jt|d$ |tt|d tjd W 5 Q R X t jt|d$ |tt|d tjd W 5 Q R X t jt|d |dd W 5 Q R X d S )Nz,putmask: mask and data must be the same sizer1   r   r   )r7   r8   
ValueErrorputmaskr>   Zonesr   Zbool_r   r   rB   r   r   r   test_putmask_with_wrong_mask   s    ((z(TestPutmask.test_putmask_with_wrong_maskc                 C   st   t tjdftjdfdg}t dddg}tdddg}|||}t |d |d |d	 g}t|| d S )
Nr%   )r6   r   r6   r   )rM   r   TFr   r   r   )r   from_tuplesr>   r\   r@   r_   r&   assert_index_equal)r   leftrightmaskr   r/   r   r   r   test_putmask_multiindex_other   s    z)TestPutmask.test_putmask_multiindex_otherN)rW   rX   rY   ra   rh   r   r   r   r   r]      s   r]   c                   @   s"  e Zd Zdd Zdd Zdd Zejdde	j
d	gd
ddggde	j
d	ge	jdddge	jdfde	j
d	gd
ddgge	j
dfge	jdge	jdfdd	d
ge	j
ddggde	j
fge	jdge	jdfdd	d
ge	j
ddgge	j
ddge	jdddge	jdfgdd Zdd Zdd Zdd Zdd ZdS )TestGetIndexerc              	   C   sH  t td}t td}tjdddddddgtjd}tjdddddddgtjd}t||g||gd}|d d }|dddg }||}t|tjddd	gtjd |j|d
d}tjd	ddddgtjd}	t||	 |j|d d d	 d
d}
t|
|	d d d	  |j|dd}t|| |j|dd}tjdddddgtjd}	t||	 |j|d d d	 dd}
t|
|	d d d	  |j|dd}t|| ||j	}||}t|| |dddg}|d	d	d	gk
 stt ttdttd }t ttd}d}tjt|d || W 5 Q R X d S )Nr   r   r   r   r4   dtyper;   r   rG   padmethodffillbackfillbfillrH      z8Reindexing only valid with uniquely valued Index objectsr1   )r   r>   r?   r@   intpr   get_indexerr&   r+   r,   allr   listranger7   r8   r   )r   Z
major_axisZ
minor_axisZmajor_codesZminor_codesr)   Zidx1Zidx2Zr1e1Zr2Zrffill1Zrbfill1Zrexp1rB   r   r   r   test_get_indexer   sH     

zTestGetIndexer.test_get_indexerc              	   C   sp   t ddg}d}tjt|d |jdgdd W 5 Q R X d}tjt|d |jdgd	d
d W 5 Q R X d S )Nrb   rK   r   zJmethod='nearest' not implemented yet for MultiIndex; see GitHub issue 9365r1   r6   nearestrm   z,tolerance not implemented yet for MultiIndexrl   r   )rn   	tolerance)r   rc   r7   r8   NotImplementedErrorrt   )r   midxrB   r   r   r   test_get_indexer_nearest   s    z'TestGetIndexer.test_get_indexer_nearestc              	   C   sL   t tdddgttddddg}||}t|tjdtj	d	 d S )
Nr6   rK   rL   
2012-01-01r4   H)periodsfreq	   rj   )
r   from_productr   r   rt   r&   assert_numpy_array_equalr>   r?   rs   )r   r~   r   r   r   r   !test_get_indexer_categorical_time   s    
z0TestGetIndexer.test_get_indexer_categorical_timezindex_arr,labels,expectedr   r   r4   r   r   rG   rj   r   c                 C   s$   t |}||}t|| d S )N)r   rR   rt   r&   r   )r   rS   labelsr/   r   r   r   r   r   #test_get_indexer_with_missing_value   s    

z2TestGetIndexer.test_get_indexer_with_missing_valuec                 C   s"  t dddgddddgg}t dgdddgg}||}tjdddg|jd	}t|| |j|d
d}tjdddg|jd	}t|| |j|dd}tjdddg|jd	}t|| |j|dd}tjdddg|jd	}t|| |j|dd}tjdddg|jd	}t|| d S )NrG   r   r   r   r4   r   r%      rj   rp   rm   r   rq   rl   ro   )r   r   rt   r>   r@   rk   r&   r+   r   
mult_idx_1
mult_idx_2indexerr/   backfill_indexerpad_indexerr   r   r   test_get_indexer_methods	  s"    
z'TestGetIndexer.test_get_indexer_methodsc           
      C   s  t ddgdddgddgg}t dd	d
ddddg}|js@t|jsJt|jsTt|js^t|d |d k srt|d |d   k r|d k sn t|d |d kst|d |d   k r|d k sn t|d |d   k r|d k sn t|d |d   k r|d k s"n t|d |d k s8t||}tjdddddddg|j	d}t
|| |j|dd}tjdddddddg|j	d}t
|| |j|dd}tjdddddddg|j	d}t
|| |d |d   k r |d k sn t|d |d   k r*|d k s0n t|d |d   k rT|d k sZn t|d |d   k r~|d k sn t|d |d   k r|d k sn t|d |d kst|d |d   k r|d k sn t|d |d   k r|d k sn t|d |d   k r<|d k sBn t|d |d   k rf|d k sln t|d |d   k r|d k sn t|d |d   k r|d k sn t||}tjddddddddddddg|j	d}t
|| |j|dd}tjddddddddddddg|j	d}t
|| |j|dd}	tjddddddddddddg|	j	d}t
||	 d S )Nr   r4   r   r   r%   r   r   )r   r   rF   )r   r   r   )r   r%   r   )r   r   r%   )r   r   r   )r   r   rF   )r4   r%   rF   r   rG   rj   rp   rm   rl      rF   r   rH   rq   )r   r   rc   Zis_monotonic_increasingr   Z	is_uniquert   r>   r@   rk   r&   r+   )
r   r   r   Zindexer_no_fillr/   Zindexer_backfilledZindexer_paddedr   r   r   r   r   r   %test_get_indexer_three_or_more_levels=  sz    



&&&*
***********
   z4TestGetIndexer.test_get_indexer_three_or_more_levelsc                 C   s   t ddggd }t ddg}|d |d   k rB|d k sHn t|d	 |d k s\t||}tjd	d	g|jd
}t	|| |j|dd}tjdd	g|jd
}t	|| |j|dd}tjddg|jd
}t	|| d S )Nr   r   r   )r   r4   r   r   )r   r4   r   r   r   r   rF   rG   rj   rq   rm   ro   r    )
r   r   rc   r   rt   r>   r@   rk   r&   r+   r   r   r   r    test_get_indexer_crossing_levels  s    &
z/TestGetIndexer.test_get_indexer_crossing_levelsc              	   C   s   t tdddgg}d}tjt|d |j|d d dd W 5 Q R X d	}tjt|d |j|d d d
d W 5 Q R X d S )Nr4   ABz;limit argument only valid if doing pad, backfill or nearestr1   rG   r   )limitz?tolerance argument only valid if doing pad, backfill or nearestZpiano)r|   )r   r   rw   r7   r8   r^   rt   )r   mirB   r   r   r   !test_get_indexer_kwarg_validation  s     z0TestGetIndexer.test_get_indexer_kwarg_validationN)rW   rX   rY   ry   r   r   r7   rZ   r[   r>   r\   r@   rs   r   r   r   r   r   r   r   r   r   ri      s,   4
00

4c.ri   c              	   C   s   | d dkst | dd }| dddg }||s8t | ddddddg }| tddddddg }| ddddg }||st ||st d S )	Nr   )r   r   r   r4   r   TFr   )r   equalsr>   r@   )r   r   r/   Zresult2r   r   r   test_getitem  s    r   c                 C   sB   |  d\}}|dtddks&t|dtddks>td S )Nr   r   r4   r   r   r   )r   get_locr*   r   )r   r   r   r   r   r   test_getitem_group_select  s    r   ind1Tr   ind2Fc                 C   sF   t dddddg}t||  | t ddg}t|| | d S )NrH   r   )rr   r   )r"   r4   )(   r   )2   r   )r   rc   r&   rd   r   r   r   r/   r   r   r   test_getitem_bool_index_all  s    r   c                 C   s\   t dg}t||  | t tjg tjdtjg tjdgg g gd}t|| | d S )Nr   rj   r;   )r   rc   r&   rd   r>   r@   int64r   r   r   r   test_getitem_bool_index_single   s    r   c                   @   s   e Zd Zdd Zdd Zdd Zejde	e
eegejde	e
eegd	d
 Zejdddgejde	e
ge
e	ggdd Zejdeegdd Zejdddgdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"S )#
TestGetLocc                 C   sR  | ddkst| ddks$ttjtdd | d W 5 Q R X tjtdd | d	 W 5 Q R X d
}tjt|d |j ddd W 5 Q R X ttt	dtt	dtt	dgt
ddddddddgt
ddddddddgt
ddddddddggd}tjtdd | d W 5 Q R X | dtddksNtd S )Nr
   r   )r   r   r4   z^10$r1   r   r   z^'quux'$ZquuxzEonly the default get_loc method is currently supported for MultiIndexr   r{   rm   r   r   r   r;   z
^\(1, 1\)$)r   r   )r   r   r   )r   r   r7   r8   rA   r}   r   r   r>   r?   r@   r*   )r   r   rB   r)   r   r   r   test_get_loc  s&    &zTestGetLoc.test_get_locc              	   C   s   t ddddg}|d}tdd}||ks0tt dddddg}|d}d}||ks\ttjtdd |d W 5 Q R X d S )	Nr   r   r   rL   r6   rK   2r1   )r   r   r*   r   r7   r8   rA   )r   r)   r   r/   rsZxpr   r   r   test_get_loc_duplicates(  s    


z"TestGetLoc.test_get_loc_duplicatesc                 C   s  t ttdttdttdgtddddddddgtddddddddgtddddddddggd}|d\}}tdd}|| dd}||kst|	|st|d\}}d}||kst|d kstt
jtd	d
 |d W 5 Q R X t
jtdd
 |dd W 5 Q R X t
jtdd
 |jdddjddd W 5 Q R X t dgttdgtddddgtddddggd}|dtd d f\}}td d }||kst|	|dstd S )Nr   r   r   r   r4   r;   r   r   )r   r   r   z
^\(2, 2\)$r1   rE   z^2$)leveli  )r   r   r>   r?   r@   Zget_loc_levelr*   Z	droplevelr   r   r7   r8   rA   droprv   rw   )r   r)   locZ	new_indexr/   Z	exp_indexr   r   r   r   test_get_loc_level6  s<    &
""
zTestGetLoc.test_get_loc_leveldtype1dtype2c                 C   sL   t ddg|t ddg|g}t|}||d dksHtd S )Nr   r   r   )r>   r@   Zastyper   r   r   r   )r   r   r   r<   r   r   r   r   test_get_loc_multiple_dtypes\  s    (
z'TestGetLoc.test_get_loc_multiple_dtypesr   r   r   dtypesc                 C   sf   ddgddgg}ddg}|\}}t jddg|d||< |d||< t|}|t|dksbtd S )	Nr6   rK   rL   rM   r   r   rj   r4   )r>   r@   r   r   r   tupler   )r   r   r   r<   keyZ	lev_dtypeZ	key_dtyper   r   r   r   test_get_loc_implicit_castd  s    
z%TestGetLoc.test_get_loc_implicit_castrk   c              	   C   s   t ddg|dtjdddg}t|}|tkrtjtdd |	dd	ksRt
W 5 Q R X tjtd
d |	ddks~t
W 5 Q R X n$|	dd	kst
|	ddkst
tjtdd |	d W 5 Q R X tjtdd |	d W 5 Q R X d S )NFTrj   r   r   z
^\(0, 1\)$r1   r   r   z
^\(1, 0\)$rD   z^\(False, True\)$)FTz^\(True, False\)$)TF)r   r>   r?   r   r   boolr7   r8   rA   r   r   )r   rk   r<   r   r   r   r   test_get_loc_cast_boolp  s    
z!TestGetLoc.test_get_loc_cast_boolc                 C   s^   ddgddgg}ddg}t jd|gt|d||< |||< t|}|t|dksZtd S )Nr6   rK   rL   rM   r   rj   r4   )r>   r@   typer   r   r   r   r   )r   r   Znulls_fixturer<   r   r   r   r   r   test_get_loc_nan  s    
zTestGetLoc.test_get_loc_nanc              	   C   s   t ddgddgg}t|dts*ttjtdd |d W 5 Q R X tjtd	d |t	j
 W 5 Q R X tjtd
d |t	j
g W 5 Q R X d S )Ng      ?g       @g      @g      @r   z^3$r1   r4   z^nan$z\[nan\])r   rR   
isinstancer   r*   r   r7   r8   rA   r>   r\   r   r   r   r   r   r   test_get_loc_missing_nan  s    z#TestGetLoc.test_get_loc_missing_nanc                 C   s   t tjdggd }tddd }|tj|ks6tt tjddtjgg}tddddg}t	
|tj| t tjdggd }tddd }|tjdf|kstd S )Nr   r   r   TFr4   r   )r   r   r>   r\   r*   r   r   rR   r@   r&   r   )r   r   r/   r   r   r   1test_get_loc_with_values_including_missing_values  s    z<TestGetLoc.test_get_loc_with_values_including_missing_valuesc                 C   st   t dddgdddddd	d
dggddddddddddg
ddddddddddg
gddgd}|dtddksptd S )NDr   Cr         %   9   C   K   R   r   r   r4   r   r%   r   r   tagdayr<   r=   names)r   r   r*   r   )r   r)   r   r   r   test_get_loc_duplicates2  s    .z#TestGetLoc.test_get_loc_duplicates2c              	   C   sr   t dgddgdggddgddgddggdddgdd}d	}tt ||}W 5 Q R X |tddd ksntd S )
Nr6   r   r   r   xyz)r<   r=   r   Z	sortorder)r6   r   )r   r&   assert_produces_warningr   r   r*   r   )r   r   r   r   r   r   r   test_get_loc_past_lexsort_depth  s    z*TestGetLoc.test_get_loc_past_lexsort_depthc              	   C   s:   t ddg}d}tjt|d |g  W 5 Q R X d S )Nrb   rz   z\[\]r1   )r   rc   r7   r8   r   r   r`   r   r   r   #test_multiindex_get_loc_list_raises  s    z.TestGetLoc.test_multiindex_get_loc_list_raisesc              	   C   sX   t tdtdtdtdg}d}tjttt|d |	| W 5 Q R X d S )Nr4   r   r   r%   ))r   r4   r   r   r1   )
r   r   rw   r7   r8   rA   reescapestrr   )r   r   r   r   r   r   )test_get_loc_nested_tuple_raises_keyerror  s    "z4TestGetLoc.test_get_loc_nested_tuple_raises_keyerrorN)rW   rX   rY   r   r   r   r7   rZ   r[   intfloatr   r   r   r   objectr   r   r   r   r   r   r   r   r   r   r   r   r     s&   &


	
r   c                   @   s   e Zd Zdd Zdd ZdS )	TestWherec              	   C   s:   t ddg}d}tjt|d |d W 5 Q R X d S )Nr   r   r   r   2\.where is not supported for MultiIndex operationsr1   Tr   rc   r7   r8   r}   where)r   irB   r   r   r   
test_where  s    zTestWhere.test_wherec              	   C   sF   t ddg}ddg}d}tjt|d ||| W 5 Q R X d S )Nr   r   FTr   r1   r   )r   Zlistlike_boxr   ZcondrB   r   r   r   test_where_array_like  s
    zTestWhere.test_where_array_likeN)rW   rX   rY   r   r   r   r   r   r   r     s   r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
jdd ZdS )TestContainsc                 C   s4   t ddgddgg}d|ks"td|jks0td S )Nr   r   r   r   )r   r   r   Z_engine)r   r~   r   r   r   test_contains_top_level  s    z$TestContains.test_contains_top_levelc              	   C   sn   t dgtdddgddddddgddddd	d
ggd dgd}dtdf|ksRt|jD ]}||ksXtqXd S )Nr   r   r   )r   r   rG   r   r   r4   r   r   r   )r   r   pdZ	Timestampr   r,   )r   r   valr   r   r   test_contains_with_nat  s    
z#TestContains.test_contains_with_natc                 C   s(   d|kst d|kst d |ks$t d S )Nr
   r   )r   r   r   r   r   test_contains  s    zTestContains.test_containsc                 C   s^   t dtjdgg}tj|ks"tt ddgtjdgg}tj|ksHtdtjf|ksZtd S )Nr   r   r4   )r   rR   r>   r\   r   r   r   r   r    test_contains_with_missing_value  s
    z-TestContains.test_contains_with_missing_valuec                 C   s   t ddgddgg}d|ks"t|d}d|jd ks>td|ksJtt ddgdd	gg}d|kslt|d}d|jd kstd|kstd S )
Nr   r   r4   r   r   r6   rK   rL   rM   )r   r   r   r   r<   r   r   r   r    test_multiindex_contains_dropped  s    

z-TestContains.test_multiindex_contains_droppedc                 C   sT   t jdddd}t|tt|g}|d |ks8td|ksDtd|ksPtd S )Nz09:30:00z16:00:00z30 min)r   r   Zelement_not_exitz0 day 09:30:00)r   Ztimedelta_ranger   rR   r>   r?   r   r   )r   Ztxr   r   r   r   test_contains_td64_level  s
    z%TestContains.test_contains_td64_levelc                 C   s&   t tdtdg}d|ks"td S )N@B )r   r   )r   rR   rw   r   )r   r   r   r   r   test_large_mi_contains  s    z#TestContains.test_large_mi_containsN)rW   rX   rY   r   r   r   r   r   r   r7   rZ   Zslowr   r   r   r   r   r     s   	r   c                  C   s   t tddddddgdgg} tdtt| i| }|jtj	d	d dd d f df }t td
dddddgdgg}tj
tdt|d |dd}t|| d S )Nz2019-01-01T00:15:33d   r   date)r   r   namer   r4   r   z2019-1-2z2019-01-02T00:15:33z2019-01-05T03:15:33)rP   rQ   r   r      )datar)   r   )r   r   r   r   Z	DataFramer>   r?   r   r   Z
IndexSliceZSeriesr&   Zassert_series_equal)r   r-   r   ZqidxZ	should_ber   r   r   !test_timestamp_multiindex_indexer&  s*    " r   zindex_arr,expected,target,algor6   rK   rL   rM   rN   re   r   rf   c              	   C   sD   t | }tjtdd |j||dd}W 5 Q R X ||ks@td S )Nz'kind' argumentr1   r   )Zsidekind)r   rR   r&   r   FutureWarningZget_slice_boundr   )rS   r/   targetalgor   r   r   r   r   'test_get_slice_bound_with_missing_valueA  s    

r   rJ   r   r4   r   )r   r   )r4   r   c                 C   s(   t | }|j||d}||ks$td S rO   )r   rR   Zslice_indexerr   )rS   r/   rT   rU   r   r   r   r   r   %test_slice_indexer_with_missing_valueQ  s    
r   c               	      sX  d} dd dgd |  dgd |  dgd |  t jg|  dgd |   dg|  dgd |   t jg|  dgd	 |   dg|   fD  tt D ]\}t }| | |kstt j|d t j	d
}|
 fdd|D }t|| qtt }t jdgt| t j	d
}tddgd |  }|
|g fdd|D  }t|| d S )Nr   c                 S   s   g | ]}t |qS r   )r   ).0Zarrr   r   r   
<listcomp>f  s   z%test_pyint_engine.<locals>.<listcomp>r   rH   r   r   r   rF   rj   c                    s   g | ]} | qS r   r   r   r   keysr   r   r   |  s     rG   c                    s   g | ]} | qS r   r   r   r   r   r   r     s     )r>   r\   rw   r   r   rc   r   r   r?   rs   rt   r&   r   r@   rv   r   )Nr   r)   r/   r   Zidcesmissingr   r   r   test_pyint_enginea  s*    "
r  )$datetimer   r   Znumpyr>   r7   Zpandas.errorsr   r   Zpandasr   r   r   r   r   Zpandas._testingZ_testingr&   r	   r]   ri   r   r   rZ   r[   r   r   r   r   r   r   r\   r   r*   r   r  r   r   r   r   <module>   s\   u  7 	 GB""
&&**	
