o
    Eh.                    @  s(  d Z ddlm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 dd	lmZmZmZmZmZmZmZmZmZ dd
l m!Z!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/m0Z0m1Z1 ddl2m3Z3 e4dZ5ddl6m7Z7 ddl8m9Z9 dd Z:ej;e'j<e=ddd Z>ej;dd Z?ej;dd Z@ej;ddgddd ZAej;dd ZBej;dd  ZCej;d!d" ZDej;d#d$ ZEG d%d& d&e3jFZGG d'd( d(ZHejIJd)e'jKd*d+ ZLd,d- ZMd.d/ ZNd0d1 ZOd2d3 ZPd4d5 ZQejIJd6g d7ejIJd8d9d9d9ggd:d; ZRejIjJd<g d=d>dggg d?dgggd@dAgdBdCdD ZSdEdF ZTejIJdGe5U eVge5UdHeVge5W eVge5X e=ge5Ye5Z e[ge5\e5Z e[ge5]e5^ e5Z e[ge5_dIe5` fdJe5^ fgeage5be5Z e5Z e"gg	dKdL ZcdMdN ZddOdP ZedQdR ZfdSdT ZgdUdV ZhdWdX ZidYdZ Zjd[d\ Zkd]d^ Zld_d` Zmdadb Zndcdd ZoejIJdeej)ejpfdfgdgdh Zqdidj Zrdkdl Zsdmdn Ztdodp Zudqdr Zvdsdt Zwdudv Zxdwdx Zydydz ZzejIJd{d|d}gd~d Z{dd Z|ejIJdddgddgddggdd Z}dd Z~ejIJdddddddggddddddggddddddggddddddggddddddgggdd Zdd ZejIJddddg dgdddg dgdddg dgdddg dgdddg dgdddg dgdddg dgdddg dggdd ZejIJdddd ZejIJdd{edgde=gddgddggdd ZejIJdddddddggddddddggddddddgggdd Zdd Zdd Zdd ZejIJddddddggdddddggdddddggdddddggdddddggdddddgggddĄ ZejIJdd|ddg dŢgdddg dǢgdddg dǢgdddg dǢgd}ddg dŢgdddg dǢgdddg dŢgdddg dʢgdddg dǢgdddg dǢgdddg dŢgdddg dŢggddЄ ZejIJddddddge5 gdddddge5Z ggddԄ Zddք Zdd؄ Zddڄ Zdd܄ ZejIjeddލejIJdg dejIJdg dejIJdg ddd Zdd ZejIJddg dgdg dgdg dgdg dgd>g dggdd ZejIjdeddd Zdd ZejIJddddddggdddddggdddddggdddddgfgdd ZejIJddddddggdddddggdddd dgggdd ZejIJ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gdd ZejIJ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jIJd(g d)g d*g d+g d,g d-g d.gd/d0 ZejIJd1d2d|gd3d4 ZejIJd1d5d|gd6d7 ZejIJd8d9d:gejIJd;d<d=gd>d?ggd@dA ZejIJdddgdBdC ZejIJdDdEdFgejIJdGddgdd>ggdHdI ZejIJdJdKdLgdMdN ZejIJdGddgdd>ggdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZejIJdDdYdZgd[d\ Zd]d^ Zd_d` Zdadb ZejIJdcddgddde Zdfdg ZejIJdhg didjdk Zdldm ZejIJdndodpgdqdgdrdgdsdgdtdgdudgdvdgdwdgdxd>gdydgdzd{gd|dgd}d~gddgddgdedpddgdedd>dd{ggdd Zdd Zdd Zdd ZejIJdDddgdd Zdd ZejIJdhddgdd ZejIJdg ddd Zdd ZejIJdddgddggdd Zdd ZejIJdDg ddd ZejIJdDg ddd ZejIJdg dejIJdDg ddd Zdd ZejIJdddgdd Zdd Zdd ZejIJdhddgdd ZejIJddedpdҐddҐdgde$Ődggdd ZƐddÄ ZǐdĐdń ZejIJdhddgdƐdǄ ZejIJddȐdgdʐd˄ ZejIJdnddgddgddgdd>ggdАdф ZːdҐdӄ Z̐dԐdՄ Z͐d֐dׄ ZejIJdddgdِdڄ Zϐdېd܄ ZАdݐdބ ZejIJddߐdgdd ZG dd de7ZӐdd ZԐdd ZejIJdddge5W fddge5X fgdd Z֐dd ZejIJd)e'jKe'j dd ZejIJd)e'jڡdd ZejIJd)e'jܡdd ZejIJd)e'je'j dd Zސdd Zߐdd Zdd ZejIJd)e'je'j dd ZejIJd)e'je'j d d ZejIJd)e'je'j dd ZejIJd)e'je'j dd ZejIJd)e'je'j dd ZejIJd)e'je'j dd	 Zd
d ZejIjJd)e'je'j edBejIJddegdd Zdd Zdd Zdd Zdd ZejIJd)e'jڡdd Zdd Zdd Zdd Zdd Zd d! ZejIJdd"d#gd$d% ZejIJd)e'jd&d' ZejIJd)e'jd(d) ZejIJde'jd*d+ ZejIJdg d,d-d. ZejIJd)e'jKd/d0 ZejIJdd"d#gd1d2 ZejIJdd"d#gd3d4 Zd5d6 Z ejIjed7dލd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdS (B  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/`.
    )annotations)datedatetimetime	timedelta)Decimal)BytesIOStringION)lib)	timezones)	PY311PY312is_ci_environmentis_platform_windowspa_version_under11p0pa_version_under13p0pa_version_under14p0pa_version_under20p0pa_version_under21p0)
ArrowDtype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pyarrow)ArrowExtensionArray)ArrowPeriodTypec                 C  s4   t  rt rtjjtjdd}| | d S d S d S )Nz_TODO: Set ARROW_TIMEZONE_DATABASE environment variable on CI to path to the tzdata for pyarrow.raisesreason)r   r   pytestmarkxfailpaArrowInvalidapplymarker)requestr'    r-   Alib/python3.10/site-packages/pandas/tests/extension/test_arrow.py_require_timezone_databaseH   s   r/   )paramsidsc                 C  s   t | jdS )N)pyarrow_dtype)r   param)r,   r-   r-   r.   dtypeT   s   r4   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   !   >r4   )r2   r)   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)r4   pa_dtypedatar-   r-   r.   rd   Y   s   0000*..rd   c                 C  s   t | jd| d g| jdS )zLength-2 array with [NA, Valid]Nr   rS   type_from_sequencer4   )rd   r-   r-   r.   data_missing   s   rh   )r0   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.
    rd   rh   N)r3   )r,   rd   rh   r-   r-   r.   all_data   s
   

ri   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
    FTgr8   g?r<   r   r:   rF   rB   rC   rD   i  rA   rE   r5   rH   rI   crM   rN      cz-1.1r@   z1.1NrS   )r2   r)   rT   rU   rV   rW   rX   rZ   r   r[   r   r\   r   r]   r   r^   r_   rY   r   r`   ra   rb   )r4   rc   ABCr-   r-   r.   data_for_grouping   s^   	


ro   c                 C  &   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      r5   rS   re   ro   r-   r-   r.   data_for_sorting      rs   c                 C  rp   )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>   r5   rS   re   rr   r-   r-   r.   data_missing_for_sorting   rt   ru   c                 C  sR   | j j}tj|stj|s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   rS   )
r4   r2   r)   rT   
is_integerrV   rY   r\   ra   rb   rd   rc   r-   r-   r.   data_for_twos   s   



ry   c                      s  e Zd Zdd Zejdddgdd Z fdd	Z fd
dZ	dd Z
dd Zdd Zdd ZdpddZejdddg fdd Zdpd!d"Zdqd#d$Zejdddg fd%d&Zejdddg fd'd(Zdrd)d*Zejdddg fd+d,Zejd-g d.d/d0 Z fd1d2Z fd3d4Zd5d6 Z fd7d8Z fd9d:Zejjd;dd< fd=d>Zd?d@ ZejjdAdd< fdBdCZejjdAdd< fdDdEZ ejdFdGe!gejdHdIdJgdKdL Z" fdMdNZ#ejdOdPdQg fdRdSZ$dTdU Z%dVZ&dWdX Z'dsdYdZZ(d[d\ Z)dtd^d_Z*d`da Z+ fdbdcZ, fdddeZ-dfdg Z. fdhdiZ/djdk Z0ejdlg dmdndo Z1  Z2S )uTestArrowArrayc                 C  s"   t |}| ||||d  d S )Nr   )ra   SeriesZ_compare_other)selfrd   comparison_opserr-   r-   r.   test_compare_scalar  s   
z"TestArrowArray.test_compare_scalar	na_actionNignorec                 C  s   |j jdv r|jdd |d}|jtd}t|| d S |jdd |d}|j dkr4|jdtjd	}n| }t|| d S )
NZmMc                 S     | S Nr-   xr-   r-   r.   <lambda>      z)TestArrowArray.test_map.<locals>.<lambda>r   rS   c                 S  r   r   r-   r   r-   r-   r.   r     r   float32[pyarrow]float64r4   na_value)	r4   kindmapto_numpyobjecttmassert_numpy_array_equalnpnan)r|   rh   r   resultexpectedr-   r-   r.   test_map  s   
zTestArrowArray.test_mapc                   s|   |j j}tj|r|tjjd| dd n|s6tj	|r&|j
d u s,tj|r6|tjjdd t | d S )NzFor z .astype(str) decodes.r%   z8pd.Timestamp/pd.Timedelta repr different from numpy repr)r4   r2   r)   rT   r_   r+   r&   r'   r(   r[   tzr\   supertest_astype_str)r|   rd   r,   Zusing_infer_stringrc   	__class__r-   r.   r   "  s&   



zTestArrowArray.test_astype_strc                   s`   |j j}tj|stj|r(tj|rd}nd| }|tjj	|d t
 | d S )Nz1ArrowDtype(pa.string()) != StringDtype('pyarrow')$pyarrow.type_for_alias cannot infer r   )r4   r2   r)   rT   r^   rY   r+   r&   r'   r(   r   test_from_dtype)r|   rd   r,   rc   r%   r   r-   r.   r   5  s   
zTestArrowArray.test_from_dtypec                 C  sp   t |j|j|jd}t|| t|jtjsJ t |j|j	 |jd}t|| t|jtjs6J d S NrS   )
rf   rg   	_pa_arrayr4   r   assert_extension_array_equal
isinstancer)   ZChunkedArraycombine_chunksr|   rd   r   r-   r-   r.   test_from_sequence_pa_arrayD  s   z*TestArrowArray.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-1rS   )r&   r$   r`   r!   _from_sequence_of_stringsr)   Zmonth_day_nano_interval)r|   r,   r-   r-   r.   *test_from_sequence_pa_array_notimplementedQ  s
   
"z9TestArrowArray.test_from_sequence_pa_array_notimplementedc                 C  s   |j j}tj|r|drts|tj	j
dd n-tr:tj|s*tj|r:|tj	j
tjd| d ntj|rI|jd urIt| |jt }t|j||j d}t|| | }t|j||j d}t|| d S )Nz
time64[ns]z&Nanosecond time parsing not supported.r   z pyarrow doesn't support parsing r#   rS   )r4   r2   r)   rT   Z	is_time64equalsr   r+   r&   r'   r(   r   r\   rY   ArrowNotImplementedErrorr[   r   r/   r   caststringrf   r   r   r   r   )r|   rd   r,   rc   pa_arrayr   r-   r-   r.   &test_from_sequence_of_strings_pa_arrayW  s4   

z5TestArrowArray.test_from_sequence_of_strings_pa_arrayc                 C  s   t |||d}|jj}tj|r&|jdkrd}nd}||}||}|d}t |d||d}tj	||dd d S )Nskipna    int32[pyarrow]int64[pyarrow]Float64F)Zcheck_dtype)
getattrr4   r2   r)   rT   is_temporalZ	bit_widthastyper   assert_series_equal)r|   r~   op_namer   r   pa_typeZint_typer   r-   r-   r.   check_accumulates  s   



zTestArrowArray.check_accumulater~   	pd.Seriesr   strreturnboolc                 C  s   |j j}tj|stj|r|dv rdS dS tj|r&|dkr$dS dS tj|r4|dv r2dS dS tj|rL|dkrFtj	|sFdS |dkrLdS dS )N)cumsumcumprodcummaxcumminFr   )r   r   r   r   T)
r4   r2   r)   rT   r_   rY   r^   rU   r   r\   )r|   r~   r   r   r-   r-   r.   _supports_accumulation  s&   	z%TestArrowArray._supports_accumulationr   TFc           
        s   |j j}|}tj|r|dv rd S t|}| ||s%t 	|||S t
rO|dkrO|jj}|jr?d|jv r?t| d tjj| dd}	||	 n |dkrotj|s_tj|ro|tjj| d| td | ||| d S )N)r   r   r   r   znot slowz  not implemented for pyarrow < 9r   z not implemented for r%   r$   )r4   r2   r)   rT   r^   ra   r{   r   r   test_accumulate_seriesr   ZconfigoptionZmarkexprr&   skipr'   r(   r+   rU   rY   	TypeErrorr   )
r|   rd   Zall_numeric_accumulationsr   r,   r   r   r~   Zoptr'   r   r-   r.   r     s>   


z%TestArrowArray.test_accumulate_seriesc                 C  s   |dks
t r|dkrdS |j}|j}tj|r)|dv r)tj|r'|dv r'n dS tj|r5|dv r5dS tj|sAtj|rG|dv rGdS tj|rYtj|sY|dv rYdS d	S )
NkurtskewF)sumvarr   r   prod)r   )r   r   )meanmedianr   stdsemr   r   r   )anyallT)	r   r4   r2   r)   rT   r   r\   r_   r^   )r|   r~   r   r4   rc   r-   r-   r.   _supports_reduction  s.   




z"TestArrowArray._supports_reductionc                 C  s   |j j}tj|stj|r|d}n|}|dkr)t|| }t|| }nt|||d}t|||d}t	|| d S )Nr   countr   )
r4   r2   r)   rT   rw   rV   r   r   r   Zassert_almost_equal)r|   r~   r   r   rc   altr   r   r-   r-   r.   check_reduce  s   zTestArrowArray.check_reducec                   s   |j }|j}tjjt| dtj d| d}tj	|r'|dv r'|
| n$tsK|dkrKtj	|sA|rKtj|sAtj|rK|
tjjdd t ||| d S )N is not implemented in pyarrow= for r#   >   r   r   r   r   r   z,https://github.com/apache/arrow/issues/45733r   )r4   r2   r&   r'   r(   r   r)   __version__rT   rU   r+   r   rw   rV   r   test_reduce_series_numeric)r|   rd   all_numeric_reductionsr   r,   r4   rc   
xfail_markr   r-   r.   r   	  s:   


z)TestArrowArray.test_reduce_series_numericc                   s\   |j j}tjjt| dtj d| d}tj	|s!tj
|r&|| t |||S )Nr   r   r#   )r4   r2   r&   r'   r(   r   r)   r   rT   r^   r_   r+   r   test_reduce_series_boolean)r|   rd   all_boolean_reductionsr   r   r,   rc   r   r   r-   r.   r   0  s   
z)TestArrowArray.test_reduce_series_booleanc                 C  s   |j j}|dv r|j}|S |jjdkr0|dkr#ts#ttdd}|S |dvr,|j}|S d}|S |dv r8d}|S |dkrGtj	|rG|j}|S d	d
dd|jj
 }|S )N)maxminzdecimal128(7, 3)[pyarrow]r   &      )r   r   r   r   float64[pyarrow])r   r   r   r   r   r   uint64[pyarrow])iuf)r   rf   r4   namer   r   r)   Z
decimal128rT   r^   r   )r|   arrr   r   r   Z	cmp_dtyper-   r-   r.   _get_expected_reduction_dtypeC  s4   	z,TestArrowArray._get_expected_reduction_dtypec                   s@   |}|dkrt r|jjrtjjdd}|| t |||S )Nr   zskew not implementedr   )	r   r4   _is_numericr&   r'   r(   r+   r   test_reduce_frame)r|   rd   r   r   r,   r   r'   r   r-   r.   r   [  s   
z TestArrowArray.test_reduce_frametyp)int64Zuint64r   c                 C  s,   t jddg| dd }|dksJ d S )Nr:   r>   	[pyarrow]rS         ?)ra   r{   r   )r|   r   r   r-   r-   r.   test_median_not_approximated  s   z*TestArrowArray.test_median_not_approximatec                   s   |j }tj|r|tjjtd| d tj	|r?d}tj
t|d ||j W d    d S 1 s8w   Y  d S t | d S )Nr   r#   z6string\[pyarrow\] should be constructed by StringDtyper   )r2   r)   rT   rY   r+   r&   r'   r(   r`   r^   r$   r   construct_from_stringr   r   #test_construct_from_string_own_name)r|   r4   r,   rc   msgr   r-   r.   r   j  s"   
z2TestArrowArray.test_construct_from_string_own_namec                   sb   |j }tj|rt||jrJ d S tj|r)|t	j
jtd| d t | d S )Nr   r#   )r2   r)   rT   r^   rf   Zis_dtyper   rY   r+   r&   r'   r(   r`   r   test_is_dtype_from_namer|   r4   r,   rc   r   r-   r.   r   ~  s   z&TestArrowArray.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)r&   r$   r   rf   r   )r|   r4   r   r-   r-   r.   .test_construct_from_string_another_type_raises  s   "z=TestArrowArray.test_construct_from_string_another_type_raisesc                   sv   |j }tj|s&tj|s&tj|r|jd us&tj|s&tj|r3|	t
jj| dd t | d S )NzB does not have associated numpy dtype findable by find_common_typer   )r2   r)   rT   rZ   r]   r[   r   r_   rY   r+   r&   r'   r(   r   test_get_common_dtyper   r   r-   r.   r     s$   





z$TestArrowArray.test_get_common_dtypec                   s2   |j }tj|rt|sJ d S t | d S r   )r2   r)   rT   r^   r   r   test_is_not_string_type)r|   r4   rc   r   r-   r.   r     s   z&TestArrowArray.test_is_not_string_typez6GH 45419: pyarrow.ChunkedArray does not support views.)r%   runc                      t  | d S r   )r   	test_viewr|   rd   r   r-   r.   r        zTestArrowArray.test_viewc                 C  s`   ||    }|d }||}||usJ t|| |jdd}||us(J t|| d S )Nr   Zbackfill)method)isnafillnar   r   )r|   rd   Zvalidr   r-   r-   r.   test_fillna_no_op_returns_copy  s   
z-TestArrowArray.test_fillna_no_op_returns_copyz5GH 45419: pyarrow.ChunkedArray does not support viewsc                   r   r   )r   test_transposer  r   r-   r.   r    r  zTestArrowArray.test_transposec                   r   r   )r   test_setitem_preserves_viewsr  r   r-   r.   r    r  z+TestArrowArray.test_setitem_preserves_viewsdtype_backendr    enginerj   pythonc           
      C  s   |j j}tj|r|tjjt	d| dd n'tj
|r1|jdv r1|tjjtdd ntj|rA|tjjdd tdtj|t|j d	i}|jd
tjd}tj|rct|}nt|}tj|dt|j i||d}|}	t||	 d S )NzParameterized types z not supported.r#   )usnsz1https://github.com/pandas-dev/pandas/issues/49767z)CSV parsers don't correctly handle binaryr   Z
with_dtyperS   F)indexZna_rep)r4   r
  r	  )r4   r2   r)   rT   rY   r+   r&   r'   r(   r`   r[   unit
ValueErrorr_   ra   	DataFramer{   r   Zto_csvr   r   r   r	   Zread_csvr   assert_frame_equal)
r|   r
  rd   r	  r,   rc   dfZ
csv_outputr   r   r-   r-   r.   test_EA_types  s@   

zTestArrowArray.test_EA_typesc                   s   |j j}tj|s%tj|s%tj|s%|tj	j
tjd| d trNtj|rNtjtddd t | W d    d S 1 sGw   Y  d S t | d S )Nz$pyarrow.compute.invert does support r#   zBitwise inversionF)r   Zcheck_stacklevel)r4   r2   r)   rT   rU   rw   r^   r+   r&   r'   r(   r   r   r   assert_produces_warningDeprecationWarningr   test_invertr|   rd   r,   rc   r   r-   r.   r    s(   


"zTestArrowArray.test_invertperiodsr:   r;   c              	     sT   |j j}tj|r!|dkr!|tjjtj	d| d| dd t
 || d S )Nr:   z
diff with z and periods=z will overflowr#   )r4   r2   r)   rT   rX   r+   r&   r'   r(   r*   r   	test_diff)r|   rd   r  r,   rc   r   r-   r.   r    s   zTestArrowArray.test_diffc                 C  s.   |d d }|  }|jtt ksJ d S )NrF   )Zvalue_countsr4   r   r)   r   r   r-   r-   r.   'test_value_counts_returns_pyarrow_int64  s   z6TestArrowArray.test_value_counts_returns_pyarrow_int64zbool[pyarrow]c                 C  s8   | d}|dkrdd }|S |dkrdd S t|S )N_rtruedivc                 S     t || S r   )r   Zdivider   yr-   r-   r.   r    s   z1TestArrowArray.get_op_from_name.<locals>.rtruedivZ	rfloordivc                 S  r  r   )r   Zfloor_divider  r-   r-   r.   r   $  s    z1TestArrowArray.get_op_from_name.<locals>.<lambda>)stripr   get_op_from_name)r|   r   Zshort_opnamer  r-   r-   r.   r"    s   

zTestArrowArray.get_op_from_namec                 C  s|  |}|dv r| dS d}t|tjr)d}|jd d df }|jd d df j}n|}|j}|j}	|sdt|tjrdtj	
|	sctj	|	rI|dvsctj	|	sctj	|	sctj	|	sctj	|	sc|S n$|dkrntj	|	stj	|	stj	|	stj	|	stj	|	s|S t|j}
tj	|
jrtj	|	rtj	|	rd}nd	}n|	j}t|ttfv r|d
v rd}|
d| d}
n_tj	|
jrtj	|	rt|||}t|}t|tsJ |dkrt|trtt }n#|dkrt|tjr|j|krtt }n
tj	|jsJ | |S |
|	}
t|j|
}|r7tj||j|jd}|S t|}|S )N)eqneltlegtgeboolean[pyarrow]FTr   )__truediv____rtruediv____floordiv__mss)r.  r-  r  z	duration[]__pow__)r  columns) r   r   ra   r  ilocr4   r2   r{   r)   rT   rV   rw   r\   r[   rZ   rY   rb   Z_valuesrf   Z	is_date64r  r   r   r   r   r   	get_dtyper   r   r   r  r1  )r|   r   objotherZpointwise_resultr   Z	was_frameZexpected_dataZoriginal_dtypeZorig_pa_typeZpa_expectedr  r   Z	alt_dtypeZpd_expectedr-   r-   r.   _cast_pointwise_result(  s   






	










z%TestArrowArray._cast_pointwise_resultc                 C  s6   |dv p
|dv o
t  rtj|p|dv otj|S )N__add____radd__r*  r+  r,  __rfloordiv____sub____rsub__)r   r)   rT   r\   r   )r|   opnamerc   r-   r-   r.   _is_temporal_supported  s   
	
z%TestArrowArray._is_temporal_supported4type[Exception] | tuple[type[Exception], ...] | Nonec                 C  s   |dv rt tfS t|}|j}| ||}|dv r t tf}|S |r&d }|S |dv r:tj|s6tj	|r:d }|S tj
|sPtj|sPtj|sPt}|S d }|S )N)
__divmod____rdivmod__>   __mod____rmod__r7  )r`   r   r   r3  r2   r@  r)   rT   r^   r_   rV   rw   rY   )r|   r   r4  r5  r4   rc   arrow_temporal_supportedexcr-   r-   r.   _get_expected_exception  s8   


	


z&TestArrowArray._get_expected_exceptionc                 C  s   d }|  ||}|dkr*tj|stj|stj|r*tjjd| d}|S |rLtj	|s<|dv rLtj
|rLtjjt| d| dd}|S |dkrgtj|s\tj|rgtjjtjd	d}|S |d
krztj|rztjjtjd	d}|S )N__rpow__z<GH#29997: 1**pandas.NA == 1 while 1**pyarrow.NA == NULL for r   r:  z  not supported betweenpd.NA and z Python scalarr#   r;  zdivide by 0r+  )r@  r)   rT   rV   rw   rY   r&   r'   r(   r]   r\   r   r*   )r|   r?  rc   r'   rF  r-   r-   r.   _get_arith_xfail_marker  s\   


"




z&TestArrowArray._get_arith_xfail_markerc                   sV   |j j}|dkrtj|rtd | ||}|d ur"|| t	 
|| d S NrE  z%Skip testing Python string formatting)r4   r2   r)   rT   r_   r&   r   rJ  r+   r   test_arith_series_with_scalarr|   rd   all_arithmetic_operatorsr,   rc   r'   r   r-   r.   rL    s   

z,TestArrowArray.test_arith_series_with_scalarc                   sb   |j j}|dkrtj|stj|rtd | ||}|d ur(|	| t
 || d S rK  )r4   r2   r)   rT   r^   r_   r&   r   rJ  r+   r   test_arith_frame_with_scalarrM  r   r-   r.   rO    s   



z+TestArrowArray.test_arith_frame_with_scalarc           	      C  s   |j j}|dv rtj|r|tjjtj	d| d | 
||}|d ur,|| |}t|}ttj|jd gt| |j d}| ||| d S )Nr<  zJImplemented pyarrow.compute.subtract_checked which raises on overflow for r#   r   rS   )r4   r2   r)   rT   rX   r+   r&   r'   r(   r*   rJ  ra   r{   rb   r2  lenZcheck_opname)	r|   rd   rN  r,   rc   r'   r   r~   r5  r-   r-   r.   test_arith_series_with_array  s&   



&z+TestArrowArray.test_arith_series_with_arrayc                   s@   |j j}|dr|tjjtjd| d t	 
| d S )Nint8zraises on overflow for r#   )r4   r2   r   r+   r&   r'   r(   r)   r*   r   $test_add_series_with_extension_arrayr  r   r-   r.   rS  $  s   
z3TestArrowArray.test_add_series_with_extension_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   )r&   r$   r`   r   )r|   rd   r}   r-   r-   r.   test_invalid_other_comp0  s
   "z&TestArrowArray.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   NrS   r   )FFN)TTN)ra   r{   loweroperatorr%  r'  r$  r   r)   bool_r   r   )	r|   rU  r}   rd   
ser_maskedser_par   expr   r-   r-   r.   test_comp_masked_numpy7  s   

z%TestArrowArray.test_comp_masked_numpy)r~   r   r   r   r   r   )r~   r   r   r   r   r   )r   r   r   r   )r   r   )r   r   r   rA  )3__name__
__module____qualname__r   r&   r'   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r   r  r  r  r   r  r  r  r  Z_combine_le_expected_dtyper"  r6  r@  rH  rJ  rL  rO  rQ  rS  rT  r]  __classcell__r-   r-   r   r.   rz     s|    


*
0&

#
f
".rz   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   Fr)  rS   TFN)	TTTTFNTNNra   r{   r   r   r|   rH   rI   r   r   r-   r-   r.   test_kleene_orI  "   (&zTestLogicalOps.test_kleene_orzother, expectedN)TNNT)TTTFrd  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 Nrd  r)  rS   re  r|   r5  r   rH   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)  rS   rd  )	TFNFFFNFNre  rf  r-   r-   r.   test_kleene_andx  rh  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 ri  re  rj  r-   r-   r.   test_kleene_and_scalar  rl  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)  rS   rd  )	FTNTFNNNNre  rf  r-   r-   r.   test_kleene_xor  rh  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 ri  re  rj  r-   r-   r.   test_kleene_xor_scalar  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 )Nrd  rV  rS   r)  F)ra   r{   r   r   r)   rY  r   r   )r|   opr\  rd   rZ  r[  r   r   r-   r-   r.   test_logical_masked_numpy  s   
z(TestLogicalOps.test_logical_masked_numpy)r^  r_  r`  __doc__rg  r&   r'   ra  ra   NAr   rY  rk  rm  ro  rp  rr  rw  r-   r-   r-   r.   rc  F  sZ    











rc  r   c                 C  s   t | }tjg d|d}tjg d|d}||B }tjg d|d}t|| ||@ }tjg d|d}t|| ||A }tjg d|d}t|| | }|d  }tj||d| }t|| d S )N)r:   Nr   r5   rS   )Nr   rG   r5   )NNrq   r5   )NNr:   r5   )NN   r   r   )	r   ra   r{   r   r   r  r   maskZisnull)r   r4   leftrightr   r   r-   r-   r.   test_bitwise  s    r~  c                   C  sv   t jtdd td W d    n1 sw   Y  t jtdd td W d    d S 1 s4w   Y  d S )NzPassing pyarrow typer   z#not_a_real_dype[s, tz=UTC][pyarrow]zdecimal(7, 2)[pyarrow])r&   r$   r`   r   r   r-   r-   r-   r.   Ftest_arrowdtype_construct_from_string_type_with_unsupported_parameters   s   "r  c                  C  s*   t d} t tdd}| |ksJ d S )Nztimestamp[s, tz=UTC][pyarrow]r.  UTC)r   r   r)   	timestamp)r4   r   r-   r-   r.   5test_arrowdtype_construct_from_string_supports_dt64tz  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   rS   )r&   r$   r`   ra   r{   range)Zinvalidr   r-   r-   r.   ;test_arrowdtype_construct_from_string_type_only_one_pyarrow  s   "r  c                  C  sr   t jddgtt d} t jddgdd}| | }t jddgtt d}t|| ||  }t|| d S )	NabcdefgrS   r>   r;   r   abcabc ra   r{   r   r)   r   r   r   )binaryrepeatr   r   reflected_resultr-   r-   r.    test_arrow_string_multiplication  s   r  c                  C  s`   t jddgtt d} | d }t jddgtt d}t|| d|  }t|| d S )Nr  r  rS   r>   r  Zdefgdefgr  )r  r   r   r  r-   r-   r.   .test_arrow_string_multiplication_scalar_repeat%  s   r  interpolation)ZlinearrW  higherZnearestZmidpointquantiler9   c                 C  sB  | j j}| g d} t| }tj|s"tj|s"tj	|rFd}t
jtj|d |j||d W d    d S 1 s?w   Y  d S tj|sXtj|sXtj|rYntj| jjrbn|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 \(.*\)r   )qr  z&quantile not supported by pyarrow for r#   )rW  r  zM8[z, r/  r9   r  F)warnr   r  r   ) r4   r2   takera   r{   r)   rT   r^   r_   rU   r&   r$   r   r  rw   rV   rY   r   r   rf   r+   r'   r(   r[   r   r  r   to_pydatetimedtfloorr   r   )rd   r  r  r,   rc   r~   r   r   Zpd_dtypeZser_npr   r-   r-   r.   test_quantile.  sz   
















r  ztake_idx, exp_idx)r   r   r>   r>   r5   r5   r5   )r   r   r   r>   r5   r5   Z
multi_modeZsingle_mode)r1   c                 C  s@   |  |}t|}|jdd}t|  |}t|| d S )NTZdropna)r  ra   r{   moder   r   )ro   Ztake_idxZexp_idxrd   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   rS   Fr  )ra   r{   r4   r  r   r   )rd   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	J d S r   )r   rf   )arrow_dtypeZ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!   r)   rb   r   ra   corecommonZis_bool_indexerr{   r  rP  r   Zasarrayr   r   )rd   r.  r   r   r-   r-   r.   test_is_bool_dtype  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   )r4   r2   r)   rT   rV   rw   rY   r   rd   r   r-   r-   r.   test_is_numeric_dtype  s   


r  c                 C  4   | j j}tj|rt| sJ d S t| rJ d S r   )r4   r2   r)   rT   rw   r   r  r-   r-   r.   test_is_integer_dtype  s   r  c                 C  r  r   )r4   r2   r)   rT   rW   r   r  r-   r-   r.   test_is_signed_integer_dtype     r  c                 C  r  r   )r4   r2   r)   rT   rX   r   r  r-   r-   r.   test_is_unsigned_integer_dtype  r  r  c                 C  r  r   )r4   r2   r)   rT   rV   r   r  r-   r-   r.   test_is_float_dtype  r  r  c                 C  sl   t | }|d}t|}t|}t|t|ksJ t|}t|| t|}t|| d S )Nr>   )	ra   r{   headpickledumpsrP  loadsr   r   )rd   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J t|jtsJ t||  d S r   )	r   	to_pandasrb   r   r4   r   r   r   r   )rd   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 )N1.0r   r7   rS   ra   r{   r   r   r   r~   r   r   r-   r-   r.   &test_astype_float_from_non_pyarrow_str  s   
r  c                  C  s2   t jddgidd} | jddd}t||  d S )Ncoli@fr   rS   float[pyarrow]r   )errors)ra   r  r   r   r  )r   r   r-   r-   r.   test_astype_errors_ignore  s   r  c                 C  s   |   }| jj}tj|stj|rtd ntj	|r(t
t| }nt
| j}| jrCt| jsC|t}tj|t| < t|| d S )Nz Tested in test_to_numpy_temporal)r   r   rf   r)   rT   r\   r[   r&   r   rZ   r   rb   list_hasnar   r4   r   r   ra   ry  r  r   r   )rd   r   r   r   r-   r-   r.   test_to_numpy_with_defaults	  s   
r  c                  C  sP   dd g} t j| dd}| }tdtjg}t|d ts J t|| d S )Nr:   r   rS   r   )	ra   rb   r   r   r   r   floatr   r   )rd   r   r   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]rS   r   r   r>   ra   rb   ry  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  rS   r>   r   r  r   r   r   r-   r-   r.   !test_to_numpy_null_array_no_dtype/  s   r  c                  C  s   t jdt jgdd} | jdd}tjddgtjd}t|| t jdt jgdd} | jdd}tjddgtjd}t|| d S )	NTr)  rS   F)r   r7   r   r8   )	ra   rb   ry  r   r   rY  r   r   Zfloat32r  r-   r-   r.   test_to_numpy_without_dtype7  s   r  c                 C  s   |   }|  }| d |d d < tj| d gt|  | jd}t|| |  }| d d d |d d < | d d d }t|| |  }|  |d d < | }t|| d S )Nr   rS   r<   )copyr!   rg   rP  r4   r   r   tolist)rd   Zorigr   r   r-   r-   r.   test_setitem_null_sliceD  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   rf   r)   rT   r^   r_   r   rw   rV   rU   r*   r&   r$   )rd   r   
fill_valueerrr   r-   r-   r.   test_setitem_invalid_dtype[  s(   


"r  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-31rf   Ztypes_mapperrS   )r)   rb   ra   	Timestampdate32r  r   Zdate64getr{   r   r   )Z
date_arrayr   r   r-   r-   r.   &test_from_arrow_respecting_given_dtyper  s   
r  c                  C  sf   t jddgt  d} tt j | jt  tt  ij	d W d    d S 1 s,w   Y  d S )Nr         @r  r  )
r)   rb   r   r   Zexternal_error_raisedr*   r  r   r   r  )rb   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   r8   gGz?g{Gz@rS   r:   g333333?g@g^@gp=
cL@r<   g      ^@g      N@)ra   r{   ry  roundr   r   r4   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  ra   ry  r{   r&   r$   r  Zsearchsorted)rs   Z	as_seriesrI   rj   rH   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 )
Nr   r   rS   r:   r>   rH   rI   rH   rI   )Zby)ra   r  r{   r   r)   
dictionaryint32r   r  Zsort_valuesr   r  )r  r   r   r-   r-   r.   test_sort_values_dictionary  s   r  patr  z	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  rS   r:   )
ra   r{   r   r)   r   r   r   r  r   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  rS   z	count notr   r:   flags)
ra   r{   r   r)   r   r&   r$   r`   r   r   r~   r-   r-   r.    test_str_count_flags_unsupported     "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 )NrH   rS   r   r   )widthsideZfillchar)
ra   r{   r   r)   r   r   padr   r   r   )r  Zstr_funcr~   r   r   r-   r-   r.   test_str_pad  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 )NrH   rS   zInvalid side: foor   r   r  r   )
ra   r{   r   r)   r   r&   r$   r  r   r  r  r-   r-   r.   test_str_pad_invalid_side  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  rS   )casenaregex)
ra   r{   r   r)   r   r   containsrY  r   r   )r  r  r  r  r\  r~   r   r   r-   r-   r.   test_str_contains  s   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  rS   zcontains notr   rH   r:   r  )
ra   r{   r   r)   r   r&   r$   r`   r   r  r  r-   r-   r.   #test_str_contains_flags_unsupported  r  r  zside, pat, na, exp
startswith)TNFrI   rn  endswith)FTFbc)rH   eg)TNT)rH   rj   r  r-   )FNFc                 C  sT   t jg dtt d}t|j| ||d}t j|tt d}t	|| d S )N)r  NefgrS   )r  
ra   r{   r   r)   r   r   r   rY  r   r   )r  r  r  r\  r~   r   r   r-   r-   r.   test_str_start_ends_with  s   r   r  )r  r  c                 C  sT   t jd d gtt d}t|j| d}t jd d gtt d}t	|| d S )NrS   r-   r  )r  r~   r   r   r-   r-   r.   /test_str_starts_ends_with_all_nulls_empty_tuple  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  rS   rI   r   T)r  r  r  zreplace is not supportedr   r-   )
ra   r{   r   r)   r   r&   r$   r`   r   replace)Zarg_nameargr~   kwargsr-   r-   r.   test_str_replace_unsupported  s   "r  zpat, repl, n, regex, exprH   r   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abacrS   )nr  )	ra   r{   r   r)   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} | jdddd}t jddgtt d}t|| | 	t j
d	d
}|jdddd}|	|j}t|| | 	t j
d	tjd}|jdddd}|	|j}t|| d S )Nr  ZaaaaaarS   rH   r  Tr  r    storage)r  r   )ra   r{   r   r)   r   r   r  r   r   r   StringDtyper4   r   r   )	r~   Zactualr   ser2Zactual2Z	expected2Zser3Zactual3Z	expected3r-   r-   r.   test_str_replace_negative_n#  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  rS   zrepeat is notr   r:   r>   )
ra   r{   r   r)   r   r&   r$   r`   r   r  r  r-   r-   r.   test_str_repeat_unsupported6  r  r  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  rS   r>   r  )	ra   r{   r   r)   r   r   r  r   r   r  r-   r-   r.   test_str_repeat<     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  rS   r  r  )
ra   r{   r   r)   r   r   r   rY  r   r   r  r  r  r\  r~   r   r   r-   r-   r.   test_str_matchC  s   r  TFFNZAbc)FFFNabc$zabc\$FTFNzAbc$zAbc\$z(abc)|(abx)z((abc)|(abx))c                 C  sR   t jg dtt d}|jj| ||d}t j|tt d}t	|| d S )N)r  r  z$abcNrS   r  )
ra   r{   r   r)   r   r   	fullmatchrY  r   r   r  r-   r-   r.   test_str_fullmatchU  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  rS   )startend	ra   r{   r   r)   r   r   findr   r   )subr  r  r\  Zexp_typr~   r   r   r-   r-   r.   test_str_findq  s   r   c                  C  V   t jdd gtt d} | jjdddd}t jdd gtt d}t	|| d S )Nr  rS   rI   ir   r  r  r  r:   
ra   r{   r   r)   r   r   r  r   r   r   r  r-   r-   r.   test_str_find_negative_start|     r$  c                  C  sL   t jdd gtt d} | jjddd}t jdd gdd}t|| d S )Nr  rS   r  r:   )r  r<   r   r  r  r-   r-   r.   test_str_find_no_end  s   r&  c                  C  r!  )NabcdefgrS   dr	  r"  r   r#  r  r-   r-   r.   )test_str_find_negative_start_negative_end  r%  r*  c                  C  sT   t jdd gtt d} | jjddd}t jdd gtt d}t	|| d S )Nr'  rS   r(  r  )r  r  r<   r#  r  r-   r-   r.   test_str_find_large_start  s   r+  z,https://github.com/apache/arrow/issues/36311r   r  )r	  r   r:      Nr  )r,  r<   r   r   r-  Nr  )r  azZabcerH   Zcaac           	      C  s   t jg dtt d}|t jdd}|j|| |}|j|| ||j	}t
|| |t jdd}|j|| ||j	}t
|| d S )N)Zabcaadefr  Zabcdeddefgj8292r  rH   r  rS   r  r
  r    )ra   r{   r   r)   r   r   r  r   r  r4   r   r   )	r  r  r  r.  Zobject_seriesr   r   Zarrow_str_seriesZresult2r-   r-   r.   test_str_find_e2e  s   
r/  c                  C  r!  )Nr'  rS   r(  r	  r)  r"  r<   r#  r  r-   r-   r.   2test_str_find_negative_start_negative_end_no_match  r%  r0  zi, exp)rI   r  N)rj   r  Nr>   )rj   NNr	  )rH   NNrq  c                 C  sL   t jg dtt d}|j| }t j|tt d}t|| d S )N)r  deNrS   )	ra   r{   r   r)   r   r   r  r   r   )r   r\  r~   r   r   r-   r-   r.   test_str_get  s   r2  z=TODO: StringMethods._validate should support Arrow list typesr   c                  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=3NrS   )ra   r{   r!   r)   rb   r  r   joinr   r   r   r   r  r-   r-   r.   test_str_join  s   "r7  c                  C  sN   t ttg d} | jd}t jg dtt d}t	
|| d S )N)r  r3  Nr4  r5  rS   )ra   r{   r!   r)   rb   r   r6  r   r   r   r   r  r-   r-   r.   test_str_join_string_type  s   r8  zstart, stop, step, expZdcbac                 C  P   t jdd gtt d}|j| ||}t j|tt d}t|| d S NabcdrS   )	ra   r{   r   r)   r   r   slicer   r   )r  stopstepr\  r~   r   r   r-   r-   r.   test_str_slice  s   
r?  zstart, stop, repl, expZaxcdZxcdZcdc                 C  r9  r:  )	ra   r{   r   r)   r   r   Zslice_replacer   r   )r  r=  r  r\  r~   r   r   r-   r-   r.   test_str_slice_replace  s   	r@  zvalue, method, exp)Za1cisalnumT)z!|,rA  F)aaaisalphaT)z!!!rC  F)u   ٠	isdecimalT)z~!rD  F)rJ   isdigitT)~rE  F)rB  islowerT)ZaaArG  F)r3  	isnumericT)Z11IrH  F) isspaceT)r  rJ  F)zThe ThatistitleT)zthe ThatrK  F)ZAAAisupperT)ZAAcrL  Fc                 C  sR   t j| d gtt d}t|j| }t j|d gtt d}t	|| d S r   r  )valuer  r\  r~   r   r   r-   r-   r.   test_str_is_functions  s   rN  zmethod, exp
capitalizezAbc deftitlezAbc DefswapcasezAbC DefrW  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 dEFrS   	ra   r{   r   r)   r   r   r   r   r   )r  r\  r~   r   r   r-   r-   r.   test_str_transform_functions  s   rU  c                  C  sN   t jdd gtt d} | j }t jdd gtt d}t	|| d S )Nr;  rS   r5   )
ra   r{   r   r)   r   r   rP  r  r   r   r  r-   r-   r.   test_str_len*  s   
rV  zmethod, to_strip, val)r!  Nz abc )r!  r   Zxabcx)lstripNz abc)rW  r   Zxabc)rstripNzabc )rX  r   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 )NrS   )to_stripr  rT  )r  rY  valr~   r   r   r-   r-   r.   test_str_strip1  s   r[  rZ  Zabc123c                 C  P   t j| d gtt d}|jd}t jdd gtt d}t|| d S NrS   r3  r  )	ra   r{   r   r)   r   r   removesuffixr   r   rZ  r~   r   r   r-   r-   r.   test_str_removesuffixC  r  r`  Z123abcc                 C  r\  r]  )	ra   r{   r   r)   r   r   removeprefixr   r   r_  r-   r-   r.   test_str_removeprefixK  r  rb  r  r   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  rS   )
ra   r{   r   r)   r   r   encoder  r   r   )r  encodingr\  r~   r   r   r-   r-   r.   test_str_encodeS  s   	ri  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  r  NrS   rI   r  )
ra   r{   r   r)   r   r   findalllist_r   r   )r  r~   r   r   r-   r-   r.   test_str_findallb  s   $rl  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abcbarS   rj   r>   zsubstring not foundr   r  )ra   r{   r   r)   r   r   r   r   r   r   r&   r$   r  )r  r  r  r~   r   r   r-   r-   r.   test_str_r_indexj  s   	"ro  formZNFCZNFKCc                 C  s>   t jdd gtt d}|j| }| }t	|| d S rf  )
ra   r{   r   r)   r   r   	normalizer  r   r   )rp  r~   r   r   r-   r-   r.   test_str_normalize|  s   rr  c                 C  sT   t jg dtt d}|jd| |}t jg dtt d}t	|| d S )N)rn  r  NrS   rj   )r>   r<   N)
ra   r{   r   r)   r   r   rfindr   r   r   )r  r  r~   r   r   r-   r-   r.   test_str_rfind  s   rt  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 )Nrn  rS   a   rI   Zbbcbb)	ra   r{   r   r)   r   r   	translater   r   r  r-   r-   r.   test_str_translate  s   rw  c                  C  r  )Nrn  rS   r   zabc
ba)	ra   r{   r   r)   r   r   wrapr   r   r  r-   r-   r.   test_str_wrap  r  ry  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|crS   )TTFrn  r  )rH   rI   rj   )r4   r1  )ra   r{   r   r)   r   r   Zget_dummiesr  rY  r   r  r  r-   r-   r.   test_get_dummies  s   

rz  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 )	Nrn  rS   rI   )rH   rI   Zcbarq  Fexpand)r  rI   rH   )ra   r{   r   r)   r   r   	partitionr  r   r  r!   rb   r   
rpartitionr  r-   r-   r.   test_str_partition  s"   r  rsplitsplitc                 C  sT   t jdd gtt d}t|j|  }t ttg dd g}t	
|| d S )Nza1 cbc
brS   )a1ZcbcrI   )ra   r{   r   r)   r   r   r   r!   rb   r   r   r  r~   r   r   r-   r-   r.   test_str_split_pat_none  s   r  c                  C  sf  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	|| | jjddd}t ttg dttg dd}t	|| d S )NZa1cbcba2cbcbNrS   rj   r  rI   rI   a2rI   rI   r:   r  r  Zbcbr  z[1-2]T)r  rH   cbcb)r  r|  )rH   rH   N)r  r  Nr   r:   r?   r{  rH   r  Nr  NN)ra   r{   r   r)   r   r   r  r!   rb   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	|| | jjddd}t ttg dttg dd}t	|| d S )Nr  rS   rj   r  r  r:   r  a1cbrI   a2cbT)r  r|  )r  r  N)rI   rI   Nr  r?   r{  r  r  )ra   r{   r   r)   r   r   r  r!   rb   r   r   r  r  r  r-   r-   r.   test_str_rsplit  s2   r  c                  C  sZ   t jg dtt d} tjtdd | j	d W d    d S 1 s&w   Y  d S )Nr  Zb2Zc3rS   z*pat=.* must contain a symbolic group name.r   z[ab](\d))
ra   r{   r   r)   r   r&   r$   r  r   extractr  r-   r-   r.   test_str_extract_non_symbolic	  s   "r  r|  c                 C  sf   t jg dtt d}|jjd| d}t tt	g dtt	g dd}t
|| d S )Nr  rS   z(?P<letter>[ab])(?P<digit>\d)r{  )rH   rI   Nr?   rJ   N)Zletterdigit)ra   r{   r   r)   r   r   r  r  r!   rb   r   r  )r|  r~   r   r   r-   r-   r.   test_str_extract	  s   r  c                  C  s   t jg dtt d} | jjddd}t dtt	g di}t
|| | jjddd}t jtt	g ddd	}t
|| d S )
Nr  rS   z[ab](?P<digit>\d)Tr{  r  r  Fr   )ra   r{   r   r)   r   r   r  r  r!   rb   r   r  r   r  r-   r-   r.   test_str_extract_expand(	  s   r  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NaTrS     r  )r)   durationr!   r   rb   r   r   )r  stringsr   r   r   r-   r-   r.   #test_duration_from_strings_with_nat7	  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   )r4   r2   r)   rT   r   r&   r$   AttributeErrorra   r{   r  rx   r-   r-   r.   test_unsupported_dtA	  s   "r  zprop, expectedyear  dayZday_of_weekZ	dayofweekZweekdayZday_of_yearZ	dayofyearhourminuteZis_leap_yearmicrosecondrG   month
nanosecondrz  Zquartersecondrq   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   r5   rq   rG   rz  )r  r  r  r  r  r  r  r  r  rS   r  )ra   r{   r  r   r)   r  r   r  r   r   r  r   time64r!   rb   r   r   )propr   r~   r   Zexp_typer-   r-   r.   test_dt_propertiesJ	  s.   




r  c               	   C     t jtdddddtdddddtdddddd gttdd	} | jj}t jg d
tt d	}t	
|| | jj}t jg dtt d	}t	
|| d S )Nr  rC   r>   r   r  r  r  r  r:   rD   r  rS   r  FFTN)ra   r{   r   r   r)   r  r  Zis_month_startrY  r   r   Zis_month_endr  r-   r-   r.   test_dt_is_month_start_end{	     	r  c               	   C  s   t jtdddddtdddddtdddddd gttdd} | jj}t jg d	tt d}t	
|| | jj}t jg d
tt d}t	
|| d S )Nr  rC   rD   r   r  r:   r  rS   r  r  )ra   r{   r   r   r)   r  r  Zis_year_startrY  r   r   Zis_year_endr  r-   r-   r.   test_dt_is_year_start_end	  r  r  c               	   C  r  )Nr        r   r  r:   rD   r  rS   r  r  )ra   r{   r   r   r)   r  r  Zis_quarter_startrY  r   r   Zis_quarter_endr  r-   r-   r.   test_dt_is_quarter_start_end	  r  r  Zdays_in_monthZdaysinmonthc              	   C  sz   t jtdddddtdddddtdddddd gttdd	}t|j| }t jg d
tt d	}t	
|| d S )Nr  r   r  r  r5   r:   r>   r  rS   )rD   r     N)ra   r{   r   r   r)   r  r   r  r   r   r   r  r-   r-   r.   test_dt_days_in_month	  s   	r  c                  C  s   t jtddddtdddddtdddd	d
d
dd gttdd} | j }t jtddddtddddtddddd gttdd}t	|| d S )Nr  r   r  r  r  r  r5   r:   r  r>      ;   )r  r  r  r  r  r  r  rS   )
ra   r{   r   r   r)   r  r  rq  r   r   r  r-   r-   r.   test_dt_normalize	  s$   
		r  r  r  c                 C  sx   t jtdddddd gtt| d}|jj| ksJ |jj}t t	tj
tddd gt| d}t|| d S )	Nr  r:   r>   r   r  rS   r   r  )ra   r{   r   r   r)   r  r  r  r   r!   rb   r  r   r   r  r~   r   r   r-   r-   r.   test_dt_time_preserve_unit	  s    r  r   )Nr  
US/Pacificc                 C  sJ   t jtdddddd gttjd| dd}|jj}|t	| ks#J d S )	Nr  r:   r>   r   r  r  r   rS   )
ra   r{   r   r   r)   r  r  r   r   Zmaybe_get_tz)r   r~   r   r-   r-   r.   
test_dt_tz	  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  rS   )r  r:   r:   r  )r  Zweekr  r   r1  r4   )ra   r{   r   r   r)   r  r  Zisocalendarr  r   r  r  r-   r-   r.   test_dt_isocalendar	  s   
r  Zday_nameZSundayZ
month_nameZJanuaryc                 C  sd   t | tjtdddd gttdd}t|j|  }tj|d gtt	 d}t
|| d S )Nr  r:   r-  rS   )r/   ra   r{   r   r   r)   r  r   r  r   r   r   )r  r\  r,   r~   r   r   r-   r-   r.   test_dt_day_month_name
  s
   $r  c                 C  sf   t |  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  rS   z%Y-%m-%dT%H:%M:%Sz2023-01-02T03:00:00.000000000)r/   ra   r{   r   r   r)   r  r  strftimer   r   r   )r,   r~   r   r   r-   r-   r.   test_dt_strftime
  s   r  )Z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  rS   zambiguous is not supported.r   Z1hr  Z	ambiguousznonexistent is not supported.nonexistent)ra   r{   r   r   r)   r  r&   r$   r`   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  rS   zfreq='1B' is not supportedr   Z1Bz$Must specify a valid frequency: None)ra   r{   r   r   r)   r  r&   r$   r  r   r  r  r-   r-   r.   "test_dt_roundlike_unsupported_freq*
  s   "r  freq)Dhr   r.  r-  r  r  c                 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?   )ra   r{   r   r   r)   r  r   r  r   r   r   )r  r  r~   rc   r   r   r-   r-   r.   test_dt_ceil_year_floor7
  s   r  c                  C  s   t dddt dddg} tj| ttdd}d}tjt|d |j	
 }W d    n1 s1w   Y  tj| td}t|| tdd	 |D sNJ d
}tjt|d |dj	
 }W d    n1 sjw   Y  t|| d S )NrA   r:   r  r  rS   CThe behavior of ArrowTemporalProperties.to_pydatetime is deprecatedr   c                 s      | ]	}t |tu V  qd S r   )rf   r   .0resr-   r-   r.   	<genexpr>M
      z(test_dt_to_pydatetime.<locals>.<genexpr>z>The behavior of DatetimeProperties.to_pydatetime is deprecateddatetime64[ns])r   ra   r{   r   r)   r  r   r  FutureWarningr  r  r   rb   r   r   r   r   )rd   r~   r   r   r   r-   r-   r.   test_dt_to_pydatetimeC
  s   r  	date_typer   @   c              	   C  s   t jtdddgtttd|   d}d}tjt|d- t	j
tdd |j  W d    n1 s6w   Y  W d    d S W d    d S 1 sNw   Y  d S )	NrA   rC   rD   r   rS   r  r   z#to_pydatetime cannot be called with)ra   r{   r   r   r   r)   r   r  r  r&   r$   r  r  r  )r  r~   r   r-   r-   r.    test_dt_to_pydatetime_date_errorU
  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  rS   z ambiguous='NaT' is not supportedr   r  r  r  z"nonexistent='NaT' is not supportedr  )ra   r{   r   r   r)   r  r&   r$   r`   r  tz_localizer  r-   r-   r.   *test_dt_tz_localize_unsupported_tz_optionsb
  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  rS   )
ra   r{   r   r   r)   r  r  r  r   r   r  r-   r-   r.   test_dt_tz_localize_nonen
  s   r  c                 C  s   t | 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  rS   r  r  r/   ra   r{   r   r   r)   r  r  r  rb   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_forwardrC   r  Zshift_backwardz2023-03-12 01:59:59.999999999c                 C  s   t | 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   rC   r>   r  )r  r  r  r  r  r  rS   r  r  r  r  )r  Zexp_dater,   r~   r   r  r   r-   r-   r.   test_dt_tz_localize_nonexistent
  s   r  c                  C  sh   t jtdddddd gttdd} tjtdd	 | j	
d
 W d    d S 1 s-w   Y  d S )Nr  r:   r>   r   r  r  rS   z"Cannot convert tz-naive timestampsr   r  )ra   r{   r   r   r)   r  r&   r$   r   r  
tz_convertr  r-   r-   r.    test_dt_tz_convert_not_tz_raises
  s   "r  c                  C  sn   t jtdddddd gtt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  rS   
ra   r{   r   r   r)   r  r  r  r   r   r  r-   r-   r.   test_dt_tz_convert_none
  s   r  c                 C  sp   t jtdddddd gtt| 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  rS   z
US/Easternr  r  r-   r-   r.   test_dt_tz_convert
  s   r  ztimestamp[ms][pyarrow]zduration[ms][pyarrow]c                 C  s@   t jdd g| d}|jd}|| dd}t|| d S )Nr  rS   r  r-  )ra   r{   r  as_unitr   r  r   r   r  r-   r-   r.   test_as_unit
  s   r  dayssecondsmicrosecondsnanosecondsc                 C  sf   t jt jdddddd gttdd}t|j| }t ttj	|d gt
 d}t|| d S )	Nr:   r>   r   r5   r  r  r  r  r  rS   r  )ra   r{   	Timedeltar   r)   r  r   r  r!   rb   r  r   r   )r  r   r~   r   r-   r-   r.   test_dt_timedelta_properties
  s    	r  c                  C  sd   t jt jdddddd gttdd} | j }t ttj	dd gt
 d	}t|| d S )
Nr:   r>   r   r5   r  r  rS   gN%  @r  )ra   r{   r  r   r)   r  r  Ztotal_secondsr!   rb   r   r   r   r  r-   r-   r.   test_dt_timedelta_total_seconds
  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 )
Nr:   r>   r   r5   r  rS   c                 s  r  r   )rf   r   r  r-   r-   r.   r  	  r  z)test_dt_to_pytimedelta.<locals>.<genexpr>timedelta64[ns])r   ra   r{   r   r)   r  r  Zto_pytimedeltar   rb   r   r   r   r   r   rd   r~   r   r   r-   r-   r.   test_dt_to_pytimedelta  s   
r  c                  C  sb   t jt jdddddd gttdd} | jj}t jg dg d	gg d
dd}t	
|| d S )Nr:   r>   r   r5   r  r  rS   )r:   r   r   r>   r   r   r5   )NNNNNNN)r  ZhoursZminutesr  Zmillisecondsr  r  r   r  )ra   r{   r  r   r)   r  r  Z
componentsr  r   r  r  r-   r-   r.   test_dt_components  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   rS   r   r   )ra   r{   r   ry  )r   r   r~   r   r   r-   r-   r.   #test_boolean_reduce_series_all_null.  s   
r  c                  C  s   g d} g d}d g}| | | }dgt |  dgt |  d gt |  }tj|t d}tj|dd}t|| ddg}t	j
tjd	d
 tj|t d W d    d S 1 s]w   Y  d S )N)trueZTRUETruer?   r  )ZfalseZFALSEFalse0r@   TFrS   r)  r  r  zFailed to parser   )rP  r!   r   r)   rY  ra   rb   r   r   r&   r$   r*   )Ztrue_stringsZfalse_stringsZnullsr  Zboolsr   r   r-   r-   r.   %test_from_sequence_of_strings_boolean:  s   ("r  c                 C  sB   t jg | d}| }t |tjg tjd g}t|| d S r   )	ra   r{   r  concatr   rb   rY  r   r   )r4   r~   r   r   r-   r-   r.   %test_concat_empty_arrow_backed_seriesL  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 foxrS   )r)   rb   r  ra   r{   r!   r   r   )r4   r   r~   r   r-   r-   r.   test_series_from_string_arrayT  s   r   c                      s   e Zd Z fddZ  ZS )OldArrowExtensionArrayc                   s   t   }|d|d< |S )Nr   _data)r   __getstate__pop)r|   stater   r-   r.   r  ^  s   
z#OldArrowExtensionArray.__getstate__)r^  r_  r`  r  rb  r-   r-   r   r.   r  ]  s    r  c                  C  sV   t dg} t| }tt|}t|| |jt 	| ks"J t
|dr)J d S )Nr:   r  )r)   rb   r  r  r  r  r   r   r   chunked_arrayhasattr)rd   r   r   r-   r-   r.   #test_pickle_old_arrowextensionarrayd  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 rS   F)	r!   r)   r  r   ZonesrY  r  Zzerosr   )Nr   r   r-   r-   r.   /test_setitem_boolean_replace_with_mask_segfaultm  s
   r
  zdata, arrow_dtyperM   rN   c                 C  s:   t |}tjt| |d}tj| |d}t|| d S r   )r   ra   rb   r   r   r   )rd   r  r4   r   r   r-   r-   r.   -test_conversion_large_dtypes_from_numpy_arrayv  s   r  c                  C  sl   t jdd d gitt d} t jdddgidd}t j| |gdd}t jdg didd}t|| d S )	NrH   rS   r   r:   r   T)Zignore_index)NNr   r:   )ra   r  r   r)   Znullr  r   r  )r  Zdf2r   r   r-   r-   r.   test_concat_null_array  s
   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   rS   )r   r>   r:   r:   r   g       @r  r   r   r   r   r   25%50%75%r   r4   r  )ra   r{   r   describer)   r   r   r   r   rd   r   r   r-   r-   r.   test_describe_numeric_data  s   
r  c                 C  s^   t jtddt| d}| }t jdgt jg d| jd  tg dd}t	
|| d S )	Nr:   rF   rS   	   )rG   r>   r:   r   rG   rq   r  r  r  r  )ra   r{   r  r   r  to_timedeltar  r  r   r   r   r  r-   r-   r.   test_describe_timedelta_data  s   r  c                   sX   t jtddt d}| }t jdg fdddD  tg dd	}t|| d S )
Nr:   rF   rS   r  c                   s    g | ]}t j| j jd qS ))r   r  )ra   r  r   r  )r  vr   r-   r.   
<listcomp>  s    z/test_describe_datetime_data.<locals>.<listcomp>)rG   r:   r   rG   rq   r  )r   r   r   r  r  r  r   r  )ra   r{   r  r   r  r   r   r   r  r-   r  r.   test_describe_datetime_data  s   
	r  c                 C  s<   g d}t j|t| d}|d}|d }||ksJ d S )Nr  rS   g?r   )ra   r{   r   r  )r   rd   r~   r   r   r-   r-   r.   test_quantile_temporal  s
   
r  c                  C  sB   t jtdgt  d} tj| t| jd}t	|dksJ d S )Nz
2020-01-01r  rS   z+0    2020-01-01
dtype: date32[day][pyarrow])
r)   rb   r   Zfromisoformatr  ra   r{   r   rf   repr)Zarrow_dtr~   r-   r-   r.   test_date32_repr  s   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  rS   r>   )
ra   to_datetimer  r{   r   r)   r  r  r   r   )Zdata_tsZdata_tdZser_tsZser_tdr   r   r-   r-   r.   2test_duration_overflow_from_ndarray_containing_nat  s   r"  c                 C  sZ   t | }|dksJ | jr|dv rtjjdd}|| |t jt| ddks+J d S )Nzunknown-array)ZfloatingZ
datetime64Ztimedelta64zfin infer_dtype pd.NA is not ignored in these cases even with skipna=True in the list(data) check belowr   Tr   )r
   Zinfer_dtyper  r&   r'   r(   r+   r  )rd   r,   r  r'   r-   r-   r.   test_infer_dtype_pyarrow_dtype  s   

r#  c                 C  sz   d}| j }tj| rtj||d|g}ntj||| jd|g}t	j
|| d}t	tj|g| d}t|| d S )Nr   r  r  r   rS   r  )r  r)   rT   r\   ra   r  r  r  r   r!   rg   rb   r   r   )r   rZ  r  seqr   r   r-   r-   r.   test_from_sequence_temporal  s   r&  c                 C  s   | j }tj| rtjd|d|}ntjd|| jd|}t	tj
g d| d}| }||d d < t	tj
g d| d}t|| d S )Nr:   r  r$  r  r  )r:   r:   r:   )r  r)   rT   r\   ra   r  r  r  r   r!   rb   r  r   r   r   r  rZ  r   r   r   r-   r-   r.   test_setitem_temporal  s   r(  c                 C  sZ   t tjg d| d}| j}|tjd|d| }t tjg d| d}t|| d S )Nr  r  r:   r  )r   r:   r>   )	r!   r)   rb   r  ra   r  r  r   r   )r   r,   r   r  r   r   r-   r-   r.   test_arithmetic_temporal  s
   r)  c                 C  s   | j }tj| rtjd|d|}ntjd|| jd|}t	tj
g d| d}||k}t	tj
g dt d}t|| d S )Nr:   r  r$  r  r  )FTT)r  r)   rT   r\   ra   r  r  r  r   r!   rb   rY  r   r   r'  r-   r-   r.   test_comparison_temporal  s   r*  c                 C  s   t tjg d| d}|d }tj| r*tjd| jd| j}t	|tjs)J ntj
d| j| jd| j}t	|tj
s@J |j|jksHJ ||ksNJ d S )Nr  r  r:   r>   r  r$  )r!   r)   rb   rT   r\   ra   r  r  r  r   r  r   r   r   r   r   r-   r-   r.   test_getitem_temporal&  s   r,  c                 C  s   t tjdd g| d}t|}tj| r/tjd| jd	| jtj
g}t|d tjs.J ntjd| j| jd	| jtj
g}t|d tjsJJ |d j|d jksVJ ||ks\J d S )Nr:   r  r  r   r$  )r!   r)   rb   r  rT   r\   ra   r  r  r  ry  r   r  r   r+  r-   r-   r.   test_iter_temporal9  s   r-  c                 C  sR   t j| d d g dd}|jdd }t jddgdd	d
gd}t|| d S )Nr   )rH   rH   rI   r  r   )levelr>   r:   r   rH   rI   r  )ra   r{   groupbysizer   r   r  r-   r-   r.   'test_groupby_series_size_returns_pa_intP  s   r1  c                 C  s  t tjdd g| d}|j|d}tj| r$tjd| jd	| j}ntj
d| j| jd	| j}|tksAtj| r`| jd ur`|tkrItj}ntj}tj||gtd}|d j|jks_J n"|  d| j}| }t||g}t|d d | jksJ t|| d S )Nr:   r  rS   r  r$  r   Znat)r!   r)   rb   r   rT   r\   ra   r  r  r  r  r   r   r[   ry  r  r   to_pandas_dtyperf   Zdatetime_datar   r   )r   r4   r   r   rM  r  r   r-   r-   r.   test_to_numpy_temporalX  s    r3  c                 C  s\   t ddg| | d}|d }t jddggt jdgddddgdd}t|| d S )	Nr:   )rl   rm   rn   rl   r  rm   rn   r   )r  r1  r4   )ra   r  r/  r   Indexr   r  )rh   r  r   r   r-   r-   r.   %test_groupby_count_return_arrow_dtypeu  s   r5  c                  C  sD   t jddgddggttjt ddd} | jj}|tks J d S )Nr:   r>   r   r5   )Z	list_sizerS   )	ra   r{   r   r)   rk  r   r4   rf   r  )r~   r   r-   r-   r.   test_fixed_size_list  s
   "r6  c                  C  s@   t jt jddddgttdd} t| }d}||ksJ d S )NZ2012r   )r  r  r  r  z#     col
0  15340
1  15341
2  15342)ra   r  Zperiod_ranger   r"   r  )r  r   r   r-   r-   r.   'test_arrowextensiondtype_dataframe_repr  s   
r7  c                  C  sB   t jdd gdd} | jd dd}t jdd gdd}t|| d S )Nr>   r   rS   r   )r     )ra   r{   powr   r   )kr   r   r-   r-   r.   test_pow_missing_operand  s   r;  c                 C  sh   t jd dgt| d}t tjddgd| j dd}||}t jddgt| d}t|| d S )Nr>   rS   r:   r   zm8[r/  )	ra   r{   r   r   rb   r  r  r   r   )r   Zser1r  r   r   r-   r-   r.   test_duration_fillna_numpy  s
   "
r<  c                  C  s`   t jdgdd} t jd gdd}tjtjjdd | |k  W d    d S 1 s)w   Y  d S )Nl            r   rS   r   zInteger valuer   )ra   r{   r&   r$   r)   r
   r*   r  r-   r-   r.   +test_comparison_not_propagating_arrow_error  s
   
"r=  c                  C  s   t t dg t dg g} tt| }| \}}tjddgtj	d}t
t|  }t|| t|| d S )NrH   rI   r   r:   rS   )r)   r  rb   dictionary_encodera   r{   r!   Z	factorizer   Zintpr4  r   r   r   Zassert_index_equal)r   r~   Zres_indicesZres_uniquesZexp_indiciesZexp_uniquesr-   r-   r.   !test_factorize_chunked_dictionary  s   r?  c                  C  s   t tg d t tg d g} ttt | }|d}tj	g dt
t  d}tjg dtj|dd}t|| d S )N)rH   r   rj   rH   )rH   r(  rj   category)rH   r   rj   r(  rS   )rH   r   rj   rH   rH   r(  rj   )
categories)r)   rb   r   r>  ra   r{   r!   r  r   r4  r   r   ZCategoricalDtyper   r   )Zarrsr~   r   rA  r   r-   r-   r.   "test_dictionary_astype_categorical  s   

rB  c                  C  sH   t jdgdd} t jdgdd}t jdgdd}| | }t|| d S )Nir   rS   r5   r;   re  )rH   rI   r   r   r-   r-   r.   test_arrow_floordiv  s
   rC  c                  C  s8   t jdgdd} t jdgdd}| d }t|| d S )Nl     ^ \K r   rS   l    \p/i@B re  )rH   r   r   r-   r-   r.    test_arrow_floordiv_large_values  s   rD  r   r   c                 C  s(   t jdg| d}|d }t|| d S )N   rS   r:   re  )r4   rH   r   r-   r-   r.   )test_arrow_floordiv_large_integral_result  s   rF  c                 C  s@   t | }tjdg|d}|d }tjdg|d}t|| d S )NirS      r<   )r   ra   r{   r   r   )r   r4   rH   r   r   r-   r-   r.   "test_arrow_floordiv_larger_divisor  s
   rH  c                 C  s   t |  j}tj|gt| d}tjt	j
jdd |d  W d    n1 s*w   Y  tjt	j
jdd |d  W d    d S 1 sHw   Y  d S )NrS   zoverflow|not in ranger   r<   zdivide by zeror   )r   iinfor2  r   ra   r{   r   r&   r$   r)   r
   r*   )r   Z	min_valuerH   r-   r-   r.   $test_arrow_floordiv_integral_invalid  s   

"rJ  c                 C  s<   t jdg| d}|d }t jtdg| d}t|| d S )Nr>   rS   r   inf)ra   r{   r  r   r   )r4   rH   r   r   r-   r-   r.   &test_arrow_floordiv_floating_0_divisor  s   rL  )r   r  r  c                 C  s>   t jdd gdd}|| }t jdd g| d}t|| d S )Nr:   r   rS   r  r  r-   r-   r.   (test_astype_int_with_null_to_numpy_dtype  s   
rM  c                 C  sP   t |  j}t| }tj|g|d}tjdg|d}|| }t|| d S )NrS   r:   )	r   rI  r2  r   r   ra   r{   r   r   )r   Z	max_valuer4   rH   rI   r   r-   r-   r.   )test_arrow_integral_floordiv_large_values  s   rN  c                 C  sH   t jdg| d}t jdg| d}t jdgdd}|| }t|| d S )Nr   rS   rE  r   re  r4   rH   rI   r   r   r-   r-   r.   &test_arrow_true_division_large_divisor  
   rP  c                 C  sH   t jdg| d}t jdg| d}t jdg| d}|| }t|| d S )Nr   rS   rE  re  rO  r-   r-   r.   'test_arrow_floor_division_large_divisor$  rQ  rR  c                  C  sD   g d} t j| dd}t ttjt | dd}t|| d S )N)2020-01-01 04:30:00z2020-01-02 00:00:00z2020-01-03 00:00:00timestamp[ns][pyarrow]rS   TZfrom_pandas)ra   r{   r!   r)   rb   r!  r   r   )Zstring_datesr   r   r-   r-   r.   $test_string_to_datetime_parsing_cast.  s   rV  z0pairwise_diff_checked not implemented in pyarrowc                 C  sl   | j js4t| }td|j  d}tjt|d t| 	  W d    d S 1 s-w   Y  d S d S )NzCannot interpolate with z dtyper   )
r4   r   ra   r{   reescaper&   r$   r   Zinterpolate)rd   r~   r   r-   r-   r.   test_interpolate_not_numeric8  s   
"rY  c               	   C  sH   dg} t j| dd}t ttjtddddgdd	}t|| d S )
Nz11:41:43.076160ztime64[us][pyarrow]rS   r  )   +   i) TrU  )ra   r{   r!   r)   rb   r   r   r   )Zstring_timesr   r   r-   r-   r.    test_string_to_time_parsing_castC  s   r\  c                  C  sB   t jg ddd} | d}t jddtjgdd}t|| d S )Nr   (   Nr  rS   r   r   r^  )ra   r{   r   r   r   r   r   r  r-   r-   r.   test_to_numpy_floatM  s   
r_  c                  C  s:   t jdgdd} | jtjd}tdg}t|| d S )NrS  rT  rS   l    P)#-/ )ra   r{   r   r   r   rb   r   r   r  r-   r-   r.   test_to_numpy_timestamp_to_intU  s   r`  c                  C  sJ   t jg ddd} | jdd dd}t jddtjgd	d}t|| d S )
Nr]  r   rS   c                 S  s   dS )N*   r-   r   r-   r-   r.   r   _  r   z,test_map_numeric_na_action.<locals>.<lambda>r   r   g      E@r   )ra   r{   r   r   r   r   r   r  r-   r-   r.   test_map_numeric_na_action]  s   rb  (  rx  Z
__future__r   r   r   r   r   Zdecimalr   ior   r	   rX  r  rW  Znumpyr   r&   Zpandas._libsr
   Zpandas._libs.tslibsr   Zpandas.compatr   r   r   r   r   r   r   r   r   Zpandas.core.dtypes.dtypesr   r   Zpandasra   Zpandas._testingZ_testingr   Zpandas.api.extensionsr   Zpandas.api.typesr   r   r   r   r   r   r   Zpandas.tests.extensionr   Zimportorskipr)   Zpandas.core.arrays.arrow.arrayr!   Z(pandas.core.arrays.arrow.extension_typesr"   r/   ZfixtureZALL_PYARROW_DTYPESr   r4   rd   rh   ri   ro   rs   ru   ry   ZExtensionTestsrz   rc  r'   ra  ZALL_INT_PYARROW_DTYPESr~  r  r  r  r  r  r  r  r  r  bytesZlarge_binaryZlarge_stringrk  r   r  Z
large_listZmap_r   structrR  dictr  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  compiler  r  r  r  r  r  r  r  r   r$  r&  r*  r+  Zskipifr/  r0  r2  r(   r  r7  r8  r?  r@  rN  rU  rV  r[  r`  rb  ri  rl  ro  rr  rt  rw  ry  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r
  r  r  ZFLOAT_PYARROW_DTYPESr  ZTIMEDELTA_PYARROW_DTYPESr  ZDATETIME_PYARROW_DTYPESr  r  r   r"  r#  r&  r(  r)  r*  r,  r-  r1  r  r   r3  r5  r6  r7  r;  r<  r=  r?  rB  rC  rD  rF  ZSIGNED_INT_PYARROW_DTYPESrH  rJ  ZFLOAT_PYARROW_DTYPES_STR_REPRrL  rM  rN  rP  rR  rV  rY  r\  r_  r`  rb  r-   r-   r-   r.   <module>   s   ,$	


;


:


      > "
	I



 
		

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



	 



*









	








("		



	

											

		

