o
    Û­j4F  ã                   @   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
 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
¡ej dddg¡dd„ ƒƒZejjej d
¡ej dddg¡dd„ ƒƒƒZ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)Únp_version_gte1p25)Ú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ejjdd„ ƒZdd„ Zej d¡dd„ ƒZdd„ Zdd„ Zdd„ Zej d¡ej d¡dd „ ƒƒZej d¡d!d"„ ƒZej d¡d#d$„ ƒZd%d&„ Zej d¡d'd(„ ƒZej d)g d*¢¡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 ‚|s7|| j|jus7J ‚|jd|d�}|j|usEJ ‚d S )Nr   ©r   é   F)Úindexr   )r   Úto_framer   ÚlenÚcolumnsÚvalues)Úselfr   Ú
index_flatÚusing_copy_on_writeÚidxÚidx_nameÚdf© r   ú]/var/www/html/CropPilot/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_droplevel7   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_nameP   s   ÿ"ÿz-TestCommon.test_constructor_non_hashable_namec                 C   s*   |}t |ƒ||jd�}t |j|j¡ d S )N©Údtype)Útyper6   Ú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_indexr8   Úassert_index_equal)r   r   r   Úresultr   r   r   Útest_to_flat_indexf   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   r1   r0   r.   r&   r'   r(   )r   r   r   r   Úoriginal_nameÚnew_indÚresr   r   r   r   Útest_set_name_methodsm   s"   ÿz TestCommon.test_set_name_methodsc                 C   s>   t jtdd�� | d¡ W d   ƒ d S 1 sw   Y  d S )Nz	list-liker   r;   )r&   r'   r/   r1   )r   r   r   r   r   Ú$test_set_names_single_label_no_level…   s   "þz/TestCommon.test_set_names_single_label_no_levelc                 C   sT   |}t tfD ]}||ƒ}||usJ ‚| |¡sJ ‚q|j ddd�}|jdks(J ‚d S )NTÚbanana)Údeepr   )r   r   r#   r   )r   r   r   ÚfuncÚidx_copyÚnew_copyr   r   r   Útest_copy_and_deepcopy‹   s   z!TestCommon.test_copy_and_deepcopyz$ignore:Dtype inference:FutureWarningc                 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)r   r   F)r   é   )r   é   éÿÿÿÿ)r7   r8   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 )NrR   r   z$Length of new names must be 1, got 2r   Úluigiz.name must be a hashable type)r   r   r&   r'   r(   r7   Ú__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   rT   z6Requested level \(wrong\) does not match index name \(z\)r!   )Údrop_duplicatesr   Úuniquer8   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 ‚|	}
t||	gƒD ]\}}| ¡ }t ||
¡ qd S )Nz)Skip check for empty Index and MultiIndexr   é   TFz%Skip na-check if index cannot hold narS   )r   r&   ÚskipÚ	is_uniqueÚhasnansÚNotImplementedErrorrb   r8   r?   Ú_can_hold_naÚ_valuesÚnpÚnanÚ_shallow_copyr6   Ú	enumerate)r   r   r   r   Ú
idx_uniquer@   ÚvalsÚvals_uniqueÚidx_nanÚidx_unique_nanrg   ÚposÚir   r   r   Útest_uniqueÒ   s8   

ÿ



þzTestCommon.test_uniquez*ignore:Period with BDay freq:FutureWarningú3ignore:PeriodDtype\[B\] is deprecated:FutureWarningc                 C   sZ  |}t |tjƒrtjjdtd�}| |¡ |jrt 	d¡ |d }d||k 
¡ }}|dkr2t|ƒ}|jrk|j|dd�}||ksBJ ‚|j|dd�}	||	ksOJ ‚|j|dd�}
||
ks\J ‚|j|dd�}||ksiJ ‚d S |jrŠ|j|dd�}||ks{J ‚|j|dd�}	||	ksˆJ ‚d S d}tjt|d	�� |j|dd� W d   ƒ d S 1 s¦w   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$   rV   ÚIntervalIndexr&   ÚmarkÚxfailrm   ÚapplymarkerÚemptyrj   Ú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|ƒr(|j	nd }|||d�}t|ƒ}t
j d¡ |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 duplicatesr5   rS   g      ø?)Úkeep)r$   r   r&   rj   r   r7   ÚlistÚsetr   r6   rp   ÚrandomÚdefault_rngÚchoiceÚintr   rV   rW   Ú
duplicatedr8   Úassert_numpy_array_equalra   r?   )r   r   r”   r   ÚholderÚunique_valuesr6   Ú
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|ƒr|jnd }|||d�}tjdgt	|ƒ dd�}t
 | ¡ |¡ | ¡ }t
 ||¡ ||usGJ ‚d S )Nr5   FÚbool)r$   r   r7   r•   r–   r   r6   rp   Úarrayr   r8   rœ   r›   ra   r?   )	r   r   r   rŸ   r�   rž   r6   r¢   Úresult_droppedr   r   r   Ú"test_drop_duplicates_no_duplicatesR  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/   ra   )r   r   r+   r   r   r   Útest_drop_duplicates_inplacei  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   ri   FT)r7   r   r$   r   r&   rj   rk   Úhas_duplicates)r   r   r   r�   r   r   r   r   Útest_has_duplicatesn  s   
zTestCommon.test_has_duplicatesr6   )Ú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r*|dv r*tr't	j
j}nt	j}t|jƒdko4|dk}ztj||dd	�� | |¡}W d   ƒ n1 sNw   Y  W n ttttfyb   Y d S w t |tƒrr|j|jkspJ ‚d S |j|jkszJ ‚d S )
Nc                 S   s   g | ]}d t |ƒ ‘qS )r   )Ústr)Ú.0rz   r   r   r   Ú
<listcomp>…  s    z9TestCommon.test_astype_preserves_name.<locals>.<listcomp>r   Úc)r®   r¬   r­   zstring[pyarrow]r¯   F)Úraise_on_extra_warningsÚcheck_stacklevel)r$   r	   ÚrangeÚnlevelsr.   r   r6   Úkindr   rp   Ú
exceptionsÚComplexWarningr°   r8   Úassert_produces_warningÚastyper(   r/   rm   ÚSystemError)r   r   r6   ÚwarnÚis_pyarrow_strr@   r   r   r   Útest_astype_preserves_name~  s0   

ýû€ÿ
z%TestCommon.test_astype_preserves_namec                 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
|jƒr:d S |jtkrAd S tj|d< t|ƒ|ƒ}tjdgt|ƒ td�}d|d< t |j|¡ |jdu sjJ ‚d S )NT)rM   Fr5   r   r   )r   rp   r¦   r   r¥   r8   rœ   Ú_isnanrl   ro   r   r6   rq   r7   )r   r   r   r   rg   r   r   r   r   Útest_hasnans_isnans¢  s&   


zTestCommon.test_hasnans_isnans)r_   Ú
__module__Ú__qualname__r&   r‚   Úparametrizer   r,   r4   r=   rA   rJ   rƒ   rK   rQ   Úfilterwarningsr]   r`   rh   r{   r“   r¤   r¨   r©   r«   rÀ   rÂ   r   r   r   r   r   !   s@    




(

2

#


þ
 r   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Ì   rX   Úlastc                 C   s¦   t | tƒr| tjjddd�¡ t |  ¡ ¡}| |  	¡  j
}t |¡}|dkr2t 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}   ÚstrictrX   r5   rÉ   )r$   r   r„   r&   r‚   rƒ   rp   ÚsumÚisnaÚnotnar   ÚsortÚconcatenater7   r6   rÊ   r8   r?   )rË   rÇ   r‹   Úmissing_countÚnot_na_valsÚsorted_valuesrg   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&   rj   ÚTr#   Ú	transposer   ÚshapeÚndimÚsizer   r	   Únbytes)r   r   r   r   r   r   Útest_ndarray_compat_propertieså  s   
rß   c                  C   s:   t jg td�} d| j_t | ¡}|dk}|jtksJ ‚d S )Nr5   FéE   )	rp   r¦   ÚobjectÚflagsÚ	writeablerV   ÚIndexr6   r¥   )Úarrr   r@   r   r   r   Útest_compare_read_only_arrayû  s
   
ræ   ) Ú__doc__r   r   rd   Únumpyrp   r&   Úpandas.compatr   Úpandas.compat.numpyr   Úpandas.core.dtypes.commonr   r   ÚpandasrV   r   r	   r
   r   Úpandas._testingÚ_testingr8   r   r‚   rÆ   rÅ   rÌ   Úfails_arm_wheelsr×   rß   ræ   r   r   r   r   Ú<module>   s0       
#
