U
    mdm                    @   s  d Z ddlmZmZmZmZ ddlmZ ddlmZm	Z	 ddl
Z
ddlZddlZddlZddlZddlmZ ddlmZmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddl Z!ddl"m#Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. ej/dddZ0ddl1m2Z2 ddl3m4Z4 ej5e$j6e7ddd Z8ej5dd Z9ej5dd Z:ej5ddgddd Z;ej5dd Z<ej5dd Z=ej5d d! Z>ej5d"d# Z?ej5d$d% Z@G d&d' d'e.jAZBG d(d) d)e.jCZDG d*d+ d+e.jEZFG d,d- d-e.jGZHG d.d/ d/e.jIZJG d0d1 d1e.jKZLG d2d3 d3e.jMZNG d4d5 d5e.jOZPG d6d7 d7e.jQZRG d8d9 d9e.jSZTG d:d; d;e.jUZVG d<d= d=e.jWZXG d>d? d?e.jYZZG d@dA dAe.j[Z\G dBdC dCe.j]Z^G dDdE dEe.j_Z`G dFdG dGe.jaZbG dHdI dIe.jcZdG dJdK dKe.jeZfG dLdM dMZgdNdO ZhdPdQ ZiejjkdRdSdTdUdVdWgejjkdXdYdYdYggdZd[ Zlejjjkd\ddd]d]d^d^gdd^ggdddd]d^d^gdgggd_d`gdadbdc Zmddde Znejjkdfe0o epge0odgepge0q epge0r e7ge0se0t euge0ve0t euge0we0x e0t euge0ydhe0z fdie0x fge{ge0|e0t e0t egg	djdk Z}dldm Z~dndo Zdpdq Zdrds Zdtdu Zdvdw Zdxdy Zdzd{ Zd|d} Zd~d Zdd Zdd Zejjkdejejfdgdd Zdd Zdd Zdd Zejjjedddd Zejjjedddd Zdd Zdd Zdd Zejjkdddgdd Zdd Zejjkdddgddgddggdd Zdd Zejjkdddddddggddddddggddddddggddddddggddddddgggdd Zdd Zejjkddddddggdddddggdddddggdddddgggdd Zejjkddedgde7gddgddggddń Zejjkdddddddggddddddggddddddgggddτ Zddф ZejjjededӍddՄ Zejjkddddddggdddddggdddddggdddddggdddddggdddddgggdd؄ Zejjkddddddggdddddggdddddggdddddggdddddggdddddgggddۄ Zejjkddddddge0 gdddd]dge0t ggdd߄ Zdd Zejjkdddddggddddggd]dddggddddggd^dddgggdd ZejjjdedӍdd Zejjkddd]dddggdd]dddggdddddgggdd Zejjkddd]dddggdd]dddggdd]dddgggdd Zejjkddddgdddgdddgdddgdddgdddgdddgd ddgdddgdddgdddgdddgdddgdddgd	d
dgdd
dgdddgdddggdd ZejjkdddgddgddgdTdgddgddggdd Zdd Zejjkd d!dd"gd!dȐd#gd$dd%gd$dȐd&gd'dd(gd'dȐd)ggd*d+ Zejjkd,d-dgd.d/ Zejjkd,d0dgd1d2 Zejjkd3d4d5gejjkd6d7d8gd9d:ggd;d< Zejjkdddgd=d> Zejjkd?d@dAgejjkdBddgdd^ggdCdD ZejjkdEdFdGgdHdI ZejjkdBddgdd^ggdJdK ZdLdM ZdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZdXdY ZejjkdZd[d\d]d^gd_d` Zdadb Zejjkdcdddegdfd]gdgdgdhdgdidgdjd]gdkd]gdldgdmd^gejdndejjjeedodpdqdrdsgdtdgdudvgdwdgdxdygdzededd]gd{edd^dydsggd|d} ZejjkdZd\d[gd~d Zejjkddddgdd ZŐdd ZƐdd Zejjkd?dddgdd Zejjkd?dddgdd Zejjjeddejjkddddddddgejjkd?dddgdd Zʐdd Zejjkdddgdd Z̐dd Z͐dd ZejjkdZd\d[gdd Zejjkddededݐddݐdgde!Аdggdd Zejjkdddgdd Zejjkdddgdd ZӐdd Zejjkdddge0q fddge0r fgdd Zejjkde$je$j dd Zejjkde$j١dd Zejjkde$jۡdÐdĄ Zejjjede0jdӍdƐdǄ ZdS (  ag  
This file contains a minimal set of tests for compliance with the extension
array interface test suite, and should contain no other tests.
The test suite for the full functionality of the array is located in
`pandas/tests/arrays/`.
The tests in this file are inherited from the BaseExtensionTests, and only
minimal tweaks should be applied to get the tests passing (by overwriting a
parent method).
Additional tests should either be added to one of the BaseExtensionTests
classes (if they are relevant for the extension interface for all dtypes), or
be added to the array-specific tests in `pandas/tests/arrays/`.
    )datedatetimetime	timedelta)Decimal)BytesIOStringION)lib)PY311is_ci_environmentis_platform_windowspa_version_under7p0pa_version_under8p0pa_version_under9p0pa_version_under11p0)PerformanceWarning)is_any_int_dtype)CategoricalDtypeType)is_bool_dtypeis_float_dtypeis_integer_dtypeis_numeric_dtypeis_signed_integer_dtypeis_string_dtypeis_unsigned_integer_dtype)baseZpyarrowz7.0.0)Z
minversion)ArrowExtensionArray)
ArrowDtype)paramsidsc                 C   s   t | jdS )N)pyarrow_dtype)r   param)request r#   Z/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/extension/test_arrow.pydtypeB   s    r%   c              	   C   s|  | j }tj|rBddgd d g ddgd  d g ddg }n,tj|r~ddgd d g ddgd  d g d	d
g }ntj|rddgd d g ddgd  d g ddg }ntj|rddgd d g ddgd  d g ddg }nxtj|rLtdtdgd d g tdtdgd  d g tdtdg }n"tj	|rt
dddt
dddgd d g t
dddt
dddgd  d g t
dddt
dddg }ntj|r<tdddddddtdddddddgd d g tddddtddddgd  d g tdddtdddg }n2tj|rtdtddgd d g tdtdgd  d g tdtdg }ntj|rtddtddgd d g tddtddgd  d g tddtddg }n|tj|r.dd gd d g dd!gd  d g d"d#g }n@tj|rjd$d%gd d g d&d'gd  d g d(d)g }nttj|| d*S )+NTF   ,         ?        g       g            ?g     X@   r   c      10.0z-2.0z-1.0z0.5z33.123            i
      ab2!>   a   b   1   2   !   >r%   )r    patypes
is_booleanis_floatingis_signed_integeris_unsigned_integer
is_decimalr   is_dater   is_timestampr   is_durationr   is_timer   	is_string	is_binaryNotImplementedErrorpdarray)r%   pa_dtypedatar#   r#   r$   rV   G   s    0000*..rV   c                 C   s   t | jd| d g| jdS )zLength-2 array with [NA, Valid]Nr   rD   type_from_sequencer%   )rV   r#   r#   r$   data_missing   s    rZ   )r   c                 C   s    | j dkr|S | j dkr|S dS )zParametrized fixture returning 'data' or 'data_missing' integer arrays.

    Used to test dtype conversion with and without missing values.
    rV   rZ   N)r!   )r"   rV   rZ   r#   r#   r$   all_data   s    

r[   c              	   C   s  | j }tj|r"d}d}d}n~tj|r>d}d}d}nbtj|rZd}d}d}nFtj|rvd}d}d	}n*tj|rtd
dd}tddd}tddd}ntj	|rt
d
dddddd}t
ddd}t
dddd}ntj|rtd}td}tdd}ntj|r<tdd}tdd}tdd}ndtj|rXd}d}d}nHtj|rtd}d}d}n,tj|rtd}td}td}nttj||dd||||g| dS )z
    Data for factorization, grouping, and unique tests.

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

    Where A < B < C and NA is missing
    FTgr)   g?r-   r   r+   r7   r3   r4   r5   i  r2   r6   r&   r9   r:   cr>   r?      cz-1.1r1   z1.1NrD   )r    rE   rF   rG   rH   rI   rJ   rL   r   rM   r   rN   r   rO   r   rP   rQ   rK   r   rR   rS   rT   )r%   rU   ABCr#   r#   r$   data_for_grouping   s^    	


ra   c                 C   s&   t | j| d | d | d g| jdS )zn
    Length-3 array with a known sort order.

    This should be three items [B, C, A] with
    A < B < C
    r      r&   rD   rW   ra   r#   r#   r$   data_for_sorting   s    rd   c                 C   s&   t | j| d | d | d g| jdS )z{
    Length-3 array with a known sort order.

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

z(TestLogicalOps.test_logical_masked_numpy)rz   r{   r|   __doc__r{  rq   rr   r   rS   rj   r  rq  r~  r  r  r  r  r  r#   r#   r#   r$   rv    sX   



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

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

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