
    Oh?$                       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 Z ej6                  ddg      d        Zej6                  d        Zej6                  d        Zej6                  d        Zej6                  d        Z ej6                  d        Z!ej6                  d        Z" G d dejF                        Z$ G d dejJ                        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)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        j/var/www/html/diagnosisapp-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   5   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   datar9   @   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.   r6   r7   pdNAr    r   r   r   s      r   data_missingr@   J   s7     
$
$
&
5
5ruucl%
5
PCS'**r!   c                `    | j                         j                  g d|       }t        ||      S )N)BCr;   r.   )r6   r7   r    r?   s      r   data_for_sortingrD   Q   s-    

$
$
&
5
5oU
5
SCS'**r!   c                ~    | j                         j                  dt        j                  dg|       }t	        ||      S )NrB   r;   r.   r<   r?   s      r   data_missing_for_sortingrF   W   s8    

$
$
&
5
5sBEE36Gu
5
UCS'**r!   c           
         | j                         j                  ddt        j                  t        j                  ddddg|       }t	        ||      S )NrB   r;   rC   r.   r<   r?   s      r   data_for_groupingrH   ]   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   rN   z TestStringArray.test_eq_with_strf   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   )rR   r   s     r   test_is_not_string_typez'TestStringArray.test_is_not_string_typep   s     u%%%r!   c                    |j                   t        j                  u r-|s+t        |      j	                  |j
                        }|du sJ y t        |   |       y )NF)r(   r/   nanr   is_dtypenamerM   test_is_dtype_from_name)rR   r   using_infer_stringresultrS   s       r   rZ   z'TestStringArray.test_is_dtype_from_nameu   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(   r/   rW   r   raises	TypeErrorconstruct_from_stringrY   rM   #test_construct_from_string_own_name)rR   r   r[   rS   s      r   rc   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   skiprM   	test_viewrR   r9   rS   s     r   rj   zTestStringArray.test_view   s/    ::*KKPQ$r!   c                     y r$    rR   r9   s     r   test_from_dtypezTestStringArray.test_from_dtype   s    r!   c                    |j                   j                  dk(  rt        j                  d       t        |   |       y re   )r   r   r   ri   rM   test_transposerk   s     r   rq   zTestStringArray.test_transpose   s/    ::*KKPQt$r!   c                    |j                   j                  dk(  rt        j                  d       t        |   |       y re   )r   r   r   ri   rM   test_setitem_preserves_viewsrk   s     r   rs   z,TestStringArray.test_setitem_preserves_views   s/    ::*KKPQ,T2r!   c                \    |j                         }|dg   }t        j                  ||       y )Nr-   )dropnarO   assert_extension_array_equal)rR   r@   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fillnarO   rv   )rR   r9   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__)ra   )rR   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(   r/   rW   rR   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 r|}nA|j                  t
        j                  u rt
        j                  }n|j                  dk(  rd}nd}|j                  |      S )N)__add____radd__r   zboolean[pyarrow]boolean)
r   r   rO   	get_dtyper(   r/   rW   bool_r   astype)rR   r   r   r   pointwise_resultr   cast_tos          r   _cast_pointwise_resultz&TestStringArray._cast_pointwise_result   se    [",,s"34--G^^rvv%hhG]]i'(GG&&w//r!   c                V    t        j                  |      }| j                  |||d       y )Nabc)r=   Series_compare_other)rR   r9   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 dtyperg   )nextr   r(   r=   r>   r   r   markxfailapplymarkerrM   test_combine_add)rR   data_repeatedr[   r&   r   r   rS   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 s|j                  dk(  r7t
        r1t        j                  j                  d      }|j                  |       t        | -  ||       y )Nr   r   r   rg   )r   r(   r=   r>   r   r   r   r   r   r   rM   test_arith_series_with_array)rR   r9   all_arithmetic_operatorsr[   r&   r   r   rS   s          r   r   z,TestStringArray.test_arith_series_with_array   sw     

(J6255(emmx.GK ;;$$M % D %,T3KLr!   )r   strreturnz4type[Exception] | tuple[type[Exception], ...] | None)r   z	pd.Seriesr   r   r   bool)r   r   )__name__
__module____qualname__rN   rU   rZ   rc   rj   ro   rq   rs   rx   r   r   r   r   r   r   r   r   __classcell__)rS   s   @r   rJ   rJ   e   so    8&
3? 
%
3
:

6	=6
9
0=
0M Mr!   rJ   c                  >    e Zd Z ej                  d      d        Zy)Test2DCompatT)autousec                R    t        |t              rt        j                  d       y y )Nrf   rg   )r   r	   r   ri   rn   s     r   arrow_not_supportedz Test2DCompat.arrow_not_supported   s    d,-KKPQ .r!   N)r   r   r   r   fixturer   rm   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   r`   
ValueErrorsearchsorted)rD   	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   r4   typingr   numpyr/   r   pandas.compatr   pandas.core.dtypes.baser   pandasr=   pandas._testing_testingrO   pandas.api.typesr   pandas.core.arraysr	   pandas.core.arrays.string_r   pandas.tests.extensionr   r    r   r   r   r9   r@   rD   rF   rH   ExtensionTestsrJ   Dim2CompatTestsr   r   rm   r!   r   <module>r      s   #     % 9   , / 2 '"" e}% & ; ;
 + + + + + +
 + +
 + +TMd)) TMnR4'' Rr!   