o
    ҷh                     @   sv   d dl mZ d dlZd dlZd dlmZ d dlm	Z	 G dd dZ
G dd de
ZG dd	 d	e
ZG d
d de
ZdS )    )finalN)is_numeric_dtypec                   @   s   e Zd ZdZdedefddZdd Zdedefd	d
Ze	de
jdedefddZejdddgdd Zejdejdddgdd Zejdddgdd ZdS )BaseReduceTestszg
    Reduction specific tests. Generally these only
    make sense for numeric/boolean operations.
    op_namereturnc                 C   s   dS )NF selfobjr   r   r   U/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/extension/base/reduce.py_supports_reduction   s   z#BaseReduceTests._supports_reductionc           	   	   C   s~   t ||}z|d}W n ttfy   |t}Y nw t ||}|dkr-| }| }n
||d}||d}t|| d S )Nfloat64countskipna)getattrastype	TypeError
ValueErrorobjecttmassert_almost_equal)	r	   sr   r   res_opaltexp_opresultexpectedr   r   r   check_reduce   s   



zBaseReduceTests.check_reducer   c                 C   s   |j S )Ndtype)r	   arrr   r   r   r   r   _get_expected_reduction_dtype*   s   z-BaseReduceTests._get_expected_reduction_dtypeserc                 C   s   |j }td|i}|dv rddini }| |||}|j|f|dd|}t||d	d|i|j }	t||	 |sL| 	 rLtj tj
g|d}
nt| | }tj |g|d}
t||
 d S )
Na)varstdddof   T)r   keepdimsr   r   r   )arraypd	DataFramer"   _reducer   r   assert_extension_array_equalisnaanyNAdropna)r	   r#   r   r   r!   dfkwargs	cmp_dtyperesult1result2r   	exp_valuer   r   r   check_reduce_frame4   s   z"BaseReduceTests.check_reduce_frameTFc                 C   t   |}t |}| ||s1d}tjt|d t|||d W d    d S 1 s*w   Y  d S | ||| d S NzV[Cc]annot perform|Categorical is not ordered for operation|does not support reduction|)matchr   r+   Seriesr   pytestraisesr   r   r   )r	   dataall_boolean_reductionsr   r   r   msgr   r   r   test_reduce_series_booleanO   s   
"z*BaseReduceTests.test_reduce_series_booleanzignore::RuntimeWarningc                 C   r:   r;   r=   )r	   rA   all_numeric_reductionsr   r   r   rC   r   r   r   test_reduce_series_numeric`   s   
"z*BaseReduceTests.test_reduce_series_numericc                 C   sj   |}t |}t|jstd |dv rt| d | ||s,td| d | ||| d S )Nznot numeric dtype)r   kurtsemz not an array methodz
Reduction z not supported for this dtype)r+   r>   r   r    r?   skipr   r9   )r	   rA   rE   r   r   r   r   r   r   test_reduce_frames   s   


z!BaseReduceTests.test_reduce_frameN)__name__
__module____qualname____doc__strboolr   r   r"   r   r+   r>   r9   r?   markparametrizerD   filterwarningsrF   rJ   r   r   r   r   r   
   s    


r   c                   @   s   e Zd ZdZdS )BaseNoReduceTestszwe don't define any reductionsN)rK   rL   rM   rN   r   r   r   r   rT      s    rT   c                   @      e Zd ZdedefddZdS )BaseNumericReduceTestsr   r   c                 C   s   |dv r	t d dS )Nr0   allz*These are tested in BaseBooleanReduceTestsTr?   rI   r   r   r   r   r         
z*BaseNumericReduceTests._supports_reductionNrK   rL   rM   rO   rP   r   r   r   r   r   rV          rV   c                   @   rU   )BaseBooleanReduceTestsr   r   c                 C   s   |dvr	t d dS )NrW   z*These are tested in BaseNumericReduceTestsTrY   r   r   r   r   r      rZ   z*BaseBooleanReduceTests._supports_reductionNr[   r   r   r   r   r]      r\   r]   )typingr   r?   pandasr+   pandas._testing_testingr   pandas.api.typesr   r   rT   rV   r]   r   r   r   r   <module>   s    z