U
    ÎZjŒD  ã                   @   sÆ   d Z ddlZddlZddlZddlmZ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Úpa_version_under7p0)Ú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	s†t‚d S )Nr   ©r   é   F)Úindexr   )r   Zto_framer   ÚAssertionErrorÚlenÚcolumnsÚvalues)Úselfr   Ú
index_flatÚidxZidx_nameZdf© r   úc/var/www/html/TRUCKING_PROJECT/venv/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_droplevel4   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_nameM   s    z-TestCommon.test_constructor_non_hashable_namec                 C   s*   |}t |ƒ||jd�}t |j|j¡ d S )N©Údtype)Útyper1   Ú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_indexr3   Úassert_index_equal)r   r   r   Úresultr   r   r   Útest_to_flat_indexc   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   r5   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_methodsj   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ÚdeepcopyTÚbanana)Údeepr   )rC   rD   r   r   r   )r   r   rC   rD   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)rC   r   F)rC   é   )r   é   éÿÿÿÿ)	r2   r   r3   r9   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 )NrI   r   z$Length of new names must be 1, got 2r   Zluigiz.name must be a hashable type)	rC   r   r   r"   r#   r$   r2   Ú__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   rK   z6Requested level \(wrong\) does not match index name \(z\)r   )Údrop_duplicatesr   Úuniquer3   r9   r"   r#   Ú
IndexErrorÚreÚescapeÚ__repr__r%   )r   r   r   Úexpectedr&   r:   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‚|	}
||	fD ]}| ¡ }t 	||
¡ qüd S )Nz)Skip check for empty Index and MultiIndexr   é   TFz%Skip na-check if index cannot hold narJ   )r   r"   ÚskipÚ	is_uniquer   ÚhasnansÚNotImplementedErrorrW   r3   r9   Z_can_hold_naÚ_valuesÚnpÚnanZ_shallow_copyr1   )r   r   r   r   Z
idx_uniquer:   ÚvalsZvals_uniqueZidx_nanZidx_unique_nanr\   Ú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    rM   ZIntervalIndexr"   ÚmarkÚxfailrb   ÚnodeÚ
add_markerÚemptyr_   Zargminr   Zis_monotonic_increasingZ_searchsorted_monotonicr   ZsearchsortedZis_monotonic_decreasingr#   r$   )r   r   Úrequestr   rl   Ú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 duplicatesr0   g      ø?)Úkeep)r    r	   r"   r_   r   r2   ÚlistÚsetr   r1   rd   ÚrandomÚchoiceÚintr   rM   rN   Ú
duplicatedr3   Úassert_numpy_array_equalrV   r9   )r   r   rt   r   ÚholderÚunique_valuesr1   Ú
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	s�t‚d S )Nr0   FÚbool)r    r	   r2   ru   rv   r   r1   rd   Úarrayr   r3   r{   rz   rV   r9   r   )	r   r   r   r~   r|   r}   r1   r€   Zresult_droppedr   r   r   Ú"test_drop_duplicates_no_duplicatesN  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+   rV   )r   r   r'   r   r   r   Útest_drop_duplicates_inplaced  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   r^   FT)	r2   r   r    r	   r"   r_   r`   r   Zhas_duplicates)r   r   r   r|   r   r   r   r   Útest_has_duplicatesi  s    
zTestCommon.test_has_duplicatesr1   Úint64Úuint64Úfloat64Úcategoryúdatetime64[ns]ztimedelta64[ns]c                 C   sü   t |tƒr"dd„ t|jƒD ƒ|_nd|_d }t |tƒrN|jd k	rN|dkrNt}n|j	j
dkrh|dkrhtj}t|j	ƒdko€to€|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)Ú.0rg   r   r   r   Ú
<listcomp>  s     z9TestCommon.test_astype_preserves_name.<locals>.<listcomp>r   r‹   Úc)r‰   r‡   rˆ   zstring[pyarrow]rŠ   F)Zraise_on_extra_warningsZcheck_stacklevel)r    r   ÚrangeZnlevelsr*   r   r   ÚtzÚFutureWarningr1   Úkindrd   ZComplexWarningrŒ   r   r3   Úassert_produces_warningZastyper$   r+   rb   ÚSystemErrorr   )r   r   r1   ÚwarnZis_pyarrow_strr:   r   r   r   Útest_astype_preserves_namex  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 r8   )r    r   r
   r   r’   r3   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 |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)rF   Fr0   r   r   )rC   rd   rƒ   r   r‚   r3   r{   Z_isnanra   r   rc   r    r   r   r1   re   r2   )r   r   r   r   r\   r   r   r   r   Útest_hasnans_isnans®  s&    

zTestCommon.test_hasnans_isnans)rT   Ú
__module__Ú__qualname__r"   rl   Úparametrizer   r(   r/   r7   r;   rB   rH   rS   rU   r]   rh   rs   r�   r„   r…   r†   r—   r˜   r™   r   r   r   r   r      s0   
(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¢   rO   Ú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)ri   ÚstrictrO   r0   rŸ   )r    r   rn   ro   r"   rl   rm   rd   ÚsumZisnaZnotnar   ÚsortZconcatenater2   r1   r    r3   r9   )r¡   r�   rq   Zmissing_countZnot_na_valsZsorted_valuesr\   r:   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__rY   Únumpyrd   r"   Zpandas.compatr   r   Zpandas.core.dtypes.commonr   ZpandasrM   r   r   r   r   r	   r
   Zpandas._testingZ_testingr3   Zpandas.core.apir   r   rl   rœ   r¢   r§   r®   r   r   r   r   Ú<module>   s$       1

