Ë
    u™ãj´ì  ã                  ó2  — d Z ddlmZ ddlmZ ddlmZ ddlZddlm	Z	m
Z
mZmZmZmZ ddlZddl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 dd	l m!Z! dd
l"m#Z#m$Z$ ddl%m&Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZB ddlCmDc mEZF ddlGmHZH ddlImJZJ ddlKmLZL ddlMmNZN ddlOmPZP ddlQmRZR ddlSmTZT e	r ddlUmVZVmWZW ddlXmXZX ddlYmZZZm[Z[m\Z\m]Z] ddl^m_Z_  G d„ d eNe«      Z` G d!„ d"e`e«      Zay)#z;
Base and utility classes for tseries type pandas objects.
é    )Úannotations)ÚABC)ÚpairwiseN)ÚTYPE_CHECKINGÚAnyÚLiteralÚSelfÚcastÚfinal)ÚNaTÚlib)
Ú
BaseOffsetÚDayÚ
ResolutionÚTickÚ	TimedeltaÚ	TimestampÚget_resolutionÚparsingÚ	timezonesÚ	to_offset)Úabbrev_to_npy_unit)ÚRelativeDeltaOffsetÚWeek)Úfunction)ÚInvalidIndexErrorÚNullFrequencyErrorÚOutOfBoundsDatetimeÚOutOfBoundsTimedeltaÚPandas4Warning)Úcache_readonly)Úfind_stack_level)Ú
is_integerÚis_list_like)Úconcat_compat)ÚCategoricalDtypeÚDatetimeTZDtypeÚPeriodDtype)Ú
algorithmsÚ	roperator)ÚDatetimeArrayÚExtensionArrayÚPeriodArrayÚTimedeltaArray)Úensure_wrapped_if_datetimelike)Úcheck_array_indexer)ÚIndex)ÚNDArrayBackedExtensionIndex)Ú
RangeIndex)Úto_timedelta)Úfrequencies)ÚHashableÚSequence)Údatetime)ÚAxisÚJoinHowÚTimeUnitÚnpt)ÚCategoricalIndexc                  ól  ‡ — e Zd ZU dZdZded<   dZded<   ddd	œd#d
„Zed$d„«       Z	ed%d„«       Z
ed&d„«       Zed'd„«       Zed&d„«       Zed(d„«       Zd)d„Zd*d„Zˆ fd„ZdZddœ	 	 	 	 	 	 	 d+d„Zd&d„Zˆ fd„Zd,d&ˆ fd„Zed-d„«       Zd.d„Zd/d„Zd0d„Ze	 	 	 	 	 	 d1d„«       Zd2d „Zd3d4d!„Zd"„ Z ˆ xZ!S )5ÚDatetimeIndexOpsMixinzM
    Common ops mixin to support a unified interface datetimelike Index.
    Fz,DatetimeArray | TimedeltaArray | PeriodArrayÚ_dataTÚboolÚ_warn_quarterr   ©ÚskipnaÚaxisc               ó<   — | j                   j                  ||¬«      S )a�  
        Return the mean value of the Array.

        This method computes the arithmetic mean of the datetime or timedelta
        values in the index, optionally skipping NaT values.

        Parameters
        ----------
        skipna : bool, default True
            Whether to ignore any NaT elements.
        axis : int, optional, default 0
            Axis for the function to be applied on.

        Returns
        -------
        scalar
            Timestamp or Timedelta.

        See Also
        --------
        numpy.ndarray.mean : Returns the average of array elements along a given axis.
        Series.mean : Return the mean value in a Series.

        Notes
        -----
        mean is only defined for Datetime and Timedelta dtypes, not for Period.

        Examples
        --------
        For :class:`pandas.DatetimeIndex`:

        >>> idx = pd.date_range("2001-01-01 00:00", periods=3)
        >>> idx
        DatetimeIndex(['2001-01-01', '2001-01-02', '2001-01-03'],
                      dtype='datetime64[us]', freq='D')
        >>> idx.mean()
        Timestamp('2001-01-02 00:00:00')

        For :class:`pandas.TimedeltaIndex`:

        >>> tdelta_idx = pd.to_timedelta([1, 2, 3], unit="D")
        >>> tdelta_idx
        TimedeltaIndex(['1 days', '2 days', '3 days'],
                        dtype='timedelta64[us]', freq=None)
        >>> tdelta_idx.mean()
        Timedelta('2 days 00:00:00')
        rC   )r@   Úmean)ÚselfrD   rE   s      úk/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/core/indexes/datetimelike.pyrG   zDatetimeIndexOpsMixin.meanu   s   € ð` �z‰z�‰ f°4ˆÓ8Ð8ó    c                ó.   — | j                   j                  S ©ac  
        Return the frequency object if it is set, otherwise None.

        To learn more about the frequency strings, please see
        :ref:`this link<timeseries.offset_aliases>`.

        See Also
        --------
        DatetimeIndex.freq : Return the frequency object if it is set, otherwise None.
        PeriodIndex.freq : Return the frequency object if it is set, otherwise None.

        Examples
        --------
        >>> datetimeindex = pd.date_range(
        ...     "2022-02-22 02:22:22", periods=10, tz="America/Chicago", freq="h"
        ... )
        >>> datetimeindex
        DatetimeIndex(['2022-02-22 02:22:22-06:00', '2022-02-22 03:22:22-06:00',
                       '2022-02-22 04:22:22-06:00', '2022-02-22 05:22:22-06:00',
                       '2022-02-22 06:22:22-06:00', '2022-02-22 07:22:22-06:00',
                       '2022-02-22 08:22:22-06:00', '2022-02-22 09:22:22-06:00',
                       '2022-02-22 10:22:22-06:00', '2022-02-22 11:22:22-06:00'],
                      dtype='datetime64[us, America/Chicago]', freq='h')
        >>> datetimeindex.freq
        <Hour>
        )r@   Úfreq©rH   s    rI   rM   zDatetimeIndexOpsMixin.freq§   s   € ð< �z‰z�‰ÐrJ   c                ó.   — | j                   j                  S )a  
        Return Integer representation of the values.

        For :class:`DatetimeIndex` and :class:`TimedeltaIndex`, the
        values are the number of time units (determined by the index
        resolution) since the epoch. For :class:`PeriodIndex`, the
        values are ordinals.

        Returns
        -------
        numpy.ndarray
            An ndarray with int64 dtype.

        See Also
        --------
        Index.values : Return an array representing the data in the Index,
            using native types (datetime64, timedelta64) rather than int64.
        Index.to_numpy : Return a NumPy ndarray of the index values.

        Examples
        --------
        For :class:`DatetimeIndex` with default microsecond resolution:

        >>> idx = pd.DatetimeIndex(["2023-01-01", "2023-01-02"], dtype="datetime64[us]")
        >>> idx.asi8
        array([1672531200000000, 1672617600000000])

        For :class:`TimedeltaIndex` with millisecond resolution:

        >>> idx = pd.TimedeltaIndex(["1 day", "2 days"], dtype="timedelta64[ms]")
        >>> idx.asi8
        array([ 86400000, 172800000])

        For :class:`PeriodIndex`:

        >>> idx = pd.PeriodIndex(["2023-01", "2023-02", "2023-03"], freq="M")
        >>> idx.asi8
        array([636, 637, 638])
        )r@   Úasi8rN   s    rI   rP   zDatetimeIndexOpsMixin.asi8Ç   s   € ðR �z‰z�‰ÐrJ   c                ó˜   — | j                   }|€|S t        | j                  t        «      rt	        |«      j
                  S |j                  S )aÜ  
        Return the frequency object as a string if it's set, otherwise None.

        This property returns a string representation of the frequency
        (e.g., ``'D'`` for daily, ``'h'`` for hourly) when one has been set
        on the index, either explicitly or via inference.

        See Also
        --------
        DatetimeIndex.inferred_freq : Returns a string representing a frequency
            generated by infer_freq.

        Examples
        --------
        For DatetimeIndex:

        >>> idx = pd.DatetimeIndex(["1/1/2020 10:00:00+00:00"], freq="D")
        >>> idx.freqstr
        'D'

        The frequency can be inferred if there are more than 2 points:

        >>> idx = pd.DatetimeIndex(
        ...     ["2018-01-01", "2018-01-03", "2018-01-05"], freq="infer"
        ... )
        >>> idx.freqstr
        '2D'

        For PeriodIndex:

        >>> idx = pd.PeriodIndex(["2023-1", "2023-2", "2023-3"], freq="M")
        >>> idx.freqstr
        'M'
        )rM   Ú
isinstancer@   r-   r(   Ú_freqstrÚfreqstr)rH   rM   s     rI   rT   zDatetimeIndexOpsMixin.freqstrò   sA   € ðH �y‰yˆØˆ<ØˆKÜ�d—j‘j¤+Ô.Ü˜tÓ$×-Ñ-Ð-Ø�|‰|ÐrJ   c                óX  — t        | j                  t        «      r| j                  j                  S | j                  j                  dk(  r6t        | j                  | j                  | j                  j                  ¬«      S t        | j                  d | j                  j                  ¬«      S )NÚM)Úreso)ÚtzrW   )
rR   Údtyper(   Ú_resolution_objÚkindr   rP   rX   r@   Ú_cresorN   s    rI   rZ   z%DatetimeIndexOpsMixin._resolution_obj  sn   € ä�d—j‘j¤+Ô.Ø—:‘:×-Ñ-Ð-Ø�Z‰Z�_‰_ Ò#Ü! $§)¡)¨T¯W©W¸4¿:¹:×;LÑ;LÔMÐMä! $§)¡)°¸4¿:¹:×;LÑ;LÔMÐMrJ   c                ó.   — | j                   j                  S )zO
        Returns day, hour, minute, second, millisecond or microsecond
        )rZ   ÚattrnamerN   s    rI   Ú
resolutionz DatetimeIndexOpsMixin.resolution&  s   € ð
 ×#Ñ#×,Ñ,Ð,rJ   c                ó.   — | j                   j                  S ©N)r@   Ú_hasnarN   s    rI   ÚhasnanszDatetimeIndexOpsMixin.hasnans/  s   € à�z‰z× Ñ Ð rJ   c                ó<  — | j                  |«      ryt        |t        «      sy|j                  j                  dv ryt        |t        | «      «      �sd|j                  t        k(  �r|j                  }| j                  j                  dk(  rd}n| j                  j                  dk(  rd}nd}||vryt        j                  t        j                  |«      d¬	«      }t        |«      }t        |t        | j                  «      «      rt        | «      j                  |«      }�n•| j                  j                  dk(  �r{|d
k(  �rut        j                   dt"        t%        «       ¬«       	  t        | «      |«      }�n=t        |j                  t,        «      �r"t/        d|«      }t        j                  |j0                  «      }|j                  t        k(  r#t        j                  |d¬	«      }t        |«      }nt        |«      }t        |t        | j                  «      «      r	  t        | «      |«      }n„| j                  j                  dk(  rk|j                  t        k(  rXt        j2                  |j0                  «      d
k(  r6t        j                   dt"        t%        «       ¬«       	  t        | «      |«      }t        | «      t        |«      k7  ry| j                  |j                  k(  r*t        j4                  | j6                  |j6                  «      S | j                  j                  dk(  r| j8                  |j8                  k(  s| j                  j                  dk(  r]	 | j                  j;                  |j                  «      \  }}t        j4                  |j=                  d«      |j=                  d«      «      S y# t&        t(        t*        f$ r Y yw xY w# t&        t(        t*        f$ r Y yw xY w# t&        t(        t*        f$ r Y yw xY w# t>        t@        f$ r Y yw xY w)zL
        Determines if two Index objects contain the same elements.
        TFÚiufcrV   )r8   Ú
datetime64ÚdateÚm)Ú	timedeltaÚtimedelta64)Úperiod)Úconvert_non_numericrg   z¿Inferring datetime64 from data containing datetime.date objects is deprecated. In a future version, these will be left as object dtype. Use pd.to_datetime to explicitly convert to datetime64.©Ú
stacklevelr=   Úi8)!Úis_rR   r1   rY   r[   ÚtypeÚobjectÚinferred_typer   Úmaybe_convert_objectsÚnpÚasarrayr/   r@   Ú_simple_newÚwarningsÚwarnr    r"   Ú
ValueErrorÚ	TypeErrorÚOverflowErrorr&   r
   Ú
categoriesÚinfer_dtypeÚarray_equivalent_bytesrP   rX   Ú_ensure_matching_resosÚviewr   r   )rH   ÚotherÚinferredÚ
compatibleÚ	convertedÚcat_valsÚleftÚrights           rI   ÚequalszDatetimeIndexOpsMixin.equals3  sI  € ð �8‰8�EŒ?Øä˜%¤Ô'ØØ�[‰[×Ñ Ñ'ØÜ˜E¤4¨£:Õ.Ø�{‰{œfÓ$à ×.Ñ.�à—:‘:—?‘? cÒ)Ø!C‘JØ—Z‘Z—_‘_¨Ò+Ø!=‘Jà!,�JØ :Ñ-Ø Ü×5Ñ5Ü—J‘J˜uÓ%¸4ô�	ô ;¸9ÓE�	Ü˜i¬¨d¯j©jÓ)9Ô:Ü  ›J×2Ñ2°9Ó=’EØ—Z‘Z—_‘_¨Ó+°¸FÓ0Bä—M‘MðNô 'Ü#3Ó#5õð%Ø *¤ T£
¨5Ó 1šô ˜EŸK™KÔ)9Õ:ÜÐ/°Ó7�ÜŸ:™: e×&6Ñ&6Ó7�Ø—>‘>¤VÒ+Ü #× 9Ñ 9Ø °dô!�Iô !?¸yÓ I‘Iä >¸xÓ H�IÜ˜i¬¨d¯j©jÓ)9Ô:ð%Ø *¤ T£
¨5Ó 1™ð —J‘J—O‘O sÒ*Ø Ÿ™¬&Ò0ÜŸ™¨×(8Ñ(8Ó9¸VÒCô —M‘Mð1ô
 'Ü#3Ó#5õð%Ø *¤ T£
¨5Ó 1˜ô �‹:œ˜e›Ò$ØØ�Z‰Z˜5Ÿ;™;Ò&Ü×-Ñ-¨d¯i©i¸¿¹ÓDÐDØ�j‰j�o‰o Ò$¨¯©°E·H±HÒ)<ÀÇÁÇÁÐTWÒAWðUà"Ÿj™j×?Ñ?ÀÇÁÓL‘��eô ×1Ñ1°$·)±)¸D³/À5Ç:Á:ÈdÓCSÓTÐTØøôe '¬	´=ÐAò %Ù$ð%ûô '¬	´=ÐAò %Ù$ð%ûô& '¬	´=ÐAò %Ù$ð%ûô (Ô)=Ð>ò ÙðúsH   Å'N; È!O Ê&O/ Í(P	 Î;OÏOÏO,Ï+O,Ï/PÐPÐ	PÐPc                ó|   — t        |«       	 | j                  |«       y# t        t        t        t
        f$ r Y yw xY w)aó  
        Return a boolean indicating whether the provided key is in the index.

        Parameters
        ----------
        key : label
            The key to check if it is present in the index.

        Returns
        -------
        bool
            Whether the key search is in the index.

        Raises
        ------
        TypeError
            If the key is not hashable.

        See Also
        --------
        Index.isin : Returns an ndarray of boolean dtype indicating whether the
            list-like key is in the index.

        Examples
        --------
        >>> idx = pd.Index([1, 2, 3, 4])
        >>> idx
        Index([1, 2, 3, 4], dtype='int64')
        >>> 2 in idx
        True
        >>> 6 in idx
        False
        FT)ÚhashÚget_locÚKeyErrorr{   rz   r   )rH   Úkeys     rI   Ú__contains__z"DatetimeIndexOpsMixin.__contains__‘  s@   € ôD 	ˆSŒ	ð	Ø�L‰L˜Ôð øô œ)¤ZÔ1BÐCò 	Ùð	ús   � Ÿ;º;c                ó|   •— t        j                  t        |«      j                  «       «      }t        ‰| �  ||«      S ra   )ru   rv   r4   Úto_numpyÚsuperÚ_convert_tolerance)rH   Ú	toleranceÚtargetÚ	__class__s      €rI   r“   z(DatetimeIndexOpsMixin._convert_toleranceº  s1   ø€ Ü—J‘Jœ|¨IÓ6×?Ñ?ÓAÓBˆ	Ü‰wÑ)¨)°VÓ<Ð<rJ   r   N)Údate_formatc               ó@   — |t        | j                  ||¬«      «      z   S )N)Úna_repr—   )ÚlistÚ_get_values_for_csv)rH   Úheaderr™   r—   s       rI   Ú_format_with_headerz)DatetimeIndexOpsMixin._format_with_headerÂ  s+   € ð
 œØ×$Ñ$¨FÀÐ$ÓLó
ñ 
ð 	
rJ   c                óB   —  | j                   j                  «       |«      S ra   )r@   Ú
_formatter)rH   Úvals     rI   Ú_formatter_funcz%DatetimeIndexOpsMixin._formatter_funcË  s   € Ø&ˆt�z‰z×$Ñ$Ó& sÓ+Ð+rJ   c                óª   •— t         ‰| �  «       }| j                  D ]4  }|dk(  sŒ	| j                  }|�t	        |«      }|j                  d|f«       Œ6 |S )zH
        Return a list of tuples of the (attr,formatted_value).
        rM   )r’   Ú_format_attrsÚ_attributesrT   ÚreprÚappend)rH   ÚattrsÚattribrM   r–   s       €rI   r£   z#DatetimeIndexOpsMixin._format_attrsÎ  s^   ø€ ô ‘Ñ%Ó'ˆØ×&Ñ&ò 	-ˆFà˜ÓØ—|‘|�ØÐ#Ü ›:�DØ—‘˜f d˜^Õ,ð	-ð ˆrJ   c                ód   •— t         ‰| �  |¬«      }| j                  r|d| j                  › �z  }|S )a  
        Return a summarized representation.

        Parameters
        ----------
        name : str
            name to use in the summary representation

        Returns
        -------
        String with a summarized representation of the index
        ©Únamez
Freq: )r’   Ú_summaryrM   rT   )rH   r«   Úresultr–   s      €rI   r¬   zDatetimeIndexOpsMixin._summaryÜ  s8   ø€ ô ‘Ñ! tÐ!Ó,ˆØ�9Š9Ø˜ §¡ Ð/Ñ/ˆFàˆrJ   c                ó    — || j                   kD  S ra   )rZ   )rH   rW   s     rI   Ú_can_partial_date_slicez-DatetimeIndexOpsMixin._can_partial_date_sliceò  s   € ð �d×*Ñ*Ñ*Ð*rJ   c                ó   — t         ‚ra   ©ÚNotImplementedError)rH   rW   Úparseds      rI   Ú_parsed_string_to_boundsz.DatetimeIndexOpsMixin._parsed_string_to_boundsù  s   € Ü!Ð!rJ   c                ó6  — | j                   €d }n	 | j                   j                  }t        |t        j
                  «      rt        |«      }t        j                  ||| j                  ¬«      \  }}t        j                  |«      }||fS # t        $ r d }Y Œpw xY w)N)Úwarn_quarter)rM   Ú	rule_coder²   rR   ru   Ústr_Ústrr   Úparse_datetime_string_with_resorB   r   Úfrom_attrname)rH   ÚlabelrT   r³   Úreso_strrW   s         rI   Ú_parse_with_resoz&DatetimeIndexOpsMixin._parse_with_resoü  s˜   € ð �9‰9ÐØ‰GðØŸ)™)×-Ñ-�ô �eœRŸW™WÔ%ä˜“JˆEä"×BÑBØØØ×+Ñ+ô
Ñˆ�ô
 ×'Ñ'¨Ó1ˆØ�tˆ|Ðøô 'ò ð ’ðús   ‘B
 Â
BÂBc                óŠ   — | j                  |«      \  }}	 | j                  ||«      S # t        $ r}t        |«      |‚d }~ww xY wra   )r¾   Ú_partial_date_slicer�   )rH   rŽ   r³   rW   Úerrs        rI   Ú_get_string_slicez'DatetimeIndexOpsMixin._get_string_slice  sJ   € à×,Ñ,¨SÓ1‰ˆ�ð	)Ø×+Ñ+¨D°&Ó9Ð9øÜò 	)Ü˜3“- SÐ(ûð	)ús   –( ¨	A±=½Ac                ó(  — | j                  |«      st        ‚| j                  ||«      \  }}| j                  j                  }| j                  j
                  }| j                  rot        | «      r&|| d   k  r|| d   k  s|| d   kD  r|| d   kD  rt        ‚|j                   ||«      d¬«      }|j                   ||«      d¬«      }t        ||«      S | j                  rˆt        | «      r&|| d   kD  r|| d   kD  s|| d   k  r|| d   k  rt        ‚|ddd…   }	t        |«      }
|	j                   ||«      d¬«      }|	j                   ||«      d¬«      }t        |
|z
  |
|z
  «      S | ||«      k\  }| ||«      k  }||z  j                  «       d   S )z£
        Parameters
        ----------
        reso : Resolution
        parsed : datetime

        Returns
        -------
        slice or ndarray[intp]
        r   éÿÿÿÿr‡   ©Úsiderˆ   N)r¯   rz   r´   r@   Ú_ndarrayÚ_unboxÚis_monotonic_increasingÚlenr�   ÚsearchsortedÚsliceÚis_monotonic_decreasingÚnonzero)rH   rW   r³   Út1Út2ÚvalsÚunboxr‡   rˆ   Úreversed_valsÚnvalsÚrev_leftÚ	rev_rightÚlhs_maskÚrhs_masks                  rI   rÀ   z)DatetimeIndexOpsMixin._partial_date_slice  s©  € ð  ×+Ñ+¨DÔ1ÜÐà×.Ñ.¨t°VÓ<‰ˆˆBØ�z‰z×"Ñ"ˆØ—
‘
×!Ñ!ˆà×'Ò'Ü�4ŒyØ�d˜1‘g’ " t¨A¡w¢,°B¸¸b¹²MÀbÈ4ÐPRÉ8Âmô �ð ×$Ñ$¡U¨2£Y°VÐ$Ó<ˆDØ×%Ñ%¡e¨B£i°gÐ%Ó>ˆEÜ˜˜uÓ%Ð%à×)Ò)Ü�4ŒyØ�d˜1‘g’ " t¨A¡w¢,°B¸¸b¹²MÀbÈ4ÐPRÉ8Âmô �ð !¡ 2 ™JˆMÜ˜“IˆEØ$×1Ñ1±%¸³)À&Ð1ÓIˆHØ%×2Ñ2±5¸³9À7Ð2ÓKˆIÜ˜ Ñ*¨E°HÑ,<Ó=Ð=ð ™u R›yÑ(ˆHØ™u R›yÑ(ˆHð ˜xÑ'×0Ñ0Ó2°1Ñ5Ð5rJ   c                óB  — t        |t        «      r3	 | j                  |«      \  }}| j                  «      \  }}|dk(  r|S |S t        || j                  j                  «      s| j	                  d|«       |S # t        $ r}| j	                  d||«       Y d}~Œsd}~ww xY w)aL  
        If label is a string, cast it to scalar type according to resolution.

        Parameters
        ----------
        label : object
        side : {'left', 'right'}

        Returns
        -------
        label : object

        Notes
        -----
        Value of `side` parameter should be validated in caller.
        rÌ   Nr‡   )rR   r¹   r¾   rz   Ú_raise_invalid_indexerr´   r@   Ú_recognized_scalars)rH   r¼   rÆ   r³   rW   rÁ   ÚlowerÚuppers           rI   Ú_maybe_cast_slice_boundz-DatetimeIndexOpsMixin._maybe_cast_slice_boundW  s¥   € ô" �eœSÔ!ðAØ#×4Ñ4°UÓ;‘�˜ð  ×8Ñ8¸¸vÓF‰LˆE�5Ø  FšN�5Ð5°Ð5Ü˜E 4§:¡:×#AÑ#AÔBØ×'Ñ'¨°Ô7àˆøô ò Að ×+Ñ+¨G°U¸C×@Ñ@ûð	Aús   ’A8 Á8	BÂBÂBc                ó   — t         ‚)ae  
        Shift index by desired number of time frequency increments.

        This method is for shifting the values of datetime-like indexes
        by a specified time increment a given number of times.

        Parameters
        ----------
        periods : int, default 1
            Number of periods (or increments) to shift by,
            can be positive or negative.
        freq : pandas.DateOffset, pandas.Timedelta or string, optional
            Frequency increment to shift by.
            If None, the index is shifted by its own `freq` attribute.
            Offset aliases are valid strings, e.g., 'D', 'W', 'M' etc.

        Returns
        -------
        pandas.DatetimeIndex
            Shifted index.

        See Also
        --------
        Index.shift : Shift values of Index.
        PeriodIndex.shift : Shift values of PeriodIndex.
        r±   )rH   ÚperiodsrM   s      rI   ÚshiftzDatetimeIndexOpsMixin.shift{  s
   € ô6 "Ð!rJ   c                óæ   — 	 | j                   j                  |d¬«      }t        ||j                  ¬«      S # t        t        f$ r+ t	        |t
        «      st        j                  |«      }n|}Y ŒPw xY w)zT
        Analogue to maybe_cast_indexer for get_indexer instead of get_loc.
        T)Úallow_object©rY   )
r@   Ú_validate_listlikerz   r{   rR   r,   ÚcomÚasarray_tuplesafer1   rY   )rH   ÚkeyarrÚress      rI   Ú_maybe_cast_listlike_indexerz2DatetimeIndexOpsMixin._maybe_cast_listlike_indexerš  sk   € ð	Ø—*‘*×/Ñ/°ÀTÐ/ÓJˆCô �S §	¡	Ô*Ð*øô œIÐ&ò 	Ü˜f¤nÔ5ä×+Ñ+¨FÓ3‘ð �ùð	ús   ‚6 ¶7A0Á/A0)rD   rA   rE   z
int | None©ÚreturnúBaseOffset | None)rì   znpt.NDArray[np.int64])rì   r¹   )rì   r   ©rì   rA   )r‚   r   rì   rA   )rŽ   r   rì   rA   )rœ   ú	list[str]r™   r¹   r—   ú
str | Nonerì   rï   ra   )rW   r   rì   rA   )rW   r   )r¼   r¹   rì   ztuple[datetime, Resolution])rŽ   r¹   rì   úslice | npt.NDArray[np.intp])rW   r   r³   r8   rì   rñ   )rÆ   r¹   ©é   N©rà   Úintrì   r	   )"Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_can_hold_stringsÚ__annotations__rB   rG   ÚpropertyrM   rP   rT   r!   rZ   r_   rc   r‰   r�   r“   Ú_default_na_repr�   r¡   r£   r¬   r   r¯   r´   r¾   rÂ   rÀ   rÞ   rá   rê   Ú__classcell__©r–   s   @rI   r?   r?   l   s_  ø… ñð ÐØ7Ó7Ø€M�4Óà%)¸aõ 09ðd òó ðð> ò(ó ð(ðT ò(ó ð(ðT òNó ðNð ò-ó ð-ð ò!ó ð!ó\ó|'ôR=ð €Oð LPñ
Ø"ð
Ø,/ð
Ø>Hð
à	ó
ó,ôöð, ò+ó ð+ó"óó2)ð ð76àð76ð ð76ð 
&ò	76ó ð76órôH"ö>+rJ   r?   c                  óÀ  ‡ — e Zd ZU dZded<   ddgZddgZdZded<   ej                  Z
ej                  Zej                  Zed4d	„«       Zej"                  d5d
„«       Zd6d7ˆ fd„Zd8ˆ fd„Zd9ˆ fd„Zd:d;ˆ fd„Zd5d„Zd4d„Zˆ fd„Z	 	 d<	 	 	 d=ˆ fd„Zed>d„«       Zd?d„Zd„ Zed@d„«       ZdAdBd„ZedCd„«       Z edDd„«       Z!edEd„«       Z"dFd„Z#d9d„Z$d9d„Z%d9d„Z&dGdHd„Z'd „ Z(dId!„Z)dId"„Z*dJd#„Z+ˆ fd$„Z,d%„ Z-	 	 	 	 	 	 	 	 dKˆ fd&„Z.d@d'„Z/dLd(„Z0dMdNˆ fd)„Z1dOˆ fd*„Z2ˆ fd+„Z3d4d,„Z4dPˆ fd-„Z5dQd.„Z6dRd/„Z7d9ˆ fd0„Z8dRˆ fd1„Z9d2e:jv                  e:jv                  f	 	 	 	 	 dSd3„Z<ˆ xZ=S )TÚDatetimeTimedeltaMixinze
    Mixin class for methods shared by DatetimeIndex and TimedeltaIndex,
    but not PeriodIndex
    zDatetimeArray | TimedeltaArrayr@   r«   rM   Nrí   Ú_freqc                ó   — | j                   S rL   )r  rN   s    rI   rM   zDatetimeTimedeltaMixin.freqº  s   € ð8 �z‰zÐrJ   c                ó  — | j                   }|�qt        |«      }|j                  ||«       |j                  j                  dk(  r!t        |t        t        f«      st        d«      ‚|j                  dkD  rt        d«      ‚|| _        y )Nrh   ú(TimedeltaArray/Index freq must be a Tickró   zCannot set freq with ndim > 1)r@   r   Ú_validate_frequencyrY   r[   rR   r   r   r{   Úndimrz   r  )rH   ÚvalueÚarrs      rI   rM   zDatetimeTimedeltaMixin.freqØ  sr   € à�j‰jˆØÐÜ˜eÓ$ˆEØ×#Ñ# C¨Ô/Ø�y‰y�~‰~ Ò$¬Z¸ÄÄc¸{Ô-KÜÐ JÓKÐKà�x‰x˜!Š|Ü Ð!@ÓAÐAàˆ�
rJ   c                óv   •— t         ‰| �  ||¬«      }t        |t        | «      «      r| j                  |_        |S )N)Úcopy)r’   ÚastyperR   rq   r  )rH   rY   r  r­   r–   s       €rI   r  zDatetimeTimedeltaMixin.astypeæ  s3   ø€ Ü‘‘ ¨D�Ó1ˆÜ�fœd 4›jÔ)àŸ:™:ˆFŒLØˆrJ   c                ó`   •— t         ‰| �  ||«      }t        |t        | «      «      rd |_        |S ra   )r’   ÚputmaskrR   rq   r  )rH   Úmaskr  r­   r–   s       €rI   r  zDatetimeTimedeltaMixin.putmaskí  s-   ø€ ä‘‘  uÓ-ˆÜ�fœd 4›jÔ)ØˆFŒLØˆrJ   c                óF   •— t         ‰| �  «       }| j                  |_        |S ra   )r’   Ú_viewr  )rH   r­   r–   s     €rI   r  zDatetimeTimedeltaMixin._viewô  s   ø€ Ü‘‘“ˆØ—z‘zˆŒØˆrJ   c                óL   •— t         ‰| �  ||¬«      }| j                  |_        |S )N)r«   Údeep)r’   r  r  )rH   r«   r  r­   r–   s       €rI   r  zDatetimeTimedeltaMixin.copyù  s%   ø€ Ü‘‘ 4¨d�Ó3ˆØ—z‘zˆŒØˆrJ   c                óP  — | j                   }|€d| _        y|dk(  r%|�|| _        yt        | j                  «      | _        y|t        j
                  u r|| _        y|€.t        |«      }t        |«      j                  | |«       || _        yt        |«      }||k7  �rt        | «      dk(  r/|j                  | d   «      sât        d|› d|j                  › �«      ‚t        |t        «      rŽt        | «      dkD  r€t        |«      }|j                  | j                   «      }||k7  s:t#        j$                  | j&                  «      |j(                  k(  j+                  «       sDt        d|› d|j                  › �«      ‚t        | «      dkD  rt        |«      j                  | |«       || _        y)a  
        Constructor helper to pin the appropriate ``freq`` attribute on self.

        ``inferred`` is the frequency inferred from the input data (or ``None``
        if no freq could be inferred), as determined by the caller before
        wrapping the array in this Index.
        NÚinferró   r   zInferred frequency z9 from passed values does not conform to passed frequency )r@   r  r   Ú_inferred_freq_strr   Ú
no_defaultrq   r  rÊ   Úis_on_offsetrz   rT   rR   r   r   Úas_unitÚunitru   ÚdiffrP   Ú_valueÚall)rH   rM   rƒ   r	  ÚdeltaÚsteps         rI   Ú	_pin_freqz DatetimeTimedeltaMixin._pin_freqþ  s‡  € ð �j‰jˆØˆ<àˆD�JØ�WŠ_ØÐ#à%�•
ô ' t×'>Ñ'>Ó?�•
Ø”S—^‘^Ñ#ð "ˆD�JØÐô ˜T“?ˆDÜ�‹I×)Ñ)¨$°Ô5ØˆD�Jô ˜T“?ˆDØ�xÓô �t“9 ’>Ø×,Ñ,¨T°!©WÔ5Ü(Ø1°(°ð <Kà#Ÿ|™|˜nð.óð ô
   ¤dÔ+´°D³	¸A²ô & d›O�EØ Ÿ=™=¨¯©Ó3�DØ˜u’}¬R¯W©W°T·Y±YÓ-?À4Ç;Á;Ñ-N×,SÑ,SÔ,UÜ(Ø1°(°ð <Kà#Ÿ|™|˜nð.óð ô
 ˜“Y ’]Ü˜“I×1Ñ1°$¸Ô=ØˆD�JrJ   c                óø  — t        j                  |«      syt        |t        «      rt	        |«      }nnt        |t
        j                  «      rt	        |«      }nHt        |t
        j                  «      rt        |«      }n"t        |t        t        f«      s	 t	        |«      }t        | j                  t        «      r| j                  S | j                  j                  dk(  rt        |t        «      r| j                  S | j                  j                  dk(  rGt        |t        «      r7|j                  �t!        j"                  |j                  «      r| j                  S t        j$                  | j                  d«      r<t        | j                  t&        «      r"t        |t        t        f«      r| j                  S y# t        t        t        f$ r, 	 t        |«      }n# t        t        t        f$ r Y Y yw xY wY �ŒWw xY w)zP
        Check if we can preserve self.freq in addition or subtraction.
        Nrh   rV   )r   Ú	is_scalarrR   r   r   ru   rj   rf   r   rz   r{   r|   rM   rY   r[   rX   r   Úis_utcÚis_np_dtyper   ©rH   r‚   s     rI   Ú_get_arithmetic_result_freqz2DatetimeTimedeltaMixin._get_arithmetic_result_freq@  st  € ô �}‰}˜UÔ#Øô �eœTÔ"Ü˜eÓ$‰EÜ˜œrŸ~™~Ô.Ü˜eÓ$‰EÜ˜œrŸ}™}Ô-Ü˜eÓ$‰EÜ˜E¤I¬yÐ#9Ô:ð Ü! %Ó(�ô �d—i‘i¤Ô&Ø—9‘9ÐØ�Z‰Z�_‰_ Ò#¬
°5¼)Ô(DØ—9‘9Ðà�J‰J�O‰O˜sÒ"Ü˜5¤)Ô,Ø—‘Ð!¤Y×%5Ñ%5°e·h±hÔ%?à—9‘9Ðä�O‰O˜DŸJ™J¨Ô,Ü˜4Ÿ9™9¤cÔ*Ü˜5¤9¬iÐ"8Ô9à—9‘9Ðàøô/ ¤	¬=Ð9ò  ð Ü% eÓ,‘EøÜ"¤I¬}Ð=ò  Úð úò ð ús6   ÂF9 Æ9G9ÇGÇG9ÇG2Ç.G9Ç1G2Ç2G9Ç8G9c                ó:  •— t         ‰| �  ||«      }|t        u r|S |t        j                  t
        j                  t        j                  t
        j                  fv r?| j                  |«      }|�,t        |t        «      r|t
        j                  u r| }||_        |S ra   )r’   Ú_arith_methodÚNotImplementedÚoperatorÚaddr*   ÚraddÚsubÚrsubr&  rR   r  r  )rH   r‚   Úopr­   Únew_freqr–   s        €rI   r(  z$DatetimeTimedeltaMixin._arith_methodn  s�   ø€ Ü‘Ñ& u¨bÓ1ˆØ”^Ñ#ØˆMØ”(—,‘,¤	§¡´·±¼i¿n¹nÐMÑMØ×7Ñ7¸Ó>ˆHØÐ#¬
°6Ô;QÔ(RØœŸ™Ñ'Ø (˜y�HØ'�”ØˆrJ   c                óZ  •— | j                   � |rU| j                   j                  dk  r<t        j                  t	        | «      dz
  ddt        j
                  ¬«      }| d d d…   }n>t        j                  t	        | «      t        j
                  ¬«      }| j                  «       }d |_        ||fS t	        | «      dkD  r`| j                  s| j                  rHt        j                  | j                  j                  | j                  |«      \  }}| |   }d |_        ||fS t        ‰| �=  ||¬«      S )Nr   ró   rÄ   rä   )ÚsortÚuse_na_sentinel)rM   Únru   ÚarangerÊ   Úintpr  Ú_namerÉ   rÍ   r)   Úfactorize_monotonic_codesr@   rÇ   r’   Ú	factorize)rH   r2  r3  ÚcodesÚuniquesÚuniques_indexerr–   s         €rI   r9  z DatetimeTimedeltaMixin.factorizez  sý   ø€ ð
 �9‰9Ð á˜Ÿ	™	Ÿ™ ašÜŸ	™	¤# d£)¨a¡-°°R¼r¿w¹wÔG�Ø™t ˜t™*‘äŸ	™	¤# d£)´2·7±7Ô;�ØŸ)™)›+�Ø ˆGŒMØ˜'�>Ð!Üˆt‹9�qŠ=Ø×(Ò(¨D×,HÒ,Hô &0×%IÑ%IØ—
‘
×#Ñ# T×%AÑ%AÀ4ó&Ñ"ˆE�?ð ˜?Ñ+ˆGØ ˆGŒMØ˜'�>Ð!Ü‰wÑ  d¸OÐ ÓLÐLrJ   c                ó.   — | j                   j                  S )aæ  
        The precision unit of the datetime data.

        Returns the precision unit for the dtype of the index. This is the
        smallest time frame that can be stored within this dtype.

        Returns
        -------
        str
            Unit string representation (e.g. ``"ns"``).

        See Also
        --------
        DatetimeIndex.as_unit : Convert to the given unit.
        TimedeltaIndex.as_unit : Convert to the given unit.

        Examples
        --------
        For a DatetimeIndex:

        >>> idx = pd.DatetimeIndex(["2020-01-02 01:02:03.004005006"])
        >>> idx.unit
        'ns'

        >>> idx_s = pd.DatetimeIndex(["2020-01-02 01:02:03"], dtype="datetime64[s]")
        >>> idx_s.unit
        's'

        For a TimedeltaIndex:

        >>> tdidx = pd.TimedeltaIndex(["1 day 3 min 2 us 42 ns"])
        >>> tdidx.unit
        'ns'

        >>> tdidx_s = pd.TimedeltaIndex(["1 day 3 min"], dtype="timedelta64[s]")
        >>> tdidx_s.unit
        's'
        )r@   r  rN   s    rI   r  zDatetimeTimedeltaMixin.unit•  s   € ðP �z‰z�‰ÐrJ   c                óª   — | j                   j                  |«      }t        | «      j                  || j                  ¬«      }| j
                  |_        |S )a�  
        Convert to a dtype with the given unit resolution.

        This method is for converting the dtype of a ``DatetimeIndex`` or
        ``TimedeltaIndex`` to a new dtype with the given unit
        resolution/precision.

        Parameters
        ----------
        unit : {'s', 'ms', 'us', 'ns'}

        Returns
        -------
        same type as self
            Converted to the specified unit.

        See Also
        --------
        Timestamp.as_unit : Convert to the given unit.
        Timedelta.as_unit : Convert to the given unit.
        DatetimeIndex.as_unit : Convert to the given unit.
        TimedeltaIndex.as_unit : Convert to the given unit.

        Examples
        --------
        For :class:`pandas.DatetimeIndex`:

        >>> idx = pd.DatetimeIndex(["2020-01-02 01:02:03.004005006"])
        >>> idx
        DatetimeIndex(['2020-01-02 01:02:03.004005006'],
                      dtype='datetime64[ns]', freq=None)
        >>> idx.as_unit("s")
        DatetimeIndex(['2020-01-02 01:02:03'], dtype='datetime64[s]', freq=None)

        For :class:`pandas.TimedeltaIndex`:

        >>> tdelta_idx = pd.to_timedelta(["1 day 3 min 2 us 42 ns"])
        >>> tdelta_idx
        TimedeltaIndex(['1 days 00:03:00.000002042'],
                        dtype='timedelta64[ns]', freq=None)
        >>> tdelta_idx.as_unit("s")
        TimedeltaIndex(['1 days 00:03:00'], dtype='timedelta64[s]', freq=None)
        rª   )r@   r  rq   rw   r«   rM   r  )rH   r  r	  r­   s       rI   r  zDatetimeTimedeltaMixin.as_unit¿  sF   € ðX �j‰j× Ñ  Ó&ˆÜ�d“×'Ñ'¨°$·)±)Ð'Ó<ˆØ—y‘yˆŒØˆrJ   c                ó€  — |€nst        |t        «      r:| j                  j                  dk(  rJt        |t        t
        f«      s4t        d«      ‚|dk(  rt        | j                  «      }nt        d|›�«      ‚| j                  j                  «       }t        | «      j                  || j                  ¬«      }||_        |S )Nrh   r  r  zInvalid frequency: rª   )rR   r   rY   r[   r   r   r{   r   r  rz   r@   r�   rq   rw   r7  r  )rH   rM   r	  r­   s       rI   Ú
_with_freqz!DatetimeTimedeltaMixin._with_freqð  s    € àˆ<ØÜ˜œjÔ)Ø�z‰z�‰ #Ò%¬j¸ÄÄc¸{Ô.KÜÐ JÓKÐKØ�WŠ_Ü˜T×4Ñ4Ó5‰DäÐ2°4°(Ð;Ó<Ð<à�j‰j�o‰oÓˆÜ�d“×'Ñ'¨°$·*±*Ð'Ó=ˆØˆŒØˆrJ   c                óà   — t        | j                  t        «      rt        j                  dt
        d¬«       | j                  j                  }|j                  «       }d|j                  _
        |S )Na›  DatetimeIndex.values returning an ndarray that drops timezone information is deprecated. In a future version, this will return the underlying DatetimeArray instead. Use 'DatetimeIndex.tz_convert(None).to_numpy()' to get a NumPy array of UTC values, or 'DatetimeIndex.array' to get the ExtensionArray.
See https://pandas.pydata.org/docs/dev/whatsnew/v3.1.0.html#whatsnew-310-deprecations-values for more details.ró   rm   F)rR   rY   r'   rx   ry   r    r@   rÇ   r�   ÚflagsÚ	writeable)rH   Údatas     rI   ÚvalueszDatetimeTimedeltaMixin.values  sX   € ô �d—j‘j¤/Ô2Ü�M‰Mð%ô àõð �z‰z×"Ñ"ˆØ�y‰y‹{ˆØ$ˆ�
‰
ÔØˆrJ   c                ó  — |�4|| j                   k7  r%t        |t        «      rt        |«      }||z  }| |z   S |dk(  st	        | «      dk(  r| j                  «       S | j                   €t        d«      ‚| d   || j                   z  z   }| d   || j                   z  z   }| j                  j                  ||d| j                   | j                  ¬«      }t        | «      j                  || j                  ¬«      }| j                   |_        |S )ad  
        Shift index by desired number of time frequency increments.
        This method is for shifting the values of datetime-like indexes
        by a specified time increment a given number of times.

        Parameters
        ----------
        periods : int, default 1
            Number of periods (or increments) to shift by,
            can be positive or negative.
        freq : pandas.DateOffset, pandas.Timedelta or string, optional
            Frequency increment to shift by.
            If None, the index is shifted by its own `freq` attribute.
            Offset aliases are valid strings, e.g., 'D', 'W', 'M' etc.

        Returns
        -------
        pandas.DatetimeIndex
            Shifted index.

        See Also
        --------
        Index.shift : Shift values of Index.
        PeriodIndex.shift : Shift values of PeriodIndex.
        Nr   zCannot shift with no freqrÄ   )ÚstartÚendrà   rM   r  rª   )rM   rR   r¹   r   rÊ   r  r   r@   Ú_generate_ranger  rq   rw   r«   r  )rH   rà   rM   ÚoffsetrG  rH  r	  r­   s           rI   rá   zDatetimeTimedeltaMixin.shift  sù   € ð4 Ð ¨¯	©	Ò 1Ü˜$¤Ô$Ü  “�Ø˜t‘^ˆFØ˜&‘=Ð à�aŠ<œ3˜t›9¨š>à—9‘9“;Ðà�9‰9ÐÜ$Ð%@ÓAÐAà�Q‘˜' D§I¡IÑ-Ñ-ˆØ�2‰h˜ 4§9¡9Ñ,Ñ,ˆð
 �j‰j×(Ñ(Ø˜S¨$°T·Y±YÀTÇYÁYð )ó 
ˆô �d“×'Ñ'¨°$·)±)Ð'Ó<ˆØ—y‘yˆŒØˆrJ   c                ó.   — | j                   j                  S )zP
        Internal version of inferred_freq without deprecation warning.
        )r@   r  rN   s    rI   r  z)DatetimeTimedeltaMixin._inferred_freq_strJ  s   € ð
 �z‰z×,Ñ,Ð,rJ   c                óB   — t        j                  | j                  d«      S )a6  
        Return the inferred frequency of the index.

        .. deprecated:: 3.1.0
            A future version of pandas will return a :class:`BaseOffset` instead of
            a string. Use
            ``pd.set_option('future.infer_freq_returns_offset', True)`` to opt
            in to the future behavior.

        Attempts to determine the frequency of the index by analyzing the
        differences between consecutive values using ``infer_freq``.

        Returns
        -------
        str or None
            A string representing a frequency generated by ``infer_freq``.
            Returns ``None`` if the frequency cannot be inferred.

        See Also
        --------
        DatetimeIndex.freqstr : Return the frequency object as a string if it's set,
            otherwise ``None``.

        Examples
        --------
        For ``DatetimeIndex``:

        >>> idx = pd.DatetimeIndex(["2018-01-01", "2018-01-03", "2018-01-05"])
        >>> idx.inferred_freq  # doctest: +SKIP
        '2D'

        For ``TimedeltaIndex``:

        >>> tdelta_idx = pd.to_timedelta(["0 days", "10 days", "20 days"])
        >>> tdelta_idx
        TimedeltaIndex(['0 days', '10 days', '20 days'],
                       dtype='timedelta64[us]', freq=None)
        >>> tdelta_idx.inferred_freq  # doctest: +SKIP
        '10D'
        Úinferred_freq)r5   Úmaybe_convert_inferred_freqr  rN   s    rI   rM  z$DatetimeTimedeltaMixin.inferred_freqQ  s#   € ôT ×6Ñ6Ø×#Ñ# _ó
ð 	
rJ   c                óô   — t        d| j                  «      }t        |«      j                  | j                  «      j
                  }t        | d   j
                  | d   j
                  |z   |«      }t        |«      S )Nr   r   rÄ   )r
   rM   r   r  r  r  Úranger3   )rH   rM   ÚtickÚrngs       rI   Ú_as_range_indexz&DatetimeTimedeltaMixin._as_range_index‚  s_   € ô �F˜DŸI™IÓ&ˆÜ˜‹×&Ñ& t§y¡yÓ1×8Ñ8ˆÜ�D˜‘G—N‘N D¨¡H§O¡O°dÑ$:¸DÓAˆÜ˜#‹ÐrJ   c                ón   — t        | j                  t        «      xr t        |j                  t        «      S ra   )rR   rM   r   r%  s     rI   Ú_can_range_setopz'DatetimeTimedeltaMixin._can_range_setop‹  s#   € Ü˜$Ÿ)™)¤TÓ*ÒK¬z¸%¿*¹*ÄdÓ/KÐKrJ   c                óø  — d }t        |«      s| j                  }nSt        |t        «      rCt	        t        |j                  | j                  ¬«      j                  | j                  «      «      }|j                  j                  | j                  j                  j                  «      }t        | j                  «      j                  || j                  ¬«      }t!        d| j#                  ||«      «      }||_        |S )N©r  rä   r	   )rÊ   rM   rR   r3   r   r   r  r  r  rE  r�   r@   rÇ   rY   rq   rw   r
   Ú_wrap_setop_resultr  )rH   r‚   Úres_i8r0  Ú
res_valuesr	  r­   s          rI   Ú_wrap_range_setopz(DatetimeTimedeltaMixin._wrap_range_setopŽ  sÃ   € ØˆÜ�6Œ{à—y‘y‰HÜ˜¤
Ô+Ü Ü˜&Ÿ+™+¨D¯I©IÔ6×>Ñ>¸t¿y¹yÓIóˆHð —]‘]×'Ñ'¨¯
©
×(;Ñ(;×(AÑ(AÓBˆ
Ü�4—:‘:Ó×*Ñ*ð Ø—*‘*ð +ó 
ˆô �f˜d×5Ñ5°e¸SÓAÓBˆØˆŒØˆrJ   c                ó|   — | j                   }|j                   }|j                  ||¬«      }| j                  ||«      S ©N©r2  )rS  Úintersectionr[  ©rH   r‚   r2  r‡   rˆ   rY  s         rI   Ú_range_intersectz'DatetimeTimedeltaMixin._range_intersect©  s@   € à×#Ñ#ˆØ×%Ñ%ˆØ×"Ñ" 5¨tÐ"Ó4ˆØ×%Ñ% e¨VÓ4Ð4rJ   c                ó|   — | j                   }|j                   }|j                  ||¬«      }| j                  ||«      S r]  )rS  Úunionr[  r`  s         rI   Ú_range_unionz#DatetimeTimedeltaMixin._range_union°  s=   € à×#Ñ#ˆØ×%Ñ%ˆØ—‘˜E¨�Ó-ˆØ×%Ñ% e¨VÓ4Ð4rJ   c                ó<  — t        d|«      }| j                  |«      r| j                  ||¬«      S | j                  |«      sJt	        j
                  | ||¬«      }| j                  ||«      }|j                  d«      j                  d«      S | j                  ||«      S )z_
        intersection specialized to the case with matching dtypes and both non-empty.
        r  r^  Nr  )	r
   rU  ra  Ú_can_fast_intersectr1   Ú_intersectionrX  r@  Ú_fast_intersect)rH   r‚   r2  r­   s       rI   rg  z$DatetimeTimedeltaMixin._intersection·  sœ   € ô Ð-¨uÓ5ˆà× Ñ  Ô'Ø×(Ñ(¨°TÐ(Ó:Ð:à×'Ñ'¨Ô.Ü×(Ñ(¨¨u¸4Ô@ˆFð ×,Ñ,¨U°FÓ;ˆFà×$Ñ$ TÓ*×5Ñ5°gÓ>Ð>ð ×'Ñ'¨¨tÓ4Ð4rJ   c                ó,  — | d   |d   k  r| |}}n|| }}t        |d   |d   «      }|d   }||k  r| d d S t        |j                  ||«      Ž }|j                  |   }t	        | «      j                  || j                  ¬«      }	| j                  |	_        |	S )Nr   rÄ   rª   )	ÚminrÌ   Ú
slice_locsÚ_valuesrq   rw   r«   rM   r  )
rH   r‚   r2  r‡   rˆ   rH  rG  Úlslicer	  r­   s
             rI   rh  z&DatetimeTimedeltaMixin._fast_intersectÎ  s¥   € à�‰7�e˜A‘hÒØ �%‰Dà �%ˆDô �$�r‘(˜E "™IÓ&ˆØ�a‘ˆà�Š;Ø˜˜�8ˆOä˜Ÿ™¨¨sÓ3Ð4ˆØ�l‰l˜6Ñ"ˆÜ�d“×'Ñ'¨°$·)±)Ð'Ó<ˆØ—y‘yˆŒØˆrJ   c                óö  — | j                   €y|j                   | j                   k7  ry| j                  sy| j                   }t        |t        «      ry|j                  dk7  ry| d   }|d   }t        |t
        «      r:|j                  «       |j                  f|j                  «       |j                  fk7  ryt        |t        «      r4|j                  €(|j                  «       |j                  «       z
  dz  dk7  ryy)NFró   r   é   T)rM   rÉ   rR   r   r4  r   ÚtimeÚ
nanosecondr   ÚweekdayÚ	toordinal)rH   r‚   rM   Ú
left_startÚright_starts        rI   rf  z*DatetimeTimedeltaMixin._can_fast_intersectã  sï   € à�9‰9ÐØà�Z‰Z˜4Ÿ9™9Ò$Øà×-Ò-àà�y‰yˆô �dÔ/Ô0Øð �6‰6�QŠ;Øð ˜!‘Wˆ
Ø˜A‘hˆô �j¤)Ô,Ø—‘Ó! :×#8Ñ#8Ð9Ø× Ñ Ó"Ø×&Ñ&ð>ò ð ô �dœDÔ! d§l¡lÐ&:Ø×$Ñ$Ó&¨×)>Ñ)>Ó)@Ñ@ÀAÑEÈÒJØàrJ   c                óê   — | j                   }|�||j                   k7  ry| j                  syt        | «      dk(  st        |«      dk(  ry| d   |d   k  r| |}}n|| }}|d   }|d   }|||z   k(  xs ||v S )NFr   TrÄ   )rM   rÉ   rÊ   )rH   r‚   rM   r‡   rˆ   ru  Úleft_ends          rI   Ú_can_fast_unionz&DatetimeTimedeltaMixin._can_fast_union  s—   € ð �y‰yˆàˆ<˜4 5§:¡:Ò-Øà×+Ò+ð äˆt‹9˜Š>œS ›Z¨1š_àð �‰7�e˜A‘hÒØ �%‰Dà �%ˆDà˜A‘hˆØ˜‘8ˆð ˜x¨$™Ñ.ÒF°;À$Ð3FÐFrJ   c                óZ  — | d   |d   k  r| |}}n|| }}|d   }|d   }||k  r‡|j                  |d¬«      }|j                  |d  }t        |j                  |g«      }t        |t	        | j
                  «      «      sJ ‚t	        | «      j                  |«      }	| j                  |	_        |	S |S )Nr   rÄ   rˆ   rÅ   )	rË   rl  r%   rR   rq   r@   rw   rM   r  )
rH   r‚   r‡   rˆ   rw  Ú	right_endÚlocÚright_chunkÚdatesr­   s
             rI   Ú_fast_unionz"DatetimeTimedeltaMixin._fast_union4  s¾   € ð
 �‰7�e˜A‘hÒØ �%‰Dà �%ˆDà˜‘8ˆØ˜"‘Iˆ	ð �iÒØ×$Ñ$ X°GÐ$Ó<ˆCØŸ-™-¨¨Ð-ˆKÜ! 4§<¡<°Ð"=Ó>ˆEô ˜e¤T¨$¯*©*Ó%5Ô6Ð6Ð6Ü˜$“Z×+Ñ+¨EÓ2ˆFØŸ9™9ˆFŒLØˆMàˆKrJ   c                ót  •— t        |t        | «      «      sJ ‚| j                  |j                  k(  sJ ‚| j                  |«      r| j	                  ||¬«      S | j                  |«      r |dus| d   |d   k  r| j                  |«      S | j                  |t        ‰| �%  ||«      «      }|j                  d«      S )Nr^  Fr   r  )rR   rq   rY   rU  rd  rx  r~  rX  r’   Ú_unionr@  )rH   r‚   r2  r­   r–   s       €rI   r€  zDatetimeTimedeltaMixin._unionO  s¹   ø€ ä˜%¤ d£Ô,Ð,Ð,Ø�z‰z˜UŸ[™[Ò(Ð(Ð(à× Ñ  Ô'Ø×$Ñ$ U°Ð$Ó6Ð6à×Ñ Ô&¨D¸Ñ,=ÀÀaÁÈEÐRSÉHÒATð
 ×#Ñ# EÓ*Ð*ð ×,Ñ,¨U´E±G±NÀ5È$Ó4OÓPˆFØ×$Ñ$ WÓ-Ð-rJ   c                óD   — d}| j                  |«      r| j                  }|S )zK
        Get the freq to attach to the result of a join operation.
        N)rx  rM   )rH   r‚   rM   s      rI   Ú_get_join_freqz%DatetimeTimedeltaMixin._get_join_freqe  s%   € ð ˆØ×Ñ Ô&Ø—9‘9ˆDØˆrJ   c                óÔ   •— |j                   | j                   k(  sJ |j                   | j                   f«       ‚t        ‰| �	  |||||«      \  }}}| j                  |«      |_        |||fS ra   )rY   r’   Ú_wrap_join_resultr‚  r  )rH   Újoinedr‚   ÚlidxÚridxÚhowÚ
join_indexr–   s          €rI   r„  z(DatetimeTimedeltaMixin._wrap_join_resultn  sp   ø€ ð �{‰{˜dŸj™jÒ(ÐC¨5¯;©;¸¿
¹
Ð*CÓCÐ(Ü!&¡Ñ!:Ø�E˜4  só"
Ñˆ
�D˜$ð  ×.Ñ.¨uÓ5ˆ
ÔØ˜4 Ð%Ð%rJ   c                óL   — | j                   j                  j                  d«      S )Nro   )r@   rÇ   r�   rN   s    rI   Ú_get_engine_targetz)DatetimeTimedeltaMixin._get_engine_target}  s   € à�z‰z×"Ñ"×'Ñ'¨Ó-Ð-rJ   c                ó–   — |j                  | j                  j                  j                  «      }| j                  j	                  |«      S ra   )r�   r@   rÇ   rY   Ú_from_backing_data)rH   r­   s     rI   Ú_from_join_targetz(DatetimeTimedeltaMixin._from_join_target�  s5   € à—‘˜TŸZ™Z×0Ñ0×6Ñ6Ó7ˆØ�z‰z×,Ñ,¨VÓ4Ð4rJ   c                óh  •— | j                   r–t        |t        t        f«      r€t	        |j
                  «      t	        | j
                  «      kD  rU|dk(  r|j                  | j
                  «      }n4|j                  | j
                  «      j                  | j
                  «      }t        ‰| �%  ||«      S )Nrˆ   )
rÉ   rR   r   r   r   r  r  Úceilr’   Ú_searchsorted_monotonic)rH   r¼   rÆ   r–   s      €rI   r‘  z.DatetimeTimedeltaMixin._searchsorted_monotonic†  s†   ø€ à×(Ò(Ü˜5¤9¬iÐ"8Ô9Ü" 5§:¡:Ó.Ô1CÀDÇIÁIÓ1NÒNð �wŠØŸ™ d§i¡iÓ0‘ð Ÿ
™
 4§9¡9Ó-×5Ñ5°d·i±iÓ@�ä‰wÑ.¨u°dÓ;Ð;rJ   c                óR   •— t         ‰| �  |«      }| j                  |«      |_        |S ra   )r’   Ú_getitem_sliceÚ_get_getitem_freqr  )rH   Úslobjr­   r–   s      €rI   r“  z%DatetimeTimedeltaMixin._getitem_slice™  s)   ø€ Ü‘Ñ'¨Ó.ˆØ×-Ñ-¨eÓ4ˆŒØˆrJ   c                ó|   •— t         ‰| �  |«      }t        |t        | «      «      r| j	                  |«      |_        |S ra   )r’   Ú__getitem__rR   rq   r”  r  )rH   rŽ   r­   r–   s      €rI   r—  z"DatetimeTimedeltaMixin.__getitem__ž  s7   ø€ Ü‘Ñ$ SÓ)ˆÜ�fœd 4›jÔ)Ø×1Ñ1°#Ó6ˆFŒLØˆrJ   c                óÔ  — t        | j                  |«      }d}t        |t        «      rA| j                  �'|j
                  �|j
                  | j                  z  }|S | j                  }|S |t        u r| j                  }|S t        j                  |«      rSt        j                  |j                  t        j                  «      «      }t        |t        «      r| j                  |«      S |S )z\
        Find the `freq` attribute to assign to the result of a __getitem__ lookup.
        N)r0   r@   rR   rÌ   rM   r  ÚEllipsisræ   Úis_bool_indexerr   Úmaybe_booleans_to_slicer�   ru   Úuint8r”  )rH   rŽ   rM   Únew_keys       rI   r”  z(DatetimeTimedeltaMixin._get_getitem_freq¤  sÉ   € ô " $§*¡*¨cÓ2ˆØˆÜ�cœ5Ô!Ø�y‰yÐ$¨¯©Ð)=Ø—x‘x $§)¡)Ñ+�ð ˆð —y‘y�ð ˆð ”H‰_ð —9‘9ˆDð
 ˆô	 × Ñ  Ô%Ü×1Ñ1°#·(±(¼2¿8¹8Ó2DÓEˆGÜ˜'¤5Ô)Ø×-Ñ-¨gÓ6Ð6ØˆrJ   c           	     ó  •‡ ‡	‡
‡— t         ‰‰ �  ||«      }t        d|d   «      Š
t        d|D �cg c]  }t        |«      sŒ|‘Œ c}«      }t	        |t        ‰ «      «      �r‰
j                  ��t        ˆ
fd„|D «       «      rý‰
j                  Š	t        ‰ j                  dd «      }t	        ‰	t        «      s|€¢t	        ‰	t        «      r’t        ˆ fd„|D «       «      r~t        ‰	«      j                  ‰ j                  «      j                  Š|D �cg c]'  }|j                   j"                  j%                  d«      ‘Œ) }}t        ˆfd„t'        |«      D «       «      }nt        ˆ	fd	„t'        |«      D «       «      }|r‰	|_        |S c c}w c c}w )
Nr  r   zlist[DatetimeTimedeltaMixin]c              3  óP   •K  — | ]  }|j                   ‰j                   k(  –— Œ y ­wra   )rM   )Ú.0ÚidxÚobjs     €rI   ú	<genexpr>z1DatetimeTimedeltaMixin._concat.<locals>.<genexpr>Æ  s   øè ø€ ÒG¨S�C—H‘H §¡Õ(ÑGùó   ƒ#&rX   c              3  óP   •K  — | ]  }|j                   ‰j                   k(  –— Œ y ­wra   rW  )r   r¡  rH   s     €rI   r£  z1DatetimeTimedeltaMixin._concat.<locals>.<genexpr>Ì  s   øè ø€ ÒJ°�c—h‘h $§)¡)Õ+ÑJùr¤  ro   c              3  ó@   •K  — | ]  \  }}|d    ‰z   |d   k(  –— Œ y­w)rÄ   r   N© )r   ÚaÚbr  s      €rI   r£  z1DatetimeTimedeltaMixin._concat.<locals>.<genexpr>Ò  s&   øè ø€ Ò#S¹T¸QÀ A b¡E¨D¡L°A°a±DÕ$8Ñ#Sùs   ƒc              3  óF   •K  — | ]  }|d    d   ‰z   |d   d    k(  –— Œ y­w)r   rÄ   ró   Nr§  )r   ÚpairrM   s     €rI   r£  z1DatetimeTimedeltaMixin._concat.<locals>.<genexpr>Ô  s3   øè ø€ ò $àð ˜‘G˜B‘K $Ñ&¨$¨q©'°!©*Õ4ñ$ùs   ƒ!)r’   Ú_concatr
   rÊ   rR   rq   rM   r  ÚgetattrrY   r   r   r   r  r  r  r@   rÇ   r�   r   r  )rH   Ú	to_concatr«   r­   r¡  Úto_concat_nonemptyrX   Úi8sÚevenly_spacedrM   r¢  r  r–   s   `        @@@€rI   r¬  zDatetimeTimedeltaMixin._concat¹  sG  ü€ Ü‘‘ ¨DÓ1ˆô Ð+¨Y°q©\Ó:ˆÜ!Ø*Ø%Ö2�S¬¨S­ŠSÒ2ó
Ðô
 �vœt D›zÕ*Ø—‘Ñ$ÜÓGÐ4FÔGÔGà—8‘8ˆDÜ˜Ÿ™ T¨4Ó0ˆBä˜4¤Ô&¨2¨:¼*ÀTÌ3Ô:OÜÓJÐ7IÔJÔJô ! “×.Ñ.¨t¯y©yÓ9×@Ñ@�Ø@RÖS¸�s—y‘y×)Ñ)×.Ñ.¨tÕ4ÐS�ÐSÜ #Ó#SÄXÈcÃ]Ô#SÓ S‘ä #ó $ä (Ð);Ó <ô$ó !�ñ Ø#�”àˆùò5 3ùò  Ts   ¯F
Á F
Ä,Fc                óÌ  — d}| j                   �Õt        |«      r,|dt        | «       dt        | «      dz
  fv r| j                   }|S t        |«      rBt	        j
                  t        j                  |t        j                  ¬«      t        | «      «      }t        |t        «      rA|j                  dv r3|j                  dv s|j                  t        | «      dfv r| j                   }|S )z7
        Find the `freq` for self.delete(loc).
        Nr   rÄ   ró   rä   rò   )r   N)rM   r#   rÊ   r$   r   Úmaybe_indices_to_sliceru   rv   r6  rR   rÌ   r  rG  Ústop)rH   r{  rM   s      rI   Ú_get_delete_freqz'DatetimeTimedeltaMixin._get_delete_freqÝ  sÂ   € ð ˆØ�9‰9Ð Ü˜#ŒØ˜1œs 4›y˜j¨"¬c°$«i¸!©mÐ<Ñ<ØŸ9™9�Dð ˆô   Ô$ô ×4Ñ4ÜŸ
™
 3¬b¯g©gÔ6¼¸D»	ó�Cô ˜c¤5Ô)¨c¯h©h¸)Ñ.CØ—y‘y IÑ-°·±¼cÀ$»iÈÐ=NÑ1NØ#Ÿy™y˜ØˆrJ   c                ó"  — | j                   j                  |«      }| j                   j                  |«      }d}| j                  �Ê| j                  ro|t
        u r	 |S |dt        | «       fv r#|| j                  z   | d   k(  r| j                  }|S |t        | «      k(  r!|| j                  z
  | d   k(  r| j                  }|S t        | j                  t        «      r| j                  }|S | j                  j                  |«      r| j                  }|S )z=
        Find the `freq` for self.insert(loc, item).
        Nr   rÄ   )
r@   Ú_validate_scalarÚ	_box_funcrM   Úsizer   rÊ   rR   r   r  )rH   r{  Úitemr  rM   s        rI   Ú_get_insert_freqz'DatetimeTimedeltaMixin._get_insert_freqó  s  € ð —
‘
×+Ñ+¨DÓ1ˆØ�z‰z×#Ñ# EÓ*ˆàˆØ�9‰9Ð à�yŠyØœ3‘;Øð ˆð ˜Q¤ T£ 
˜OÑ+°°t·y±yÑ0@ÀDÈÁGÒ0KØŸ9™9�Dð ˆð œS ›YÒ&¨D°4·9±9Ñ,<ÀÀRÁÒ,HØŸ9™9�Dð ˆô ˜DŸI™I¤tÔ,ð —y‘y�ð ˆð —‘×'Ñ'¨Ô-Ø—y‘y�ØˆrJ   c                óR   •— t         ‰| �  |«      }| j                  |«      |_        |S )añ  
        Make new Index with passed location(-s) deleted.

        Parameters
        ----------
        loc : int or list of int
            Location of item(-s) which will be deleted.
            Use a list of locations to delete more than one value at the same time.

        Returns
        -------
        Index
            Will be same type as self, except for RangeIndex.

        See Also
        --------
        numpy.delete : Delete any rows and column from NumPy array (ndarray).

        Examples
        --------
        >>> idx = pd.Index(["a", "b", "c"])
        >>> idx.delete(1)
        Index(['a', 'c'], dtype='str')
        >>> idx = pd.Index(["a", "b", "c"])
        >>> idx.delete([0, 2])
        Index(['b'], dtype='str')
        )r’   Údeleterµ  r  )rH   r{  r­   r–   s      €rI   r½  zDatetimeTimedeltaMixin.delete  s*   ø€ ô8 ‘‘ Ó$ˆØ×,Ñ,¨SÓ1ˆŒØˆrJ   c                ó€   •— t         ‰| �  ||«      }t        |t        | «      «      r| j	                  ||«      |_        |S )a  
        Make new Index inserting new item at location.
        Follows Python numpy.insert semantics for negative values.

        Parameters
        ----------
        loc : int
            The integer location where the new item will be inserted.
        item : object
            The new item to be inserted into the Index.

        Returns
        -------
        Index
            Returns a new Index object resulting from inserting the specified item at
            the specified location within the original Index.

        See Also
        --------
        Index.append : Append a collection of Indexes together.

        Examples
        --------
        >>> idx = pd.Index(["a", "b", "c"])
        >>> idx.insert(1, "x")
        Index(['a', 'x', 'b', 'c'], dtype='str')
        )r’   ÚinsertrR   rq   r»  r  )rH   r{  rº  r­   r–   s       €rI   r¿  zDatetimeTimedeltaMixin.insert-  s<   ø€ ô8 ‘‘  TÓ*ˆÜ�fœd 4›jÔ)à×0Ñ0°°dÓ;ˆFŒLØˆrJ   r   c                ó>  — t        j                  d|«       t        j                  |t        j                  ¬«      }t        j                  | ||||fi |¤Ž}t        j                  |t        | «      «      }t        |t        «      r| j                  |«      }||_        |S )ar  
        Return a new Index of the values selected by the indices.

        For internal compatibility with numpy arrays.

        Parameters
        ----------
        indices : array-like
            Indices to be taken.
        axis : {0 or 'index'}, optional
            The axis over which to select values, always 0 or 'index'.
        allow_fill : bool, optional
            How to handle negative values in `indices`.

            * False: negative values in `indices` indicate positional indices
                from the right, matching :func:`numpy.take`.
            * True: negative values in `indices` indicate missing values. ``-1``
                entries are set to ``fill_value`` (defaulting to ``NaT`` if not
                supplied). Any other negative values raise a ``ValueError``.
            * Not supplied: defaults to ``allow_fill=False`` unless
                ``fill_value`` is explicitly provided, in which case fill
                semantics apply (``allow_fill=True``).
        fill_value : scalar, optional
            If fill semantics apply (see ``allow_fill``), indices specified by
            ``-1`` are filled with ``fill_value``. Passing ``fill_value=None``
            is equivalent to passing ``self._na_value`` (``NaT``).
        **kwargs
            Required for compatibility with numpy.

        Returns
        -------
        Index
            An index formed of elements at the given indices. Will be the same
            type as self, except for RangeIndex.

        See Also
        --------
        numpy.ndarray.take: Return an array formed from the
            elements of a at the given indices.

        Examples
        --------
        >>> idx = pd.date_range("2024-01-01", periods=3)
        >>> idx.take([2, 1, 0])
        DatetimeIndex(['2024-01-03', '2024-01-02', '2024-01-01'],
                      dtype='datetime64[us]', freq='-1D')
        r§  rä   )ÚnvÚvalidate_takeru   rv   r6  r2   Útaker   r³  rÊ   rR   rÌ   r”  r  )	rH   ÚindicesrE   Ú
allow_fillÚ
fill_valueÚkwargsr­   Úmaybe_slicerM   s	            rI   rÃ  zDatetimeTimedeltaMixin.takeR  sŠ   € ôn 	×Ñ˜˜VÔ$Ü—*‘*˜W¬B¯G©GÔ4ˆä,×1Ñ1Ø�'˜4 ¨Zñ
Ø;Añ
ˆô ×0Ñ0°¼#¸d»)ÓDˆÜ�k¤5Ô)Ø×)Ñ)¨+Ó6ˆDØˆFŒLØˆrJ   rë   )rì   ÚNone)T)r  rA   )rì   r1   )rì   r	   )NF)r«   zHashable | Noner  rA   rì   r	   )FT)r2  rA   r3  rA   )rì   r;   )r  r;   rì   r	   )rì   ú
np.ndarrayrò   rô   )rì   rð   )rì   zstr | BaseOffset | None)rì   r3   rî   )F)r‚   r1   r2  rA   rì   r1   )r‚   r	   rì   rA   )r‚   r	   rì   r	   )r†  únpt.NDArray[np.intp] | Noner‡  rË  rˆ  r:   rì   zEtuple[Self, npt.NDArray[np.intp] | None, npt.NDArray[np.intp] | None])r­   rÊ  )r‡   )rÆ   zLiteral['left', 'right'])r•  rÌ   rì   r	   )r®  zlist[Index]r«   r6   rì   r1   )r{  zint | slice | Sequence[int])r{  rõ   )rE   r9   rÅ  zbool | lib.NoDefaultrì   r	   )>rö   r÷   rø   rù   rû   Ú_comparablesr¤   r  r1   rÉ   Ú_is_monotonic_increasingrÍ   Ú_is_monotonic_decreasingÚ	is_uniqueÚ
_is_uniquerü   rM   Úsetterr  r  r  r  r   r&  r(  r9  r  r  r@  rE  rá   r!   r  rM  rS  rU  r[  ra  rd  rg  rh  rf  rx  r~  r€  r‚  r„  r‹  rŽ  r‘  r“  r—  r”  r¬  rµ  r»  r½  r¿  r   r  rÃ  rþ   rÿ   s   @rI   r  r  ª  s  ø… ñð
 *Ó)Ø˜FÐ#€LØ˜6Ð"€KØ#€EÐÓ#ð  %×<Ñ<ÐØ$×<Ñ<ÐØ—‘€Jàòó ðð: 
‡[�[òó ðöõõö
ó
@óD,ô\
ð Ø $ðMàðMð õMð6 ò'ó ð'óR/òbð" òó ðô(2ðh ò-ó ð-ð ò+
ó ð+
ð` òó ðóLóó65ó5ô5ò.ó*1ófGó<ô6.ò,ð&ð *ð	&ð
 *ð&ð ð&ð 
Oõ&ó.ó5ö
<õ&ô
óõ*"óHó,õ4õ@ ðP Ø+.¯>©>Ø—>‘>ðBð ðBð )ð	Bð 
÷BrJ   r  )brù   Ú
__future__r   Úabcr   Ú	itertoolsr   r*  Útypingr   r   r   r	   r
   r   rx   Únumpyru   Úpandas._libsr   r   Úpandas._libs.tslibsr   r   r   r   r   r   r   r   r   r   Úpandas._libs.tslibs.dtypesr   Úpandas._libs.tslibs.offsetsr   r   Úpandas.compat.numpyr   rÁ  Úpandas.errorsr   r   r   r   r    Úpandas.util._decoratorsr!   Úpandas.util._exceptionsr"   Úpandas.core.dtypes.commonr#   r$   Úpandas.core.dtypes.concatr%   Úpandas.core.dtypes.dtypesr&   r'   r(   Úpandas.corer)   r*   Úpandas.core.arraysr+   r,   r-   r.   Úpandas.core.commonÚcoreÚcommonræ   Úpandas.core.constructionr/   Úpandas.core.indexersr0   Úpandas.core.indexes.baser1   Úpandas.core.indexes.extensionr2   Úpandas.core.indexes.ranger3   Úpandas.core.tools.timedeltasr4   Úpandas.tseriesr5   Úcollections.abcr6   r7   r8   Úpandas._typingr9   r:   r;   r<   Úpandasr=   r?   r  r§  rJ   rI   ú<module>rñ     sé   ðñõ #õõ Û ÷÷ ó ã ÷÷÷ ÷ õ :÷õ /÷õ õõ 5÷õ 4÷ñ ÷÷ó ÷ !Ð  Ý CÝ 4õõ FÝ 0Ý 5å &á÷õ "÷ó õ (ô{+Ð7¸ô {+ô|jÐ2°Cõ jrJ   