U
    ¾mœdšA  ã                   @   sÂ   d Z ddlmZmZ ddlZddlZddlZddlm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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.
é    )ÚcopyÚdeepcopyN)ÚIS64)Úis_integer_dtypeÚis_numeric_dtype)ÚCategoricalIndexÚ
MultiIndexÚPeriodIndexÚ
RangeIndexc                	   @   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S )/Ú
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	s†t‚d S )Nr   ©r   é   F)Úindexr   )r   Zto_framer   ÚAssertionErrorÚlenÚcolumnsÚvalues)Úselfr   Ú
index_flatÚidxZidx_nameZdf© r   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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_droplevel5   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_nameN   s    z-TestCommon.test_constructor_non_hashable_namec                 C   s*   |}t |ƒ||jd�}t |j|j¡ d S )N©Údtype)Útyper0   ÚtmZassert_equalÚ_data)r   r   ÚaÚbr   r   r   Útest_constructor_unwraps_index]   s    z)TestCommon.test_constructor_unwraps_indexc                 C   s   |}|  ¡ }t ||¡ d S )N)Zto_flat_indexr2   Úassert_index_equal)r   r   r   Úresultr   r   r   Útest_to_flat_indexd   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s¶t‚|j|gksÆt‚d S )
Nz#This is the new name for this indexT©ZinplacezLevel must be Noner   r4   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_methodsk   s     z TestCommon.test_set_name_methodsc                 C   sT   |}t tfD ]&}||ƒ}||k	s$t‚| |¡st‚q|j ddd�}|jdksPt‚d S )NTÚbanana)Údeepr   )r   r   r   r   r   )r   r   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s¤t‚d S )
NTÚmario)r   r   F)r   é   )r   é   éÿÿÿÿ)	r1   r   r2   r7   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#   r1   Ú__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   Úuniquer2   r7   r!   r"   Ú
IndexErrorÚreÚescapeÚ__repr__r$   )r   r   r   Úexpectedr%   r8   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
sˆt d¡ |jdgd  }tj|d< |d d… }| |¡}| |¡}	|	jdksÐt‚|j|jksàt‚|	j|jksðt‚|	}
t||	gƒD ]\}}| ¡ }t 	||
¡ �q d 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   r2   r7   Z_can_hold_naÚ_valuesÚnpÚnanZ_shallow_copyr0   Ú	enumerate)r   r   r   r   Z
idx_uniquer8   ÚvalsZvals_uniqueZidx_nanZidx_unique_nanrX   ÚposÚ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s†t‚|j|dd�}	||	ks t‚|j|dd�}
||
ksºt‚|j|dd�}||ksÔt‚nl|j�r|j|dd�}||ksøt‚|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!   ÚmarkÚxfailr^   ÚnodeÚ
add_markerÚemptyr[   Zargminr   Zis_monotonic_increasingZ_searchsorted_monotonicr   ZsearchsortedZis_monotonic_decreasingr"   r#   )r   r   Úrequestr   rj   Ú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|ƒrP|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 duplicatesr/   g      ø?)Úkeep)r   r
   r!   r[   r   r1   ÚlistÚsetr   r0   r`   ÚrandomÚchoiceÚintr   rI   rJ   Ú
duplicatedr2   Úassert_numpy_array_equalrR   r7   )r   r   rr   r   ÚholderÚunique_valuesr0   Ú
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|}n2t|ƒ}tt|ƒƒ}t|ƒr6|jnd }|||d�}tjdgt	|ƒ dd�}t
 | ¡ |¡ | ¡ }t
 ||¡ ||k	sŽt‚d S )Nr/   FÚbool)r   r
   r1   rs   rt   r   r0   r`   Úarrayr   r2   ry   rx   rR   r7   r   )	r   r   r   r|   rz   r{   r0   r~   Zresult_droppedr   r   r   Ú"test_drop_duplicates_no_duplicatesJ  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   Tr:   )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)	r1   r   r   r
   r!   r[   r\   r   Zhas_duplicates)r   r   r   rz   r   r   r   r   Útest_has_duplicatese  s    
zTestCommon.test_has_duplicatesr0   Úint64Úuint64Úfloat64Úcategoryzdatetime64[ns]ztimedelta64[ns]c                 C   sÖ   t |tƒr"dd„ t|jƒD ƒ|_nd|_d }|jjdkrF|dkrFtj	}t
|jƒdkoZ|dk}z*tj||dd	�� | |¡}W 5 Q R X W n ttttfk
r¤   Y d S X t |tƒrÂ|j|jksÒt‚n|j|jksÒt‚d S )
Nc                 S   s   g | ]}d t |ƒ ‘qS )r   )Ústr)Ú.0re   r   r   r   Ú
<listcomp>{  s     z9TestCommon.test_astype_preserves_name.<locals>.<listcomp>r   Úc)r‡   r…   r†   zstring[pyarrow]rˆ   F)Zraise_on_extra_warningsZcheck_stacklevel)r   r   ÚrangeZnlevelsr)   r   r0   Úkindr`   ZComplexWarningr‰   r2   Zassert_produces_warningZastyper#   r*   r^   ÚSystemErrorr   )r   r   r0   ÚwarnZis_pyarrow_strr8   r   r   r   Útest_astype_preserves_namet  s&    
ý
z%TestCommon.test_astype_preserves_namec                 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|jƒrtd S |jtkr‚d S tj|d< t|ƒ|ƒ}tjdgt|ƒ td�}d|d< t |j|¡ |jdksÔt	‚d S )NT)rB   Fr/   r   r   )r   r`   r�   r   r€   r2   ry   Z_isnanr]   r   r_   r   r0   ra   r1   )r   r   r   r   rX   r   r   r   r   Útest_hasnans_isnans•  s&    


zTestCommon.test_hasnans_isnans)rP   Ú
__module__Ú__qualname__r!   rj   Úparametrizer   r'   r.   r6   r9   r@   rD   rO   rQ   rY   rf   rq   r   r‚   rƒ   r„   r‘   r’   r   r   r   r   r       s.   
(2#þ
r   Úna_positionÚ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"|j tjjddd�¡ t |  	¡ ¡}| |  
¡  j}t |¡}|dkrft d g| |g¡}nt |d g| g¡}t| ƒ|| jd�}| j|d�}t ||¡ d S )Nz,missing value sorting order not well-definedF)rg   ÚstrictrK   r/   r˜   )r   r   rl   rm   r!   rj   rk   r`   ÚsumZisnaZnotnar   ÚsortZconcatenater1   r0   r™   r2   r7   )rš   r–   ro   Zmissing_countZnot_na_valsZsorted_valuesrX   r8   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s’t‚|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__r   r   rU   Únumpyr`   r!   Zpandas.compatr   Zpandas.core.dtypes.commonr   r   ZpandasrI   r   r   r	   r
   Zpandas._testingZ_testingr2   r   rj   r•   r›   r    r§   r   r   r   r   Ú<module>   s$      

