U
    >vfq                    @   s
  d Z ddlmZmZmZmZ ddlmZ ddlmZm	Z	 ddl
Z
ddlZddlZddlZddlZddlmZ ddlmZmZmZmZmZmZ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$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0 ej1dddZ2ddl3m4Z4 ddl5m6Z6 ej7e$j8e9ddd Z:ej7dd Z;ej7dd Z<ej7ddgddd Z=ej7dd Z>ej7dd  Z?ej7d!d" Z@ej7d#d$ ZAej7d%d& ZBG d'd( d(e0jCZDG d)d* d*e0jEZFG d+d, d,e0jGZHG d-d. d.e0jIZJG d/d0 d0e0jKZLG d1d2 d2e0jMZNG d3d4 d4e0jOZPG d5d6 d6e0jQZRG d7d8 d8e0jSZTG d9d: d:e0jUZVG d;d< d<e0jWZXG d=d> d>e0jYZZG d?d@ d@e0j[Z\G dAdB dBe0j]Z^G dCdD dDe0j_Z`G dEdF dFe0jaZbG dGdH dHe0jcZdG dIdJ dJe0jeZfG dKdL dLe0jgZhG dMdN dNZidOdP ZjdQdR ZkejlmdSdTdUdVdWdXgejlmdYdZdZdZggd[d\ Znejljmd]ddd^d^d_d_gdd_ggdddd^d_d_gdgggd`dagdbdcdd Zodedf Zpejlmdge2q erge2qdherge2s erge2t e9ge2ue2v ewge2xe2v ewge2ye2z e2v ewge2{die2| fdje2z fge}ge2~e2v e2v egg	dkdl Zdmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz Zd{d| Zd}d~ Zdd Zdd Zdd Zejlmdej&ejfdgdd Zdd Zdd Zdd Zejljedddd Zejljedddd Zdd Zdd Zdd Zejlmdddgdd Zdd Zejlmdddgddgddggdd Zdd Zejlmdddddddggddddddggddddddggddddddggddddddgggdd Zdd Zejlmddddddggdddddggdddddggdddddgggdd Zejlmddedgde9gddgddggddƄ ZejlmdddddddggddddddggddddddgggddЄ Zdd҄ Zejljededԍddք Zejlmddddddggdddddggdddddggdddddggdddddggdddddgggddل Zejlmddddddggdddddggdddddggdddddggdddddggdddddgggdd܄ Zejlmddddddge2 gdddd^dge2v ggdd Zdd Zejlmdddddggddddggd^dddggddddggd_dddgggdd Zejljdedԍdd Zejlmddd^dddggdd^dddggdddddgggdd Zejlmddd^dddggdd^dddggdd^dddgggdd Zejlmddddgdddgdddgdddgdddgdddgdd dgdd dgdddgdddgdddgdddgdddgd	ddgd
ddgdddgdddgdddggdd ZejlmdddgddgddgdUdgddgddggdd Zdd  Zejlmd!d"dd#gd"dɐd$gd%dd&gd%dɐd'gd(dd)gd(dɐd*ggd+d, Zejlmd-d.dgd/d0 Zejlmd-d1dgd2d3 Zejlmd4d5d6gejlmd7d8d9gd:d;ggd<d= Zejlmdddgd>d? Zejlmd@dAdBgejlmdCddgdd_ggdDdE ZejlmdFdGdHgdIdJ ZejlmdCddgdd_ggdKdL ZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zejlmd[d\d]d^d_gd`da Zdbdc Zejlmdddedfgdgd^gdhdgdidgdjdgdkd^gdld^gdmdgdnd_gejÐdodejljeedpdqdrdsdtgdudgdvdwgdxdgdydzgd{edfdd^gd|edd_dzdtggd}d~ Zejlmd[d]d\gdd Zejlmddddgdd ZƐdd Zǐdd Zejlmd@dddgdd Zejlmd@dddgdd Zejljeddejlmddddddddgejlmd@dddgdd Zːdd Zejlmdddgdd Z͐dd Zΐdd Zejlmd[d]d\gdd Zejlmddedfdސddސdgde!ѐdggdd Zejlmdddgdd Zejlmdddgdd ZԐdd Zejlmdddge2s fddge2t fgdd Zejlmde$je$j dd Zejlmde$jڡddÄ Zejlmde$jܡdĐdń Zejljede2jdԍdǐdȄ Zd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	timedelta)Decimal)BytesIOStringION)lib)PY311is_ci_environmentis_platform_windowspa_version_under7p0pa_version_under8p0pa_version_under9p0pa_version_under11p0)PerformanceWarning)is_any_int_dtype)CategoricalDtypeType)
no_default)is_bool_dtypeis_float_dtypeis_integer_dtypeis_numeric_dtypeis_signed_integer_dtypeis_string_dtypeis_unsigned_integer_dtype)basepyarrowz7.0.0)Z
minversion)ArrowExtensionArray)
ArrowDtype)paramsidsc                 C   s   t | jdS )N)pyarrow_dtype)r   param)request r%   E/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/extension/test_arrow.pydtypeC   s    r'   c              	   C   s|  | j }tj|rBd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|rddgd d g ddgd  d g ddg }ntj|rddgd d g ddgd  d g ddg }nxtj|rLtdtdgd d g tdtdgd  d g tdtdg }n"t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|r<t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 }n2tj|rtdtddgd d g tdtdgd  d g tdtdg }ntj|rt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j|r.dd gd d g dd!gd  d g d"d#g }n@tj|rjd$d%gd d g d&d'gd  d g d(d)g }nttj|| d*S )+NTF   ,         ?        g       g            ?g     X@   r   c      10.0z-2.0z-1.0z0.5z33.123            i
      ab2!>   a   b   1   2   !   >r'   )r"   patypes
is_booleanis_floatingis_signed_integeris_unsigned_integer
is_decimalr   is_dater   is_timestampr   is_durationr   is_timer   	is_string	is_binaryNotImplementedErrorpdarray)r'   pa_dtypedatar%   r%   r&   rX   H   s    0000*..rX   c                 C   s   t | jd| d g| jdS )zLength-2 array with [NA, Valid]Nr   rF   type_from_sequencer'   )rX   r%   r%   r&   data_missing   s    r\   )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.
    rX   r\   N)r#   )r$   rX   r\   r%   r%   r&   all_data   s    

r]   c              	   C   s  | j }tj|r"d}d}d}n~tj|r>d}d}d}nbtj|rZd}d}d}nFtj|rvd}d}d	}n*tj|rtd
dd}tddd}tddd}ntj	|rt
d
dddddd}t
ddd}t
dddd}ntj|rtd}td}tdd}ntj|r<tdd}tdd}tdd}ndtj|rXd}d}d}nHtj|rtd}d}d}n,tj|rtd}td}t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-   r9   r5   r6   r7   i  r4   r8   r(   r;   r<   cr@   rA      cz-1.1r3   z1.1NrF   )r"   rG   rH   rI   rJ   rK   rL   rN   r   rO   r   rP   r   rQ   r   rR   rS   rM   r   rT   rU   rV   )r'   rW   ABCr%   r%   r&   data_for_grouping   s^    	


rc   c                 C   s&   t | j| d | d | d g| jdS )zn
    Length-3 array with a known sort order.

    This should be three items [B, C, A] with
    A < B < C
    r      r(   rF   rY   rc   r%   r%   r&   data_for_sorting   s    rf   c                 C   s&   t | j| d | d | d g| jdS )z{
    Length-3 array with a known sort order.

    This should be three items [B, NA, A] with
    A < B and NA missing.
    r   r1   r(   rF   rY   re   r%   r%   r&   data_missing_for_sorting   s    rg   c                 C   s:   | j j}tj|s tj|r6tjdgd | j dS | S )z3Length-100 array in which all the elements are two.r1   d   rF   )r'   r"   rG   rH   
is_integerrJ   rU   rV   rX   rW   r%   r%   r&   data_for_twos   s    rk   c                   C   s   t jS )z6The scalar missing value for this type. Default 'None')rU   NAr%   r%   r%   r&   na_value   s    rm   c                       s   e Zd Z fddZ  ZS )TestBaseCastingc                    sB   |j j}tj|r2|jtjj	d| dd t
 | d S )NzFor z .astype(str) decodes.reason)r'   r"   rG   rH   rS   node
add_markerpytestmarkxfailsupertest_astype_strselfrX   r$   rW   	__class__r%   r&   rw      s    
zTestBaseCasting.test_astype_str)__name__
__module____qualname__rw   __classcell__r%   r%   rz   r&   rn      s   rn   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	TestConstructorsc                    sb   |j j}tj|s tj|rRtj|r2d}n
d| }|jtj	j
|d t | d S )Nz1ArrowDtype(pa.string()) != StringDtype('pyarrow')$pyarrow.type_for_alias cannot infer ro   )r'   r"   rG   rH   rR   rM   rq   rr   rs   rt   ru   rv   test_from_dtype)ry   rX   r$   rW   rp   rz   r%   r&   r   
  s    
z TestConstructors.test_from_dtypec                 C   sd   t ||j}t|| t|jtjs.tt ||j	 }t|| t|jtjs`td S N)
rZ   r[   _datatmassert_extension_array_equal
isinstancerG   ZChunkedArrayAssertionErrorcombine_chunksry   rX   resultr%   r%   r&   test_from_sequence_pa_array  s    z,TestConstructors.test_from_sequence_pa_arrayc              	   C   s2   t jtdd tjdgt d W 5 Q R X d S )NzConverting strings tomatchz12-1rF   )rs   raisesrT   r   _from_sequence_of_stringsrG   Zmonth_day_nano_interval)ry   r$   r%   r%   r&   *test_from_sequence_pa_array_notimplemented$  s
     z;TestConstructors.test_from_sequence_pa_array_notimplementedc                 C   s  |j j}tj|r:|dr:ts:|jt	j
jdd nztrxtj|sVtj|rx|jt	j
jtjd| d n<tj|r|jd k	rt rt r|jt	j
jtjdd |jt }t|j||j d}t|| | }t|j||j d}t|| d S )Nz
time64[ns]z&Nanosecond time parsing not supported.ro   z pyarrow doesn't support parsing r   rp   _TODO: Set ARROW_TIMEZONE_DATABASE environment variable on CI to path to the tzdata for pyarrow.rF   )r'   r"   rG   rH   Z	is_time64equalsr
   rq   rr   rs   rt   ru   r   rP   rM   ArrowNotImplementedErrorrO   tzr   r   ArrowInvalidr   caststringrZ   r   r   r   r   )ry   rX   r$   rW   Zpa_arrayr   r%   r%   r&   &test_from_sequence_of_strings_pa_array*  s@    

	z7TestConstructors.test_from_sequence_of_strings_pa_array)r|   r}   r~   r   r   r   r   r   r%   r%   rz   r&   r   	  s   r   c                   @   s   e Zd ZdS )TestGetitemTestsNr|   r}   r~   r%   r%   r%   r&   r   O  s   r   c                   @   sH   e Zd Zdd Zejdddgdd Zejdddgdd	 Zd
S )TestBaseAccumulateTestsc                 C   sd   t |||d}|jjdkr0|d}|d}|d}t |d||d}| j||dd d S )Nskipnamint64[pyarrow]Float64F)Zcheck_dtype)getattrr'   kindastypeassert_series_equal)ry   serop_namer   r   expectedr%   r%   r&   check_accumulateT  s    


z(TestBaseAccumulateTests.check_accumulater   TFc              	   C   sz   |j j}tj|s,tj|s,tj|rB|dkrBtsBt	d |}t
|}tt t|||d W 5 Q R X d S )Ncumsumz1These work, are tested by test_accumulate_series.r   )r'   r"   rG   rH   ri   rJ   rP   r   rs   skiprU   Seriesr   rT   r   )ry   rX   all_numeric_accumulationsr   pa_typer   r   r%   r%   r&   test_accumulate_series_raises`  s     


	

z5TestBaseAccumulateTests.test_accumulate_series_raisesc           	      C   s$  |j j}|}t|}d}tj|s2tj|r@|dkr~d}n>tj|rftj	|sf|dkr~d}ntj	|r~|dkr~d}|rt
d |dkstr|jjjrt
d |jt
jj| dtd	 nF|dkrtj|stj|r|jt
jj| d
| td	 | ||| d S )NF)r   cumprodTr   z]These should *not* work, we test in test_accumulate_series_raises that these correctly raise.r   zpyarrow xfail slowz not implementedrp   r   z not implemented for )r'   r"   rU   r   rG   rH   rR   rS   is_temporalrP   rs   r   r   configoptionZ	skip_slowrq   rr   rt   ru   rT   rI   rM   r   )	ry   rX   r   r   r$   r   r   r   Zdo_skipr%   r%   r&   test_accumulate_seriest  sL    





z.TestBaseAccumulateTests.test_accumulate_seriesN)	r|   r}   r~   r   rs   rt   parametrizer   r   r%   r%   r%   r&   r   S  s
   
r   c                       sR   e Zd Zdd Zejdddg fddZejdd	d
dgdd Z  Z	S )TestBaseNumericReducec                 C   s   |j j}|dkrt|| }nt|||d}tj|rFtd n"tj|s^tj	|rh|
d}|dkr~t|| }nt|||d}t|| d S )Ncountr   zApandas boolean data with NA does not fully support all reductionsr   )r'   r"   r   rG   rH   rI   rs   r   ri   rJ   r   r   Zassert_almost_equal)ry   r   r   r   rW   r   r   r%   r%   r&   check_reduce  s    
z"TestBaseNumericReduce.check_reducer   TFc              	      sf  |j j}|}t|}d}tj|rJ|dkrJtj|rD|dkrDqnd}n$tj|sbtj	|rn|dkrnd}|sd| d}	t
jt|	d t|||d	 W 5 Q R X d S t
jjt| d
tj d| d}
|dkr|j|
 nn|dkrtrtj|r|j|
 nB|dkr.tr.|j|
 n$tj|rR|dkrR|j|
 t ||| d S )NT)sumvarskewkurtprod)r   F)	r   meanmedianr   stdsemr   r   r   zdoes not support reduction ''r   r    is not implemented in pyarrow= for r   >   r   r   >   r   r   r   r   >   r   r   r   r   )r'   r"   rU   r   rG   rH   r   rP   rR   rS   rs   r   	TypeErrorr   rt   ru   __version__rq   rr   r   rM   r   rI   rv   test_reduce_series)ry   rX   Zall_numeric_reductionsr   r$   rW   opnamer   Zshould_workmsg
xfail_markrz   r%   r&   r     sL    



z(TestBaseNumericReduce.test_reduce_seriestypint64Zuint64float64c                 C   s,   t jddg| dd }|dks(td S )Nr-   r1   	[pyarrow]rF         ?)rU   r   r   r   )ry   r   r   r%   r%   r&   test_median_not_approximate   s    z1TestBaseNumericReduce.test_median_not_approximate)
r|   r}   r~   r   rs   rt   r   r   r   r   r%   r%   rz   r&   r     s
   F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	|sBtj
|rN|j| |}t|}	tj|rtj|stjtdd t|	||d W 5 Q R X d S t|	||d}
|
|dkkstd S )Nr   r   r   zdoes not support reductionr   r   any)r'   r"   rs   rt   ru   r   rG   r   rH   rR   rS   rq   rr   rU   r   r   rP   r   r   r   )ry   rX   all_boolean_reductionsr   rm   r$   rW   r   r   r   r   r%   r%   r&   r     s    
z(TestBaseBooleanReduce.test_reduce_seriesN)r|   r}   r~   rs   rt   r   r   r%   r%   r%   r&   r     s   r   c                       sR   e Zd Z fddZ fddZejdddg fdd	Z fd
dZ	  Z
S )TestBaseGroupbyc                    s@   |j j}tj|r0|jtjj	| dd t
 | d S N" only has 2 unique possible valuesro   )r'   r"   rG   rH   rI   rq   rr   rs   rt   ru   rv   test_groupby_extension_no_sortry   rc   r$   rW   rz   r%   r&   r   +  s    z.TestBaseGroupby.test_groupby_extension_no_sortc                    s@   |j j}tj|r0|jtjj	| dd t
 | d S r   )r'   r"   rG   rH   rI   rq   rr   rs   rt   ru   rv    test_groupby_extension_transformr   rz   r%   r&   r   5  s    z0TestBaseGroupby.test_groupby_extension_transformas_indexTFc                    sD   |j j}tj|r2|jtjj	t
| dd t || d S )Nr   r   )r'   r"   rG   rH   rI   rq   rr   rs   rt   ru   
ValueErrorrv   test_groupby_extension_agg)ry   r   rc   r$   rW   rz   r%   r&   r   ?  s    z*TestBaseGroupby.test_groupby_extension_aggc                    s   t |jrtddddddddg|ddddddddgd}tdg}tjtdd |d		 j
 W 5 Q R X |d	j	d
dj
}t|| nt | d S )Nr-   r1      r(   )r`   ra   rb   rb   zdoes not supportr   r`   T)Znumeric_only)r   r'   rU   	DataFrameZIndexrs   r   r   groupbyr   columnsr   Zassert_index_equalrv   test_in_numeric_groupby)ry   rc   dfr   r   rz   r%   r&   r   K  s    
z'TestBaseGroupby.test_in_numeric_groupby)r|   r}   r~   r   r   rs   rt   r   r   r   r   r%   r%   rz   r&   r   *  s
   

r   c                       sT   e Zd Z fddZ fddZ fddZdd Z fd	d
Z fddZ  Z	S )TestBaseDtypec                    s@   |j j}tj|r0tr0|jtj	j
tdd t | d S )Nz,decimal string repr affects numpy comparisonr   )r'   r"   rG   rH   rM   r   rq   rr   rs   rt   ru   r   rv   test_check_dtyperx   rz   r%   r&   r   _  s    zTestBaseDtype.test_check_dtypec              	      sz   |j }tj|r0|jtjjt	d| d tj
|rjd}tjt|d ||j W 5 Q R X d S t | d S )Nr   r   z6string\[pyarrow\] should be constructed by StringDtyper   )r"   rG   rH   rM   rq   rr   rs   rt   ru   rT   rR   r   r   construct_from_stringnamerv   #test_construct_from_string_own_name)ry   r'   r$   rW   r   rz   r%   r&   r   j  s    z1TestBaseDtype.test_construct_from_string_own_namec                    sb   |j }tj|r(t||jr^tn6tj|rR|j	
tjjtd| d t | d S )Nr   r   )r"   rG   rH   rR   rZ   Zis_dtyper   r   rM   rq   rr   rs   rt   ru   rT   rv   test_is_dtype_from_namery   r'   r$   rW   rz   r%   r&   r   ~  s    z%TestBaseDtype.test_is_dtype_from_namec              	   C   s0   d}t jt|d t|d W 5 Q R X d S )Nz*'another_type' must end with '\[pyarrow\]'r   Zanother_type)rs   r   r   rZ   r   )ry   r'   r   r%   r%   r&   .test_construct_from_string_another_type_raises  s    z<TestBaseDtype.test_construct_from_string_another_type_raisesc                    s   |j }tj|sltj|sltj|r>|jdksl|jd k	sltj|rT|jdksltj	|sltj
|r|jtjj| dd t | d S )NnszB does not have associated numpy dtype findable by find_common_typero   )r"   rG   rH   rN   rQ   rO   unitr   rP   rS   rM   rq   rr   rs   rt   ru   rv   test_get_common_dtyper   rz   r%   r&   r     s2    




	
z#TestBaseDtype.test_get_common_dtypec                    s0   |j }tj|r t|s,tnt | d S r   )r"   rG   rH   rR   r   r   rv   test_is_not_string_type)ry   r'   rW   rz   r%   r&   r     s    z%TestBaseDtype.test_is_not_string_type)
r|   r}   r~   r   r   r   r   r   r   r   r%   r%   rz   r&   r   ^  s   r   c                   @   s   e Zd ZdS )TestBaseIndexNr   r%   r%   r%   r&   r     s   r   c                       s,   e Zd Zejjddd fddZ  ZS )TestBaseInterfacez6GH 45419: pyarrow.ChunkedArray does not support views.Frp   runc                    s   t  | d S r   )rv   	test_viewry   rX   rz   r%   r&   r     s    zTestBaseInterface.test_view)r|   r}   r~   rs   rt   ru   r   r   r%   r%   rz   r&   r     s
    r   c                       s$   e Zd Zdd Z fddZ  ZS )TestBaseMissingc              	   C   sv   ||    }|d }||}||k	s,t| || tt |jdd}W 5 Q R X ||k	sft| || d S )Nr   Zbackfill)method)isnaZfillnar   r   r   Zassert_produces_warningr   )ry   rX   Zvalidr   r%   r%   r&   test_fillna_no_op_returns_copy  s    
z.TestBaseMissing.test_fillna_no_op_returns_copyc              	      s2   t jt|d k	dd t || W 5 Q R X d S )NF)Zcheck_stacklevel)r   Zmaybe_produces_warningr   rv   test_fillna_series_method)ry   r\   Zfillna_methodrz   r%   r&   r     s      z)TestBaseMissing.test_fillna_series_method)r|   r}   r~   r   r   r   r%   r%   rz   r&   r     s   r   c                   @   s   e Zd ZdS )TestBasePrintingNr   r%   r%   r%   r&   r     s   r   c                       s,   e Zd Zejjddd fddZ  ZS )TestBaseReshaping5GH 45419: pyarrow.ChunkedArray does not support viewsFr   c                    s   t  | d S r   )rv   test_transposer   rz   r%   r&   r     s    z TestBaseReshaping.test_transpose)r|   r}   r~   rs   rt   ru   r   r   r%   r%   rz   r&   r     s
    r   c                       s,   e Zd Zejjddd fddZ  ZS )TestBaseSetitemr   Fr   c                    s   t  | d S r   )rv   test_setitem_preserves_viewsr   rz   r%   r&   r    s    z,TestBaseSetitem.test_setitem_preserves_views)r|   r}   r~   rs   rt   ru   r  r   r%   r%   rz   r&   r     s
    r   c                   @   s8   e Zd Zejddegejdddgdd ZdS )	TestBaseParsingdtype_backendr   enginer^   pythonc           
      C   s<  |j j}tj|r6|jtjj	t
d| dd ntj|rf|jdkrf|jtjj	tdd nXtj|r|jtjj	dd n4tj|r|dkr|d	kr|jtjj	td
d tdtj|t|j di}|jdtjd}tj|rt|}nt|}tj|dt|j i||d}|}	| ||	 d S )NzParameterized types z not supported.r   )usr   z1https://github.com/pandas-dev/pandas/issues/49767z)CSV parsers don't correctly handle binaryro   r   r  z)Invalid type for timedelta scalar: NATypeZ
with_dtyperF   F)indexZna_rep)r'   r  r  )r'   r"   rG   rH   rM   rq   rr   rs   rt   ru   rT   rO   r   r   rS   rP   r   rU   r   r   strZto_csvnpnanr   r   Zread_csvassert_frame_equal)
ry   r  rX   r  r$   rW   r   Z
csv_outputr   r   r%   r%   r&   test_EA_types  sX    


zTestBaseParsing.test_EA_typesN)r|   r}   r~   rs   rt   r   r   r  r%   r%   r%   r&   r    s   r  c                       s   e Zd Z fddZ  ZS )TestBaseUnaryOpsc                    sD   |j j}tj|s4|jtjj	tj
d| d t | d S )Nz$pyarrow.compute.invert does support r   )r'   r"   rG   rH   rI   rq   rr   rs   rt   ru   r   rv   test_invertrx   rz   r%   r&   r    s    zTestBaseUnaryOps.test_invert)r|   r}   r~   r  r   r%   r%   rz   r&   r    s   r  c                       s   e Zd Zejdddg fddZdd Zdd	 Z 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 fddZdZ fddZ fddZdd  Z  ZS )!TestBaseMethodsperiodsr-   r.   c              	      sV   |j j}tj|rD|dkrD|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"   rG   rH   rL   rq   rr   rs   rt   ru   r   rv   	test_diff)ry   rX   r  r$   rW   rz   r%   r&   r  %  s    zTestBaseMethods.test_diffc                 C   s.   |d d }|  }|jtt ks*td S )Nr9   )value_countsr'   r   rG   r   r   r   r%   r%   r&   'test_value_counts_returns_pyarrow_int643  s    z7TestBaseMethods.test_value_counts_returns_pyarrow_int64c                 C   s   |d d   }t||   }tj||jd}|jdd }tjdt	| gt	| |j
dd}|d}| || d S )	Nr9   rF   T)	normalizer-   Z
proportion)r  r   zdouble[pyarrow])uniquer	  rV   r   rU   r   r'   r  Z
sort_indexlenr  r   r   )ry   rX   r$   valuesr   r   r   r%   r%   r&    test_value_counts_with_normalize9  s      
z0TestBaseMethods.test_value_counts_with_normalizec                    sv   |j j}tj|r2|jtjj	| dd n0tj
|rbtrb|jtjj	d| tjd t ||| d S )Nr   ro   No pyarrow kernel for r   )r'   r"   rG   rH   rI   rq   rr   rs   rt   ru   rM   r   r   rv   test_argmin_argmax)ry   rf   rg   rm   r$   rW   rz   r%   r&   r  G  s    z"TestBaseMethods.test_argmin_argmaxzop_name, skipna, expected)idxmaxTr   )idxminTr1   )argmaxTr   )argminTr1   r  Fr  )r  Fr/   )r  Fr/   c                    sR   |j j}tj|r<tr<|r<|jtj	j
d| tjd t |||| d S )Nr  r   )r'   r"   rG   rH   rM   r   rq   rr   rs   rt   ru   r   rv   test_argreduce_series)ry   rg   r   r   r   r$   rW   rz   r%   r&   r  Z  s       z%TestBaseMethods.test_argreduce_seriesc                    s@   |j j}tj|r0|jtjj	| dd t
 | d S r   )r'   r"   rG   rH   rI   rq   rr   rs   rt   ru   rv   test_factorizer   rz   r%   r&   r   v  s    zTestBaseMethods.test_factorizezbool[pyarrow]c           	   	      s   t |djj}tj|rPtjjt	| d| d}|j
| t | n`tj|r|d\}}t|}t|}tt	 ||dd  W 5 Q R X nt | d S )Nr-   z cannot be added to r   r1   c                 S   s   | | S r   r%   )x1Zx2r%   r%   r&   <lambda>      z2TestBaseMethods.test_combine_add.<locals>.<lambda>)nextr'   r"   rG   rH   rP   rs   rt   ru   r   rq   rr   rv   test_combine_addr   rU   r   r   combine)	ry   Zdata_repeatedr$   rW   rt   Z
orig_data1Z
orig_data2s1s2rz   r%   r&   r%    s    

z TestBaseMethods.test_combine_addc                    sB   |j j}tj|r0|jtjj	| dd t
 || d S r   )r'   r"   rG   rH   rI   rq   rr   rs   rt   ru   rv   test_searchsorted)ry   rf   	as_seriesr$   rW   rz   r%   r&   r)    s    z!TestBaseMethods.test_searchsortedc                 C   s   t |t |std S r   )rU   r   r   r   r   r%   r%   r&   test_basic_equals  s    z!TestBaseMethods.test_basic_equals)r|   r}   r~   rs   rt   r   r  r  r  r  r	  r
  r  r   Z_combine_le_expected_dtyper%  r)  r+  r   r%   r%   rz   r&   r  $  s.   



r  c                       st   e Zd ZeZedd Zdd Zdd Zdd Z	d	d
 Z
dd Z fddZ fddZdd Z fddZ  ZS )TestBaseArithmeticOpsc                 K   s   t |tjr:|jd d df jj}|jd d df jj}n|jj}|jj}tj|sbtj|rv|	d}|	d}t
j||f| d S )Nr   zfloat[pyarrow])r   rU   r   ilocr'   r"   rG   rH   rM   r   r   assert_equal)clsleftrightkwargsZleft_pa_typeZright_pa_typer%   r%   r&   r.    s    

z"TestBaseArithmeticOps.assert_equalc                 C   s4   | d}|dkrdd S |dkr*dd S t|S )N_Zrtruedivc                 S   s   t || S r   )r	  dividexyr%   r%   r&   r"    r#  z8TestBaseArithmeticOps.get_op_from_name.<locals>.<lambda>Z	rfloordivc                 S   s   t || S r   )r	  Zfloor_divider5  r%   r%   r&   r"    r#  )stripr   get_op_from_name)ry   r   Zshort_opnamer%   r%   r&   r9    s    
z&TestBaseArithmeticOps.get_op_from_namec                 C   s   t j| |||}d}t|tjrNd}|jd d df }|jd d df j}n
|}|j}t	|j
}tj|jr|jj}	t|ttfkr|	dkrd}	|d|	 d}n||j}t|j
|}
|rtj|
|j|jd}n
t|
}|S )	NFTr   )smsr  z	duration[])r  r   )r   BaseArithmeticOpsTests_combiner   rU   r   r-  r'   rG   rV   Z_valuesrH   rP   rZ   r"   r   r   r   r   r  r   r   )ry   objotheropr   Z	was_frameZexpected_dataZoriginal_dtypeZpa_expectedr   Zpd_expectedr%   r%   r&   _patch_combine  s0      
z$TestBaseArithmeticOps._patch_combinec                 C   s.   t  o,|dkrtj|p,|dko,tj|S )N__add____radd____sub____rsub__)r   rG   rH   rP   r   )ry   r   rW   r%   r%   r&   _is_temporal_supported  s    

z,TestBaseArithmeticOps._is_temporal_supportedc                 C   s~   |  ||}|dkrt}n`|r$d }nV|dkrJtj|sDtj|rJd }n0tj|svtj|svtj|svtj	}nd }|S )N>   __rmod____mod__rC  )
rI  rT   rG   rH   rR   rS   rJ   ri   rM   r   )ry   r   rW   arrow_temporal_supportedexcr%   r%   r&   _get_scalar_exception  s(    




z+TestBaseArithmeticOps._get_scalar_exceptionc                 C   s  d }|  ||}|dkrVtj|s<tj|s<tj|rVtsVtjj	d| d}n|rxtjj	t
| d| dd}n|dkrtj|stj|rtstjj	tjdd}n\|d	krtj|rtstjj	tjdd}n0|d
krtj|rtrtjj	tjdd}|S )N__rpow__z<GH#29997: 1**pandas.NA == 1 while 1**pyarrow.NA == NULL for ro   z  not supported betweenpd.NA and z Python scalarr   __rfloordiv__zdivide by 0__rtruediv____pow__z'Invalid decimal function: power_checked)rI  rG   rH   rJ   ri   rM   r   rs   rt   ru   r   r   )ry   r   rW   rt   rL  r%   r%   r&   _get_arith_xfail_marker	  sj    


	



z-TestBaseArithmeticOps._get_arith_xfail_markerc                    s   |j j}|dkr2tj|s(tj|r2td | ||| _	| 
||}|d k	r`|j| |dkrttj|stj|stj|r|td| j t || d S NrJ  z%Skip testing Python string formatting__floordiv__r>  )r'   r"   rG   rH   rR   rS   rs   r   rN  Zseries_scalar_excrS  rq   rr   ri   rP   rO   setattrr,  rB  rv   test_arith_series_with_scalarry   rX   all_arithmetic_operatorsr$   monkeypatchrW   rt   rz   r%   r&   rW  C  s0    


 



z3TestBaseArithmeticOps.test_arith_series_with_scalarc                    s   |j j}|dkr2tj|s(tj|r2td | ||| _	| 
||}|d k	r`|j| |dkrttj|stj|stj|r|td| j t || d S rT  )r'   r"   rG   rH   rR   rS   rs   r   rN  Zframe_scalar_excrS  rq   rr   ri   rP   rO   rV  r,  rB  rv   test_arith_frame_with_scalarrX  rz   r%   r&   r[  b  s0    


 



z2TestBaseArithmeticOps.test_arith_frame_with_scalarc           
      C   s  |j j}| ||| _|dkrNtj|rNtsN|j	t
jjtjd| d | ||}|d k	rn|j	| |}t|}ttj|jd gt| |j d}	tj|stj|r|dkstj|stj|r|td| j | j|||	| jd d S )	NrF  zJImplemented pyarrow.compute.subtract_checked which raises on overflow for r   r   rF   )__truediv__rQ  r>  )rM  )r'   r"   rN  Zseries_array_excrG   rH   rL   r   rq   rr   rs   rt   ru   r   rS  rU   r   rV   r-  r  rJ   ri   rP   rO   rV  r,  rB  Zcheck_opname)
ry   rX   rY  r$   rZ  rW   rt   r   r   r@  r%   r%   r&   test_arith_series_with_array  sJ     
	

&



	z2TestBaseArithmeticOps.test_arith_series_with_arrayc              	      s   |j j}tj|r^tj|s^t|}tr4d}nd}t	j
t|d ||  W 5 Q R X d S trntj|sztj|r|jt	jjtd| d n*|dr|jt	jjtjd| d t | d S )Nz7Function add_checked has no kernel matching input types9Function 'add_checked' has no kernel matching input typesr   z add_checked not implemented for r   int8zraises on overflow for )r'   r"   rG   rH   r   rP   rU   r   r   rs   r   rT   r   rI   rq   rr   rt   ru   r   r   rv   $test_add_series_with_extension_array)ry   rX   r$   rW   r   r   rz   r%   r&   r`    s4    


z:TestBaseArithmeticOps.test_add_series_with_extension_array)r|   r}   r~   rT   Z
divmod_excclassmethodr.  r9  rB  rI  rN  rS  rW  r[  r]  r`  r   r%   r%   rz   r&   r,    s   

&:2r,  c                   @   s8   e Zd Zdd Zdd Zejddddgd	d
 ZdS )TestBaseComparisonOpsc           
   
   C   s  t |}t t j|jd gt| |jd}|jdkr|||}|d |ksTt|d |ksdt|||}||d< ||d< | 	|| nd }z|||}W n& t
k
r }	 z|	}W 5 d }	~	X Y nX |d kr|||}| 	|| n&tt| ||| W 5 Q R X d S )Nr   rF   )eqne   a   )rU   r   rV   r-  r  r'   r|   r   r&  r   	Exceptionrs   r   rZ   )
ry   rX   comparison_oprm   r   r@  r   r   rM  errr%   r%   r&   test_compare_array  s(    
&

z(TestBaseComparisonOps.test_compare_arrayc              	   C   s*   t jtdd ||t  W 5 Q R X d S )Nz'.* not implemented for <class 'object'>r   )rs   r   rT   object)ry   rX   rh  r%   r%   r&   test_invalid_other_comp  s
     z-TestBaseComparisonOps.test_invalid_other_compmasked_dtypebooleanZInt64r   c           	      C   s   ddd g}t j||d}t j||  dd}|||}|tjtjtjfkrZddd g}n
ddd g}t j|tt	 d}t
|| d S )Nr-   r   rF   r   FT)rU   r   loweroperatorltgtrd  r   rG   bool_r   r   )	ry   rm  rh  rX   
ser_maskedser_par   expr   r%   r%   r&   test_comp_masked_numpy  s    


z,TestBaseComparisonOps.test_comp_masked_numpyN)	r|   r}   r~   rj  rl  rs   rt   r   rw  r%   r%   r%   r&   rb    s    rb  c                   @   s  e Zd ZdZdd Zejdddddgfej	dddgfddddgfe
ddddgfddddgfe
ddddgfgdd	 Zd
d Zejdddddgfej	dddgfddddgfddddgfe
ddddgfe
ddddgfgdd Zdd Zejdddddgfej	dddgfddddgfe
ddddgfe
ddddgfgdd Zejdddgddgddggdd ZdS )TestLogicalOpsz1Various Series and DataFrame logical ops methods.c              
   C   s   t jdgd dgd  d gd  dd}t jddd gd dd}||B }t jdddddd dd d g	dd}t|| ||B }t|| t|t jdgd dgd  d gd  dd t|t jddd gd dd d S NTr   Fboolean[pyarrow]rF   rU   r   r   r   ry   r;   r<   r   r   r%   r%   r&   test_kleene_or  s$    (& zTestLogicalOps.test_kleene_orzother, expectedNTFc                 C   sj   t jddd gdd}||B }t j|dd}t|| ||B }t|| t|t jddd gdd d S NTFrz  rF   r{  ry   r@  r   r;   r   r%   r%   r&   test_kleene_or_scalar)  s     z$TestLogicalOps.test_kleene_or_scalarc              
   C   s   t jdgd dgd  d gd  dd}t jddd gd dd}||@ }t jddd dddd dd g	dd}t|| ||@ }t|| t|t jdgd dgd  d gd  dd t|t jddd gd dd d S ry  r{  r|  r%   r%   r&   test_kleene_andB  s$    (& zTestLogicalOps.test_kleene_andc                 C   sj   t jddd gdd}||@ }t j|dd}t|| ||@ }t|| t|t jddd gdd d S r~  r{  r  r%   r%   r&   test_kleene_and_scalarX  s     z%TestLogicalOps.test_kleene_and_scalarc              
   C   s   t jdgd dgd  d gd  dd}t jddd gd dd}||A }t jddd ddd d d d g	dd}t|| ||A }t|| t|t jdgd dgd  d gd  dd t|t jddd gd dd d S ry  r{  r|  r%   r%   r&   test_kleene_xorq  s$    (& zTestLogicalOps.test_kleene_xorc                 C   sj   t jddd gdd}||A }t j|dd}t|| ||A }t|| t|t jddd gdd d S r~  r{  r  r%   r%   r&   test_kleene_xor_scalar  s     z%TestLogicalOps.test_kleene_xor_scalarzop, exp__and____or____xor__c                 C   s`   ddd g}t j|dd}t j|dd}t|||}t j|dd gtt d}t|| d S )NTFrn  rF   rz  )rU   r   r   r   rG   rs  r   r   )ry   rA  rv  rX   rt  ru  r   r   r%   r%   r&   test_logical_masked_numpy  s    

z(TestLogicalOps.test_logical_masked_numpy)r|   r}   r~   __doc__r}  rs   rt   r   rU   rl   r	  rs  r  r  r  r  r  r  r%   r%   r%   r&   rx    sX   



rx  c               	   C   sr   t jtdd td W 5 Q R X td} ttdd}| |ksJtt jtdd td W 5 Q R X d S )NzPassing pyarrow typer   z#not_a_real_dype[s, tz=UTC][pyarrow]ztimestamp[s, tz=UTC][pyarrow]r:  UTCzdecimal(7, 2)[pyarrow])rs   r   rT   r   r   rG   	timestampr   )r'   r   r%   r%   r&   Ftest_arrowdtype_construct_from_string_type_with_unsupported_parameters  s    
r  c               	   C   s8   d} d}t jt|d tjtd| d W 5 Q R X d S )Nzint64[pyarrow]foobar[pyarrow]zYPassing pyarrow type specific parameters \(\[pyarrow\]\) in the string is not supported\.r   r   rF   )rs   r   rT   rU   r   range)invalidr   r%   r%   r&   ;test_arrowdtype_construct_from_string_type_only_one_pyarrow  s
    r  interpolationZlinearro  higherZnearestZmidpointquantiler,   c              	   C   sN  | j j}| dddg} t| }tj|sFtj|sFtj	|rt
rPd}nd}tjtj|d |j||d W 5 Q R X d S tj|stj|stj|rt
sn2tj| jjrn |jtjjtjd| d | dddg} t| }|j||d}tj|r|dkr|jr>d	|j d
|j d}nd	|j d}||}	|	j||d}
|dkr|jdkr|
jdd}
||
kstn,|jdkr|
j d}
t!"||
| j  d S |dkr|| d ksJtnftj| ddgddgd}
tj|s*tj|s*tj|r>|
d}
|d}t!"||
 d S )Nr   z;Function quantile has no kernel matching input types \(.*\)z=Function 'quantile' has no kernel matching input types \(.*\)r   )qr  z&quantile not supported by pyarrow for r   )ro  r  zM8[z, r<  r,   r  F)warn)r  float64[pyarrow])#r'   r"   takerU   r   rG   rH   rR   rS   rI   r   rs   r   r   r  ri   rJ   rM   r   r   rZ   rq   rr   rt   ru   rO   r   r   r   to_pydatetimer   dtfloorr   r   )rX   r  r  r$   rW   r   r   r   Zpd_dtypeZser_npr   r%   r%   r&   test_quantile  sz    















r  ztake_idx, exp_idxr1   r(   Z
multi_modeZsingle_mode)r!   c                 C   s@   |  |}t|}|jdd}t|  |}t|| d S )NTZdropna)r  rU   r   moder   r   )rc   Ztake_idxZexp_idxrX   r   r   r   r%   r%   r&   test_mode_dropna_true  s
    

r  c                 C   sx   t jd d | d g| jd}|jdd}t jd g| jd}t|| t jd | d g| jd}|jdd}t|| d S )Nr   rF   Fr  )rU   r   r'   r  r   r   )rX   Z	more_nansr   r   r%   r%   r&   test_mode_dropna_false_mode_na&  s    r  zarrow_dtype, expected_type   f1f2c                 C   s   t | j|kstd S r   )r   rZ   r   )arrow_dtypeZexpected_typer%   r%   r&   test_arrow_dtype_type2  s    r  c                  C   sj   t tdddg} t| s ttjj| s2tt	t
t| }||  }|t|  }t|| d S )NTF)r   rG   rV   r   r   rU   corecommonZis_bool_indexerr   r  r  r	  Zasarrayr   r   )rX   r:  r   r   r%   r%   r&   test_is_bool_dtypeF  s    r  c                 C   sJ   | j j}tj|s,tj|s,tj|r:t| sFtnt| rFtd S r   )	r'   r"   rG   rH   rJ   ri   rM   r   r   rX   r   r%   r%   r&   test_is_numeric_dtypeQ  s    


r  c                 C   s2   | j j}tj|r"t| s.tnt| r.td S r   )r'   r"   rG   rH   ri   r   r   r  r%   r%   r&   test_is_integer_dtype^  s    r  c                 C   s2   | j j}tj|r"t| s.tnt| r.td S r   )r'   r"   rG   rH   ri   r   r   r  r%   r%   r&   test_is_any_integer_dtypeg  s    r  c                 C   s2   | j j}tj|r"t| s.tnt| r.td S r   )r'   r"   rG   rH   rK   r   r   r  r%   r%   r&   test_is_signed_integer_dtypep  s    r  c                 C   s2   | j j}tj|r"t| s.tnt| r.td S r   )r'   r"   rG   rH   rL   r   r   r  r%   r%   r&   test_is_unsigned_integer_dtypex  s    r  c                 C   s2   | j j}tj|r"t| s.tnt| r.td S r   )r'   r"   rG   rH   rJ   r   r   r  r%   r%   r&   test_is_float_dtype  s    r  c                 C   sl   t | }|d}t|}t|}t|t|ks<tt|}t	|| t|}t	|| d S )Nr1   )
rU   r   headpickledumpsr  r   loadsr   r   )rX   r   Zexpected_slicedZfull_pickledZsliced_pickledr   Zresult_slicedr%   r%   r&   test_pickle_roundtrip  s    





r  c                 C   sH   | j  j}|| j}t|jtr(tt|jts8tt	||  d S r   )
r   	to_pandasrV   r   r'   r   r   r   r   r   )rX   Zpd_arrayr   r%   r%   r&   test_astype_from_non_pyarrow  s
    r  c                  C   s6   t dg} | d}t jdgdd}t|| d S )Nz1.0r  r*   rF   )rU   r   r   r   r   r   r   r   r%   r%   r&   &test_astype_float_from_non_pyarrow_str  s    
r  c                 C   st   |   }| jj}tj|s(tj|r8tt	| }nt| j}| j
rd|t}tj|t| < t|| d S r   )to_numpyr   rZ   rG   rH   rP   rO   r	  rV   listZ_hasnar   rk  rU   rl   r   r   assert_numpy_array_equal)rX   r   r   r   r%   r%   r&   test_to_numpy_with_defaults  s    
r  c                  C   sT   dd g} t j| dd}| }tjdt jgtd}t|d tsDtt	
|| d S )Nr-   r   rF   r   )rU   rV   r  r	  rl   rk  r   intr   r   r  )rX   arrr   r   r%   r%   r&   test_to_numpy_int_with_na  s    r  zna_val, exp)r-   r-   c                 C   sH   t jt jt jgdd}|jd| d}tj|gd dd}t|| d S )Nnull[pyarrow]rF   r   )r'   rm   r1   rU   rV   rl   r  r	  r   r  )Zna_valrv  r  r   r   r%   r%   r&   test_to_numpy_null_array  s    r  c                  C   sH   t jt jt jgdd} | jd d}tjt jgd dd}t|| d S )Nr  rF   r1   rk  r  )r  r   r   r%   r%   r&   !test_to_numpy_null_array_no_dtype  s    r  c                 C   s   |   }|  }| d |d d < ttj| d gt|  | jjd}t|| |  }| d d d |d d < | d d d }t|| |  }| 	 |d d < | }t|| d S )Nr   rZ   r/   )
copyr   rG   rV   r  r   rZ   r   r   tolist)rX   origr   r   r%   r%   r&   test_setitem_null_slice  s    r  c              	   C   s   | j j}tj|s tj|r.d}t}d}n@tj|sRtj|sRtj	|rbd}tj
}d}nd}t}d}tj||d || d d < W 5 Q R X d S )N{   zInvalid value '123' for dtypefoozCould not convertzInvalid value 'foo' for dtyper   )r   rZ   rG   rH   rR   rS   r   ri   rJ   rI   r   rs   r   )rX   r   Z
fill_valueri  r   r%   r%   r&   test_setitem_invalid_dtype  s&    


r  zreturns object with 7.0ro   c                  C   sv   t jtdtdgt  d} | jt  tt  ijd}tj	tdtdgtt  d}t
|| d S )Nz
2019-12-31r  Ztypes_mapperrF   )rG   rV   rU   	Timestampdate32r  r   Zdate64getr   r   r   )Z
date_arrayr   r   r%   r%   r&   &test_from_arrow_respecting_given_dtype  s     
r  zdoesn't raise with 7c               	   C   sT   t jddgt  d} tjt jdd$ | jt  tt  ij	d W 5 Q R X d S )Nr         @r  zFloat value 1.5 was truncatedr   r  )
rG   rV   r   rs   r   r   r  r   r   r  )rV   r%   r%   r&   -test_from_arrow_respecting_given_dtype_unsafe  s    r  c                  C   s   d} t jdddt jg| d}|d}t jdddt jg| d}t|| t jd	t jd
g| d}|d}t jdt jdg| d}t|| d S )Nr  r+   gGz?g{Gz@rF   r-   g333333?g@g^@gp=
cL@r/   g      ^@g      N@)rU   r   rl   roundr   r   )r'   r   r   r   r%   r%   r&   
test_round  s    

r  c              	   C   s^   | \}}}|  dddg}tj|d< |r2t|}d}tjt|d || W 5 Q R X d S )Nr1   r   r-   r/   zOsearchsorted requires array to be sorted, which is impossible with NAs present.r   )r  rU   rl   r   rs   r   r   Zsearchsorted)rf   r*  r<   r^   r;   r  r   r%   r%   r&    test_searchsorted_with_na_raises&  s    


r  c               
   C   s^   t t jddgttt t dddgd} |  }| j	ddgd	}t
|| d S )
Nr6  r7  rF   r-   r1   )r;   r<   r;   r<   )Zby)rU   r   r   r   rG   
dictionaryint32r   r  Zsort_valuesr   r  )r   r   r   r%   r%   r&   test_sort_values_dictionary7  s     r  patabcz	a[a-z]{2}c                 C   sP   t jdd gtt d}|j| }t jdd gtt d}t	|| d S )Nr  rF   r-   )
rU   r   r   rG   r   r  r   r  r   r   )r  r   r   r   r%   r%   r&   test_str_countE  s    r  c               	   C   sH   t jdd gtt d} tjtdd | jj	ddd W 5 Q R X d S )Nr  rF   z	count notr   r-   flags)
rU   r   r   rG   r   rs   r   rT   r  r   r   r%   r%   r&    test_str_count_flags_unsupportedM  s    r  zside, str_funcr0  rjustr1  ljustZbothcenterc                 C   sb   t jdd gtt d}|jjd| dd}t jtd|ddd gtt d}t	|| d S )Nr;   rF   r   r6  )widthsideZfillchar)
rU   r   r   rG   r   r  padr   r   r   )r  Zstr_funcr   r   r   r%   r%   r&   test_str_padS  s     
r  c               	   C   sH   t jdd gtt d} tjtdd | j	ddd W 5 Q R X d S )Nr;   rF   zInvalid side: foor   r   r  r6  )
rU   r   r   rG   r   rs   r   r   r  r  r  r%   r%   r&   test_str_pad_invalid_side_  s    r  zpat, case, na, regex, expabFTZAbz	a[a-z]{1}z	A[a-z]{1}c                 C   sT   t jdd gtt d}|jj| |||d}t j|tt d}t	|| d S )Nr  rF   )casenaregex)
rU   r   r   rG   r   r  containsrs  r   r   )r  r  r  r  rv  r   r   r   r%   r%   r&   test_str_containse  s    r  c               	   C   sH   t jdd gtt d} tjtdd | jj	ddd W 5 Q R X d S )Nr  rF   zcontains notr   r;   r-   r  )
rU   r   r   rG   r   rs   r   rT   r  r  r  r%   r%   r&   #test_str_contains_flags_unsupportedv  s    r  zside, pat, na, exp
startswithr<   endswithZbcc                 C   sT   t jdd gtt d}t|j| ||d}t j|tt d}t	|| d S )Nr  rF   )r  
rU   r   r   rG   r   r   r  rs  r   r   )r  r  r  rv  r   r   r   r%   r%   r&   test_str_start_ends_with|  s    
r  zarg_name, argreplr  r  r-   c              	   C   sZ   t jdd gtt d}dddd}||| < tjtdd |jj	f | W 5 Q R X d S )	Nr  rF   r<   r6  T)r  r  r  zreplace is not supportedr   )
rU   r   r   rG   r   rs   r   rT   r  replace)Zarg_nameargr   r2  r%   r%   r&   test_str_replace_unsupported  s
    r  zpat, repl, n, regex, expr;   r6  r/   ZxbxcZxbacz[a-b]Zxxxcc                 C   sT   t jdd gtt d}|jj| |||d}t j|tt d}t|| d S )NZabacrF   )nr  )	rU   r   r   rG   r   r  r  r   r   )r  r  r  r  rv  r   r   r   r%   r%   r&   test_str_replace  s    	r  c               	   C   sH   t jdd gtt d} tjtdd | j	ddg W 5 Q R X d S )Nr  rF   zrepeat is notr   r-   r1   )
rU   r   r   rG   r   rs   r   rT   r  repeatr  r%   r%   r&   test_str_repeat_unsupported  s    r  zUnsupported for pyarrow < 7r   c                  C   sP   t jdd gtt d} | jd}t jdd gtt d}t|| d S )Nr  rF   r1   Zabcabc)	rU   r   r   rG   r   r  r  r   r   r  r%   r%   r&   test_str_repeat  s    r  zpat, case, na, expc                 C   sR   t jdd gtt d}|jj| ||d}t j|tt d}t	|| d S Nr  rF   )r  r  
rU   r   r   rG   r   r  r   rs  r   r   r  r  r  rv  r   r   r   r%   r%   r&   test_str_match  s    r  ZAbcc                 C   sR   t jdd gtt d}|jj| ||d}t j|tt d}t	|| d S r  r  r  r%   r%   r&   test_str_fullmatch  s    r  zsub, start, end, exp, exp_typr   c                 C   sN   t jdd gtt d}|jj| ||d}t j|t|d}t|| d S )Nr  rF   )startend)	rU   r   r   rG   r   r  findr   r   )subr  r   rv  Zexp_typr   r   r   r%   r%   r&   test_str_find  s    r  c               	   C   sH   t jdd gtt d} tjtdd | jj	ddd W 5 Q R X d S )Nr  rF   zfind not implementedr   r  r-   )r  )
rU   r   r   rG   r   rs   r   rT   r  r  r  r%   r%   r&   test_str_find_notimplemented  s    r  zi, exper^   c                 C   sN   t jddd gtt d}|j| }t j|tt d}t|| d S )Nr  derF   )	rU   r   r   rG   r   r  r  r   r   )irv  r   r   r   r%   r%   r&   test_str_get  s    r	  z=TODO: StringMethods._validate should support Arrow list typesc                  C   sZ   t tttdtdd g} | jd}t jddd gtt	 d}t
|| d S )Nr  123=za=b=cz1=2=3rF   )rU   r   r   rG   rV   r  r  joinr   r   r   r   r  r%   r%   r&   test_str_join  s    "r  zstart, stop, step, expc                 C   sP   t jdd gtt d}|j| ||}t j|tt d}t|| d S NabcdrF   )	rU   r   r   rG   r   r  slicer   r   )r  stopsteprv  r   r   r   r%   r%   r&   test_str_slice
  s    	r  zstart, stop, repl, expZaxcdZxcdZcdc                 C   sP   t jdd gtt d}|j| ||}t j|tt d}t|| d S r  )	rU   r   r   rG   r   r  Zslice_replacer   r   )r  r  r  rv  r   r   r   r%   r%   r&   test_str_slice_replace  s    	r  zvalue, method, expZa1cisalnumz!|,Zaaaisalphaz!!!u   ٠	isdecimalz~!r=   isdigit~islowerZaaAr
  	isnumericZ11I isspace zThe Thatistitlezthe ThatZAAAisupperZAAcc                 C   sR   t j| d gtt d}t|j| }t j|d gtt d}t	|| d S NrF   r  )valuer   rv  r   r   r   r%   r%   r&   test_str_is_functions(  s    r#  zmethod, exp
capitalizezAbc deftitlezAbc DefswapcasezAbC Defzabc defupperzABC DEFcasefoldc                 C   sR   t jdd gtt d}t|j|  }t j|d gtt d}t|| d S )NzaBc dEFrF   	rU   r   r   rG   r   r   r  r   r   )r   rv  r   r   r   r%   r%   r&   test_str_transform_functionsF  s    r*  c                  C   sN   t jdd gtt d} | j }t jdd gtt d}t	|| d S )Nr  rF   r(   )
rU   r   r   rG   r   r  r  r  r   r   r  r%   r%   r&   test_str_lenX  s    
r+  zmethod, to_strip, valr8  z abc Zxabcxlstripz abcZxabcrstripzabc Zabcxc                 C   sV   t j|d gtt d}t|j| |d}t jdd gtt d}t|| d S )NrF   )to_stripr  r)  )r   r.  valr   r   r   r%   r%   r&   test_str_strip_  s    r0  r/  Zabc123c                 C   sP   t j| d gtt d}|jd}t jdd gtt d}t|| d S NrF   r
  r  )	rU   r   r   rG   r   r  Zremovesuffixr   r   r/  r   r   r   r%   r%   r&   test_str_removesuffixq  s    r3  Z123abcc                 C   sP   t j| d gtt d}|jd}t jdd gtt d}t|| d S r1  )	rU   r   r   rG   r   r  Zremoveprefixr   r   r2  r%   r%   r&   test_str_removeprefixy  s    r4  errorsignorestrictzencoding, exputf8s   abcutf32s     a   b   c   c                 C   sR   t jdd gtt d}|j|| }t j|d gtt d}t	|| d S Nr  rF   )
rU   r   r   rG   r   r  encodebinaryr   r   )r5  encodingrv  r   r   r   r%   r%   r&   test_str_encode  s    	r>  c                 C   s`   t jddd gtt d}|jjd| d}t jdgg d gttt d}t	|| d S )Nr  ZefgrF   r<   r  )
rU   r   r   rG   r   r  findalllist_r   r   )r  r   r   r   r%   r%   r&   test_str_findall  s    $rA  r   r  rindexz
start, endc              	   C   s   t jdd gtt d}t|j| d||}t jdd gtt d}t	|| t
jtdd t|j| d|| W 5 Q R X d S )NabcbarF   r^   r1   zsubstring not foundr   r  )rU   r   r   rG   r   r   r  r   r   r   rs   r   r   )r   r  r   r   r   r   r%   r%   r&   test_str_r_index  s    	rD  formNFCNFKCc                 C   s>   t jdd gtt d}|j| }| }t	|| d S r:  )
rU   r   r   rG   r   r  r  r  r   r   )rE  r   r   r   r%   r%   r&   test_str_normalize  s    rH  c                 C   sX   t jddd gtt d}|jd| |}t jddd gtt d}t	|| d S )NrC  r  rF   r^   r1   r/   )
rU   r   r   rG   r   r  rfindr   r   r   )r  r   r   r   r   r%   r%   r&   test_str_rfind  s    rJ  c                  C   sT   t jdd gtt d} | jddi}t jdd gtt d}t|| d S )NrC  rF   rf  r<   Zbbcbb)	rU   r   r   rG   r   r  	translater   r   r  r%   r%   r&   test_str_translate  s    rL  c                  C   sP   t jdd gtt d} | jd}t jdd gtt d}t|| d S )NrC  rF   r   zabc
ba)	rU   r   r   rG   r   r  wrapr   r   r  r%   r%   r&   test_str_wrap  s    rN  c                  C   sl   t jdd dgtt d} | j }t jdddgdddgdddggtt dddgd	}t	
|| d S )
Nza|bza|crF   TFr;   r<   r^   )r'   r   )rU   r   r   rG   r   r  Zget_dummiesr   rs  r   r  r  r%   r%   r&   test_get_dummies  s    

rO  c                  C   s  t jdd gtt d} | jd}t jdddgd d d ggtt d}t	|| | jjddd}t t
tdddgd g}t|| | jd}t jdddgd d d ggtt d}t	|| | jjddd}t t
tdddgd g}t|| d S )	NrC  rF   r<   r;   ZcbaFexpandr  )rU   r   r   rG   r   r  	partitionr   r   r  r   rV   r   
rpartitionr  r%   r%   r&   test_str_partition  s&     
 
rT  c               	   C   st  t jddd gtt d} | jd}t ttdddgdddgd g}t	
|| | jjddd	}t ttdd
gdd
gd g}t	
|| | jjddd}t ttddgddgd g}t	
|| | jjdddd}t ttddd gttddd gd}t	|| | jjddd}t ttddd gttdd d gd}t	|| d S )Na1cbcba2cbcbrF   r^   a1r<   a2r-   r  Zbcbz[1-2]T)r  r;   cbcb)r  rQ  r   r-   r2   rP  )rU   r   r   rG   r   r  splitr   rV   r   r   r   r  r  r%   r%   r&   test_str_split  s<    r]  c               	   C   s6  t jddd gtt d} | jd}t ttdddgdddgd g}t	
|| | jjddd	}t ttd
dgddgd g}t	
|| | jjdddd}t ttd
dd gttddd gd}t	|| | jjddd}t ttddd gttdd d gd}t	|| d S )NrU  rV  rF   r^   rW  r<   rX  r-   rY  Za1cbZa2cbT)r  rQ  r[  r2   rP  r;   rZ  )rU   r   r   rG   r   r  rsplitr   rV   r   r   r   r  r  r%   r%   r&   test_str_rsplit	  s2    r_  c               	   C   sD   t jdd gtt d} tjtdd | j	d W 5 Q R X d S )Nr  rF   z,str.extract not supported with pd.ArrowDtyper   z[ab](\d))
rU   r   r   rG   r   rs   r   rT   r  extractr  r%   r%   r&   test_str_unsupported_extract:	  s     ra  r   r   r  r;  r:  c                 C   sF   ddg}t | }tj||d}tt jdd g|d}t|| d S )NZ1000NaTrF   i  r  )rG   durationr   r   rV   r   r   )r   stringsr   r   r   r%   r%   r&   #test_duration_from_strings_with_natB	  s
    
re  c              	   C   s>   | j j}tj|s:tjtdd t	| j
 W 5 Q R X d S )Nz2Can only use .dt accessor with datetimelike valuesr   )r'   r"   rG   rH   r   rs   r   AttributeErrorrU   r   r  rj   r%   r%   r&   test_unsupported_dtL	  s     rg  zprop, expectedyear  dayZday_of_weekZ	dayofweekweekdayZday_of_yearZ	dayofyearhourminuteZis_leap_yearz.is_leap_year not implemented for pyarrow < 8.0r   )Zmarksmicrosecondr:   month
nanosecond   Zquartersecondrd   r   r   c                 C   s   t jt jddddddddd	d gttd
d}t|j| }d }t|t	rVt
 }nt|trjtd
}t ttj|d g|d}t|| d S )Nri  r-   r1   r   r(   rd   r:   rq  )rh  ro  rj  rl  rm  rr  rn  rp  r   rF   r  )rU   r   r  r   rG   r  r   r  r   r   r  r   time64r   rV   r   r   )propr   r   r   Zexp_typer%   r%   r&   test_dt_propertiesU	  s.    




ru  c                 C   sh   t jtdddddd gtt| d}|jj}t ttj	tddd gt
| d}t|| d S )	Nri  r-   r1   r   rh  ro  rj  rl  rF   r   r  )rU   r   r   r   rG   r  r  r   r   rV   rs  r   r   )r   r   r   r   r%   r%   r&   test_dt_time_preserve_unit	  s     rw  r   r  
US/Pacificc                 C   sD   t jtdddddd gttjd| dd}|jj}|| ks@td S )	Nri  r-   r1   r   rv  r   r   rF   )	rU   r   r   r   rG   r  r  r   r   )r   r   r   r%   r%   r&   
test_dt_tz	  s    rz  c                  C   sh   t jtdddddd gttdd} | j }t jdddgdddggd	d
dgdd}t	
|| d S )Nri  r-   r1   r   rv  r   rF   r   rh  weekrj  r   )r   r'   )rU   r   r   r   rG   r  r  isocalendarr   r   r  r  r%   r%   r&   test_dt_isocalendar	  s    
r}  c                 C   s   t  r&t r&| jtjjtjdd t	j
tdddddd gttdd	}|jd
}t	j
dd gtt d	}t|| d S )Nr   r   ri  r-   r1   r   rv  r   rF   z%Y-%m-%dT%H:%M:%Sz2023-01-02T03:00:00.000000000)r   r   rq   rr   rs   rt   ru   rG   r   rU   r   r   r   r  r  strftimer   r   r   )r$   r   r   r   r%   r%   r&   test_dt_strftime	  s"    	 
r  ceilr  r  c              	   C   s   t jtdddddd gttdd}tjtdd	 t	|j
| d
dd W 5 Q R X tjtdd	 t	|j
| d
dd W 5 Q R X d S )Nri  r-   r1   r   rv  r   rF   zambiguous is not supported.r   Z1Hrb  Z	ambiguousznonexistent is not supported.nonexistent)rU   r   r   r   rG   r  rs   r   rT   r   r  r   r   r%   r%   r&   *test_dt_roundlike_tz_options_not_supported	  s    r  c              	   C   s   t jtdddddd gttdd}tjtdd	 t	|j
| d
 W 5 Q R X tjtdd	 t	|j
| d  W 5 Q R X d S )Nri  r-   r1   r   rv  r   rF   zfreq='1B' is not supportedr   Z1Bz$Must specify a valid frequency: None)rU   r   r   r   rG   r  rs   r   r   r   r  r  r%   r%   r&   "test_dt_roundlike_unsupported_freq	  s    r  z'Methods not supported for pyarrow < 7.0freqDHTSLUNc                 C   sn   t tddddd g}ttd}t|j|d|  |}t||j|d|  }t	
|| d S )Nri  r-   )rh  ro  rj  r   r2   )rU   r   r   r   rG   r  r   r  r   r   r   )r  r   r   rW   r   r   r%   r%   r&   test_dt_ceil_year_floor	  s    r  c                  C   s   t dddt dddg} tj| ttdd}|j }tj	| t
d}t|| tdd |D sjt|dj }t|| d S )	Nr4   r-   ri  r   rF   c                 s   s   | ]}t |tkV  qd S r   )rZ   r   ).0resr%   r%   r&   	<genexpr>	  s     z(test_dt_to_pydatetime.<locals>.<genexpr>zdatetime64[ns])r   rU   r   r   rG   r  r  r  r	  rV   rk  r   r  allr   r   )rX   r   r   r   r%   r%   r&   test_dt_to_pydatetime	  s    
r  	date_type    @   c              	   C   sR   t jtdddgtttd|   d}tjtdd |j	
  W 5 Q R X d S )Nr4   r6   r7   r   rF   z#to_pydatetime cannot be called withr   )rU   r   r   r   r   rG   rs   r   r   r  r  )r  r   r%   r%   r&    test_dt_to_pydatetime_date_error 
  s    r  c               	   C   s   t jtdddddd gttdd} tjtdd	 | j	j
d
dd W 5 Q R X tjtdd	 | j	j
d
dd W 5 Q R X d S )Nri  r-   r1   r   rv  r   rF   z ambiguous='NaT' is not supportedr   r  rb  r  z"nonexistent='NaT' is not supportedr  )rU   r   r   r   rG   r  rs   r   rT   r  tz_localizer  r%   r%   r&   *test_dt_tz_localize_unsupported_tz_options
  s    r  c                  C   sp   t jtdddddd gttjdddd	} | jd }t jtdddddd gttdd	}t	|| d S )
Nri  r-   r1   r   rv  r   rx  ry  rF   )
rU   r   r   r   rG   r  r  r  r   r   r  r%   r%   r&   test_dt_tz_localize_none
  s    r  c                 C   s   t  r&t r&|jtjjtjdd t	j
tdddddd gtt| d}|jd	}tjtdddddd gt| d
}tj|d	}t	
t|}t|| d S )Nr   r   ri  r-   r1   r   rv  rF   rx  r  r   r   rq   rr   rs   rt   ru   rG   r   rU   r   r   r   r  r  r  rV   ZcomputeZassume_timezoner   r   r   )r   r$   r   r   exp_datar   r%   r%   r&   test_dt_tz_localize$
  s&    	 r  znonexistent, exp_dateZshift_forwardr6   rv  Zshift_backwardz2023-03-12 01:59:59.999999999c                 C   s   t  r&t r&|jtjjtjdd t	j
tddddddd gttd	d
}|jjd| d}tj|d gtd	d}tj|d}t	
t|}t|| d S )Nr   r   ri  r   r6   r1      )rh  ro  rj  rl  rm  r   rF   rx  r  r  r  )r  Zexp_dater$   r   r   r  r   r%   r%   r&   test_dt_tz_localize_nonexistent=
  s     	r  r   c                 C   sD   t jd gdd}t|| |d}|r.| dk}nt j}||ks@td S )Nr  rF   r   r  )rU   r   r   rl   r   )r   r   r   r   r   r%   r%   r&   #test_boolean_reduce_series_all_nullZ
  s    
r  r   zstring[pyarrow]c                 C   s>   t d }tj|| d}tjt|| d}t|| d S )Nzthe quick brown foxrF   )rG   rV   r\  rU   r   r   r   r   )r'   r  r   r   r%   r%   r&   test_series_from_string_arrayf
  s    r  c                  C   sT   d} t ttj| ftjdg}| }d|tj| ftjd< |j|jksPt	d S )Nih6 rF   F)
r   rG   Zchunked_arrayr	  Zonesrs  r  zerosr   r   )r  r  r   r%   r%   r&   /test_setitem_boolean_replace_with_mask_segfaultn
  s
    r  zdata, arrow_dtyper@   rA   c                 C   s:   t |}tjt| |d}tj| |d}t|| d S r!  )r   rU   rV   r	  r   r   )rX   r  r'   r   r   r%   r%   r&   -test_conversion_large_dtypes_from_numpy_arrayw
  s    r  r   c                 C   sh   t jdddgt| d}| }t jddddddddgtt dd	d
dddddgd}t|| d S )Nr-   r1   r   rF   r   g       @r  r   r   r   min25%50%75%maxr'   r  )rU   r   r   describerG   r   r   r   r   rX   r   r   r%   r%   r&   test_describe_numeric_data
  s    
r  c                 C   st   t jtddt| d}| }t jdgt jdddddddg| jd	  td
dddddddgd}t	
|| d S )Nr-   r9   rF   	   r:   r1   r   rd   )r   r   r   r   r  r  r  r  r  r  )rU   r   r  r   r  to_timedeltar   r  rk  r   r   r  r%   r%   r&   test_describe_timedelta_data
  s    &r  c              
      sb   t jtddt d}| }t jdg fdddD  tdd	d
ddddgd}t|| d S )Nr-   r9   rF   r  c                    s    g | ]}t j| j jd qS ))r   r   )rU   r  r   r   )r  vr   r%   r&   
<listcomp>
  s   z/test_describe_datetime_data.<locals>.<listcomp>)r:   r-   r   r:   rd   r  r   r   r  r  r  r  r  r  )rU   r   r  r   r  rk  r   r   r  r%   r  r&   test_describe_datetime_data
  s    
	r  r^  c                  C   s   t dd g} t dd g}t j| ttdd}t j|ttdd}|| }t jdd gttdd}t	|| d S )Nr-   r   rF   r1   )
rU   Zto_datetimer  r   r   rG   r  rc  r   r   )Zdata_tsZdata_tdZser_tsZser_tdr   r   r%   r%   r&   2test_duration_overflow_from_ndarray_containing_nat
  s    r  )r  r   r   r   r   decimalr   ior   r   rp  r  reZnumpyr	  rs   Zpandas._libsr	   Zpandas.compatr
   r   r   r   r   r   r   Zpandas.errorsr   Zpandas.core.dtypes.commonr   Zpandas.core.dtypes.dtypesr   ZpandasrU   Zpandas._testingZ_testingr   Zpandas.api.extensionsr   Zpandas.api.typesr   r   r   r   r   r   r   Zpandas.tests.extensionr   ZimportorskiprG   Zpandas.core.arrays.arrow.arrayr   Zpandas.core.arrays.arrow.dtyper   ZfixtureZALL_PYARROW_DTYPESr  r'   rX   r\   r]   rc   rf   rg   rk   rm   ZBaseCastingTestsrn   ZBaseConstructorsTestsr   ZBaseGetitemTestsr   ZBaseAccumulateTestsr   ZBaseNumericReduceTestsr   ZBaseBooleanReduceTestsr   ZBaseGroupbyTestsr   ZBaseDtypeTestsr   ZBaseIndexTestsr   ZBaseInterfaceTestsr   ZBaseMissingTestsr   ZBasePrintingTestsr   ZBaseReshapingTestsr   ZBaseSetitemTestsr   ZBaseParsingTestsr  ZBaseUnaryOpsTestsr  ZBaseMethodsTestsr  r=  r,  ZBaseComparisonOpsTestsrb  rx  r  r  rt   r   r  r  r  r<  bytesZlarge_binaryZlarge_stringr@  r   r  Z
large_listZmap_r   structr_  dictr  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  Zskipifr  r  r  r  r  r  r  r  r  r  r  r  compiler  r  r  ru   rT   r  r  r  r  r  r  r	  rf  r  r  r  r#  r*  r+  r0  r3  r4  r>  rA  rD  rH  rJ  rL  rN  rO  rT  r]  r_  ra  re  rg  r#   ru  rw  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ZALL_INT_PYARROW_DTYPESZFLOAT_PYARROW_DTYPESr  ZTIMEDELTA_PYARROW_DTYPESr  ZDATETIME_PYARROW_DTYPESr  r   r  r%   r%   r%   r&   <module>   s  $	$	

;


:


	
FRb#4S2   37 " L,



 
			




 
	

	
 




*















("		
	


	 *

	