o
    i                    @   s*  d Z ddlmZmZmZmZ ddlZddlZddlm	Z	m
Z
mZmZmZmZmZmZmZ ddlmZ ddlZddlmZ ddlmZ ejddd	Zdd
lmZ ddlm Z  ej!ej"e#ddd Z$ej!dd Z%ej!dd Z&ej!ddgddd Z'ej!dd Z(ej!dd Z)ej!dd Z*ej!dd Z+ej!dd Z,G d d! d!ej-Z.G d"d# d#ej/Z0G d$d% d%ej1Z2G d&d' d'ej3Z4G d(d) d)ej5Z6G d*d+ d+ej7Z8G d,d- d-ej9Z:G d.d/ d/ej;Z<G d0d1 d1ej=Z>G d2d3 d3ej?Z@G d4d5 d5ejAZBG d6d7 d7ejCZDG d8d9 d9ejEZFG d:d; d;ejGZHG d<d= d=ejIZJG d>d? d?ejKZLG d@dA dAejMZNG dBdC dCejOZPdDdE ZQejRjSeeTdFdGejRUdHg dIejRUdJdKdKdKggdLdM ZVejRjSeeTdNdGejRUdOdPdQgejRjUdRg dSdTdggg dUdgggdVdWgdXdYdZ ZWdS )[ag  
This file contains a minimal set of tests for compliance with the extension
array interface test suite, and should contain no other tests.
The test suite for the full functionality of the array is located in
`pandas/tests/arrays/`.
The tests in this file are inherited from the BaseExtensionTests, and only
minimal tweaks should be applied to get the tests passing (by overwriting a
parent method).
Additional tests should either be added to one of the BaseExtensionTests
classes (if they are relevant for the extension interface for all dtypes), or
be added to the array-specific tests in `pandas/tests/arrays/`.
    )datedatetimetime	timedeltaN)	is_ci_environmentis_platform_windowspa_version_under2p0pa_version_under3p0pa_version_under4p0pa_version_under6p0pa_version_under7p0pa_version_under8p0pa_version_under9p0)PerformanceWarning)basepyarrowz1.0.1)
minversion)ArrowExtensionArray)
ArrowDtype)paramsidsc                 C   s   t | jdS )N)pyarrow_dtype)r   param)request r   \/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/extension/test_arrow.pydtype/   s   r   c              	   C   s  | j }tj|r!ddgd d g ddgd  d g ddg }n)tj|r?ddgd d g ddgd  d g d	d
g }ntj|r\ddgd d g ddgd  d g ddg }ntj|ryddgd d g ddgd  d g ddg }ntj|rtdddtdddgd d g tdddtdddgd  d g tdddtdddg }ntj	|rt
dddddddt
dddddddgd d g t
ddddt
ddddgd  d g t
dddt
dddg }n]tj|rtdtddgd d g tdtdgd  d g tdtdg }n2tj|rHtddtddgd d g tddtddgd  d g tddtddg }nttj|| dS )NTF   ,   g      ?        g       g            ?g     X@   r   c                  i
      r   r   patypes
is_booleanis_floatingis_signed_integeris_unsigned_integeris_dater   is_timestampr   is_durationr   is_timer   NotImplementedErrorpdarray)r   pa_dtypedatar   r   r   r=   4   sn   00..*r=   c                 C   s   t | d| d gS )zLength-2 array with [NA, Valid]Nr   type_from_sequence)r=   r   r   r   data_missingd   s   rA   )r   c                 C   s    | j dkr|S | j dkr|S dS )zParametrized fixture returning 'data' or 'data_missing' integer arrays.

    Used to test dtype conversion with and without missing values.
    r=   rA   N)r   )r   r=   rA   r   r   r   all_dataj   s
   

rB   c              	   C   sR  | j }tj|rd}d}d}ntj|rd}d}d}n}tj|r*d}d}d}nptj|r7d}d}d	}nctj|rPtd
dd}tddd}tddd}nJtj	|rnt
d
dddddd}t
ddd}t
dddd}n,tj|rtd}td}tdd}ntj|rtdd}tdd}tdd}nttj||dd||||g| dS )z
    Data for factorization, grouping, and unique tests.

    Expected to be like [B, B, NA, NA, A, A, B, C]

    Where A < B < C and NA is missing
    FTgr   g?r#   r   r!   r+   r'   r(   r)   i  r&   r*   r   Nr-   r.   )r   r<   ABCr   r   r   data_for_groupingv   sF   	

rF   c                 C       t | | d | d | d gS )zn
    Length-3 array with a known sort order.

    This should be three items [B, C, A] with
    A < B < C
    r      r   r>   rF   r   r   r   data_for_sorting      rJ   c                 C   rG   )z{
    Length-3 array with a known sort order.

    This should be three items [B, NA, A] with
    A < B and NA missing.
    r   r%   r   r>   rI   r   r   r   data_missing_for_sorting   rK   rL   c                 C   s:   | j j}tj|stj|rtjdgd | j dS | S )z3Length-100 array in which all the elements are two.r%   d   r-   )r   r   r/   r0   
is_integerr2   r:   r;   )r=   r<   r   r   r   data_for_twos   s   rO   c                   C   s   t jS )z6The scalar missing value for this type. Default 'None')r:   NAr   r   r   r   na_value   s   rQ   c                   @      e Zd ZdS )TestBaseCastingN__name__
__module____qualname__r   r   r   r   rS          rS   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	TestConstructorsc                    sn   |j j}tj|r/|jr/tr |jt	j
jd|j dd n|jt	j
jtd| d t | d S )Nztimestamp data with tz=z( converted to integer when pyarrow < 2.0reason$pyarrow.type_for_alias cannot infer raisesr[   )r   r   r/   r0   r6   tzr   node
add_markerpytestmarkxfailr9   supertest_from_dtypeselfr=   r   r<   	__class__r   r   rf      s   z TestConstructors.test_from_dtypec                 C   s~   t r|jtjjdd t||j}t	
|| t|jtjs$J t||j }t	
|| t|jtjs=J d S )N,ChunkedArray has no attribute combine_chunksrZ   )r	   r`   ra   rb   rc   rd   r?   r@   _datatmassert_extension_array_equal
isinstancer/   ChunkedArraycombine_chunks)rh   r=   r   resultr   r   r   test_from_sequence_pa_array   s   z,TestConstructors.test_from_sequence_pa_arrayc                 C   sd   t r|jtjjtdd tjtdd t	j
dgt d W d    d S 1 s+w   Y  d S )Nz3month_day_nano_interval not implemented by pyarrow.r]   zConverting strings tomatchz12-1r-   )r   r`   ra   rb   rc   rd   AttributeErrorr^   r9   r   _from_sequence_of_stringsr/   month_day_nano_interval)rh   r   r   r   r   *test_from_sequence_pa_array_notimplemented   s   
"z;TestConstructors.test_from_sequence_pa_array_notimplementedc                 C   s  |j j}tr|jtjjdd ntj	
|r)|dr)|jtjjdd nstj	|r@|jtjjtjd| d n\tj	|rR|jtjjdd nJtj	|r|jd urtrp|jtjjtjd| d n,t rt r|jtjjtjd	d ntrtj	|r|jtjjtjd| d |jt }t|j||j d
}t|| | }t|j||j d
}t|| d S )Nrk   rZ   z
time64[ns]z&Nanosecond time parsing not supported.z pyarrow doesn't support parsing r]   z:Iterating over ChunkedArray[bool] returns PyArrow scalars.z)pyarrow doesn't support string cast from z_TODO: Set ARROW_TIMEZONE_DATABASE environment variable on CI to path to the tzdata for pyarrow.r-   )r   r   r	   r`   ra   rb   rc   rd   r/   r0   	is_time64equalsr7   ArrowNotImplementedErrorr1   r6   r_   r   r   r   ArrowInvalidr   is_temporalrl   caststringr?   rw   rm   rn   rq   )rh   r=   r   r<   pa_arrayrr   r   r   r   &test_from_sequence_of_strings_pa_array  sn   	z7TestConstructors.test_from_sequence_of_strings_pa_array)rU   rV   rW   rf   rs   ry   r   __classcell__r   r   ri   r   rY      s
    rY   c                       sN   e Zd Zejjdd fddZ fddZ fddZ fd	d
Z	  Z
S )TestGetitemTestsz`data.dtype.type return pyarrow.DataType but this (intentionally) returns Python scalars or pd.NarZ   c                       t  | d S N)re   test_getitem_scalarrh   r=   ri   r   r   r   C  s   z$TestGetitemTests.test_getitem_scalarc                    s~   t |jjdd }t |jjdd }dg}tr|g d tr7|dvr7||v r7|jtj	j
d| d| d t | d S 	Nr_   unitns)smsusNUTCz3Not supported by pyarrow < 3.0 with timestamp type  and rZ   )getattrr   r   r   extendr	   r`   ra   rb   rc   rd   re   test_take_series)rh   r   r=   r_   r   	bad_unitsri   r   r   r   M  s    z!TestGetitemTests.test_take_seriesc                    s   t |jjdd }t |jjdd }dg}tr|g d tr7|dvr7||v r7|jtj	j
d| d| d t || d S r   )r   r   r   r   r   r	   r`   ra   rb   rc   rd   re   test_reindex)rh   r   r=   rQ   r_   r   r   ri   r   r   r   ^  s    zTestGetitemTests.test_reindexc                    s   t |jjdd }t |jjdd }dg}tr|g d tr9|s9|dvr9||v r9|jtj	j
d| d| d t | d S r   )r   r   r   r   r   r	   r`   ra   rb   rc   rd   re    test_loc_iloc_frame_single_dtype)rh   r   using_array_managerr=   r_   r   r   ri   r   r   r   o  s*   z1TestGetitemTests.test_loc_iloc_frame_single_dtype)rU   rV   rW   rb   rc   rd   r   r   r   r   r   r   r   ri   r   r   B  s    r   c                       s6   e Zd Zdd Zejdddg fddZ  ZS )TestBaseNumericReducec                 C   sr   |j j}t|||d}tj|rtd ntj|s$tj	|r)|
d}t|||d}t|| d S )NskipnazApandas boolean data with NA does not fully support all reductionsFloat64)r   r   r   r/   r0   r1   rb   skiprN   r2   astyperm   assert_almost_equal)rh   serop_namer   r<   rr   expectedr   r   r   check_reduce  s   
z"TestBaseNumericReduce.check_reducer   TFc                    sX  |j j}tjjt| dtj d| d}|dv r |j	| n|dv r-t
r-|j	| nu|dv r:tr:|j	| nh|dv ri|du rit
ritj|sPtj|ri|j	tjjt| d| d	| d
tj d n9tj|stj|stj|s|dv rtj|rtj|r|j	| ntj|r|dv r|j	| t ||| d S )N is not implemented in pyarrow= for r]   >   kurtskew>   maxminstdvarprodmedian>   summeanFz with skip_nulls=z did not return NA for z with pyarrow=>   r   r   >   r   r   r   )r   r   rb   rc   rd   	TypeErrorr/   __version__r`   ra   r   r   r0   rN   r2   AssertionErrorr1   r~   r7   re   test_reduce_series)rh   r=   all_numeric_reductionsr   r   r<   
xfail_markri   r   r   r     sd   







z(TestBaseNumericReduce.test_reduce_series)	rU   rV   rW   r   rb   rc   parametrizer   r   r   r   ri   r   r     s    r   c                   @   s&   e Zd Zejdddgdd ZdS )TestBaseBooleanReducer   TFc                 C   s   |j j}tjjt| dtj d| d}tj	|s"|j
| ntr*|j
| |}t|}	t|	||d}
|
|dku sAJ d S )Nr   r   r]   r   any)r   r   rb   rc   rd   r   r/   r   r0   r1   r`   ra   r	   r:   Seriesr   )rh   r=   all_boolean_reductionsr   rQ   r   r<   r   r   r   rr   r   r   r   r     s"   
z(TestBaseBooleanReduce.test_reduce_seriesN)rU   rV   rW   rb   rc   r   r   r   r   r   r   r     s    r   c                       sj   e Zd Z fddZ fddZ fddZ fddZ fd	d
Zej	
dddg fddZ  ZS )TestBaseGroupbyc                    sJ   t |jjdd }tr|dvr|jtjjd| dd t	 
| d S )Nr_   r   3Not supported by pyarrow < 2.0 with timestamp type .rZ   )r   r   r   r   r`   ra   rb   rc   rd   re   test_groupby_agg_extension)rh   rF   r   r_   ri   r   r   r     s   
z*TestBaseGroupby.test_groupby_agg_extensionc                    n   |j j}tj|r|jtjj	| dd ntj
|r/|jtjj	tjd| d t | d S N" only has 2 unique possible valuesrZ   $pyarrow doesn't support factorizing r]   )r   r   r/   r0   r1   r`   ra   rb   rc   rd   r7   r|   re   test_groupby_extension_no_sortrh   rF   r   r<   ri   r   r   r        z.TestBaseGroupby.test_groupby_extension_no_sortc                    r   r   )r   r   r/   r0   r1   r`   ra   rb   rc   rd   r7   r|   re    test_groupby_extension_transformr   ri   r   r   r     r   z0TestBaseGroupby.test_groupby_extension_transformc                    sx   |j j}tj|r|jtjj	tj
d| d tjttdd t || W d    d S 1 s5w   Y  d S )Nr   r]   Fcheck_stacklevel)r   r   r/   r0   r7   r`   ra   rb   rc   rd   r|   rm   maybe_produces_warningr   r   re   test_groupby_extension_apply)rh   rF   groupby_apply_opr   r<   ri   r   r   r     s   "z,TestBaseGroupby.test_groupby_extension_applyc                    sF   |j j}tj|stj|r|jtj	j
dd t | d S )Nz/ArrowExtensionArray doesn't support .sum() yet.rZ   )r   r   r/   r0   rN   r2   r`   ra   rb   rc   rd   re   test_in_numeric_groupbyr   ri   r   r   r     s   z'TestBaseGroupby.test_in_numeric_groupbyas_indexTFc                    s   |j j}tj|r|jtjj	t
| dd ntj|r0|jtjj	tjd| d tjttdd t || W d    d S 1 sKw   Y  d S )Nr   r]   r   Fr   )r   r   r/   r0   r1   r`   ra   rb   rc   rd   
ValueErrorr7   r|   rm   r   r   r   re   test_groupby_extension_agg)rh   r   rF   r   r<   ri   r   r   r   &  s(   "z*TestBaseGroupby.test_groupby_extension_agg)rU   rV   rW   r   r   r   r   r   rb   rc   r   r   r   r   r   ri   r   r     s    

r   c                       sH   e Zd Z fddZ fddZ fddZdd Z fd	d
Z  ZS )TestBaseDtypec                    J   |j }tj|r|jd ur|jtjj	t
d| d t | d S Nr\   r]   )r   r/   r0   r6   r_   r`   ra   rb   rc   rd   r9   re   #test_construct_from_string_own_namerh   r   r   r<   ri   r   r   r   >     z1TestBaseDtype.test_construct_from_string_own_namec                    r   r   )r   r/   r0   r6   r_   r`   ra   rb   rc   rd   r9   re   test_is_dtype_from_namer   ri   r   r   r   I  r   z%TestBaseDtype.test_is_dtype_from_namec                    r   r   )r   r/   r0   r6   r_   r`   ra   rb   rc   rd   r9   re   test_construct_from_stringr   ri   r   r   r   T  r   z(TestBaseDtype.test_construct_from_stringc                 C   sF   d}t jt|d t|d W d    d S 1 sw   Y  d S )Nz*'another_type' must end with '\[pyarrow\]'rt   another_type)rb   r^   r   r?   construct_from_string)rh   r   msgr   r   r   .test_construct_from_string_another_type_raises_  s   "z<TestBaseDtype.test_construct_from_string_another_type_raisesc                    s   |j }tj|s*tj|s*tj|r|jdks*|jd us*tj|r8|jdkr8|j	
tjj| dd t | d S )Nr   zB does not have associated numpy dtype findable by find_common_typerZ   )r   r/   r0   r5   r8   r6   r   r_   r7   r`   ra   rb   rc   rd   re   test_get_common_dtyper   ri   r   r   r   d  s"   




z#TestBaseDtype.test_get_common_dtype)	rU   rV   rW   r   r   r   r   r   r   r   r   ri   r   r   =  s    r   c                   @   rR   )TestBaseIndexNrT   r   r   r   r   r   z  rX   r   c                       s6   e Zd Z fddZejjdd fddZ  ZS )TestBaseInterfacec                    sh   t |jjdd }t |jjdd }tr+|dvr+|dkr+|jtjjd| d| d t	 
|| d S )Nr_   r   r   r   r   r   rZ   )r   r   r   r   r`   ra   rb   rc   rd   re   test_contains)rh   r=   rA   r   r_   r   ri   r   r   r     s   zTestBaseInterface.test_containsz,pyarrow.ChunkedArray does not support views.rZ   c                    r   r   )re   	test_viewr   ri   r   r   r        zTestBaseInterface.test_view)	rU   rV   rW   r   rb   rc   rd   r   r   r   r   ri   r   r   ~  s    r   c                       s(   e Zd Zejd fddZ  ZS )TestBaseMissingz4ignore:Falling back:pandas.errors.PerformanceWarningc                    r   r   )re   test_dropna_array)rh   rA   ri   r   r   r     r   z!TestBaseMissing.test_dropna_array)rU   rV   rW   rb   rc   filterwarningsr   r   r   r   ri   r   r     s    
r   c                   @   rR   )TestBasePrintingNrT   r   r   r   r   r     rX   r   c                       s   e Zd Z fddZ fddZ fddZ fddZ fd	d
Z fddZ fddZ	e
jjdd fddZ fddZ  ZS )TestBaseReshapingc                    J   t |jjdd }tr|dvr|jtjjd| d t	 
|| d S Nr_   r   r   rZ   )r   r   r   r   r`   ra   rb   rc   rd   re   test_concat_columnsrh   r=   rQ   r   r_   ri   r   r   r        z%TestBaseReshaping.test_concat_columnsc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   'test_concat_extension_arrays_copy_falser   ri   r   r   r     r   z9TestBaseReshaping.test_concat_extension_arrays_copy_falsec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   
test_alignr   ri   r   r   r     r   zTestBaseReshaping.test_alignc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_align_framer   ri   r   r   r     r   z"TestBaseReshaping.test_align_framec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_align_series_framer   ri   r   r   r     r   z)TestBaseReshaping.test_align_series_framec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   
test_merger   ri   r   r   r     r   zTestBaseReshaping.test_mergec                    H   t |jjdd }tr|dvr|jtjjd| d t	 
| d S r   )r   r   r   r   r`   ra   rb   rc   rd   re   
test_ravelrh   r=   r   r_   ri   r   r   r        zTestBaseReshaping.test_ravel5GH 45419: pyarrow.ChunkedArray does not support viewsrZ   c                    r   r   )re   test_transposer   ri   r   r   r     r   z TestBaseReshaping.test_transposec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_transpose_framer   ri   r   r   r     r   z&TestBaseReshaping.test_transpose_frame)rU   rV   rW   r   r   r   r   r   r   r   rb   rc   rd   r   r   r   r   r   ri   r   r     s    






r   c                
       s  e Zd Z fddZ fddZ fddZejddd	g fd
dZ	 fddZ
 fddZ fddZ fddZ fddZ fddZejjdeg dejg dddejdddejejgddgg dd fdd Z fd!d"Zejjd#g d$ejg d$d%deg d$gg d&d fd'd(Zejd)dd*gejddd+g fd,d-Zejddd+g fd.d/Z fd0d1Z fd2d3Z fd4d5Z fd6d7Z fd8d9Z fd:d;Z fd<d=Zejj d>d? fd@dAZ!  Z"S )BTestBaseSetitemc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_scalar_seriesrh   r=   box_in_seriesr   r_   ri   r   r   r     r   z*TestBaseSetitem.test_setitem_scalar_seriesc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_sequencer   ri   r   r   r     r   z%TestBaseSetitem.test_setitem_sequencec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re    test_setitem_sequence_broadcastsr   ri   r   r   r     r   z0TestBaseSetitem.test_setitem_sequence_broadcastssetterlocilocc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_scalarrh   r=   r   r   r_   ri   r   r   r       z#TestBaseSetitem.test_setitem_scalarc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_loc_scalar_mixedr   ri   r   r   r    r   z-TestBaseSetitem.test_setitem_loc_scalar_mixedc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_loc_scalar_singler   ri   r   r   r  &  r   z.TestBaseSetitem.test_setitem_loc_scalar_singlec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   ,test_setitem_loc_scalar_multiple_homogoneousr   ri   r   r   r  0  r   z<TestBaseSetitem.test_setitem_loc_scalar_multiple_homogoneousc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_iloc_scalar_mixedr   ri   r   r   r  :  r   z.TestBaseSetitem.test_setitem_iloc_scalar_mixedc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_iloc_scalar_singler   ri   r   r   r  D  r   z/TestBaseSetitem.test_setitem_iloc_scalar_singlec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   -test_setitem_iloc_scalar_multiple_homogoneousr   ri   r   r   r	  N  r   z=TestBaseSetitem.test_setitem_iloc_scalar_multiple_homogoneousmask)TTTFFbooleanr-   T)numpy-arrayzboolean-arrayzboolean-array-nar   c                    L   t |jjdd }tr|dvr|jtjjd| d t	 
||| d S r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_mask)rh   r=   r
  r   r   r_   ri   r   r   r  X  s   
z!TestBaseSetitem.test_setitem_maskc                    sb   t |jjdd }t |jjdd }tr(|dvr(|dkr(|jtjjd| d t	 
|| d S )Nr_   r   r   r   r   rZ   )r   r   r   r   r`   ra   rb   rc   rd   re   'test_setitem_mask_boolean_array_with_na)rh   r=   r   r   r_   r   ri   r   r   r  k  s   z7TestBaseSetitem.test_setitem_mask_boolean_array_with_naidx)r   r!   r%   Int64)listzinteger-arrayr  c                    r  r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_integer_array)rh   r=   r  r   r   r_   ri   r   r   r  v  s   z*TestBaseSetitem.test_setitem_integer_arrayas_callableFNc                    r  r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_mask_aligned)rh   r=   r  r   r   r_   ri   r   r   r    s   z)TestBaseSetitem.test_setitem_mask_alignedc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_mask_broadcastr  ri   r   r   r    r  z+TestBaseSetitem.test_setitem_mask_broadcastc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_tuple_indexr   ri   r   r   r    r   z(TestBaseSetitem.test_setitem_tuple_indexc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_slicer   ri   r   r   r    r   z"TestBaseSetitem.test_setitem_slicec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_loc_iloc_slicer   ri   r   r   r    r   z+TestBaseSetitem.test_setitem_loc_iloc_slicec                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_slice_arrayr   ri   r   r   r    r   z(TestBaseSetitem.test_setitem_slice_arrayc                    sZ   d|j jv }t|jjdd }tr$|dvr$|s$|j tjj	d| d t
 || d S )N
null_slicer_   r   r   rZ   )r`   nodeidr   r   r   r   ra   rb   rc   rd   re   ,test_setitem_with_expansion_dataframe_column)rh   r=   full_indexerr   is_null_slicer_   ri   r   r   r    s   z<TestBaseSetitem.test_setitem_with_expansion_dataframe_columnc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_with_expansion_rowr   ri   r   r   r!    r   z/TestBaseSetitem.test_setitem_with_expansion_rowc                    r   r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_setitem_frame_2d_valuesr   ri   r   r   r"    r   z,TestBaseSetitem.test_setitem_frame_2d_valuesr   rZ   c                    r   r   )re   test_setitem_preserves_viewsr   ri   r   r   r#    r   z,TestBaseSetitem.test_setitem_preserves_views)#rU   rV   rW   r   r   r   rb   rc   r   r  r  r  r  r  r  r	  npr;   r:   rP   r  r  r  r  r  r  r  r  r  r  r!  r"  rd   r#  r   r   r   ri   r   r     sT    









	
$








r   c                       s.   e Zd Zejdddg fddZ  ZS )TestBaseParsingenginecpythonc                    sx   |j j}tj|r|jtjj	t
dd ntj|r3|jd ur3|jtjj	td|j dd t || d S )NzGH 47534r]   zParameterized types with tz=z not supported.)r   r   r/   r0   r1   r`   ra   rb   rc   rd   r   r6   r_   r9   re   test_EA_types)rh   r&  r=   r   r<   ri   r   r   r)    s   zTestBaseParsing.test_EA_types)rU   rV   rW   rb   rc   r   r)  r   r   r   ri   r   r%    s    r%  c                       s.   e Zd Zejjeedd fddZ  Z	S )TestBaseUnaryOpsz3pyarrow.compute.invert not supported in pyarrow<2.0r]   c                    sD   |j j}tj|s|jtjj	tj
d| d t | d S )Nz$pyarrow.compute.invert does support r]   )r   r   r/   r0   r1   r`   ra   rb   rc   rd   r|   re   test_invertrg   ri   r   r   r+    s   zTestBaseUnaryOps.test_invert)
rU   rV   rW   rb   rc   rd   r   r9   r+  r   r   r   ri   r   r*    s    r*  c                       s  e Zd Zejdddg fddZejdddg fd	d
Z fddZejj	e
edd fddZejdddddddejfddejfddg fddZejdddg fddZejdddg fdd Zejd!ejd"d# gejd$d%d# ejg fd&d'Zejd(d)dg fd*d+Zejd(d)dg fd,d-Z fd.d/Z fd0d1Zejd2d3dd4g d5g fd6d7Z fd8d9Z fd:d;Zejj	d<d= fd>d?Z fd@dAZ fdBdCZ fdDdEZ   Z!S )FTestBaseMethodsperiodsr!   r"   c              	      sV   |j j}tj|r"|dkr"|jtjj	tj
d| d| dd t || d S )Nr!   z
diff with z and periods=z will overflowr]   )r   r   r/   r0   r4   r`   ra   rb   rc   rd   r}   re   	test_diff)rh   r=   r-  r   r<   ri   r   r   r.    s   zTestBaseMethods.test_diffdropnaTFc                    F   |j j}tj|r|jtjj	tj
d| d t || d S )Nzvalue_count has no kernel for r]   )r   r   r/   r0   r7   r`   ra   rb   rc   rd   r|   re   test_value_counts)rh   rB   r/  r   r<   ri   r   r   r1       z!TestBaseMethods.test_value_countsc                    D   |j j}tj|r|jtjj	tj
d| d t | d S )Nz&value_count has no pyarrow kernel for r]   )r   r   r/   r0   r7   r`   ra   rb   rc   rd   r|   re    test_value_counts_with_normalizerg   ri   r   r   r4  (     z0TestBaseMethods.test_value_counts_with_normalizez6argmin/max only implemented for pyarrow version >= 6.0r]   c                    sr   |j j}tj|r|jtjj	| dd ntj
|r/|jtjj	tjd| d t ||| d S )Nr   rZ   %min_max not supported in pyarrow for r]   )r   r   r/   r0   r1   r`   ra   rb   rc   rd   r7   r|   re   test_argmin_argmax)rh   rJ   rL   rQ   r   r<   ri   r   r   r7  3  s   z"TestBaseMethods.test_argmin_argmaxzop_name, skipna, expected)idxmaxTr   )idxminTr%   )argmaxTr   )argminTr%   r8  r9  )r:  Fr#   )r;  Fr#   c                    st   |j j}tr|r|jtjjtdd nts/t	j
|r/|r/|jtjjt	jd| d t |||| d S )Nz min_max not supported in pyarrowr]   r6  )r   r   r   r`   ra   rb   rc   rd   r9   r/   r0   r7   r|   re   test_argreduce_series)rh   rL   r   r   r   r   r<   ri   r   r   r<  K  s$   z%TestBaseMethods.test_argreduce_series	ascendingc                    sV   |j j}tj|r!|s!ts!|jtj	j
tjd| d| d t ||| d S )N!unique has no pyarrow kernel for  when ascending=r]   )r   r   r/   r0   r7   r   r`   ra   rb   rc   rd   r|   re   test_sort_values)rh   rJ   r=  sort_by_keyr   r<   ri   r   r   r@  n  s   	z TestBaseMethods.test_sort_valuesc                    sL   |j j}tj|r|jtjj	tj
d| d| d t || d S )N,dictionary_encode has no pyarrow kernel for r?  r]   )r   r   r/   r0   r7   r`   ra   rb   rc   rd   r|   re   test_sort_values_frame)rh   rJ   r=  r   r<   ri   r   r   rC  }  s   	z&TestBaseMethods.test_sort_values_frameboxc                 C   s   | S r   r   xr   r   r   <lambda>  s    zTestBaseMethods.<lambda>methodc                 C   s   |   S r   )uniquerE  r   r   r   rG    s    c                    sN   |j j}tj|rts|jtj	j
tjd| dd t ||| d S )Nr>  r   r]   )r   r   r/   r0   r7   r   r`   ra   rb   rc   rd   r|   re   test_unique)rh   r=   rD  rH  r   r<   ri   r   r   rJ    s   
zTestBaseMethods.test_uniquena_sentinelr#   c                    sp   |j j}tj|r|jtjj	tj
d| d ntj|r/|jtjj	| dd t || d S )NrB  r]   r   rZ   )r   r   r/   r0   r7   r`   ra   rb   rc   rd   r|   r1   re   test_factorizerh   rF   rK  r   r<   ri   r   r   rL    s   zTestBaseMethods.test_factorizec                    r0  NrB  r]   )r   r   r/   r0   r7   r`   ra   rb   rc   rd   r|   re   test_factorize_equivalencerM  ri   r   r   rO    r2  z*TestBaseMethods.test_factorize_equivalencec                    r3  rN  )r   r   r/   r0   r7   r`   ra   rb   rc   rd   r|   re   test_factorize_emptyrg   ri   r   r   rP    r5  z$TestBaseMethods.test_factorize_emptyc                    L   |j j}t|dd }tr|dvr|jtjjd| d t	 
| d S r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_shift_fill_valuerh   r=   r   r<   r_   ri   r   r   rR       z%TestBaseMethods.test_shift_fill_valuerepeatsr   r%   )r!   r%      c                    s`   |j j}t|dd }tr%|dvr%|dkr%|jtjjd| d| d t	 
|||| d S )Nr_   r   r   r   z when repeats=rZ   )r   r   r   r   r`   ra   rb   rc   rd   re   test_repeat)rh   r=   rU  	as_series	use_numpyr   r<   r_   ri   r   r   rW    s   zTestBaseMethods.test_repeatc                    rQ  r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_insertrS  ri   r   r   rZ    rT  zTestBaseMethods.test_insertc                    rQ  r   )r   r   r   r   r`   ra   rb   rc   rd   re   test_combine_firstrS  ri   r   r   r[    rT  z"TestBaseMethods.test_combine_firstz<result dtype pyarrow[bool] better than expected dtype objectrZ   c                    r   r   )re   test_combine_le)rh   data_repeatedri   r   r   r\    s   zTestBaseMethods.test_combine_lec                    sN   t |djj}tj|r|jtj	j
t| d| d t | d S )Nr!   z cannot be added to r]   )nextr   r   r/   r0   r~   r`   ra   rb   rc   rd   r   re   test_combine_add)rh   r]  r   r<   ri   r   r   r_    s   z TestBaseMethods.test_combine_addc                    sB   |j j}tj|r|jtjj	| dd t
 || d S )Nr   rZ   )r   r   r/   r0   r1   r`   ra   rb   rc   rd   re   test_searchsorted)rh   rJ   rX  r   r<   ri   r   r   r`    s   z!TestBaseMethods.test_searchsortedc                    sH   |j j}tj|r|jtjj	tj
d| d t ||| d S )Nz Unsupported cast from double to r]   )r   r   r/   r0   r~   r`   ra   rb   rc   rd   r|   re   test_where_series)rh   r=   rQ   as_framer   r<   ri   r   r   ra    s   z!TestBaseMethods.test_where_series)"rU   rV   rW   rb   rc   r   r.  r1  r4  rd   r   r9   r7  r$  nanr<  r@  rC  r:   r   rI  rJ  rL  rO  rP  rR  rW  rZ  r[  r\  r_  r`  ra  r   r   r   ri   r   r,    sb    


r,  c                       sH   e Zd ZeZdd Z fddZ fddZdd Z fd	d
Z	  Z
S )TestBaseArithmeticOpsc           
      C   s   t j| |||}d}t|tjr'd}|jd d df }|jd d df j}n|}|j}t	|j
|j}t|j
|}	|rKtj|	|j|jd}|S t|	}|S )NFTr   )indexcolumns)r   BaseArithmeticOpsTests_combinero   r:   	DataFramer   r   r/   r;   _valuesr   r   r?   re  rf  r   )
rh   objotheropr   	was_frameexpected_dataoriginal_dtyper   pd_arrayr   r   r   _patch_combine  s"   

z$TestBaseArithmeticOps._patch_combinec                    sb  |j j}t o|dv rtj|p|dv otj|}|dv s!tr%t| _	n|r+d | _	ntj
|s>tj|s>|s>tj| _	nd | _	|dkrbtj
|sQtj|rbtsb|jtjjd| d n4|rw|jtjjt| d| dd	 n|d
v rtj
|stj|rts|jtjjtjdd	 |dkrtj|r|td| j t || d S N__add____radd____sub____rsub__>   __mod____rmod____rpow__<GH 29997: 1**pandas.NA == 1 while 1**pyarrow.NA == NULL for rZ     not supported betweenpd.NA and  Python scalarr]   >   __rtruediv____rfloordiv__divide by 0__floordiv__rh  )r   r   r   r/   r0   r7   r~   r   r9   series_scalar_excr2   rN   r|   r`   ra   rb   rc   rd   r   r}   setattrrd  rr  re   test_arith_series_with_scalarrh   r=   all_arithmetic_operatorsr   monkeypatchr<   arrow_temporal_supportedri   r   r   r  4  s~   









z3TestBaseArithmeticOps.test_arith_series_with_scalarc                    s^  |j j}t o|dv rtj|p|dv otj|}|dv s!tr%t| _	n|r+d | _	ntj
|s<tj|s<tj| _	nd | _	|dkr`tj
|sOtj|r`ts`|jtjjd| d n4|ru|jtjjt| d| dd	 n|d
v rtj
|stj|rts|jtjjtjdd	 |dkrtj|r|td| j t || d S rs  )r   r   r   r/   r0   r7   r~   r   r9   frame_scalar_excr2   rN   r|   r`   ra   rb   rc   rd   r   r}   r  rd  rr  re   test_arith_frame_with_scalarr  ri   r   r   r  z  st   







z2TestBaseArithmeticOps.test_arith_frame_with_scalarc           
      C   s  |j j}t o|dv rtj|p|dv otj|}|dv s!tr%t| _	n|r+d | _	ntj
|s<tj|s<tj| _	nd | _	|dkr`tj
|sOtj|r`ts`|jtjjd| d nQ|dv r}tj|r}ts}|jtjjtjd| d n4|r|jtjjt| d	| d
d n|dv rtj
|stj|rts|jtjjtjdd |}t|}ttj|jd gt| |j d}	tj
|stj|r|dkr|td| j | j|||	| j	d d S )Nrt  rw  >   rz  r{  r|  r}  rZ   zJImplemented pyarrow.compute.subtract_checked which raises on overflow for r]   r~  r  >   r  r  r  r   r-   __truediv__rh  )exc)r   r   r   r/   r0   r7   r~   r   r9   series_array_excr2   rN   r|   r`   ra   rb   rc   rd   r4   r}   r   r:   r   r;   r   lenr  rd  rr  check_opname)
rh   r=   r  r   r  r<   r  r   r   rl  r   r   r   test_arith_series_with_array  s   




	
	



&
z2TestBaseArithmeticOps.test_arith_series_with_arrayc                    s   |j j}tj|stj|ststj|rtr*|j	
tjjtd| d n|dr?|j	
tjjtjd| d t | d S )Nz add_checked not implemented for r]   int8zraises on overflow for )r   r   r/   r0   rN   r2   r   r7   r   r`   ra   rb   rc   rd   r9   r{   r}   re   $test_add_series_with_extension_arrayrg   ri   r   r   r    s2   



z:TestBaseArithmeticOps.test_add_series_with_extension_array)rU   rV   rW   r9   
divmod_excrr  r  r  r  r  r   r   r   ri   r   rd    s    FBYrd  c                       s,   e Zd Z fddZdd Zdd Z  ZS )TestBaseComparisonOpsc                    s4   t j|j dd}t j||g|R i | d S )Nr  r-   )r:   r   rj  to_numpyre   assert_series_equal)rh   leftrightargskwargsri   r   r   r  0  s    z)TestBaseComparisonOps.assert_series_equalc              
   C   s  |j j}t|}ttj|jd gt| |j d}|jdv rL|||}|d |u s.J |d |u s6J |||}	||	d< ||	d< | 	||	 d S d }
z|||}W n t
yi } z|}
W Y d }~nd }~ww |
d u rtj|r|d |u s|J |d |u sJ |ddgjdd}|ddg}|ddg}|||}	| 	||	 d S tt|
 ||| W d    d S 1 sw   Y  d S )Nr   r-   )eqne   a   T)drop)r   r   r:   r   r;   r   r  rU   combiner  	Exceptionr/   r0   r~   r  reset_indexrb   r^   r?   )rh   r=   comparison_oprQ   r   r<   r   rl  rr   r   r  errr   r   r   test_compare_array6  s<   
&

"z(TestBaseComparisonOps.test_compare_arrayc                 C   s@   t jtdd ||t  W d    d S 1 sw   Y  d S )Nz'.* not implemented for <class 'object'>rt   )rb   r^   r9   object)rh   r=   r  r   r   r   test_invalid_other_comp^  s
   "z-TestBaseComparisonOps.test_invalid_other_comp)rU   rV   rW   r  r  r  r   r   r   ri   r   r  /  s    (r  c                   C   s>   t jtdd td W d    d S 1 sw   Y  d S )NzPassing pyarrow typert   ztimestamp[s, tz=UTC][pyarrow])rb   r^   r9   r   r   r   r   r   r   Ftest_arrowdtype_construct_from_string_type_with_unsupported_parametersf  s   "r  z2quantile only supported for pyarrow version >= 4.0r]   interpolation)linearlowerhighernearestmidpointquantiler    c                 C   s   | j j}tj|s tj|s |jtj	j
tjd| d | g d} t| }|j||d}|dkrA|| d ks?J d S |d}tj| ddgdddgd}t|| d S )	Nz&quantile not supported by pyarrow for r]   )r   r   r   )qr  r    r   zfloat64[pyarrow])re  )r   r   r/   r0   rN   r2   r`   ra   rb   rc   rd   r|   taker:   r   r  r   rm   r  )r=   r  r  r   r<   r   rr   r   r   r   r   test_quantilek  s$   


r  z.mode only supported for pyarrow version >= 6.0r/  TFztake_idx, exp_idx)r   r   r%   r%   r   r   r   )r   r   r   r%   r   r   
multi_modesingle_moder  c           
      C   s   | j j}tj|r|jtjj	tj
d| d ntj|r4d|jjv r4tr4|jtjj	dd | |}t|}|j|d}t| |}	t||	 d S )Nz"mode not supported by pyarrow for r]   r  z1https://issues.apache.org/jira/browse/ARROW-17096rZ   )r/  )r   r   r/   r0   r~   r`   ra   rb   rc   rd   r|   r1   r  r   r  r:   r   moderm   r  )
rF   r/  take_idxexp_idxr   r<   r=   r   rr   r   r   r   r   	test_mode  s.   


r  )X__doc__r   r   r   r   numpyr$  rb   pandas.compatr   r   r   r	   r
   r   r   r   r   pandas.errorsr   pandasr:   pandas._testing_testingrm   pandas.tests.extensionr   importorskipr/   pandas.core.arrays.arrow.arrayr   pandas.core.arrays.arrow.dtyper   fixtureALL_PYARROW_DTYPESstrr   r=   rA   rB   rF   rJ   rL   rO   rQ   BaseCastingTestsrS   BaseConstructorsTestsrY   BaseGetitemTestsr   BaseNumericReduceTestsr   BaseBooleanReduceTestsr   BaseGroupbyTestsr   BaseDtypeTestsr   BaseIndexTestsr   BaseInterfaceTestsr   BaseMissingTestsr   BasePrintingTestsr   BaseReshapingTestsr   BaseSetitemTestsr   BaseParsingTestsr%  BaseUnaryOpsTestsr*  BaseMethodsTestsr,  rg  rd  BaseComparisonOpsTestsr  r  rc   rd   r9   r   r  r  r   r   r   r   <module>   s    ,

/


.


	
oDB^=V x    7