U
    +if+                     @   s6  d Z ddlZddlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZ ddlmZmZmZ G dd dZG dd	 d	ZG d
d dZG dd dZG dd dZG dd dZG dd dZejdedddgedddgedddggdd Z d d! Z!ejd"ej"d#ej"gej"gej#ddgej$d$fej"d#ej"gej"d#gej#dddgej$d$fej#ej"d#ej"ge%d$ej"gej#ddgej$d$fed%eegegej#ddgej$d$fdddej"gej"gej#dgej$d$fej#dej"e&d&dge%d$eej"ge%d$ej#ddgej$d$fgd'd( Z'd)d* Z(dS )+aS  
test_indexing tests the following Index methods:
    __getitem__
    get_loc
    get_value
    __contains__
    take
    where
    get_indexer
    get_indexer_for
    slice_locs
    asof_locs

The corresponding tests.indexes.[index_type].test_indexing files
contain tests for the corresponding methods specific to those Index subclasses.
    N)InvalidIndexError)	DatetimeIndexIndexIntervalIndex
MultiIndexNaTPeriodIndex
RangeIndexSeriesTimedeltaIndex)Float64Index
Int64IndexUInt64Indexc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestTakec              	   C   s   ddg}d}t jt|d |j|dd W 5 Q R X d}t jt|d |j||d W 5 Q R X d}t jt|d |j|d	d
 W 5 Q R X d S )N      z1take\(\) got an unexpected keyword argument 'foo'match)fooz$the 'out' parameter is not supported)outz%the 'mode' parameter is not supportedZclip)mode)pytestraises	TypeErrortake
ValueError)selfindexindicesmsg r    U/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/indexes/test_indexing.pytest_take_invalid_kwargs*   s    z!TestTake.test_take_invalid_kwargsc              	   C   st   ddddg}t |dk rd S ||}|| }||s<tt|tttfspd}tj	t
|d |j W 5 Q R X d S )N      r   r      z*'(.*Index)' object has no attribute 'freq'r   )lenr   equalsAssertionError
isinstancer   r   r   r   r   AttributeErrorfreq)r   r   indexerresultexpectedr   r    r    r!   	test_take9   s    
zTestTake.test_takec              	   C   s@   t ddddg}d}d}tjt|d || W 5 Q R X d S )Nr   r   r   r$   z!Expected indices to be array-liker   )r   r   r   r   r   )r   integer_indexZscalar_indexr   r    r    r!   test_take_indexer_typeI   s
    zTestTake.test_take_indexer_typec                 C   sH   t |dkrd S |dddg}|ddt |d g}t|| d S )Nr   r   )r&   r   tmZassert_index_equal)r   r   r-   r.   r    r    r!   test_take_minus1_without_fillQ   s
    z&TestTake.test_take_minus1_without_fillN)__name__
__module____qualname__r"   r/   r1   r4   r    r    r    r!   r   )   s   r   c                   @   s  e Zd Zejdedddgdfedddgdfedddejdgdfedddej	dgdfedddejgejfedddej	gej	fgdd Z
ejdedddgdfedddgdfedddejgdfedddej	gdfedddejgej	fedddej	gejfedddgejfedddgej	fedddgejfedddgej	fg
d	d
 Zejdedddgdfedddgdfgdd Zejdedddgdfedddgdfgdd Zdd Zdd ZdS )TestContainsz	index,valr   r   r   2r#   c                 C   s   ||kst d S Nr(   r   r   valr    r    r!   test_index_contains^   s    z TestContains.test_index_containsc                 C   s   ||kst d S r:   r;   r<   r    r    r!   test_index_not_containsl   s    z$TestContains.test_index_not_containsc                 C   s   ||kst d S r:   r;   r<   r    r    r!   test_mixed_index_contains   s    z&TestContains.test_mixed_index_contains1c                 C   s   ||kst d S r:   r;   r<   r    r    r!   test_mixed_index_not_contains   s    z*TestContains.test_mixed_index_not_containsc                 C   s   t ddddg}tddddg}tddddg}||fD ](}d|ksHtd	|ksTtd|ks8tq8d|ksntd	|ksztd|kstd S )
Nr   r   r   r$   皙?g?g@gffffff
@      ?)r   r   r   r(   )r   r0   Zuinteger_indexZfloat_indexr   r    r    r!   test_contains_with_float_index   s    z+TestContains.test_contains_with_float_indexc              	   C   sp   t |trd S d}tjt|d g |k W 5 Q R X ddddddg}tjt|d i |jk W 5 Q R X d S )	Nzunhashable type: 'list'r   |zunhashable type: 'dict'zmust be real number, not dictzan integer is requiredz\{\}z6pandas\._libs\.interval\.IntervalTree' is not iterable)r)   r   r   r   r   joinZ_engine)r   r   r   r    r    r!   &test_contains_requires_hashable_raises   s    
	z3TestContains.test_contains_requires_hashable_raisesN)r5   r6   r7   r   markparametrizer   npinfnanr>   r   r   r?   r@   rB   rE   rH   r    r    r    r!   r8   ]   sL   

 "
 "
r8   c                   @   s.   e Zd Zejjdddddgdddd	 Zd
S )TestGetValuer   stringintdatetime	timedeltaT)Zindirectc              
   C   s   t jd}|d }tjtdd( tt |	|| W 5 Q R X W 5 Q R X tt |	t
||d|}W 5 Q R X t||d  d S )Nd   C   zhas no attribute '_values'r   r   )rK   randomZrandnr   r   r*   r3   assert_produces_warningFutureWarning	get_valuer
   Zassert_almost_equal)r   r   valuesvaluer-   r    r    r!   test_get_value   s     zTestGetValue.test_get_valueN)r5   r6   r7   r   rI   rJ   r\   r    r    r    r!   rN      s    
 rN   c                   @   s   e Zd Zdd Zdd ZdS )
TestGetLocc              	   C   s2   t jttfdd |tdd W 5 Q R X d S )Nslicer   r   r   )r   r   r   r   get_locr^   )r   r   r    r    r!   test_get_loc_non_hashable   s    z$TestGetLoc.test_get_loc_non_hashablec              	   C   sT   t }t|ttttttfrt}t	j
|dd |dd tdD  W 5 Q R X d S )Nzgenerator objectr   c                 s   s   | ]
}|V  qd S r:   r    ).0xr    r    r!   	<genexpr>   s     z4TestGetLoc.test_get_loc_generator.<locals>.<genexpr>r%   )KeyErrorr)   r   r   r   r	   r   r   r   r   r   r_   range)r   r   excr    r    r!   test_get_loc_generator   s    z!TestGetLoc.test_get_loc_generatorN)r5   r6   r7   r`   rg   r    r    r    r!   r]      s   r]   c                   @   s   e Zd Zdd Zdd ZdS )TestGetIndexerc              	   C   s   |j r0tj|jtjd}||}t|| n(d}tj	t
|d || W 5 Q R X tj	tdd |j|dd W 5 Q R X d S )Ndtype8Reindexing only valid with uniquely valued Index objectsr   zInvalid fill methodinvalid)method)_index_as_uniquerK   Zarangesizeintpget_indexerr3   assert_numpy_array_equalr   r   r   r   )r   r   r.   actualr   r    r    r!   test_get_indexer_base   s    
z$TestGetIndexer.test_get_indexer_basec              	   C   s   |j r:||dd }t|tjs(t|jtjksjtn0d}tj	t
|d ||dd  W 5 Q R X ||dd \}}t|tjst|jtjkstd S )Nr   r   rk   r   )rn   rq   r)   rK   Zndarrayr(   rj   rp   r   r   r   get_indexer_non_unique)r   r   r,   r   _r    r    r!   test_get_indexer_consistency   s    z+TestGetIndexer.test_get_indexer_consistencyN)r5   r6   r7   rt   rw   r    r    r    r!   rh      s   rh   c                   @   s   e Zd Zdd ZdS )TestConvertSliceIndexerc              	   C   sp   t d d d}t|trBd}tjt|d ||d W 5 Q R X n*d}tjt|d ||d W 5 Q R X d S )Nr   zClabel-based slicing with step!=1 is not supported for IntervalIndexr   locz7'>=' not supported between instances of 'str' and 'int')r^   r)   r   r   r   r   Z_convert_slice_indexerr   )r   r   keyr   r    r    r!   test_convert_almost_null_slice  s    
z6TestConvertSliceIndexer.test_convert_almost_null_sliceN)r5   r6   r7   r{   r    r    r    r!   rx     s   rx   c                   @   s   e Zd Zdd ZdS )TestPutmaskc              	   C   s   t |sd S |d }d}tjt|d$ |tt |d tj| W 5 Q R X tjt|d$ |tt |d tj| W 5 Q R X tjt|d |d| W 5 Q R X d S )Nr   z,putmask: mask and data must be the same sizer   r   r   )r&   r   r   r   ZputmaskrK   ZonesZbool_)r   r   fillr   r    r    r!   test_putmask_with_wrong_mask  s    ((z(TestPutmask.test_putmask_with_wrong_maskN)r5   r6   r7   r~   r    r    r    r!   r|     s   r|   idxr   r   r$   rC   g?g333333?abcc              	   C   s6   t t | d }W 5 Q R X | d }||ks2td S )NrD   r   )r3   rW   rX   r(   )r   r-   r.   r    r    r!   test_getitem_deprecated_float$  s    r   c              	   C   sb   t | sd S tt | j| d ddd W 5 Q R X tt | | d dd W 5 Q R X d S )Nr   leftry   )kind)r&   r3   rW   rX   Z_maybe_cast_slice_boundrU   r    r    r!   +test_maybe_cast_slice_bound_kind_deprecated1  s    r   zidx,target,expectedZvar1ri   z
2020-08-05NaNc                 C   s"   t | }||}t|| d S r:   )r   Zget_indexer_forr3   rr   )r   targetr.   Zaxisrs   r    r    r!   )test_get_indexer_non_unique_multiple_nans>  s    
r   c                 C   sd   t ddg}t d| gdd}||\}}t|tjddgtjd t|tjdgtjd d S )NrD   g       @r   objectri   r   r2   )r   ru   r3   rr   rK   arrayrp   )Znulls_fixturer   r   Z
result_idxZresult_missingr    r    r!   7test_get_indexer_non_unique_nans_in_object_dtype_target`  s
    r   ))__doc__numpyrK   r   Zpandas.errorsr   Zpandasr   r   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingr3   Zpandas.core.apir   r   r   r   r8   rN   r]   rh   rx   r|   rI   rJ   r   r   rM   r   rp   r   floatr   r   r    r    r    r!   <module>   sV   ,4U  &

&$
