o
    ҷh                     @   s   d 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 ddlmZ ddlmZ dd Zejd	d
gddd Zejdd Zejdd Zejdd Zejdd Zejdd Zejdd ZG dd dejZG dd dejZG dd dejZ G d d! d!ej!Z"G d"d# d#ej#Z$G d$d% d%ej%Z&G d&d' d'ej'Z(G d(d) d)ej)Z*G d*d+ d+ej+Z,G d,d- d-ej-Z.G d.d/ d/ej/Z0G d0d1 d1ej1Z2G d2d3 d3ej3Z4G d4d5 d5ej5Z6G d6d7 d7ej7Z8G d8d9 d9ej9Z:d:d; Z;dS )<aj  
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/`.

    Nis_string_dtype)ArrowStringArrayStringDtype)basec                 C   s&   | j jdkrtd dd }|| S )Npyarrowz-only applicable for pyarrow chunked array n/ac                 S   sZ   dd l }| j}t|d }|g |d | j||d  j}|jdks'J t| |S )Nr      )r   	_pa_arraylenchunked_arraychunks
num_chunkstype)arrpaarrow_arraysplit r   U/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/extension/test_string.py_split_array!   s   z!split_array.<locals>._split_array)dtypestoragepytestskip)r   r   r   r   r   split_array   s   
r   TF)paramsc                 C   s   | j S N)param)requestr   r   r   chunked/   s   r    c                 C   s
   t | dS )N)r   r   )string_storager   r   r   r   4   s   
r   c                 C   sv   t jdjttjdd}|d |d kr,t jdjttjdd}|d |d ks|  |}|r9t	|S |S )Nr	   d   )sizer      )
nprandomdefault_rngchoiceliststringascii_lettersconstruct_array_type_from_sequencer   )r   r    stringsr   r   r   r   data9   s   r/   c                 C   s$   |   tjdg}|rt|S |S )zLength 2 array with [NA, Valid]Ar,   r-   pdNAr   r   r    r   r   r   r   data_missingC   s   r5   c                 C   s"   |   g d}|rt|S |S )N)BCr0   )r,   r-   r   r4   r   r   r   data_for_sortingJ   s   r8   c                 C   s&   |   dtjdg}|rt|S |S )Nr6   r0   r1   r4   r   r   r   data_missing_for_sortingP   s   r9   c              
   C   s2   |   ddtjtjddddg}|rt|S |S )Nr6   r0   r7   r1   r4   r   r   r   data_for_groupingV   s   r:   c                       s$   e Zd Z fddZdd Z  ZS )	TestDtypec                    s&   |d|j  dksJ t | d S )Nzstring[])r   supertest_eq_with_strselfr   	__class__r   r   r>   _   s   zTestDtype.test_eq_with_strc                 C   s   t |sJ d S r   r   r?   r   r   r   test_is_not_string_typec   s   z!TestDtype.test_is_not_string_type)__name__
__module____qualname__r>   rC   __classcell__r   r   rA   r   r;   ^   s    r;   c                          e Zd Z fddZ  ZS )TestInterfacec                    (   |j j|v rtjdd t | d S Nz/2D support not implemented for ArrowStringArray)reason)r   r   r   r   r=   	test_viewr@   r/   r   arrow_string_storagerA   r   r   rM   j      zTestInterface.test_view)rD   rE   rF   rM   rG   r   r   rA   r   rI   i       rI   c                   @   s   e Zd Zdd ZdS )TestConstructorsc                 C   s   d S r   r   )r@   r/   r   r   r   test_from_dtypeq   s   z TestConstructors.test_from_dtypeN)rD   rE   rF   rS   r   r   r   r   rR   p   s    rR   c                       rH   )TestReshapingc                    rJ   rK   )r   r   r   r   r=   test_transposerN   rA   r   r   rU   w   rP   zTestReshaping.test_transpose)rD   rE   rF   rU   rG   r   r   rA   r   rT   v   rQ   rT   c                   @      e Zd ZdS )TestGetitemNrD   rE   rF   r   r   r   r   rW   }       rW   c                       rH   )TestSetitemc                    rJ   rK   )r   r   r   r   r=   test_setitem_preserves_viewsrN   rA   r   r   r[      rP   z(TestSetitem.test_setitem_preserves_views)rD   rE   rF   r[   rG   r   r   rA   r   rZ      rQ   rZ   c                   @   rV   )	TestIndexNrX   r   r   r   r   r\      rY   r\   c                   @   s   e Zd Zdd Zdd ZdS )TestMissingc                 C   s"   |  }|dg }t|| d S )Nr$   )dropnatmassert_extension_array_equal)r@   r5   resultexpectedr   r   r   test_dropna_array   s   
zTestMissing.test_dropna_arrayc                 C   s`   ||    }|d }||}||usJ t|| |jdd}||us(J t|| d S )Nr   backfill)method)isnafillnar_   r`   )r@   r/   validra   r   r   r   test_fillna_no_op_returns_copy   s   
z*TestMissing.test_fillna_no_op_returns_copyN)rD   rE   rF   rc   ri   r   r   r   r   r]      s    r]   c                   @   s>   e Zd ZdejdedefddZej	
dddgd	d
 ZdS )
TestReduceserop_namereturnc                 C   s   |j jdko	|dv S )Npyarrow_numpy)anyall)r   r   )r@   rk   rl   r   r   r   _supports_reduction   s   zTestReduce._supports_reductionskipnaTFc                 C   sZ   |}|dv rd S t |}tt t|||d W d    d S 1 s&w   Y  d S )N)minmax)rr   )r2   Seriesr   raises	TypeErrorgetattr)r@   r/   all_numeric_reductionsrr   rl   rk   r   r   r   test_reduce_series_numeric   s   
"z%TestReduce.test_reduce_series_numericN)rD   rE   rF   r2   ru   strboolrq   r   markparametrizerz   r   r   r   r   rj      s    rj   c                   @   rV   )TestMethodsNrX   r   r   r   r   r      rY   r   c                   @   rV   )TestCastingNrX   r   r   r   r   r      rY   r   c                   @   s"   e Zd ZdefddZdd ZdS )TestComparisonOpsrl   c                 C   s:   t |}|jdkrd}n|jdkrtj}nd}||S )Nr   zboolean[pyarrow]rn   boolean)r_   	get_dtyper   r%   bool_astype)r@   rl   objotherpointwise_resultr   cast_tor   r   r   _cast_pointwise_result   s   



z(TestComparisonOps._cast_pointwise_resultc                 C   s   t |}| |||d d S )Nabc)r2   ru   _compare_other)r@   r/   comparison_oprk   r   r   r   test_compare_scalar   s   
z%TestComparisonOps.test_compare_scalarN)rD   rE   rF   r{   r   r   r   r   r   r   r      s    r   c                   @   rV   )TestParsingNrX   r   r   r   r   r      rY   r   c                   @   rV   )TestPrintingNrX   r   r   r   r   r      rY   r   c                       s(   e Zd Zejd fddZ  ZS )TestGroupByz4ignore:Falling back:pandas.errors.PerformanceWarningc                    s   t  || d S r   )r=   test_groupby_extension_apply)r@   r:   groupby_apply_oprA   r   r   r      s   z(TestGroupBy.test_groupby_extension_apply)rD   rE   rF   r   r}   filterwarningsr   rG   r   r   rA   r   r      s    
r   c                   @   s    e Zd Zejdddd ZdS )Test2DCompatT)autousec                 C   s   t |trtjdd d S d S rK   )
isinstancer   r   r   )r@   r/   r   r   r   r   arrow_not_supported   s   
z Test2DCompat.arrow_not_supportedN)rD   rE   rF   r   fixturer   r   r   r   r   r      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$   zOsearchsorted requires array to be sorted, which is impossible with NAs present.)match)taker2   r3   ru   r   rv   
ValueErrorsearchsorted)r8   	as_seriesbcar   msgr   r   r    test_searchsorted_with_na_raises   s   


"r   )<__doc__r*   numpyr%   r   pandasr2   pandas._testing_testingr_   pandas.api.typesr   pandas.core.arraysr   pandas.core.arrays.string_r   pandas.tests.extensionr   r   r   r    r   r/   r5   r8   r9   r:   BaseDtypeTestsr;   BaseInterfaceTestsrI   BaseConstructorsTestsrR   BaseReshapingTestsrT   BaseGetitemTestsrW   BaseSetitemTestsrZ   BaseIndexTestsr\   BaseMissingTestsr]   BaseReduceTestsrj   BaseMethodsTestsr   BaseCastingTestsr   BaseComparisonOpsTestsr   BaseParsingTestsr   BasePrintingTestsr   BaseGroupbyTestsr   Dim2CompatTestsr   r   r   r   r   r   <module>   sT    


	



