
    Owg                       d Z ddlmZ ddlZddlm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	 Z ej.                  d
dg      d        Zej.                  d        Zej.                  d        Zej.                  d        Zej.                  d        Zej.                  d        Zej.                  d        Z G d dej>                        Z  G d dejB                        Z"d Z#y)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/`.

    )annotationsN)castis_string_dtype)ArrowStringArrayStringDtype)basec                @   |s| S | j                   j                  dk7  r| S t        j                  d      }| j                  }t        |      dz  }|j                  g |d | j                  ||d  j                        }|j                  dk(  sJ  t        |       |      S )Npyarrow   )
dtypestoragepytestimportorskip	_pa_arraylenchunked_arraychunks
num_chunkstype)arrchunkedpaarrow_arraysplits        Y/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/extension/test_string.pymaybe_split_arrayr       s    
			i	'
			Y	'B--K!E""B+fu

$
$B{56':'A'ABK !!Q&&&49[!!    TF)paramsc                    | j                   S N)param)requests    r   r   r   1   s    ==r   c                    t        |       S )N)r   r   )string_storages    r   r   r   6   s    ~..r   c                   t         j                  j                  d      j                  t	        t
        j                        d      }|d   |d   k(  rSt         j                  j                  d      j                  t	        t
        j                        d      }|d   |d   k(  rS| j                         j                  ||       }t        ||      S )Nr   d   )sizer      r   )
nprandomdefault_rngchoiceliststringascii_lettersconstruct_array_type_from_sequencer   )r   r   stringsr   s       r   datar6   ;   s    ii##A&--d63G3G.Hs-SG
!*

"))''*11$v7K7K2LSV1W !*

" 
$
$
&
5
5gU
5
KCS'**r   c                |    | j                         j                  t        j                  dg|       }t	        ||      S )zLength 2 array with [NA, Valid]Ar+   r3   r4   pdNAr   r   r   r   s      r   data_missingr=   E   s7     
$
$
&
5
5ruucl%
5
PCS'**r   c                `    | j                         j                  g d|       }t        ||      S )N)BCr8   r+   )r3   r4   r   r<   s      r   data_for_sortingrA   L   s-    

$
$
&
5
5oU
5
SCS'**r   c                ~    | j                         j                  dt        j                  dg|       }t	        ||      S )Nr?   r8   r+   r9   r<   s      r   data_missing_for_sortingrC   R   s8    

$
$
&
5
5sBEE36Gu
5
UCS'**r   c           
         | j                         j                  ddt        j                  t        j                  ddddg|       }t	        ||      S )Nr?   r8   r@   r+   r9   r<   s      r   data_for_groupingrE   X   sM    

$
$
&
5
5	c255"%%c34E 6 C S'**r   c                       e Zd Z fdZd Z fdZd Z fdZ fdZd Z	d Z
	 	 	 	 dd	Zdd
ZddZd Zej                   j#                  d       fd       Z xZS )TestStringArrayc                N    |d|j                    dk(  sJ t        | 	  |       y )Nzstring[])r   supertest_eq_with_str)selfr   	__class__s     r   rK   z TestStringArray.test_eq_with_stra   s+    '%--2222 'r   c                    t        |      sJ y r"   r   )rL   r   s     r   test_is_not_string_typez'TestStringArray.test_is_not_string_typee   s     u%%%r   c                    |j                   j                  |v rt        j                  d       t        |   |       y Nz/2D support not implemented for ArrowStringArray)reason)r   r   r   skiprJ   	test_viewrL   r6   r$   arrow_string_storagerM   s       r   rT   zTestStringArray.test_viewj   s0    ::!55KKPQ$r   c                     y r"    rL   r6   s     r   test_from_dtypezTestStringArray.test_from_dtypeo   s    r   c                    |j                   j                  |v rt        j                  d       t        |   |       y rQ   )r   r   r   rS   rJ   test_transposerU   s       r   r\   zTestStringArray.test_transposes   s0    ::!55KKPQt$r   c                    |j                   j                  |v rt        j                  d       t        |   |       y rQ   )r   r   r   rS   rJ   test_setitem_preserves_viewsrU   s       r   r^   z,TestStringArray.test_setitem_preserves_viewsx   s0    ::!55KKPQ,T2r   c                \    |j                         }|dg   }t        j                  ||       y )Nr*   )dropnatmassert_extension_array_equal)rL   r=   resultexpecteds       r   test_dropna_arrayz!TestStringArray.test_dropna_array}   s,    $$&$
''9r   c                    ||j                             }|d   }|j                  |      }||usJ t        j                  ||       |j                  d      }||usJ t        j                  ||       y )Nr   backfill)method)isnafillnara   rb   )rL   r6   validrc   s       r   test_fillna_no_op_returns_copyz.TestStringArray.test_fillna_no_op_returns_copy   sw    TYY[L!QU#T!!!
''5J/T!!!
''5r   c                x   |dv rt        |t        j                        r5t        t        t        j                  |            j                  dv rt        S t        |t        j                        r5t        t        t        j                  |            j                  dv rt        S t        S |dv r;t        t        t        j                  |            j                  dv rt        S t        S |dv rt        S |dv rEt        t        t        j                  |            j                  dv rdd l
}|j                  S t        S y )N)
__divmod____rdivmod__)r   pyarrow_numpy)__mod____rmod____pow____rpow__)__mul____rmul__)__truediv____rtruediv____floordiv____rfloordiv____sub____rsub__r   )
isinstancer:   Seriesr   r	   ra   	get_dtyper   NotImplementedError	TypeErrorr   ArrowNotImplementedError)rL   op_nameobjotherr   s        r   _get_expected_exceptionz'TestStringArray._get_expected_exception   s     33#ryy)dR\\#./g / +*E299-$R\\%03g 3 +*FFKc!23;; @  +*// 
 
 Kc!23;; @  % 222r   c                L    |dv xs |j                   j                  dk(  xr |dv S )N)minmaxrp   )anyall)r   r   )rL   serr   s      r   _supports_reductionz#TestStringArray._supports_reduction   s3    ~% *yy  O3 *>)	
r   c                    t        t        t        j                  |            }|dv r|}n4|j                  dk(  rd}n"|j                  dk(  rt
        j                  }nd}|j                  |      S )N)__add____radd__r   zboolean[pyarrow]rp   boolean)r   r	   ra   r   r   r,   bool_astype)rL   r   r   r   pointwise_resultr   cast_tos          r   _cast_pointwise_resultz&TestStringArray._cast_pointwise_result   sa    [",,s"34--G]]i'(G]]o-hhGG&&w//r   c                V    t        j                  |      }| j                  |||d       y )Nabc)r:   r~   _compare_other)rL   r6   comparison_opr   s       r   test_compare_scalarz#TestStringArray.test_compare_scalar   s#    iioC}e<r   z4ignore:Falling back:pandas.errors.PerformanceWarningc                &    t         |   ||       y r"   )rJ   test_groupby_extension_apply)rL   rE   groupby_apply_oprM   s      r   r   z,TestStringArray.test_groupby_extension_apply   s    ,->@PQr   )r   strreturnztype[Exception] | None)r   z	pd.Seriesr   r   r   bool)r   r   )__name__
__module____qualname__rK   rO   rT   rZ   r\   r^   re   rl   r   r   r   r   r   markfilterwarningsr   __classcell__)rM   s   @r   rG   rG   `   sw    (&
 
%
3
:

611	1f

0= [[ VWR XRr   rG   c                  >    e Zd Z ej                  d      d        Zy)Test2DCompatT)autousec                R    t        |t              rt        j                  d       y y rQ   )r}   r   r   rS   rY   s     r   arrow_not_supportedz Test2DCompat.arrow_not_supported   s    d,-KKPQ .r   N)r   r   r   r   fixturer   rX   r   r   r   r      s!    V^^D!R "Rr   r   c                   | \  }}}| j                  g d      }t        j                  |d<   |rt        j                  |      }d}t	        j
                  t        |      5  |j                  |       d d d        y # 1 sw Y   y xY w)N)r   r   r*   zOsearchsorted requires array to be sorted, which is impossible with NAs present.)match)taker:   r;   r~   r   raises
ValueErrorsearchsorted)rA   	as_seriesbcar   msgs          r    test_searchsorted_with_na_raisesr      sw    GAq!


	
*CeeCGiin	0  
z	-   s   !A<<B)$__doc__
__future__r   r1   typingr   numpyr,   r   pandasr:   pandas._testing_testingra   pandas.api.typesr   pandas.core.arraysr   pandas.core.arrays.string_r	   pandas.tests.extensionr
   r   r   r   r   r6   r=   rA   rC   rE   ExtensionTestsrG   Dim2CompatTestsr   r   rX   r   r   <module>r      s   #       , / 2 '"" e}% & / / + + + + + +
 + +
 + +zRd)) zRzR4'' Rr   