o
    de                    @   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&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. ej/dddZ0ddl1m2Z2 ddl3m4Z4 ej5e$j6e7ddd Z8ej5dd Z9ej5dd Z:ej5ddgddd Z;ej5dd Z<ej5dd Z=ej5d d! Z>ej5d"d# Z?ej5d$d% Z@G d&d' d'e.jAZBG d(d) d)e.jCZDG d*d+ d+e.jEZFG d,d- d-e.jGZHG d.d/ d/e.jIZJG d0d1 d1e.jKZLG d2d3 d3e.jMZNG d4d5 d5e.jOZPG d6d7 d7e.jQZRG d8d9 d9e.jSZTG d:d; d;e.jUZVG d<d= d=e.jWZXG d>d? d?e.jYZZG d@dA dAe.j[Z\G dBdC dCe.j]Z^G dDdE dEe.j_Z`G dFdG dGe.jaZbG dHdI dIe.jcZdG dJdK dKe.jeZfG dLdM dMZgdNdO ZhdPdQ ZiejjkdRg dSejjkdTdUdUdUggdVdW ZlejjjkdXg dYddZggg d[dgggd\d]gd^d_d` Zmdadb Znejjkdce0o epge0oddepge0q epge0r e7ge0se0t euge0ve0t euge0we0x e0t eyge0ze0t e0t eggdedf Z{dgdh Z|didj Z}dkdl Z~dmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz Zd{d| Zd}d~ Zejjkdejejfdgdd Zdd Zdd Zdd Zejjjedddd Zejjjedddd Zdd Zdd Zejjkdddgdd Zdd Zejjkdddgddgddggdd Zdd Zejjkdddddddggddddddggddddddggddddddggddddddgggdd Zdd Zejjkddddddggdddddggdddddggdddddgggdd Zejjkddedgde7gddgddggdd ZejjkdddddddggddddddggddddddgggddȄ Zddʄ Zejjjeded̍dd΄ Zejjkddddddggdddddggdddddggdddddggdddddggdddddgggddф ZejjkddddddggdddddggdddddggdddddggdddddggdddddgggddԄ Zejjkddddddge0 gdddddge0t ggddل Zddۄ Zejjkddg dݢgdg dޢgdg dߢgdg dgdZg dggdd Zejjjded̍dd Zejjkddddddggdddddggdddddgggdd Zejjkddddddggdddddggdddddgggdd Zejjkdg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g dg dg dgdd Zejjkdddgd	d
gddgddgddgddggdd Zdd Zejjkdg dg dg dg dg dg dgdd Zejjkdd dgd!d" Zejjkdd#dgd$d% Zejjkd&d'd(gejjkd)d*d+gd,d-ggd.d/ Zejjkdddgd0d1 Zejjkd2d3d4gejjkd5ddgddZggd6d7 Zejjkd8d9d:gd;d< Zejjkd5ddgddZggd=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZejjkdMg dNdOdP ZdQdR ZejjkdSdTdUgdVdgdWdgdXdgdYdgdZdgd[dgd\dgd]dZgejd^dejjjeed_d`dadbdcgdddgdedfgdgdgdhdigdjedUdd׃gdkeddZdidcggdldm ZejjkdMdndogdpdq Zejjkdrg dsdtdu Zdvdw ZÐdxdy Zejjkd2g dzd{d| Zejjkd2g dzd}d~ Zejjjeddejjkdg dejjkd2g dzdd Zǐdd ZȐdd Zɐdd ZejjkdMdndogdd ZejjkddedUd֐dd֐dgde!̐dggdd Zejjkdddgdd Zejjkdddgdd Zϐdd Zejjkde$je$j dd Zejjjede0jd̍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)is_bool_dtypeis_float_dtypeis_integer_dtypeis_numeric_dtypeis_signed_integer_dtypeis_string_dtypeis_unsigned_integer_dtype)baseZpyarrowz7.0.0)Z
minversion)ArrowExtensionArray)
ArrowDtype)paramsidsc                 C   s   t | jdS )N)pyarrow_dtype)r   param)request r#   U/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/extension/test_arrow.pydtypeB   s   r%   c              	   C   st  | j }tj|r!ddgd d g ddgd  d g ddg }ntj|r?ddgd d g ddgd  d g d	d
g }nttj|r]ddgd d g ddgd  d g ddg }nVtj|r{ddgd d g ddgd  d g ddg }n8tj|rt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 }ntj|rEtdtddgd d g tdtdgd  d g tdtdg }nntj|rut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|rdd gd d g dd!gd  d g d"d#g }n tj|rd$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$   rV   G   s   0000*..rV   c                 C   s   t | d| d gS )zLength-2 array with [NA, Valid]Nr   type_from_sequence)rV   r#   r#   r$   data_missing   s   rZ   )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.
    rV   rZ   N)r!   )r"   rV   rZ   r#   r#   r$   all_data   s
   

r[   c              	   C   s  | j }tj|rd}d}d}ntj|rd}d}d}ntj|r*d}d}d}ntj|r7d}d}d	}ntj|rPtd
dd}tddd}tddd}nwtj	|rnt
d
dddddd}t
ddd}t
dddd}nYtj|rtd}td}tdd}nEtj|rtdd}tdd}tdd}n/tj|rd}d}d}n"tj|rd}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+   r7   r3   r4   r5   i  r2   r6   r&   r9   r:   cr>   r?      cz-1.1r1   z1.1NrD   )r    rE   rF   rG   rH   rI   rJ   rL   r   rM   r   rN   r   rO   r   rP   rQ   rK   r   rR   rS   rT   )r%   rU   ABCr#   r#   r$   data_for_grouping   s^   	


ra   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&   rW   ra   r#   r#   r$   data_for_sorting      re   c                 C   rb   )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&   rW   rd   r#   r#   r$   data_missing_for_sorting   rf   rg   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   rD   )r%   r    rE   rF   
is_integerrH   rS   rT   rV   rU   r#   r#   r$   data_for_twos   s   rk   c                   C   s   t jS )z6The scalar missing value for this type. Default 'None')rS   NAr#   r#   r#   r$   na_value   s   rm   c                          e Zd Z fddZ  ZS )TestBaseCastingc                    sB   |j j}tj|r|jtjj	d| dd t
 | d S )NzFor z .astype(str) decodes.reason)r%   r    rE   rF   rQ   node
add_markerpytestmarkxfailsupertest_astype_strselfrV   r"   rU   	__class__r#   r$   rx      s   
zTestBaseCasting.test_astype_str)__name__
__module____qualname__rx   __classcell__r#   r#   r{   r$   ro          ro   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|r)tj|rd}nd| }|jtj	j
|d t | d S )Nz1ArrowDtype(pa.string()) != StringDtype('pyarrow')$pyarrow.type_for_alias cannot infer rp   )r%   r    rE   rF   rP   rK   rr   rs   rt   ru   rv   rw   test_from_dtype)rz   rV   r"   rU   rq   r{   r#   r$   r     s   
z TestConstructors.test_from_dtypec                 C   sd   t ||j}t|| t|jtjsJ t ||j }t|| t|jtjs0J d S N)	rX   rY   _datatmassert_extension_array_equal
isinstancerE   ZChunkedArraycombine_chunksrz   rV   resultr#   r#   r$   test_from_sequence_pa_array  s   z,TestConstructors.test_from_sequence_pa_arrayc                 C   sH   t jtdd tjdgt d W d    d S 1 sw   Y  d S )NzConverting strings tomatchz12-1rD   )rt   raisesrR   r   _from_sequence_of_stringsrE   Zmonth_day_nano_interval)rz   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 n=tr<tj|s+tj|r<|jt	j
jtjd| d ntj|rZ|jd urZt rZt rZ|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.rp   z pyarrow doesn't support parsing r   rq   _TODO: Set ARROW_TIMEZONE_DATABASE environment variable on CI to path to the tzdata for pyarrow.rD   )r%   r    rE   rF   Z	is_time64equalsr
   rr   rs   rt   ru   rv   r   rN   rK   ArrowNotImplementedErrorrM   tzr   r   ArrowInvalidr   caststringrX   r   r   r   r   )rz   rV   r"   rU   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#   r{   r$   r     s
    r   c                   @      e Zd ZdS )TestGetitemTestsNr}   r~   r   r#   r#   r#   r$   r   L      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r|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)rz   serop_namer   r   expectedr#   r#   r$   check_accumulateQ  s   


z(TestBaseAccumulateTests.check_accumulater   TFc                 C   s   |j j}tj|stj|stj|r!|dkr!ts!t	d |}t
|}tt t|||d W d    d S 1 sAw   Y  d S )Ncumsumz1These work, are tested by test_accumulate_series.r   )r%   r    rE   rF   ri   rH   rN   r   rt   skiprS   Seriesr   rR   r   )rz   rV   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|stj|r |dv rd}ntj|r3tj	|s3|dv r2d}ntj	|r?|dkr?d}|rFt
d |dksLtrf|jjjrVt
d |jt
jj| dtd	 n!|dkrtj|svt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rq   r   z not implemented for )r%   r    rS   r   rE   rF   rP   rQ   is_temporalrN   rt   r   r   configoptionZ	skip_slowrr   rs   ru   rv   rR   rG   rK   r   )	rz   rV   r   r   r"   r   r   r   Zdo_skipr#   r#   r$   test_accumulate_seriesq  sP   




z.TestBaseAccumulateTests.test_accumulate_seriesN)	r}   r~   r   r   rt   ru   parametrizer   r   r#   r#   r#   r$   r   P  s    
r   c                       sP   e Zd Zdd Zejdddg fddZejdg d	d
d Z  Z	S )TestBaseNumericReducec                 C   s   |j j}|dkrt|| }nt|||d}tj|r#td ntj|s/tj	|r4|
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   rE   rF   rG   rt   r   ri   rH   r   r   Zassert_almost_equal)rz   r   r   r   rU   r   r   r#   r#   r$   check_reduce  s   
z"TestBaseNumericReduce.check_reducer   TFc                    sn  |j j}|}t|}d}tj|r%|dv r%tj|r"|dv r"nd}ntj|s1tj	|r7|dv r7d}|sad| d}	t
jt|	d t|||d	 W d    d S 1 sZw   Y  d S t
jjt| d
tj d| d}
|dv r}|j|
 n0|dv rtrtj|r|j|
 n|dkrtr|j|
 ntj|r|dv r|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    rS   r   rE   rF   r   rN   rP   rQ   rt   r   	TypeErrorr   ru   rv   __version__rr   rs   r   rK   r   rG   rw   test_reduce_series)rz   rV   Zall_numeric_reductionsr   r"   rU   opnamer   Zshould_workmsg
xfail_markr{   r#   r$   r     sZ   




z(TestBaseNumericReduce.test_reduce_seriestyp)int64Zuint64float64c                 C   s,   t jddg| dd }|dksJ d S )Nr+   r/   	[pyarrow]rD         ?)rS   r   r   )rz   r   r   r#   r#   r$   test_median_not_approximate  s   z1TestBaseNumericReduce.test_median_not_approximate)
r}   r~   r   r   rt   ru   r   r   r   r   r#   r#   r{   r$   r     s    Fr   c                   @   &   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!tj
|r'|j| |}t|}	tj|r\tj|s\tjtdd t|	||d W d    d S 1 sUw   Y  d S t|	||d}
|
|dku slJ d S )Nr   r   r   zdoes not support reductionr   r   any)r%   r    rt   ru   rv   r   rE   r   rF   rP   rQ   rr   rs   rS   r   r   rN   r   r   )rz   rV   all_boolean_reductionsr   rm   r"   rU   r   r   r   r   r#   r#   r$   r     s,   

z(TestBaseBooleanReduce.test_reduce_seriesN)r}   r~   r   rt   ru   r   r   r#   r#   r#   r$   r         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                    @   |j j}tj|r|jtjj	| dd t
 | d S N" only has 2 unique possible valuesrp   )r%   r    rE   rF   rG   rr   rs   rt   ru   rv   rw   test_groupby_extension_no_sortrz   ra   r"   rU   r{   r#   r$   r   (     z.TestBaseGroupby.test_groupby_extension_no_sortc                    r   r   )r%   r    rE   rF   rG   rr   rs   rt   ru   rv   rw    test_groupby_extension_transformr   r{   r#   r$   r   2  r   z0TestBaseGroupby.test_groupby_extension_transformas_indexTFc                    sD   |j j}tj|r|jtjj	t
| dd t || d S )Nr   r   )r%   r    rE   rF   rG   rr   rs   rt   ru   rv   
ValueErrorrw   test_groupby_extension_agg)rz   r   ra   r"   rU   r{   r#   r$   r   <  s   z*TestBaseGroupby.test_groupby_extension_aggc                    s   t |jrItg d|g dd}tdg}tjtdd |d	 j
 W d    n1 s2w   Y  |dj	dd	j
}t|| d S t | d S )
N)r+   r+   r/   r/      r   r+   r&   )r+   r+   r+   r+   r+   r+   r+   r+   )r^   r_   r`   r`   zdoes not supportr   r^   T)Znumeric_only)r   r%   rS   	DataFrameIndexrt   r   r   groupbyr   columnsr   Zassert_index_equalrw   test_in_numeric_groupby)rz   ra   dfr   r   r{   r#   r$   r   H  s   
z'TestBaseGroupby.test_in_numeric_groupby)r}   r~   r   r   r   rt   ru   r   r   r   r   r#   r#   r{   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|rtr|jtj	j
tdd t | d S )Nz,decimal string repr affects numpy comparisonr   )r%   r    rE   rF   rK   r   rr   rs   rt   ru   rv   r   rw   test_check_dtypery   r{   r#   r$   r   \  s   zTestBaseDtype.test_check_dtypec                    s   |j }tj|r|jtjjt	d| d tj
|r@d}tjt|d ||j W d    d S 1 s9w   Y  d S t | d S )Nr   r   z6string\[pyarrow\] should be constructed by StringDtyper   )r    rE   rF   rK   rr   rs   rt   ru   rv   rR   rP   r   r   construct_from_stringnamerw   #test_construct_from_string_own_name)rz   r%   r"   rU   r   r{   r#   r$   r   g  s"   
z1TestBaseDtype.test_construct_from_string_own_namec                    sd   |j }tj|rt||jrJ d S tj|r*|j	t
jjtd| d t | d S )Nr   r   )r    rE   rF   rP   rX   Zis_dtyper   rK   rr   rs   rt   ru   rv   rR   rw   test_is_dtype_from_namerz   r%   r"   rU   r{   r#   r$   r   {  s   z%TestBaseDtype.test_is_dtype_from_namec                 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\]'r   Zanother_type)rt   r   r   rX   r   )rz   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|s6tj|s6tj|r|jdks6|jd us6tj|r*|jdks6tj	|s6tj
|rD|jtjj| dd t | d S )NnszB does not have associated numpy dtype findable by find_common_typerp   )r    rE   rF   rL   rO   rM   unitr   rN   rQ   rK   rr   rs   rt   ru   rv   rw   test_get_common_dtyper   r{   r#   r$   r     s2   





	z#TestBaseDtype.test_get_common_dtypec                    s2   |j }tj|rt|sJ d S t | d S r   )r    rE   rF   rP   r   rw   test_is_not_string_type)rz   r%   rU   r{   r#   r$   r     s   z%TestBaseDtype.test_is_not_string_type)
r}   r~   r   r   r   r   r   r   r   r   r#   r#   r{   r$   r   [  s    r   c                   @   r   )TestBaseIndexNr   r#   r#   r#   r$   r     r   r   c                       ,   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rq   runc                       t  | d S r   )rw   	test_viewrz   rV   r{   r#   r$   r        zTestBaseInterface.test_view)r}   r~   r   rt   ru   rv   r   r   r#   r#   r{   r$   r     
    r   c                       s$   e Zd Zdd Z fddZ  ZS )TestBaseMissingc                 C   s   ||    }|d }||}||usJ | || tt |jdd}W d    n1 s2w   Y  ||us=J | || d S )Nr   Zbackfill)method)isnaZfillnar   r   Zassert_produces_warningr   )rz   rV   Zvalidr   r#   r#   r$   test_fillna_no_op_returns_copy  s   
z.TestBaseMissing.test_fillna_no_op_returns_copyc                    sH   t jt|d udd t || W d    d S 1 sw   Y  d S )NF)Zcheck_stacklevel)r   Zmaybe_produces_warningr   rw   test_fillna_series_method)rz   rZ   Zfillna_methodr{   r#   r$   r    s
   
"z)TestBaseMissing.test_fillna_series_method)r}   r~   r   r  r  r   r#   r#   r{   r$   r    s    r  c                   @   r   )TestBasePrintingNr   r#   r#   r#   r$   r    r   r  c                       r   )TestBaseReshaping5GH 45419: pyarrow.ChunkedArray does not support viewsFr   c                    r   r   )rw   test_transposer   r{   r#   r$   r    r  z TestBaseReshaping.test_transpose)r}   r~   r   rt   ru   rv   r  r   r#   r#   r{   r$   r	    r  r	  c                       r   )TestBaseSetitemr
  Fr   c                    r   r   )rw   test_setitem_preserves_viewsr   r{   r#   r$   r    r  z,TestBaseSetitem.test_setitem_preserves_views)r}   r~   r   rt   ru   rv   r  r   r#   r#   r{   r$   r    r  r  c                   @   r   )TestBaseParsingenginer\   pythonc           	      C   s(  |j j}tj|r|jtjj	t
dd n@tj|r.|jtjj	td| dd n)tj|rF|jdv rF|jtjj	tdd ntj|rW|jtjj	dd td	tj|t|j d
i}|jdtjd}tj|ryt|}nt|}tj|d	t|j i|d}|}| || d S )NzGH 47534r   zParameterized types z not supported.)usr   z1https://github.com/pandas-dev/pandas/issues/49767z)CSV parsers don't correctly handle binaryrp   Z
with_dtyperD   F)indexZna_rep)r%   r  )r%   r    rE   rF   rG   rr   rs   rt   ru   rv   r   rK   rR   rM   r   r   rQ   rS   r   r   strZto_csvnpnanr   r   Zread_csvassert_frame_equal)	rz   r  rV   r"   rU   r   Z
csv_outputr   r   r#   r#   r$   test_EA_types  sB   

zTestBaseParsing.test_EA_typesN)r}   r~   r   rt   ru   r   r  r#   r#   r#   r$   r    r   r  c                       rn   )TestBaseUnaryOpsc                    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    rE   rF   rG   rr   rs   rt   ru   rv   r   rw   test_invertry   r{   r#   r$   r  
  s   zTestBaseUnaryOps.test_invert)r}   r~   r   r  r   r#   r#   r{   r$   r  	  r   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|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    rE   rF   rJ   rr   rs   rt   ru   rv   r   rw   	test_diff)rz   rV   r  r"   rU   r{   r#   r$   r    s   zTestBaseMethods.test_diffc                 C   s.   |d d }|  }|jtt ksJ d S )Nr7   )value_countsr%   r   rE   r   r   r#   r#   r$   'test_value_counts_returns_pyarrow_int64%  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 )	Nr7   rD   T)	normalizer+   Z
proportion)r  r   zdouble[pyarrow])uniquer  rT   r  rS   r   r%   r  Z
sort_indexlenr  r   r   )rz   rV   r"   valuesr   r   r   r#   r#   r$    test_value_counts_with_normalize+  s   
z0TestBaseMethods.test_value_counts_with_normalizec                    sv   |j j}tj|r|jtjj	| dd ntj
|r1tr1|jtjj	d| tjd t ||| d S )Nr   rp   No pyarrow kernel for r   )r%   r    rE   rF   rG   rr   rs   rt   ru   rv   rK   r   r   rw   test_argmin_argmax)rz   re   rg   rm   r"   rU   r{   r#   r$   r%  9  s   z"TestBaseMethods.test_argmin_argmaxzop_name, skipna, expected)idxmaxTr   )idxminTr/   )argmaxTr   )argminTr/   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    rE   rF   rK   r   rr   rs   rt   ru   rv   r   rw   test_argreduce_series)rz   rg   r   r   r   r"   rU   r{   r#   r$   r*  L  s   z%TestBaseMethods.test_argreduce_seriesc                    r   r   )r%   r    rE   rF   rG   rr   rs   rt   ru   rv   rw   test_factorizer   r{   r#   r$   r+  h  r   zTestBaseMethods.test_factorizezbool[pyarrow]c           	         s   t |djj}tj|r)tjjt	| d| d}|j
| t | d S tj|r_|d\}}t|}t|}tt	 ||dd  W d    d S 1 sXw   Y  d S t | d S )Nr+   z cannot be added to r   r/   c                 S   s   | | S r   r#   )x1Zx2r#   r#   r$   <lambda>  s    z2TestBaseMethods.test_combine_add.<locals>.<lambda>)nextr%   r    rE   rF   rN   rt   ru   rv   r   rr   rs   rw   test_combine_addr   rS   r   r   combine)	rz   Zdata_repeatedr"   rU   ru   Z
orig_data1Z
orig_data2s1s2r{   r#   r$   r/  t  s    

"z TestBaseMethods.test_combine_addc                    sB   |j j}tj|r|jtjj	| dd t
 || d S r   )r%   r    rE   rF   rG   rr   rs   rt   ru   rv   rw   test_searchsorted)rz   re   	as_seriesr"   rU   r{   r#   r$   r3    s   z!TestBaseMethods.test_searchsortedc                 C   s   t |t |sJ d S r   )rS   r   r   r   r#   r#   r$   test_basic_equals  s   z!TestBaseMethods.test_basic_equals)r}   r~   r   rt   ru   r   r  r  r#  r%  r  r  r*  r+  Z_combine_le_expected_dtyper/  r3  r5  r   r#   r#   r{   r$   r    s0    



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|s1tj|r;|	d}|	d}t
j||fi | d S )Nr   zfloat[pyarrow])r   rS   r   ilocr%   r    rE   rF   rK   r   r   assert_equal)clsleftrightkwargsZleft_pa_typeZright_pa_typer#   r#   r$   r8    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      t || S r   )r  dividexyr#   r#   r$   r-        z8TestBaseArithmeticOps.get_op_from_name.<locals>.<lambda>Z	rfloordivc                 S   r>  r   )r  Zfloor_divider@  r#   r#   r$   r-    rC  )stripr   get_op_from_name)rz   r   Zshort_opnamer#   r#   r$   rE    s   

z&TestBaseArithmeticOps.get_op_from_namec                 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
}tj|jrU|jj}	t|ttfv rK|	dv rKd}	|d|	 d}n||j}t|j
|}
|rptj|
|j|jd}|S t|
}|S )	NFTr   )smsr  z	duration[])r  r   )r   BaseArithmeticOpsTests_combiner   rS   r   r7  r%   rE   rT   Z_valuesrF   rN   rX   r    r   r   r   r   r  r   r   )rz   objotheropr   Z	was_frameZexpected_dataZoriginal_dtypeZpa_expectedr   Zpd_expectedr#   r#   r$   _patch_combine  s.   

z$TestBaseArithmeticOps._patch_combinec                 C   s.   t  o|dv rtj|p|dv otj|S )N__add____radd____sub____rsub__)r   rE   rF   rN   r   )rz   r   rU   r#   r#   r$   _is_temporal_supported  s   

z,TestBaseArithmeticOps._is_temporal_supportedc                 C   s   |  ||}|dv rt}|S |rd }|S |dv r(tj|s$tj|r(d }|S tj|s?tj|s?tj|s?tj	}|S d }|S )N>   __rmod____mod__rO  )
rU  rR   rE   rF   rP   rQ   rH   ri   rK   r   )rz   r   rU   arrow_temporal_supportedexcr#   r#   r$   _get_scalar_exception  s0   

	


z+TestBaseArithmeticOps._get_scalar_exceptionc                 C   s  d }|  ||}|dkr,tj|stj|stj|r,ts,tjj	d| d}|S |r>tjj	t
| d| dd}|S |dkr[tj|sNtj|r[ts[tjj	tjdd}|S |d	krrtj|rrtsrtjj	tjdd}|S |d
krtj|rtrtjj	tjdd}|S )N__rpow__z<GH#29997: 1**pandas.NA == 1 while 1**pyarrow.NA == NULL for rp   z  not supported betweenpd.NA and z Python scalarr   __rfloordiv__zdivide by 0__rtruediv____pow__z'Invalid decimal function: power_checked)rU  rE   rF   rH   ri   rK   r   rt   ru   rv   r   r   )rz   r   rU   ru   rX  r#   r#   r$   _get_arith_xfail_marker  sz   


	*#



z-TestBaseArithmeticOps._get_arith_xfail_markerc                       |j j}|dkrtj|stj|rtd | ||| _	| 
||}|d ur0|j| |dkr:tj|sFtj|sFtj|rN|td| j t || d S NrV  z%Skip testing Python string formatting__floordiv__rJ  )r%   r    rE   rF   rP   rQ   rt   r   rZ  Zseries_scalar_excr_  rr   rs   ri   rN   rM   setattrr6  rN  rw   test_arith_series_with_scalarrz   rV   all_arithmetic_operatorsr"   monkeypatchrU   ru   r{   r#   r$   rd  5  .   






z3TestBaseArithmeticOps.test_arith_series_with_scalarc                    r`  ra  )r%   r    rE   rF   rP   rQ   rt   r   rZ  Zframe_scalar_excr_  rr   rs   ri   rN   rM   rc  r6  rN  rw   test_arith_frame_with_scalarre  r{   r#   r$   ri  T  rh  z2TestBaseArithmeticOps.test_arith_frame_with_scalarc           
      C   s  |j j}| ||| _|dv r'tj|r'ts'|j	t
jjtjd| d | ||}|d ur7|j	| |}t|}ttj|jd gt| |j d}	tj|smtj|ra|dvsmtj|smtj|ru|td| j | j|||	| jd d S )	NrR  zJImplemented pyarrow.compute.subtract_checked which raises on overflow for r   r   rD   )__truediv__r]  rJ  )rY  )r%   r    rZ  Zseries_array_excrE   rF   rJ   r   rr   rs   rt   ru   rv   r   r_  rS   r   rT   r7  r!  rH   ri   rN   rM   rc  r6  rN  Zcheck_opname)
rz   rV   rf  r"   rg  rU   ru   r   r   rL  r#   r#   r$   test_arith_series_with_arrays  sL   
	

&



	z2TestBaseArithmeticOps.test_arith_series_with_arrayc                    s   |j j}tj|r:tj|s:t|}trd}nd}t	j
t|d ||  W d    d S 1 s3w   Y  d S trBtj|sHtj|rX|jt	jjtd| d n|drm|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   Zint8zraises on overflow for )r%   r    rE   rF   r   rN   rS   r   r   rt   r   rR   r   rG   rr   rs   ru   rv   r   r   rw   $test_add_series_with_extension_array)rz   rV   r"   rU   r   r   r{   r#   r$   rm    s:   




z:TestBaseArithmeticOps.test_add_series_with_extension_array)r}   r~   r   rR   Z
divmod_excclassmethodr8  rE  rN  rU  rZ  r_  rd  ri  rk  rm  r   r#   r#   r{   r$   r6    s    

&:2r6  c                   @   s6   e Zd Zdd Zdd Zejdg ddd Zd	S )
TestBaseComparisonOpsc           
   
   C   s0  t |}t t j|jd gt| |jd}|jdv rH|||}|d |u s*J |d |u s2J |||}||d< ||d< | || d S d }z|||}W n t	ye }	 z|	}W Y d }	~	nd }	~	ww |d u rx|||}| || d S t
t| ||| W d    d S 1 sw   Y  d S )Nr   rD   )eqne   a   )rS   r   rT   r7  r!  r%   r}   r0  r   	Exceptionrt   r   rX   )
rz   rV   comparison_oprm   r   rL  r   r   rY  errr#   r#   r$   test_compare_array  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'>r   )rt   r   rR   object)rz   rV   ru  r#   r#   r$   test_invalid_other_comp  s
   "z-TestBaseComparisonOps.test_invalid_other_compmasked_dtype)booleanZInt64r   c           	      C   s   g d}t j||d}t j||  dd}|||}|tjtjtjfv r+g d}ng d}t j|tt	 d}t
|| d S )N)r+   r   NrD   r   )FFN)TTN)rS   r   loweroperatorltgtrq  r   rE   bool_r   r   )	rz   rz  ru  rV   
ser_maskedser_par   expr   r#   r#   r$   test_comp_masked_numpy  s   

z,TestBaseComparisonOps.test_comp_masked_numpyN)	r}   r~   r   rw  ry  rt   ru   r   r  r#   r#   r#   r$   ro    s
     ro  c                   @   sf  e Zd ZdZdd Zejddg dfej	g dfdg dfe
dg dfd	g d
fe
d	g d
fgdd Zdd Zejddg dfej	g dfdg d
fd	g dfe
dg d
fe
d	g dfgdd Zdd Zejddg dfej	g dfdg dfe
dg dfe
d	g d
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g dd dd}||B }t jg ddd}t|| ||B }t|| t|t jdgd dgd  d gd  dd t|t jg dd dd d S )NTr   Fboolean[pyarrow]rD   TFN)	TTTTFNTNNrS   r   r   r   rz   r9   r:   r   r   r#   r#   r$   test_kleene_or  "   (&zTestLogicalOps.test_kleene_orzother, expectedN)TNNT)TTTFr  c                 C   sf   t jg ddd}||B }t j|dd}t|| ||B }t|| t|t jg ddd d S Nr  r  rD   r  rz   rL  r   r9   r   r#   r#   r$   test_kleene_or_scalar     z$TestLogicalOps.test_kleene_or_scalarc                 C   s   t jdgd dgd  d gd  dd}t jg dd dd}||@ }t jg ddd}t|| ||@ }t|| t|t jdgd dgd  d gd  dd t|t jg dd dd d S )NTr   Fr  rD   r  )	TFNFFFNFNr  r  r#   r#   r$   test_kleene_and4  r  zTestLogicalOps.test_kleene_and)NFNFFFc                 C   sf   t jg ddd}||@ }t j|dd}t|| ||@ }t|| t|t jg ddd d S r  r  r  r#   r#   r$   test_kleene_and_scalarJ  r  z%TestLogicalOps.test_kleene_and_scalarc                 C   s   t jdgd dgd  d gd  dd}t jg dd dd}||A }t jg ddd}t|| ||A }t|| t|t jdgd dgd  d gd  dd t|t jg dd dd d S )NTr   Fr  rD   r  )	FTNTFNNNNr  r  r#   r#   r$   test_kleene_xorc  r  zTestLogicalOps.test_kleene_xorNNN)FTNc                 C   sf   t jg ddd}||A }t j|dd}t|| ||A }t|| t|t jg ddd d S r  r  r  r#   r#   r$   test_kleene_xor_scalary  s   z%TestLogicalOps.test_kleene_xor_scalarzop, exp__and____or____xor__c                 C   s^   g d}t j|dd}t j|dd}t|||}t j|dd gtt d}t|| d S )Nr  r{  rD   r  F)rS   r   r   r   rE   r  r   r   )rz   rM  r  rV   r  r  r   r   r#   r#   r$   test_logical_masked_numpy  s   
z(TestLogicalOps.test_logical_masked_numpy)r}   r~   r   __doc__r  rt   ru   r   rS   rl   r  r  r  r  r  r  r  r  r#   r#   r#   r$   r    sZ    











r  c                  C   s   t jtdd td W d    n1 sw   Y  td} ttdd}| |ks/J t jtdd td W d    d S 1 sGw   Y  d S )NzPassing pyarrow typer   z#not_a_real_dype[s, tz=UTC][pyarrow]ztimestamp[s, tz=UTC][pyarrow]rF  UTCzdecimal(7, 2)[pyarrow])rt   r   rR   r   r   rE   	timestamp)r%   r   r#   r#   r$   Ftest_arrowdtype_construct_from_string_type_with_unsupported_parameters  s   
"r  c                  C   sN   d} d}t jt|d tjtd| d W d    d S 1 s w   Y  d S )Nzint64[pyarrow]foobar[pyarrow]zYPassing pyarrow type specific parameters \(\[pyarrow\]\) in the string is not supported\.r   r   rD   )rt   r   rR   rS   r   range)invalidr   r#   r#   r$   ;test_arrowdtype_construct_from_string_type_only_one_pyarrow  s   "r  interpolation)Zlinearr|  higherZnearestZmidpointquantiler*   c                 C   sR  | j j}| g d} t| }tj|s"tj|s"tj	|rKt
r'd}nd}tjtj|d |j||d W d    d S 1 sDw   Y  d S tj|s_tj|s_tj|r`t
s`ntj| jjrin|jtjjtjd| d | g d} t| }|j||d}tj|r|dvr|jrd	|j d
|j d}nd	|j d}||}	|	j||d}
|dkr|jdkr|
jdd}
||
ksJ d S |jdkr|
jd}
t !||
| j  d S |dkr|| d ksJ d S tj| ddgddgd}
tj|stj|stj|r!|
d}
|d}t !||
 d S )Nr   r   r   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   )r|  r  zM8[z, rH  r*   r  F)warnr   )r  float64[pyarrow])"r%   r    takerS   r   rE   rF   rP   rQ   rG   r   rt   r   r   r  ri   rH   rK   r   r   rX   rr   rs   ru   rv   rM   r   r   r   to_pydatetimedtfloorr   r   )rV   r  r  r"   rU   r   r   r   Zpd_dtypeZser_npr   r#   r#   r$   test_quantile  s   
















r  ztake_idx, exp_idx)r   r   r/   r/   r&   r&   r&   )r   r   r   r/   r&   r&   Z
multi_modeZsingle_mode)r   c                 C   s@   |  |}t|}|jdd}t|  |}t|| d S )NTZdropna)r  rS   r   moder   r   )ra   Ztake_idxZexp_idxrV   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   rD   Fr  )rS   r   r%   r  r   r   )rV   Z	more_nansr   r   r#   r#   r$   test_mode_dropna_false_mode_na  s   r  zarrow_dtype, expected_type   c                 C   s   t | j|ks	J d S r   )r   rX   )Zarrow_dtypeexpected_typer#   r#   r$   test_arrow_dtype_type$  s   r  c                  C   sh   t tg d} t| sJ tjj| sJ tt	t
| }||  }|t|  }t|| d S )NTFT)r   rE   rT   r   rS   corecommonZis_bool_indexerr   r  r!  r  Zasarrayr   r   )rV   rF  r   r   r#   r#   r$   test_is_bool_dtype7  s   r  c                 C   sL   | j j}tj|stj|stj|rt| sJ d S t| r$J d S r   )r%   r    rE   rF   rH   ri   rK   r   rV   r   r#   r#   r$   test_is_numeric_dtypeB  s   


r  c                 C   4   | j j}tj|rt| sJ d S t| rJ d S r   )r%   r    rE   rF   ri   r   r  r#   r#   r$   test_is_integer_dtypeO     r  c                 C   r  r   )r%   r    rE   rF   ri   r   r  r#   r#   r$   test_is_any_integer_dtypeX  r  r  c                 C   r  r   )r%   r    rE   rF   rI   r   r  r#   r#   r$   test_is_signed_integer_dtypea     r  c                 C   r  r   )r%   r    rE   rF   rJ   r   r  r#   r#   r$   test_is_unsigned_integer_dtypei  r  r  c                 C   r  r   )r%   r    rE   rF   rH   r   r  r#   r#   r$   test_is_float_dtypeq  r  r  c                 C   sl   t | }|d}t|}t|}t|t|ksJ t|}t|| t|}t|| d S )Nr/   )	rS   r   headpickledumpsr!  loadsr   r   )rV   r   Zexpected_slicedZfull_pickledZsliced_pickledr   Zresult_slicedr#   r#   r$   test_pickle_roundtripy  s   





r  c                 C   sH   | j  j}|| j}t|jtrJ t|jtsJ t||  d S r   )	r   	to_pandasrT   r   r%   r   r   r   r   )rV   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(   rD   )rS   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|rtt	| }nt| j}| j
r2|t}tj|t| < t|| d S r   )to_numpyr   rX   rE   rF   rN   rM   r  rT   listZ_hasnar   rx  rS   rl   r  r   assert_numpy_array_equal)rV   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s"J t	|| d S )Nr+   r   rD   r   )
rS   rT   r  r  rl   rx  r   intr   r  )rV   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]rD   r   )r%   rm   r/   rS   rT   rl   r  r  r   r  )Zna_valr  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  rD   r/   rx  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   rX   r-   )
copyr   rE   rT   r!  r   rX   r   r   tolist)rV   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|s)tj|s)tj	|r1d}tj
}d}nd}t}d}tj||d || d d < W d    d S 1 sPw   Y  d S )N{   zInvalid value '123' for dtypefoozCould not convertzInvalid value 'foo' for dtyper   )r   rX   rE   rF   rP   rQ   r   ri   rH   rG   r   rt   r   )rV   r   Z
fill_valuerv  r   r#   r#   r$   test_setitem_invalid_dtype  s(   


"r  zreturns object with 7.0rp   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_mapperrD   )rE   rT   rS   	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   sj   t jddgt  d} tjt jdd | jt  tt  ij	d W d    d S 1 s.w   Y  d S )Nr         @r  zFloat value 1.5 was truncatedr   r  )
rE   rT   r   rt   r   r   r  r   r   r  )rT   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@rD   r+   g333333?g@g^@gp=
cL@r-   g      ^@g      N@)rS   r   rl   roundr   r   )r%   r   r   r   r#   r#   r$   
test_round	  s   

r  c                 C   sr   | \}}}|  g d}tj|d< |rt|}d}tjt|d || W d    d S 1 s2w   Y  d S )N)r/   r   r+   r-   zOsearchsorted requires array to be sorted, which is impossible with NAs present.r   )r  rS   rl   r   rt   r   r   Zsearchsorted)re   r4  r:   r\   r9   r  r   r#   r#   r$    test_searchsorted_with_na_raises  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  rD   r+   )
rS   r   r   rE   r   r  r   int32r   r   )r  r   r   r   r#   r#   r$   test_str_count(     r  c                  C   s^   t jdd gtt d} tjtdd | jj	ddd W d    d S 1 s(w   Y  d S )Nr  rD   z	count notr   r+   flags)
rS   r   r   rE   r   rt   r   rR   r  r   r   r#   r#   r$    test_str_count_flags_unsupported0     "r  zside, str_funcr:  rjustr;  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 )Nr9   rD   r   rA  )widthsideZfillchar)
rS   r   r   rE   r   r  padr   r   r   )r  Zstr_funcr   r   r   r#   r#   r$   test_str_pad6  s   r  c                  C   s^   t jdd gtt d} tjtdd | j	ddd W d    d S 1 s(w   Y  d S )Nr9   rD   zInvalid side: foor   r   r  rA  )
rS   r   r   rE   r   rt   r   r   r  r  r  r#   r#   r$   test_str_pad_invalid_sideB  r  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  rD   )casenaregex)
rS   r   r   rE   r   r  containsr  r   r   )r  r  r  r  r  r   r   r   r#   r#   r$   test_str_containsH  s   r  c                  C   ^   t jdd gtt d} tjtdd | jj	ddd W d    d S 1 s(w   Y  d S )Nr  rD   zcontains notr   r9   r+   r  )
rS   r   r   rE   r   rt   r   rR   r  r  r  r#   r#   r$   #test_str_contains_flags_unsupportedY  r  r  zside, pat, na, exp
startswithr:   endswithbcc                 C   sT   t jdd gtt d}t|j| ||d}t j|tt d}t	|| d S )Nr  rD   )r  
rS   r   r   rE   r   r   r  r  r   r   )r  r  r  r  r   r   r   r#   r#   r$   test_str_start_ends_with_  s   
r  zarg_name, argreplr  r  r+   c                 C   st   t jdd gtt d}dddd}||| < tjtdd |jj	d	i | W d    d S 1 s3w   Y  d S )
Nr  rD   r:   rA  T)r  r  r  zreplace is not supportedr   r#   )
rS   r   r   rE   r   rt   r   rR   r  replace)Zarg_nameargr   r<  r#   r#   r$   test_str_replace_unsupportedo  s   "r
  zpat, repl, n, regex, expr9   rA  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abacrD   )nr  )	rS   r   r   rE   r   r  r  r   r   )r  r  r  r  r  r   r   r   r#   r#   r$   test_str_replace{  s   	r  c                  C   s^   t jdd gtt d} tjtdd | j	ddg W d    d S 1 s(w   Y  d S )Nr  rD   zrepeat is notr   r+   r/   )
rS   r   r   rE   r   rt   r   rR   r  repeatr  r#   r#   r$   test_str_repeat_unsupported  r  r  zUnsupported for pyarrow < 7r   c                  C   P   t jdd gtt d} | jd}t jdd gtt d}t|| d S )Nr  rD   r/   Zabcabc)	rS   r   r   rE   r   r  r  r   r   r  r#   r#   r$   test_str_repeat  s   r  zpat, case, na, expc                 C   R   t jdd gtt d}|jj| ||d}t j|tt d}t	|| d S Nr  rD   )r  r  
rS   r   r   rE   r   r  r   r  r   r   r  r  r  r  r   r   r   r#   r#   r$   test_str_match     r  ZAbcc                 C   r  r  r  r  r#   r#   r$   test_str_fullmatch  r  r  zsub, start, end, exp, exp_typr   r/   c                 C   sN   t jdd gtt d}|jj| ||d}t j|t|d}t|| d S )Nr  rD   )startend)	rS   r   r   rE   r   r  findr   r   )subr  r  r  Zexp_typr   r   r   r#   r#   r$   test_str_find  s   r  c                  C   r   )Nr  rD   zfind not implementedr   r  r+   )r  )
rS   r   r   rE   r   rt   r   rR   r  r  r  r#   r#   r$   test_str_find_notimplemented  r  r  zi, exp)r:   eN)r\   r  N)r\   NN)r9   NNr  c                 C   sL   t jg dtt d}|j| }t j|tt d}t|| d S )N)r  deNrD   )	rS   r   r   rE   r   r  r  r   r   )ir  r   r   r   r#   r#   r$   test_str_get  s   r"  z=TODO: StringMethods._validate should support Arrow list typesc                  C   sX   t tttdtdd g} | jd}t jg dtt	 d}t
|| d S )Nr  123=)za=b=cz1=2=3NrD   )rS   r   r   rE   rT   r  r  joinr   r   r   r   r  r#   r#   r$   test_str_join  s   "r&  zstart, stop, step, expc                 C   P   t jdd gtt d}|j| ||}t j|tt d}t|| d S NabcdrD   )	rS   r   r   rE   r   r  slicer   r   )r  stopstepr  r   r   r   r#   r#   r$   test_str_slice     	r-  zstart, stop, repl, expZaxcdZxcdcdc                 C   r'  r(  )	rS   r   r   rE   r   r  Zslice_replacer   r   )r  r+  r  r  r   r   r   r#   r#   r$   test_str_slice_replace  r.  r0  zvalue, method, exp)Za1cisalnumT)z!|,r1  F)aaaisalphaT)z!!!r3  F)u   ٠	isdecimalT)z~!r4  F)r;   isdigitT)~r5  F)r2  islowerT)ZaaAr7  F)r#  	isnumericT)Z11Ir8  F) isspaceT) r:  F)zThe ThatistitleT)zthe Thatr<  F)ZAAAisupperT)ZAAcr=  Fc                 C   sR   t j| d gtt d}t|j| }t j|d gtt d}t	|| d S )NrD   r  )valuer  r  r   r   r   r#   r#   r$   test_str_is_functions  s   r?  zmethod, exp
capitalizezAbc deftitlezAbc DefswapcasezAbC Defr|  z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 dEFrD   	rS   r   r   rE   r   r   r  r   r   )r  r  r   r   r   r#   r#   r$   test_str_transform_functions)  s   rF  c                  C   sN   t jdd gtt d} | j }t jdd gtt d}t	|| d S )Nr)  rD   r&   )
rS   r   r   rE   r   r  r!  r  r   r   r  r#   r#   r$   test_str_len;  s   
rG  zmethod, to_strip, val)rD  Nz abc )rD  rA  Zxabcx)lstripNz abc)rH  rA  Zxabc)rstripNzabc )rI  rA  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 )NrD   )to_stripr  rE  )r  rJ  valr   r   r   r#   r#   r$   test_str_stripB  s   rL  rK  Zabc123c                 C   P   t j| d gtt d}|jd}t jdd gtt d}t|| d S NrD   r#  r  )	rS   r   r   rE   r   r  removesuffixr   r   rK  r   r   r   r#   r#   r$   test_str_removesuffixT  r  rQ  Z123abcc                 C   rM  rN  )	rS   r   r   rE   r   r  removeprefixr   r   rP  r#   r#   r$   test_str_removeprefix\  r  rS  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  rD   )
rS   r   r   rE   r   r  encodebinaryr   r   )rT  encodingr  r   r   r   r#   r#   r$   test_str_encoded  s   	r]  c                 C   s^   t jg dtt d}|jjd| d}t jdgg d gttt d}t	|| d S )N)r  ZefgNrD   r:   r  )
rS   r   r   rE   r   r  findalllist_r   r   )r  r   r   r   r#   r#   r$   test_str_findalls  s   $r`  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 d    d S 1 sGw   Y  d S )NabcbarD   r\   r/   zsubstring not foundr   r  )rS   r   r   rE   r   r   r  r   r   r   rt   r   r   )r  r  r  r   r   r   r#   r#   r$   test_str_r_index{  s   	"rc  formNFCNFKCc                 C   s>   t jdd gtt d}|j| }| }t	|| d S rY  )
rS   r   r   rE   r   r  r  r  r   r   )rd  r   r   r   r#   r#   r$   test_str_normalize  s   rg  c                 C   sT   t jg dtt d}|jd| |}t jg dtt d}t	|| d S )N)rb  r  NrD   r\   )r/   r-   N)
rS   r   r   rE   r   r  rfindr   r   r   )r  r  r   r   r   r#   r#   r$   test_str_rfind  s   ri  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 )Nrb  rD   rs  r:   Zbbcbb)	rS   r   r   rE   r   r  	translater   r   r  r#   r#   r$   test_str_translate  s   rk  c                  C   r  )Nrb  rD   r   zabc
ba)	rS   r   r   rE   r   r  wrapr   r   r  r#   r#   r$   test_str_wrap  s   rm  c                  C   sb   t jg dtt d} | j }t jg dg dg dgtt g dd}t	
|| d S )N)za|bNza|crD   )TTFr  r  )r9   r:   r\   )r%   r   )rS   r   r   rE   r   r  Zget_dummiesr   r  r   r  r  r#   r#   r$   test_get_dummies  s   

rn  c                  C   s  t jdd gtt d} | jd}t jg dg dgtt d}t	|| | jjddd}t t
tg dd g}t|| | jd}t jg dg dgtt d}t	|| | jjddd}t t
tg dd g}t|| d S )	Nrb  rD   r:   )r9   r:   Zcbar  F)expand)r  r:   r9   )rS   r   r   rE   r   r  	partitionr   r   r  r   rT   r   
rpartitionr  r#   r#   r$   test_str_partition  s"   rr  c                  C   s  t jg dtt d} | jd}t ttg dg d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g dttg dd}t	|| d S )NZa1cbcbZa2cbcbNrD   r\   a1r:   r:   a2r:   r:   r+   r  ru  Zbcbrw  z[1-2]T)r  r9   cbcb)r  ro  )r9   r9   N)ry  ry  Nr   r+   )rS   r   r   rE   r   r  splitr   rT   r   r   r   r  r  r#   r#   r$   test_str_split  s.   r|  c                  C   s   t jg dtt d} | jd}t ttg dg d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g dttg dd}t	|| d S )Nrs  rD   r\   rt  rv  r+   rx  a1cbr:   a2cbT)r  ro  )r}  r~  N)r:   r:   Nrz  )rS   r   r   rE   r   r  rsplitr   rT   r   r   r   r  r  r#   r#   r$   test_str_rsplit  s$   r  c                  C   sZ   t jdd gtt d} tjtdd | j	d W d    d S 1 s&w   Y  d S )Nr  rD   z,str.extract not supported with pd.ArrowDtyper   z[ab](\d))
rS   r   r   rE   r   rt   r   rR   r  extractr  r#   r#   r$   test_str_unsupported_extract	  s   "r  r   )r   r  rG  rF  c                 C   sF   ddg}t | }tj||d}tt jdd g|d}t|| d S )NZ1000NaTrD   i  r  )rE   durationr   r   rT   r   r   )r   stringsr   r   r   r#   r#   r$   #test_duration_from_strings_with_nat	  s
   
r  c                 C   sX   | j j}tj|s*tjtdd t	| j
 W d    d S 1 s#w   Y  d S d S )Nz2Can only use .dt accessor with datetimelike valuesr   )r%   r    rE   rF   r   rt   r   AttributeErrorrS   r   r  rj   r#   r#   r$   test_unsupported_dt	  s   "r  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microsecondr8   month
nanosecond   Zquartersecondrc   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	r+t
 }n
t|tr5td
}t ttj|d g|d}t|| d S )Nr  r+   r/   r   r&   rc   r8   r  )r  r  r  r  r  r  r  r  r   rD   r  )rS   r   r  r   rE   r  r   r  r   r   r  r   time64r   rT   r   r   )propr   r   r   Zexp_typer#   r#   r$   test_dt_properties&	  s.   




r  r  r   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 )	Nr  r+   r/   r   r  r  r  r  rD   r   r  )rS   r   r   r   rE   r  r  r   r   rT   r  r   r   )r   r   r   r   r#   r#   r$   test_dt_time_preserve_unit_	  s    r  r   )Nr  
US/Pacificc                 C   sD   t jtdddddd gttjd| dd}|jj}|| ks J d S )	Nr  r+   r/   r   r  r   r   rD   )rS   r   r   r   rE   r  r  r   )r   r   r   r#   r#   r$   
test_dt_tzl	  s   r  c                  C   sb   t jtdddddd gttdd} | j }t jg dg d	gg d
dd}t	
|| d S )Nr  r+   r/   r   r  r   rD   )r  r+   r+   r  )r  weekr  r   )r   r%   )rS   r   r   r   rE   r  r  isocalendarr   r   r  r  r#   r#   r$   test_dt_isocalendarv	  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   r  r+   r/   r   r  r   rD   z%Y-%m-%dT%H:%M:%Sz2023-01-02T03:00:00.000000000)r   r   rr   rs   rt   ru   rv   rE   r   rS   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 d    n1 s0w   Y  tjtdd	 t	|j
| d
dd W d    d S 1 sRw   Y  d S )Nr  r+   r/   r   r  r   rD   zambiguous is not supported.r   Z1Hr  Z	ambiguousznonexistent is not supported.nonexistent)rS   r   r   r   rE   r  rt   r   rR   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 d    n1 s.w   Y  tjtdd	 t	|j
| d  W d    d S 1 sNw   Y  d S )Nr  r+   r/   r   r  r   rD   zfreq='1B' is not supportedr   Z1Bz$Must specify a valid frequency: None)rS   r   r   r   rE   r  rt   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 )Nr  r+   )r  r  r  r   r0   )rS   r   r   r   rE   r  r   r  r   r   r   )r  r  r   rU   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 s5J |dj }t|| d S )	Nr2   r+   r  r   rD   c                 s   s    | ]	}t |tu V  qd S r   )rX   r   ).0resr#   r#   r$   	<genexpr>	  s    z(test_dt_to_pydatetime.<locals>.<genexpr>zdatetime64[ns])r   rS   r   r   rE   r  r  r  r  rT   rx  r   r  allr   )rV   r   r   r   r#   r#   r$   test_dt_to_pydatetime	  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 d    n1 s.w   Y  tjtdd	 | j	j
d
dd W d    d S 1 sNw   Y  d S )Nr  r+   r/   r   r  r   rD   z ambiguous='NaT' is not supportedr   r  r  r  z"nonexistent='NaT' is not supportedr  )rS   r   r   r   rE   r  rt   r   rR   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 )
Nr  r+   r/   r   r  r   r  r  rD   )
rS   r   r   r   rE   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   r  r+   r/   r   r  rD   r  r  r   r   rr   rs   rt   ru   rv   rE   r   rS   r   r   r   r  r  r  rT   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_forwardr4   r  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   r  r   r4   r/      )r  r  r  r  r  r   rD   r  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}||u s J d S )Nr  rD   r   r  )rS   r   r   rl   )r   r   r   r   r   r#   r#   r$   #test_boolean_reduce_series_all_null 
  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 foxrD   )rE   rT   r{  rS   r   r   r   r   )r%   r  r   r   r#   r#   r$   test_series_from_string_array,
  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s(J d S )Nih6 rD   F)	r   rE   Zchunked_arrayr  Zonesr  r  Zzerosr   )r  r  r   r#   r#   r$   /test_setitem_boolean_replace_with_mask_segfault4
  s
   r  r   c                 C   sN   t jg dt| d}| }t jg dtt g dd}t|| d S )N)r+   r/   r   rD   )r   r/   r+   r+   r   g       @r  r   )r   r   r   minz25%z50%z75%max)r%   r  )rS   r   r   ZdescriberE   r   r   r   )r   rV   r   r   r#   r#   r$   test_describe_numeric_data=
  s   
r  rl  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   rD   r/   )
rS   to_datetimeZto_timedeltar   r   rE   r  r  r   r   )Zdata_tsZdata_tdZser_tsZser_tdr   r   r#   r#   r$   2test_duration_overflow_from_ndarray_containing_natJ
  s   r  )r  r   r   r   r   decimalr   ior   r   r}  r  renumpyr  rt   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pandasrS   Zpandas._testingZ_testingr   Zpandas.api.typesr   r   r   r   r   r   r   Zpandas.tests.extensionr   ZimportorskiprE   Zpandas.core.arrays.arrow.arrayr   Zpandas.core.arrays.arrow.dtyper   ZfixtureZALL_PYARROW_DTYPESr  r%   rV   rZ   r[   ra   re   rg   rk   rm   ZBaseCastingTestsro   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  rI  r6  ZBaseComparisonOpsTestsro  r  r  r  ru   r   r  r  r  r[  bytesZlarge_binaryZlarge_stringr_  r   r  Z
large_listZmap_r   dict
dictionaryr  r  r  r  r  r  r  r  r  r  r  r  r  Z
no_defaultr  r  r  r  r  Zskipifr  r  r  r  r  r  r  r  r  r  r  compiler
  r  r  rv   rR   r  r  r  r  r  r  r"  r  r&  r-  r0  r?  rF  rG  rL  rQ  rS  r]  r`  rc  rg  ri  rk  rm  rn  rr  r|  r  r  r  r  r!   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ZALL_INT_PYARROW_DTYPESZFLOAT_PYARROW_DTYPESr  r   r  r#   r#   r#   r$   <module>   s   $	$	

;


:


	
FRb#4S'   37 "L




			





	

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













		

	

	
	