U
    Mf_A                     @   s   d 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	Z
ddl	mZmZmZmZmZmZ ddlmZ ddlmZ G dd dZejd	dd
gdd Zejd	ddgdd Zdd ZdS )z
Collection of tests asserting things that should be true for
any index subclass except for MultiIndex. Makes use of the `index_flat`
fixture defined in pandas/conftest.py.
    N)IS64)is_integer_dtype)CategoricalIndexDatetimeIndex
MultiIndexPeriodIndex
RangeIndexTimedeltaIndex)NumericIndexc                	   @   s   e Z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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ejd$d%d&d'd(d)d*gd+d, Zd-d. Zd/d0 ZdS )1
TestCommonnameNnew_namec                 C   s   |}|r|}n
|j pd}|j|d}|j|ks2tt|jdksDt|jd |ksVt|| j|jk	sjt|jd|d}|j|k	std S )Nr   r      F)indexr   )r   Zto_framer   AssertionErrorlencolumnsvalues)selfr   
index_flatidxZidx_nameZdf r   D/tmp/pip-unpacked-wheel-eb6vo0j3/pandas/tests/indexes/test_common.pytest_to_frame   s    
zTestCommon.test_to_framec              
   C   s   |}| g |st|j|jgfD ]D}t|jtrB||jkrBq&d}tjt|d | | W 5 Q R X q&ddgfD ](}tjt	dd | | W 5 Q R X qvd S )NzTCannot remove 1 levels from an index with 1 levels: at least one level must be left.matchwrongz>'Requested level \(wrong\) does not match index name \(None\)')
Z	droplevelequalsr   r   
isinstancetuplepytestraises
ValueErrorKeyError)r   r   r   levelmsgr   r   r   test_droplevel1   s    zTestCommon.test_droplevelc              	   C   s`   |}d}dgg}t jt|d |j|d W 5 Q R X t jt|d |j|d W 5 Q R X d S )Nz"Index.name must be a hashable type1r   r   )names)r!   r"   	TypeErrorrename	set_names)r   r   r   messageZrenamedr   r   r   "test_constructor_non_hashable_nameJ   s    z-TestCommon.test_constructor_non_hashable_namec                 C   s$   |}t ||}t|j|j d S N)typetmZassert_equal_data)r   r   abr   r   r   test_constructor_unwraps_indexY   s    z)TestCommon.test_constructor_unwraps_indexc                 C   s   |}|  }t|| d S r/   )Zto_flat_indexr1   assert_index_equal)r   r   r   resultr   r   r   test_to_flat_index^   s    zTestCommon.test_to_flat_indexc              	   C   s   |}d}|j }||g}|j |ks(t|j |ks6t|j|dd}|d ksPt|j |ks^t|j|gksnttjtdd |jddd W 5 Q R X d	}|j|dd |j |kst|j|gkstd S )
Nz#This is the new name for this indexTZinplacezLevel must be Noner   r3   r   r%   )AB)r   r,   r   r+   r)   r!   r"   r#   )r   r   r   r   original_nameZnew_indresr   r   r   r   test_set_name_methodse   s     z TestCommon.test_set_name_methodsc                 C   sd   ddl m }m} |}||fD ]&}||}||k	s4t||stq|j ddd}|jdks`td S )Nr   )copydeepcopyTZbanana)deepr   )r@   rA   r   r   r   )r   r   r@   rA   r   funcZidx_copyZnew_copyr   r   r   test_copy_and_deepcopy   s    z!TestCommon.test_copy_and_deepcopyc                 C   s   |}t ||ddd}t ||dd}||k	s2tt|| ||sLt|jdksZt|jdkshttjd|d}tjd|d d	 d}|| }|jjdkstd S )
NTmario)r@   r   F)r@      )r      )	r0   r   r1   r6   r   r   pdSeriesr   )r   r   r   firstseconds1s2Zs3r   r   r   test_copy_name   s    zTestCommon.test_copy_namec              	   C   s   |}|j ddjdksttjtdd |j ddgd W 5 Q R X t|j d}tjt|d |j dggd W 5 Q R X d S )NrE   r   z$Length of new names must be 1, got 2r   Zluigiz.name must be a hashable type)	r@   r   r   r!   r"   r#   r0   __name__r*   )r   r   r   r&   r   r   r   test_copy_name2   s    zTestCommon.test_copy_name2c              	   C   s   |}|  }d|jd fD ]}|j|d}t|| qd}tjt|d |jdd W 5 Q R X dt	|j
  d}tjt|d |jdd W 5 Q R X d S )	Nr   r:   z.Too many levels: Index has only 1 level, not 4r   rG   z6Requested level \(wrong\) does not match index name \(z\)r   )drop_duplicatesr   uniquer1   r6   r!   r"   
IndexErrorreescape__repr__r$   )r   r   r   expectedr%   r7   r&   r   r   r   test_unique_level   s    zTestCommon.test_unique_levelc                 C   s  |}t |std |dgd  }|dg }|jdks<tz|jdksLtW n tk
rb   Y nX | }t	|| |j
std |jdgd  }tj|d< |d d }||}||}	|	jdkst|j|jkst|	j|jkst|	}
||	fD ]}| }t	||
 qd S )Nz)Skip check for empty Index and MultiIndexr      TFz%Skip na-check if index cannot hold narF   )r   r!   skip	is_uniquer   hasnansNotImplementedErrorrS   r1   r6   Z_can_hold_na_valuesnpnanZ_shallow_copydtype)r   r   r   r   Z
idx_uniquer7   valsZvals_uniqueZidx_nanZidx_unique_nanrX   ir   r   r   test_unique   s4    





zTestCommon.test_uniquec              	   C   sF  |}t |tjr,tjjdtd}|j| |j	r<t
d |d }d||k  }}|dkrft|}|jr|j|dd}||kst|j|dd}	||	kst|j|dd}
||
kst|j|dd}||kstnl|jr|j|dd}||kst|j|dd}	||	ksBtn,d}tjt|d	 |j|dd W 5 Q R X d S )
Nz8IntervalIndex.searchsorted does not support Interval arg)reasonr"   zSkip check for empty Indexr   left)Zsiderightz0index must be monotonic increasing or decreasingr   )r   rI   ZIntervalIndexr!   markZxfailr^   nodeZ
add_markeremptyr[   Zargminr   Zis_monotonic_increasingZ_searchsorted_monotonicr   ZsearchsortedZis_monotonic_decreasingr"   r#   )r   r   requestr   ri   valueZexpected_leftZexpected_rightZssm_leftZ	ssm_rightZss_leftZss_rightr&   r   r   r   test_searchsorted_monotonic   s<    
z&TestCommon.test_searchsorted_monotonicc                 C   s   |}t |trtd t|dkr.td t|}tt|}t |trR|j	nd }|||d}t|}t
j|t|d }	||j|	 }
t|	j|dj}t|
j|d| |t|
j|d}t|
j|d| d S )NzWRangeIndex is tested in test_drop_duplicates_no_duplicates as it cannot hold duplicatesr   zXempty index is tested in test_drop_duplicates_no_duplicates as it cannot hold duplicatesrb   g      ?)keep)r   r   r!   r[   r   r0   listsetr
   rb   r`   randomchoiceintr   rI   rJ   
duplicatedr1   assert_numpy_array_equalrR   r6   )r   r   rp   r   holderunique_valuesrb   
unique_idxnZduplicated_selectionr   expected_duplicatedZexpected_droppedr   r   r   test_drop_duplicates&  s*    
zTestCommon.test_drop_duplicatesc           	      C   s   |}t |tr|}n4t|}tt|}t |tr8|jnd }|||d}tjdgt	| dd}t
| | | }t
|| ||k	std S )Nro   Fbool)r   r   r0   rq   rr   r
   rb   r`   arrayr   r1   rw   rv   rR   r6   r   )	r   r   r   rz   rx   ry   rb   r|   Zresult_droppedr   r   r   "test_drop_duplicates_no_duplicatesI  s    
z-TestCommon.test_drop_duplicates_no_duplicatesc              	   C   s.   d}t jt|d |jdd W 5 Q R X d S )Nz6drop_duplicates\(\) got an unexpected keyword argumentr   Tr9   )r!   r"   r*   rR   )r   r   r&   r   r   r   test_drop_duplicates_inplace_  s    z'TestCommon.test_drop_duplicates_inplacec                 C   sZ   |}t |}t|rt|tr(td ||d gd }|jdksHt|jdksVtd S )Nz6Skip check for empty Index, MultiIndex, and RangeIndexr   rZ   FT)	r0   r   r   r   r!   r[   r\   r   Zhas_duplicates)r   r   r   rx   r   r   r   r   test_has_duplicatesd  s    
zTestCommon.test_has_duplicatesrb   Zint64Zuint64Zfloat64categorydatetime64[ns]ztimedelta64[ns]c                 C   s   t |tr"dd t|jD |_nd|_d }t |trL|jd k	rL|dkrLt}z$t	
| ||}W 5 Q R X W n ttttfk
r   Y d S X t |tr|j|jkstn|j|jkstd S )Nc                 S   s   g | ]}d t | qS )r   )str).0rd   r   r   r   
<listcomp>z  s     z9TestCommon.test_astype_preserves_name.<locals>.<listcomp>r   r   )r   r   rangeZnlevelsr)   r   r   tzFutureWarningr1   assert_produces_warningZastyper#   r*   r^   SystemErrorr   )r   r   rb   warnr7   r   r   r   test_astype_preserves_names  s&    

z%TestCommon.test_astype_preserves_namec              	   C   s:   t |tttfrd }nt}t| |j W 5 Q R X d S r/   )r   r   r	   r   r   r1   r   Zasi8)r   r   r   r   r   r   test_asi8_deprecation  s
    z TestCommon.test_asi8_deprecationc                 C   s   |}|j dd}tjdgt| td}t|j| |jdksDt	|j dd}|j
}t|dkrfd S t|tr~t|jr~d S tj|d< t||}tjdgt| td}d|d< t|j| |jdkst	d S )NT)rB   Fro   r   r   )r@   r`   r   r   r~   r1   rw   Z_isnanr]   r   r_   r   r
   r   rb   ra   r0   )r   r   r   r   rX   r   r   r   r   test_hasnans_isnans  s"    
zTestCommon.test_hasnans_isnans)rP   
__module____qualname__r!   ri   parametrizer   r'   r.   r5   r8   r?   rD   rO   rQ   rY   re   rn   r}   r   r   r   r   r   r   r   r   r   r   r      s0   
(2#

r   na_positionZmiddlec              	   C   s0   t jtd| d | j|d W 5 Q R X d S )Nzinvalid na_position: r   r   )r!   r"   r#   sort_values)index_with_missingr   r   r   r   $test_sort_values_invalid_na_position  s    r   rK   lastc                 C   s   t | trtd t|  }| |   j}t	|}|dkrXt
d g| |g}nt
|d g| g}t| || jd}| j|d}t|| d S )Nz,missing value sorting order not well-definedrK   ro   r   )r   r   r!   r[   r`   sumZisnaZnotnar   sortZconcatenater0   rb   r   r1   r6   )r   r   Zmissing_countZnot_na_valsZsorted_valuesrX   r7   r   r   r   test_sort_values_with_missing  s    


r   c                 C   s   t | trtstd | }|j|s,t| |s>t|j	}|j
|j
ksTt|j|jksdt|j|jksttt | ttfs|j|jkst|j |j	j d S )NOverflow)r   r   r   r!   r[   Tr   r   Z	transposer   shapendimsizer   r   nbytes)r   r   r   r   r   r   test_ndarray_compat_properties  s    
r   )__doc__rU   Znumpyr`   r!   Zpandas.compatr   Zpandas.core.dtypes.commonr   ZpandasrI   r   r   r   r   r   r	   Zpandas._testingZ_testingr1   Zpandas.core.apir
   r   ri   r   r   r   r   r   r   r   r   <module>   s$       

