o
    iD                     @   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$g d%d&d' Zd(d) Zd*d+ ZdS ),
TestCommonnameNnew_namec                 C   s   |}|r|}n|j pd}|j|d}|j|u sJ t|jdks"J |jd |ks+J || j|jus5J |jd|d}|j|usCJ d S )Nr   r      F)indexr   )r   to_framer   lencolumnsvalues)selfr   
index_flatidxidx_namedf r   [/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/indexes/test_common.pytest_to_frame    s   
zTestCommon.test_to_framec              	   C   s   |}| g |sJ |j|jgfD ],}t|jtr!||ju r!qd}tjt|d | | W d    n1 s:w   Y  qddgfD ]}tjtdd | | W d    n1 s^w   Y  qEd 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\)')		droplevelequalsr   
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 d    n1 s w   Y  t jt|d |j|d W d    d S 1 s>w   Y  d S )Nz"Index.name must be a hashable type1r   r   )names)r%   r&   	TypeErrorrename	set_names)r   r   r   message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)typer5   tm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)to_flat_indexr7   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J |j |ksJ |j|dd}|d u s(J |j |ks/J |j|gks7J tjtdd |jddd W d    n1 sPw   Y  d	}|j|dd |j |kseJ |j|gksmJ d S )
Nz#This is the new name for this indexTinplacezLevel must be Noner   r:   r   r)   )AB)r   r0   r/   r-   r%   r&   r'   )r   r   r   r   original_name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 ]}||}||usJ ||s!J q|j ddd}|jdks0J d S )Nr   )copydeepcopyTbanana)deepr   )rK   rL   r"   r   )r   r   rK   rL   r   funcidx_copynew_copyr   r   r   test_copy_and_deepcopy   s   z!TestCommon.test_copy_and_deepcopyc                 C   s   |}t ||ddd}t ||dd}||usJ t|| ||s&J |jdks-J |jdks4J tjd|d}tjd|d d	 d}|| }|jjdksRJ d S )
NTmario)rK   r   F)rK      )r      )r6   r7   r?   r"   r   pdSeriesr   )r   r   r   firstseconds1s2s3r   r   r   test_copy_name   s   zTestCommon.test_copy_namec                 C   s   |}|j ddjdksJ tjtdd |j ddgd W d    n1 s'w   Y  t|j d}tjt|d |j dggd W d    d S 1 sOw   Y  d S )NrS   r   z$Length of new names must be 1, got 2r   luigiz.name must be a hashable type)rK   r   r%   r&   r'   r6   __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 d    n1 s5w   Y  dt	|j
  d}tjt|d |jdd W d    d S 1 s_w   Y  d S )	Nr   rD   z.Too many levels: Index has only 1 level, not 4r   rU   z6Requested level \(wrong\) does not match index name \(z\)r    )drop_duplicatesr   uniquer7   r?   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u sJ z	|jdu s&J W n	 ty0   Y nw | }t|| |j	sCtd |j
dgd  }tj|d< |d d }||}||}	|	jdu sgJ |j|jksoJ |	j|jkswJ |	}
||	fD ]}| }t||
 q}d S )Nz)Skip check for empty Index and MultiIndexr      TFz%Skip na-check if index cannot hold narT   )r   r%   skip	is_uniquehasnansNotImplementedErrorrc   r7   r?   _can_hold_na_valuesnpnan_shallow_copyr5   )r   r   r   r   
idx_uniquer@   valsvals_uniqueidx_nanidx_unique_nanrh   ir   r   r   test_unique   s8   





zTestCommon.test_uniquec                 C   s\  |}t |tjrtjjdtd}|j| |j	rt
d |d }d||k }}|dkr3t|}|jrl|j|dd}||ksCJ |j|dd}	||	ksPJ |j|dd}
||
ks]J |j|dd}||ksjJ d S |jr|j|dd}||ks|J |j|dd}	||	ksJ d S d}tjt|d	 |j|dd W d    d S 1 sw   Y  d S )
Nz8IntervalIndex.searchsorted does not support Interval arg)reasonr&   zSkip check for empty Indexr   left)siderightz0index must be monotonic increasing or decreasingr   )r#   rW   IntervalIndexr%   markxfailrn   node
add_markeremptyrk   argminr   is_monotonic_increasing_searchsorted_monotonicsearchsortedis_monotonic_decreasingr&   r'   )r   r   requestr   r   valueexpected_leftexpected_rightssm_left	ssm_rightss_left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r)|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 duplicatesr4   g      ?)keep)r#   r	   r%   rk   r   r6   listsetr   r5   rq   randomchoiceintr   rW   rX   
duplicatedr7   assert_numpy_array_equalrb   r?   )r   r   r   r   holderunique_valuesr5   
unique_idxnduplicated_selectionr   expected_duplicatedexpected_droppedr   r   r   test_drop_duplicates+  s*   
zTestCommon.test_drop_duplicatesc           	      C   s   |}t |tr
|}nt|}tt|}t |tr|jnd }|||d}tjdgt	| dd}t
| | | }t
|| ||usHJ d S )Nr4   Fbool)r#   r	   r6   r   r   r   r5   rq   arrayr   r7   r   r   rb   r?   )	r   r   r   r   r   r   r5   r   result_droppedr   r   r   "test_drop_duplicates_no_duplicatesN  s   
z-TestCommon.test_drop_duplicates_no_duplicatesc                 C   sD   d}t jt|d |jdd W d    d S 1 sw   Y  d S )Nz6drop_duplicates\(\) got an unexpected keyword argumentr   TrB   )r%   r&   r.   rb   )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u s$J |jdu s+J d S )Nz6Skip check for empty Index, MultiIndex, and RangeIndexr   rj   FT)r6   r   r#   r	   r%   rk   rl   has_duplicates)r   r   r   r   r   r   r   r   test_has_duplicatesi  s   
zTestCommon.test_has_duplicatesr5   )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r'|jd ur'|dkr't}n|j	j
dkr4|dv r4tj}t|j	dko@to@|dk}ztj||d	d
 ||}W d    n1 sZw   Y  W n ttttfyn   Y d S w t |tr~|j|jks|J d S |j|jksJ d S )Nc                 S   s   g | ]}d t | qS )r   )str).0ry   r   r   r   
<listcomp>  s    z9TestCommon.test_astype_preserves_name.<locals>.<listcomp>r   r   c)r   r   r   zstring[pyarrow]r   F)raise_on_extra_warningscheck_stacklevel)r#   r   rangenlevelsr-   r   r   tzFutureWarningr5   kindrq   ComplexWarningr   r   r7   assert_produces_warningastyper'   r.   rn   SystemError)r   r   r5   warnis_pyarrow_strr@   r   r   r   test_astype_preserves_namex  s>   


z%TestCommon.test_astype_preserves_namec                 C   sP   t |tttfrd }nt}t| |j W d    d S 1 s!w   Y  d S r=   )r#   r   r
   r   r   r7   r   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u s"J |j dd}|j	}t|dkr3d S t
|tr?t|jr?d S |jtkrFd S tj|d< t||}tjdgt| td}d|d< t|j| |jdu soJ d S )NT)rN   Fr4   r   r   )rK   rq   r   r   r   r7   r   _isnanrm   rp   r#   r   r   r5   rr   r6   )r   r   r   r   rh   r   r   r   r   test_hasnans_isnans  s&   

zTestCommon.test_hasnans_isnans)r`   
__module____qualname__r%   r   parametrizer   r+   r3   r<   rA   rJ   rR   r^   ra   ri   rz   r   r   r   r   r   r   r   r   r   r   r   r   r      s2    
(2#
(
r   na_positionmiddlec                 C   sF   t jtd| d | j|d W d    d S 1 sw   Y  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   rY   lastc                 C   s   t | tr|jtjjddd t| 	 }| | 
  j}t|}|dkr3td g| |g}n
t|d g| g}t| || jd}| j|d}t|| d S )Nz,missing value sorting order not well-definedF)r{   strictrY   r4   r   )r#   r   r   r   r%   r   r   rq   sumisnanotnar   sortconcatenater6   r5   r   r7   r?   )r   r   r   missing_countnot_na_valssorted_valuesrh   r@   r   r   r   test_sort_values_with_missing  s   

r   c                 C   s   t | trtstd | }|j|sJ | |sJ |j}|j	|j	ks*J |j
|j
ks2J |j|jks:J t | ttfsI|j|jksIJ |j |jj d S )NOverflow)r#   r   r   r%   rk   Tr"   	transposer   shapendimsizer	   r   nbytes)r   r   r   r   r   r   test_ndarray_compat_properties  s   
r   )__doc__re   numpyrq   r%   pandas.compatr   r   pandas.core.dtypes.commonr   pandasrW   r   r   r   r   r	   r
   pandas._testing_testingr7   pandas.core.apir   r   r   r   r   r   r   r   r   r   r   <module>   s&        1

