o
    vh                    @  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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dd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.d/ ZejIJd0d1d|gd2d3 ZejIJd0d4d|gd5d6 ZejIJd7d8d9gejIJd:d;d<gd=d>ggd?d@ ZejIJdddgdAdB ZejIJdCdDdEgejIJdFddgdd>ggdGdH ZejIJdIdJdKgdLdM ZejIJdFddgdd>ggdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZejIJdCdXdYgdZd[ Zd\d] Zd^d_ Zd`da ZejIJdbddgdcdd Zdedf ZejIJdgg dhdidj Zdkdl ZejIJdmdndogdpdgdqdgdrdgdsdgdtdgdudgdvdgdwd>gdxdgdydzgd{dgd|d}gd~dgddgdedoddgdedd>ddzggdd Zdd Zdd Zdd ZejIJdCddgdd Zdd ZejIJdg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dCg ddd ZejIJdCg ddd ZejIJdg dejIJdCg ddd Zdd ZejIJdddgdd Zdd Zdd ZejIJdgddgdd ZejIJddedodѐddѐdgde$Ődggdd ZƐdd ZǐdÐdĄ ZejIJdgddgdŐdƄ ZejIJddǐdgdɐdʄ ZejIJdm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.d/ ZejIJdd!d"gd0d1 ZejIJdd!d"gd2d3 Zd4d5 Z ejIjed6dݍd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdS (A  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-   _/var/www/html/hyperkenya/venv/lib/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   Series_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 )
N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,   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)   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)   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   	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)check_dtype)
getattrr4   r2   r)   rT   is_temporal	bit_widthastyper   assert_series_equal)r}   r   op_namer   r   pa_type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   configoptionmarkexprr&   skipr'   r(   r+   rU   rY   	TypeErrorr   )
r}   rd   all_numeric_accumulationsr   r,   r   r   r   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   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)   
decimal128rT   r^   r   )r}   arrr   r   r   	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)int64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   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   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   backfill)method)isnafillnar   r   )r}   rd   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   
with_dtyperS   F)indexna_rep)r4   r  r  )r4   r2   r)   rT   rY   r+   r&   r'   r(   r`   r[   unit
ValueErrorr_   ra   	DataFramer{   r   to_csvr   r   r   r	   read_csvr   assert_frame_equal)
r}   r  rd   r  r,   rc   df
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   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.   r2    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   r4  r,   rc   r   r-   r.   r5    s   zTestArrowArray.test_diffc                 C  s.   |d d }|  }|jtt ksJ d S )NrF   )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   divider   yr-   r-   r.   r9    s   z1TestArrowArray.get_op_from_name.<locals>.rtruediv	rfloordivc                 S  r:  r   )r   floor_divider<  r-   r-   r.   r   $  s    z1TestArrowArray.get_op_from_name.<locals>.<lambda>)stripr   get_op_from_name)r}   r   short_opnamer9  r-   r-   r.   rA    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)rN  rM  r!  z	duration[]__pow__)r$  columns) r   r   ra   r(  ilocr4   r2   r{   r)   rT   rV   rw   r\   r[   rZ   rY   rb   _valuesrf   	is_date64r&  r   r   r   r   r   	get_dtyper   r   r   r$  rQ  )r}   r   objotherpointwise_resultr   	was_frameexpected_dataoriginal_dtypeorig_pa_typepa_expectedr&  r   	alt_dtype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__rJ  rK  rL  __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__ra  )r`   r   r   rU  r2   rj  r)   rT   r^   r_   rV   rw   rY   )r}   r   rV  rW  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   rd  z  not supported betweenpd.NA and z Python scalarr#   re  zdivide by 0rK  )rj  r)   rT   rV   rw   rY   r&   r'   r(   r]   r\   r   r*   )r}   ri  rc   r'   rp  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 Nro  z%Skip testing Python string formatting)r4   r2   r)   rT   r_   r&   r   rt  r+   r   test_arith_series_with_scalarr}   rd   all_arithmetic_operatorsr,   rc   r'   r   r-   r.   rv    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 ru  )r4   r2   r)   rT   r^   r_   r&   r   rt  r+   r   test_arith_frame_with_scalarrw  r   r-   r.   ry    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 )Nrf  zJImplemented pyarrow.compute.subtract_checked which raises on overflow for r#   r   rS   )r4   r2   r)   rT   rX   r+   r&   r'   r(   r*   rt  ra   r{   rb   rR  lencheck_opname)	r}   rd   rx  r,   rc   r'   r   r   rW  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_arrayr3  r   r-   r.   r~  $  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)boolean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operatorrE  rG  rD  r   r)   bool_r   r   )	r}   r  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   rk  )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.  r2  r5  r7  _combine_le_expected_dtyperA  r`  rj  rr  rt  rv  ry  r|  r~  r  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   FrI  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)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  rI  rS   r  r}   rW  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   FrI  rS   r  )	TFNFFFNFNr  r  r-   r-   r.   test_kleene_andx  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_scalar  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   FrI  rS   r  )	FTNTFNNNNr  r  r-   r-   r.   test_kleene_xor  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_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 )Nr  r  rS   rI  F)ra   r{   r   r   r)   r  r   r   )r}   opr  rd   r  r  r   r   r-   r-   r.   test_logical_masked_numpy  s   
z(TestLogicalOps.test_logical_masked_numpy)r  r  r  __doc__r  r&   r'   r  ra   NAr   r  r  r  r  r  r  r  r-   r-   r-   r.   r  F  sZ    











r  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   mask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]rN  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)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  defgdefgr  )r  r   r   r  r-   r-   r.   .test_arrow_string_multiplication_scalar_repeat%  s   r  interpolation)linearr  highernearest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#   )r  r  zM8[z, rO  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   pd_dtype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   
multi_modesingle_mode)r1   c                 C  s@   |  |}t|}|jdd}t|  |}t|| d S )NTdropna)r  ra   r{   moder   r   )ro   take_idx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   	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_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!   r)   rb   r   ra   corecommonis_bool_indexerr{   r  rz  r   asarrayr   r   )rd   rN  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dumpsrz  loadsr   r   )rd   r   expected_slicedfull_pickledsliced_pickledr   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   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   r  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   r  r   r   r   r   )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 )	NTrI  rS   F)r   r7   r   r8   )	ra   rb   r  r   r   r  r   r   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   rz  r4   r   r   tolist)rd   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   types_mapperrS   )r)   rb   ra   	Timestampdate32r  r   date64getr{   r   r   )
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   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{   r  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   r  r{   r&   r$   r'  searchsorted)rs   	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   )by)ra   r(  r{   r   r)   
dictionaryint32r   r  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   )r0  r   r   r   r-   r-   r.   test_str_count     r1  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     "r6  zside, str_funcr  rjustr  ljust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sidefillchar)
ra   r{   r   r)   r   r   padr   r   r   )r=  str_funcr   r   r   r-   r-   r.   test_str_pad  s   rA  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?  r5  r-   r-   r.   test_str_pad_invalid_side  r7  rB  zpat, case, na, regex, expabFT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   containsr  r   r   )r0  rE  rF  rG  r  r   r   r   r-   r-   r.   test_str_contains  s   rI  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:   r3  )
ra   r{   r   r)   r   r&   r$   r`   r   rH  r5  r-   r-   r.   #test_str_contains_flags_unsupported  r7  rJ  zside, pat, na, exp
startswith)TNFrI   r  endswith)FTFbc)rH   eg)TNT)rH   rj   rO  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   )rF  
ra   r{   r   r)   r   r   r   r  r   r   )r=  r0  rF  r  r   r   r   r-   r-   r.   test_str_start_ends_with  s   rR  r=  )rK  rL  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-   rQ  )r=  r   r   r   r-   r-   r.   /test_str_starts_ends_with_all_nulls_empty_tuple  s   rS  zarg_name, argreplrE  r4  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)r0  rT  rG  zreplace is not supportedr   r-   )
ra   r{   r   r)   r   r&   r$   r`   r   replace)arg_nameargr   kwargsr-   r-   r.   test_str_replace_unsupported  s   "rY  zpat, repl, n, regex, exprH   r   r<   xbxcxbacz[a-b]xxxcc                 C  sT   t jdd gtt d}|jj| |||d}t j|tt d}t|| d S )NabacrS   )nrG  )	ra   r{   r   r)   r   r   rU  r   r   )r0  rT  r^  rG  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  aaaaaarS   rH   r  TrM  r    storage)rc  r   )ra   r{   r   r)   r   r   rU  r   r   r   StringDtyper4   r   r   )	r   actualr   ser2actual2	expected2ser3actual3	expected3r-   r-   r.   test_str_replace_negative_n#  s   rl  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  r5  r-   r-   r.   test_str_repeat_unsupported6  r7  rm  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<     ro  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   rE  rF  
ra   r{   r   r)   r   r   r   r  r   r   r0  rE  rF  r  r   r   r   r-   r-   r.   test_str_matchC  s   rt  )TTFNAbc)FFFNabc$TFFNzabc\$FTFNzAbc$zAbc\$c                 C  sR   t jg dtt d}|jj| ||d}t j|tt d}t	|| d S )N)r  rv  z$abcNrS   rq  rr  rs  r-   r-   r.   test_str_fullmatchU  s   ry  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   )subrz  r{  r  exp_typr   r   r   r-   r-   r.   test_str_findl  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~  rz  r{  r:   
ra   r{   r   r)   r   r   r}  r  r   r   r  r-   r-   r.   test_str_find_negative_startw     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   rC  r:   )rz  r<   r   r|  r  r-   r-   r.   test_str_find_no_end  s   r  c                  C  r  )NabcdefgrS   dra  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~  rz  r<   r  r  r-   r-   r.   test_str_find_large_start  s   r  z,https://github.com/apache/arrow/issues/36311r   rz  )ra  r   r:      Nr{  )r  r<   r   r   r  Nr~  )r  azabcerH   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)abcaadefr  abcdeddefgj8292rC  rH   r  rS   r   rb  r    )ra   r{   r   r)   r   r   rd  r   r}  r4   r   r   )	rz  r{  r~  rN  object_seriesr   r   arrow_str_seriesresult2r-   r-   r.   test_str_find_e2e  s   
r  c                  C  r  )Nr  rS   r  ra  r  r  r<   r  r  r-   r-   r.   2test_str_find_negative_start_negative_end_no_match  r  r  zi, exp)rI   rN  N)rj   rN  Nr>   )rj   NNra  )rH   NNr  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   r  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   "r  c                  C  sN   t ttg d} | jd}t jg dtt d}t	
|| d S )N)r  r  Nr  r  rS   )ra   r{   r!   r)   rb   r   r  r   r   r   r   r  r-   r-   r.   test_str_join_string_type  s   r  zstart, stop, step, exp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   )rz  stopstepr  r   r   r   r-   r-   r.   test_str_slice  s   
r  zstart, stop, repl, expaxcdxcdcdc                 C  r  r  )	ra   r{   r   r)   r   r   slice_replacer   r   )rz  r  rT  r  r   r   r   r-   r-   r.   test_str_slice_replace  s   	r  zvalue, method, exp)a1cisalnumT)z!|,r  F)aaaisalphaT)z!!!r  F)u   ٠	isdecimalT)z~!r  F)rJ   isdigitT)~r  F)r  islowerT)aaAr  F)r  	isnumericT)11Ir  F) isspaceT)r  r  F)zThe ThatistitleT)zthe Thatr  F)AAAisupperT)AAcr  Fc                 C  sR   t j| d gtt d}t|j| }t j|d gtt d}t	|| d S r   rQ  )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 dEFrS   	ra   r{   r   r)   r   r   r   r   r   )r  r  r   r   r   r-   r-   r.   test_str_transform_functions  s   r  c                  C  sN   t jdd gtt d} | j }t jdd gtt d}t	|| d S )Nr  rS   r5   )
ra   r{   r   r)   r   r   rz  r-  r   r   r  r-   r-   r.   test_str_len%  s   
r  zmethod, to_strip, val)r@  Nz abc )r@  r   xabcx)lstripNz abc)r  r   xabc)rstripNzabc )r  r   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  r  )r  r  valr   r   r   r-   r-   r.   test_str_strip,  s   r  r  abc123c                 C  P   t j| d gtt d}|jd}t jdd gtt d}t|| d S NrS   r  r  )	ra   r{   r   r)   r   r   removesuffixr   r   r  r   r   r   r-   r-   r.   test_str_removesuffix>  r2  r  123abcc                 C  r  r  )	ra   r{   r   r)   r   r   removeprefixr   r   r  r-   r-   r.   test_str_removeprefixF  r2  r  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_encodeN  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  rP  NrS   rI   r3  )
ra   r{   r   r)   r   r   findalllist_r   r   )r4  r   r   r   r-   r-   r.   test_str_findall]  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abcbarS   rj   r>   zsubstring not foundr   r  )ra   r{   r   r)   r   r   r   r  r   r   r&   r$   r'  )r  rz  r{  r   r   r   r-   r-   r.   test_str_r_indexe  s   	"r  formNFCNFKCc                 C  s>   t jdd gtt d}|j| }| }t	|| d S r  )
ra   r{   r   r)   r   r   	normalizer  r   r   )r  r   r   r   r-   r-   r.   test_str_normalizew  s   r  c                 C  sT   t jg dtt d}|jd| |}t jg dtt d}t	|| d S )N)r  r  NrS   rj   )r>   r<   N)
ra   r{   r   r)   r   r   rfindr  r   r   )rz  r{  r   r   r   r-   r-   r.   test_str_rfind  s   r  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 )Nr  rS   a   rI   bbcbb)	ra   r{   r   r)   r   r   	translater   r   r  r-   r-   r.   test_str_translate  s   r  c                  C  rn  )Nr  rS   r   zabc
ba)	ra   r{   r   r)   r   r   wrapr   r   r  r-   r-   r.   test_str_wrap  rp  r  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   )TTFr  r  )rH   rI   rj   )r4   rQ  )ra   r{   r   r)   r   r   get_dummiesr(  r  r   r+  r  r-   r-   r.   test_get_dummies  s   

r  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 )	Nr  rS   rI   )rH   rI   cbar  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   )a1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a1cbcba2cbcbNrS   rj   r  rI   rI   a2rI   rI   r:   r^  r  bcbr  z[1-2]T)rG  rH   cbcb)rG  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  b2c3rS   z*pat=.* must contain a symbolic group name.r   z[ab](\d))
ra   r{   r   r)   r   r&   r$   r'  r   extractr5  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)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!  rM  rN  c                 C  sF   ddg}t | }tj||d}tt jdd g|d}t|| d S )N1000NaTrS     r  )r)   durationr!   r   rb   r   r   )r&  stringsr   r   r   r-   r-   r.   #test_duration_from_strings_with_nat2	  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_dt<	  s   "r#  zprop, expectedyear  dayday_of_week	dayofweekweekdayday_of_year	dayofyearhourminuteis_leap_yearmicrosecondrG   month
nanosecondr  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   r  )r$  r0  r&  r,  r-  r3  r/  r1  r"  rS   r  )ra   r{   r  r   r)   r  r   r  r   r   r  r   time64r!   rb   r   r   )propr   r   r   exp_typer-   r-   r.   test_dt_propertiesE	  s.   




r7  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$  r0  r&  r,  r:   rD   r!  rS   rx  FFTN)ra   r{   r   r   r)   r  r  is_month_startr  r   r   is_month_endr  r-   r-   r.   test_dt_is_month_start_endv	     	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   r9  r:   r!  rS   rx  rw  )ra   r{   r   r   r)   r  r  is_year_startr  r   r   is_year_endr  r-   r-   r.   test_dt_is_year_start_end	  r>  rA  c               	   C  r8  )Nr%        r   r9  r:   rD   r!  rS   rx  r:  )ra   r{   r   r   r)   r  r  is_quarter_startr  r   r   is_quarter_endr  r-   r-   r.   test_dt_is_quarter_start_end	  r>  rF  days_in_month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   rC  r9  r5   r:   r>   r!  rS   )rD   rC     N)ra   r{   r   r   r)   r  r   r  r  r   r   r  r-   r-   r.   test_dt_days_in_month	  s   	rJ  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   rC  r$  r0  r&  r5   r:   r9  r>      ;   )r$  r0  r&  r,  r-  r3  r!  rS   )
ra   r{   r   r   r)   r  r  r  r   r   r  r-   r-   r.   test_dt_normalize	  s$   
		rN  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   r9  rS   r   r  )ra   r{   r   r   r)   r  r  r&  r   r!   rb   r4  r   r   r&  r   r   r   r-   r-   r.   test_dt_time_preserve_unit	  s    rP  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   r9  r"  r   rS   )
ra   r{   r   r   r)   r  r  r   r   maybe_get_tz)r   r   r   r-   r-   r.   
test_dt_tz	  s   rT  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   r9  r"  rS   )r%  r:   r:   r  )r$  weekr&  r   rQ  r4   )ra   r{   r   r   r)   r  r  isocalendarr(  r   r+  r  r-   r-   r.   test_dt_isocalendar	  s   
rX  day_nameSunday
month_name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:   rM  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   r9  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_  )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   r9  r"  rS   zambiguous is not supported.r   1hr  	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   "rg  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   r9  r"  rS   zfreq='1B' is not supportedr   1Bz$Must specify a valid frequency: None)ra   r{   r   r   r)   r  r&   r$   r'  r   r  rf  r-   r-   r.   "test_dt_roundlike_unsupported_freq%
  s   "ri  freq)Dhr   rN  rM  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:   rK  r"  r?   )ra   r{   r   r   r)   r  r   r  r   r   r   )rj  r  r   rc   r   r   r-   r-   r.   test_dt_ceil_year_floor2
  s   rm  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>H
      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   r0  FutureWarningr  r  r   rb   r   r   r   r   )rd   r   r	  r   r   r-   r-   r.   test_dt_to_pydatetime>
  s   rw  	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   rn  r   z#to_pydatetime cannot be called with)ra   r{   r   r   r   r)   r   r0  rv  r&   r$   r'  r  r  )rx  r   r	  r-   r-   r.    test_dt_to_pydatetime_date_errorP
  s   "rz  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   r9  r"  rS   z ambiguous='NaT' is not supportedr   r  r  rb  z"nonexistent='NaT' is not supportedrd  )ra   r{   r   r   r)   r  r&   r$   r`   r  tz_localizer5  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   r9  r"  rQ  rR  rS   )
ra   r{   r   r   r)   r  r  r{  r   r   r  r-   r-   r.   test_dt_tz_localize_nonei
  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   r9  rS   rQ  r  r/   ra   r{   r   r   r)   r  r  r{  rb   computeassume_timezoner!   r   r   )r&  r,   r   r   exp_datar   r-   r-   r.   test_dt_tz_localizev
  s   r  znonexistent, exp_dateshift_forwardrC   r9  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>   rC  )r$  r0  r&  r,  r-  r"  rS   rQ  rd  r  r~  )re  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   r9  r"  rS   z"Cannot convert tz-naive timestampsr   r  )ra   r{   r   r   r)   r  r&   r$   r   r  
tz_convertr5  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   r9  r"  rQ  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   r9  rQ  rS   z
US/Easternr  rO  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"  rM  )ra   r{   r  as_unitr   rU  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   )r5  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  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  ro  r   )rf   r   rp  r-   r-   r.   rs    rt  z)test_dt_to_pytimedelta.<locals>.<genexpr>timedelta64[ns])r   ra   r{   r   r)   r  r  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  hoursminutesr  millisecondsr  r  r   rV  )ra   r{   r  r   r)   r  r  
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   r  )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)trueTRUETruer?   r  )falseFALSEFalse0r@   TFrS   rI  r  r  zFailed to parser   )rz  r!   r   r)   r  ra   rb   r   r   r&   r$   r*   )true_stringsfalse_stringsnullsr   boolsr   r   r-   r-   r.   %test_from_sequence_of_strings_boolean5  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   r  r   r   )r4   r   r   r   r-   r-   r.   %test_concat_empty_arrow_backed_seriesG  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_arrayO  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  Y  s   
z#OldArrowExtensionArray.__getstate__)r  r  r  r  r  r-   r-   r   r.   r  X  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_arrowextensionarray_  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   onesr  r  zerosr   )Nr   r   r-   r-   r.   /test_setitem_boolean_replace_with_mask_segfaulth  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_arrayq  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)ignore_index)NNr   r:   )ra   r(  r   r)   nullr  r   r+  )r,  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&  )rq  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   fromisoformatr  ra   r{   r   rf   repr)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   )data_tsdata_tdser_ts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)floating
datetime64timedelta64zfin infer_dtype pd.NA is not ignored in these cases even with skipna=True in the list(data) check belowr   Tr   )r
   infer_dtyper  r&   r'   r(   r+   r  )rd   r,   rr  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   r  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&  r  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   r  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  r  r   r  r   r  r-   r-   r.   test_iter_temporal4  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_intK  s   r  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   nat)r!   r)   rb   r   rT   r\   ra   r  r&  r  r  r   r   r[   r  r  r   to_pandas_dtyperf   datetime_datar   r   )r   r4   r   r   r  rF  r   r-   r-   r.   test_to_numpy_temporalS  s    r  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$  rQ  r4   )ra   r(  r  r   Indexr   r+  )rh   r,  r   r   r-   r-   r.   %test_groupby_count_return_arrow_dtypep  s   r  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   )	list_sizerS   )	ra   r{   r   r)   r  r  r4   rf   r  )r   r   r-   r-   r.   test_fixed_size_list|  s
   "r  c                  C  s@   t jt jddddgttdd} t| }d}||ksJ d S )N2012r   )r4  r  rk  rV  z#     col
0  15340
1  15341
2  15342)ra   r(  period_ranger   r"   r  )r,  r   r   r-   r-   r.   'test_arrowextensiondtype_dataframe_repr  s   
r  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[rO  )	ra   r{   r   r   rb   r&  r  r   r   )r   ser1rf  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!   	factorizer   intpr  r   r   r   assert_index_equal)r   r   res_indicesres_uniquesexp_indicies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   r  r   r   CategoricalDtyper   r   )arrsr   r   r  r   r-   r-   r.   "test_dictionary_astype_categorical  s   

r  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;   r  )rH   rI   r   r   r-   r-   r.   test_arrow_floordiv  s
   r  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 r  )rH   r   r   r-   r-   r.    test_arrow_floordiv_large_values  s   r  r   r   c                 C  s(   t jdg| d}|d }t|| d S )N   rS   r:   r  )r4   rH   r   r-   r-   r.   )test_arrow_floordiv_large_integral_result  s   r  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
   r  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   iinfor  r   ra   r{   r   r&   r$   r)   r
   r*   )r   	min_valuerH   r-   r-   r.   $test_arrow_floordiv_integral_invalid  s   

"r  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   r  )r   ru  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   
r  c                 C  sP   t |  j}t| }tj|g|d}tjdg|d}|| }t|| d S )NrS   r:   )	r   r  r  r   r   ra   r{   r   r   )r   	max_valuer4   rH   rI   r   r-   r-   r.   )test_arrow_integral_floordiv_large_values
  s   r  c                 C  sH   t jdg| d}t jdg| d}t jdgdd}|| }t|| d S )Nr   rS   r  r   r  r4   rH   rI   r   r   r-   r-   r.   &test_arrow_true_division_large_divisor  
   r  c                 C  sH   t jdg| d}t jdg| d}t jdg| d}|| }t|| d S )Nr   rS   r  r  r  r-   r-   r.   'test_arrow_floor_division_large_divisor  r   r!  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from_pandas)ra   r{   r!   r)   rb   r  r   r   )string_datesr   r   r-   r-   r.   $test_string_to_datetime_parsing_cast)  s   r'  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   interpolate)rd   r   r	  r-   r-   r.   test_interpolate_not_numeric3  s   
"r+  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   rB  )   +   i) Tr$  )ra   r{   r!   r)   rb   r   r   r   )string_timesr   r   r-   r-   r.    test_string_to_time_parsing_cast>  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   r1  )ra   r{   r   r   r   r   r   r  r-   r-   r.   test_to_numpy_floatH  s   
r2  c                  C  s:   t jdgdd} | jtjd}tdg}t|| d S )Nr"  r#  rS   l    P)#-/ )ra   r{   r   r   r  rb   r   r   r  r-   r-   r.   test_to_numpy_timestamp_to_intP  s   r3  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 )
Nr0  r   rS   c                 S  s   dS )N*   r-   r   r-   r-   r.   r   Z  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_actionX  s   r5  (  r  
__future__r   r   r   r   r   decimalr   ior   r	   r  r  r(  numpyr   r&   pandas._libsr
   pandas._libs.tslibsr   pandas.compatr   r   r   r   r   r   r   r   r   pandas.core.dtypes.dtypesr   r   pandasra   pandas._testing_testingr   pandas.api.extensionsr   pandas.api.typesr   r   r   r   r   r   r   pandas.tests.extensionr   importorskipr)   pandas.core.arrays.arrow.arrayr!   (pandas.core.arrays.arrow.extension_typesr"   r/   fixtureALL_PYARROW_DTYPESr   r4   rd   rh   ri   ro   rs   ru   ry   ExtensionTestsrz   r  r'   r  ALL_INT_PYARROW_DTYPESr  r  r  r  r  r  r  r  r  r  byteslarge_binarylarge_stringr  r  r  
large_listmap_r   structr}  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/  r1  r6  rA  rB  rI  rJ  rR  rS  compilerY  r_  rl  rm  ro  rt  ry  r-  r  r  r  r  r  skipifr  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#  r7  r=  rA  rF  rJ  rN  rP  rT  rX  r]  r_  rg  ri  rm  rw  rz  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  FLOAT_PYARROW_DTYPESr  TIMEDELTA_PYARROW_DTYPESr  DATETIME_PYARROW_DTYPESr  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  SIGNED_INT_PYARROW_DTYPESr  r  FLOAT_PYARROW_DTYPES_STR_REPRr  r  r  r  r!  r'  r+  r/  r2  r3  r5  r-   r-   r-   r.   <module>   s   ,$	


;


:


      > "
	I



 
		

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

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

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