
     	ia                      d dl mZ d dlmZ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mZmZ d dlZd dl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m Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d d
l,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d dlFmGZH d dlImJZJmKZKmLZL d dlMmNZNmOZOmPZP d dlQmRZR d dlSmTZT d dlUmVZVmWZWmXZXmYZYmZZZm[Z[ d dl\m]Z]m^Z^m_Z_m`Z`maZa d dlbmcZcmdZd d dlemfZfmgZg d dlhmiZimjZjmkZkmlZl d dlmmnZnmoZompZp d dlqmrZr d dlsmtZt d dlumvZvmwZw d dlxmyZy d dlzm{Z{ d dl|m}Z} d dl~mc mZ d d lmZmZmZ d d!lmZmZ d d"lmZ d d#lmZmZ d d$lmZ erd d%lmZmZ d d&lmZ d d'lmZmZmZ ee8ef         ZdNd*ZdOd.Z G d/ d0etev          Z G d1 d2e          Zd3Zd4Zd5Zd6Z G d7 d8e          ZdPd=ZedQd@            ZedRdC            ZdSdFZdTdJZdUdMZdS )V    )annotations)datetime	timedelta)wrapsN)TYPE_CHECKINGAnyCallableLiteralUnioncastfinaloverload)using_string_dtype)algoslib)NDArrayBacked)
BaseOffsetIncompatibleFrequencyNaTNaTTypePeriod
ResolutionTick	Timedelta	Timestampadd_overflowsafeastype_overflowsafeget_unit_from_dtypeiNaTints_to_pydatetimeints_to_pytimedeltaperiods_per_day	to_offset)RoundToround_nsint64)compare_mismatched_resolutions)get_unit_for_round)integer_op_not_supported)	ArrayLikeAxisIntDatetimeLikeScalarDtypeDtypeObjFInterpolateOptionsNpDtypePositionalIndexer2DPositionalIndexerTupleScalarIndexerSelfSequenceIndexerTimeAmbiguousTimeNonexistentnpt)function)AbstractMethodErrorInvalidComparisonPerformanceWarning)AppenderSubstitutioncache_readonly)find_stack_level)'construct_1d_object_array_from_listlike)is_all_stringsis_integer_dtypeis_list_likeis_object_dtypeis_string_dtypepandas_dtype)
ArrowDtypeCategoricalDtypeDatetimeTZDtypeExtensionDtypePeriodDtype)ABCCategoricalABCMultiIndex)is_valid_na_for_dtypeisna)
algorithmsmissingnanopsops)isin	map_arrayunique1d)datetimelike_accumulations)OpsMixin)NDArrayBackedExtensionArrayravel_compat)ArrowExtensionArray)ExtensionArray)IntegerArray)arrayensure_wrapped_if_datetimelikeextract_array)check_array_indexercheck_setitem_lengths)unpack_zerodim_and_defer)invalid_comparisonmake_invalid_op)frequencies)IteratorSequenceIndex)DatetimeArrayPeriodArrayTimedeltaArrayop_namestrc                P    t          |           } t          |           |          S N)rf   rd   )ro   ops     W/srv/django_bis/venv311/lib/python3.11/site-packages/pandas/core/arrays/datetimelike.py_make_unpacked_invalid_opru      s(    		!	!B,#G,,R000    methr.   returnc                b     t                      fd            }t          t          |          S )z
    For PeriodArray methods, dispatch to DatetimeArray and re-wrap the results
    in PeriodArray.  We cannot use ._ndarray directly for the affected
    methods because the i8 data has different semantics on NaT values.
    c                d   t          | j        t                    s | g|R i |S |                     d          } |g|R i |}|t          u rt          S t          |t
                    r|                     |j                  S |                    d          }|                     |          S )NM8[ns]i8)	
isinstancedtyperL   viewr   r   	_box_func_value_from_backing_data)selfargskwargsarrresultres_i8rw   s         rt   new_methz"_period_dispatch.<locals>.new_meth   s    $*k22 	/4.t...v...ii!!c+D+++F++S==J	** 	1>>&-000T""&&v...rv   )r   r   r.   )rw   r   s   ` rt   _period_dispatchr      s@     4[[/ / / / [/ 8rv   c                      e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   edd            Z	 dddZedd            Z	ddZ
ddZddZd  Zdd!Zdd#Zedd%            Zd&dd'dd+Zddd-Z	 ddd0Zedd3            Zedd6            Zd fd:Zdd;ZdĈ fd>Zdd?Zddǈ fdAZeddB            ZeddE            ZeddH            ZedddK            Zdd̈ fdLZdM Zdd@dNddQZdddRZdddTZdU Ze ddW            Z!e"ddX            Z#dd[Z$dd\Z%edd]            Z&edd^            Z'e(dfdd`Z)eddb            Z*eddc            Z+edde            Z,eddf            Z-eddg            Z.eddh            Z/eddi            Z0dj Z1 e2dk          Z3 e2dl          Z4 e2dm          Z5 e2dn          Z6 e2do          Z7 e2dp          Z8 e2dq          Z9 e2dr          Z: e2ds          Z; e2dt          Z< e2du          Z= e2dv          Z>e ddx            Z?e ddy            Z@e ddz            ZAe dd{            ZBe dd}            ZCe dd~            ZDe dd            ZEe dd            ZFd ZGd ZHddZIe dd            ZJe d             ZKe d             ZLe dd            ZMe dd            ZNd@dddZO ePd          d             ZQd ZR ePd          d             ZSd ZTddZUddZVeWd fd            ZXeWdd@ddd            ZYeWdd@ddd            ZZd@ddddZ[eWdd@ddd            Z\dddZ]ddZ^ xZ_S )DatetimeLikeArrayMixinz
    Shared Base/Mixin class for DatetimeArray, TimedeltaArray, PeriodArray

    Assumes that __new__/__init__ defines:
        _ndarray

    and that inheriting subclass implements:
        freq
    ztuple[str, ...]_infer_matcheszCallable[[DtypeObj], bool]_is_recognized_dtypeztuple[type, ...]_recognized_scalars
np.ndarray_ndarrayBaseOffset | Nonefreqrx   boolc                    dS )NT r   s    rt   _can_hold_naz#DatetimeLikeArrayMixin._can_hold_na   s    trv   NFr~   Dtype | NonecopyNonec                     t          |           rr   r:   )r   datar~   r   r   s        rt   __init__zDatetimeLikeArrayMixin.__init__   s     "$'''rv   type[DatetimeLikeScalar]c                     t          |           )z
        The scalar associated with this datelike

        * PeriodArray : Period
        * DatetimeArray : Timestamp
        * TimedeltaArray : Timedelta
        r   r   s    rt   _scalar_typez#DatetimeLikeArrayMixin._scalar_type   s     "$'''rv   valuerp   DTScalarOrNaTc                     t          |           )ay  
        Construct a scalar type from a string.

        Parameters
        ----------
        value : str

        Returns
        -------
        Period, Timestamp, or Timedelta, or NaT
            Whatever the type of ``self._scalar_type`` is.

        Notes
        -----
        This should call ``self._check_compatible_with`` before
        unboxing the result.
        r   r   r   s     rt   _scalar_from_stringz*DatetimeLikeArrayMixin._scalar_from_string       $ "$'''rv   )np.int64 | np.datetime64 | np.timedelta64c                     t          |           )a  
        Unbox the integer value of a scalar `value`.

        Parameters
        ----------
        value : Period, Timestamp, Timedelta, or NaT
            Depending on subclass.

        Returns
        -------
        int

        Examples
        --------
        >>> arr = pd.array(np.array(['1970-01-01'], 'datetime64[ns]'))
        >>> arr._unbox_scalar(arr[0])
        numpy.datetime64('1970-01-01T00:00:00.000000000')
        r   r   s     rt   _unbox_scalarz$DatetimeLikeArrayMixin._unbox_scalar  s    * "$'''rv   otherc                     t          |           )a|  
        Verify that `self` and `other` are compatible.

        * DatetimeArray verifies that the timezones (if any) match
        * PeriodArray verifies that the freq matches
        * Timedelta has no verification

        In each case, NaT is considered compatible.

        Parameters
        ----------
        other

        Raises
        ------
        Exception
        r   r   r   s     rt   _check_compatible_withz-DatetimeLikeArrayMixin._check_compatible_with  r   rv   c                     t          |           )zI
        box function to get object from internal representation
        r   )r   xs     rt   r   z DatetimeLikeArrayMixin._box_func/  s     "$'''rv   c                :    t          j        || j        d          S )z1
        apply box func to passed values
        F)convert)r   	map_inferr   )r   valuess     rt   _box_valuesz"DatetimeLikeArrayMixin._box_values5  s     }VT^UCCCCrv   rh   c                      j         dk    r( fdt          t                               D             S  fd j        D             S )N   c              3  (   K   | ]}|         V  d S rr   r   ).0nr   s     rt   	<genexpr>z2DatetimeLikeArrayMixin.__iter__.<locals>.<genexpr>=  s'      66DG666666rv   c              3  B   K   | ]}                     |          V  d S rr   )r   )r   vr   s     rt   r   z2DatetimeLikeArrayMixin.__iter__.<locals>.<genexpr>?  s/      99!DNN1%%999999rv   )ndimrangelenasi8r   s   `rt   __iter__zDatetimeLikeArrayMixin.__iter__;  sR    9q==6666U3t99%5%566669999ty9999rv   npt.NDArray[np.int64]c                6    | j                             d          S )z
        Integer representation of the values.

        Returns
        -------
        ndarray
            An ndarray with int64 dtype.
        r|   )r   r   r   s    rt   r   zDatetimeLikeArrayMixin.asi8A  s     }!!$'''rv   r   )na_repdate_formatr   str | floatnpt.NDArray[np.object_]c                    t          |           )z|
        Helper method for astype when converting to strings.

        Returns
        -------
        ndarray[str]
        r   )r   r   r   s      rt   _format_native_typesz+DatetimeLikeArrayMixin._format_native_typesQ  s     "$'''rv   boxedc                    dj         S )Nz'{}')format)r   r   s     rt   
_formatterz!DatetimeLikeArrayMixin._formatter]  s
    }rv   NpDtype | Nonebool | Nonec                   t          |          rT|du r(t          j        dt          t	                                 t          j        t          |           t                    S |du rt          j        | j	        |          S | j	        S )NFaS  Starting with NumPy 2.0, the behavior of the 'copy' keyword has changed and passing 'copy=False' raises an error when returning a zero-copy NumPy array is not possible. pandas will follow this behavior starting with pandas 3.0.
This conversion to NumPy requires a copy, but 'copy=False' was passed. Consider using 'np.asarray(..)' instead.
stacklevelr~   T)
rE   warningswarnFutureWarningr@   npr_   listobjectr   )r   r~   r   s      rt   	__array__z DatetimeLikeArrayMixin.__array__d  s     5!! 	6u}}0 "/11	 	 	 	 8DJJf55554<<8DM7777}rv   itemr3   c                    d S rr   r   r   r   s     rt   __getitem__z"DatetimeLikeArrayMixin.__getitem__{      rv   (SequenceIndexer | PositionalIndexerTupler4   c                    d S rr   r   r   s     rt   r   z"DatetimeLikeArrayMixin.__getitem__  s	    
 	rv   keyr1   Self | DTScalarOrNaTc                    t          dt                                          |                    }t          j        |          r|S t          t
          |          }|                     |          |_        |S )z
        This getitem defers to the underlying array, which by-definition can
        only handle list-likes, slices, and integer scalars
        zUnion[Self, DTScalarOrNaT])r   superr   r   	is_scalarr4   _get_getitem_freq_freq)r   r   r   	__class__s      rt   r   z"DatetimeLikeArrayMixin.__getitem__  si     2EGG4G4G4L4LMM=   	(M $''F--c22rv   c                   t          | j        t                    }|r| j        }n| j        dk    rd}nt          | |          }d}t          |t                    r&| j        |j        |j        | j        z  }n| j        }n|t          u r| j        }not          j
        |          r[t          j        |                    t          j                            }t          |t                    r|                     |          S |S )z\
        Find the `freq` attribute to assign to the result of a __getitem__ lookup.
        r   N)r}   r~   rL   r   r   rb   slicestepEllipsiscomis_bool_indexerr   maybe_booleans_to_slicer   r   uint8r   )r   r   	is_periodr   new_keys        rt   r   z(DatetimeLikeArrayMixin._get_getitem_freq  s     tz;77	 	;9DDY!^^DD%dC00CD#u%% ;9(SX-A8di/DD9DD y$S)) ;5chhrx6H6HIIgu-- ;11':::rv   ,int | Sequence[int] | Sequence[bool] | sliceNaTType | Any | Sequence[Any]c                    t          |||           }t                                          ||           |rd S |                                  d S rr   )rc   r   __setitem___maybe_clear_freq)r   r   r   no_opr   s       rt   r   z"DatetimeLikeArrayMixin.__setitem__  sW     &c5$77 	C''' 	F     rv   c                    d S rr   r   r   s    rt   r   z(DatetimeLikeArrayMixin._maybe_clear_freq  s	     	rv   Tc                h   t          |          }|t          k    r| j        j        dk    r6t	          d|           } | j        }t          || j        d| j                  }|S | j        j        dk    rt          | j
        d          S |                     | j                                                                      | j                  S t          |          rpt!          |t"                    rG|                     |j                  }|                                }|                    ||d	
          S |                                 S t!          |t"                    r#t-                                          ||          S |j        dv rJ| j        }|t0          j        k    rt5          d| j         d| d          |r|                                }|S |j        dv r| j        |k    s|j        dk    r)dt9          |           j         d| }t5          |          t1          j        | |          S )NMrl   	timestamp)tzboxresomT)r  )r   F)r~   r   r   iuzConverting from z to z? is not supported. Do obj.astype('int64').astype(dtype) insteadmMfzCannot cast z
 to dtype r   )rG   r   r~   kindr   r   r    r   _cresor!   r   r   ravelreshapeshaperF   r}   rK   r   na_valueconstruct_array_type_from_sequencer   astyper   int64	TypeErrorr   type__name__asarray)
r   r~   r   i8data	converted
arr_objectclsr   msgr   s
            rt   r  zDatetimeLikeArrayMixin.astype  sH   
 U##F??z#%%OT22 .w#	  	 ! C''*4=dCCCC##DIOO$5$566>>tzJJJU## 	1%00 3!66en6MM
0022))*E)NNN00222~.. 	177>>%d>333Z4 YF  Ctz C Cu C C C  
  'MjD  TZ5%8%8UZ3=N=N Hd!4GGGGCC.. :d%0000rv   c                    d S rr   r   r   s    rt   r   zDatetimeLikeArrayMixin.view	  r   rv   Literal['M8[ns]']rl   c                    d S rr   r   r   r~   s     rt   r   zDatetimeLikeArrayMixin.view  r   rv   Literal['m8[ns]']rn   c                    d S rr   r   r  s     rt   r   zDatetimeLikeArrayMixin.view  r   rv   .r)   c                    d S rr   r   r  s     rt   r   zDatetimeLikeArrayMixin.view  r   rv   c                F    t                                          |          S rr   )r   r   )r   r~   r   s     rt   r   zDatetimeLikeArrayMixin.view  s     ww||E"""rv   c                   t          |t                    r;	 |                     |          }n$# t          t          f$ r t          |          w xY wt          || j                  s	|t          u rU|                     |          }	 | 	                    |           n# t          t          f$ r}t          |          |d }~ww xY wt          |          st          |          t          |          t          |           k    rt          d          	 |                     |d          }| 	                    |           nM# t          t          f$ r9}t          t          |dd                     rnt          |          |Y d }~nd }~ww xY w|S )NzLengths must matchT)allow_objectr~   )r}   rp   r   
ValueErrorr   r;   r   r   r   r   r  rD   r   _validate_listlikerE   getattr)r   r   errs      rt   _validate_comparison_valuez1DatetimeLikeArrayMixin._validate_comparison_value#  s   eS!! 	//0077 56 / / /'.../ eT566 	<%3,,%%e,,E8++E222245 8 8 8'..C78 e$$ 	<#E***ZZ3t99$$1222<//D/II++E222245 < < <"75'4#@#@AA <+E22; DDDD< s9   - !AB C,B<<C,D? ?F	/FF	)allow_listlikeunboxr*  r+  c               l   t          || j                  rnt          |t                    rO	 |                     |          }n# t          $ r+}|                     ||          }t          |          |d}~ww xY wt          || j                  rt          }nt          |          r%|                     ||          }t          |          t          || j                  r|                     |          }n%|                     ||          }t          |          |s|S |                     |          S )a  
        Validate that the input value can be cast to our scalar_type.

        Parameters
        ----------
        value : object
        allow_listlike: bool, default False
            When raising an exception, whether the message should say
            listlike inputs are allowed.
        unbox : bool, default True
            Whether to unbox the result before returning.  Note: unbox=False
            skips the setitem compatibility check.

        Returns
        -------
        self._scalar_type or NaT
        N)r}   r   rp   r   r%  _validation_error_messager  rO   r~   r   rP   r   r   )r   r   r*  r+  r(  r  s         rt   _validate_scalarz'DatetimeLikeArrayMixin._validate_scalarG  sJ   0 eT.// 	!s## 	!.0077 . . .44UNKKnn#-. #5$*55 	!EE%[[ 	! 00GGCC.. t788 	! %%e,,EE 00GGCC..  	 L!!%(((s   A 
A9&A44A9c                    t          |d          r t          |dd          dk    r|j         d}ndt          |          j         d}|rd| j        j         d| d}nd| j        j         d	| d}|S )
a+  
        Construct an exception message on validation error.

        Some methods allow only scalar inputs, while others allow either scalar
        or listlike.

        Parameters
        ----------
        allow_listlike: bool, default False

        Returns
        -------
        str
        r~   r   r   z array'zvalue should be a 'z!', 'NaT', or array of those. Got z	 instead.z' or 'NaT'. Got )hasattrr'  r~   r  r  r   )r   r   r*  msg_gotr  s        rt   r-  z0DatetimeLikeArrayMixin._validation_error_message  s     5'"" 	2wufa'@'@1'D'D,,,GG1$u++.111G 		=d&7&@ = =*1= = = C*d&7&@ * ** * *  
rv   r$  c                8   t          |t          |                     r.| j        j        dv r|s|                    | j        d          }|S t          |t                    r<t          |          dk    r)t          |                               g | j                  S t          |d          r|j        t          k    rt          j        |          | j        v rd	 t          |                               |          }n@# t          t          f$ r, |r|cY S |                     |d          }t          |          w xY wt#          |d          }t%          |          }t#          |d          }t'          |          r;	 t          |                               || j                  }n# t          $ r Y nw xY wt          |j        t(                    r:|j        j        | j        k    r%|                                }t#          |d          }|rt/          |j                  rnLt          |                               |j                  s%|                     |d          }t          |          | j        j        dv r|s|                    | j        d          }|S )	Nr  Fround_okr   r   r~   Textract_numpy)r}   r  r~   r  as_unitunitr   r   r  r1  r   r   infer_dtyper   r%  r  r-  ra   pd_arrayrB   rI   
categories_internal_get_valuesrE   r   )r   r   r$  r  s       rt   r&  z)DatetimeLikeArrayMixin._validate_listlike  s   eT$ZZ(( 	z$&&|&di%@@LeT"" 	Cs5zzQ::,,Rtz,BBB5'"" 
	)u{f'<'< u%%)<<<) JJ55e<<EE"I. ) ) )# %$88EEC#C..(	) e4888e4888%   	 T

11%tz1JJ    ek#344 	A%332244%e4@@@ 	!OEK88 	!d00== 	!00==CC.. :?d""<"MM$)eM<<Es$   "C< <D9&D9=)F' '
F43F4c                    t          |          r|                     |          }n|                     |d          S |                     |          S )NT)r*  )rD   r&  r.  _unboxr   s     rt   _validate_setitem_valuez.DatetimeLikeArrayMixin._validate_setitem_value  sS     	E++E22EE((t(DDD{{5!!!rv   6np.int64 | np.datetime64 | np.timedelta64 | np.ndarrayc                    t          j        |          r|                     |          }n|                     |           |j        }|S )zZ
        Unbox either a scalar with _unbox_scalar or an instance of our own type.
        )r   r   r   r   r   r   s     rt   r?  zDatetimeLikeArrayMixin._unbox  sM    
 = 	#&&u--EE ''...NErv   c                    ddl m} t          | ||          } ||          }t          |t                    r|                                S |j        S )Nr   rj   )	na_action)pandasrk   rV   r}   rN   to_numpyr_   )r   mapperrD  rk   r   s        rt   mapzDatetimeLikeArrayMixin.map  s_          49===vfm,, 	 ??$$$<rv   r   npt.NDArray[np.bool_]c                   |j         j        dv r t          j        | j        t
                    S t          |          }t          |t          |                     sOg d}|j         t          k    rt          j        |d| j                   }|j         t          k    r|                     |          S t          j        |d          }||vrS|dk    rnLd	|v r(t          |                     t                    |          S t          j        | j        t
                    S 	 t          |                               |          }t!          j        d
| j          dt$          t'                                 n8# t(          $ r+ t          |                     t                    |          cY S w xY w| j         j        dv r*t+          d|           } |                    | j                  }	 |                     |           n7# t2          t(          f$ r# t          j        | j        t
                    cY S w xY wt          | j        |j                  S )z
        Compute boolean array of whether each value is found in the
        passed set of values.

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

        Returns
        -------
        ndarray[bool]
        fiucr   )r   timedelta64r   
datetime64dateperiodT)convert_non_numericdtype_if_all_natFskipnastringmixedz"The behavior of 'isin' with dtype=z and castable values (e.g. strings) is deprecated. In a future version, these will not be considered matching by isin. Explicitly cast to the appropriate dtype before calling isin instead.r   r  DatetimeArray | TimedeltaArray)r~   r  r   zerosr  r   r`   r}   r  r   r   maybe_convert_objectsrU   r:  r  r  r   r   r   r@   r%  r   r8  r9  r   r  r   )r   r   	inferableinferreds       rt   rU   zDatetimeLikeArrayMixin.isin  sh    <&&8DJd3333/77&$t**-- *	  I |v%%2(,%)Z  
 <6))99V,,,?6%@@@9,,8++ H,,#DKK$7$7@@@!x
$????d226:: , , , ,
 "/11	 	 	 	 	  9 9 9DKK//888889 :?d""8$??D ^^DI..F	4 ''////:& 	4 	4 	48DJd333333	4 DIv{+++s$   "E3 32F('F($G: :1H.-H.c                    | j         S rr   )_isnanr   s    rt   rP   zDatetimeLikeArrayMixin.isnaX  s
    {rv   c                "    | j         t          k    S )z-
        return if each value is nan
        )r   r   r   s    rt   r\  zDatetimeLikeArrayMixin._isnan[  s    
 yD  rv   c                N    t          | j                                                  S )zJ
        return if I have any nans; enables various perf speedups
        )r   r\  anyr   s    rt   _hasnazDatetimeLikeArrayMixin._hasnab  s    
 DKOO%%&&&rv   r   c                    | j         r@|r|                    |          }|t          j        }t          j        || j        |           |S )az  
        Parameters
        ----------
        result : np.ndarray
        fill_value : object, default iNaT
        convert : str, dtype or None

        Returns
        -------
        result : ndarray with values replace by the fill_value

        mask the result if needed, convert to the provided dtype if its not
        None

        This is an internal routine.
        )r`  r  r   nanputmaskr\  )r   r   
fill_valuer   s       rt   _maybe_mask_resultsz*DatetimeLikeArrayMixin._maybe_mask_resultsi  sO    & ; 	8 0w//!V
Jvt{J777rv   
str | Nonec                ,    | j         dS | j         j        S )a{  
        Return the frequency object as a string if it's set, otherwise None.

        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'
        N)r   freqstrr   s    rt   rh  zDatetimeLikeArrayMixin.freqstr  s    4 94y  rv   c                h    | j         dk    rdS 	 t          j        |           S # t          $ r Y dS w xY w)ax  
        Tries to return a string representing a frequency generated by infer_freq.

        Returns None if it can't autodetect the frequency.

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

        >>> idx = pd.DatetimeIndex(["2018-01-01", "2018-01-03", "2018-01-05"])
        >>> idx.inferred_freq
        '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[ns]', freq=None)
        >>> tdelta_idx.inferred_freq
        '10D'
        r   N)r   rg   
infer_freqr%  r   s    rt   inferred_freqz$DatetimeLikeArrayMixin.inferred_freq  sL    0 9>>4	)$/// 	 	 	44	s   # 
11Resolution | Nonec                d    | j         }|d S 	 t          j        |          S # t          $ r Y d S w xY wrr   )rh  r   get_reso_from_freqstrKeyError)r   rh  s     rt   _resolution_objz&DatetimeLikeArrayMixin._resolution_obj  sK    ,?4	3G<<< 	 	 	44	s   ! 
//c                    | j         j        S )zO
        Returns day, hour, minute, second, millisecond or microsecond
        )rp  attrnamer   s    rt   
resolutionz!DatetimeLikeArrayMixin.resolution  s     #,,rv   c                D    t          j        | j        d          d         S )NTtimeliker   r   is_monotonicr   r   s    rt   _is_monotonic_increasingz/DatetimeLikeArrayMixin._is_monotonic_increasing      !$)d;;;A>>rv   c                D    t          j        | j        d          d         S )NTru  r   rw  r   s    rt   _is_monotonic_decreasingz/DatetimeLikeArrayMixin._is_monotonic_decreasing  rz  rv   c                |    t          t          | j                            d                              | j        k    S )NK)r   rW   r   r
  sizer   s    rt   
_is_uniquez!DatetimeLikeArrayMixin._is_unique  s-    8DIOOC001122di??rv   c                   | j         dk    rbt          |dd           | j        k    rH ||                                 |                                                              | j                  S 	 |                     |          }n!# t          $ r t          | ||          cY S w xY wt          |dd           }t          |          rBt          j
        |t          j        |                     t                              |          }|S |t          u rQ|t           j        u r!t          j        | j        t&                    }n t          j        | j        t&                    }|S t+          | j        t.                    st1          t2          |           } | j        |j        k    rt+          |t7          |                     s]	 |                    | j        d          }n\# t<          $ r2 t          j        |j                   }tC          | j"        ||          cY S w xY w|j"        }tC          | j"        ||          S | #                    |          } || j"        $                    d          |$                    d                    }tK          |          }| j&        |z  }|'                                r$|t           j        u }	t          j(        |||	           |S )Nr   r  r~   r   Fr4  r|   ))r   r'  r  r
  r  r)  r;   re   rE   rT   comp_method_OBJECT_ARRAYr   r  r  r   r   operatorneonesr   rW  r}   r~   rL   r   TimelikeOpsr	  r  r8  r9  r%  r_   asm8r&   r   r?  r   rP   r\  r_  rc  )
r   r   rs   r~   r   	other_arr
other_valso_maskmask
nat_results
             rt   _cmp_methodz"DatetimeLikeArrayMixin._cmp_method  s   9q==WUGT::djHH2djjllEKKMM22::4:FFF	733E::EE  	7 	7 	7%dE266666	7 w--5!! 	 1BJt{{62233U F MC<<X[  4888$*D999M$*k22 	XT**D{el**!%d44 X %di% H H%   $&HUZ$8$8	= M9b       !&I9$-TVWWW[[''
DM&&t,,jood.C.CDDe{V#88:: 	1x{*JJvtZ000s$   /B B#"B#?G 9HH__pow____rpow____mul____rmul____truediv____rtruediv____floordiv____rfloordiv____mod____rmod__
__divmod____rdivmod__@tuple[int | npt.NDArray[np.int64], None | npt.NDArray[np.bool_]]c                    t          |t                    r
|j        }d}n4t          |t          t          f          r
|j        }d}n|j        }|j        }||fS )zN
        Get the int64 values and b_mask to pass to add_overflowsafe.
        N)r}   r   ordinalr   r   r   r\  r   )r   r   i8valuesr  s       rt   _get_i8_values_and_maskz.DatetimeLikeArrayMixin._get_i8_values_and_mask.  sc     eV$$ 		"}HDD	9566 	"|HDD <DzH~rv   c                    t          | j        t                    r| j        S t	          j        |          sdS t          | j        t                    r| j        S dS )zP
        Check if we can preserve self.freq in addition or subtraction.
        N)r}   r~   rL   r   r   r   r   r   s     rt   _get_arithmetic_result_freqz2DatetimeLikeArrayMixin._get_arithmetic_result_freqA  sX     dj+.. 	9u%% 	4	4(( 	9trv   c                   t          j        | j        d          s9t          dt	          |           j         dt	          |          j                   t          d|           } ddlm} ddl	m
} |t          usJ t          |          rN| j        t          j                                        d| j         d	          z   } |j        ||j        
          S t%          |          }|                     |          \  } }t          d|           } |                     |          \  }}t+          | j        t/          j        |d
                    }|                    d| j         d	          } ||j        | j                  }|                    d| j         d	          }|                     |          }	 |j        |||	          S )Nr  cannot add  and rn   r   rl   )tz_to_dtypezM8[]r   r|   r   r9  r~   r   )r   is_np_dtyper~   r  r  r  r   pandas.core.arraysrl   pandas.core.arrays.datetimesr  r   rP   r   to_datetime64r  r9  _simple_newr   _ensure_matching_resosr  r   r   r   r  r   r   r  )
r   r   rl   r  r   other_i8r  
res_valuesr~   new_freqs
             rt   _add_datetimelike_scalarz/DatetimeLikeArrayMixin._add_datetimelike_scalarQ  s   tz3// 	Nd4jj1NNU8LNN   $d++444444<<<<<<C;; 	I ]S%6%8%8%?%?@Rdi@R@R@R%S%SSF,=,V6<HHHH%  11%88e$d++77>>&!$)RZ-M-M-MNN[[!3ty!3!3!344
uxdi888[[!3ty!3!3!344
33E::(}(5xPPPPrv   c                    t          j        | j        d          s9t          dt	          |           j         dt	          |          j                   || z   S )Nr  r  r  )r   r  r~   r  r  r  r   s     rt   _add_datetime_arraylikez.DatetimeLikeArrayMixin._add_datetime_arraylikes  s[    tz3// 	Nd4jj1NNU8LNN  
 t|rv   datetime | np.datetime64c                4   | j         j        dk    r$t          dt          |           j                   t          d|           } t          |          r
| t          z
  S t          |          }| 	                    |          \  } }| 
                    |          S )Nr   "cannot subtract a datelike from a rl   )r~   r  r  r  r  r   rP   r   r   r  _sub_datetimelike)r   r   tss      rt   _sub_datetimelike_scalarz/DatetimeLikeArrayMixin._sub_datetimelike_scalar}  s     :?c!!VdATVVWWWOT** ;; 	#:u..r22b%%b)))rv   c                B   | j         j        dk    r$t          dt          |           j                   t          |           t          |          k    rt          d          t          d|           } |                     |          \  } }| 	                    |          S )Nr   r  $cannot add indices of unequal lengthrl   )
r~   r  r  r  r  r   r%  r   r  r  r   s     rt   _sub_datetime_arraylikez.DatetimeLikeArrayMixin._sub_datetime_arraylike  s    :?c!!VdATVVWWWt99E

""CDDDOT**11%88e%%e,,,rv   Timestamp | DatetimeArrayc                2   t          d|           } ddlm} 	 |                     |           nN# t          $ rA}t          |                              dd          } t          |          |          |d }~ww xY w|                     |          \  }}t          | j
        t          j        | d                    }|                    d| j         d	          }|                     |          }	t          d
|	          }	 |j        ||j        |	          S )Nrl   r   rn   comparesubtractr|   r   timedelta64[r  zTick | Noner  )r   r  rn   _assert_tzawareness_compatr  rp   replacer  r  r   r   r   r  r   r9  r  r  r~   )
r   r   rn   r(  new_messager  r  r  res_m8r  s
             rt   r  z(DatetimeLikeArrayMixin._sub_datetimelike  s*   OT**555555	2++E2222 	2 	2 	2c((**9jAAK$s))K((c1	2  77>>&%diXIT1R1R1RSS
!<	!<!<!<==33E::x00)~)&8TTTTs   . 
A9<A44A9r   rm   c                   t          j        | j        d          s$t          dt	          |           j                   ddlm} t          j	        |j
        | j                  }t          |j                  } |||          }|| z   S )Nr  zcannot add Period to a r   )rm   r   )r   r  r~   r  r  r  pandas.core.arrays.periodrm   r   broadcast_tor  r  rL   r   )r   r   rm   i8valsr~   parrs         rt   _add_periodz"DatetimeLikeArrayMixin._add_period  s    tz3// 	MKd4jj6IKKLLL 	:99999
;;EJ''{6///d{rv   c                     t          |           rr   r   )r   offsets     rt   _add_offsetz"DatetimeLikeArrayMixin._add_offset  s    !$'''rv   c                   t          |          r{t          j        | j        d                              | j        j                  }|                    t                     t          |           
                    || j                  S t          d|           } t          |          }|                     |          \  } }|                     |          S )zk
        Add a delta of a timedeltalike

        Returns
        -------
        Same type as self
        r|   r   rV  )rP   r   emptyr  r   r   r~   fillr   r  r  r   r   r  _add_timedeltalike)r   r   
new_valuess      rt   _add_timedeltalike_scalarz0DatetimeLikeArrayMixin._add_timedeltalike_scalar  s     ;; 	H$*D999>>t}?RSSJOOD!!!::))*DJ)GGG 4d;;%  11%88e&&u---rv   c                    t          |           t          |          k    rt          d          t          d|           } |                     |          \  } }|                     |          S )zl
        Add a delta of a TimedeltaIndex

        Returns
        -------
        Same type as self
        r  rV  )r   r%  r   r  r  r   s     rt   _add_timedelta_arraylikez/DatetimeLikeArrayMixin._add_timedelta_arraylike  se     t99E

""CDDD4d;;11%88e&&u---rv   Timedelta | TimedeltaArrayc                `   t          d|           } |                     |          \  }}t          | j        t	          j        |d                    }|                    | j        j                  }| 	                    |          }t          |                               || j        |          S )NrV  r|   r   r  )r   r  r   r   r   r  r   r   r~   r  r  r  )r   r   r  r  r  r  r  s          rt   r  z)DatetimeLikeArrayMixin._add_timedeltalike  s    4d;;77>>&%diHD1Q1Q1QRR
__T]%899
33E::
 Dzz%%djx & 
 
 	
rv   c                   t          | j        t                    r>t          dt	          |           j         dt	          t                    j                   t          d|           } t          j	        | j
        t          j                  }|                    t                     |                    | j        j                  }t	          |                               || j        d          S )z$
        Add pd.NaT to self
        zCannot add r  zTimedeltaArray | DatetimeArrayr   Nr  )r}   r~   rL   r  r  r  r   r   r   r  r  r  r  r   r   r   r  r   r   s     rt   _add_natzDatetimeLikeArrayMixin._add_nat  s    
 dj+.. 	Ld4jj1LLS		8JLL   4d;; $*BH555DT]011 Dzz%%$*4 & 
 
 	
rv   c                "   t          j        | j        t           j                  }|                    t
                     | j        j        dv r.t          d|           } |	                    d| j
         d          S |	                    d          S )z+
        Subtract pd.NaT from self
        r   r  zDatetimeArray| TimedeltaArrayr  r  ztimedelta64[ns])r   r  r  r  r  r   r~   r  r   r   r9  r  s     rt   _sub_natzDatetimeLikeArrayMixin._sub_nat  s     $*BH555D:?d""7>>D;;:di:::;;;;;0111rv   Period | PeriodArrayc                    t           j        t                    s9t          dt	          |          j         dt	                     j                   t          d                                 |                                |          \  }}t           j
        t          j        | d                    }t          j         fd|D                       }| j        }n
 j        |z  }t          ||<   |S )Ncannot subtract  from rm   r|   r   c                .    g | ]}j         j        |z  S r   )r   base)r   r   r   s     rt   
<listcomp>z:DatetimeLikeArrayMixin._sub_periodlike.<locals>.<listcomp>1  s"    EEEATY^a/EEErv   )r}   r~   rL   r  r  r  r   r   r  r   r   r   r  r_   r\  r   )r   r   r  r  new_i8_datanew_datar  s   `      rt   _sub_periodlikez&DatetimeLikeArrayMixin._sub_periodlike#  s     $*k22 	T4;;#7TTtDzz?RTT   M4((##E***77>>&&ty"*hYd2S2S2STT8EEEEEEEFF>;DD ;'Drv   c                   |t           j        t           j        fv sJ t          |          dk    r| j        dk    r || |d                   S t          j        dt          |           j         dt          t                                 | j        |j        k    sJ | j        |j        f             ||                     d          t          j        |                    }|S )aZ  
        Add or subtract array-like of DateOffset objects

        Parameters
        ----------
        other : np.ndarray[object]
        op : {operator.add, operator.sub}

        Returns
        -------
        np.ndarray[object]
            Except in fastpath case with length 1 where we operate on the
            contained scalar.
        r   r   z)Adding/subtracting object-dtype array to z not vectorized.r   O)r  addsubr   r   r   r   r  r  r<   r@   r  r  r   r  )r   r   rs   r  s       rt   _addsub_object_arrayz+DatetimeLikeArrayMixin._addsub_object_array<  s      hlHL11111u::??tyA~~ 2dE!H%%%5Dzz"5 5 5'))		
 	
 	
 	
 zU[(((4:u{*C(((RC(("*U*;*;<<
rv   rR  namerS  c                  |dvr"t          d| dt          |                      t          t          |          } ||                                 fd|i|}t          |                               || j                  S )N>   cummaxcumminzAccumulation z not supported for rS  r   )r  r  r'  rX   r   r  r~   )r   r  rS  r   rs   r   s         rt   _accumulatez"DatetimeLikeArrayMixin._accumulate`  s    +++QDQQT$ZZQQRRR/66DIIKK999&99Dzz%%fDJ%???rv   __add__c                   t          |dd           }t          |          }|t          u r|                                 }n{t	          |t
          t          t          j        f          r| 	                    |          }n=t	          |t                    r|                     |          }nt	          |t          t          j        f          r|                     |          }nt	          |t                    r1t!          j        | j        d          r|                     |          }nt!          j        |          rht	          | j        t*                    st-          |           t/          d|           }|                    ||j        j        z  t4          j                  }nt!          j        |d          r|                     |          }nt;          |          r!|                     |t4          j                  }nt!          j        |d          st	          |t>                    r|                      |          S tC          |          rgt	          | j        t*                    st-          |           t/          d|           }|                    ||j        j        z  t4          j                  }ntD          S t	          |t          j#                  r0t!          j        |j        d          rddl$m%}  |j&        |          S |S )Nr~   r  rm   r   r   r  )'r'  r`   r   r  r}   r   r   r   rL  r  r   r  r   rM  r  r   r   r  r~   r  
is_integerrL   r(   r   _addsub_int_array_or_scalar_nr  r  r  rE   r  rJ   r  rC   NotImplementedndarrayr  rn   r  r   r   other_dtyper   objrn   s         rt   r  zDatetimeLikeArrayMixin.__add__i  s   eWd33.u55 C<<]]__FFi@AA (	"33E::FFz** &	"%%e,,FF"-899 #	"22599FFv&& !	"3?4:s+K+K !	"%%e,,FF^E"" 	" dj+66 5.t444}d++C44USY\5I8<XXFF _[#.. 	"22599FF[)) 	"..uhlCCFF_[#.. 	"*3
 3
 	" //666k** 	"dj+66 5.t444}d++C44USY\5I8<XXFF "!fbj)) 	9coflC.P.P 	99999990>0888rv   c                ,    |                      |          S rr   )r  r   s     rt   __radd__zDatetimeLikeArrayMixin.__radd__  s    ||E"""rv   __sub__c                :   t          |dd           }t          |          }|t          u r|                                 }nt	          |t
          t          t          j        f          r| 	                    |           }nRt	          |t                    r|                     |           }n%t	          |t          t          j        f          r|                     |          }nt          j        |          rht	          | j        t$                    st'          |           t)          d|           }|                    ||j        j        z  t.          j                  }nqt	          |t2                    r|                     |          }nEt          j        |d          r|                     |           }nt;          |          r!|                     |t.          j                  }nt          j        |d          st	          |t>                    r|                      |          }nt	          |t$                    r|                     |          }n}tC          |          rgt	          | j        t$                    st'          |           t)          d|           }|                    ||j        j        z  t.          j                  }ntD          S t	          |t          j#                  r0t          j        |j        d          rddl$m%}  |j&        |          S |S )Nr~   rm   r  r   r   r  )'r'  r`   r   r  r}   r   r   r   rL  r  r   r  r   rM  r  r   r  r~   rL   r(   r   r  r  r  r  r   r  r  r  rE   r  rJ   r  rC   r  r  r  rn   r  r  s         rt   r   zDatetimeLikeArrayMixin.__sub__  s   eWd33.u55 C<<]]__FFi@AA (	"33UF;;FFz** &	"%%uf--FF"-899 #	"22599FF^E"" !	" dj+66 5.t444}d++C44USY\5I8<XXFFv&& 	"))%00FF _[#.. 	"22E6::FF[)) 	"..uhlCCFF_[#.. 	"*3
 3
 	" 11%88FF[11 
	"))%00FFk** 	"dj+66 5.t444}d++C44USY\5I8<XXFF "!fbj)) 	9coflC.P.P 	99999990>0888rv   c                4   t          |dd           }t          j        |d          pt          |t                    }|rpt          j        | j        d          rVt          j        |          rt          |          | z
  S t          |t                    sddl	m
}  |j        |          }|| z
  S | j        j        dk    rKt          |d          r;|s9t          dt          |           j         dt          |          j                   t          | j        t"                    rAt          j        |d          r,t          dt          |           j         d|j                   t          j        | j        d          rt%          d|           } |  |z   S | |z
   S )	Nr~   r   r  r   r  r  r  rn   )r'  r   r  r}   rJ   r~   r   r   r   r  rl   r  r  r1  r  r  r  rL   r   )r   r   r  other_is_dt64rl   s        rt   __rsub__zDatetimeLikeArrayMixin.__rsub__  s   eWd33S99 
Z>
 >
  	#S_TZ== 	# }U## / ''$..e%;<< <<<<<<<44U;;4<Z_##w(?(?## T4::#6TTd5kk>RTT   
K00 	#S_[RU5V5V 	#WtDzz/BWW%+WWXXX_TZ-- 	#($//DEU?" rv   c                z    | |z   }|d d          | d d <   t          | j        t                    s|j        | _        | S rr   r}   r~   rL   r   r   r   r   r   s      rt   __iadd__zDatetimeLikeArrayMixin.__iadd__  B    )QQQ$*k22 	%DJrv   c                z    | |z
  }|d d          | d d <   t          | j        t                    s|j        | _        | S rr   r  r  s      rt   __isub__zDatetimeLikeArrayMixin.__isub__  r	  rv   qsnpt.NDArray[np.float64]interpolationc                J    t                                          ||          S )N)r  r  )r   	_quantile)r   r  r  r   s      rt   r  z DatetimeLikeArrayMixin._quantile  s"     ww  Bm DDDrv   axisrS  r  AxisInt | Nonec                   t          j        d|           t          j        || j                   t	          j        | j        ||          }|                     ||          S )a  
        Return the minimum value of the Array or minimum along
        an axis.

        See Also
        --------
        numpy.ndarray.min
        Index.min : Return the minimum value in an Index.
        Series.min : Return the minimum value in a Series.
        r   r  )nvvalidate_minvalidate_minmax_axisr   rS   nanminr   _wrap_reduction_resultr   r  rS  r   r   s        rt   minzDatetimeLikeArrayMixin.min  Y     	F###
di000t}4GGG**4888rv   c                   t          j        d|           t          j        || j                   t	          j        | j        ||          }|                     ||          S )a  
        Return the maximum value of the Array or maximum along
        an axis.

        See Also
        --------
        numpy.ndarray.max
        Index.max : Return the maximum value in an Index.
        Series.max : Return the maximum value in a Series.
        r   r  )r  validate_maxr  r   rS   nanmaxr   r  r  s        rt   maxzDatetimeLikeArrayMixin.max.  r  rv   r   )rS  r  c               
   t          | j        t                    r%t          dt	          |           j         d          t          j        | j        ||| 	                                          }| 
                    ||          S )a  
        Return the mean value of the Array.

        Parameters
        ----------
        skipna : bool, default True
            Whether to ignore any NaT elements.
        axis : int, optional, default 0

        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[ns]', 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[ns]', freq=None)
        >>> tdelta_idx.mean()
        Timedelta('2 days 00:00:00')
        zmean is not implemented for zX since the meaning is ambiguous.  An alternative is obj.to_timestamp(how='start').mean()r  rS  r  )r}   r~   rL   r  r  r  rS   nanmeanr   rP   r  )r   rS  r  r   s       rt   meanzDatetimeLikeArrayMixin.mean@  s    X dj+.. 	7tDzz/B 7 7 7   MV$))++
 
 
 **4888rv   c                   t          j        d|           |'t          |          | j        k    rt	          d          t          j        | j        ||          }|                     ||          S )Nr   z abs(axis) must be less than ndimr  )	r  validate_medianabsr   r%  rS   	nanmedianr   r  r  s        rt   medianzDatetimeLikeArrayMixin.mediany  sk    
2v&&&D		TY 6 6?@@@!$-d6JJJ**4888rv   dropnac                    d }|r|                                  }t          j        |                     d          |          }|                    | j        j                  }t          t          j        |          }| 	                    |          S )Nr|   )r  )
rP   rQ   moder   r   r~   r   r   r  r   )r   r*  r  i8modesnpmodess        rt   _modezDatetimeLikeArrayMixin._mode  su     	99;;D/$))D//===,,t}233rz7++&&w///rv   howhas_dropped_na	min_countintngroupsidsnpt.NDArray[np.intp]c                  | j         }|j        dk    rK|dv rt          d| d          |dv r/t          j        d| d| dt
          t                      	           nwt          |t                    rK|dv rt          d
| d          |dv r/t          j        d| d| dt
          t                      	           n|dv rt          d| d          | j	        
                    d          }ddlm}	 |	                    |          }
 |	||
|          } |j        |f|||d d|}|j        |j        v r|S |j         dk    sJ |dv rvddlm} t          | j         t                    rt          d          t'          d|           } d| j         d}|
                    |          } |j        ||j                   S |
                    | j	        j                   }|                     |          S )Nr   )sumprodcumsumcumprodvarskewz!datetime64 type does not support z operations)r_  allr0  zh' with datetime64 dtypes is deprecated and will raise in a future version. Use (obj != pd.Timestamp(0)).z() instead.r   zPeriod type does not support ze' with PeriodDtype is deprecated and will raise in a future version. Use (obj != pd.Period(0, freq)).)r9  r;  r=  r<  z"timedelta64 type does not support r{   r   )WrappedCythonOp)r0  r  r1  )r2  r4  comp_idsr  )stdsemr  z-'std' and 'sem' are not valid for PeriodDtyperV  zm8[r  r   )r~   r  r  r   r   r   r@   r}   rL   r   r   pandas.core.groupby.opsr?  get_kind_from_how_cython_op_ndim_compatr0  cast_blocklistr  rn   r   r9  r  r   )r   r0  r1  r2  r4  r5  r   r~   npvaluesr?  r  rs   r  rn   	new_dtypes                  rt   _groupby_opz"DatetimeLikeArrayMixin._groupby_op  s    
:III TC T T TUUUn$$U U UDGU U U!/11	    {++ 	WIII P P P PQQQn$$X X XGJX X X!/11	    888 US U U UVVV =%%h//;;;;;;0055_4OOO.R.

 
 
 

 6R&&&  8++++.  999999$*k22 Q OPPP8$??D*di***I#33J->-j
@PQQQQ__T]%899
&&z222rv   rx   r   )NNF)r~   r   r   r   rx   r   )rx   r   )r   rp   rx   r   )r   r   rx   r   )r   r   rx   r   rx   r   )rx   rh   )rx   r   )r   r   rx   r   )F)r   r   )NN)r~   r   r   r   rx   r   )r   r3   rx   r   )r   r   rx   r4   )r   r1   rx   r   )rx   r   )r   r   r   r   rx   r   rx   r   T)r   r   rx   r4   )r~   r  rx   rl   )r~   r  rx   rn   ).)r~   r   rx   r)   rr   )r*  r   r+  r   )r*  r   rx   rp   )r$  r   )rx   rA  )r   r)   rx   rI  )rx   rI  )r   r   rx   r   )rx   rf  )rx   rl  rx   rp   )rx   r  )rx   rl   )r   rl   rx   rl   )r   r  rx   rn   )r   rl   rx   rn   )r   r  rx   rn   )r   r   rx   rm   )r   rn   )r   r  )r   r  rx   r   )r   r   )r  rp   rS  r   rx   r4   )r  r  r  rp   rx   r4   )r  r  rS  r   )rS  r   r  r  )r*  r   )
r0  rp   r1  r   r2  r3  r4  r3  r5  r6  )`r  
__module____qualname____doc____annotations__r?   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r)  r.  r-  r&  r@  r   r?  r[   rH  rU   rP   r\  r`  r   re  rh  rk  rp  rs  ry  r|  r  r  ru   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rd   r  r  r   r  r  r  r   r  r  r   r$  r)  r/  rI  __classcell__r   s   @rt   r   r      s	          $###4444))))   ^ IN( ( ( ( (
 ( ( ( X(( ( ( ((( ( ( (.( ( ( (,( ( (D D D D: : : : 
( 
( 
( X
(  (-$
( 
( 
( 
( 
( 
(     AE    .    X    X     "   <! ! ! ! ! !,   
71 71 71 71 71 71 71r    X    X    X     X# # # # # # #" " "P  %;) ;) ;) ;) ;) ;)z    >8 8 8 8 8t" " " 
 
 
 U
" 	  	  	  \	 P, P, P, P,j    ! ! ! X! ' ' ' X' .24    < ! ! ! X!:    X<    X - - - X- ? ? ? X? ? ? ? X? @ @ @ X@5 5 5r ('	22G((44H''	22G((44H++M::K,,^<<L,,^<<L--o>>M''	22G((44H**<88J++M::K
   U$    U Q Q Q UQB    U * * * U*$ 
- 
- 
- U
- U U U UU& 
 
 
 U
( ( (. . .(. . . .$ 
 
 
 U
  
 
 U
, 2 2 U2&    U0 ! ! ! U!F 8< @ @ @ @ @ @ i((5 5 )(5n# # # i((5 5 )(5n     D       E E E E E E ,0 9 9 9 9 9 9" ,0 9 9 9 9 9 9" &*! 79 79 79 79 79 79r /3D 9 9 9 9 9 90 0 0 0 0M3 M3 M3 M3 M3 M3 M3 M3rv   r   c                  >    e Zd ZdZ ed          d
d            Zd	S )DatelikeOpszK
    Common ops for DatetimeIndex/PeriodIndex, but not TimedeltaIndex.
    zNhttps://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior)URLr   rp   rx   r   c                    |                      |t          j                  }t                      r+ddlm} t          | |t          j                            S |                    t          d          S )a  
        Convert to Index using specified date_format.

        Return an Index of formatted strings specified by date_format, which
        supports the same string format as the python standard library. Details
        of the string format can be found in `python string format
        doc <%(URL)s>`__.

        Formats supported by the C `strftime` API but not by the python string format
        doc (such as `"%%R"`, `"%%r"`) are not officially supported and should be
        preferably replaced with their supported equivalents (such as `"%%H:%%M"`,
        `"%%I:%%M:%%S %%p"`).

        Note that `PeriodIndex` support additional directives, detailed in
        `Period.strftime`.

        Parameters
        ----------
        date_format : str
            Date format string (e.g. "%%Y-%%m-%%d").

        Returns
        -------
        ndarray[object]
            NumPy ndarray of formatted strings.

        See Also
        --------
        to_datetime : Convert the given argument to datetime.
        DatetimeIndex.normalize : Return DatetimeIndex with times to midnight.
        DatetimeIndex.round : Round the DatetimeIndex to the specified freq.
        DatetimeIndex.floor : Floor the DatetimeIndex to the specified freq.
        Timestamp.strftime : Format a single Timestamp.
        Period.strftime : Format a single Period.

        Examples
        --------
        >>> rng = pd.date_range(pd.Timestamp("2018-03-10 09:00"),
        ...                     periods=3, freq='s')
        >>> rng.strftime('%%B %%d, %%Y, %%r')
        Index(['March 10, 2018, 09:00:00 AM', 'March 10, 2018, 09:00:01 AM',
               'March 10, 2018, 09:00:02 AM'],
              dtype='object')
        )r   r   r   )StringDtyper  r   Fr  )	r   r   rb  r   rE  r[  r;  r  r   )r   r   r   r[  s       rt   strftimezDatelikeOps.strftime  sx    b **{26*RR 	H******F++rv*F*F*FGGGG}}V%}000rv   N)r   rp   rx   r   )r  rP  rQ  rR  r>   r]  r   rv   rt   rX  rX    sW          \*  21 21 21	 21 21 21rv   rX  aO	  
    Perform {op} operation on the data to the specified `freq`.

    Parameters
    ----------
    freq : str or Offset
        The frequency level to {op} the index to. Must be a fixed
        frequency like 'S' (second) not 'ME' (month end). See
        :ref:`frequency aliases <timeseries.offset_aliases>` for
        a list of possible `freq` values.
    ambiguous : 'infer', bool-ndarray, 'NaT', default 'raise'
        Only relevant for DatetimeIndex:

        - 'infer' will attempt to infer fall dst-transition hours based on
          order
        - bool-ndarray where True signifies a DST time, False designates
          a non-DST time (note that this flag is only applicable for
          ambiguous times)
        - 'NaT' will return NaT where there are ambiguous times
        - 'raise' will raise an AmbiguousTimeError if there are ambiguous
          times.

    nonexistent : 'shift_forward', 'shift_backward', 'NaT', timedelta, default 'raise'
        A nonexistent time does not exist in a particular timezone
        where clocks moved forward due to DST.

        - 'shift_forward' will shift the nonexistent time forward to the
          closest existing time
        - 'shift_backward' will shift the nonexistent time backward to the
          closest existing time
        - 'NaT' will return NaT where there are nonexistent times
        - timedelta objects will shift nonexistent times by the timedelta
        - 'raise' will raise an NonExistentTimeError if there are
          nonexistent times.

    Returns
    -------
    DatetimeIndex, TimedeltaIndex, or Series
        Index of the same type for a DatetimeIndex or TimedeltaIndex,
        or a Series with the same index for a Series.

    Raises
    ------
    ValueError if the `freq` cannot be converted.

    Notes
    -----
    If the timestamps have a timezone, {op}ing will take place relative to the
    local ("wall") time and re-localized to the same timezone. When {op}ing
    near daylight savings time, use ``nonexistent`` and ``ambiguous`` to
    control the re-localization behavior.

    Examples
    --------
    **DatetimeIndex**

    >>> rng = pd.date_range('1/1/2018 11:59:00', periods=3, freq='min')
    >>> rng
    DatetimeIndex(['2018-01-01 11:59:00', '2018-01-01 12:00:00',
                   '2018-01-01 12:01:00'],
                  dtype='datetime64[ns]', freq='min')
    a  >>> rng.round('h')
    DatetimeIndex(['2018-01-01 12:00:00', '2018-01-01 12:00:00',
                   '2018-01-01 12:00:00'],
                  dtype='datetime64[ns]', freq=None)

    **Series**

    >>> pd.Series(rng).dt.round("h")
    0   2018-01-01 12:00:00
    1   2018-01-01 12:00:00
    2   2018-01-01 12:00:00
    dtype: datetime64[ns]

    When rounding near a daylight savings time transition, use ``ambiguous`` or
    ``nonexistent`` to control how the timestamp should be re-localized.

    >>> rng_tz = pd.DatetimeIndex(["2021-10-31 03:30:00"], tz="Europe/Amsterdam")

    >>> rng_tz.floor("2h", ambiguous=False)
    DatetimeIndex(['2021-10-31 02:00:00+01:00'],
                  dtype='datetime64[ns, Europe/Amsterdam]', freq=None)

    >>> rng_tz.floor("2h", ambiguous=True)
    DatetimeIndex(['2021-10-31 02:00:00+02:00'],
                  dtype='datetime64[ns, Europe/Amsterdam]', freq=None)
    a  >>> rng.floor('h')
    DatetimeIndex(['2018-01-01 11:00:00', '2018-01-01 12:00:00',
                   '2018-01-01 12:00:00'],
                  dtype='datetime64[ns]', freq=None)

    **Series**

    >>> pd.Series(rng).dt.floor("h")
    0   2018-01-01 11:00:00
    1   2018-01-01 12:00:00
    2   2018-01-01 12:00:00
    dtype: datetime64[ns]

    When rounding near a daylight savings time transition, use ``ambiguous`` or
    ``nonexistent`` to control how the timestamp should be re-localized.

    >>> rng_tz = pd.DatetimeIndex(["2021-10-31 03:30:00"], tz="Europe/Amsterdam")

    >>> rng_tz.floor("2h", ambiguous=False)
    DatetimeIndex(['2021-10-31 02:00:00+01:00'],
                 dtype='datetime64[ns, Europe/Amsterdam]', freq=None)

    >>> rng_tz.floor("2h", ambiguous=True)
    DatetimeIndex(['2021-10-31 02:00:00+02:00'],
                  dtype='datetime64[ns, Europe/Amsterdam]', freq=None)
    a  >>> rng.ceil('h')
    DatetimeIndex(['2018-01-01 12:00:00', '2018-01-01 12:00:00',
                   '2018-01-01 13:00:00'],
                  dtype='datetime64[ns]', freq=None)

    **Series**

    >>> pd.Series(rng).dt.ceil("h")
    0   2018-01-01 12:00:00
    1   2018-01-01 12:00:00
    2   2018-01-01 13:00:00
    dtype: datetime64[ns]

    When rounding near a daylight savings time transition, use ``ambiguous`` or
    ``nonexistent`` to control how the timestamp should be re-localized.

    >>> rng_tz = pd.DatetimeIndex(["2021-10-31 01:30:00"], tz="Europe/Amsterdam")

    >>> rng_tz.ceil("h", ambiguous=False)
    DatetimeIndex(['2021-10-31 02:00:00+01:00'],
                  dtype='datetime64[ns, Europe/Amsterdam]', freq=None)

    >>> rng_tz.ceil("h", ambiguous=True)
    DatetimeIndex(['2021-10-31 02:00:00+02:00'],
                  dtype='datetime64[ns, Europe/Amsterdam]', freq=None)
    c                      e Zd ZU dZded<   dej        dfdLd
Zed             Z	e
d             Zej        dMd            ZedNd            ZeedOd                        ZedPd            ZedQd            ZedRd            ZdSdTdZd  ZdU fd$Zd% Z eeez                       d&'                    	 	 dVdWd-            Z eeez                       d.'                    	 	 dVdWd/            Z eeez                       d0'                    	 	 dVdWd1            Z ddd2dXd6Z!ddd2dXd7Z"dMd8Z#dYd9Z$dZ fd;Z%	 	 d[d\ fd>Z&e	 d]d^ fdC            Z'd_d` fdFZ(dadJZ)e
dbdK            Z* xZ+S )cr  zK
    Common ops for TimedeltaIndex/DatetimeIndex, but not PeriodIndex.
    znp.dtype_default_dtypeNFr   r   rx   r   c                P   t          j        t          |           j         dt          t                                 |t          |          }t          |d          }t          |t                    r|
                    dt                    }t          |dd           }|d u }|t          j        ur|nd }t          |t          |                     rp|rn7||j        }n-|r+|j        r$t!          |          }t#          ||j                  }|%||j        k    rt'          d| d	|j                   |j        }|j        }ns|qt          |t*          j                  r|j        j        d
v r|j        }nA| j        }t          |t*          j                  r |j        dk    r|                    |          }t          |t*          j                  s:t5          dt          |          j         dt          |           j         d          |j        dvrt5          d          |j        dk    r|"| j        }|                    | j                  }nnt          j        |d          r|                    |          }nCt          |t:                    r.| j        j        }| d|j         d}|                    |          }|                     ||          }|dk    r%t5          dt          |           j         d          |r|                                 }|rCt!          |          }|j        j        dk    r$t          |tB                    st'          d          tE          j#        | ||           || _$        |'|'t          |           %                    | |           d S d S d S )NzV.__init__ is deprecated and will be removed in a future version. Use pd.array instead.r   Tr6  r  r\  r   dtype=z does not match data dtype Mmr|   zUnexpected type 'z'. 'values' must be a z6, ndarray, or Series or Index containing one of those.)r      z.Only 1-dimensional input arrays are supported.r  8[r  inferz#Frequency inference not allowed in z$.__init__. Use 'pd.array()' instead.r  (TimedeltaArray/Index freq must be a Tick)r   r~   )&r   r   r  r  r   r@   rG   ra   r}   r^   rF  r   r'  r   
no_defaultr   r#   _validate_inferred_freqr~   r  r   r   r  r  r_  r   r%  r   r  rJ   r9  _validate_dtyper   r   r   r   r   _validate_frequency)	r   r   r~   r   r   rk  explicit_noner  rH  s	            rt   r   zTimelikeOps.__init__  s    	Dzz" A A A'))	
 	
 	
 	
  ''EvT:::fl++ 	=__Wt_<<F663>11tttfd4jj)) 	0 B{ B&+ B .tV[AA Ufl%:%:MUMMv|MM   LE_FF]&"*-- 0&,2Ct2K2K+fbj11 0fld6J6J#[[//F&"*-- 	+DLL$9 + +::&+ + +  
 ;f$$MNNN<4 }+T%899-- 0U++E?33 0*/#44uz444	Y//$$VU337??,d4jj6I , , ,  
  	#[[]]F 	LT??D| C''
40F0F' JKKKtF%@@@@
 T%5JJ**466666 ! %5%5rv   c                     t          |           rr   r   )r  r   r~   s      rt   ri  zTimelikeOps._validate_dtype  s    !#&&&rv   c                    | j         S )zK
        Return the frequency object if it is set, otherwise None.
        r   r   s    rt   r   zTimelikeOps.freq  s    
 zrv   c                    |st          |          }|                     | |           | j        j        dk    r$t	          |t
                    st          d          | j        dk    rt          d          || _	        d S )Nr  rf  r   zCannot set freq with ndim > 1)
r#   rj  r~   r  r}   r   r  r   r%  r   r   s     rt   r   zTimelikeOps.freq  s}    e$$E$$T5111z#%%j.E.E% JKKKy1}} !@AAA


rv   validate_kwdsdictc                N   |	d| _         dS |dk    r$| j         t          | j                  | _         dS dS |t          j        u rdS | j         4t          |          } t          |           j        | |fi | || _         dS t          |          }t          || j                    dS )z
        Constructor helper to pin the appropriate `freq` attribute.  Assumes
        that self._freq is currently set to any freq inferred in
        _from_sequence_not_strict.
        Nre  )r   r#   rk  r   rg  r  rj  rh  )r   r   rp  s      rt   _maybe_pin_freqzTimelikeOps._maybe_pin_freq*  s     <DJJJW__ z! 't'9::


 "! S^## DZ T??D*DJJ*4GGGGGDJJJ T??D#D$*55555rv   r   r   c           	     h   |j         }|j        dk    s||j        k    rdS 	  | j        d|d         dt	          |          ||j        d|}t          j        |j        |j                  st          dS # t          $ r3}dt          |          v r|t          d| d|j                   |d}~ww xY w)am  
        Validate that a frequency is compatible with the values of a given
        Datetime Array/Index or Timedelta Array/Index

        Parameters
        ----------
        index : DatetimeIndex or TimedeltaIndex
            The index on which to determine if the given frequency is valid
        freq : DateOffset
            The frequency to validate
        r   N)startendperiodsr   r9  z	non-fixedInferred frequency 9 from passed values does not conform to passed frequency r   )rk  r  rh  _generate_ranger   r9  r   array_equalr   r%  rp   )r  indexr   r   rZ  on_freqr(  s          rt   rj  zTimelikeOps._validate_frequencyK  s    &:??h$,664	)c) AhE

Z   G >%*gl;; !  ! ! 	 	 	c#hh&& 	 Gh G G8<G G  	s   AA4 4
B1>.B,,B1rw  
int | Noner4   c                     t          |           rr   r   )r  ru  rv  rw  r   r   r   s          rt   rz  zTimelikeOps._generate_rangew  s     "#&&&rv   r3  c                4    t          | j        j                  S rr   )r   r   r~   r   s    rt   r	  zTimelikeOps._creso  s    "4=#6777rv   rp   c                *    t          | j                  S rr   )dtype_to_unitr~   r   s    rt   r9  zTimelikeOps.unit  s    
 TZ(((rv   Tr9  r5  c                   |dvrt          d          t          j        | j        j         d| d          }t	          | j        ||          }t          | j        t          j                  r|j        }n&t          d|           j        }t          ||          }t          |                               ||| j                  S )	N)smsusnsz)Supported units are 's', 'ms', 'us', 'ns'rd  r  r4  rl   r  r  )r%  r   r~   r  r   r   r}   r   r   rJ   r  r  r   )r   r9  r5  r~   r  rH  r   s          rt   r8  zTimelikeOps.as_unit  s    ...HIIIDJO66t66677(QQQ
dj"(++ 	:"(IIot,,/B'2D999I Dzz%%idi & 
 
 	
rv   c                    | j         |j         k    rE| j         |j         k     r|                     |j                  } n|                    | j                  }| |fS rr   )r	  r8  r9  r   s     rt   r  z"TimelikeOps._ensure_matching_resos  sR    ;%,&&{U\))||EJ//di00U{rv   ufuncnp.ufuncmethodc                    |t           j        t           j        t           j        fv r9t	          |          dk    r&|d         | u r t          ||          | j        fi |S  t                      j        ||g|R i |S )Nr   r   )	r   isnanisinfisfiniter   r'  r   r   __array_ufunc__)r   r  r  inputsr   r   s        rt   r  zTimelikeOps.__array_ufunc__  s    bh"+666Fq  q	T!! *75&))$-BB6BBB&uww&ufHvHHHHHHrv   c                v   t          | j        t                    rZt          d|           } |                     d           }|                    ||||          }|                    | j        ||          S |                     d          }t          t          j	        |          }t          || j                  }|dk    r|                                 S t          |||          }	|                     |	t                    }|                    | j        j                  }|                     || j                  S )Nrl   )	ambiguousnonexistentr|   r   rd  r   )r}   r~   rJ   r   tz_localize_roundr   r   r   r  r'   r	  r   r%   re  r   r   r  )
r   r   r,  r  r  naiver   r   nanos	result_i8s
             rt   r  zTimelikeOps._round  s   dj/22 	..D$$T**E\\$iEEF%%9+ &    4bj&))"455A::99;;!&$66	))))EET]011dj999rv   round)rs   raiser  r6   r  r7   c                F    |                      |t          j        ||          S rr   )r  r$   NEAREST_HALF_EVENr   r   r  r  s       rt   r  zTimelikeOps.round  s     {{4!:I{SSSrv   floorc                F    |                      |t          j        ||          S rr   )r  r$   MINUS_INFTYr  s       rt   r  zTimelikeOps.floor  s     {{4!4iMMMrv   ceilc                F    |                      |t          j        ||          S rr   )r  r$   
PLUS_INFTYr  s       rt   r  zTimelikeOps.ceil  s     {{4!3YLLLrv   r  r  r  rS  c               `    t          j        | j        |||                                           S Nr"  )rS   nananyr   rP   r   r  rS  s      rt   r_  zTimelikeOps.any  s%    }T]f499;;WWWWrv   c               `    t          j        | j        |||                                           S r  )rS   nanallr   rP   r  s      rt   r>  zTimelikeOps.all  s'     }T]f499;;WWWWrv   c                    d | _         d S rr   rn  r   s    rt   r   zTimelikeOps._maybe_clear_freq  s    


rv   c                4   |nyt          |           dk    rJt          |t                    r5| j        j        dk    r$t          |t
                    st          d          n|dk    sJ t          | j                  }| 	                                }||_
        |S )z
        Helper to get a view on the same data, with a new freq.

        Parameters
        ----------
        freq : DateOffset, None, or "infer"

        Returns
        -------
        Same type as self
        Nr   r  rf  re  )r   r}   r   r~   r  r   r  r#   rk  r   r   )r   r   r   s      rt   
_with_freqzTimelikeOps._with_freq  s     <YY!^^
4 < <^z#%%jt.D.D% JKKK 7????T/00Diikk	
rv   r   c                    t          | j        t          j                  r| j        S t	                                                      S rr   )r}   r~   r   r   r   _values_for_json)r   r   s    rt   r  zTimelikeOps._values_for_json	  s7    dj"(++ 	!= ww'')))rv   use_na_sentinelsortc                ~   | j         mt          j        t          |           t          j                  }|                                 }|r&| j         j        dk     r|d d d         }|d d d         }||fS |r%t          dt          |           j	         d          t                                          |          S )Nr   r   zThe 'sort' keyword in zu.factorize is ignored unless arr.freq is not None. To factorize with sort, call pd.factorize(obj, sort=True) instead.)r  )r   r   aranger   intpr   r   NotImplementedErrorr  r  r   	factorize)r   r  r  codesuniquesr   s        rt   r  zTimelikeOps.factorize	  s    
 9 Ic$iirw777EiikkG (	addd!$$B$-'>! 	 &=d)< = = =  
 ww   AAArv   r   	to_concatSequence[Self]r*   c                X   t                                          ||          }|d         |dk    rwd |D             }j        dt          fd|D                       rIt	          |d d         |dd                    }t          fd|D                       rj        }||_        |S )Nr   c                0    g | ]}t          |          |S r   )r   )r   r   s     rt   r  z1TimelikeOps._concat_same_type.<locals>.<listcomp>C	  s#    888qQ8888rv   c              3  8   K   | ]}|j         j         k    V  d S rr   r   )r   r   r  s     rt   r   z0TimelikeOps._concat_same_type.<locals>.<genexpr>E	  s,      +R+R1AFch,>+R+R+R+R+R+Rrv   r  r   c              3  d   K   | ]*}|d          d         j         z   |d         d          k    V  +dS )r   r  r   Nr  )r   pairr  s     rt   r   z0TimelikeOps._concat_same_type.<locals>.<genexpr>G	  s?      NNtAwr{SX-a;NNNNNNrv   )r   _concat_same_typer   r>  zipr   )r  r  r  new_objpairsr  r  r   s         @rt   r  zTimelikeOps._concat_same_type6	  s     ''++It<<l199 98I888Ix#+R+R+R+R	+R+R+R(R(R#IcrcNIabbM::NNNNNNNNN -"xH$,GMrv   Corderc                d    t                                          |          }| j        |_        |S )N)r  )r   r   r   r   )r   r  r  r   s      rt   r   zTimelikeOps.copyL	  s(    '',,U,++	rv   r/   r|  rk   c          
         |dk    rt           |s| j        }	n| j                                        }	t          j        |	f||||||d| |s| S t          |                               |	| j                  S )z2
        See NDFrame.interpolate.__doc__.
        linear)r  r  r|  limitlimit_direction
limit_arear   )r  r   r   rR   interpolate_2d_inplacer  r  r~   )
r   r  r  r|  r  r  r  r   r   out_datas
             rt   interpolatezTimelikeOps.interpolateQ	  s      X%% 	,}HH}))++H&		
+!		
 		
 		
 		
 		
  	KDzz%%hdj%AAArv   c                
   t          j        | j                  sdS | j        }|t          k    }t          | j                  }t          |          }t          j        |||z  dk              	                                dk    }|S )z
        Check if we are round times at midnight (and no timezone), which will
        be given a more compact __repr__ than other cases. For TimedeltaArray
        we are checking for multiples of 24H.
        Fr   )
r   r  r~   r   r   r   r"   r   logical_andr8  )r   
values_intconsider_valuesr  ppd	even_dayss         rt   _is_dates_onlyzTimelikeOps._is_dates_onlyz	  s     tz** 	5Y
$,"4:..d## N?J4D4IJJNNPPTUU	rv   )r   r   rx   r   rL  )rp  rq  )r   r   )rw  r~  rx   r4   )rx   r3  rO  rM  )r9  rp   r5  r   rx   r4   )r  r  r  rp   )r  r  )r  r6   r  r7   rx   r4   )r  r  rS  r   rx   r   rN  rK  )TF)r  r   r  r   )r   )r  r  r  r*   rx   r4   )r  )r  rp   rx   r4   )
r  r/   r  r3  r|  rk   r   r   rx   r4   rJ  ),r  rP  rQ  rR  rS  r   rg  r   classmethodri  rT  r   setterr   rs  rj  rz  r?   r	  r9  r8  r  r  r  r=   
_round_doc_round_exampler   r  _floor_exampler  _ceil_exampler  r_  r>  r   r  r  r  r  r   r  r  rU  rV  s   @rt   r  r    s           !s~EZ7 Z7 Z7 Z7 Z7x ' ' ['   X 
[
 
 
 [
 6 6 6 U6@ ( ( ( [ U(T ' ' ' [' 8 8 8 ^8 ) ) ) ^)
 
 
 
 
*  	I 	I 	I 	I 	I 	I: : :, XzN*22g2>>?? $+'.	T T T T @?T XzN*22g2>>?? $+'.	N N N N @?N XzM)11V1<<== $+'.	M M M M >=M -1 X X X X X X -1 X X X X X X      @* * * * * * !%B B B B B B B0        [*      
$B $B $B $BR    X    rv   r  r   r   cls_nametuple[ArrayLike, bool]c                d   t          | d          sUt          | t          t          f          s't	          j        |           dk    rt          |           } t          |           } d}n9t          | t                    rt          d| d          t          | d          } t          | t                    s#t          | t                    r-| j        j        dv r|                     d	t          
          } d}nt          | t                    r+|                                 } |                                 } d}nxt          | t          j        t$          f          st	          j        |           } nBt          | t(                    r-| j                            | j        t0                    j        } d}| |fS )Nr~   r   FzCannot create a z from a MultiIndex.Tr6  r  r  r\  r  )r1  r}   r   tupler   r   rA   rN   r  ra   r^   r\   r~   r  rF  r   _maybe_convert_datelike_arrayr  r]   r  rM   r<  taker  r   _values)r   r   r  s      rt   !ensure_arraylike_for_datetimeliker  	  s    4!! 7$u.. 	274==A3E3E::D6t<<	D-	(	( 7H8HHHIIIT666$%% 4,--26*/T2I2I}}Wt}44	D-	.	. 1133}}rz>:;; 	z$	D.	)	)  ##DJ3#??G:rv   rw  r   c                    d S rr   r   rw  s    rt   validate_periodsr  	      Crv   int | floatr3  c                    d S rr   r   r  s    rt   r  r  	  r  rv   int | float | Noner~  c                    | rt          j        |           r8t          j        dt          t                                 t          |           } n&t          j        |           st          d|            | S )a9  
    If a `periods` argument is passed to the Datetime/Timedelta Array/Index
    constructor, cast it to an integer.

    Parameters
    ----------
    periods : None, float, int

    Returns
    -------
    periods : None or int

    Raises
    ------
    TypeError
        if periods is None, float, or int
    NzNon-integer 'periods' in pd.date_range, pd.timedelta_range, pd.period_range, and pd.interval_range are deprecated and will raise in a future version.r   zperiods must be a number, got )	r   is_floatr   r   r   r@   r3  r  r  r  s    rt   r  r  	  s    $ <   	HM2 +--    'llGG(( 	HFWFFGGGNrv   r   r   rk  c                V    |&|  | |k    rt          d| d| j                   | |} | S )a
  
    If the user passes a freq and another freq is inferred from passed data,
    require that they match.

    Parameters
    ----------
    freq : DateOffset or None
    inferred_freq : DateOffset or None

    Returns
    -------
    freq : DateOffset or None
    Nrx  ry  )r%  rh  )r   rk  s     rt   rh  rh  	  s]        5 5"m " "<" "  
 < DKrv   r~   'DatetimeTZDtype | np.dtype | ArrowDtypec                    t          | t                    r| j        S t          | t                    r(| j        dvrt          d| d          | j        j        S t          j        |           d         S )z
    Return the unit str corresponding to the dtype's resolution.

    Parameters
    ----------
    dtype : DatetimeTZDtype or np.dtype
        If np.dtype, we assume it is a datetime64 dtype.

    Returns
    -------
    str
    r  ra  z does not have a resolution.r   )	r}   rJ   r9  rH   r  r%  pyarrow_dtyper   datetime_datar   s    rt   r  r  
  sy     %)) (z	E:	&	& (:T!!DDDDEEE"''E""1%%rv   )ro   rp   )rw   r.   rx   r.   )r   r   r  rp   rx   r  )rw  r   rx   r   )rw  r  rx   r3  )rw  r  rx   r~  )r   r   rk  r   rx   r   )r~   r  rx   rp   )
__future__r   r   r   	functoolsr   r  typingr   r   r	   r
   r   r   r   r   r   numpyr   pandas._configr   pandas._libsr   r   pandas._libs.arraysr   pandas._libs.tslibsr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   pandas._libs.tslibs.fieldsr$   r%   pandas._libs.tslibs.np_datetimer&   pandas._libs.tslibs.timedeltasr'   pandas._libs.tslibs.timestampsr(   pandas._typingr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   pandas.compat.numpyr9   r  pandas.errorsr:   r;   r<   pandas.util._decoratorsr=   r>   r?   pandas.util._exceptionsr@   pandas.core.dtypes.castrA   pandas.core.dtypes.commonrB   rC   rD   rE   rF   rG   pandas.core.dtypes.dtypesrH   rI   rJ   rK   rL   pandas.core.dtypes.genericrM   rN   pandas.core.dtypes.missingrO   rP   pandas.corerQ   rR   rS   rT   pandas.core.algorithmsrU   rV   rW   pandas.core.array_algosrX   pandas.core.arraylikerY   pandas.core.arrays._mixinsrZ   r[   pandas.core.arrays.arrow.arrayr\   pandas.core.arrays.baser]   pandas.core.arrays.integerr^   pandas.core.commoncorecommonr   pandas.core.constructionr_   r;  r`   ra   pandas.core.indexersrb   rc   pandas.core.ops.commonrd   pandas.core.ops.invalidre   rf   pandas.tseriesrg   collections.abcrh   ri   rE  rk   r  rl   rm   rn   r   ru   r   r   rX  r  r  r  r  r  r  r  rh  r  r   rv   rt   <module>r     s5   " " " " " "              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	      - - - - - -        . - - - - -                                     &        K J J J J J = = = = = = C C C C C C                                   $ / . . . . .         
         
 5 4 4 4 4 4 K K K K K K                                          
                    
 ? > > > > > * * * * * *        ? > > > > > 2 2 2 2 2 2 3 3 3 3 3 3                           
        < ; ; ; ; ;       
 ' & & & & &        
           ('121 1 1 1
   6W3 W3 W3 W3 W3)W3 W3 W3t0;1 ;1 ;1 ;1 ;1( ;1 ;1 ;1|=
~668^ ^ ^ ^ ^( ^ ^ ^J$ $ $ $N 
   
 
   
   D   :& & & & & &rv   