o
    Eho                     @   sn   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	 d dl
mZ d dlZd dlmZ G dd dZdS )    N)np_version_gt2)'construct_1d_object_array_from_listlike)is_extension_array_dtype)ExtensionDtypec                   @   s   e Zd Z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d S )!BaseInterfaceTestsz,Tests that the basic interface is satisfied.c                 C   s   t |dksJ d S Nd   )lenselfdata r   Elib/python3.10/site-packages/pandas/tests/extension/base/interface.pytest_len   s   zBaseInterfaceTests.test_lenc                 C      |j dksJ d S r   )sizer
   r   r   r   	test_size      zBaseInterfaceTests.test_sizec                 C   r   )N   )ndimr
   r   r   r   	test_ndim   r   zBaseInterfaceTests.test_ndimc                 C   s   |j du sJ d S )NT)Z_can_hold_nar
   r   r   r   test_can_hold_na_valid    s   z)BaseInterfaceTests.test_can_hold_na_validc                 C   s   |j j}||   }|d |v sJ |d |v sJ ||v s!J ||vs'J tjD ]}||u s8t|t|kr9q*||vs?J ||vsEJ q*d S )Nr   )dtypena_valueisnatmZNULL_OBJECTStype)r   r   data_missingr   Zna_value_objr   r   r   test_contains$   s   
z BaseInterfaceTests.test_containsc                 C   s(   t |}|jdd}||jksJ d S )NF)index)pdSeriesZmemory_usagenbytes)r   r   sresultr   r   r   test_memory_usage>   s   
z$BaseInterfaceTests.test_memory_usagec                 C   sd   t |}|d |d ksJ t j|td}t jt|td}|jdkr*tt|}t|| d S )Nr   r   r   )nparrayobjectlistr   r   r   Zassert_numpy_array_equalr   r   r$   Zexpectedr   r   r   test_array_interfaceC   s   

z'BaseInterfaceTests.test_array_interfacec           	      C   sD  t j|dd}t j|dd}t ||rJ tsd S d}d}tjdd-}td t j|dd}t|dks9J t|rJd}|t|d j	v sJJ W d    n1 sTw   Y  tjdd-}td t j|dd}t|dkstJ t|rd}|t|d j	v sJ W d    n1 sw   Y  |st ||sJ d S d S )	NT)copyFzGStarting with NumPy 2.0, the behavior of the 'copy' keyword has changed)recordalwaysr   r   )
r'   r(   Zmay_share_memoryr   warningscatch_warningssimplefilterr	   strmessage)	r   r   Zresult_copy1Zresult_copy2Zwarning_raisedmsgwZresult_nocopy1Zresult_nocopy2r   r   r   test_array_interface_copyN   s:   

z,BaseInterfaceTests.test_array_interface_copyc                 C   s@   t |sJ t |jsJ t t|sJ t|jtsJ d S N)r   r   r    r!   
isinstancer   r
   r   r   r   test_is_extension_array_dtypem   s   z0BaseInterfaceTests.test_is_extension_array_dtypec                 C   s    t |drJ t |drJ d S )NvaluesZ_values)hasattrr
   r   r   r   test_no_values_attributes   s   z+BaseInterfaceTests.test_no_values_attributec                 C   s8   t |}t|jdr|jjd j|jju sJ d S d S )Nblocksr   )r    r!   r<   Z_mgrr>   Z
is_numericr   Z_is_numericr   r   r$   r   r   r   test_is_numeric_honoredy   s
   
z*BaseInterfaceTests.test_is_numeric_honoredc                 C   sX   |  }t|r(|dsJ | sJ |drJ | r"J |jjs*J d S d S )Nanyall)r   r   Z_reducerA   rB   r   Z_is_boolean)r   r   Znar   r   r   test_isna_extension_array~   s   z,BaseInterfaceTests.test_isna_extension_arrayc                 C   s\   |d |d ks
J |  }|jjrtd|j d |d |d< |d |d ks,J d S )Nr   r   z!test_copy assumes mutability and  is immutable)r-   r   _is_immutablepytestskipr?   r   r   r   	test_copy   s   zBaseInterfaceTests.test_copyc                 C   s   |d |d ks
J |  }||usJ t|t|ksJ |jjr,td|j d |d |d< |d |d ks<J |j d d d S )Nr   r   z!test_view assumes mutability and rD   r&   )viewr   r   rE   rF   rG   r?   r   r   r   	test_view   s   zBaseInterfaceTests.test_viewc                 C   s.   |  }t|}t|tsJ ||ksJ d S r8   )tolistr*   r9   r+   r   r   r   test_tolist   s   zBaseInterfaceTests.test_tolistN)__name__
__module____qualname____doc__r   r   r   r   r   r%   r,   r7   r:   r=   r@   rC   rH   rJ   rL   r   r   r   r   r      s"    r   )r0   Znumpyr'   rF   Zpandas.compat.numpyr   Zpandas.core.dtypes.castr   Zpandas.core.dtypes.commonr   Zpandas.core.dtypes.dtypesr   Zpandasr    Zpandas._testingZ_testingr   r   r   r   r   r   <module>   s    