gL ie'dZddlmZddlZddlmZddlZddlZddl m Z ddl m Z ddl ZddlmZddlmZddlmZdd lmZdd lmZdd lmZd Zej:d dgdZej:dZej:dZ ej:dZ!ej:dZ"ej:dZ#ej:dZ$GddejJZ&GddejNZ(dZ)dZ*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)StorageExtensionDtypeis_string_dtype)ArrowStringArray StringDtype)string_dtype_highest_priority)basec@|s|S|jjdk7r|Stjd}|j}t |dz}|j g|d|j||dj}|jdk(sJt||S)Npyarrow) dtypestoragepytest importorskip _pa_arraylen chunked_arraychunks num_chunkstype)arrchunkedpa arrow_arraysplits h/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pandas/tests/extension/test_string.pymaybe_split_arrayr!%s    i '   Y 'B--K   !E""B+fu  $ $B{56':'A'ABK  ! !Q && & 49[ !!TF)paramsc|jSN)param)requests r rr6s ==r"c&|\}}t||S)N)rna_valuer )string_dtype_argumentsrr)s r rr;s.GX w ::r"ctjjdjt t j d}|d|dk(rStjjdjt t j d}|d|dk(rS|jj||}t||S)Nrd)sizerr) nprandom default_rngchoiceliststring ascii_lettersconstruct_array_type_from_sequencer!)rrstringsrs r datar:Asii##A&--d63G3G.Hs-SG !* "))''*11$v7K7K2LSV1W !* "  $ $ & 5 5gU 5 KC S' **r"c||jjtjdg|}t ||S)zLength 2 array with [NA, Valid]Ar/r7r8pdNAr!rrrs r data_missingrAKs7  $ $ & 5 5ruucl% 5 PC S' **r"c`|jjgd|}t||S)N)BCr<r/)r7r8r!r@s r data_for_sortingrERs-  $ $ & 5 5oU 5 SC S' **r"c~|jjdtjdg|}t ||S)NrCr<r/r=r@s r data_missing_for_sortingrGXs8  $ $ & 5 5sBEE36Gu 5 UC S' **r"c |jjddtjtjddddg|}t ||S)NrCr<rDr/r=r@s r data_for_groupingrI^sM  $ $ & 5 5 c255"%%c34E 6 C S' **r"ceZdZfdZdZfdZfdZfdZdZfdZ fdZ d Z d Z dd Z dd Zdd ZddZdZfdZfdZxZS)TestStringArrayct|||jtjur|d|j dk(sJy|j dk(r+t jt5|dk(sJ dddyy#1swYyxYw)Nzstring[]rzstring[pyarrow_numpy]) supertest_eq_with_strr)r>r?rtmassert_produces_warning FutureWarning)selfr __class__s r rOz TestStringArray.test_eq_with_strgs  ' >>RUU "gemm_A66 66 ]]i '++M: 8 7777 8 8( 8 8s +A>>Bct|sJyr%r)rSrs r test_is_not_string_typez'TestStringArray.test_is_not_string_typeqsu%%%r"c|jtjur-|s+t|j |j }|dusJyt ||y)NF)r)r0nanris_dtypenamerNtest_is_dtype_from_name)rSrusing_infer_stringresultrTs r r[z'TestStringArray.test_is_dtype_from_namevsG >>RVV #,>%[))%**5FU? "? G +E 2r"c|jtjurB|s@tjt d5|j |jdddyt|%|y#1swYyxYw)Nz Cannot construct a 'StringDtype'match) r)r0rXrraises TypeErrorconstruct_from_stringrZrN#test_construct_from_string_own_name)rSrr\rTs r rdz3TestStringArray.test_construct_from_string_own_name}s` >>RVV #,>y0RS 8++EJJ7 8 8 G 7 > 8 8s A00A9c|jjdk(rtjdt||yNr/2D support not implemented for ArrowStringArrayreason)rrrskiprN test_viewrSr:rTs r rkzTestStringArray.test_views/ ::   * KKP Q $r"cyr%rSr:s r test_from_dtypezTestStringArray.test_from_dtypes r"c|jjdk(rtjdt||yrf)rrrrjrNtest_transposerls r rrzTestStringArray.test_transposes/ ::   * KKP Q t$r"c|jjdk(rtjdt||yrf)rrrrjrNtest_setitem_preserves_viewsrls r rtz,TestStringArray.test_setitem_preserves_viewss/ ::   * KKP Q ,T2r"c\|j}|dg}tj||y)Nr.)dropnarPassert_extension_array_equal)rSrAr]expecteds r test_dropna_arrayz!TestStringArray.test_dropna_arrays,$$&$ ''9r"c||j}|d}|j|}||usJtj|||jd}||usJtj||y)Nrbackfill)method)isnafillnarPrw)rSr:validr]s r test_fillna_no_op_returns_copyz.TestStringArray.test_fillna_no_op_returns_copyswTYY[L!QU#T!!! ''5J/T!!! ''5r"c@|dvrtS|dvrtS|dvrtSy)N)__mod____rmod__ __divmod__ __rdivmod____pow____rpow__)__mul____rmul__) __truediv__ __rtruediv__ __floordiv__ __rfloordiv____sub____rsub__)rb)rSop_nameobjothers r _get_expected_exceptionz'TestStringArray._get_expected_exceptions@     / /     r"cf|dvxs,|jjtjuxr|dvS)N)minmaxsum)anyall)rr)r0rXrSserrs r _supports_reductionz#TestStringArray._supports_reductions8 , , *yy!!RVV+*>) r"cBt|jtsJ|dvS)N)cummincummaxcumsum) isinstancerrrs r _supports_accumulationz&TestStringArray._supports_accumulations##))%:;;;888r"ctttj|}|dvrF|}t |t stj|nd}t |trNt ||}nA|jtjurtj}n|jdk(rd}nd}|j|S)N)__add____radd__r bool[pyarrow]boolean) rr rP get_dtyperstrr r)r0rXbool_rastype)rSrrrpointwise_resultrcast_to dtype_others r _cast_pointwise_resultz&TestStringArray._cast_pointwise_results[",,s"34 - -G5?s5K",,u-QUK+{37{K ^^rvv %hhG ]]i '%GG&&w//r"cVtj|}|j|||dy)Nabc)r>Series_compare_other)rSr: comparison_oprs r test_compare_scalarz#TestStringArray.test_compare_scalars#iio C}er?rrmarkxfail applymarkerrNtest_combine_add)rS data_repeatedr\r'rrrTs r rz TestStringArray.test_combine_addsr]1%&,,  ^^ruu $%--8*C;;$$M%D    %  /r"c|j}|rg|dk(rb|jtjurFts|j dk(r1t jjd}|j|t|-||y)Nrrrrh) rr)r>r?rrrrrrrNtest_arith_series_with_array)rSr:all_arithmetic_operatorsr\r'rrrTs r rz,TestStringArray.test_arith_series_with_arraysx  (J6"%%'  :;;$$M%D    % ,T3KLr")rrreturnz4type[Exception] | tuple[type[Exception], ...] | None)rz pd.Seriesrrrbool)rr)__name__ __module__ __qualname__rOrVr[rdrkrprrrtryrrrrrrrr __classcell__)rTs@r rKrKfso8& 3?  % 3 : 6 =6 9 0= 0MMr"rKc>eZdZejddZy) Test2DCompatT)autousecRt|trtjdyy)Nrgrh)rr rrjros r arrow_not_supportedz Test2DCompat.arrow_not_supporteds d, - KKP Q .r"N)rrrrfixturerrnr"r rrs!V^^D!R"Rr"rc|\}}}|jgd}tj|d<|rtj|}d}t j t |5|j|dddy#1swYyxYw)N)rrr.zOsearchsorted requires array to be sorted, which is impossible with NAs present.r_)taker>r?rrra ValueError searchsorted)rE as_seriesbcarmsgs r test_searchsorted_with_na_raisesrswGAq!    *CeeCGiin 0 z - s !A<<Bctjddg|}tjddgt}||k(}tjddgt}|jdk(r.|j tj ur|jd}n<|jd k(r-|j tj ur|jd }tj||y) Nrrr/r.FTrrrr) r>robjectrrr)r?rrPassert_series_equal)rrmixedr]rxs r test_mixed_object_comparisonrs ))S#Je ,C IIq#hf -E E\Fyy%d3H }} U^^ruu%<??9- ) #"%%(????368,r")+__doc__ __future__rr5typingrnumpyr0r pandas.compatrpandas.core.dtypes.baserpandasr>pandas._testing_testingrPpandas.api.typesrpandas.core.arraysr pandas.core.arrays.string_r 'pandas.tests.arrays.string_.test_stringr pandas.tests.extensionr r!rrrr:rArErGrIExtensionTestsrKDim2CompatTestsrrrrnr"r rs##  %9,/2Q'""e}%&;; ++++ ++ ++ ++WMd))WMtR4''R" -r"