
    Gohq%                       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	m
Z
 ddlm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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jJ                        Z& G d dejN                        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)HAS_PYARROW)StorageExtensionDtypeis_string_dtype)ArrowStringArrayStringDtype)string_dtype_highest_priority)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        ~/var/www/html/wine-match-dev/backend/winematch-backend/venv/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   6   s    ==r"   c                &    | \  }}t        ||      S )N)r   na_valuer
   )string_dtype_argumentsr   r)   s      r    r   r   ;   s    .GXw::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    datar:   A   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/   r7   r8   pdNAr!   r   r   r   s      r    data_missingrA   K   s7     
$
$
&
5
5ruucl%
5
PCS'**r"   c                `    | j                         j                  g d|       }t        ||      S )N)BCr<   r/   )r7   r8   r!   r@   s      r    data_for_sortingrE   R   s-    

$
$
&
5
5oU
5
SCS'**r"   c                ~    | j                         j                  dt        j                  dg|       }t	        ||      S )NrC   r<   r/   r=   r@   s      r    data_missing_for_sortingrG   X   s8    

$
$
&
5
5sBEE36Gu
5
UCS'**r"   c           
         | j                         j                  ddt        j                  t        j                  ddddg|       }t	        ||      S )NrC   r<   rD   r/   r=   r@   s      r    data_for_groupingrI   ^   sM    

$
$
&
5
5	c255"%%c34E 6 C S'**r"   c                       e Zd Z fdZd Z fdZ f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dZd Z fdZ fdZ xZS )TestStringArrayc                   t         |   |       |j                  t        j                  u r|d|j
                   dk(  sJ y |j
                  dk(  r+t        j                  t              5  |dk(  sJ 	 d d d        y y # 1 sw Y   y xY w)Nzstring[]r   zstring[pyarrow_numpy])	supertest_eq_with_strr)   r>   r?   r   tmassert_produces_warningFutureWarning)selfr   	__class__s     r    rO   z TestStringArray.test_eq_with_strg   s     '>>RUU"gemm_A6666]]i'++M: 8 77778 8 (8 8s   +A>>Bc                    t        |      sJ y r%   r   )rS   r   s     r    test_is_not_string_typez'TestStringArray.test_is_not_string_typeq   s     u%%%r"   c                    |j                   t        j                  u r-|s+t        |      j	                  |j
                        }|du sJ y t        |   |       y )NF)r)   r0   nanr   is_dtypenamerN   test_is_dtype_from_name)rS   r   using_infer_stringresultrT   s       r    r[   z'TestStringArray.test_is_dtype_from_namev   sG    >>RVV#,>%[))%**5FU?"?G+E2r"   c                    |j                   t        j                  u rB|s@t        j                  t
        d      5  |j                  |j                         d d d        y t        | %  |       y # 1 sw Y   y xY w)Nz Cannot construct a 'StringDtype'match)
r)   r0   rX   r   raises	TypeErrorconstruct_from_stringrZ   rN   #test_construct_from_string_own_name)rS   r   r\   rT   s      r    rd   z3TestStringArray.test_construct_from_string_own_name}   s`    >>RVV#,>y0RS 8++EJJ78 8 G7>8 8s   A00A9c                    |j                   j                  dk(  rt        j                  d       t        |   |       y Nr   /2D support not implemented for ArrowStringArrayreason)r   r   r   skiprN   	test_viewrS   r:   rT   s     r    rk   zTestStringArray.test_view   s/    ::*KKPQ$r"   c                     y r%    rS   r:   s     r    test_from_dtypezTestStringArray.test_from_dtype   s    r"   c                    |j                   j                  dk(  rt        j                  d       t        |   |       y rf   )r   r   r   rj   rN   test_transposerl   s     r    rr   zTestStringArray.test_transpose   s/    ::*KKPQt$r"   c                    |j                   j                  dk(  rt        j                  d       t        |   |       y rf   )r   r   r   rj   rN   test_setitem_preserves_viewsrl   s     r    rt   z,TestStringArray.test_setitem_preserves_views   s/    ::*KKPQ,T2r"   c                \    |j                         }|dg   }t        j                  ||       y )Nr.   )dropnarP   assert_extension_array_equal)rS   rA   r]   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fillnarP   rw   )rS   r:   validr]   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                @    |dv rt         S |dv rt         S |dv rt         S y )N)__mod____rmod__
__divmod____rdivmod____pow____rpow__)__mul____rmul__)__truediv____rtruediv____floordiv____rfloordiv____sub____rsub__)rb   )rS   op_nameobjothers       r    _get_expected_exceptionz'TestStringArray._get_expected_exception   s@      
 
 // 
 
 r"   c                f    |dv xs, |j                   j                  t        j                  u xr |dv S )N)minmaxsum)anyall)r   r)   r0   rX   rS   serr   s      r    _supports_reductionz#TestStringArray._supports_reduction   s8    ,, *yy!!RVV+ *>)	
r"   c                B    t        |j                  t              sJ |dv S )N)cummincummaxcumsum)
isinstancer   r   r   s      r    _supports_accumulationz&TestStringArray._supports_accumulation   s#    #))%:;;;888r"   c                   t        t        t        j                  |            }|dv rF|}t	        |t
              st        j                  |      nd }t	        |t              rNt        ||      }nA|j                  t        j                  u rt        j                  }n|j                  dk(  rd}nd}|j                  |      S )N)__add____radd__r   zbool[pyarrow]boolean)r   r   rP   	get_dtyper   strr   r)   r0   rX   bool_r   astype)rS   r   r   r   pointwise_resultr   cast_todtype_others           r    _cast_pointwise_resultz&TestStringArray._cast_pointwise_result   s    [",,s"34--G5?s5K",,u-QUK+{37{K^^rvv%hhG]]i'%GG&&w//r"   c                V    t        j                  |      }| j                  |||d       y )Nabc)r>   Series_compare_other)rS   r:   comparison_opr   s       r    test_compare_scalarz#TestStringArray.test_compare_scalar   s#    iioC}e<r"   c                   t         |d            j                  }|r\|j                  t        j                  u r@|j
                  dk(  r1t        j                  j                  d      }|j                  |       t        | -  |       y )Nr.   pythonmThe pointwise operation result will be inferred to string[nan, pyarrow], which does not match the input dtyperh   )nextr   r)   r>   r?   r   r   markxfailapplymarkerrN   test_combine_add)rS   data_repeatedr\   r'   r   r   rT   s         r    r   z TestStringArray.test_combine_add   sr    ]1%&,,^^ruu$%--8*C;;$$M % D % /r"   c                   |j                   }|rg|dk(  rb|j                  t        j                  u rFt        s|j
                  dk(  r1t        j                  j                  d      }|j                  |       t        | -  ||       y )Nr   r   r   rh   )r   r)   r>   r?   r   r   r   r   r   r   rN   test_arith_series_with_array)rS   r:   all_arithmetic_operatorsr\   r'   r   r   rT   s          r    r   z,TestStringArray.test_arith_series_with_array   sx     

(J6"%%' : ;;$$M % D %,T3KLr"   )r   r   returnz4type[Exception] | tuple[type[Exception], ...] | None)r   z	pd.Seriesr   r   r   bool)r   r   )__name__
__module____qualname__rO   rV   r[   rd   rk   rp   rr   rt   ry   r   r   r   r   r   r   r   r   __classcell__)rT   s   @r    rK   rK   f   so    8&
3? 
%
3
:

6	=6
90=
0M Mr"   rK   c                  >    e Zd Z ej                  d      d        Zy)Test2DCompatT)autousec                R    t        |t              rt        j                  d       y y )Nrg   rh   )r   r	   r   rj   ro   s     r    arrow_not_supportedz Test2DCompat.arrow_not_supported  s    d,-KKPQ .r"   N)r   r   r   r   fixturer   rn   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.r_   )taker>   r?   r   r   ra   
ValueErrorsearchsorted)rE   	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   r5   typingr   numpyr0   r   pandas.compatr   pandas.core.dtypes.baser   pandasr>   pandas._testing_testingrP   pandas.api.typesr   pandas.core.arraysr	   pandas.core.arrays.string_r   'pandas.tests.arrays.string_.test_stringr   pandas.tests.extensionr   r!   r   r   r   r:   rA   rE   rG   rI   ExtensionTestsrK   Dim2CompatTestsr   r   rn   r"   r    <module>r      s   #     % 9   , / 2 Q '"" e}% & ; ;
 + + + + + +
 + +
 + +WMd)) WMtR4'' Rr"   