Ë
    ómxi¨¡  ã                  ó  — U d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
mZ ddlZddlZddlmZ ddlmZ ddlmZmZmZ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& ddl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZAmBZB erddlCmDZDmEZE ddlmFZFmGZGmHZHmIZI ddlJmKZKmLZLmMZM i ZNdeOd<   dddddœZP G d„ d e;«      ZQ G d!„ d"«      ZR G d#„ d$ee   «      ZS G d%„ de=«      ZTy)&z.
Base and utility classes for pandas objects.
é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚGenericÚLiteralÚcastÚfinalÚoverload)Úusing_copy_on_write)Úlib)ÚAxisIntÚDtypeObjÚ
IndexLabelÚNDFrameTÚSelfÚShapeÚnpt)ÚPYPY)Úfunction©ÚAbstractMethodError)Úcache_readonlyÚdoc)Úfind_stack_level)Úcan_hold_element)Úis_object_dtypeÚ	is_scalar)ÚExtensionDtype)ÚABCDataFrameÚABCIndexÚABCMultiIndexÚ	ABCSeries)ÚisnaÚremove_na_arraylike)Ú
algorithmsÚnanopsÚops)ÚDirNamesMixin)ÚOpsMixin)ÚExtensionArray)Úensure_wrapped_if_datetimelikeÚextract_array)ÚHashableÚIterator)ÚDropKeepÚNumpySorterÚNumpyValueArrayLikeÚScalarLike_co)Ú	DataFrameÚIndexÚSerieszdict[str, str]Ú_shared_docsÚIndexOpsMixinÚ )ÚklassÚinplaceÚuniqueÚ
duplicatedc                  óR   ‡ — e Zd ZU dZded<   ed„ «       Zdd„Zd	d
d„Zdˆ fd„Z	ˆ xZ
S )ÚPandasObjectz/
    Baseclass for various pandas objects.
    zdict[str, Any]Ú_cachec                ó   — t        | «      S )zK
        Class constructor (for this class it's just `__class__`).
        )Útype©Úselfs    úG/home/htdocs/ttos/venv/lib/python3.12/site-packages/pandas/core/base.pyÚ_constructorzPandasObject._constructorm   s   € ô
 �D‹zÐó    c                ó,   — t         j                  | «      S )zI
        Return a string representation for a particular object.
        )ÚobjectÚ__repr__rB   s    rD   rI   zPandasObject.__repr__t   s   € ô
 �‰˜tÓ$Ð$rF   c                ó�   — t        | d«      sy|€| j                  j                  «        y| j                  j                  |d«       y)zV
        Reset cached properties. If ``key`` is passed, only clears that key.
        r?   N)Úhasattrr?   ÚclearÚpop)rC   Úkeys     rD   Ú_reset_cachezPandasObject._reset_cache{   s8   € ô �t˜XÔ&ØØˆ;Ø�K‰K×ÑÕà�K‰K�O‰O˜C Õ&rF   c                ó¤   •— t        | dd«      }|r3 |d¬«      }t        t        |«      r|«      S |j                  «       «      S t        ‰| �  «       S )zx
        Generates the total memory usage for an object that returns
        either a value or Series of values
        Úmemory_usageNT©Údeep)ÚgetattrÚintr   ÚsumÚsuperÚ
__sizeof__)rC   rQ   ÚmemÚ	__class__s      €rD   rX   zPandasObject.__sizeof__†   sO   ø€ ô
 ˜t ^°TÓ:ˆÙÙ DÔ)ˆCÜœi¨œn�sÓ<Ð<°#·'±'³)Ó<Ð<ô ‰wÑ!Ó#Ð#rF   )ÚreturnÚstr©N)rN   z
str | Noner[   ÚNone©r[   rU   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__ÚpropertyrE   rI   rO   rX   Ú__classcell__)rZ   s   @rD   r>   r>   e   s6   ø… ñð
 Óàñó ðó%ô	'÷$ñ $rF   r>   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚNoNewAttributesMixina„  
    Mixin which prevents adding new attributes.

    Prevents additional attributes via xxx.attribute = "something" after a
    call to `self.__freeze()`. Mainly used to prevent the user from using
    wrong attributes on an accessor (`Series.cat/.str/.dt`).

    If you really want to add a new attribute at a later time, you need to use
    `object.__setattr__(self, key, value)`.
    c                ó2   — t         j                  | dd«       y)z9
        Prevents setting additional attributes.
        Ú__frozenTN)rH   Ú__setattr__rB   s    rD   Ú_freezezNoNewAttributesMixin._freeze    s   € ô 	×Ñ˜4 ¨TÕ2rF   c                ó¼   — t        | dd«      r8|dk(  s3|t        | «      j                  v st        | |d «      €t        d|› d�«      ‚t        j                  | ||«       y )Nrj   Fr?   z"You cannot add any new attribute 'ú')rT   rA   Ú__dict__ÚAttributeErrorrH   rk   )rC   rN   Úvalues      rD   rk   z NoNewAttributesMixin.__setattr__§   s_   € ô �4˜ UÔ+Ø�8ŠOØ”d˜4“j×)Ñ)Ñ)Ü�t˜S $Ó'Ð3ä Ð#EÀcÀUÈ!Ð!LÓMÐMÜ×Ñ˜4  eÕ,rF   N)r[   r^   )rN   r\   r[   r^   )r`   ra   rb   rc   rl   rk   © rF   rD   rh   rh   ”   s   „ ñ	ó3ô-rF   rh   c                  óØ   — e Zd ZU dZded<   dZded<   ded<   d	d
gZ ee«      Ze	e
d„ «       «       Zed„ «       Ze	edd„«       «       Ze	ed„ «       «       Zd„ Zddd„Ze	dd„«       Zd„ ZeZy)ÚSelectionMixinz‰
    mixin implementing the selection & aggregation interface on a group-like
    object sub-classes need to define: obj, exclusions
    r   ÚobjNzIndexLabel | NoneÚ
_selectionzfrozenset[Hashable]Ú
exclusionsr?   Ú__setstate__c                ó¦   — t        | j                  t        t        t        t
        t        j                  f«      s| j                  gS | j                  S r]   )Ú
isinstancerv   ÚlistÚtupler"   r    ÚnpÚndarrayrB   s    rD   Ú_selection_listzSelectionMixin._selection_listÂ   s=   € ô Ø�O‰Oœd¤E¬9´hÄÇ
Á
ÐKô
ð —O‘OÐ$Ð$Ø�‰ÐrF   c                ó˜   — | j                   �t        | j                  t        «      r| j                  S | j                  | j                      S r]   )rv   rz   ru   r"   rB   s    rD   Ú_selected_objzSelectionMixin._selected_objË   s5   € à�?‰?Ð"¤j°·±¼9Ô&EØ—8‘8ˆOà—8‘8˜DŸO™OÑ,Ð,rF   c                ó.   — | j                   j                  S r]   )r�   ÚndimrB   s    rD   rƒ   zSelectionMixin.ndimÒ   s   € ð ×!Ñ!×&Ñ&Ð&rF   c                óH  — t        | j                  t        «      r| j                  S | j                  �%| j                  j	                  | j
                  «      S t        | j                  «      dkD  r(| j                  j                  | j                  dd¬«      S | j                  S )Nr   é   T)ÚaxisÚ
only_slice)	rz   ru   r"   rv   Ú_getitem_nocopyr   Úlenrw   Ú
_drop_axisrB   s    rD   Ú_obj_with_exclusionsz#SelectionMixin._obj_with_exclusions×   s|   € ô �d—h‘h¤	Ô*Ø—8‘8ˆOà�?‰?Ð&Ø—8‘8×+Ñ+¨D×,@Ñ,@ÓAÐAäˆt�‰Ó !Ò#ð
 —8‘8×&Ñ& t§¡¸QÈ4Ð&ÓPÐPà—8‘8ˆOrF   c                óš  — | j                   �t        d| j                   › d�«      ‚t        |t        t        t
        t        t        j                  f«      r°t        | j                  j                  j                  |«      «      t        t        |«      «      k7  rQt        t        |«      j                  | j                  j                  «      «      }t        dt!        |«      dd › �«      ‚| j#                  t        |«      d¬«      S || j                  vrt        d|› �«      ‚| j                  |   j$                  }| j#                  ||¬«      S )	Nz
Column(s) z already selectedzColumns not found: r…   éÿÿÿÿé   )rƒ   zColumn not found: )rv   Ú
IndexErrorrz   r{   r|   r"   r    r}   r~   r‰   ru   ÚcolumnsÚintersectionÚsetÚ
differenceÚKeyErrorr\   Ú_gotitemrƒ   )rC   rN   Úbad_keysrƒ   s       rD   Ú__getitem__zSelectionMixin.__getitem__é   s	  € Ø�?‰?Ð&Ü˜z¨$¯/©/Ð):Ð:KÐLÓMÐMä�cœD¤%¬´H¼b¿j¹jÐIÔJÜ�4—8‘8×#Ñ#×0Ñ0°Ó5Ó6¼#¼cÀ#»h»-ÒGÜ¤ C£× 3Ñ 3°D·H±H×4DÑ4DÓ EÓF�ÜÐ!4´S¸³]À1ÀRÐ5HÐ4IÐJÓKÐKØ—=‘=¤ c£°�=Ó3Ð3ð ˜$Ÿ(™(Ñ"ÜÐ!3°C°5Ð9Ó:Ð:Ø—8‘8˜C‘=×%Ñ%ˆDØ—=‘= ¨4�=Ó0Ð0rF   c                ó   — t        | «      ‚)a  
        sub-classes to define
        return a sliced object

        Parameters
        ----------
        key : str / list of selections
        ndim : {1, 2}
            requested ndim of result
        subset : object, default None
            subset to act on
        r   )rC   rN   rƒ   Úsubsets       rD   r•   zSelectionMixin._gotitemù   s   € ô " $Ó'Ð'rF   c                óö   — d}|j                   dk(  r2t        j                  |«      r||v st        j                  |«      r|}|S |j                   dk(  r&t        j                  |«      r||j                  k(  r|}|S )zO
        Infer the `selection` to pass to our constructor in _gotitem.
        NrŽ   r…   )rƒ   r   r   Úis_list_likeÚname)rC   rN   r™   Ú	selections       rD   Ú_infer_selectionzSelectionMixin._infer_selection  sp   € ð ˆ	Ø�;‰;˜!ÒÜ�]‰]˜3Ô C¨6¡M´c×6FÑ6FÀsÔ6KàˆIð Ðð �[‰[˜AÒ¤#§-¡-°Ô"4¸ÀÇÁÒ9KØˆIØÐrF   c                ó   — t        | «      ‚r]   r   )rC   ÚfuncÚargsÚkwargss       rD   Ú	aggregatezSelectionMixin.aggregate  s   € Ü! $Ó'Ð'rF   r_   r]   )rƒ   rU   )r™   zSeries | DataFrame)r`   ra   rb   rc   rd   rv   Ú_internal_namesr’   Ú_internal_names_setr	   re   r   r   r�   rƒ   r‹   r—   r•   rž   r£   Úaggrr   rF   rD   rt   rt   ¶   sÄ   … ñð
 
ƒMØ$(€JÐ!Ó(Ø#Ó#Ø Ð0€OÙ˜oÓ.Ðà
Øñó ó ðð ñ-ó ð-ð Øò'ó ó ð'ð Øñó ó ðò 1ô (ð òó ðò(ð �CrF   rt   c            	      ó¤  — e Zd ZU dZdZ edg«      Zded<   ed9d„«       Z	ed:d„«       Z
ed;d„«       Z eed	¬
«      Zed<d„«       Zd=d„Zed=d„«       Zed„ «       Zed=d„«       Zed=d„«       Zed>d„«       Zeddej,                  f	 	 	 	 	 	 	 d?d„«       Zeed@d„«       «       Z eddd¬«      	 dA	 	 	 	 	 dBd„«       Z eeddd¬«      	 dA	 	 	 	 	 dBd„«       Zd„ ZeZdCd„Zed@d„«       Z edAdDd „«       Z!e	 	 	 	 	 dE	 	 	 	 	 	 	 	 	 dFd!„«       Z"d"„ Z#edGdHd#„«       Z$ed@d$„«       Z%ed@d%„«       Z&ed@d&„«       Z'edIdJd'„«       Z( ee)jT                  d(d(d( e+jX                  d)«      ¬*«      	 	 dK	 	 	 	 	 dLd+„«       Z*d,e-d-<   e.	 	 dM	 	 	 	 	 	 	 dNd.„«       Z/e.	 	 dM	 	 	 	 	 	 	 dOd/„«       Z/ ee-d-   d0¬1«      	 	 dP	 	 	 	 	 	 	 dQd2„«       Z/d3d4œdRd5„Z0edSdTd6„«       Z1d7„ Z2d8„ Z3y)Ur7   zS
    Common ops mixin to support a unified interface / docs for Series / Index
    iè  Útolistzfrozenset[str]Ú_hidden_attrsc                ó   — t        | «      ‚r]   r   rB   s    rD   ÚdtypezIndexOpsMixin.dtype(  ó   € ô " $Ó'Ð'rF   c                ó   — t        | «      ‚r]   r   rB   s    rD   Ú_valueszIndexOpsMixin._values-  r¬   rF   c                ó2   — t        j                  ||«       | S )zw
        Return the transpose, which is by definition self.

        Returns
        -------
        %(klass)s
        )ÚnvÚvalidate_transpose)rC   r¡   r¢   s      rD   Ú	transposezIndexOpsMixin.transpose2  s   € ô 	×Ñ˜d FÔ+ØˆrF   aÙ  
        Return the transpose, which is by definition self.

        Examples
        --------
        For Series:

        >>> s = pd.Series(['Ant', 'Bear', 'Cow'])
        >>> s
        0     Ant
        1    Bear
        2     Cow
        dtype: object
        >>> s.T
        0     Ant
        1    Bear
        2     Cow
        dtype: object

        For Index:

        >>> idx = pd.Index([1, 2, 3])
        >>> idx.T
        Index([1, 2, 3], dtype='int64')
        )r   c                ó.   — | j                   j                  S )z®
        Return a tuple of the shape of the underlying data.

        Examples
        --------
        >>> s = pd.Series([1, 2, 3])
        >>> s.shape
        (3,)
        )r®   ÚshaperB   s    rD   r´   zIndexOpsMixin.shape[  s   € ð �|‰|×!Ñ!Ð!rF   c                ó   — t        | «      ‚r]   r   rB   s    rD   Ú__len__zIndexOpsMixin.__len__h  s   € ä! $Ó'Ð'rF   c                 ó   — y)a­  
        Number of dimensions of the underlying data, by definition 1.

        Examples
        --------
        >>> s = pd.Series(['Ant', 'Bear', 'Cow'])
        >>> s
        0     Ant
        1    Bear
        2     Cow
        dtype: object
        >>> s.ndim
        1

        For Index:

        >>> idx = pd.Index([1, 2, 3])
        >>> idx
        Index([1, 2, 3], dtype='int64')
        >>> idx.ndim
        1
        r…   rr   rB   s    rD   rƒ   zIndexOpsMixin.ndimo  s   € ð0 rF   c                ó\   — t        | «      dk(  rt        t        | «      «      S t        d«      ‚)aà  
        Return the first element of the underlying data as a Python scalar.

        Returns
        -------
        scalar
            The first element of Series or Index.

        Raises
        ------
        ValueError
            If the data is not length = 1.

        Examples
        --------
        >>> s = pd.Series([1])
        >>> s.item()
        1

        For an index:

        >>> s = pd.Series([1], index=['a'])
        >>> s.index.item()
        'a'
        r…   z6can only convert an array of size 1 to a Python scalar)r‰   ÚnextÚiterÚ
ValueErrorrB   s    rD   ÚitemzIndexOpsMixin.item‰  s*   € ô6 ˆt‹9˜Š>Üœ˜T›
Ó#Ð#ÜÐQÓRÐRrF   c                ó.   — | j                   j                  S )a½  
        Return the number of bytes in the underlying data.

        Examples
        --------
        For Series:

        >>> s = pd.Series(['Ant', 'Bear', 'Cow'])
        >>> s
        0     Ant
        1    Bear
        2     Cow
        dtype: object
        >>> s.nbytes
        24

        For Index:

        >>> idx = pd.Index([1, 2, 3])
        >>> idx
        Index([1, 2, 3], dtype='int64')
        >>> idx.nbytes
        24
        )r®   ÚnbytesrB   s    rD   r¾   zIndexOpsMixin.nbytes¨  s   € ð4 �|‰|×"Ñ"Ð"rF   c                ó,   — t        | j                  «      S )aº  
        Return the number of elements in the underlying data.

        Examples
        --------
        For Series:

        >>> s = pd.Series(['Ant', 'Bear', 'Cow'])
        >>> s
        0     Ant
        1    Bear
        2     Cow
        dtype: object
        >>> s.size
        3

        For Index:

        >>> idx = pd.Index([1, 2, 3])
        >>> idx
        Index([1, 2, 3], dtype='int64')
        >>> idx.size
        3
        )r‰   r®   rB   s    rD   ÚsizezIndexOpsMixin.sizeÄ  s   € ô4 �4—<‘<Ó Ð rF   c                ó   — t        | «      ‚)ac  
        The ExtensionArray of the data backing this Series or Index.

        Returns
        -------
        ExtensionArray
            An ExtensionArray of the values stored within. For extension
            types, this is the actual array. For NumPy native types, this
            is a thin (no copy) wrapper around :class:`numpy.ndarray`.

            ``.array`` differs from ``.values``, which may require converting
            the data to a different form.

        See Also
        --------
        Index.to_numpy : Similar method that always returns a NumPy array.
        Series.to_numpy : Similar method that always returns a NumPy array.

        Notes
        -----
        This table lays out the different array types for each extension
        dtype within pandas.

        ================== =============================
        dtype              array type
        ================== =============================
        category           Categorical
        period             PeriodArray
        interval           IntervalArray
        IntegerNA          IntegerArray
        string             StringArray
        boolean            BooleanArray
        datetime64[ns, tz] DatetimeArray
        ================== =============================

        For any 3rd-party extension types, the array type will be an
        ExtensionArray.

        For all remaining dtypes ``.array`` will be a
        :class:`arrays.NumpyExtensionArray` wrapping the actual ndarray
        stored within. If you absolutely need a NumPy array (possibly with
        copying / coercing data), then use :meth:`Series.to_numpy` instead.

        Examples
        --------
        For regular NumPy types like int, and float, a NumpyExtensionArray
        is returned.

        >>> pd.Series([1, 2, 3]).array
        <NumpyExtensionArray>
        [1, 2, 3]
        Length: 3, dtype: int64

        For extension types, like Categorical, the actual ExtensionArray
        is returned

        >>> ser = pd.Series(pd.Categorical(['a', 'b', 'a']))
        >>> ser.array
        ['a', 'b', 'a']
        Categories (2, object): ['a', 'b']
        r   rB   s    rD   ÚarrayzIndexOpsMixin.arrayà  s   € ô~ " $Ó'Ð'rF   NFc                ól  — t        | j                  t        «      r  | j                  j                  |f||dœ|¤ŽS |r1t        t        |j                  «       «      «      }t        d|› d�«      ‚|t        j                  uxrC |t        j                  u xr. t        j                  | j                  t        j                  «       }| j                  }|rUt!        ||«      st        j"                  ||¬«      }n|j%                  «       }||t        j&                  t)        | «      «      <   t        j"                  ||¬«      }|r|r|sot+        «       ret        j,                  | j                  dd |dd «      r?t+        «       r%|s#|j/                  «       }d|j0                  _        |S |j%                  «       }|S )a«  
        A NumPy ndarray representing the values in this Series or Index.

        Parameters
        ----------
        dtype : str or numpy.dtype, optional
            The dtype to pass to :meth:`numpy.asarray`.
        copy : bool, default False
            Whether to ensure that the returned value is not a view on
            another array. Note that ``copy=False`` does not *ensure* that
            ``to_numpy()`` is no-copy. Rather, ``copy=True`` ensure that
            a copy is made, even if not strictly necessary.
        na_value : Any, optional
            The value to use for missing values. The default value depends
            on `dtype` and the type of the array.
        **kwargs
            Additional keywords passed through to the ``to_numpy`` method
            of the underlying array (for extension arrays).

        Returns
        -------
        numpy.ndarray

        See Also
        --------
        Series.array : Get the actual data stored within.
        Index.array : Get the actual data stored within.
        DataFrame.to_numpy : Similar method for DataFrame.

        Notes
        -----
        The returned array will be the same up to equality (values equal
        in `self` will be equal in the returned array; likewise for values
        that are not equal). When `self` contains an ExtensionArray, the
        dtype may be different. For example, for a category-dtype Series,
        ``to_numpy()`` will return a NumPy array and the categorical dtype
        will be lost.

        For NumPy dtypes, this will be a reference to the actual data stored
        in this Series or Index (assuming ``copy=False``). Modifying the result
        in place will modify the data stored in the Series or Index (not that
        we recommend doing that).

        For extension types, ``to_numpy()`` *may* require copying data and
        coercing the result to a NumPy type (possibly object), which may be
        expensive. When you need a no-copy reference to the underlying data,
        :attr:`Series.array` should be used instead.

        This table lays out the different dtypes and default return types of
        ``to_numpy()`` for various dtypes within pandas.

        ================== ================================
        dtype              array type
        ================== ================================
        category[T]        ndarray[T] (same dtype as input)
        period             ndarray[object] (Periods)
        interval           ndarray[object] (Intervals)
        IntegerNA          ndarray[object]
        datetime64[ns]     datetime64[ns]
        datetime64[ns, tz] ndarray[object] (Timestamps)
        ================== ================================

        Examples
        --------
        >>> ser = pd.Series(pd.Categorical(['a', 'b', 'a']))
        >>> ser.to_numpy()
        array(['a', 'b', 'a'], dtype=object)

        Specify the `dtype` to control how datetime-aware data is represented.
        Use ``dtype=object`` to return an ndarray of pandas :class:`Timestamp`
        objects, each with the correct ``tz``.

        >>> ser = pd.Series(pd.date_range('2000', periods=2, tz="CET"))
        >>> ser.to_numpy(dtype=object)
        array([Timestamp('2000-01-01 00:00:00+0100', tz='CET'),
               Timestamp('2000-01-02 00:00:00+0100', tz='CET')],
              dtype=object)

        Or ``dtype='datetime64[ns]'`` to return an ndarray of native
        datetime64 values. The values are converted to UTC and the timezone
        info is dropped.

        >>> ser.to_numpy(dtype="datetime64[ns]")
        ... # doctest: +ELLIPSIS
        array(['1999-12-31T23:00:00.000000000', '2000-01-01T23:00:00...'],
              dtype='datetime64[ns]')
        )ÚcopyÚna_valuez/to_numpy() got an unexpected keyword argument 'rn   ©r«   NrŽ   F)rz   r«   r   rÂ   Úto_numpyr¹   rº   ÚkeysÚ	TypeErrorr   Ú
no_defaultr}   ÚnanÚ
issubdtypeÚfloatingr®   r   ÚasarrayrÄ   Ú
asanyarrayr#   r   Úshares_memoryÚviewÚflagsÚ	writeable)	rC   r«   rÄ   rÅ   r¢   r–   ÚfillnaÚvaluesÚresults	            rD   rÇ   zIndexOpsMixin.to_numpy!  si  € ô~ �d—j‘j¤.Ô1Ø&�4—:‘:×&Ñ& uÐU°4À(ÑUÈfÑUÐUÙÜœD §¡£Ó/Ó0ˆHÜØAÀ(ÀÈ1ÐMóð ð
 œCŸN™NÐ*ò Tà¤§¡Ð'ÒR¬B¯M©M¸$¿*¹*ÄbÇkÁkÓ,RÐSð 	ð —‘ˆÙÜ# F¨HÔ5ô Ÿ™ F°%Ô8‘àŸ™›�à08ˆF”2—=‘=¤ d£Ó,Ñ-ä—‘˜F¨%Ô0ˆá™©Ô2EÔ2GÜ×Ñ §¡¨R¨aÐ 0°&¸¸!°*Ô=ä&Ô(±Ø#Ÿ[™[›]�FØ-2�F—L‘LÔ*ð ˆð $Ÿ[™[›]�FàˆrF   c                ó   — | j                    S r]   )rÀ   rB   s    rD   ÚemptyzIndexOpsMixin.empty§  s   € ð —9‘9ˆ}ÐrF   ÚmaxÚminÚlargest)ÚopÚopposerq   c                ó  — | j                   }t        j                  |«       t        j                  |||«      }t	        |t
        «      rl|sZ|j                  «       j                  «       r<t        j                  dt        | «      j                  › d�t        t        «       ¬«       y|j                  «       S t        j                   ||¬«      }|dk(  r;t        j                  dt        | «      j                  › d�t        t        «       ¬«       |S )ab  
        Return int position of the {value} value in the Series.

        If the {op}imum is achieved in multiple locations,
        the first row position is returned.

        Parameters
        ----------
        axis : {{None}}
            Unused. Parameter needed for compatibility with DataFrame.
        skipna : bool, default True
            Exclude NA/null values when showing the result.
        *args, **kwargs
            Additional arguments and keywords for compatibility with NumPy.

        Returns
        -------
        int
            Row position of the {op}imum value.

        See Also
        --------
        Series.arg{op} : Return position of the {op}imum value.
        Series.arg{oppose} : Return position of the {oppose}imum value.
        numpy.ndarray.arg{op} : Equivalent method for numpy arrays.
        Series.idxmax : Return index label of the maximum values.
        Series.idxmin : Return index label of the minimum values.

        Examples
        --------
        Consider dataset containing cereal calories

        >>> s = pd.Series({{'Corn Flakes': 100.0, 'Almond Delight': 110.0,
        ...                'Cinnamon Toast Crunch': 120.0, 'Cocoa Puff': 110.0}})
        >>> s
        Corn Flakes              100.0
        Almond Delight           110.0
        Cinnamon Toast Crunch    120.0
        Cocoa Puff               110.0
        dtype: float64

        >>> s.argmax()
        2
        >>> s.argmin()
        0

        The maximum cereal calories is the third element and
        the minimum cereal calories is the first element,
        since series is zero-indexed.
        úThe behavior of úx.argmax/argmin with skipna=False and NAs, or with all-NAs is deprecated. In a future version this will raise ValueError.©Ú
stacklevelr�   ©Úskipna)r®   r°   Úvalidate_minmax_axisÚvalidate_argmax_with_skipnarz   r*   r#   ÚanyÚwarningsÚwarnrA   r`   ÚFutureWarningr   Úargmaxr&   Ú	nanargmax©rC   r†   rä   r¡   r¢   ÚdelegaterÖ   s          rD   rë   zIndexOpsMixin.argmax¬  sê   € ðl —<‘<ˆÜ
×Ñ Ô%Ü×/Ñ/°¸¸fÓEˆä�h¤Ô/Ù˜hŸm™m›o×1Ñ1Ô3Ü—‘Ø&¤t¨D£z×':Ñ':Ð&;ð <Fð Fô "Ü/Ó1õð à—‘Ó(Ð(ä×%Ñ% h°vÔ>ˆFØ˜Š|Ü—‘Ø&¤t¨D£z×':Ñ':Ð&;ð <Fð Fô "Ü/Ó1õð ˆMrF   Úsmallestc                ó  — | j                   }t        j                  |«       t        j                  |||«      }t	        |t
        «      rl|sZ|j                  «       j                  «       r<t        j                  dt        | «      j                  › d�t        t        «       ¬«       y|j                  «       S t        j                   ||¬«      }|dk(  r;t        j                  dt        | «      j                  › d�t        t        «       ¬«       |S )Nrß   rà   rá   r�   rã   )r®   r°   rå   Úvalidate_argmin_with_skipnarz   r*   r#   rç   rè   ré   rA   r`   rê   r   Úargminr&   Ú	nanargminrí   s          rD   rò   zIndexOpsMixin.argmin   sé   € ð —<‘<ˆÜ
×Ñ Ô%Ü×/Ñ/°¸¸fÓEˆä�h¤Ô/Ù˜hŸm™m›o×1Ñ1Ô3Ü—‘Ø&¤t¨D£z×':Ñ':Ð&;ð <Fð Fô "Ü/Ó1õð à—‘Ó(Ð(ä×%Ñ% h°vÔ>ˆFØ˜Š|Ü—‘Ø&¤t¨D£z×':Ñ':Ð&;ð <Fð Fô "Ü/Ó1õð ˆMrF   c                ó6   — | j                   j                  «       S )a¼  
        Return a list of the values.

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

        Returns
        -------
        list

        See Also
        --------
        numpy.ndarray.tolist : Return the array as an a.ndim-levels deep
            nested list of Python scalars.

        Examples
        --------
        For Series

        >>> s = pd.Series([1, 2, 3])
        >>> s.to_list()
        [1, 2, 3]

        For Index:

        >>> idx = pd.Index([1, 2, 3])
        >>> idx
        Index([1, 2, 3], dtype='int64')

        >>> idx.to_list()
        [1, 2, 3]
        )r®   r¨   rB   s    rD   r¨   zIndexOpsMixin.tolist"  s   € ðD �|‰|×"Ñ"Ó$Ð$rF   c                óî   — t        | j                  t        j                  «      st	        | j                  «      S t        | j                  j                  t        | j                  j                  «      «      S )aŸ  
        Return an iterator of the values.

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

        Returns
        -------
        iterator

        Examples
        --------
        >>> s = pd.Series([1, 2, 3])
        >>> for x in s:
        ...     print(x)
        1
        2
        3
        )	rz   r®   r}   r~   rº   Úmapr¼   ÚrangerÀ   rB   s    rD   Ú__iter__zIndexOpsMixin.__iter__H  sK   € ô, ˜$Ÿ,™,¬¯
©
Ô3ä˜Ÿ™Ó%Ð%ä�t—|‘|×(Ñ(¬%°·±×0AÑ0AÓ*BÓCÐCrF   c                óF   — t        t        | «      j                  «       «      S )ak  
        Return True if there are any NaNs.

        Enables various performance speedups.

        Returns
        -------
        bool

        Examples
        --------
        >>> s = pd.Series([1, 2, 3, None])
        >>> s
        0    1.0
        1    2.0
        2    3.0
        3    NaN
        dtype: float64
        >>> s.hasnans
        True
        )Úboolr#   rç   rB   s    rD   ÚhasnanszIndexOpsMixin.hasnansd  s   € ô2 ”D˜“J—N‘NÓ$Ó%Ð%rF   c                ó’   — | j                   }t        |t        «      r|j                  ||¬«      S t	        j
                  ||||¬«      S )aš  
        An internal function that maps values using the input
        correspondence (which can be a dict, Series, or function).

        Parameters
        ----------
        mapper : function, dict, or Series
            The input correspondence object
        na_action : {None, 'ignore'}
            If 'ignore', propagate NA values, without passing them to the
            mapping function
        convert : bool, default True
            Try to find better dtype for elementwise function results. If
            False, leave as dtype=object. Note that the dtype is always
            preserved for some extension array dtypes, such as Categorical.

        Returns
        -------
        Union[Index, MultiIndex], inferred
            The output of the mapping function applied to the index.
            If the function returns a tuple with more than one element
            a MultiIndex will be returned.
        )Ú	na_action)rý   Úconvert)r®   rz   r*   rö   r%   Ú	map_array)rC   Úmapperrý   rþ   Úarrs        rD   Ú_map_valueszIndexOpsMixin._map_values  sA   € ð2 �l‰lˆä�cœ>Ô*Ø—7‘7˜6¨Y�7Ó7Ð7ä×#Ñ# C¨¸9ÈgÔVÐVrF   c                ó8   — t        j                  | |||||¬«      S )a=	  
        Return a Series containing counts of unique values.

        The resulting object will be in descending order so that the
        first element is the most frequently-occurring element.
        Excludes NA values by default.

        Parameters
        ----------
        normalize : bool, default False
            If True then the object returned will contain the relative
            frequencies of the unique values.
        sort : bool, default True
            Sort by frequencies when True. Preserve the order of the data when False.
        ascending : bool, default False
            Sort in ascending order.
        bins : int, optional
            Rather than count values, group them into half-open bins,
            a convenience for ``pd.cut``, only works with numeric data.
        dropna : bool, default True
            Don't include counts of NaN.

        Returns
        -------
        Series

        See Also
        --------
        Series.count: Number of non-NA elements in a Series.
        DataFrame.count: Number of non-NA elements in a DataFrame.
        DataFrame.value_counts: Equivalent method on DataFrames.

        Examples
        --------
        >>> index = pd.Index([3, 1, 2, 3, 4, np.nan])
        >>> index.value_counts()
        3.0    2
        1.0    1
        2.0    1
        4.0    1
        Name: count, dtype: int64

        With `normalize` set to `True`, returns the relative frequency by
        dividing all values by the sum of values.

        >>> s = pd.Series([3, 1, 2, 3, 4, np.nan])
        >>> s.value_counts(normalize=True)
        3.0    0.4
        1.0    0.2
        2.0    0.2
        4.0    0.2
        Name: proportion, dtype: float64

        **bins**

        Bins can be useful for going from a continuous variable to a
        categorical variable; instead of counting unique
        apparitions of values, divide the index in the specified
        number of half-open bins.

        >>> s.value_counts(bins=3)
        (0.996, 2.0]    2
        (2.0, 3.0]      2
        (3.0, 4.0]      1
        Name: count, dtype: int64

        **dropna**

        With `dropna` set to `False` we can also see NaN index values.

        >>> s.value_counts(dropna=False)
        3.0    2
        1.0    1
        2.0    1
        4.0    1
        NaN    1
        Name: count, dtype: int64
        )ÚsortÚ	ascendingÚ	normalizeÚbinsÚdropna)r%   Úvalue_counts_internal)rC   r  r  r  r  r  s         rD   Úvalue_countszIndexOpsMixin.value_countsŸ  s*   € ôn ×/Ñ/ØØØØØØô
ð 	
rF   c                ó    — | j                   }t        |t        j                  «      s|j	                  «       }|S t        j                  |«      }|S r]   )r®   rz   r}   r~   r;   r%   Úunique1d)rC   rÕ   rÖ   s      rD   r;   zIndexOpsMixin.uniqueÿ  sB   € Ø—‘ˆÜ˜&¤"§*¡*Ô-à—]‘]“_ˆFð ˆô  ×(Ñ(¨Ó0ˆFØˆrF   c                óR   — | j                  «       }|rt        |«      }t        |«      S )aŒ  
        Return number of unique elements in the object.

        Excludes NA values by default.

        Parameters
        ----------
        dropna : bool, default True
            Don't include NaN in the count.

        Returns
        -------
        int

        See Also
        --------
        DataFrame.nunique: Method nunique for DataFrame.
        Series.count: Count non-NA/null observations in the Series.

        Examples
        --------
        >>> s = pd.Series([1, 3, 5, 7, 7])
        >>> s
        0    1
        1    3
        2    5
        3    7
        4    7
        dtype: int64

        >>> s.nunique()
        4
        )r;   r$   r‰   )rC   r  Úuniqss      rD   ÚnuniquezIndexOpsMixin.nunique  s'   € ðF —‘“ˆÙÜ'¨Ó.ˆEÜ�5‹zÐrF   c                ó>   — | j                  d¬«      t        | «      k(  S )a.  
        Return boolean if values in the object are unique.

        Returns
        -------
        bool

        Examples
        --------
        >>> s = pd.Series([1, 2, 3])
        >>> s.is_unique
        True

        >>> s = pd.Series([1, 2, 3, 1])
        >>> s.is_unique
        False
        F)r  )r  r‰   rB   s    rD   Ú	is_uniquezIndexOpsMixin.is_unique0  s   € ð& �|‰| 5ˆ|Ó)¬S°«YÑ6Ð6rF   c                ó2   — ddl m}  || «      j                  S )aY  
        Return boolean if values in the object are monotonically increasing.

        Returns
        -------
        bool

        Examples
        --------
        >>> s = pd.Series([1, 2, 2])
        >>> s.is_monotonic_increasing
        True

        >>> s = pd.Series([3, 2, 1])
        >>> s.is_monotonic_increasing
        False
        r   ©r4   )Úpandasr4   Úis_monotonic_increasing©rC   r4   s     rD   r  z%IndexOpsMixin.is_monotonic_increasingE  ó   € õ& 	!á�T‹{×2Ñ2Ð2rF   c                ó2   — ddl m}  || «      j                  S )a\  
        Return boolean if values in the object are monotonically decreasing.

        Returns
        -------
        bool

        Examples
        --------
        >>> s = pd.Series([3, 2, 2, 1])
        >>> s.is_monotonic_decreasing
        True

        >>> s = pd.Series([1, 2, 3])
        >>> s.is_monotonic_decreasing
        False
        r   r  )r  r4   Úis_monotonic_decreasingr  s     rD   r  z%IndexOpsMixin.is_monotonic_decreasing\  r  rF   c                óH  — t        | j                  d«      r| j                  j                  |¬«      S | j                  j                  }|rWt	        | j
                  «      rBt        s<t        t        j                  | j                  «      }|t        j                  |«      z  }|S )aÁ  
        Memory usage of the values.

        Parameters
        ----------
        deep : bool, default False
            Introspect the data deeply, interrogate
            `object` dtypes for system-level memory consumption.

        Returns
        -------
        bytes used

        See Also
        --------
        numpy.ndarray.nbytes : Total bytes consumed by the elements of the
            array.

        Notes
        -----
        Memory usage does not include memory consumed by elements that
        are not components of the array if deep=False or if used on PyPy

        Examples
        --------
        >>> idx = pd.Index([1, 2, 3])
        >>> idx.memory_usage()
        24
        rQ   rR   )rK   rÂ   rQ   r¾   r   r«   r   r   r}   r~   r®   r   Úmemory_usage_of_objects)rC   rS   ÚvrÕ   s       rD   Ú_memory_usagezIndexOpsMixin._memory_usages  s€   € ô> �4—:‘:˜~Ô.Ø—:‘:×*Ñ*Øð +ó ð ð �J‰J×ÑˆÙ”O D§J¡JÔ/½Üœ"Ÿ*™* d§l¡lÓ3ˆFØ”×,Ñ,¨VÓ4Ñ4ˆAØˆrF   r8   z”            sort : bool, default False
                Sort `uniques` and shuffle `codes` to maintain the
                relationship.
            )rÕ   ÚorderÚ	size_hintr  c                ó€  — t        j                  | j                  ||¬«      \  }}|j                  t        j
                  k(  r|j                  t        j                  «      }t        | t        «      r| j                  |«      }||fS ddlm} 	  ||| j                  ¬«      }||fS # t        $ r  ||«      }Y ||fS w xY w)N)r  Úuse_na_sentinelr   r  rÆ   )r%   Ú	factorizer®   r«   r}   Úfloat16ÚastypeÚfloat32rz   r!   rE   r  r4   ÚNotImplementedError)rC   r  r!  ÚcodesÚuniquesr4   s         rD   r"  zIndexOpsMixin.factorize�  s¹   € ô$ $×-Ñ-Ø�L‰L˜t°_ô
‰ˆˆwð �=‰=œBŸJ™JÒ&Ø—n‘n¤R§Z¡ZÓ0ˆGä�dœMÔ*à×'Ñ'¨Ó0ˆGð �gˆ~Ðõ %ð)Ù ¨t¯z©zÔ:�ð
 �gˆ~Ðøô	 'ò )ñ   ›.‘Ø�gˆ~Ðð	)ús   ÂB& Â&B=Â<B=a  
        Find indices where elements should be inserted to maintain order.

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

        .. note::

            The {klass} *must* be monotonically sorted, otherwise
            wrong locations will likely be returned. Pandas does *not*
            check this for you.

        Parameters
        ----------
        value : array-like or scalar
            Values 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 `self` into ascending
            order. They are typically the result of ``np.argsort``.

        Returns
        -------
        int or array of int
            A scalar or array of insertion points with the
            same shape as `value`.

        See Also
        --------
        sort_values : Sort by the values along either axis.
        numpy.searchsorted : Similar method from NumPy.

        Notes
        -----
        Binary search is used to find the required insertion points.

        Examples
        --------
        >>> ser = pd.Series([1, 2, 3])
        >>> ser
        0    1
        1    2
        2    3
        dtype: int64

        >>> ser.searchsorted(4)
        3

        >>> ser.searchsorted([0, 4])
        array([0, 3])

        >>> ser.searchsorted([1, 3], side='left')
        array([0, 2])

        >>> ser.searchsorted([1, 3], side='right')
        array([1, 3])

        >>> ser = pd.Series(pd.to_datetime(['3/11/2000', '3/12/2000', '3/13/2000']))
        >>> ser
        0   2000-03-11
        1   2000-03-12
        2   2000-03-13
        dtype: datetime64[ns]

        >>> ser.searchsorted('3/14/2000')
        3

        >>> ser = pd.Categorical(
        ...     ['apple', 'bread', 'bread', 'cheese', 'milk'], ordered=True
        ... )
        >>> ser
        ['apple', 'bread', 'bread', 'cheese', 'milk']
        Categories (4, object): ['apple' < 'bread' < 'cheese' < 'milk']

        >>> ser.searchsorted('bread')
        1

        >>> ser.searchsorted(['bread'], side='right')
        array([3])

        If the values are not monotonically sorted, wrong locations
        may be returned:

        >>> ser = pd.Series([2, 1, 3])
        >>> ser
        0    2
        1    1
        2    3
        dtype: int64

        >>> ser.searchsorted(1)  # doctest: +SKIP
        0  # wrong result, correct would be 1
        Úsearchsortedc                 ó   — y r]   rr   ©rC   rq   ÚsideÚsorters       rD   r)  zIndexOpsMixin.searchsorted,  ó   € ð 	rF   c                 ó   — y r]   rr   r+  s       rD   r)  zIndexOpsMixin.searchsorted5  r.  rF   r4   )r9   c                ó  — t        |t        «      r$dt        |«      j                  › d�}t	        |«      ‚| j
                  }t        |t        j                  «      s|j                  |||¬«      S t        j                  ||||¬«      S )Nz(Value must be 1-D array-like or scalar, z is not supported)r,  r-  )
rz   r   rA   r`   r»   r®   r}   r~   r)  r%   )rC   rq   r,  r-  ÚmsgrÕ   s         rD   r)  zIndexOpsMixin.searchsorted>  sˆ   € ô �eœ\Ô*à:Ü˜“;×'Ñ'Ð(Ð(9ð;ð ô ˜S“/Ð!à—‘ˆÜ˜&¤"§*¡*Ô-à×&Ñ& u°4ÀÐ&ÓGÐGä×&Ñ&ØØØØô	
ð 	
rF   Úfirst©Úkeepc               ó2   — | j                  |¬«      }| |    S ©Nr3  )Ú_duplicated)rC   r4  r<   s      rD   Údrop_duplicateszIndexOpsMixin.drop_duplicatesX  s"   € Ø×%Ñ%¨4Ð%Ó0ˆ
à�Z�KÑ Ð rF   c                óŒ   — | j                   }t        |t        «      r|j                  |¬«      S t	        j                  ||¬«      S r6  )r®   rz   r*   r<   r%   )rC   r4  r  s      rD   r7  zIndexOpsMixin._duplicated]  s9   € à�l‰lˆÜ�cœ>Ô*Ø—>‘> t�>Ó,Ð,Ü×$Ñ$ S¨tÔ4Ð4rF   c                óì  — t        j                  | |«      }| j                  }t        |dd¬«      }t        j                  ||j
                  «      }t        |«      }t        |t        «      r5t        j                  |j                  |j                  |j                  «      }t        j                  d¬«      5  t        j                  |||«      }d d d «       | j!                  |¬«      S # 1 sw Y   ŒxY w)NT)Úextract_numpyÚextract_rangeÚignore)Úall)rœ   )r'   Úget_op_result_namer®   r,   Úmaybe_prepare_scalar_for_opr´   r+   rz   r÷   r}   ÚarangeÚstartÚstopÚstepÚerrstateÚarithmetic_opÚ_construct_result)rC   ÚotherrÜ   Úres_nameÚlvaluesÚrvaluesrÖ   s          rD   Ú_arith_methodzIndexOpsMixin._arith_methodd  sÀ   € Ü×)Ñ)¨$°Ó6ˆà—,‘,ˆÜ °TÈÔNˆÜ×1Ñ1°'¸7¿=¹=ÓIˆÜ0°Ó9ˆÜ�gœuÔ%Ü—i‘i §¡¨w¯|©|¸W¿\¹\ÓJˆGä�[‰[˜XÔ&ñ 	=Ü×&Ñ& w°¸Ó<ˆF÷	=ð ×%Ñ% f°8Ð%Ó<Ð<÷	=ð 	=ús   Â7C*Ã*C3c                ó   — t        | «      ‚)z~
        Construct an appropriately-wrapped result from the ArrayLike result
        of an arithmetic-like operation.
        r   )rC   rÖ   rœ   s      rD   rG  zIndexOpsMixin._construct_results  s   € ô
 " $Ó'Ð'rF   )r[   r   )r[   zExtensionArray | np.ndarray)r[   r   )r[   r   r_   )r[   r*   )r«   znpt.DTypeLike | NonerÄ   rú   rÅ   rH   r[   z
np.ndarray)r[   rú   )NT)r†   zAxisInt | Nonerä   rú   r[   rU   )r[   r.   )rþ   rú   )FTFNT)
r  rú   r  rú   r  rú   r  rú   r[   r5   )T)r  rú   r[   rU   )F)rS   rú   r[   rU   )FT)r  rú   r!  rú   r[   z"tuple[npt.NDArray[np.intp], Index])..)rq   r2   r,  úLiteral['left', 'right']r-  r0   r[   znp.intp)rq   znpt.ArrayLike | ExtensionArrayr,  rN  r-  r0   r[   znpt.NDArray[np.intp])ÚleftN)rq   z$NumpyValueArrayLike | ExtensionArrayr,  rN  r-  zNumpySorter | Noner[   znpt.NDArray[np.intp] | np.intp)r4  r/   )r2  )r4  r/   r[   znpt.NDArray[np.bool_])4r`   ra   rb   rc   Ú__array_priority__Ú	frozensetr©   rd   re   r«   r®   r	   r²   ÚTr´   r¶   rƒ   r¼   r¾   rÀ   rÂ   r   rÊ   rÇ   rØ   r   rë   rò   r¨   Úto_listrø   r   rû   r  r
  r;   r  r  r  r  r  r%   r"  ÚtextwrapÚdedentr6   r
   r)  r8  r7  rL  rG  rr   rF   rD   r7   r7     sO  … ñð
 ÐÙ$-Ø	ˆ
ó%€M�>ó ð ò(ó ð(ð ò(ó ð(ð ò	ó ð	ñ 	Øðô	€Að: ò
"ó ð
"ó(ð òó ðð2 ñSó ðSð< ò#ó ð#ð6 ò!ó ð!ð6 ò>(ó ð>(ð@ ð '+ØØŸ>™>ð	Cà#ðCð ðCð ð	Cð 
òCó ðCðJ Øòó ó ðñ 	ˆE˜% yÔ1à:>ðQØ"ðQØ37ðQà	òQó 2ðQñf 	ˆ�E %¨zÔ:à:>ðØ"ðØ37ðà	òó ;ðòB"%ðH €GóDð8 ò&ó ð&ð4 óWó ðWð> ð  ØØØØð]
àð]
ð ð]
ð ð	]
ð ð]
ð 
ò]
ó ð]
ò~ð ó%ó ð%ðN ò7ó ð7ð( ò3ó ð3ð, ò3ó ð3ð, ó'ó ð'ñR 	Ø×ÑØØØØˆX�_‰_ðó
ôð Ø $ðàðð ðð 
,ò	óðð6`	ð ØñðR ð *-Ø!ð	àðð 'ðð ð	ð
 
òó ðð ð *-Ø!ð	à-ðð 'ðð ð	ð
 
òó ðñ 	ˆ�nÑ	%¨WÔ5ð *0Ø%)ð	
à3ð
ð 'ð
ð #ð	
ð
 
(ò
ó 6ð
ð2 3:õ !ð
 ó5ó ð5ò=ó(rF   )Urc   Ú
__future__r   rT  Útypingr   r   r   r   r   r	   r
   rè   Únumpyr}   Úpandas._configr   Úpandas._libsr   Úpandas._typingr   r   r   r   r   r   r   Úpandas.compatr   Úpandas.compat.numpyr   r°   Úpandas.errorsr   Úpandas.util._decoratorsr   r   Úpandas.util._exceptionsr   Úpandas.core.dtypes.castr   Úpandas.core.dtypes.commonr   r   Úpandas.core.dtypes.dtypesr   Úpandas.core.dtypes.genericr   r    r!   r"   Úpandas.core.dtypes.missingr#   r$   Úpandas.corer%   r&   r'   Úpandas.core.accessorr(   Úpandas.core.arrayliker)   Úpandas.core.arraysr*   Úpandas.core.constructionr+   r,   Úcollections.abcr-   r.   r/   r0   r1   r2   r  r3   r4   r5   r6   rd   Ú_indexops_doc_kwargsr>   rh   rt   r7   rr   rF   rD   ú<module>rm     s  ðòõ #ã ÷÷ ñ ó ã å .å ÷÷ ñ õ Ý .Ý -÷õ 5å 4÷õ 5÷ó ÷÷
ñ õ
 /Ý *Ý -÷ñ
 ÷÷
ó ÷ñ ð  "€ˆnÓ !àØØØ!ñ	Ð ô,$�=ô ,$÷^-ñ -ôDd�W˜XÑ&ô dôN[(�Hõ [(rF   