Ë
    *�£jÑ¥  ã                  óv  — d dl mZ d dlmZ d dlZd dlmZmZmZm	Z	m
Z
 d dlZd dlZd dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ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&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0mZm1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>Z>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZG d dlHmIZI er
d dlJZKd dlLmMZN er&d dlOmPZP d dlJZJd dlQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ d dl[m\Z\  e"d«      e( G d„ d e'«      «       «       Z] G d!„ d"e9«      Z^ e"d#«       G d$„ d%e^eA«      «       Z_y)&é    )Úannotations)ÚpartialN)ÚTYPE_CHECKINGÚAnyÚLiteralÚSelfÚcast)Ú
get_optionÚusing_string_dtype)ÚlibÚmissing)ÚNDArrayBacked)Úensure_string_array)ÚHAS_PYARROWÚPYARROW_MIN_VERSION)Úfunction)ÚPandas4Warning)Ú
set_module)Úfind_stack_level)ÚExtensionDtypeÚStorageExtensionDtypeÚregister_extension_dtype)Úis_array_likeÚis_bool_dtypeÚis_integer_dtypeÚis_object_dtypeÚis_string_dtypeÚpandas_dtype)r   ÚnanopsÚopsÚ	roperator)Úisin)Úmasked_reductions)ÚExtensionArray)ÚFloatingArrayÚFloatingDtype)ÚIntegerArrayÚIntegerDtype)ÚNumpyExtensionArray)Úextract_array)Úcheck_array_indexer)Úisna)Úprinting)ÚMutableMapping)	Ú	ArrayLikeÚAxisIntÚDtypeÚDtypeObjÚNumpySorterÚNumpyValueArrayLikeÚScalarÚnptÚtype_t)ÚSeriesÚpandasc                  óì   ‡ — e Zd ZdZedd„«       Zedd„«       Zedd„«       ZdZde	j                  f	 	 	 	 	 dd„Zdd„Zdd	„Zdd
„Zdˆ fd„Zd„ Zedd„«       Zedd„«       Zdd„Zdd„Z	 	 	 	 dd„Zˆ xZS )ÚStringDtypea  
    Extension dtype for string data.

    .. warning::

       StringDtype is considered experimental. The implementation and
       parts of the API may change without warning.

    Parameters
    ----------
    storage : {"python", "pyarrow"}, optional
        If not given, the value of ``pd.options.mode.string_storage``.
    na_value : {np.nan, pd.NA}, default pd.NA
        Whether the dtype follows NaN or NA missing value semantics.

    Attributes
    ----------
    storage
    na_value

    Methods
    -------
    None

    See Also
    --------
    BooleanDtype : Extension dtype for boolean data.

    Examples
    --------
    >>> pd.StringDtype()
    <StringDtype(na_value=<NA>)>

    >>> pd.StringDtype(storage="python")
    <StringDtype(storage='python', na_value=<NA>)>
    c                ó>   — | j                   t        j                  u ryy)NÚstringÚstr)Ú	_na_valueÚ
libmissingÚNA©Úselfs    ú<C:\FundamentalWorkbench\vendor\pandas\core\arrays\string_.pyÚnamezStringDtype.nameŒ   s   € à�>‰>œZŸ]™]Ñ*Øàó    c                ó   — | j                   S )ac  
        The missing value representation for this dtype.

        This value indicates which missing value semantics are used by this dtype.
        Returns ``np.nan`` for the default string dtype with NumPy semantics,
        and ``pd.NA`` for the opt-in string dtype with pandas NA semantics.

        See Also
        --------
        isna : Detect missing values.
        NA : Missing value indicator for nullable dtypes.

        Examples
        --------
        >>> ser = pd.Series(["a", "b"])
        >>> ser.dtype
        <StringDtype(na_value=nan)>
        >>> ser.dtype.na_value
        nan
        )r?   rB   s    rD   Úna_valuezStringDtype.na_value•   s   € ð, �~‰~ÐrF   c                ó   — | j                   S )a|  
        The storage backend for this dtype.

        Can be either "pyarrow" or "python".

        See Also
        --------
        StringDtype.na_value : The missing value for this dtype.

        Examples
        --------
        >>> ser = pd.Series(["a", "b"])
        >>> ser.dtype
        <StringDtype(na_value=nan)>
        >>> ser.dtype.storage
        'pyarrow'
        )Ú_storagerB   s    rD   ÚstoragezStringDtype.storage­   s   € ð& �}‰}ÐrF   ©rK   r?   Nc                ó„  — |€t        d«      }|dk(  rt        rd}nd}|dvrt        d|› d�«      ‚|dk(  rt        st        dt        › d	�«      ‚t        |t        «      r&t        j                  |«      rt        j                  }n |t        j                  urt        d
|› �«      ‚t        t        |«      | _        || _        y )Nzmode.string_storageÚautoÚpyarrowÚpython>   rP   rO   z+Storage must be 'python' or 'pyarrow'. Got z	 instead.z	pyarrow>=z, is required for PyArrow backed StringArray.z('na_value' must be np.nan or pd.NA, got )r
   r   Ú
ValueErrorÚImportErrorr   Ú
isinstanceÚfloatÚnpÚisnanÚnanr@   rA   r	   r>   rJ   r?   )rC   rK   rH   s      rD   Ú__init__zStringDtype.__init__Ä   sÏ   € ð ˆ?Ü Ð!6Ó7ˆGØ˜&Ò ÝØ'‘Gà&�Gð Ð/Ñ/ÜØ=¸g¸YÀiÐPóð ð �iÒ­ÜØÔ/Ð0ð 1&ð &óð ô
 �h¤Ô&¬2¯8©8°HÔ+=ô —v‘v‰HØœZŸ]™]Ñ*ÜÐGÈÀzÐRÓSÐSäœS 'Ó*ˆŒØ!ˆ�rF   c                óN   — | j                   dk(  rdnd}d|› d| j                  › d�S )NrO   Ú zstorage='python', z<StringDtype(z	na_value=z)>rL   )rC   rK   s     rD   Ú__repr__zStringDtype.__repr__ç   s/   € ØŸ™¨	Ò1‘"Ð7KˆØ˜w˜i y°·±Ð0@ÀÐCÐCrF   c                ó,  — t        |t        «      r'|dk(  s|| j                  k(  ry	 | j                  |«      }t        |t        | «      «      r3| j                  |j                  k(  xr | j                  |j                  u S y# t        t
        f$ r Y yw xY w)Nr=   TF)	rS   r>   rE   Úconstruct_from_stringÚ	TypeErrorrR   ÚtyperK   rH   )rC   Úothers     rD   Ú__eq__zStringDtype.__eq__ë   sŒ   € ô �eœSÔ!à˜Ò  E¨T¯Y©YÒ$6ØðØ×2Ñ2°5Ó9�ô
 �eœT $›ZÔ(Ø—<‘< 5§=¡=Ñ0ÒT°T·]±]ÀeÇnÁnÐ5TÐTØøô œ{Ð+ò ñ ðús   §B ÂBÂBc                ó|   — |j                  dd«      | _        |j                  dt        j                  «      | _        y )NrK   rP   r?   )ÚpoprJ   r@   rA   r?   )rC   Ústates     rD   Ú__setstate__zStringDtype.__setstate__ü   s*   € àŸ	™	 )¨XÓ6ˆŒØŸ™ ;´
·±Ó>ˆ�rF   c                ó    •— t         ‰| �  «       S ©N)ÚsuperÚ__hash__)rC   Ú	__class__s    €rD   ri   zStringDtype.__hash__  s   ø€ ä‰wÑÓ!Ð!rF   c                ó>   — t         | j                  | j                  ffS rg   )r;   rK   rH   rB   s    rD   Ú
__reduce__zStringDtype.__reduce__  s   € Ü˜TŸ\™\¨4¯=©=Ð9Ð9Ð9rF   c                ó   — t         S rg   )r>   rB   s    rD   r_   zStringDtype.type  s   € äˆ
rF   c                ó$  — t        |t        «      st        dt        |«      › �«      ‚|dk(  r | «       S |dk(  r!t	        «       r | t
        j                  ¬«      S |dk(  r	 | d¬«      S |dk(  r	 | d	¬«      S t        d
| j                  › d|› d�«      ‚)a|  
        Construct a StringDtype from a string.

        Parameters
        ----------
        string : str
            The type of the name. The storage type will be taking from `string`.
            Valid options and their storage types are

            ========================== ==============================================
            string                     result storage
            ========================== ==============================================
            ``'string'``               pd.options.mode.string_storage, default python
            ``'string[python]'``       python
            ``'string[pyarrow]'``      pyarrow
            ========================== ==============================================

        Returns
        -------
        StringDtype

        Raise
        -----
        TypeError
            If the string is not a valid option.
        z.'construct_from_string' expects a string, got r=   r>   ©rH   zstring[python]rP   ©rK   zstring[pyarrow]rO   zCannot construct a 'z' from 'Ú')rS   r>   r^   r_   r   rU   rW   Ú__name__)Úclsr=   s     rD   r]   z!StringDtype.construct_from_string  sž   € ô8 ˜&¤#Ô&ÜØ@ÄÀfÃÀÐOóð ð �XÒÙ“5ˆLØ�uŠ_Ô!3Ô!5Ù¤§¡Ô'Ð'ØÐ'Ò'Ù˜xÔ(Ð(ØÐ(Ò(Ù˜yÔ)Ð)äÐ2°3·<±<°.ÀÈÈÐPQÐRÓSÐSrF   c                óø   — ddl m} | j                  dk(  r"| j                  t        j
                  u rt        S | j                  dk(  r| j                  t        j
                  u r|S | j                  dk(  rt        S |S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        r   )ÚArrowStringArrayrP   rO   )Úpandas.core.arrays.string_arrowru   rK   r?   r@   rA   ÚStringArray)rC   ru   s     rD   Úconstruct_array_typez StringDtype.construct_array_type7  sc   € õ	
ð �<‰<˜8Ò#¨¯©¼*¿-¹-Ñ(GÜÐØ�\‰\˜YÒ&¨4¯>©>¼Z¿]¹]Ñ+JØ#Ð#Ø�\‰\˜XÒ%ÜÐà#Ð#rF   c                óä  — t        «       }t        «       }|D ]s  }t        |t        «      r7|j                  |j                  «       |j                  |j
                  «       ŒJt        |t        j                  «      r|j                  dv rŒs y  t        |«      dk(  rd}nt        t        |«      «      }t        |«      dk(  rt        j                  }nt        t        |«      «      }t        ||¬«      S )N)ÚUÚTé   rO   ©rK   rH   )ÚsetrS   r;   ÚaddrK   rH   rU   ÚdtypeÚkindÚlenÚnextÚiterr@   rA   )rC   ÚdtypesÚstoragesÚ	na_valuesr€   rK   rH   s          rD   Ú_get_common_dtypezStringDtype._get_common_dtypeL  s¶   € Ü“5ˆÜ“Eˆ	ãˆEÜ˜%¤Ô-Ø—‘˜UŸ]™]Ô+Ø—‘˜eŸn™nÕ-Ü˜E¤2§8¡8Ô,°·±¸zÑ1IØáð ô ˆx‹=˜AÒà‰Gäœ4 ›>Ó*ˆGô ˆy‹>˜QÒä!—}‘}‰HäœD ›OÓ,ˆHä 7°XÔ>Ð>rF   c                ó°  — | j                   dk(  rjddlm}m}  |«        t        j
                  j                  |j                  «      s(t        j                  |t	        j                  «       «      } ||| ¬«      S ddl}t        ||j                  «      r|g}n|j                  }g }|D ]<  }|j                  d¬«      }t!        || j"                  ¬«      }|j%                  |«       Œ> t'        |«      dk(  rt)        j*                  g t,        ¬«      }nt)        j.                  |«      }t0        j3                  t0        «      }t5        j6                  ||| «       |S )	zH
        Construct StringArray from pyarrow Array/ChunkedArray.
        rO   r   )ru   Ú_check_pyarrow_available©r€   NF)Úzero_copy_onlyro   )rK   rv   ru   rŠ   ÚpaÚtypesÚis_large_stringr_   Úpcr	   Úlarge_stringrO   rS   ÚArrayÚchunksÚto_numpyr   rH   Úappendr‚   rU   ÚarrayÚobjectÚconcatenaterw   Ú__new__r   rX   )	rC   r–   ru   rŠ   rO   r“   ÚresultsÚarrÚnew_string_arrays	            rD   Ú__from_arrow__zStringDtype.__from_arrow__h  s  € ð �<‰<˜9Ò$÷ñ
 %Ô&ä—8‘8×+Ñ+¨E¯J©JÔ7ÜŸ™ ¤r§¡Ó'8Ó9�á# E°Ô6Ð6ó ä˜% §¡Ô/Ø˜‘ð Ÿ™�àˆGÛ�ð —l‘l°%�lÓ8�Ü)¨#¸¿¹ÔF�Ø—‘˜sÕ#ð ô ˆv‹;˜!ÒÜ—(‘(˜2¤VÔ,‰Cä—.‘. Ó)ˆCô '×.Ñ.¬{Ó;ÐÜ×ÑÐ/°°dÔ;ØÐrF   )Úreturnr>   )rž   úlibmissing.NAType | float)rK   z
str | NonerH   rŸ   rž   ÚNone)r`   r—   rž   Úbool)rd   zMutableMapping[str, Any]rž   r    )rž   Úint)rž   z	type[str])rž   r   )rž   ztype_t[BaseStringArray])r…   zlist[DtypeObj]rž   zDtypeObj | None)r–   z$pyarrow.Array | pyarrow.ChunkedArrayrž   ÚBaseStringArray)rr   Ú
__module__Ú__qualname__Ú__doc__ÚpropertyrE   rH   rK   Ú	_metadatar@   rA   rX   r[   ra   re   ri   rl   r_   Úclassmethodr]   rx   rˆ   r�   Ú__classcell__©rj   s   @rD   r;   r;   d   sÞ   ø„ ñ#ðJ òó ðð òó ðð. òó ðð( )€Ið #Ø.8¯m©mð!"àð!"ð ,ð!"ð 
ó	!"óFDóó"?õ
"ò:ð òó ðð ò(Tó ð(TóT$ó*?ð8, Ø9ð, à	÷, rF   r;   c                  ó¨   ‡ — e Zd ZU dZded<   d„ Zdd„Zddd„Zej                  ddf	 	 	 dd	„Z
	 	 	 	 dd
„Zej                  df	 dd„Zddˆ fd„Zˆ xZS )r£   z8
    Mixin class for StringArray, ArrowStringArray.
    r;   r€   c                ó¨  — |t         j                  t         j                  t         j                  fv rœt	        |t
        j                  «      r‚|j                  t        k(  ro|j                  dd  j                  d«      }t        j                  d|› d| j                  › d�t        t        «       ¬«        ||| j                  t        «      «      S t         S )Né   Ú_rq   z'' operations between boolean dtype and z| are deprecated and will raise in a future version. Explicitly cast the strings to a boolean dtype before operating instead.)Ú
stacklevel)r!   Úror_Úrand_ÚrxorrS   rU   Úndarrayr€   r¡   rr   ÚstripÚwarningsÚwarnr   r   ÚastypeÚNotImplemented)rC   r`   ÚopÚop_names       rD   Ú_logical_methodzBaseStringArray._logical_method   s§   € à”9—>‘>¤9§?¡?´I·N±NÐCÑCÜ˜5¤"§*¡*Ô-Ø—‘œtÒ#ð —k‘k ! "�o×+Ñ+¨CÓ0ˆGÜ�M‰MØ�G�9ÐCÀDÇJÁJÀ<ð PPð Pô Ü+Ó-õñ �e˜TŸ[™[¬Ó.Ó/Ð/ÜÐrF   c                ó˜   — | j                   dkD  r| D �cg c]  }|j                  «       ‘Œ c}S t        | j                  «       «      S c c}w )a�  
        Return a list of the value.

        These are each a scalar type, which is a Python scalar
        (for str, int, float) or pandas scalar
        (for Timestamp/Timedelta/Interval/Period)

        Returns
        ----------
        list

        Examples
        ----------
        >>> arr = pd.array(["a", "b", "c"])
        >>> arr.tolist()
        ['a', 'b', 'c']
        r®   )ÚndimÚtolistÚlistr”   )rC   Úxs     rD   r¿   zBaseStringArray.tolist²  s@   € ð$ �9‰9�qŠ=Ù(,Ó-© 1�A—H‘H•J¨Ñ-Ð-Ü�D—M‘M“OÓ$Ð$ùò .s   ”Ac                ó@   — t        t        j                  d| ¬«      }|S )N)Ú	ÚÚ
)Úescape_charsÚquote_strings)r   r-   Úpprint_thing)rC   ÚboxedÚ	formatters      rD   Ú
_formatterzBaseStringArray._formatterÈ  s%   € ÜÜ×!Ñ!Ø+Ø#˜)ô
ˆ	ð
 ÐrF   NTc                óÈ  — | j                   j                  t        j                  u r| j	                  |||¬«      S ddlm} |€| j                   }|t        j                  u r| j                   j                  }t        | «      }t        j                  | «      }t        |«      st        |«      r¢t        |«      rt        }n|}t        |«      }	|	rd}n#|t        j                   d«      k(  rt        |«      }t        j                  |||j!                  d«      d|t        j                   t#        t$        |«      «      ¬«      }
|	sd|d d   ||
|«      S | j'                  |||||«      S )	N)rH   r€   r   )ÚBooleanArrayr®   r¡   Úuint8F©ÚconvertrH   r€   )r€   rH   rU   rW   Ú_str_map_nan_semanticsÚpandas.arraysrÍ   r   Ú
no_defaultr,   Úasarrayr   r   r'   r¡   Úmap_infer_maskÚviewr	   r_   Ú_str_map_str_or_object)rC   ÚfrH   r€   rÐ   rÍ   Úmaskr›   ÚconstructorÚna_value_is_naÚresults              rD   Ú_str_mapzBaseStringArray._str_mapÐ  s4  € ð �:‰:×Ñ¤"§&¡&Ñ(Ø×.Ñ.¨q¸8È5Ð.ÓQÐQå.àˆ=Ø—J‘JˆEØ”s—~‘~Ñ%Ø—z‘z×*Ñ*ˆHä�D‹zˆÜ�j‰j˜Óˆä˜EÔ"¤m°EÔ&:ä Ô&Ü*‘à*�ä! (›^ˆNÙØ‘Øœ"Ÿ(™( 6Ó*Ò*ä ›>�Ü×'Ñ'ØØØ—	‘	˜'Ó"ØØ!ô —h‘hœt¤D¨%Ó0Ó1ô
ˆFñ "Ø�‘Q�á˜v tÓ,Ð,ð ×.Ñ.¨u°hÀÀQÈÓMÐMrF   c                ó¬  — t        |«      r¤t        |«      s™t        j                  |||j	                  d«      d|¬«      }| j
                  j                  dk(  r:dd l} |j                  || |j                  «       d¬«      }| j                  |«      S  t        | «      || j
                  ¬«      S t        j                  |||j	                  d«      «      S )	NrÎ   F)rÐ   rH   rO   r   T)rÙ   r_   Úfrom_pandasr‹   )r   r   r   rÕ   rÖ   r€   rK   rO   r–   r‘   Ú_from_pyarrow_arrayr_   )rC   r€   rH   r›   rØ   rÙ   rÜ   r�   s           rD   r×   z&BaseStringArray._str_map_str_or_object  s¾   € ô ˜5Ô!¬/¸%Ô*@ä×'Ñ'Ø�Q˜Ÿ	™	 'Ó*°EÀHôˆFð �z‰z×!Ñ! YÒ.Û$ð "˜Ÿ™Ø ¨O¨B¯O©OÓ,=È4ô�ð ×/Ñ/°Ó7Ð7ð "”t˜D“z &°·
±
Ô;Ð;ô ×%Ñ% c¨1¨d¯i©i¸Ó.@ÓAÐArF   c                óv  — |€| j                   }|t        j                  u r$t        |«      rd}n| j                   j                  }t        | «      }t        j                  | «      }t        |«      st        |«      r«t        |«      }|rt        |«      rd}nd}t        j                  |||j                  d«      d|t        j                   t        t        |«      «      ¬«      }|r?t        |«      r4|j                  «       r$|j                  d«      }t        j                  ||<   |S | j!                  |||||«      S )NFr   rÎ   rÏ   Úfloat64)r€   r   rÓ   r   rH   r,   rU   rÔ   r   rÕ   rÖ   r	   r_   Úanyr¸   rW   r×   )rC   rØ   rH   r€   rÙ   r›   rÛ   rÜ   s           rD   rÑ   z&BaseStringArray._str_map_nan_semantics-  s  € ð ˆ=Ø—J‘JˆEØ”s—~‘~Ñ%Ü˜UÔ#à ‘àŸ:™:×.Ñ.�ä�D‹zˆÜ�j‰j˜Óˆä˜EÔ"¤m°EÔ&:Ü! (›^ˆNÙÜ# EÔ*Ø ‘Hð  %�Hä×'Ñ'ØØØ—	‘	˜'Ó"ØØ!Ü—h‘hœt¤D¨%Ó0Ó1ôˆFñ Ô"2°5Ô"9¸d¿h¹h¼jð  Ÿ™ yÓ1�Ü!Ÿv™v��t‘àˆMð ×.Ñ.¨u°hÀÀQÈÓMÐMrF   c                ó:   •— |�t        d«      ‚t        ‰| �	  «       S )Nz)Cannot change data-type for string array.)r^   rh   rÖ   )rC   r€   rj   s     €rD   rÖ   zBaseStringArray.viewY  s!   ø€ ØÐÜÐGÓHÐHÜ‰w‰|‹~ÐrF   )rž   rÀ   ©F)rÉ   r¡   )r€   úDtype | NonerÐ   r¡   )r›   z
np.ndarrayrÙ   únpt.NDArray[np.bool_])r€   ræ   rg   )r€   ræ   rž   r   )rr   r¤   r¥   r¦   Ú__annotations__r¼   r¿   rË   r   rÓ   rÝ   r×   rÑ   rÖ   rª   r«   s   @rD   r£   r£   —  s�   ø… ñð Óòó$%ô,ð —‘Ø"Øð3Nð ð	3Nð
 ó3Nðj&Bð ð	&Bð $ó&BðR Ÿ.™.Àð*NØ1=ó*N÷Xò rF   r£   zpandas.arraysc                  ó¬  ‡ — e Zd ZdZdZdddœ	 	 	 	 	 d&ˆ fd„Zd'd„Zd„ Zedddœ	 	 	 	 	 d(d	„«       Z	edd
œ	 	 	 	 	 d)d„«       Z
d*ˆ fd„Zed+d„«       Zd,d„Zd-d„Zd„ Zd.ˆ fd„Zd/d„Zd0d„Zd1d„Zd2d3ˆ fd„Zddddœ	 	 	 	 	 	 	 d4d„Zddœd5d„Zd6ˆ fd„Zd7d8d„Zd7d8d„Zddddœ	 	 	 	 	 	 	 d9d „Zd2d:ˆ fd!„Zd;d<d"„Z	 	 d=	 	 	 	 	 	 	 d>ˆ fd#„Zd$„ ZeZd?d%„Z ˆ xZ!S )@rw   ar  
    Extension array for string data.

    .. warning::

       StringArray is considered experimental. The implementation and
       parts of the API may change without warning.

    Parameters
    ----------
    values : array-like
        The array of data.

        .. warning::

           Currently, this expects an object-dtype ndarray
           where the elements are Python strings
           or nan-likes (``None``, ``np.nan``, ``NA``).
           This may change without warning in the future. Use
           :meth:`pandas.array` with ``dtype="string"`` for a stable way of
           creating a `StringArray` from any sequence.

           StringArray accepts array-likes containing
           nan-likes(``None``, ``np.nan``) for the ``values`` parameter
           in addition to strings and :attr:`pandas.NA`

    dtype : StringDtype
        Dtype for the array.
    copy : bool, default False
        Whether to copy the array of data.

    Attributes
    ----------
    None

    Methods
    -------
    None

    See Also
    --------
    :func:`array`
        The recommended function for creating a StringArray.
    Series.str
        The string methods are available on Series backed by
        a StringArray.

    Notes
    -----
    StringArray returns a BooleanArray for comparison methods.

    Examples
    --------
    >>> pd.array(["This is", "some text", None, "data."], dtype="string")
    <ArrowStringArray>
    ['This is', 'some text', <NA>, 'data.']
    Length: 4, dtype: string

    Unlike arrays instantiated with ``dtype="object"``, ``StringArray``
    will convert the values to strings.

    >>> pd.array(["1", 1], dtype="object")
    <NumpyExtensionArray>
    ['1', 1]
    Length: 2, dtype: object
    >>> pd.array(["1", 1], dtype="string")
    <ArrowStringArray>
    ['1', '1']
    Length: 2, dtype: string

    However, instantiating StringArrays directly with non-strings will raise an error.

    For comparison methods, `StringArray` returns a :class:`pandas.BooleanArray`:

    >>> pd.array(["a", None, "c"], dtype="string[python]") == "a"
    <BooleanArray>
    [True, <NA>, False]
    Length: 3, dtype: boolean
    Ú	extensionNF©r€   Úcopyc               óä   •— |€
t        «       }t        |«      }t        ‰| �  ||¬«       t	        |t        | «      «      s| j                  |«       t        j                  | | j                  |«       y )N©rì   )	r;   r*   rh   rX   rS   r_   Ú	_validater   Ú_ndarray)rC   Úvaluesr€   rì   rj   s       €rD   rX   zStringArray.__init__¶  sb   ø€ ð ˆ=Ü“MˆEÜ˜vÓ&ˆä‰Ñ˜ dÐÔ+Ü˜&¤$ t£*Ô-Ø�N‰N˜5Ô!Ü×ÑØØ�M‰MØõ	
rF   c                óÐ  — |j                   t        j                  u råt        | j                  «      r,t        j                  | j                  d¬«      st        d«      ‚| j                  j                  dk7  r#t        d| j                  j                  › d�«      ‚| j                  j                  dkD  r/t        j                  | j                  j                  d«      «       yt        j                  | j                  «       yt        | j                  «      r,t        j                  | j                  d¬«      st        d	«      ‚| j                  j                  dk7  rt        d
«      ‚y)z*Validate that we only store NA or strings.T©Úskipnaz7StringArray requires a sequence of strings or pandas.NAr—   z>StringArray requires a sequence of strings or pandas.NA. Got 'z' dtype instead.r|   ÚKz1StringArray requires a sequence of strings or NaNz]StringArray requires a sequence of strings or NaN. Got '{self._ndarray.dtype}' dtype instead.N)r?   r@   rA   r‚   rð   r   Úis_string_arrayrQ   r€   r¾   Úconvert_nans_to_NAÚravel)rC   r€   s     rD   rï   zStringArray._validateÆ  s%  € ð �?‰?œjŸm™mÑ+Ü�4—=‘=Ô!¬#×*=Ñ*=Ø—‘ dõ+ô !ØMóð ð �}‰}×"Ñ" hÒ.Ü ðØŸ™×+Ñ+Ð,Ð,<ð>óð ð
 �}‰}×!Ñ! AÒ%ä×&Ñ& t§}¡}×':Ñ':¸3Ó'?Õ@ä×&Ñ& t§}¡}Õ5ô �4—=‘=Ô!¬#×*=Ñ*=Ø—‘ dõ+ô !Ð!TÓUÐUØ�}‰}×"Ñ" hÒ.Ü ðIóð ð /rF   c           
     óÌ   — t        |«      r| j                  j                  S t        |t        «      s2t        d|› d| j                  › dt        |«      j                  › d�«      ‚|S )NúInvalid value 'ú' for dtype 'ú3'. Value should be a string or missing value, got 'ú
' instead.)r,   r€   rH   rS   r>   r^   r_   rr   ©rC   Úvalues     rD   Ú_validate_scalarzStringArray._validate_scalarè  sf   € ä�Œ;Ø—:‘:×&Ñ&Ð&Ü˜E¤3Ô'ÜØ! % ¨°d·j±j°\ð B1Ü15°e³×1EÑ1EÐ0FÀjðRóð ð ˆrF   c               ón  — |rAt        |t        «      r|dk(  s,t        |«      }t        |t        «      r|j                  dk(  s4J ‚t        «       rt        dt        j                  ¬«      }nt        d¬«      }ddlm	} |j                  }t        ||«      r7|j                  }|j                  }t        j                  ||dd¬«      }|||<   nBt        j                  |«      rt        j                   |«      }t        j                  |||¬	«      }| j#                  | «      }t%        j&                  |||«       |S )
Nr=   rP   r}   rp   r   )ÚBaseMaskedArrayF)rì   Úconvert_na_valuerô   )rH   rì   )rS   r>   r   r;   rK   r   rU   rW   Úpandas.core.arrays.maskedr  rH   Ú_maskÚ_datar   r   Úis_pyarrow_arrayr–   r™   r   rX   )	rs   Úscalarsr€   rì   r  rH   r‡   rÜ   rœ   s	            rD   Ú_from_sequencezStringArray._from_sequenceó  s  € ñ œ* U¬CÔ0°U¸hÒ5FÜ  Ó'ˆEÜ˜e¤[Ô1°e·m±mÀxÒ6OÐOÐOÜÔ!Ü¨¼2¿6¹6ÔB‰Eä¨Ô1ˆEå=à—>‘>ˆÜ�g˜Ô/àŸ™ˆIØ—]‘]ˆFÜ×,Ñ,Ø˜T°EÀ%ôˆFð !)ˆF�9Òô ×#Ñ# GÔ,ô Ÿ(™( 7Ó+�ä×,Ñ,¨W¸xÈdÔSˆFð Ÿ;™; sÓ+ÐÜ×ÑÐ/°¸Ô?àÐrF   rî   c               ó*   — | j                  |||¬«      S )Nrë   )r	  )rs   Ústringsr€   rì   s       rD   Ú_from_sequence_of_stringsz%StringArray._from_sequence_of_strings  s   € ð ×!Ñ! '°¸TÐ!ÓBÐBrF   c                ó�   •— t         ‰| �  |«      }t        |j                  t        «      r|j                  | j                  «      }|S rg   )rh   Ú_cast_pointwise_resultrS   r€   r;   r¸   )rC   rñ   rÜ   rj   s      €rD   r  z"StringArray._cast_pointwise_result!  s7   ø€ Ü‘Ñ/°Ó7ˆÜ�f—l‘l¤KÔ0à—]‘] 4§:¡:Ó.ˆFØˆrF   c                óŒ   — t        j                  |t        ¬«      }|j                  |d d   | ||¬«      j	                  |d¬«      S )Nr‹   Frî   )rU   Úemptyr—   rH   r¸   )rs   Úshaper€   rñ   s       rD   Ú_emptyzStringArray._empty(  s<   € ä—‘˜%¤vÔ.ˆØ—N‘Nˆ‰qˆ	Ù�6 Ô'×.Ñ.¨u¸5Ð.ÓAÐArF   c                ó²   — ddl }|€ |j                  «       }| j                  j                  «       }d|| j	                  «       <    |j
                  ||¬«      S )z6
        Convert myself into a pyarrow Array.
        r   N)r_   )rO   r=   rð   rì   r,   r–   )rC   r_   r�   rñ   s       rD   Ú__arrow_array__zStringArray.__arrow_array__.  sN   € ó 	àˆ<Ø�2—9‘9“;ˆDà—‘×#Ñ#Ó%ˆØ"ˆˆt�y‰y‹{ÑØˆr�x‰x˜ TÔ*Ð*rF   c                óJ   — | j                   }|| j                  j                  fS rg   )rð   r€   rH   )rC   r›   s     rD   Ú_values_for_factorizez!StringArray._values_for_factorize;  s    € Ø�m‰mˆà�D—J‘J×'Ñ'Ð'Ð'rF   c           
     ó@  — t        j                  |«      rgt        |«      r| j                  j                  }|S t        |t        «      s2t        d|› d| j                  › dt        |«      j                  › d�«      ‚|S t        |d¬«      }t        |«      st        j                  |t        ¬«      }n@t        |j                  t        | j                  «      «      r|S t        j                  |«      }t        |«      r"t        j                   |d¬«      st        d	«      ‚|S )
z1Maybe convert value to be StringArray compatible.rú   rû   rü   rý   T)Úextract_numpyr‹   ró   z]Invalid value for dtype 'str'. Value should be a string or missing value (or array of those).)r   Ú	is_scalarr,   r€   rH   rS   r>   r^   r_   rr   r*   r   rU   rÔ   r—   r‚   rö   rþ   s     rD   Ú_maybe_convert_setitem_valuez(StringArray._maybe_convert_setitem_value@  sÿ   € ä�=‰=˜ÔÜ�EŒ{ØŸ
™
×+Ñ+�ð, ˆô+   ¤sÔ+ÜØ% e W¨M¸$¿*¹*¸ð F:Ü:>¸u»+×:NÑ:NÐ9Oð Pðóð ð( ˆô " %°tÔ<ˆEÜ  Ô'ÜŸ
™
 5´Ô7‘Ü˜EŸK™K¬¨d¯j©jÓ)9Ô:Ø�ô Ÿ
™
 5Ó)�Ü�5Œz¤#×"5Ñ"5°eÀDÕ"IÜðCóð ð ˆrF   c                ó  •— | j                   rt        d«      ‚| j                  |«      }t        | |«      }t	        j
                  |«      }t	        j
                  |«      }|r|st        d«      ‚|sˆ|j                  | j                  k(  r|j                  }nbt        j                  |«      }t        |«      }|j                  «       r2|j                  «       }| j                  j                  |t        |«      <   t        ‰| �=  ||«       y )NzCannot modify read-only arrayz)setting an array element with a sequence.)Ú	_readonlyrQ   r  r+   r   r  r€   rð   rU   rÔ   r,   rã   rì   rH   rh   Ú__setitem__)rC   Úkeyrÿ   Ú
scalar_keyÚscalar_valuerÙ   rj   s         €rD   r  zStringArray.__setitem__\  sÍ   ø€ Ø�>Š>ÜÐ<Ó=Ð=à×1Ñ1°%Ó8ˆä! $¨Ó,ˆÜ—]‘] 3Ó'ˆ
Ü—}‘} UÓ+ˆÙ™lÜÐHÓIÐIáØ�{‰{˜dŸj™jÒ(ØŸ™‘äŸ
™
 5Ó)�Ü˜E“{�Ø—8‘8”:Ø!ŸJ™J›L�EØ)-¯©×)<Ñ)<�Eœ$˜u›+Ñ&ä‰Ñ˜C Õ'rF   c                ó2   — t        j                  | ||«       y rg   )r$   Ú_putmask©rC   rÙ   rÿ   s      rD   r"  zStringArray._putmaskt  s   € ô 	×Ñ  d¨EÕ2rF   c                ó0   — t        j                  | ||«      S rg   )r$   Ú_wherer#  s      rD   r%  zStringArray._wherez  s   € ô ×$Ñ$ T¨4°Ó7Ð7rF   c           	     óŽ  — t        |t        «      s%t        |t        «      r3t        |j                  «      r|j                  | j                  d¬«      }n¼t        j                  t        j                  |«      d¬«      sut        j                  |D �cg c]   }t        |t        «      st        |«      sŒ|‘Œ" c}t        ¬«      }t        |«      s%t        j                  | j                   t"        ¬«      S | j%                  || j                  ¬«      }t'        t        j                  | «      t        j                  |«      «      S c c}w )NFrî   Tró   r‹   )rS   r£   r$   r   r€   r¸   r   rö   rU   rÔ   r–   r>   r,   r—   r‚   Úzerosr  r¡   r	  r"   )rC   rñ   Úvals      rD   r"   zStringArray.isin€  sÞ   € Ü�fœoÔ.Ü�vœ~Ô.´?À6Ç<Á<Ô3Pà—]‘] 4§:¡:°E�]Ó:‰Fä×&Ñ&¤r§z¡z°&Ó'9À$ÕGÜŸ™Ù$*ÓP¡F˜S¬j¸¼cÔ.BÄdÈ3Åi’S FÑPÜ ô�ô ˜6”{ÜŸ8™8 D§J¡J´dÔ;Ð;à×(Ñ(¨°t·z±zÐ(ÓBˆFä”B—J‘J˜tÓ$¤b§j¡j°Ó&8Ó9Ð9ùò Qs   Â EÂ2ETc                óL  •— t        |«      }|| j                  k(  r|r| j                  «       S | S t        |t        «      rX| j
                  j                  «       }| j                  «       }d||<   |j                  |j                  «      }t        ||d¬«      S t        |t        «      rN| j                  «       }| j                  «       }d||<   |j                  |j                  «      }t        ||d¬«      S t        |t        «      rt        j                  | ||«      S t        j                  |t        j                   «      rU| j
                  j                  «       }| j                  «       }d||<   |j                  |«      }t        j"                  ||<   |S t$        ‰| �  ||«      S )Nr   Frî   Ú0)r   r€   rì   rS   r(   rð   r,   r¸   Únumpy_dtyper'   r&   r%   r   r$   rU   Ú
issubdtypeÚfloatingrW   rh   )rC   r€   rì   r›   rÙ   rñ   Úarr_earj   s          €rD   r¸   zStringArray.astype’  sT  ø€ Ü˜UÓ#ˆà�D—J‘JÒÙØ—y‘y“{Ð"ØˆKä˜œ|Ô,Ø—-‘-×$Ñ$Ó&ˆCØ—9‘9“;ˆDØˆC�‰IØ—Z‘Z × 1Ñ 1Ó2ˆFÜ ¨°5Ô9Ð9Ü˜œ}Ô-Ø—Y‘Y“[ˆFØ—9‘9“;ˆDØˆF�4‰LØ—]‘] 5×#4Ñ#4Ó5ˆFÜ  ¨°EÔ:Ð:Ü˜œ~Ô.ä!×(Ñ(¨¨u°dÓ;Ð;Ü�]‰]˜5¤"§+¡+Ô.Ø—-‘-×$Ñ$Ó&ˆCØ—9‘9“;ˆDØˆC�‰IØ—Z‘Z Ó&ˆFÜŸ6™6ˆF�4‰LØˆMä‰w‰~˜e TÓ*Ð*rF   r   )rô   ÚkeepdimsÚaxisc               óx  — | j                   j                  t        j                  u rK|dv rG|dk(  r!t	        j
                  | j                  |¬«      S t	        j                  | j                  |¬«      S |dv r7 t        | |«      d	||dœ|¤Ž}|r| j                  |g| j                   ¬«      S |S t        d|› d�«      ‚)
N)rã   Úallrã   ró   )ÚminÚmaxÚargminÚargmaxÚsum)rô   r0  r‹   zCannot perform reduction 'z' with string dtype© )r€   rH   rU   rW   r   Únananyrð   ÚnanallÚgetattrr	  r^   )rC   rE   rô   r/  r0  ÚkwargsrÜ   s          rD   Ú_reducezStringArray._reduce³  s²   € ð �:‰:×Ñ¤"§&¡&Ñ(¨T°^Ñ-CØ�uŠ}Ü—}‘} T§]¡]¸6ÔBÐBä—}‘} T§]¡]¸6ÔBÐBàÐ<Ñ<Ø(”W˜T 4Ó(ÐL°¸TÑLÀVÑLˆFÙØ×*Ñ*¨F¨8¸4¿:¹:Ð*ÓFÐFØˆMäÐ4°T°FÐ:MÐNÓOÐOrF   ró   c               óä  — |dk(  rd|› d| j                   › d�}t        |«      ‚d}d}| j                  }t        j                  t        j
                  j                  t        j                  j                  dœ|   }| j                  rýt        dt        |«      «      }t        j                  |«      r t        | «      || j                   ¬«      S |r^|d	k(  rt        j                  |d
|«      }n—|j                  «       }t        j                   |dd¬«       t        j                   |dd¬«       nVt        j"                  |«      }	t        j$                  t'        |«      |	z
  d¬«      }| j                   j(                  |dd |d|	 } ||«      }
|�t        j*                  |
|f«      }
n-|�+t        j                  || j                   j(                  |
«      }
 t        | «      |
| j                   ¬«      }|S )a¶  
        Return an ExtensionArray performing an accumulation operation.

        The underlying data type might change.

        Parameters
        ----------
        name : str
            Name of the function, supported values are:
            - cummin
            - cummax
            - cumsum
            - cumprod
        skipna : bool, default True
            If True, skip NA values.
        **kwargs
            Additional keyword arguments passed to the accumulation function.
            Currently, there is no supported kwarg.

        Returns
        -------
        array

        Raises
        ------
        NotImplementedError : subclass does not define accumulations
        Úcumprodzoperation 'z' not supported for dtype 'rq   N)ÚcumsumÚcumminÚcummaxrç   r‹   r@  rZ   Úpadr   )Úmethodr0  Úbackfillr—   )r€   r^   rð   rU   r@  ÚminimumÚ
accumulateÚmaximumÚ_hasnar	   r,   r2  r_   Úwhererì   r   Úpad_or_backfill_inplacer6  r  r‚   rH   Úhstack)rC   rE   rô   r<  ÚmsgÚtailÚna_maskr´   Únp_funcÚidxÚ	np_resultrÜ   s               rD   Ú_accumulatezStringArray._accumulateÊ  sµ  € ð8 �9ÒØ ˜vÐ%@ÀÇÁÀÈAÐNˆCÜ˜C“.Ð ð #'ˆØ%)ˆØ—-‘-ˆä—i‘iÜ—j‘j×+Ñ+Ü—j‘j×+Ñ+ñ
ð ñ	ˆð �;Š;ÜÐ2´D¸³MÓBˆGÜ�v‰v�gŒØ!”t˜D“z '°·±Ô<Ð<ÙØ˜8Ò#Ü Ÿh™h w°°GÓ<‘Gð &Ÿl™l›n�GÜ×3Ñ3ØØ$Øõô
 ×3Ñ3ØØ)Øöô —i‘i Ó(�Ü—x‘x¤ G£¨sÑ 2¸(ÔC�ØŸ*™*×-Ñ-�‘Q�Ø! $ 3˜-�ñ ˜GÓ$ˆ	àÐÜŸ	™	 9¨dÐ"3Ó4‰IØÐ äŸ™ ¨$¯*©*×*=Ñ*=¸yÓIˆIà”�d“˜I¨T¯Z©ZÔ8ˆØˆrF   c                ó´   •— | j                   j                  t        j                  u r"|t        j
                  u rt        j                  S t        ‰| �  ||«      S rg   )r€   rH   rU   rW   r@   rA   rh   Ú_wrap_reduction_result)rC   r0  rÜ   rj   s      €rD   rU  z"StringArray._wrap_reduction_result  s?   ø€ Ø�:‰:×Ñ¤"§&¡&Ñ(¨V´z·}±}Ñ-Dä—6‘6ˆMÜ‰wÑ-¨d°FÓ;Ð;rF   c                óº   — t        j                  d|«       t        j                  | j	                  «       | j                  «       |¬«      }| j                  ||«      S ©Nr8  )rñ   rÙ   rô   )ÚnvÚvalidate_minr#   r3  r”   r,   rU  ©rC   r0  rô   r<  rÜ   s        rD   r3  zStringArray.min"  óH   € Ü
�‰˜˜FÔ#Ü"×&Ñ&Ø—=‘=“?¨¯©«¸Vô
ˆð ×*Ñ*¨4°Ó8Ð8rF   c                óº   — t        j                  d|«       t        j                  | j	                  «       | j                  «       |¬«      }| j                  ||«      S rW  )rX  Úvalidate_maxr#   r4  r”   r,   rU  rZ  s        rD   r4  zStringArray.max)  r[  rF   )r0  rô   Ú	min_countc               ó¶   — t        j                  d|«       t        j                  | j                  | j                  «       ||d¬«      }| j                  ||«      S )Nr8  rZ   )rñ   rÙ   rô   r^  Úinitial)rX  Úvalidate_sumr#   r7  rð   r,   rU  )rC   r0  rô   r^  r<  rÜ   s         rD   r7  zStringArray.sum0  sP   € ô 	�‰˜˜FÔ#Ü"×&Ñ&Ø—=‘=Ø—‘“ØØØô
ˆð ×*Ñ*¨4°Ó8Ð8rF   c                ó–   •— t         ‰| �  |¬«      }| j                  j                  t        j
                  u r|j                  d«      }|S )N)ÚdropnaÚInt64)rh   Úvalue_countsr€   rH   r@   rA   r¸   )rC   rc  rÜ   rj   s      €rD   re  zStringArray.value_countsB  s>   ø€ Ü‘Ñ%¨VÐ%Ó4ˆà�:‰:×Ñ¤*§-¡-Ñ/Ø—]‘] 7Ó+ˆFØˆrF   c                óz   — | j                   j                  }|r"|t        j                  | j                   «      z   S |S rg   )rð   Únbytesr   Úmemory_usage_of_objects)rC   ÚdeeprÜ   s      rD   Úmemory_usagezStringArray.memory_usageI  s3   € Ø—‘×%Ñ%ˆÙØœC×7Ñ7¸¿¹ÓFÑFÐFØˆrF   c                óP  •— | j                   }t        |«      rn|€3t        j                  |d   «      xs t        j                  |d   «      }n;t        j                  ||d      «      xs t        j                  ||d      «      }nd}|rt	        d«      ‚t
        ‰| �  |||¬«      S )a8  
        Find indices where elements should be inserted to maintain order.

        Find the indices into a sorted array `self` (a) such that, if the
        corresponding elements in `value` were inserted before the indices,
        the order of `self` would be preserved.

        Assuming that `self` is sorted:

        ======  ================================
        `side`  returned index `i` satisfies
        ======  ================================
        left    ``self[i-1] < value <= self[i]``
        right   ``self[i-1] <= value < self[i]``
        ======  ================================

        Parameters
        ----------
        value : array-like, list or scalar
            Value(s) to insert into `self`.
        side : {'left', 'right'}, optional
            If 'left', the index of the first suitable location found is given.
            If 'right', return the last such index.  If there is no suitable
            index, return either 0 or N (where N is the length of `self`).
        sorter : 1-D array-like, optional
            Optional array of integer indices that sort array a into ascending
            order. They are typically the result of argsort.

        Returns
        -------
        array of ints or int
            If value is array-like, array of insertion points.
            If value is scalar, a single integer.

        See Also
        --------
        numpy.searchsorted : Similar method from NumPy.

        Examples
        --------
        >>> arr = pd.array([1, 2, 3, 5])
        >>> arr.searchsorted([4])
        array([3])
        r   éÿÿÿÿFzOsearchsorted requires array to be sorted, which is impossible with NAs present.)rÿ   ÚsideÚsorter)rð   r‚   r@   Ú	checknullrQ   rh   Úsearchsorted)rC   rÿ   rm  rn  r´   Úhas_narj   s         €rD   rp  zStringArray.searchsortedO  sº   ø€ ðl —-‘-ˆÜˆwŒ<Øˆ~Ü#×-Ñ-¨g°a©jÓ9ò ¼Z×=QÑ=QØ˜B‘Kó>‘ô $×-Ñ-Ø˜F 1™IÑ&óò ?ä×)Ñ)¨'°&¸±*Ñ*=Ó>ñ ð ˆFÙÜð$óð ô ‰wÑ#¨%°dÀ6Ð#ÓJÐJrF   c                óÒ  — ddl m}m} t        |t        «      rp| j
                  j                  t        j                  urJ|j
                  j                  t        j                  u r$ || j                  |j
                  d¬«      |«      S t        ||«      rht        |t        «      rR| j
                  j                  t        j                  u r&|j
                  j                  t        j                  ust        S t        S t        |t        «      r|j                  }t        | «      t        |«      z  }| }t        j                  |«      r_t!        |«      t!        | «      k7  r#t#        dt!        | «      › dt!        |«      › �«      ‚t%        |«      st'        j(                  |«      }||   }t+        |dd «      }|j,                  j/                  d«      d	v r6t        j0                  |«      st        j2                  |d
«      rt5        d«      ‚|j,                  t6        j8                  v r}t'        j:                  | j                  d¬«      }| j
                  j                  ||<    || j                  |   |«      ||<   t        j<                  |d¬«      s|S | j?                  |«      S t'        j@                  t!        | j                  «      d¬«      } || j                  |   |«      ||<    |||«      }	| j
                  j                  t&        jB                  u rU|tD        jF                  k(  r!|	jI                  t&        jJ                  d¬«      S |	jI                  t&        jJ                  d¬«      S |	S )Nr   )ÚArrowExtensionArrayrÍ   Frî   z"Lengths of operands do not match: z != r€   r¯   )ÚmulÚrmulÚbzJCannot multiply StringArray by bools. Explicitly cast to integers instead.r—   r‹   Tró   r¡   ro   )&rÒ   rs  rÍ   rS   r£   r€   rH   r@   rA   r¸   r¹   rw   rð   r,   r   Úis_list_liker‚   rQ   r   rU   rÔ   r;  rr   rµ   Úis_boolÚis_np_dtyper^   r    ÚARITHMETIC_BINOPSÚ
empty_likerö   Ú_from_backing_datar'  rW   ÚoperatorÚner”   Úbool_)
rC   r`   rº   rs  rÍ   rÙ   ÚvalidÚother_dtyperÜ   Úres_arrs
             rD   Ú_cmp_methodzStringArray._cmp_method˜  s¥  € ÷	
ô �uœoÔ.Ø—
‘
×#Ñ#¬:¯=©=Ñ8Ø—‘×$Ñ$¬
¯©Ñ5ñ �d—k‘k %§+¡+°E�kÓ:¸EÓBÐBä�eÐ0Ô1Ü˜%¤Ô1ð —J‘J×'Ñ'¬:¯=©=Ñ8ØŸ™×,Ñ,´J·M±MÑAä)Ð)ä%Ð%ä�eœ[Ô)Ø—N‘NˆEä�D‹zœD ›KÑ'ˆØ�ˆä×Ñ˜EÔ"Ü�5‹zœS ›YÒ&ä Ø8¼¸T»¸À4ÌÈEË
À|ÐTóð ô
 ! Ô'ÜŸ
™
 5Ó)�Ø˜%‘LˆEä˜e W¨dÓ3ˆØ�;‰;×Ñ˜SÓ! _Ñ4Ü�K‰K˜Ô¤#§/¡/°+¸sÔ"Cô ð7óð ð
 �;‰;œ#×/Ñ/Ñ/Ü—]‘] 4§=¡=¸ÔAˆFØŸ:™:×.Ñ.ˆF�4‰LÙ˜tŸ}™}¨UÑ3°UÓ;ˆF�5‰MÜ×&Ñ& v°dÕ;Ø�Ø×*Ñ*¨6Ó2Ð2ô —X‘Xœc $§-¡-Ó0¸Ô?ˆFÙ˜tŸ}™}¨UÑ3°UÓ;ˆF�5‰MÙ" 6¨4Ó0ˆGØ�z‰z×"Ñ"¤b§f¡fÑ,ØœŸ™Ò$Ø"×+Ñ+¬B¯H©H¸tÐ+ÓDÐDà"×+Ñ+¬B¯H©H¸uÐ+ÓEÐEØˆNrF   c                ó,   ‡— | j                  ˆfd„«      S )Nc                ó&   •— | j                  ‰«      S rg   )Úzfill)rÁ   Úwidths    €rD   Ú<lambda>z(StringArray._str_zfill.<locals>.<lambda>ä  s   ø€  q§w¡w¨u¤~rF   )rÝ   )rC   r‡  s    `rD   Ú
_str_zfillzStringArray._str_zfillã  s   ø€ Ø�}‰}Ó5Ó6Ð6rF   )r€   zStringDtype | Nonerì   r¡   rž   r    )r€   r;   rž   r    )r€   ræ   rì   r¡   rž   r   )r€   r   rì   r¡   rž   r   )rž   r/   )rž   rw   rg   )rž   z,tuple[np.ndarray, libmissing.NAType | float])rž   r    )rÙ   rç   rž   r    )rÙ   rç   rž   r   )rñ   r/   rž   rç   )T)rì   r¡   )rE   r>   rô   r¡   r/  r¡   r0  úAxisInt | None)rE   r>   rô   r¡   rž   rw   )r0  rŠ  rž   r   )NT)rô   r¡   rž   r5   )r0  rŠ  rô   r¡   r^  r¢   rž   r5   )rc  r¡   rž   r8   rå   )ri  r¡   rž   r¢   )ÚleftN)rÿ   z$NumpyValueArrayLike | ExtensionArrayrm  zLiteral['left', 'right']rn  zNumpySorter | Nonerž   znpt.NDArray[np.intp] | np.intp)r‡  r¢   rž   r   )"rr   r¤   r¥   r¦   Ú_typrX   rï   r   r©   r	  r  r  r  r  r  r  r  r"  r%  r"   r¸   r=  rS  rU  r3  r4  r7  re  rj  rp  rƒ  Ú_arith_methodr‰  rª   r«   s   @rD   rw   rw   _  sÓ  ø„ ñNðb €Dð 6:Èñ
Ø 2ð
ØAEð
à	õ
ó òD	ð à/3À%ñ% Ø ,ð% Ø;?ð% à	ò% ó ð% ðN à=BñCØ .ðCØ6:ðCà	òCó ðCõ
ð òBó ðBó
+ó(ò
õ8(ó03ó8ó:ö$+ðJ ØØ ñPàðPð ð	Pð
 ðPð óPð. 8<õ Põd<ô9ô9ð  $ØØñ9ð ð9ð ð	9ð
 ð9ð 
ó9ö$ôð *0Ø%)ð	GKà3ðGKð 'ðGKð #ð	GKð
 
(õGKòRGðR  €M÷7rF   rw   )`Ú
__future__r   Ú	functoolsr   r}  Útypingr   r   r   r   r	   r¶   ÚnumpyrU   Úpandas._configr
   r   Úpandas._libsr   r   r@   Úpandas._libs.arraysr   Úpandas._libs.libr   Úpandas.compatr   r   Úpandas.compat.numpyr   rX  Úpandas.errorsr   Úpandas.util._decoratorsr   Úpandas.util._exceptionsr   Úpandas.core.dtypes.baser   r   r   Úpandas.core.dtypes.commonr   r   r   r   r   r   Úpandas.corer   r    r!   Úpandas.core.algorithmsr"   Úpandas.core.array_algosr#   Úpandas.core.arrays.baser$   Úpandas.core.arrays.floatingr%   r&   Úpandas.core.arrays.integerr'   r(   Úpandas.core.arrays.numpy_r)   Úpandas.core.constructionr*   Úpandas.core.indexersr+   Úpandas.core.missingr,   Úpandas.io.formatsr-   rO   r�   Úpyarrow.computeÚcomputer�   Úcollections.abcr.   Úpandas._typingr/   r0   r1   r2   r3   r4   r5   r6   r7   r9   r8   r;   r£   rw   r8  rF   rD   Ú<module>r¬     s  ðÝ "å Û ÷õ ó ã ÷÷
õ .Ý 0÷õ /Ý (õõ 5÷ñ ÷
÷ ÷ó õ (Ý 5Ý 2÷÷õ :Ý 2Ý 4Ý $å &áÛÝ áÝ.ã÷
÷ 
õ 
õ ñ ˆHÓØôn Ð'ó n ó ó ðn ôb	E�nô EñP ˆOÓôB
7�/Ð#6ó B
7ó ñB
7rF   