
    .i+                       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 | j                  |      S )Npyarrow   )
dtypestoragepytestimportorskip	_pa_arraylenchunked_arraychunks
num_chunks_from_pyarrow_array)arrchunkedpaarrow_arraysplits        `/var/www/app/trading-bot/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&&&"";//    TF)paramsc                    | j                   S N)param)requests    r    r   r   7   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   
   )sizer      r   )
nprandomdefault_rngchoiceliststringascii_lettersconstruct_array_type_from_sequencer!   )r   r   stringsr   s       r    datar:   B   s    ii##A&--d63G3G.Hr-RG
!*

"))''*11$v7K7K2LSU1V !*

" 
$
$
&
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   L   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   S   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   Y   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 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 Z	 	 	 	 ddZddZddZddZd Z fdZ fdZ fdZ fdZ xZS )TestStringArrayc                    t        t         |d                  j                  }|j                  dk(  r$|j                  t
        j                  u rd| _        nd| _        t        | %  |      S )Nr   r   bool[pyarrow]bool)
nextiterr   r   r)   r>   r?   _combine_le_expected_dtypesupertest_combine_le)selfdata_repeatedr   	__class__s      r    rS   zTestStringArray.test_combine_leh   sX    T-*+,22==I%%..BEE*A.=D+.4D+w&}55r"   c                    t         |   |       |j                  t        j                  u r|d|j
                   dk(  sJ y |j
                  dk(  r|dk(  sJ y y )Nzstring[]r   str)rR   test_eq_with_strr)   r>   r?   r   )rT   r   rV   s     r    rZ   z TestStringArray.test_eq_with_strp   sX     '>>RUU"gemm_A6666]]i'E>!> (r"   c                    t        |      sJ y r%   r   )rT   r   s     r    test_is_not_string_typez'TestStringArray.test_is_not_string_typey   s     u%%%r"   c                    |j                   t        j                  u r-|s+t        |      j	                  |j
                        }|du sJ y t        |   |       y )NF)r)   r0   nantypeis_dtypenamerR   test_is_dtype_from_name)rT   r   using_infer_stringresultrV   s       r    rb   z'TestStringArray.test_is_dtype_from_name~   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   r^   r   raises	TypeErrorconstruct_from_stringra   rR   #test_construct_from_string_own_name)rT   r   rc   rV   s      r    rk   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   skiprR   	test_viewrT   r:   rV   s     r    rr   zTestStringArray.test_view   s/    ::*KKPQ$r"   c                     y r%    rT   r:   s     r    test_from_dtypezTestStringArray.test_from_dtype   s    r"   c                    |j                   j                  dk(  rt        j                  d       t        |   |       y rm   )r   r   r   rq   rR   test_transposers   s     r    ry   zTestStringArray.test_transpose   s/    ::*KKPQt$r"   c                    |j                   j                  dk(  rt        j                  d       t        |   |       y rm   )r   r   r   rq   rR   test_setitem_preserves_viewsrs   s     r    r{   z,TestStringArray.test_setitem_preserves_views   s/    ::*KKPQ,T2r"   c                \    |j                         }|dg   }t        j                  ||       y )Nr.   )dropnatmassert_extension_array_equal)rT   rA   rd   expecteds       r    test_dropna_arrayz!TestStringArray.test_dropna_array   s,    $$&$
''9r"   c                    ||j                             }|d   }|j                  |      }||usJ t        j                  ||       y )Nr   )isnafillnar~   r   )rT   r:   validrd   s       r    test_fillna_no_op_returns_copyz.TestStringArray.test_fillna_no_op_returns_copy   sI    TYY[L!QU#T!!!
''5r"   c                   |j                         }d|_        |j                  |d         }|d   |d   k(  sJ t        j                  ||       |j
                  j                  dk(  r!|j                  |d         }|d   |d   k(  s<J t        j                  t        d      5  |j                  |d   d       d d d        t        j                  ||       y # 1 sw Y    xY w)	NTr.   r   r   zCannot modify read-only arrayrf   F)copy)
r   	_readonlyr   r~   r   r   r   r   rh   
ValueError)rT   rA   r:   rd   s       r    test_fillna_readonlyz$TestStringArray.test_fillna_readonly   s      " \!_-ayLO+++
''l; ::*[[a1F!9Q///z1PQ 9LO%89
''l;9 9s   $CC#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__)ri   )rT   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   r^   rT   serr   s      r    _supports_reductionz#TestStringArray._supports_reduction   s8    // 
II"&&( *>)	
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   rM   boolean)r   r   r~   	get_dtyper   rY   r   r)   r0   r^   bool_r   astype)rT   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)rT   r:   comparison_opr   s       r    test_compare_scalarz#TestStringArray.test_compare_scalar   s#    iioC}e<r"   c                &    t         |   ||       y r%   )rR   test_groupby_extension_apply)rT   rI   groupby_apply_oprV   s      r    r   z,TestStringArray.test_groupby_extension_apply   s    ,->@PQr"   c                    t         |d            j                  }|s@|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 dtypero   )	rO   r   r   r   markxfailapplymarkerrR   test_combine_add)rT   rU   rc   r'   r   r   rV   s         r    r   z TestStringArray.test_combine_add   sb    ]1%&,,!emmx&?;;$$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   ro   )r   r)   r>   r?   r   r   r   r   r   r   rR   test_arith_series_with_array)rT   r:   all_arithmetic_operatorsrc   r'   r   r   rV   s          r    r   z,TestStringArray.test_arith_series_with_array  sx     

(J6"%%' : ;;$$M % D %,T3KLr"   c                    |sJ|j                   j                  dk(  r1t        j                  j	                  d      }|j                  |       t        |   |       y )Nr   zCasts to objectro   )r   r   r   r   r   r   rR   8test_loc_setitem_with_expansion_preserves_ea_index_dtype)rT   r:   r'   rc   r   rV   s        r    r   zHTestStringArray.test_loc_setitem_with_expansion_preserves_ea_index_dtype  sL     "djj&8&8H&D;;$$,=$>D%HNr"   )r   rY   returnz4type[Exception] | tuple[type[Exception], ...] | None)r   z	pd.Seriesr   rY   r   rN   )r   rY   )__name__
__module____qualname__rS   rZ   r\   rb   rk   rr   rw   ry   r{   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rV   s   @r    rK   rK   g   s    6"&
3? 
%
3
:
6<&	=6
90=R0M$O Or"   rK   c                  >    e Zd Z ej                  d      d        Zy)Test2DCompatT)autousec                R    t        |t              rt        j                  d       y y )Nrn   ro   )r   r	   r   rq   rv   s     r    arrow_not_supportedz Test2DCompat.arrow_not_supported   s    d,-KKPQ .r"   N)r   r   r   r   fixturer   ru   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.rf   )taker>   r?   r   r   rh   r   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_testingr~   pandas.api.typesr   pandas.core.arraysr	   pandas.core.arrays.string_r   #pandas.tests.arithmetic.test_stringr   pandas.tests.extensionr   r!   r   r   r   r:   rA   rE   rG   rI   ExtensionTestsrK   Dim2CompatTestsr   r   ru   r"   r    <module>r      s    #     % 9   , / 2 M '0" e}% & ; ;
 + + + + + +
 + +
 + +uOd)) uOpR4'' Rr"   