o
    5cP                  	   @   s  d Z ddlZddlZddlmZmZ ddlmZ ddl	m
  mZ ddlmZ ddlZddlmZ ddlmZ ejdd Zejd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!ej"j#dddd  Z$ej"j#ddd!d" Z%d#d$ Z&d%d& Z'd'd( Z(d)d* Z)d+d, Z*ej"+d-ej,e-d.e.d.dej/gd/d0 Z0ej"+d1d2d3gd4d5 Z1d6d7 Z2d8d9 Z3d:d; Z4ej"+d<d2d3gej"j#d=dd>d? Z5ej"+d<d2d3gej"j#d=dd@dA Z6ej"+dBdCdDgej"+d<d2d3gdEdF Z7ej"+dBdCdDgej"+dGej8ej9gdHdI Z:dJdK Z;e<dLdMdN Z=e<dLdOdP Z>e<dLdQdR Z?dSdT Z@dUdV ZAej"+dWg dXe9g dYfg dZe9g d[fgd\d] ZBd^d_ ZCej"+d`ejDejEej-gdadb ZFdcdd ZGdedf ZHdgdh ZIdidj ZJdS )kz
This module tests the functionality of StringArray and ArrowStringArray.
Tests for the str accessors are in pandas/tests/strings/test_string_array.py
    N)pa_version_under2p0pa_version_under6p0)PerformanceWarning)is_dtype_equal)ArrowStringArrayc                 C   s   t j| dS )z=Fixture giving StringDtype from parametrized 'string_storage')storage)pdStringDtype)string_storage r   ]/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/arrays/string_/test_string.pydtype   s   r   c                 C   s   |   S )z3Fixture giving array type from parametrized 'dtype')construct_array_typer   r   r   r   cls   s   r   c                 C   s   t dt jdt jdg| di}d}t||ksJ d}t|j|ks%J | jdkr,dnd	}d
| d}t|jj|ks>J d S )NAabr   z      A
0     a
1  <NA>
2     bz40       a
1    <NA>
2       b
Name: A, dtype: stringpyarrowr   StringArray<z+>
['a', <NA>, 'b']
Length: 3, dtype: string)r   	DataFramearrayNAreprr   r   )r   dfexpectedarr_namer   r   r   	test_repr"   s    r   c                 C   s4   |  g d}|d d usJ |d tju sJ d S )N)r   Nr      )_from_sequencer   r   )r   r   r   r   r   test_none_to_nan/   s   r!   c                 C   s   |  ddg}| tjju rd}nd}tjt|d d|d< W d    n1 s(w   Y  | tjju r6d}nd}tjt|d td	d
g|d d < W d    d S 1 sVw   Y  d S )Nr   r   z4Cannot set non-string value '10' into a StringArray.Scalar must be NA or strmatch
   r   zMust provide strings.r      )	r    r   arraysr   pytestraises
ValueErrornpr   )r   arrmsgr   r   r   test_setitem_validates5   s   
"r.   c                 C   s<   t jddg| d}d|d< t jddg| d}t|| d S )Nr   cr   dr   )r   r   tmassert_extension_array_equal)r   r,   r   r   r   r   test_setitem_with_scalar_stringG   s   r3   c                 C   s   | j dkrd}tjj|td}|j| ntjjdtd}|j| ttj	ddd}d |d< |
| }t|j| s?J |
d	}t|| d S )
Nr   z6ValueError: Could not convert object to NumPy datetime)reasonr)   z/GH#36153 casting from StringArray to dt64 fails2000   )periodsr   zdatetime64[ns])r   r(   markxfailr*   node
add_markerr   Series
date_rangeastyper   r   r1   assert_series_equal)r   requestr4   r8   sercastedresultr   r   r   test_astype_roundtripP   s   


rD   c                 C   s   | j dkrd}tjjt|d}|j| tjg d| d}tjg d| d}|| }tjg d| d}t	
|| ||}t	
|| ||}tjg d| d}t	
|| |j|d	d
}tjg d| d}t	
|| d S )Nr   zLunsupported operand type(s) for +: 'ArrowStringArray' and 'ArrowStringArray'r)   r4   )r   r   r/   NNr   )xyNzN)axbyNNN)xaybNNN-)
fill_value)rI   rJ   zc-z-zN)r   r(   r8   r9   NotImplementedErrorr:   r;   r   r<   r1   r?   addradd)r   r@   r4   r8   r   r   rC   r   r   r   r   test_adde   s$   


rR   c                 C   s   | j dkrd}tjjd |d}|j| tjg d| d}tjg dgt	d}tj
tdd ||  W d    n1 s>w   Y  t|}tj
tdd ||  W d    d S 1 s_w   Y  d S )Nr   z*Failed: DID NOT RAISE <class 'ValueError'>rE   r   r   r/   r   z3 != 1r#   )r   r(   r8   r9   r:   r;   r   r   r+   objectr)   r*   r<   )r   r@   r4   r8   r   r   sr   r   r   test_add_2d   s   



"rV   c                 C   s   | j dkrd}tjjt|d}|j| tjg d| d}g d}|| }tjg d| d}t	
|| || }tjg d| d}t	
|| d S )	Nr   z@unsupported operand type(s) for +: 'ArrowStringArray' and 'list'rE   )r   r   NNr   )rF   NrG   N)rI   NNN)rK   NNNr   r(   r8   r9   rO   r:   r;   r   r   r1   r2   )r   r@   r4   r8   r   otherrC   r   r   r   r   test_add_sequence   s   
rY   c                 C   sz   | j dkrd}tjjt|d}|j| tjg d| d}|d }tjg d| d}t	
|| d| }t	
|| d S )Nr   z?unsupported operand type(s) for *: 'ArrowStringArray' and 'int'rE   r   r   Nr   r&   )aabbNrW   )r   r@   r4   r8   r   rC   r   r   r   r   test_mul   s   
r]   zGH-28527)r4   c                 C   s   t jg d| d}t g dg}||tu sJ || }t g dg| }t|| || }t g dg| }t|| d S )N)r   r   r/   r0   r   )tuvw)atbucvdw)taubvcwd)r   r   r   __add__NotImplementedr>   r1   assert_frame_equalr   r,   r   rC   r   r   r   r   test_add_strings   s   rn   c                 C   s   t jddtjtjg| d}t dtjdtjgg}||tu s"J || }t dtjtjtjgg| }t	|| || }t dtjtjtjgg| }t	|| d S )Nr   r   r   rF   rG   rI   rK   )
r   r   r+   nanr   rj   rk   r>   r1   rl   rm   r   r   r   test_add_frame   s     rp   c                    sn   d| j  d tjg d|d}dt| }tj fdd|D td}tj|dd}t|| d S )N__r   Nr/   r   r   c                    s   g | ]	}t | qS r   )getattr).0itemop_namerX   r   r   
<listcomp>   s    z2test_comparison_methods_scalar.<locals>.<listcomp>boolean)__name__r   r   rs   r+   rT   r1   r2   )comparison_opr   r   rC   r   r   rv   r   test_comparison_methods_scalar   s   r|   c                 C   sR   d| j  d}tjg d|d}t||tj}tjg ddd}t|| d S )Nrq   rr   r   NNNry   )rz   r   r   rs   r   r1   r2   )r{   r   rw   r   rC   r   r   r   r   $test_comparison_methods_scalar_pd_na   s
   r~   c                 C   s   d| j  d}tjg d|d}d}|dvr7tjtdd t||| W d    d S 1 s0w   Y  d S t|||}g dg d	d| }tj|d
d}t|| d S )Nrq   rr   r   *   )__eq____ne__znot supported betweenr#   )FNF)TNTry   )	rz   r   r   r(   r)   	TypeErrorrs   r1   r2   )r{   r   rw   r   rX   rC   expected_datar   r   r   r   )test_comparison_methods_scalar_not_string   s    
r   c                 C   s   d| j  d}tjg d|d}g d}t|||}tj|dd}t|d ||d |d< tj|dd}t|| t||tj}tjg ddd}t|| d S )	Nrq   rr   r   )NNr/   rT   ry   r}   )	rz   r   r   rs   r+   
empty_liker1   r2   r   )r{   r   rw   r   rX   rC   r   r   r   r   test_comparison_methods_array   s   r   c                 C   sB  | t jju r	d}nd}tjt|d | tjddgdd W d    n1 s(w   Y  tjt|d | tg  W d    n1 sFw   Y  | t jju ri| tjdtjgt	d | tjdd gt	d nEtjt|d | tjdtjgt	d W d    n1 sw   Y  tjt|d | tjdd gt	d W d    n1 sw   Y  tjt|d | tjdt j
gt	d W d    n1 sw   Y  tjt|d | tjdtdd	gt	d W d    n1 sw   Y  tjt|d | tjdtdd	gt	d W d    d S 1 sw   Y  d S )
Nz7StringArray requires a sequence of strings or pandas.NAzBUnsupported type '<class 'numpy.ndarray'>' for ArrowExtensionArrayr#   r   r   S1r   NaTns)r   r'   r   r(   r)   r*   r+   r   ro   rT   r   
datetime64timedelta64)r   r-   r   r   r   test_constructor_raises  s6     $r   naro   c                 C   s>   t jtdt jg}tt jtjd| gdd| d S )Nr   rT   r   )r   r'   r   r+   r   r   r1   r2   )r   r   r   r   r   test_constructor_nan_like)  s   r   copyTFc           	      C   s   |t u r| du rtjjtdd}|j| tjdtj	gt
d}tjdtjgt
d}|j|| d}|t u rFdd l}||j|| dd	}n||}t|| | rT|n|}t|| d S )
NFznumpy array are differentrE   r   r   )r   r   Ttypefrom_pandas)r   r(   r8   r9   AssertionErrorr:   r;   r+   r   ro   rT   r   r   r    r   stringr1   r2   assert_numpy_array_equal)	r   r   r@   r8   nan_arrna_arrrC   par   r   r   r   test_from_sequence_no_mutate1  s   r   c                 C   s   t jg d| d}|d}tjg ddd}t|| t jdt jdg| d}d}tjt	|d |d W d    d S 1 sBw   Y  d S )	N)123r   int64)r   r&      r   r   zJint\(\) argument must be a string, a bytes-like object or a( real)? numberr#   )
r   r   r>   r+   r1   r   r   r(   r)   r   )r   r,   rC   r   r-   r   r   r   test_astype_intK  s   
"r   c                 C   sF   t jdt jdg| d}|d}t jdt jdgdd}t|| d S )Nr   r   r   Int64r   r   )r   r   r   r>   r1   r2   r   r,   rC   r   r   r   r   test_astype_nullable_intW  s   
r   c                 C   sF   t jdt jdg| d}||}t jdtjdg|d}t|| d S )Nz1.1z3.3r   g?gffffff
@)r   r<   r   r>   r+   ro   r1   r?   )r   any_float_dtyperA   rC   r   r   r   r   test_astype_float_  s   
r   skipnazNot implemented StringArray.sumc                 C   s.   t jg d|d}|j| d}|dksJ d S )NrS   r   r   abc)r   r<   sumr   r   r,   rC   r   r   r   test_reduceg  s   r   c                 C   sD   t jg d|d}|j| d}| r|dksJ d S t |s J d S )N)Nr   Nr   r/   Nr   r   r   )r   r<   r   isnar   r   r   r   test_reduce_missingo  s
   r   methodminmaxc           	      C   s   |j dkrtrd}tjjt|d}|j| tj	g d|d}t
|| |d}|r:| dkr0dnd	}||ks8J d S |tju sAJ d S )
Nr   0'ArrowStringArray' object has no attribute 'max'rE   r   r   r/   Nr   r   r   r   r/   )r   r   r(   r8   r9   r   r:   r;   r   r<   rs   r   )	r   r   r   r@   r4   r8   r,   rC   r   r   r   r   test_min_maxz  s   r   boxc           	      C   s   |j dkr$ts|tju r$|tju rd}nd}tjjt|d}|j	| |g d|d}t
t| |}| dkr9dnd	}||ksAJ d S )
Nr   z<'<=' not supported between instances of 'str' and 'NoneType'r   rE   r   r   r   r   r/   )r   r   r   r   r(   r8   r9   r   r:   r;   rs   r+   )	r   r   r   r@   r4   r8   r,   rC   r   r   r   r   test_min_max_numpy  s   
r   c                 C   s   | j dkrd}tjjt|d}|j| tjdtj	g| d}|j
dd}tjddg| d}t|| |j
tdd}tjddg| d}t|| d}tjt|d	 |j
d
d W d    d S 1 sgw   Y  d S )Nr   zmRegex pattern "Cannot set non-string value '1' into a StringArray." does not match 'Scalar must be NA or str'rE   r   r   r   )valuez3Cannot set non-string value '1' into a StringArray.r#   r   )r   r(   r8   r9   r   r:   r;   r   r   r   fillnar1   r2   r+   str_r)   r*   )r   r@   r4   r8   r,   resr   r-   r   r   r   test_fillna_args  s    
"r   r   c                 C   sb   dd l }tjg d| d}||}|jt|| dd}| jdkr(||}||s/J d S )Nr   rS   r   Tr   r   )r   r   r   listr   r   chunked_arrayequals)r   r   datar,   r   r   r   r   test_arrow_array  s   


r   c                 C   s   dd l }tjg d| d}td|i}||}|djdks#J td| | }W d    n1 s8w   Y  t	|d j
tjsHJ |d| d}t|| |jd	 tju saJ d S )
Nr   rZ   r   r   r   r
   string[])r&   r   )r   r   r   r   tablefieldr   option_context	to_pandas
isinstancer   r	   r>   r1   rl   locr   r   string_storage2r   r   r   r   rC   r   r   r   r   test_arrow_roundtrip  s   

r   c                 C   s   dd l }tjg | d}td|i}||}|djdks!J |j|jg | dg|j	d}t
d| | }W d    n1 sFw   Y  t|d jtjsVJ |d| d	}t|| d S )
Nr   r   r   r   )r   )schemar
   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r>   r1   rl   r   r   r   r    test_arrow_load_from_zero_chunks  s   
 
r   c                 C   s   t jdddt jg| d}|jdd}t jg d|g d dd	}t|| |jd
d}t jddg|d d dd	}t|| d S )Nr   r   r   F)dropna)r&   r   r   )r   r   r   r   indexr   Tr&   r   )r   r   r   value_countsr<   r1   r?   r   r   r   r   test_value_counts_na  s   r   c                 C   sT   t jdddt jg| d}|jdd}t jddg|d d dd	d
 }t|| d S )Nr   r   r   T)	normalizer&   r   Float64r   r   )r   r<   r   r   r1   r?   )r   rA   rC   r   r   r   r    test_value_counts_with_normalize  s    r   zvalues, expectedrS   FFFrZ   )FFTc                 C   s   t j| |d} t dd7 |  }t|| t |  }t |}t|| t |  }t |}t	|| W d    d S 1 sGw   Y  d S )Nr   zmode.use_inf_as_naT)
r   r   r   r   r1   r   r<   r?   r   rl   )valuesr   r   rC   r   r   r   test_use_inf_as_na  s   	

"r   c                 C   sf   | j dkrtd| j   tjg d| d}d|j  k r.|   kr.|jddk s1J  J d S )Nr   znot applicable for rS   r   r   T)deep)r   r(   skipr   r<   nbytesmemory_usage)r   seriesr   r   r   test_memory_usage  s   
8r   float_dtypec                 C   s:   t jdg| d}||}t jdg|d}t|| d S )Ng?r   z0.1)r   r<   r>   r1   r?   )r   r   rA   rC   r   r   r   r   test_astype_from_float_dtype  s   
r   c                 C   sF   t jdt jdg| d}t|}tjdt jdgtd}t|| d S )Nr   r   r   )r   r   r   r+   rT   r1   r   r   r   r   r   "test_to_numpy_returns_pdna_default%  s   
r   c                 C   sJ   |}t jdt jdg| d}|j|d}tjd|dgtd}t|| d S )Nr   r   r   )na_value)r   r   r   to_numpyr+   rT   r1   r   )r   nulls_fixturer   r,   rC   r   r   r   r   test_to_numpy_na_value,  s
   r   c                 C   s  t jg d| d}tt| dkot |ddg}W d    n1 s%w   Y  t g d}t|| tt| dko?t |dt jg}W d    n1 sTw   Y  t g d}t|| tt| dkont |g }W d    n1 sw   Y  t g d}t|| tt| dkot |d|g}W d    n1 sw   Y  t g d}t|| d S )	NrZ   r   r   r   r/   )TFF)TFTr   )	r   r<   r1   maybe_produces_warningr   r   isinr?   r   )r   fixed_now_tsrU   rC   r   r   r   r   	test_isin4  s:   r   c                 C   s   t jg d| d}tg d}d ||< |jd t ju sJ t jg d| d}t|jt jju r3d}nd}tj	t
|d d||< W d    d S 1 sLw   Y  d S )NrS   r   )FTFr   zCannot set non-string valuer"   r#   )r   r<   r+   r   r   r   r'   r   r(   r)   r*   )r   rA   maskr-   r   r   r   (test_setitem_scalar_with_mask_validationT  s   
"r   )K__doc__numpyr+   r(   pandas.compatr   r   pandas.errorsr   pandas.util._test_decoratorsutil_test_decoratorstdpandas.core.dtypes.commonr   pandasr   pandas._testing_testingr1   pandas.core.arrays.string_arrowr   fixturer   r   r   r!   r.   r3   rD   rR   rV   rY   r]   r8   r9   rn   rp   r|   r~   r   r   r   parametrizero   float64floatr   r   r   r   r   r   r   r   r   r<   r   r   r   
skip_if_nor   r   r   r   r   r   r   float16float32r   r   r   r   r   r   r   r   r   <module>   s    

	


$!

	




 