Ë
    ômxie'  ã                  ó  — 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)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        úY/home/htdocs/ttos/venv/lib/python3.12/site-packages/pandas/tests/extension/test_string.pyÚmaybe_split_arrayr!   %   s§   € ÙØˆ
Ø	�‰×	Ñ	˜iÒ	'Øˆ
ä	×	Ñ	˜YÓ	'€Bà—-‘-€KÜ�Ó Ñ!€EØ×"Ñ"ØBˆ+�f�uÐ
×
$Ñ
$ÐB {°5°6Ð':×'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   € à.Ñ€GˆXÜ˜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°   € ä�i‰i×#Ñ# AÓ&×-Ñ-¬d´6×3GÑ3GÓ.HÈsÐ-ÓS€GØ
�!‰*˜ ™
Ò
"Ü—)‘)×'Ñ'¨Ó*×1Ñ1´$´v×7KÑ7KÓ2LÐSVÐ1ÓWˆð �!‰*˜ ™
Ó
"ð ×
$Ñ
$Ó
&×
5Ñ
5°gÀUÐ
5Ó
K€CÜ˜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Ñ
5´r·u±u¸c°lÈ%Ð
5Ó
P€CÜ˜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Ñ
5²oÈUÐ
5Ó
S€CÜ˜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Ñ
5°s¼B¿E¹EÀ3Ð6GÈuÐ
5Ó
U€CÜ˜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Ø	ˆc”2—5‘5œ"Ÿ%™%  c¨3°Ð4¸Eð 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ƒ   ø€ Ü‰Ñ  Ô'à�>‰>œRŸU™UÑ"à˜g e§m¡m _°AÐ6Ò6Ð6Ñ6Ø�]‰]˜iÒ'Ü×+Ñ+¬MÓ:ñ 8ØÐ 7Ò7Ð7Ñ7÷8ð 8ð (÷8ð 8ús   Á+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   ø€ Ø�>‰>œRŸV™VÑ#Ñ,>Ü˜%“[×)Ñ)¨%¯*©*Ó5ˆFØ˜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`   ø€ Ø�>‰>œRŸV™VÑ#Ñ,>Ü—‘œyÐ0RÔSñ 8Ø×+Ñ+¨E¯J©JÔ7÷8ð 8ô ‰GÑ7¸Õ>÷8ð 8ús   »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/   ø€ Ø�:‰:×Ñ Ò*Ü�K‰KÐ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/   ø€ Ø�:‰:×Ñ Ò*Ü�K‰KÐ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/   ø€ Ø�:‰:×Ñ Ò*Ü�K‰KÐ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   € Ø�T—Y‘Y“[�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   € àÐ,Ð,ò *Ø�y‰y×!Ñ!¤R§V¡VÐ+ò *Ø˜>Ð)ð	
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   ú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ˆØÐ-Ñ-ØˆGÜ5?ÀÄsÔ5Kœ"Ÿ,™, uÔ-ÐQUˆKÜ˜+¤{Ô3Ü7¸¸{ÓK‘Ø�^‰^œrŸv™vÑ%Ü—h‘h‰GØ�]‰]˜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#   € Ü�i‰i˜‹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.   ÚpythonúmThe 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Ó%Ó&×,Ñ,ˆÙØ�^‰^œrŸu™uÑ$¨%¯-©-¸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ð ×Ñ Ô%Ü‰Ñ,¨TÐ3KÕ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Ô,Ô-Ü�K‰KÐ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   € à�G€A€qˆ!Ø
×
Ñ
¢	Ó
*€CÜ�e‰e€Cˆ�GáÜ�i‰i˜‹nˆð	0ð ô 
�‰”z¨Ô	-ñ Ø×Ñ˜Ô÷÷ ñ ús   Á!A<Á<Bc                óÒ  — t        j                  ddg| ¬«      }t        j                  ddgt        ¬«      }||k(  }t        j                  ddgt        ¬«      }| j                  dk(  r.| j
                  t         j                  u r|j                  d«      }n<| j                  d	k(  r-| j
                  t         j                  u r|j                  d
«      }t        j                  ||«       y )NrÖ   rÔ   r/   r.   FTr·   r§   r   r¦   )
r>   r²   ÚobjectrÃ   r   r)   r?   r«   rP   Úassert_series_equal)r   r›   Úmixedr]   rx   s        r    Útest_mixed_object_comparisonrÝ     s©   € ä
�)‰)�S˜#�J eÔ
,€Cä�I‰I�q˜#�h¤fÔ-€Eà�E‰\€FÜ�y‰y˜% ˜¬dÔ3€HØ‡}�}˜Ò  U§^¡^´r·u±uÑ%<Ø—?‘? 9Ó-‰Ø	�‰˜)Ò	#¨¯©¼"¿%¹%Ñ(?Ø—?‘? ?Ó3ˆä×Ñ˜6 8Õ,r"   )+Ú__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Ø   rÝ   rn   r"   r    ú<module>rî      s#  ðñõ #ã Ý ã Û å %å 9ã Ý Ý ,Ý /Ý 2Ý QÝ 'ò"ð" €‡�˜˜e�}Ô%ñó &ðð ‡�ñ;ó ð;ð
 ‡�ñ+ó ð+ð ‡�ñ+ó ð+ð ‡�ñ+ó ð+ð
 ‡�ñ+ó ð+ð
 ‡�ñ+ó ð+ôWM�d×)Ñ)ô WMôtR�4×'Ñ'ô Ròó"-r"   