Ë
    u™ãjÁ ã                  ó¾  — d Z ddlmZ ddl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mZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z? ddl@mAZBmCZCmDZD ddlEmFZF er>ddlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZS ddlTmUZUmVZVmWZW ddlXmYZYmZZZ  edeVeUz  eZz  ¬«      Z[d<d„Z\	 	 	 	 	 	 	 	 d=d„Z]d>d„Z^ej¾                  ejÀ                  ejÂ                  ejÄ                  ejÆ                  ejÈ                  ejÊ                  ejÌ                  ejÎ                  ejÐ                  ejÒ                  ejÔ                  ejÖ                  ejØ                  dœZm	 	 	 	 d?d„Znd@d„Zoe
dAd„«       Zpe
dBd„«       Zp ed«      d „ «       ZpdCd!„ZqdDdEd"„ZrepZsd#Ztd$ZudFd%„ZvdGd&„Zw	 	 	 	 dH	 	 	 	 	 	 	 	 	 	 	 dId'„Zx	 	 	 	 	 	 	 	 dJd(„Zy ed«      	 	 	 dK	 	 	 	 	 	 	 dLd)„«       Zz	 	 	 	 	 dM	 	 	 	 	 	 	 	 	 dNd*„Z{	 dD	 	 	 	 	 	 	 dOd+„Z|	 	 dP	 	 	 	 	 	 	 dQd,„Z}	 dR	 	 	 	 	 	 	 dSd-„Z~	 	 	 	 	 	 dT	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dUd.„ZdVd/„Z€dWd0„Z� ed1«      	 	 	 dX	 	 	 	 	 dYd2„«       Z‚	 	 dZ	 	 	 	 	 	 	 	 	 d[d3„Zƒh d4£Z„d\d]d5„Z…d6Z†	 	 	 	 d^	 	 	 	 	 	 	 	 	 	 	 d_d7„Z‡d`d8„Zˆdad9„Z‰	 	 	 	 	 	 dbd:„ZŠ	 dD	 	 	 	 	 dcd;„Z‹y)dzl
Generic data algorithms. This module is experimental at the moment and not
intended for public consumption
é    )ÚannotationsN)ÚTYPE_CHECKINGÚLiteralÚTypeVarÚcastÚoverload)ÚalgosÚ	hashtableÚiNaTÚlib©ÚNA)Ú
set_module)Úfind_stack_level)Ú'construct_1d_object_array_from_listlikeÚnp_find_common_type)Úensure_float64Úensure_objectÚensure_platform_intÚis_bool_dtypeÚis_complex_dtypeÚis_dict_likeÚis_dtype_equalÚis_extension_array_dtypeÚis_floatÚis_float_dtypeÚ
is_integerÚis_integer_dtypeÚis_list_likeÚis_object_dtypeÚis_signed_integer_dtypeÚneeds_i8_conversion)Úconcat_compat)ÚBaseMaskedDtypeÚCategoricalDtypeÚExtensionDtypeÚNumpyEADtype)ÚABCExtensionArrayÚABCIndexÚABCMultiIndexÚABCNumpyExtensionArrayÚ	ABCSeries)ÚisnaÚna_value_for_dtype)Útake_nd)ÚarrayÚensure_wrapped_if_datetimelikeÚextract_array)Úvalidate_indices)ÚAnyArrayLikeÚ	ArrayLikeÚ
ArrayLikeTÚAxisIntÚDtypeObjÚListLikeÚNumpySorterÚNumpyValueArrayLikeÚ
RankMethodÚRankNaOptionÚTakeIndexerÚnpt)ÚCategoricalÚIndexÚSeries)ÚBaseMaskedArrayÚExtensionArrayÚT)Úboundc                óª  — t        | t        «      st        | d¬«      } t        | j                  «      rt        t        j                  | «      «      S t        | j                  t        «      rBt        d| «      } | j                  st        | j                  «      S t        j                  | «      S t        | j                  t        «      rt        d| «      } | j                  S t        | j                  «      rdt        | t        j                   «      r$t        j                  | «      j#                  d«      S t        j                  | «      j%                  dd¬«      S t'        | j                  «      rt        j                  | «      S t)        | j                  «      r:t        j                  | «      }|j                  j*                  dv rt-        |«      S |S t/        | j                  «      rt        j                  | «      S t1        | j                  «      r| j#                  d	«      }t        d
|«      }|S t        j                  | t2        ¬«      } t        | «      S )a„  
    routine to ensure that our data is of the correct
    input dtype for lower-level routines

    This will coerce:
    - ints -> int64
    - uint -> uint64
    - bool -> uint8
    - datetimelike -> i8
    - datetime64tz -> i8 (in local tz)
    - categorical -> codes

    Parameters
    ----------
    values : np.ndarray or ExtensionArray

    Returns
    -------
    np.ndarray
    T©Úextract_numpyrC   r@   Úuint8F©Úcopy)é   é   é   Úi8ú
np.ndarray©Údtype)Ú
isinstancer*   r2   r    rS   r   ÚnpÚasarrayr$   r   Ú_hasnaÚ_ensure_dataÚ_datar%   Úcodesr   ÚndarrayÚviewÚastyper   r   Úitemsizer   r   r"   Úobject)ÚvaluesÚfloat_valuesÚnpvaluess      úa/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/core/algorithms.pyrX   rX   p   s»  € ô, �fœmÔ,ä˜v°TÔ:ˆä�v—|‘|Ô$ÜœRŸZ™Z¨Ó/Ó0Ð0ä	�F—L‘L¤/Ô	2äÐ'¨Ó0ˆØ�}Š}ô   §¡Ó-Ð-Ü�z‰z˜&Ó!Ð!ä	�F—L‘LÔ"2Ô	3ô �m VÓ,ˆØ�|‰|Ðä	�v—|‘|Ô	$Ü�fœbŸj™jÔ)ä—:‘:˜fÓ%×*Ñ*¨7Ó3Ð3ô —:‘:˜fÓ%×,Ñ,¨W¸5Ð,ÓAÐAä	˜&Ÿ,™,Ô	'Ü�z‰z˜&Ó!Ð!ä	˜Ÿ™Ô	%ô —z‘z &Ó)ˆØ×Ñ×&Ñ&¨+Ñ5ä! ,Ó/Ð/ØÐä	˜&Ÿ,™,Ô	'ô �z‰z˜&Ó!Ð!ô 
˜VŸ\™\Ô	*Ø—;‘;˜tÓ$ˆÜ˜ hÓ/ˆØˆô �Z‰Z˜¤fÔ-€FÜ˜Ó Ð ó    c                óä   — t        | t        «      r| j                  |k(  r| S t        |t        j                  «      s#|j	                  «       }|j                  | |¬«      S | j                  |d¬«      S )zç
    reverse of _ensure_data

    Parameters
    ----------
    values : np.ndarray or ExtensionArray
    dtype : np.dtype or ExtensionDtype
    original : AnyArrayLike

    Returns
    -------
    ExtensionArray or np.ndarray
    rR   FrK   )rT   r(   rS   rU   Úconstruct_array_typeÚ_from_sequencer]   )r`   rS   ÚoriginalÚclss       rc   Ú_reconstruct_datarj   Á   sj   € ô  �&Ô+Ô,°·±ÀÒ1Fàˆä�eœRŸX™XÔ&ð ×(Ñ(Ó*ˆð
 ×!Ñ! &°Ð!Ó6Ð6ð
 �=‰=˜ Uˆ=Ó+Ð+rd   c                óf  — t        | t        t        t        t        j
                  t        f«      s�|dk7  r$t        |› dt        | «      j                  › d�«      ‚t        j                  | d¬«      }|dv r(t        | t        «      rt        | «      } t        | «      } | S t	        j                  | «      } | S )z5
    ensure that we are arraylike if not already
    úisin-targetszQ requires a Series, Index, ExtensionArray, np.ndarray or NumpyExtensionArray got ú.F©Úskipna)ÚmixedÚstringúmixed-integer)rT   r)   r,   r(   rU   r[   r+   Ú	TypeErrorÚtypeÚ__name__r   Úinfer_dtypeÚtupleÚlistr   rV   )r`   Ú	func_nameÚinferreds      rc   Ú_ensure_arrayliker{   å   s¯   € ô ØÜ	”9Ô/´·±Ô=SÐTôð
 ˜Ò&äØ�+ð ä˜F“|×,Ñ,Ð-¨Qð0óð ô —?‘? 6°%Ô8ˆØÐ;Ñ;ä˜&¤%Ô(Ü˜f›�Ü<¸VÓDˆFð €Mô —Z‘Z Ó'ˆFØ€Mrd   )Ú
complex128Ú	complex64Úfloat64Úfloat32Úuint64Úuint32Úuint16rJ   Úint64Úint32Úint16Úint8rq   r_   c                óH   — t        | «      } t        | «      }t        |   }|| fS )z‰
    Parameters
    ----------
    values : np.ndarray

    Returns
    -------
    htable : HashTable subclass
    values : ndarray
    )rX   Ú_check_object_for_stringsÚ_hashtables)r`   Úndtyper
   s      rc   Ú_get_hashtable_algor‹     s-   € ô ˜&Ó!€Fä& vÓ.€FÜ˜FÑ#€IØ�fÐÐrd   c                ón   — | j                   j                  }|dk(  rt        j                  | d¬«      rd}|S )z 
    Check if we can use string hashtable instead of object hashtable.

    Parameters
    ----------
    values : ndarray

    Returns
    -------
    str
    r_   Frn   rq   )rS   Únamer   Úis_string_array)r`   rŠ   s     rc   rˆ   rˆ   '  s7   € ð �\‰\×Ñ€FØ�Òô ×Ñ˜v¨eÕ4ØˆFØ€Mrd   c                 ó   — y ©N© ©r`   s    rc   Úuniquer“   B  s   € Ørd   c                 ó   — y r�   r‘   r’   s    rc   r“   r“   D  s   € Ø7:rd   Úpandasc                ó   — t        | «      S )aÊ  
    Return unique values based on a hash table.

    Uniques are returned in order of appearance. This does NOT sort.

    Significantly faster than numpy.unique for long enough sequences.
    Includes NA values.

    Parameters
    ----------
    values : 1d array-like
        The input array-like object containing values from which to extract
        unique values.

    Returns
    -------
    Index, ExtensionArray or numpy.ndarray
        The return type depends on the type of the input:

        * :class:`Index` : when the input is an :class:`Index`, the result is
          an :class:`Index` (or a subclass such as :class:`DatetimeIndex`).
        * :class:`ExtensionArray` : when the input has an
          :class:`ExtensionDtype` (for example :class:`Categorical`,
          tz-aware ``datetime64``, :class:`IntervalArray`, a masked
          integer/boolean/float array, an Arrow-backed array, or
          :class:`NumpyExtensionArray`), the result is an
          :class:`ExtensionArray` of the same dtype.
        * :class:`numpy.ndarray` : for any other input (a NumPy-dtype
          :class:`Series`, a :class:`numpy.ndarray`, or any other 1-D
          array-like), the result is a :class:`numpy.ndarray`.

    See Also
    --------
    Index.unique : Return unique values from an Index.
    Series.unique : Return unique values of Series object.

    Notes
    -----
    When working with object-dtype arrays, boolean and integer values may not
    be distinguished since ``True == 1`` and ``False == 0`` in Python.

    >>> pd.unique(np.array([True, 1, False, 0], dtype=object))
    array([True, False], dtype=object)

    Examples
    --------
    >>> pd.unique(pd.Series([2, 1, 3, 3]))
    array([2, 1, 3])

    >>> pd.unique(pd.Series([2] + [1] * 5))
    array([2, 1])

    >>> pd.unique(pd.Series([pd.Timestamp("20160101"), pd.Timestamp("20160101")]))
    array(['2016-01-01T00:00:00.000000'], dtype='datetime64[us]')

    >>> pd.unique(
    ...     pd.Series(
    ...         [
    ...             pd.Timestamp("20160101", tz="US/Eastern"),
    ...             pd.Timestamp("20160101", tz="US/Eastern"),
    ...         ],
    ...         dtype="M8[ns, US/Eastern]",
    ...     )
    ... )
    <DatetimeArray>
    ['2016-01-01 00:00:00-05:00']
    Length: 1, dtype: datetime64[ns, US/Eastern]

    >>> pd.unique(
    ...     pd.Index(
    ...         [
    ...             pd.Timestamp("20160101", tz="US/Eastern"),
    ...             pd.Timestamp("20160101", tz="US/Eastern"),
    ...         ],
    ...         dtype="M8[ns, US/Eastern]",
    ...     )
    ... )
    DatetimeIndex(['2016-01-01 00:00:00-05:00'],
            dtype='datetime64[ns, US/Eastern]',
            freq=None)

    >>> pd.unique(np.array(list("baabc"), dtype="O"))
    array(['b', 'a', 'c'], dtype=object)

    An unordered Categorical will return categories in the
    order of appearance.

    >>> pd.unique(pd.Series(pd.Categorical(list("baabc"))))
    ['b', 'a', 'c']
    Categories (3, str): ['a', 'b', 'c']

    >>> pd.unique(pd.Series(pd.Categorical(list("baabc"), categories=list("abc"))))
    ['b', 'a', 'c']
    Categories (3, str): ['a', 'b', 'c']

    An ordered Categorical preserves the category ordering.

    >>> pd.unique(
    ...     pd.Series(
    ...         pd.Categorical(list("baabc"), categories=list("abc"), ordered=True)
    ...     )
    ... )
    ['b', 'a', 'c']
    Categories (3, str): ['a' < 'b' < 'c']

    An array of tuples

    >>> pd.unique(pd.Series([("a", "b"), ("b", "a"), ("a", "c"), ("b", "a")]).values)
    array([('a', 'b'), ('b', 'a'), ('a', 'c')], dtype=object)

    A NumpyExtensionArray of complex

    >>> pd.unique(pd.array([1 + 1j, 2, 3]))
    <NumpyExtensionArray>
    [(1+1j), (2+0j), (3+0j)]
    Length: 3, dtype: complex128
    )Úunique_with_maskr’   s    rc   r“   r“   H  s   € ôn ˜FÓ#Ð#rd   c                óÀ   — t        | «      dk(  ryt        | «      } t        j                  | j	                  «       j                  d«      «      dk7  j                  «       }|S )aH  
    Return the number of unique values for integer array-likes.

    Significantly faster than pandas.unique for long enough sequences.
    No checks are done to ensure input is integral.

    Parameters
    ----------
    values : 1d array-like

    Returns
    -------
    int : The number of unique values in ``values``
    r   Úintp)ÚlenrX   rU   ÚbincountÚravelr]   Úsum)r`   Úresults     rc   Únunique_intsrŸ   Â  sO   € ô ˆ6ƒ{�aÒØÜ˜&Ó!€Fä�k‰k˜&Ÿ,™,›.×/Ñ/°Ó7Ó8¸AÑ=×BÑBÓD€FØ€Mrd   c                óÒ  — t        | d¬«      } t        | j                  t        «      r| j	                  «       S t        | t
        «      r| j	                  «       S | }t        | «      \  }}  |t        | «      «      }|€*|j	                  | «      }t        ||j                  |«      }|S |j	                  | |¬«      \  }}t        ||j                  |«      }|€J ‚||j                  d«      fS )z?See algorithms.unique for docs. Takes a mask for masked arrays.r“   ©ry   ©ÚmaskÚbool)
r{   rT   rS   r&   r“   r)   r‹   rš   rj   r]   )r`   r£   rh   r
   ÚtableÚuniquess         rc   r—   r—   Ù  sÔ   € ä˜v°Ô:€Fä�&—,‘,¤Ô/à�}‰}‹Ðä�&œ(Ô#à�}‰}‹Ðà€HÜ+¨FÓ3Ñ€Iˆvá”c˜&“kÓ"€EØ€|Ø—,‘,˜vÓ&ˆÜ# G¨X¯^©^¸XÓFˆØˆð Ÿ™ V°$˜Ó7‰ˆ�Ü# G¨X¯^©^¸XÓFˆØÐÐÐØ˜Ÿ™ FÓ+Ð+Ð+rd   i@B l          c                ó
  — | j                   j                  dvs(| j                   j                  dk  s| j                  dk(  ryt	        | j                  «       «      t         k  xs  t	        | j                  «       «      t        kD  S )zÎ
    Whether casting ``arr`` to float64 could change an integer's identity.

    Only 64-bit integers can carry a magnitude that float64 cannot represent
    exactly; narrower widths always round-trip.
    Úiué   r   F)rS   Úkindr^   ÚsizeÚintÚminÚ_FLOAT64_INT_EXACT_MAXÚmax)Úarrs    rc   Ú_may_lose_precision_as_float64r±   ÿ  se   € ð ‡y�y‡~�~˜TÑ! S§Y¡Y×%7Ñ%7¸!Ò%;¸s¿x¹xÈ1º}ØäˆC�G‰G‹I‹Ô0Ð0Ñ0ò 	3Üˆs�w‰w‹y‹>Ô2Ñ2ðrd   c                óè  ‡— t        | «      s"t        dt        | «      j                  › d�«      ‚t        ‰«      s"t        dt        ‰«      j                  › d�«      ‚t	        ‰t
        t        f«      �r3t        ‰«      dkD  �r$t	        | t        t        f«      r| j                  }n| }t	        |t        j                  «      rå|j                  dk(  rÖ|j                  j                  dv r¾|j                   t        ‰«      k  r¦|j                  j"                  dk  sP|j                   dk(  sAt$         t'        |j)                  «       «      k  r]t'        |j+                  «       «      t$        k  r=t        j,                  ˆfd„|j/                  «       D «       t0        |j                   ¬«      S t	        ‰t        t        t2        t        j                  f«      �s8t5        ‰«      }t7        |d	¬
«      Št        ‰«      dkD  �rE‰j                  j                  dv �r,t9        | «      �s t;        ‰| «      �st=        | dd«      }t?        d‰j                  «      }t	        |t        j                  «      sd}n‘tA        ||«      }|j                  dvrd}nt|j                  dvrd}nc|j                  dv r|j"                  dk(  rd}nC|j                  dv r'|j"                  dk(  rt?        d‰«      }tC        |«      }n|j                  dv }|r@tE        |«      Šn4t	        ‰tF        «      rt        jH                  ‰«      ŠntK        ‰dd¬«      Št7        | d¬
«      }	tK        |	d¬«      }	t	        |	t        j                  «      s|	jM                  ‰«      S tO        |	j                  «      rtQ        |	«      jM                  ‰«      S tO        ‰j                  «      r:tS        |	j                  «      s%t        jT                  |	jV                  t0        ¬«      S tO        ‰j                  «      rtM        |	‰jY                  tZ        «      «      S t	        ‰j                  t\        «      r2tM        t        j^                  |	«      t        j^                  ‰«      «      S |	j                  t        j`                  k(  rC‰j                  t        jb                  k(  r&‰‰dk\     jY                  t        j`                  «      ŠnŠ|	j                  t        jb                  k(  rm‰j                  t        j`                  k(  rP‰‰t        jd                  t        jb                  «      j*                  k     jY                  t        jb                  «      ŠtA        ‰j                  |	j                  «      }|j                  dv xr tC        ‰«      xs tC        |	«      }
t        |	«      tf        kD  rVt        ‰«      dk  rH|	j                  tZ        k7  r5|
s3ti        d„ ‰D «       «      s!tk        ‰«      ji                  «       rd„ }nUd„ }nQ|
rt        j                  tZ        «      }‰jY                  |d¬«      Š|	jY                  |d¬«      }	tl        jn                  } ||	‰«      S )zÀ
    Compute the isin boolean array.

    Parameters
    ----------
    comps : list-like
    values : list-like

    Returns
    -------
    ndarray[bool]
        Same length as `comps`.
    zIonly list-like objects are allowed to be passed to isin(), you passed a `ú`r   é   Úiubr©   c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr�   r‘   )Ú.0Úitemr`   s     €rc   ú	<genexpr>zisin.<locals>.<genexpr>L  s   øè ø€ Ò? D�˜”Ñ?ùs   ƒ)rS   Úcountrl   r¡   ÚiufcbrS   Nznp.dtypeTÚfcFr¨   rQ   )rI   Úextract_rangeÚisinrH   rR   é   c              3  ó,   K  — | ]  }|t         u –— Œ y ­wr�   r   )r·   Úvs     rc   r¹   zisin.<locals>.<genexpr>À  s   è ø€ Ò, �Aœ”GÑ,ùs   ‚c                ó˜   — t        j                  t        j                  | |«      j                  «       t        j                  | «      «      S r�   )rU   Ú
logical_orr¾   rœ   Úisnan)ÚcrÁ   s     rc   Úfzisin.<locals>.fÆ  s.   € Ü—}‘}¤R§W¡W¨Q°£]×%8Ñ%8Ó%:¼B¿H¹HÀQ»KÓHÐHrd   c                óJ   — t        j                  | |«      j                  «       S r�   )rU   r¾   rœ   )ÚaÚbs     rc   ú<lambda>zisin.<locals>.<lambda>Ê  s   € œRŸW™W Q¨›]×0Ñ0Ó2€ rd   rK   )8r   rs   rt   ru   rT   ÚsetÚ	frozensetrš   r,   r)   Ú_valuesrU   r[   ÚndimrS   rª   r«   r^   r®   r¬   r­   r¯   ÚfromiterÚtolistr¤   r(   rx   r{   r!   r   Úgetattrr   r   r±   r   r*   r0   r2   r¾   r"   Úpd_arrayr    ÚzerosÚshaper]   r_   r&   rV   r€   rƒ   ÚiinfoÚ_MINIMUM_COMP_ARR_LENÚanyr-   ÚhtableÚismember)Úcompsr`   Ú	comps_arrÚorig_valuesÚcomps_dtypeÚvalues_dtypeÚneeds_objectÚcommonÚ
values_arrÚcomps_arrayÚlossy_commonrÆ   s    `          rc   r¾   r¾     s  ø€ ô ˜ÔÜð(Ü(,¨U«×(<Ñ(<Ð'=¸Qð@ó
ð 	
ô ˜ÔÜð(Ü(,¨V«×(=Ñ(=Ð'>¸aðAó
ð 	
ô
 �&œ3¤	Ð*Õ+´°F³¸a³ô �eœi¬Ð2Ô3ØŸ™‰IàˆIä�y¤"§*¡*Ô-Ø—‘ !Ò#Ø—‘×$Ñ$¨Ñ-ð —‘¤ V£Ò,ð —‘×(Ñ(¨1Ò,Ø—>‘> QÒ&ä+Ð+¬c°)·-±-³/Ó.BÒBÜ˜IŸM™M›OÓ,Ô/EÒEô —;‘;Û?¨I×,<Ñ,<Ó,>Ô?ÜØ—n‘nôð ô �fœx¬Ô4EÄrÇzÁzÐRÕSÜ˜6“lˆÜ" ;¸.ÔIˆô �‹K˜!‹OØ—‘×!Ñ! WÒ,Ü+¨EÕ2Ü" 6¨5Õ1ô " %¨°$Ó7ˆKô   
¨F¯L©LÓ9ˆLÜ˜k¬2¯8©8Ô4Ø#‘ä,¨\¸;ÓG�Ø—;‘; gÑ-Ø#'‘LØ—[‘[¨Ñ,ð $)‘LØ ×%Ñ%¨Ñ-°+×2FÑ2FÈ!Ò2Kð $(‘LØ!×&Ñ&¨$Ñ.°<×3HÑ3HÈAÒ3Mô "& l°FÓ!;�JÜ#AÀ*Ó#M‘Lð $0×#4Ñ#4¸Ð#<�LÙÜ@ÀÓM‘ä	�FœMÔ	*ä—‘˜&Ó!‰ä˜v°TÈÔNˆä# E°VÔ<€KÜ ¸4Ô@€KÜ�k¤2§:¡:Ô.à×Ñ Ó'Ð'ä	˜[×.Ñ.Ô	/ä˜Ó$×)Ñ)¨&Ó1Ð1Ü	˜VŸ\™\Ô	*´?À;×CTÑCTÔ3Uä�x‰x˜×)Ñ)´Ô6Ð6ä	˜VŸ\™\Ô	*Ü�K §¡¬vÓ!6Ó7Ð7ä	�F—L‘L¤.Ô	1Ü”B—J‘J˜{Ó+¬R¯Z©Z¸Ó-?Ó@Ð@ð
 ×ÑœBŸI™IÒ%¨&¯,©,¼"¿(¹(Ò*BØ˜ !™Ñ$×+Ñ+¬B¯I©IÓ6‰Ø	×	Ñ	œbŸh™hÒ	&¨6¯<©<¼2¿9¹9Ò+DØ˜¤"§(¡(¬2¯8©8Ó"4×"8Ñ"8Ñ8Ñ9×@Ñ@ÄÇÁÓJˆô
 ! §¡¨{×/@Ñ/@ÓA€FØ—;‘; $Ð&ò Ü& vÓ.ò 	7Ü)¨+Ó6ð ô 	ˆKÓÔ0Ò0Ü�‹K˜2ÒØ×Ñ¤Ò'áÜÑ, VÔ,Ô,ô �‹<×ÑÔóIñ 3‰Añ ä—X‘XœfÓ%ˆFØ—‘˜v¨E�Ó2ˆØ!×(Ñ(¨°eÐ(Ó<ˆÜ�O‰Oˆáˆ[˜&Ó!Ð!rd   c                ó  — | }| j                   j                  dv rt        }t        | «      \  }}  ||xs t	        | «      «      }|j                  | d|||¬«      \  }}	t        ||j                   |«      }t        |	«      }	|	|fS )a(  
    Factorize a numpy array to codes and uniques.

    This doesn't do any coercion of types or unboxing before factorization.

    Parameters
    ----------
    values : ndarray
    use_na_sentinel : bool, default True
        If True, the sentinel -1 will be used for NaN values. If False,
        NaN values will be encoded as non-negative integers and will not drop the
        NaN from the uniques of the values.
    size_hint : int, optional
        Passed through to the hashtable's 'get_labels' method
    na_value : object, optional
        A value in `values` to consider missing. Note: only use this
        parameter when you know that you don't have any values pandas would
        consider missing in the array (NaN for float data, iNaT for
        datetimes, etc.).
    mask : ndarray[bool], optional
        If not None, the mask is used as indicator for missing values
        (True = missing, False = valid) instead of `na_value` or
        condition "val != val".

    Returns
    -------
    codes : ndarray[np.intp]
    uniques : ndarray
    ÚmMéÿÿÿÿ)Úna_sentinelÚna_valuer£   Ú	ignore_na)rS   rª   r   r‹   rš   Ú	factorizerj   r   )
r`   Úuse_na_sentinelÚ	size_hintrè   r£   rh   Ú
hash_klassr¥   r¦   rZ   s
             rc   Úfactorize_arrayrî   ×  s“   € ðH €HØ‡|�|×Ñ˜DÑ ô
 ˆä,¨VÓ4Ñ€J�á�yÒ/¤C¨£KÓ0€EØ—_‘_ØØØØØ!ð %ó �N€GˆUô   ¨¯©¸ÓB€Gä Ó&€EØ�'ˆ>Ðrd   c                ó–  — t        | «      }t        j                  |t        ¬«      }d|d<   | dd | dd k7  |dd t        j                  |«      }t        |«      }t        j
                  ||¬«      }t        j                  t        j                  |t        j                  ¬«      |«      }|r|st        |dz
  |z
  «      }|ddd…   }||fS )a¸  
    Factorize an array known to be monotonic and of length >= 2.

    Uses adjacent-element comparison instead of hash table construction.
    The caller is responsible for having verified monotonicity; monotonic
    arrays contain no NA values (NAs break monotonicity checks), so NA
    handling is not needed.

    Parameters
    ----------
    arr : ndarray
    ascending : bool
        Whether `arr` is monotonic increasing (otherwise decreasing).
    sort : bool
        Whether the uniques should be in sorted order.

    Returns
    -------
    codes : ndarray[np.intp]
    uniques_indexer : ndarray[np.intp]
        Positions in `arr` of the unique values, ordered to match `codes`.
    rR   Tr   r´   Nræ   )Úappend)
rš   rU   Úemptyr¤   ÚflatnonzeroÚdiffÚrepeatÚaranger™   r   )	r°   Ú	ascendingÚsortÚnÚtransitionsÚgroup_startsÚngroupsÚrun_lengthsrZ   s	            rc   Úfactorize_monotonic_codesrý     s¾   € ô6 	ˆC‹€Aô —(‘(˜1¤DÔ)€KØ€K��NØ˜!˜"�g  S b Ñ)€K��€Oô —>‘> +Ó.€LÜ�,Ó€GÜ—'‘'˜,¨qÔ1€KÜ�I‰I”b—i‘i ¬r¯w©wÔ7¸ÓE€Eá‘Iä# G¨a¡K°%Ñ$7Ó8ˆØ#¡D b DÑ)ˆà�,ÐÐrd   c                óV  — t        | t        t        f«      r| j                  ||¬«      S t	        | d¬«      } | }t        | t
        j                  «      s| j                  |¬«      \  }}n„t        j                  | «      } |s\| j                  t        k(  rIt        | «      }|j                  «       r.t        | j                  d¬«      }t        j                  ||| «      } t        | ||¬«      \  }}|r!t        |«      dkD  rt!        |||d	d¬
«      \  }}t#        ||j                  |«      }||fS )ax  
    Encode the object as an enumerated type or categorical variable.

    This method is useful for obtaining a numeric representation of an
    array when all that matters is identifying distinct values. `factorize`
    is available as both a top-level function :func:`pandas.factorize`,
    and as a method :meth:`Series.factorize` and :meth:`Index.factorize`.

    Parameters
    ----------
    values : sequence
        A 1-D sequence. Sequences that aren't pandas objects are
        coerced to ndarrays before factorization.
    sort : bool, default False
        Sort `uniques` and shuffle `codes` to maintain the
        relationship.
    use_na_sentinel : bool, default True
        If True, the sentinel -1 will be used for NaN values. If False,
        NaN values will be encoded as non-negative integers and will not drop the
        NaN from the uniques of the values.
    size_hint : int, optional
        Hint to the hashtable sizer.

    Returns
    -------
    codes : ndarray
        An integer ndarray that's an indexer into `uniques`.
        ``uniques.take(codes)`` will have the same values as `values`.
    uniques : ndarray, Index, or Categorical
        The unique valid values. When `values` is Categorical, `uniques`
        is a Categorical. When `values` is some other pandas object, an
        `Index` is returned. Otherwise, a 1-D ndarray is returned.

        .. note::

           Even if there's a missing value in `values`, `uniques` will
           *not* contain an entry for it.

    See Also
    --------
    cut : Discretize continuous-valued array.
    unique : Find the unique value in an array.

    Notes
    -----
    Reference :ref:`the user guide <reshaping.factorize>` for more examples.

    When working with object-dtype arrays, boolean and integer values may not
    be distinguished since ``True == 1`` and ``False == 0`` in Python.

    >>> codes, uniques = pd.factorize(np.array([True, 1, False, 0], dtype=object))
    >>> codes
    array([0, 0, 1, 1])
    >>> uniques
    array([True, False], dtype=object)

    Examples
    --------
    These examples all show factorize as a top-level method like
    ``pd.factorize(values)``. The results are identical for methods like
    :meth:`Series.factorize`.

    >>> codes, uniques = pd.factorize(np.array(["b", "b", "a", "c", "b"], dtype="O"))
    >>> codes
    array([0, 0, 1, 2, 0])
    >>> uniques
    array(['b', 'a', 'c'], dtype=object)

    With ``sort=True``, the `uniques` will be sorted, and `codes` will be
    shuffled so that the relationship is the maintained.

    >>> codes, uniques = pd.factorize(
    ...     np.array(["b", "b", "a", "c", "b"], dtype="O"), sort=True
    ... )
    >>> codes
    array([1, 1, 0, 2, 1])
    >>> uniques
    array(['a', 'b', 'c'], dtype=object)

    When ``use_na_sentinel=True`` (the default), missing values are indicated in
    the `codes` with the sentinel value ``-1`` and missing values are not
    included in `uniques`.

    >>> codes, uniques = pd.factorize(np.array(["b", None, "a", "c", "b"], dtype="O"))
    >>> codes
    array([ 0, -1,  1,  2,  0])
    >>> uniques
    array(['b', 'a', 'c'], dtype=object)

    Thus far, we've only factorized lists (which are internally coerced to
    NumPy arrays). When factorizing pandas objects, the type of `uniques`
    will differ. For Categoricals, a `Categorical` is returned.

    >>> cat = pd.Categorical(["a", "a", "c"], categories=["a", "b", "c"])
    >>> codes, uniques = pd.factorize(cat)
    >>> codes
    array([0, 0, 1])
    >>> uniques
    ['a', 'c']
    Categories (3, str): ['a', 'b', 'c']

    Notice that ``'b'`` is in ``uniques.categories``, despite not being
    present in ``cat.values``.

    For all other pandas objects, an Index of the appropriate type is
    returned.

    >>> cat = pd.Series(["a", "a", "c"])
    >>> codes, uniques = pd.factorize(cat)
    >>> codes
    array([0, 0, 1])
    >>> uniques
    Index(['a', 'c'], dtype='str')

    If NaN is in the values, and we want to include NaN in the uniques of the
    values, it can be achieved by setting ``use_na_sentinel=False``.

    >>> values = np.array([1, 2, 1, np.nan])
    >>> codes, uniques = pd.factorize(values)  # default: use_na_sentinel=True
    >>> codes
    array([ 0,  1,  0, -1])
    >>> uniques
    array([1., 2.])

    >>> codes, uniques = pd.factorize(values, use_na_sentinel=False)
    >>> codes
    array([0, 1, 0, 2])
    >>> uniques
    array([ 1.,  2., nan])
    )r÷   rë   rê   r¡   )rë   F)Úcompat)rë   rì   r   T)rë   Úassume_uniqueÚverify)rT   r)   r,   rê   r{   rU   r[   rV   rS   r_   r-   r×   r.   Úwhererî   rš   Ú	safe_sortrj   )	r`   r÷   rë   rì   rh   rZ   r¦   Ú	null_maskrè   s	            rc   rê   rê   E  s  € ôb �&œ8¤YÐ/Ô0Ø×Ñ T¸?ÐÓKÐKä˜v°Ô=€FØ€Hä�fœbŸj™jÔ)à×)Ñ)¸/Ð)ÓJ‰ˆ‰wô —‘˜FÓ#ˆá 6§<¡<´6Ò#9ô
 ˜V›ˆIØ�}‰}ŒÜ-¨f¯l©lÀ5ÔI�ô Ÿ™ )¨X°vÓ>�ä(ØØ+Øô
‰ˆˆwñ ”�G“˜qÒ Ü"ØØØ+ØØô
‰ˆ�ô   ¨¯©¸ÓB€Gà�'ˆ>Ðrd   c                ól  — ddl m}m}m}m}	 t        | dd «      }
|rdnd}|�Ëddlm} t        | |«      r| j                  } 	  || |d¬«      }|j                  |¬
«      }||_        ||j                  j                  «          }|j                  j                  d«      |_        |j!                  «       }|r,|j                  dk(  j#                  «       r|j$                  dd }t'        |«      }�nwd }t)        | «      r> || d¬«      j                  j                  |¬
«      }||_        |
|j                  _        �n,t        | t*        «      rct-        t/        | j0                  «      «      } || |¬«      j3                  ||¬«      j5                  «       }| j6                  |j                  _        n¹t9        | d¬«      } t;        | |«      \  }}}|j<                  t>        j@                  k(  r|j                  t>        jB                  «      } |||j<                  |
d¬«      }|s<t        | ||	f«      r.|jE                  | «      r| jF                  �| jF                  |_$         ||||d¬«      }|r|jK                  |d¬«      }|r|�||z  }|S ||jM                  «       z  }|S # t        $ r}t        d	«      |‚d }~ww xY w)Nr   )ÚDatetimeIndexrA   rB   ÚTimedeltaIndexr�   Ú
proportionrº   )ÚcutT)Úinclude_lowestz+bins argument only works with numeric data.©ÚdropnaÚintervalFrK   )Úindexr�   )Úlevelr  Úvalue_countsr¡   )rS   r�   rL   )r  r�   rL   Ústable)rö   rª   )'r•   r  rA   rB   r  rÑ   Úpandas.core.reshape.tiler	  rT   rÍ   rs   r  r�   r  Únotnar]   Ú
sort_indexÚallÚilocrš   r   r*   rx   ÚrangeÚnlevelsÚgroupbyr«   Únamesr{   Úvalue_counts_arraylikerS   rU   Úfloat16r   ÚequalsÚ_inferred_freq_strÚfreqÚsort_valuesr�   )r`   r÷   rö   Ú	normalizeÚbinsr  r  rA   rB   r  Ú
index_namer�   r	  ÚiiÚerrrž   Únormalize_denominatorÚlevelsÚkeysÚcountsÚ_Úidxs                         rc   Úvalue_counts_internalr,    s…  € ÷ó ô ˜ ¨Ó.€JÙ$‰<¨'€DàÐÝ0ä�f˜fÔ%Ø—^‘^ˆFð	TÙ�V˜T°$Ô7ˆBð
 —‘¨�Ó/ˆØˆŒØ˜Ÿ™×*Ñ*Ó,Ñ-ˆØ—|‘|×*Ñ*¨:Ó6ˆŒØ×"Ñ"Ó$ˆñ �v—~‘~¨Ñ*×/Ñ/Ô1Ø—[‘[  1Ð%ˆFô !$ B£Òð !%ÐÜ# FÔ+á˜F¨Ô/×7Ñ7×DÑDÈFÐDÓSˆFØˆFŒKØ *ˆF�L‰LÖä˜¤Ô.äœ% §¡Ó/Ó0ˆFá˜V¨$Ô/ß‘˜v¨f�Ó5ß‘“ð ð
 "(§¡ˆF�L‰LÕô ' v¸ÔHˆFÜ4°V¸VÓD‰OˆD�&˜!Ø�z‰zœRŸZ™ZÒ'Ø—{‘{¤2§:¡:Ó.�ñ ˜ D§J¡J°ZÀeÔLˆCñ Ü˜v¨°~Ð'FÔGØ—J‘J˜vÔ&Ø×-Ñ-Ð9ð "×4Ñ4�”á˜F¨#°D¸uÔEˆFáØ×#Ñ#¨i¸hÐ#ÓGˆáØ Ð,ØÐ3Ñ3ˆFð €Mð ˜fŸj™j›lÑ*ˆFà€MøôC ò 	TÜÐIÓJÐPSÐSûð	Tús   ÁJ Ê	J3Ê"J.Ê.J3c                óà   — | }t        | «      } t        j                  | ||¬«      \  }}}t        |j                  «      r|r|t
        k7  }||   ||   }}t        ||j                  |«      }|||fS )zÓ
    Parameters
    ----------
    values : np.ndarray
    dropna : bool
    mask : np.ndarray[bool] or None, default None

    Returns
    -------
    uniques : np.ndarray
    counts : np.ndarray[np.int64]
    r¢   )rX   rØ   Úvalue_countr"   rS   r   rj   )r`   r  r£   rh   r(  r)  Ú
na_counterÚres_keyss           rc   r  r  c  sx   € ð €HÜ˜&Ó!€Fä%×1Ñ1°&¸&ÀtÔLÑ€Dˆ&�*ä˜8Ÿ>™>Ô*ñ Øœ4‘<ˆDØ ™: v¨d¡|�&ˆDä   x§~¡~°xÓ@€HØ�V˜ZÐ'Ð'rd   c                óH   — t        | «      } t        j                  | ||¬«      S )ax  
    Return boolean ndarray denoting duplicate values.

    Parameters
    ----------
    values : np.ndarray or ExtensionArray
        Array over which to check for duplicate values.
    keep : {'first', 'last', False}, default 'first'
        - ``first`` : Mark duplicates as ``True`` except for the first
          occurrence.
        - ``last`` : Mark duplicates as ``True`` except for the last
          occurrence.
        - False : Mark all duplicates as ``True``.
    mask : ndarray[bool], optional
        array indicating which elements to exclude from checking

    Returns
    -------
    duplicated : ndarray[bool]
    )Úkeepr£   )rX   rØ   Ú
duplicated)r`   r2  r£   s      rc   r3  r3  ‚  s#   € ô2 ˜&Ó!€FÜ×Ñ˜V¨$°TÔ:Ð:rd   c                ó  — t        | d¬«      } | }t        | j                  «      r)t        | «      } t	        d| «      } | j                  |¬«      S t        | «      } t        j                  | ||¬«      \  }}|€0t        j                  |j                  t        j                  ¬«      }n||fS 	 t        |«      }t%        ||j                  |«      }||fS # t        $ r,}t        j                   d|› �t#        «       ¬	«       Y d}~ŒKd}~ww xY w)
a@  
    Returns the mode(s) of an array.

    Parameters
    ----------
    values : array-like
        Array over which to check for duplicate values.
    dropna : bool, default True
        Don't consider counts of NaN/NaT.

    Returns
    -------
    Union[Tuple[np.ndarray, npt.NDArray[np.bool_]], ExtensionArray]
    Úmoder¡   rD   r  )r  r£   NrR   zUnable to sort modes: )Ú
stacklevel)r{   r"   rS   r1   r   Ú_moderX   rØ   r5  rU   rÓ   rÔ   Úbool_r  rs   ÚwarningsÚwarnr   rj   )r`   r  r£   rh   ÚnpresultÚres_maskr%  rž   s           rc   r5  r5  Ÿ  sô   € ô" ˜v°Ô8€FØ€Hä˜6Ÿ<™<Ô(ä/°Ó7ˆÜÐ&¨Ó/ˆØ�|‰| 6ˆ|Ó*Ð*ä˜&Ó!€FäŸ™ V°FÀÔFÑ€HˆhØÐÜ—8‘8˜HŸN™N´"·(±(Ô;‰à˜Ð!Ð!ð
Ü˜XÓ&ˆô ˜x¨¯©¸ÓB€FØ�8ÐÐøô ò 
Ü�‰Ø$ S EÐ*Ü'Ó)÷	
ò 	
ûð
ús   Â+C Ã	DÃ"DÄDc           	     ó  — t        | j                  «      }t        | «      } | j                  dk(  rt	        j
                  | ||||||¬«      }|S | j                  dk(  r"|�J ‚t	        j                  | ||||||¬«      }|S t        d«      ‚)ab  
    Rank the values along a given axis.

    Parameters
    ----------
    values : np.ndarray or ExtensionArray
        Array whose values will be ranked. The number of dimensions in this
        array must not exceed 2.
    axis : int, default 0
        Axis over which to perform rankings.
    method : {'average', 'min', 'max', 'first', 'dense'}, default 'average'
        The method by which tiebreaks are broken during the ranking.
    na_option : {'keep', 'top'}, default 'keep'
        The method by which NaNs are placed in the ranking.
        - ``keep``: rank each NaN value with a NaN ranking
        - ``top``: replace each NaN with either +/- inf so that they
                   there are ranked at the top
    ascending : bool, default True
        Whether or not the elements should be ranked in ascending order.
    pct : bool, default False
        Whether or not to the display the returned rankings in integer form
        (e.g. 1, 2, 3) or in percentile form (e.g. 0.333..., 0.666..., 1).
    mask : bool ndarray, optional
        Boolean array indicating which elements to exclude from ranking.
    r´   )Úis_datetimelikeÚties_methodrö   Ú	na_optionÚpctr£   rM   )Úaxisr>  r?  rö   r@  rA  z%Array with ndim > 2 is not supported.)r"   rS   rX   rÎ   r	   Úrank_1dÚrank_2drs   )	r`   rB  Úmethodr@  rö   rA  r£   r>  Úrankss	            rc   ÚrankrG  Í  s£   € ôD *¨&¯,©,Ó7€OÜ˜&Ó!€Fà‡{�{�aÒÜ—‘ØØ+ØØØØØô
ˆð. €Lð 
�‰˜Ò	Øˆ|Ðˆ|Ü—‘ØØØ+ØØØØô
ˆð €Lô Ð?Ó@Ð@rd   c                ó¸   — t        | j                  «      }t        | «      } t        j                  | |¬«      \  }}}t        |«      t        |«      t        |«      fS )aŠ  
    Determine whether values are monotonic increasing/decreasing.

    Parameters
    ----------
    values : np.ndarray or ExtensionArray

    Returns
    -------
    tuple[bool, bool, bool]
        (is_monotonic_increasing, is_monotonic_decreasing, is_strict_monotonic)

    Raises
    ------
    TypeError
        If the dtype is not orderable by the underlying routine (e.g. complex).
    )Útimelike)r"   rS   rX   r	   Úis_monotonicr¤   )r`   rI  ÚincÚdecÚstricts        rc   rJ  rJ    sN   € ô$ # 6§<¡<Ó0€HÜ˜&Ó!€FÜ×)Ñ)¨&¸8ÔDÑ€CˆˆfÜ�‹9”d˜3“i¤ f£Ð-Ð-rd   c                ó¾  — t        j                  | d¬«      }| |   }t        | «      }t        j                  |t        ¬«      }d|dd |dd |dd k7  |dd t         j
                  j                  t        j                  |t        j                  |«      d«      «      }t        j                  |t         j                  ¬«      }t        j                  |«      |z
  ||<   |S )	a!  
    For each element, the number of earlier elements with the same code.

    Parameters
    ----------
    codes : np.ndarray[intp]

    Returns
    -------
    np.ndarray[intp]

    Examples
    --------
    >>> occurrence_rank(np.array([0, 1, 0, 0, 1]))
    array([0, 0, 1, 2, 1])
    r  )rª   rR   TNr´   ræ   r   )
rU   Úargsortrš   rñ   r¤   ÚmaximumÚ
accumulater  rõ   r™   )rZ   ÚorderÚsorted_codesrø   Úis_startÚgroup_startrG  s          rc   Úoccurrence_rankrV  *  s·   € ô" �J‰J�u 8Ô,€EØ˜‘<€LÜˆE‹
€AÜ�x‰x˜¤Ô&€HØ€HˆRˆa€LØ  Ð# |°C°RÐ'8Ñ8€HˆQˆR€LÜ—*‘*×'Ñ'¬¯©°¼2¿9¹9ÀQ»<ÈÓ(KÓL€KÜ�8‰8�AœRŸW™WÔ%€DÜ—)‘)˜A“, Ñ,€Dˆ�KØ€Krd   zpandas.api.extensionsc                ó>  — t        | t        j                  t        t        t
        t        f«      s"t        dt        | «      j                  › d�«      ‚t        |«      }|r+t        || j                  |   «       t        | ||d|¬«      }|S | j                  ||¬«      }|S )a§  
    Take elements from an array.

    Parameters
    ----------
    arr : numpy.ndarray, ExtensionArray, Index, or Series
        Input array.
    indices : sequence of int or one-dimensional np.ndarray of int
        Indices to be taken.
    axis : int, default 0
        The axis over which to select values.
    allow_fill : bool, default False
        How to handle negative values in `indices`.

        * False: negative values in `indices` indicate positional indices
          from the right (the default). This is similar to :func:`numpy.take`.

        * True: negative values in `indices` indicate
          missing values. These values are set to `fill_value`. Any other
          negative values raise a ``ValueError``.

    fill_value : any, optional
        Fill value to use for NA-indices when `allow_fill` is True.
        This may be ``None``, in which case the default NA value for
        the type (``self.dtype.na_value``) is used.

        For multi-dimensional `arr`, each *element* is filled with
        `fill_value`.

    Returns
    -------
    ndarray or ExtensionArray
        Same type as the input.

    Raises
    ------
    IndexError
        When `indices` is out of bounds for the array.
    ValueError
        When the indexer contains negative values other than ``-1``
        and `allow_fill` is True.

    Notes
    -----
    When `allow_fill` is False, `indices` may be whatever dimensionality
    is accepted by NumPy for `arr`.

    When `allow_fill` is True, `indices` should be 1-D.

    See Also
    --------
    numpy.take : Take elements from an array along an axis.

    Examples
    --------
    >>> import pandas as pd

    With the default ``allow_fill=False``, negative numbers indicate
    positional indices from the right.

    >>> pd.api.extensions.take(np.array([10, 20, 30]), [0, 0, -1])
    array([10, 10, 30])

    Setting ``allow_fill=True`` will place `fill_value` in those positions.

    >>> pd.api.extensions.take(np.array([10, 20, 30]), [0, 0, -1], allow_fill=True)
    array([10., 10., nan])

    >>> pd.api.extensions.take(
    ...     np.array([10, 20, 30]), [0, 0, -1], allow_fill=True, fill_value=-10
    ... )
    array([ 10,  10, -10])
    zkpd.api.extensions.take requires a numpy.ndarray, ExtensionArray, Index, Series, or NumpyExtensionArray got rm   T)rB  Ú
allow_fillÚ
fill_value)rB  )rT   rU   r[   r(   r)   r,   r+   rs   rt   ru   r   r3   rÔ   r/   Útake)r°   ÚindicesrB  rX  rY  rž   s         rc   rZ  rZ  G  s¬   € ôb ØÜ	�‰Ô&¬´)Ô=SÐTôô
 ð9Ü9=¸c»×9KÑ9KÐ8LÈAðOó
ð 	
ô
 " 'Ó*€Gáä˜ #§)¡)¨D¡/Ô2ô ØØØØØ!ô
ˆð €Mð —‘˜'¨�Ó-ˆØ€Mrd   c                óÐ  — |�t        |«      }t        | t        j                  «      �r | j                  j
                  dv �rt        |«      st        |«      rñt        j                  | j                  j                  «      }t        |«      rt        j                  |g«      nt        j                  |«      }||j                  k\  j                  «       r*||j                  k  j                  «       r| j                  }n|j                  }t        |«      rt        d|j                  |«      «      }n#t        t        d|«      |¬«      }nt!        | «      } | j#                  |||¬«      S )aû  
    Find indices where elements should be inserted to maintain order.

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

    Assuming that `arr` is sorted:

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

    Parameters
    ----------
    arr: np.ndarray, ExtensionArray, Series
        Input array. If `sorter` is None, then it must be sorted in
        ascending order, otherwise `sorter` must be an array of indices
        that sort it.
    value : array-like or scalar
        Values to insert into `arr`.
    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.
    r¨   r¬   r5   rR   )ÚsideÚsorter)r   rT   rU   r[   rS   rª   r   r   rÕ   rt   r0   r­   r  r¯   r   rÒ   r1   Úsearchsorted)r°   Úvaluer]  r^  rÕ   Ú	value_arrrS   s          rc   r_  r_  ½  s  € ð` ÐÜ$ VÓ,ˆô 	�3œŸ
™
Õ#Ø�I‰I�N‰N˜dÒ"Ü˜ÔÔ"2°5Ô"9ô —‘˜Ÿ™Ÿ™Ó(ˆÜ)3°EÔ):”B—H‘H˜e˜WÔ%ÄÇÁÈÃˆ	Ø˜Ÿ™Ñ"×'Ñ'Ô)¨y¸E¿I¹IÑ/E×.JÑ.JÔ.Lð —I‘I‰Eà—O‘OˆEä�eÔä˜ §
¡
¨5Ó 1Ó2‰EäœT +¨uÓ5¸UÔC‰Eô -¨SÓ1ˆð ×Ñ˜E¨°VÐÓ<Ð<rd   >   r†   r…   r„   rƒ   r   r~   c                óø  — t        j                  |«      s1t        |«      r|j                  «       st        d«      ‚t	        |«      }t
        j                  }| j                  }t        |«      }|rt        j                  }nt        j                  }t        |t        «      r| j                  «       } | j                  }t        | t
        j                  «      s†t!        | d|j"                  › d�«      rK|| j$                  k\  r$t        dt'        | «      j"                  › d|› �«      ‚ || | j)                  |«      «      S t+        t'        | «      j"                  › d�«      ‚d}| j                  j,                  dv r*t
        j.                  }| j1                  d«      } t2        }d	}nZ|rt
        j4                  }nG|j,                  d
v r9| j                  j6                  dv rt
        j8                  }nt
        j:                  }| j$                  }|dk(  r| j=                  dd«      } t        j                  |«      }t        j>                  | j@                  |¬«      }	tC        d«      gdz  }
|dk\  rtC        d|«      ntC        |d«      |
|<   ||	tE        |
«      <   | j                  j6                  tF        v r$tI        jJ                  | |	t	        |«      ||¬«       nˆtC        d«      gdz  }|dk\  rtC        |d«      ntC        d|«      ||<   tE        |«      }tC        d«      gdz  }|dkD  rtC        d| «      ntC        | d«      ||<   tE        |«      } || |   | |   «      |	|<   |r|	j1                  d«      }	|dk(  r	|	dd…df   }	|	S )zþ
    difference of n between self,
    analogous to s-s.shift(n)

    Parameters
    ----------
    arr : ndarray or ExtensionArray
    n : int
        number of periods
    axis : {0, 1}
        axis to shift on

    Returns
    -------
    shifted
    zperiods must be an integerÚ__zcannot diff z	 on axis=zK has no 'diff' method. Convert to a suitable dtype prior to calling 'diff'.Frå   rP   Tr¨   )r†   r…   r´   ræ   rR   NrM   r   )Údatetimelikeztimedelta64[ns])&r   r   r   Ú
ValueErrorr¬   rU   ÚnanrS   r   ÚoperatorÚxorÚsubrT   r'   Úto_numpyr[   Úhasattrru   rÎ   rt   Úshiftrs   rª   rƒ   r\   r   Úobject_r�   r   r~   Úreshaperñ   rÔ   Úslicerw   Ú_diff_specialr	   Údiff_2d)r°   rø   rB  ÚnarS   Úis_boolÚopÚis_timedeltaÚ	orig_ndimÚout_arrÚ
na_indexerÚ_res_indexerÚres_indexerÚ_lag_indexerÚlag_indexers                  rc   ró   ró     sï  € ô( �>‰>˜!ÔÜ˜” §¡¤ÜÐ9Ó:Ð:Ü�‹FˆÜ	�‰€BØ�I‰I€Eä˜EÓ"€GÙÜ�\‰\‰ä�\‰\ˆä�%œÔ&à�l‰l‹nˆØ—	‘	ˆä�cœ2Ÿ:™:Ô&ä�3˜"˜RŸ[™[˜M¨Ð,Ô-Ø�s—x‘xÒÜ  <´°S³	×0BÑ0BÐ/CÀ9ÈTÈFÐ!SÓTÐTÙ�c˜3Ÿ9™9 Q›<Ó(Ð(äÜ˜“9×%Ñ%Ð&ð 'Gð Góð ð
 €LØ
‡y�y‡~�~˜ÑÜ—‘ˆØ�h‰h�t‹nˆÜˆØ‰á	ä—
‘
‰à	�‰�tÑ	ð
 �9‰9�>‰>Ð.Ñ.Ü—J‘J‰Eä—J‘JˆEà—‘€IØ�A‚~à�k‰k˜"˜aÓ ˆô �H‰H�U‹O€EÜ�h‰h�s—y‘y¨Ô.€Gä˜“+� Ñ"€JØ)*¨aª”u˜T 1”~´U¸1¸d³^€JˆtÑØ!#€GŒE�*ÓÑà
‡y�y‡~�~œÑ&ô 	�‰�c˜7¤C¨£F¨D¸|ÖLô ˜d›�} qÑ(ˆØ/0°AªvœU 1 dœ^¼5ÀÀq»>ˆ�TÑÜ˜LÓ)ˆä˜d›�} qÑ(ˆØ01°A²œU 4¨!¨œ_¼5À!ÀÀT»?ˆ�TÑÜ˜LÓ)ˆá! # kÑ"2°C¸Ñ4DÓEˆ�ÑáØ—,‘,Ð0Ó1ˆà�A‚~Øš!˜Q˜$‘-ˆØ€Nrd   iˆ  c                ó  — t        | t        j                  t        t        f«      st        d«      ‚d}d}dx}}|��t        | t        j                  «      rs| j                  j                  dv r[t        | «      t        k\  rIt        | j                  «       «      }t        | j                  «       «      |z
  dz   }|dt        | «      z  k  }|r t        j                  t        d| «      «      }	n¬t        | j                  t        «      s&t!        j"                  | d¬	«      d
k(  rt%        | «      }	nl	 |€Ht        | t        j                  «      r.| j                  j                  dv rt        j                  | «      }	n!| j'                  «       }| j)                  |«      }	|€|	S t5        |«      st        d«      ‚t7        t        j8                  |«      «      }|r¸t        d| «      }
|
j                  j                  dk(  r%|
j;                  t        j<                  d¬«      |z
  }n|
|z
  }t        j>                  |t@        ¬«      }d||<   |jC                  t        jD                  ¬«      }|s|d   t        | «      k7  rtG        d«      ‚||   }|dz  }nÙ|s+t        tI        | «      «      t        | «      k(  stG        d«      ‚|�`t        jJ                  t        |«      t        jD                  ¬«      }t        jL                  t        |«      t        jD                  ¬«      ||<   nJtO        | «      \  }}  |t        | «      «      }|jQ                  |	«       t7        |jS                  | «      «      }|r4|r#|t        | «       k  |t        | «      k\  z  }d||<   tU        ||d¬«      }n|j)                  |d¬«      }|	t7        |«      fS # t
        t*        j,                  f$ r: | j.                  rt        | d   t0        «      rt3        | «      }	nt%        | «      }	Y �Œsw xY w)a  
    Sort ``values`` and reorder corresponding ``codes``.

    ``values`` should be unique if ``codes`` is not None.
    Safe for use with mixed types (int, str), orders ints before strs.

    Parameters
    ----------
    values : list-like
        Sequence; must be unique if ``codes`` is not None.
    codes : np.ndarray[intp] or None, default None
        Indices to ``values``. All out of bound indices are treated as
        "not found" and will be masked with ``-1``.
    use_na_sentinel : bool, default True
        If True, the sentinel -1 will be used for NaN values. If False,
        NaN values will be encoded as non-negative integers and will not drop the
        NaN from the uniques of the values.
    assume_unique : bool, default False
        When True, ``values`` are assumed to be unique, which can speed up
        the calculation. Ignored when ``codes`` is None.
    verify : bool, default True
        Check if codes are out of bound for the values and put out of bound
        codes equal to ``-1``. If ``verify=False``, it is assumed there
        are no out of bound codes. Ignored when ``codes`` is None.

    Returns
    -------
    ordered : AnyArrayLike
        Sorted ``values``
    new_codes : ndarray
        Reordered ``codes``; returned when ``codes`` is not None.

    Raises
    ------
    TypeError
        * If ``values`` is not list-like or if ``codes`` is neither None
        nor list-like
        * If ``values`` cannot be sorted
    ValueError
        * If ``codes`` is not None and ``values`` contain duplicates.
    zbOnly np.ndarray, ExtensionArray, and Index objects are allowed to be passed to safe_sort as valuesNFr   r¨   r´   é   rQ   rn   rr   ÚiufbzMOnly list-like objects or None are allowed to be passed to safe_sort as codesÚirK   rR   Træ   z,values should be unique if codes is not None©rY  Úwrap)r5  )+rT   rU   r[   r(   r)   rs   rS   rª   rš   Ú_MIN_COUNTING_SORT_LENr¬   r­   r¯   r÷   r   r&   r   rv   Ú_sort_mixedrO  rZ  ÚdecimalÚInvalidOperationr«   rw   Ú_sort_tuplesr   r   rV   r]   rƒ   rÓ   r¤   Úcumsumr™   re  r“   rñ   rõ   r‹   Úmap_locationsÚlookupr/   )r`   rZ   rë   r   r  r^  Úuse_countingÚvminÚrng_sizeÚorderedr°   ÚshiftedÚpresentr)  rF  rí   Útr£   Ú	new_codess                      rc   r  r  ‘  su  € ô` �fœrŸz™zÔ+<¼hÐGÔHÜð/ó
ð 	
ð
 €Fð €LØÐ€Dˆ8àÐÜ�vœrŸz™zÔ*Ø�L‰L×Ñ Ñ%Ü�‹KÔ1Ò1ä�6—:‘:“<Ó ˆÜ�v—z‘z“|Ó$ tÑ+¨aÑ/ˆØ 1¤s¨6£{¡?Ñ2ˆáÜ—'‘'œ$˜|¨VÓ4Ó5‰ä�v—|‘|¤^Ô4Ü�O‰O˜F¨5Ô1°_ÒDä˜fÓ%‰ð	.à�Ü˜v¤r§z¡zÔ2Ø—L‘L×%Ñ%¨Ñ/ô Ÿ'™' &›/‘àŸ™Ó)�Ø Ÿ+™+ fÓ-�ð €}Øˆä˜ÔÜð.ó
ð 	
ô  ¤§
¡
¨5Ó 1Ó2€Eñ Ü�< Ó(ˆØ�9‰9�>‰>˜SÒ ð —j‘j¤§¡°�jÓ6¸Ñ=‰Gð ˜D‘jˆGÜ—(‘(˜8¬4Ô0ˆØˆ�ÑØ—‘¤b§g¡g�Ó.ˆá ¨¡¬s°6«{Ò!:ÜÐKÓLÐLØ�w‘ˆØ�‰
‰á¤S¬°«Ó%8¼CÀ»KÒ%GÜÐKÓLÐLàÐô —H‘HœS ›[´·±Ô8ˆEÜŸI™I¤c¨&£k¼¿¹ÔAˆE�&ŠMô "5°VÓ!<ÑˆJ˜Ùœ3˜v›;Ó'ˆAð �O‰O˜GÔ$Ü'¨¯©°Ó(8Ó9ˆEááØœS ›[˜LÑ(¨U´c¸&³kÑ-AÑBˆDØˆE�$‰KÜ˜E 5°RÔ8‰	ð —J‘J˜u¨6�JÓ2ˆ	àÔ'¨	Ó2Ð2Ð2øôY œ7×3Ñ3Ð4ò 
	.ð �{Š{œz¨&°©)´UÔ;ô ' vÓ.‘ä% fÓ-�úð
	.ús   Ä+A+N7 Î7AP
Ð	P
c           	     óV  — t        j                  | D �cg c]  }t        |t        «      ‘Œ c}t        ¬«      }t        j                  | D �cg c]  }t        |«      ‘Œ c}t        ¬«      }| | z  }t        j                  | |   «      }t        j                  | |   «      }|j                  «       d   j                  |«      }|j                  «       d   j                  |«      }|j                  «       d   }	t        j                  |||	g«      }
| j                  |
«      S c c}w c c}w )z3order ints before strings before nulls in 1d arraysrR   r   )
rU   r0   rT   Ústrr¤   r-   rO  ÚnonzerorZ  Úconcatenate)r`   ÚxÚstr_posÚnull_posÚnum_posÚstr_argsortÚnum_argsortÚstr_locsÚnum_locsÚ	null_locsÚlocss              rc   r„  r„  <  sì   € ä�h‰h°FÖ;¨qœ
 1¤cÕ*Ò;Ä4ÔH€GÜ�x‰x¨&Ö1 Qœ˜a�Ò1¼Ô>€HØˆh˜(˜Ñ"€GÜ—*‘*˜V G™_Ó-€KÜ—*‘*˜V G™_Ó-€Kà�‰Ó  Ñ#×(Ñ(¨Ó5€HØ�‰Ó  Ñ#×(Ñ(¨Ó5€HØ× Ñ Ó" 1Ñ%€IÜ�>‰>˜8 X¨yÐ9Ó:€DØ�;‰;�tÓÐùò <ùÚ1s   ”D!ÁD&c                óP   — ddl m} ddlm}  || d«      \  }} ||d¬«      }| |   S )a  
    Convert array of tuples (1d) to array of arrays (2d).
    We need to keep the columns separately as they contain different types and
    nans (can't use `np.sort` as it may fail when str and nan are mixed in a
    column as types cannot be compared).
    r   )Ú	to_arrays)Úlexsort_indexerNT)Úorders)Ú"pandas.core.internals.constructionr¢  Úpandas.core.sortingr£  )r`   r¢  r£  Úarraysr*  Úindexers         rc   r‡  r‡  K  s0   € õ =Ý3á˜& $Ó'�I€FˆAÙ˜f¨TÔ2€GØ�'‰?Ðrd   c                ó†  — ddl m} t        | d¬«      }t        |d¬«      }|j                  |d¬«      \  }}t	        j
                  |j                  |j                  «      } |||j                  dd¬«      }t        | t        «      r0t        |t        «      r | j                  |«      j                  «       }n[t        | t        «      r| j                  } t        |t        «      r|j                  }t        | |g«      }t        |«      }t        |«      }|j!                  |«      j                  }t	        j"                  ||«      S )aù  
    Extracts the union from lvals and rvals with respect to duplicates and nans in
    both arrays.

    Parameters
    ----------
    lvals: np.ndarray or ExtensionArray
        left values which is ordered in front.
    rvals: np.ndarray or ExtensionArray
        right values ordered after lvals.

    Returns
    -------
    np.ndarray or ExtensionArray
        Containing the unsorted union of both arrays.

    Notes
    -----
    Caller is responsible for ensuring lvals.dtype == rvals.dtype.
    r   ©rB   Fr  r�  r¬   )r  rS   rL   )r•   rB   r,  ÚalignrU   rP  r`   r  rT   r*   rð   r“   r)   rÍ   r#   r1   Úreindexrô   )	ÚlvalsÚrvalsrB   Úl_countÚr_countÚfinal_countÚunique_valsÚcombinedÚrepeatss	            rc   Úunion_with_duplicatesrµ  Z  sý   € õ. ä# E°%Ô8€GÜ# E°%Ô8€GØ—}‘} W¸�}Ó;Ñ€GˆWÜ—*‘*˜WŸ^™^¨W¯^©^Ó<€KÙ˜¨G¯M©MÀÈUÔS€KÜ�%œÔ'¬J°u¼mÔ,LØ—l‘l 5Ó)×0Ñ0Ó2‰ä�eœXÔ&Ø—M‘MˆEÜ�eœXÔ&Ø—M‘MˆEô ! %¨ Ó0ˆÜ˜XÓ&ˆÜ4°[ÓAˆØ×!Ñ! +Ó.×5Ñ5€GÜ�9‰9�[ 'Ó*Ð*rd   c                óZ  ‡	— ddl m} |dvrd|› d�}t        |«      ‚t        |«      r˜t	        |t
        «      rt        |d«      r|Š	ˆ	fd„}ntddl m} t        |«      dk(  r ||t        j                  ¬	«      }nGt	        |t
        «      r/ ||j                  «        ||j                  «       d
¬«      ¬«      }n ||«      }t	        |t        «      rU|dk(  r||j                  j                  «          }|j                  j!                  | «      }t#        |j$                  |«      }|S t        | «      s| j'                  «       S | j)                  t*        d
¬«      }|€t-        j.                  ||«      S t-        j0                  ||t3        |«      j5                  t        j6                  «      ¬«      S )a!  
    Map values using an input mapping or function.

    Parameters
    ----------
    mapper : function, dict, or Series
        Mapping correspondence.
    na_action : {None, 'ignore'}, default None
        If 'ignore', propagate NA values, without passing them to the
        mapping correspondence.

    Returns
    -------
    Union[ndarray, Index, ExtensionArray]
        The output of the mapping function applied to the array.
        If the function returns a tuple with more than one element
        a MultiIndex will be returned.
    r   )rA   )NÚignorez+na_action must either be 'ignore' or None, z was passedÚ__missing__c                ó|   •— ‰t        | t        «      r't        j                  | «      rt        j                     S |    S r�   )rT   ÚfloatrU   rÄ   rf  )r—  Údict_with_defaults    €rc   rÊ   zmap_array.<locals>.<lambda>®  s1   ø€ Ð0Ü$ Q¬Ô.´2·8±8¸A´;”—‘ñ € ØDEñ € rd   rª  rR   F)Útupleize_cols)r  r·  rK   r¢   )r•   rA   re  r   rT   Údictrk  rB   rš   rU   r~   r`   r(  r,   r  r  Úget_indexerr/   rÍ   rL   r]   r_   r   Ú	map_inferÚmap_infer_maskr-   r\   rJ   )
r°   ÚmapperÚ	na_actionrA   ÚmsgrB   r¨  Ú
new_valuesr`   r»  s
            @rc   Ú	map_arrayrÅ  ‰  sh  ø€ õ. àÐ(Ñ(Ø;¸I¸;ÀkÐRˆÜ˜‹oÐô
 �FÔÜ�fœdÔ#¬°¸Ô(Fð !'Ðó‰Fõ &ä�6‹{˜aÒÙ ¬b¯j©jÔ9‘Ü˜F¤DÔ)ÙØ—M‘M“O©5°·±³ÈeÔ+Tô‘ñ   ›�ä�&œ)Ô$Ø˜Ò Ø˜FŸL™L×.Ñ.Ó0Ñ1ˆFð —,‘,×*Ñ*¨3Ó/ˆÜ˜VŸ^™^¨WÓ5ˆ
àÐäˆsŒ8Ø�x‰x‹zÐð �Z‰Zœ UˆZÓ+€FØÐÜ�}‰}˜V VÓ,Ð,ä×!Ñ! &¨&´t¸F³|×7HÑ7HÌÏÉÓ7RÔSÐSrd   )r`   r5   ÚreturnrQ   )r`   r6   rS   r8   rh   r4   rÆ  r6   )ry   r”  rÆ  r5   )r`   rQ   rÆ  z)tuple[type[htable.HashTable], np.ndarray])r`   rQ   rÆ  r”  )r`   rE   rÆ  rE   )r`   znp.ndarray | SeriesrÆ  rQ   )r`   r5   rÆ  r¬   r�   )r£   únpt.NDArray[np.bool_] | None)r°   rQ   rÆ  r¤   )rÚ   r9   r`   r9   rÆ  únpt.NDArray[np.bool_])TNNN)r`   rQ   rë   r¤   rì   ú
int | Nonerè   r_   r£   rÇ  rÆ  z'tuple[npt.NDArray[np.intp], np.ndarray])r°   rQ   rö   r¤   r÷   r¤   rÆ  z1tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]])FTN)r÷   r¤   rë   r¤   rì   rÉ  rÆ  z%tuple[np.ndarray, np.ndarray | Index])TFFNT)
r÷   r¤   rö   r¤   r!  r¤   r  r¤   rÆ  rB   )r`   rQ   r  r¤   r£   rÇ  rÆ  z,tuple[ArrayLike, npt.NDArray[np.int64], int])ÚfirstN)r`   r5   r2  zLiteral['first', 'last', False]r£   rÇ  rÆ  rÈ  )TN)r`   r5   r  r¤   r£   rÇ  rÆ  z9tuple[np.ndarray, npt.NDArray[np.bool_]] | ExtensionArray)r   Úaverager2  TFN)r`   r5   rB  r7   rE  r<   r@  r=   rö   r¤   rA  r¤   r£   rÇ  rÆ  znpt.NDArray[np.float64])r`   r5   rÆ  ztuple[bool, bool, bool])rZ   únpt.NDArray[np.intp]rÆ  rÌ  )r   FN)r[  r>   rB  r7   rX  r¤   )ÚleftN)
r°   r5   r`  z$NumpyValueArrayLike | ExtensionArrayr]  zLiteral['left', 'right']r^  zNumpySorter | NonerÆ  znpt.NDArray[np.intp] | np.intp)r   )rø   z&int | float | np.integer | np.floatingrB  r7   )NTFT)r`   zIndex | ArrayLikerZ   znpt.NDArray[np.intp] | Nonerë   r¤   r   r¤   r  r¤   rÆ  z.AnyArrayLike | tuple[AnyArrayLike, np.ndarray])rÆ  r4   )r`   rQ   rÆ  rQ   )r­  úArrayLike | Indexr®  rÎ  rÆ  rÎ  )r°   r5   rÂ  zLiteral['ignore'] | NonerÆ  z#np.ndarray | ExtensionArray | Index)ŒÚ__doc__Ú
__future__r   r…  rg  Útypingr   r   r   r   r   r9  ÚnumpyrU   Úpandas._libsr	   r
   rØ   r   r   Úpandas._libs.missingr   Úpandas.util._decoratorsr   Úpandas.util._exceptionsr   Úpandas.core.dtypes.castr   r   Úpandas.core.dtypes.commonr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Úpandas.core.dtypes.concatr#   Úpandas.core.dtypes.dtypesr$   r%   r&   r'   Úpandas.core.dtypes.genericr(   r)   r*   r+   r,   Úpandas.core.dtypes.missingr-   r.   Úpandas.core.array_algos.taker/   Úpandas.core.constructionr0   rÒ   r1   r2   Úpandas.core.indexersr3   Úpandas._typingr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r•   r@   rA   rB   Úpandas.core.arraysrC   rD   rE   rX   rj   r{   ÚComplex128HashTableÚComplex64HashTableÚFloat64HashTableÚFloat32HashTableÚUInt64HashTableÚUInt32HashTableÚUInt16HashTableÚUInt8HashTableÚInt64HashTableÚInt32HashTableÚInt16HashTableÚInt8HashTableÚStringHashTableÚPyObjectHashTabler‰   r‹   rˆ   r“   rŸ   r—   Úunique1drÖ   r®   r±   r¾   rî   rý   rê   r,  r  r3  r5  rG  rJ  rV  rZ  r_  rp  ró   rƒ  r  r„  r‡  rµ  rÅ  r‘   rd   rc   ú<module>rñ     s\  ðñõ
 #ã Û ÷õ ó ã ÷ó õ $Ý .Ý 4÷÷÷ ÷ ÷ ó õ$ 4÷ó ÷õ ÷õ
 1÷ñ õ
 2á÷÷ ÷ ó ÷ñ ÷
ñ
 	�˜5 ;Ñ.°Ñ?Ô@€AóN!ðb!,Øð!,Ø'ð!,Ø3?ð!,àó!,óHð: ×,Ñ,Ø×*Ñ*Ø×&Ñ&Ø×&Ñ&Ø×$Ñ$Ø×$Ñ$Ø×$Ñ$Ø×"Ñ"Ø×"Ñ"Ø×"Ñ"Ø×"Ñ"Ø× Ñ Ø×$Ñ$Ø×&Ñ&ñ€ð$Øðà.óó(ð6 
Ú ó 
Ø Ø	Ú :ó 
Ø :ñ ˆHÓñv$ó ðv$órô.,ð8 €ð "Ð ð Ð óóF"ðV !Ø ØØ)-ð;Øð;àð;ð ð;ð ð	;ð
 'ð;ð -ó;ð|-Ø	ð-àð-ð ð-ð 7ó	-ñ` ˆHÓð Ø Ø ð	{à
ð{ð ð{ð ð	{ð
 +ò{ó ð{ð@ ØØØ	Øð[à
ð[ð ð[ð ð	[ð ð[ð ó[ð@ LPð(Øð(Ø $ð(Ø,Hð(à1ó(ðB -4Ø)-ð;Øð;à
)ð;ð 'ð;ð ó	;ð< RVð+Øð+Ø#ð+Ø2Nð+à>ó+ð` Ø"Ø$ØØØ)-ð=Øð=à
ð=ð ð=ð ð	=ð
 ð=ð 
ð=ð 'ð=ð ó=ó@.ó:ñ: Ð#Ó$ð ØØðmàðmð ðmð ò	mó %ðmðp &,Ø!%ð	Q=Ø	ðQ=à/ðQ=ð #ðQ=ð ð	Q=ð
 $óQ=òp J€ôjðf Ð ð *.Ø ØØðh3Øðh3à&ðh3ð ðh3ð ð	h3ð
 ðh3ð 4óh3óVóð,+Øð,+Ø%6ð,+àó,+ðd +/ðPTØ	ðPTð (ðPTð )ô	PTrd   