a
    Pf2+                     @  s   d dl mZ d dlmZ d dlZd dlZd dlmZ d dl	m
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 )    )annotations)finalN)using_pyarrow_string_dtype)is_string_dtype)opsc                   @  s   e Zd ZU eZded< eZded< eZded< eZded< ddddd	Z	dd
ddZ
dd
ddZedddddZedd ZeefdddddZeddddZdS )BaseOpsUtiltype[Exception] | Noneseries_scalar_excframe_scalar_excseries_array_exc
divmod_excstr)op_namereturnc                 C  sr   |dv r| j }n:t|tjr0t|tjr0| j}nt|tjrD| j}n| j}t rn|d urndd l}||j	j
tf}|S )N)
__divmod____rdivmod__r   )r   
isinstancepdSeriesr   r	   r
   r   ZpyarrowlibZArrowNotImplementedErrorNotImplementedError)selfr   objotherresultpa r   X/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/extension/base/ops.py_get_expected_exception   s    z#BaseOpsUtil._get_expected_exception)r   c                 C  s   |S Nr   )r   r   r   r   Zpointwise_resultr   r   r   _cast_pointwise_result2   s    z"BaseOpsUtil._cast_pointwise_resultc                 C  s
   t |S r   )tmget_op_from_name)r   r   r   r   r   r"   ;   s    zBaseOpsUtil.get_op_from_name	pd.Series)serr   c                 C  s.   |  |||}| |}| ||||| d S r   )r   r"   	_check_op)r   r$   r   r   excopr   r   r   check_opnameD   s    
zBaseOpsUtil.check_opnamec                 C  sN   t |tjr>t|jdkrt|jd d df || }n|||}|S )N   r   )	r   r   	DataFramelencolumnsr   iloccombineZto_frame)r   r   r   r'   expectedr   r   r   _combineL   s     zBaseOpsUtil._combinec                 C  s   |d u rP|||}|  |||}| ||||}t|t|sBJ t|| n4t| ||| W d    n1 sz0    Y  d S r   )r0   r    r   typer!   Zassert_equalpytestraises)r   r$   r'   r   r   r&   r   r/   r   r   r   r%   W   s    
zBaseOpsUtil._check_opr$   c           	      C  s   |t u r| d||}n| d||}|d u r|||\}}|t u rX|| ||  }}n|| ||  }}t|| t|| n4t| t || W d    n1 s0    Y  d S )Nr   r   )divmodr   r!   assert_series_equalr2   r3   )	r   r$   r'   r   r&   Z
result_divZ
result_modZexpected_divZexpected_modr   r   r   _check_divmod_opi   s    zBaseOpsUtil._check_divmod_opN)__name__
__module____qualname__	TypeErrorr	   __annotations__r
   r   r   r   r    r"   r   r(   r0   r   r%   r7   r   r   r   r   r      s    
		

r   c                   @  s   e Zd ZU dZeZded< eZded< eZded< eZ	ded< dd Z
d	d
 Zdd Zdd Zdd Zdd Zejdejejejgejddd ejej D dd ZdS )BaseArithmeticOpsTestsa?  
    Various Series and DataFrame arithmetic ops methods.

    Subclasses supporting various ops should set the class variables
    to indicate that they support ops of that kind

    * series_scalar_exc = TypeError
    * frame_scalar_exc = TypeError
    * series_array_exc = TypeError
    * divmod_exc = TypeError
    r   r	   r
   r   r   c                 C  sB   |dkrt |jrtd |}t|}| |||jd  d S )N__rmod__%Skip testing Python string formattingr   )r   dtyper2   skipr   r   r(   r-   r   dataall_arithmetic_operatorsr   r$   r   r   r   test_arith_series_with_scalar   s
    

z4BaseArithmeticOpsTests.test_arith_series_with_scalarc                 C  sD   |dkrt |jrtd |}td|i}| |||d  d S )Nr>   r?   Ar   )r   r@   r2   rA   r   r*   r(   )r   rC   rD   r   Zdfr   r   r   test_arith_frame_with_scalar   s
    
z3BaseArithmeticOpsTests.test_arith_frame_with_scalarc              	   C  s6   |}t |}| ||t |jd gt|  d S Nr   )r   r   r(   r-   r+   rB   r   r   r   test_arith_series_with_array   s    
z3BaseArithmeticOpsTests.test_arith_series_with_arrayc                 C  s,   t |}| |td | dtj| d S )Nr)   r   r   r7   r5   r   Zrdivmod)r   rC   r$   r   r   r   test_divmod   s    
z"BaseArithmeticOpsTests.test_divmodc                 C  sJ   t |}| |t| |}| |tj| t |}| |tj| d S r   rJ   )r   rC   Zdata_for_twosr$   r   r   r   r   test_divmod_series_array   s    

z/BaseArithmeticOpsTests.test_divmod_series_arrayc                 C  s|   t |}| d||}|d urVt| ||  W d    n1 sH0    Y  d S || }t || }t|| d S )N__add__)r   r   r   r2   r3   r!   r6   )r   rC   r$   r&   r   r/   r   r   r   $test_add_series_with_extension_array   s    
&z;BaseArithmeticOpsTests.test_add_series_with_extension_arrayboxr   c                 C  s   g | ]}| d s|qS )__r)
startswith.0xr   r   r   
<listcomp>   s   
z!BaseArithmeticOpsTests.<listcomp>c                 C  s0   ||}t ||r,t|||}|tu s,J d S r   )hasattrgetattrNotImplemented)r   rC   rO   r   r   r   r   r   r   6test_direct_arith_with_ndframe_returns_not_implemented   s    
zMBaseArithmeticOpsTests.test_direct_arith_with_ndframe_returns_not_implementedN)r8   r9   r:   __doc__r;   r	   r<   r
   r   r   rE   rG   rI   rK   rL   rN   r2   markparametrizer   r   r*   Indexr!   Zarithmetic_dunder_methodsZcomparison_dunder_methodsrY   r   r   r   r   r=   }   s&   
		

r=   c                   @  s.   e Zd ZdZddddZdd Zdd	 Zd
S )BaseComparisonOpsTestsz4Various Series and DataFrame comparison ops methods.r#   r4   c           	   
   C  s   |j dv r@|||}|||}| |j |||}t|| nd }z|||}W n( tyz } z|}W Y d }~n
d }~0 0 |d u r|||}| |j |||}t|| n:tt| ||| W d    n1 s0    Y  d S )N)eqne)	r8   r.   r    r!   r6   	Exceptionr2   r3   r1   )	r   r$   rC   r'   r   r   r/   r&   errr   r   r   _compare_other   s$    


z%BaseComparisonOpsTests._compare_otherc                 C  s   t |}| |||d d S rH   )r   r   rc   )r   rC   comparison_opr$   r   r   r   test_compare_scalar   s    
z*BaseComparisonOpsTests.test_compare_scalarc                 C  s<   t |}t j|d gt| |jd}| |||| d S )Nr   )r@   )r   r   r+   r@   rc   )r   rC   rd   r$   r   r   r   r   test_compare_array   s    
z)BaseComparisonOpsTests.test_compare_arrayN)r8   r9   r:   rZ   rc   re   rf   r   r   r   r   r^      s   r^   c                   @  s6   e Zd Zdd Zejdejej	ej
gdd ZdS )BaseUnaryOpsTestsc                 C  s   t j|dd}zdd |d d D  W nr ty   tt |  W d    n1 s\0    Y  tt |  W d    n1 s0    Y  Y n$0 | }t j| dd}t|| d S )Nname)rh   c                 S  s   g | ]
}| qS r   r   rR   r   r   r   rU   	      z1BaseUnaryOpsTests.test_invert.<locals>.<listcomp>
   )r   r   r;   r2   r3   r!   r6   )r   rC   r$   r   r/   r   r   r   test_invert  s    $*zBaseUnaryOpsTests.test_invertufuncc                 C  s   t jdt jdt jdi| }d }zt|| }W nb ty } zJ|}tt|t	f || W d    n1 sr0    Y  W Y d }~nd }~0 0 ||}t
|| d S )N__pos____neg____abs__)nppositivenegativeabsrW   ra   r2   r3   r1   r;   r!   Zassert_extension_array_equal)r   rC   rl   attrr&   r   rb   Zaltr   r   r   #test_unary_ufunc_dunder_equivalence  s    <z5BaseUnaryOpsTests.test_unary_ufunc_dunder_equivalenceN)r8   r9   r:   rk   r2   r[   r\   rp   rq   rr   rs   ru   r   r   r   r   rg     s   rg   )
__future__r   typingr   numpyrp   r2   Zpandas._configr   Zpandas.core.dtypes.commonr   Zpandasr   Zpandas._testingZ_testingr!   Zpandas.corer   r   r=   r^   rg   r   r   r   r   <module>   s   l_'