Ë
    *�£j½| ã                  óè  — U 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mZ d dlZd dlZd dlmZ d dlmZ d dlmZmZ 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,m-Z-m.Z. d d
l/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH d dlImJZK d dlLmMZMmNZNmOZO d dlPmQZQ d dlRmSZS d dlTmUZU d dlVmWZWmXZXmYZYmZZZm[Z[m\Z\ d dl]m^Z^m_Z_m`Z`maZambZb d dlcmdZdmeZe d dlfmgZgmhZh d dlimjZjmkZkmlZlmmZm d dlnmoZompZpmqZq d dlrmsZs d dltmuZu d dlvmwZwmxZx d dlymzZz d dl{m|Z| d dl}m~Z~ d dlm€c m�Z‚ d d lƒm„Z…m†Z†m‡Z‡ d d!lˆm‰Z‰mŠZŠ d d"l‹mŒZŒ d d#l�mŽZŽm�Z� d d$l�m‘Z‘ er d d%l’m“Z“m”Z”m•Z• d d&l8m–Z– d d'l—m˜Z˜ d d(l™mšZšm›Z›mœZœ e;e z  Z�d)ežd*<   d9d+„ZŸd:d,„Z  G d-„ d.euew«      Z¡ G d/„ d0e¡«      Z¢ G d1„ d2e¡«      Z£	 	 	 	 	 	 d;d3„Z¤ed<d4„«       Z¥ed=d5„«       Z¥d>d6„Z¥	 	 	 	 	 	 d?d7„Z¦d@d8„Z§y)Aé    )Úannotations)ÚdatetimeÚ	timedelta)ÚwrapsN)	ÚTYPE_CHECKINGÚAnyÚLiteralÚSelfÚ	TypeAliasÚUnionÚcastÚfinalÚoverload)Úusing_string_dtype)Ú
get_option)ÚalgosÚlib)Ú
BaseOffsetÚDayÚ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Ú	timezonesÚ	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ÚSequenceIndexerÚTakeIndexerÚTimeAmbiguousÚTimeNonexistentÚnpt)Úfunction)ÚAbstractMethodErrorÚInvalidComparisonÚPerformanceWarning)Ú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)ÚCallableÚIteratorÚSequence)ÚTimeUnit©ÚIndex)ÚDatetimeArrayÚPeriodArrayÚTimedeltaArrayr   ÚDTScalarOrNaTc                ó:   — t        | «      } t        | «      |«      S ©N)rg   re   )Úop_nameÚops     úAC:\FundamentalWorkbench\vendor\pandas\core\arrays\datetimelike.pyÚ_make_unpacked_invalid_oprx   ª   s   € Ü	˜Ó	!€BØ,Ô# GÓ,¨RÓ0Ð0ó    c                óJ   ‡ — 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                ó@  •— t        | j                  t        «      s ‰| g|¢­i |¤ŽS | j                  d«      } ‰|g|¢­i |¤Ž}|t        u rt        S t        |t
        «      r| j                  |j                  «      S |j                  d«      }| j                  |«      S )NúM8[ns]Úi8)	Ú
isinstanceÚdtyperM   Úviewr   r   Ú	_box_funcÚ_valueÚ_from_backing_data)ÚselfÚargsÚkwargsÚarrÚresultÚres_i8Úmeths         €rw   Únew_methz"_period_dispatch.<locals>.new_meth¶   s�   ø€ ä˜$Ÿ*™*¤kÔ2Ù˜Ð.˜tÒ. vÑ.Ð.à�i‰i˜Ó!ˆÙ�cÐ+˜DÒ+ FÑ+ˆØ”S‰=ÜˆJÜ˜¤	Ô*Ø—>‘> &§-¡-Ó0Ð0à—‘˜TÓ"ˆØ×&Ñ& vÓ.Ð.ry   )r   r   r1   )rŠ   r‹   s   ` rw   Ú_period_dispatchrŒ   ¯   s*   ø€ ô ˆ4ƒ[ó/ó ð/ô ”�8ÓÐry   c                  óÐ  ‡ — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   edpd„«       Z	 dq	 	 	 	 	 drd„Zedsd„«       Z	dtd„Z
	 	 	 	 dud„Zdvd„Zd„ Zdwd„Zdxd„Zedyd„«       Zdddœ	 	 	 dzd„Zd{d|d„Z	 d}	 	 	 	 	 d~d„Zedd„«       Ze	 	 	 	 d€d„«       Zd�ˆ fd„Zd‚d „Z	 	 	 	 	 	 dƒˆ fd!„Zd„d"„Zd…d†ˆ fd$„Zed‡d%„«       Zedˆd&„«       Zed‰d'„«       ZedŠd‹d(„«       ZdŒd‹ˆ fd)„Zd�ˆ fd*„Zd+„ Zdd#d,œ	 	 	 dŽd-„Zd{d�d.„Zd{d�d/„Zd0„ Z e!d‘d1„«       Z"e#dŒd’d2„«       Z$d“d3„Z%d”d4„Z&ed”d5„«       Z'edpd6„«       Z(e)df	 	 	 d•d7„Z*ed–d8„«       Z+ed–d9„«       Z,ed—d:„«       Z-ed˜d;„«       Z.edpd<„«       Z/edpd=„«       Z0edpd>„«       Z1d?„ Z2 e3d@«      Z4 e3dA«      Z5 e3dB«      Z6 e3dC«      Z7 e3dD«      Z8 e3dE«      Z9 e3dF«      Z: e3dG«      Z; e3dH«      Z< e3dI«      Z= e3dJ«      Z> e3dK«      Z?e!	 	 d™dL„«       Z@e!d‚dM„«       ZAe!dšdN„«       ZBe!d›dO„«       ZCe!	 	 	 	 dœdP„«       ZDe!d�dQ„«       ZEe!dždR„«       ZFe!dŸdS„«       ZGdT„ ZHdU„ ZId dV„ZJe!d¡dW„«       ZKe!d‡dX„«       ZLe!dwdY„«       ZMe!d¢dZ„«       ZNe!d£d[„«       ZOd#d\œd¤d]„ZP eQd^«      d_„ «       ZRd`„ ZS eQda«      db„ «       ZTdc„ ZUd‡dd„ZVd‡de„ZWeX	 	 	 	 	 	 d¥ˆ fdf„«       ZYeXdd#dgœd¦dh„«       ZZeXdd#dgœd¦di„«       Z[d#djdkœd§dl„Z\eXdd#dgœd¦dm„«       Z]d…d¨dn„Z^	 	 	 	 	 	 	 	 	 	 d©do„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Úfreqc                 ó   — y)NT© ©r„   s    rw   Ú_can_hold_naz#DatetimeLikeArrayMixin._can_hold_naÚ   s   € àry   NFc                ó   — t        | «      ‚rt   ©r=   )r„   Údatar   r•   Úcopys        rw   Ú__init__zDatetimeLikeArrayMixin.__init__Þ   s   € ô " $Ó'Ð'ry   c                ó   — t        | «      ‚)z£
        The scalar associated with this datelike

        * PeriodArray : Period
        * DatetimeArray : Timestamp
        * TimedeltaArray : Timedelta
        r›   r˜   s    rw   Ú_scalar_typez#DatetimeLikeArrayMixin._scalar_typeã   s   € ô " $Ó'Ð'ry   c                ó   — 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„   Úvalues     rw   Ú_scalar_from_stringz*DatetimeLikeArrayMixin._scalar_from_stringî   ó   € ô$ " $Ó'Ð'ry   c                ó   — 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])
        np.datetime64('1970-01-01T00:00:00.000000000')
        r›   r¢   s     rw   Ú_unbox_scalarz$DatetimeLikeArrayMixin._unbox_scalar  s   € ô* " $Ó'Ð'ry   c                ó   — 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„   Úothers     rw   Ú_check_compatible_withz-DatetimeLikeArrayMixin._check_compatible_with  r¥   ry   c                ó   — t        | «      ‚)zI
        box function to get object from internal representation
        r›   )r„   Úxs     rw   r�   z DatetimeLikeArrayMixin._box_func/  s   € ô " $Ó'Ð'ry   c                óF   — t        j                  || j                  d¬«      S )z1
        apply box func to passed values
        F)Úconvert)r   Ú	map_inferr�   ©r„   Úvaluess     rw   Ú_box_valuesz"DatetimeLikeArrayMixin._box_values5  s   € ô �}‰}˜V T§^¡^¸UÔCÐCry   c                ó†   ‡ — ‰ j                   dkD  rˆ fd„t        t        ‰ «      «      D «       S ˆ fd„‰ j                  D «       S )Né   c              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wrt   r—   )Ú.0Únr„   s     €rw   Ú	<genexpr>z2DatetimeLikeArrayMixin.__iter__.<locals>.<genexpr>=  s   øè ø€ Ð6Ñ%5 �D˜•GÑ%5ùs   ƒc              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrt   )r�   )r·   Úvr„   s     €rw   r¹   z2DatetimeLikeArrayMixin.__iter__.<locals>.<genexpr>?  s   øè ø€ Ð9©y¨!�D—N‘N 1×%©yùs   ƒ)ÚndimÚrangeÚlenÚasi8r˜   s   `rw   Ú__iter__zDatetimeLikeArrayMixin.__iter__;  s1   ø€ Ø�9‰9�qŠ=Û6¤U¬3¨t«9Ô%5Ó6Ð6ã9¨t¯yªyÓ9Ð9ry   c                ó8   — | j                   j                  d«      S )z‘
        Integer representation of the values.

        Returns
        -------
        ndarray
            An ndarray with int64 dtype.
        r}   )r“   r€   r˜   s    rw   r¿   zDatetimeLikeArrayMixin.asi8A  s   € ð �}‰}×!Ñ! $Ó'Ð'ry   r   )Úna_repÚdate_formatc               ó   — t        | «      ‚)z|
        Helper method for astype when converting to strings.

        Returns
        -------
        ndarray[str]
        r›   )r„   rÂ   rÃ   s      rw   Ú_format_native_typesz+DatetimeLikeArrayMixin._format_native_typesQ  s   € ô " $Ó'Ð'ry   c                ó   — dj                   S )Nz'{}')Úformat)r„   Úboxeds     rw   Ú
_formatterz!DatetimeLikeArrayMixin._formatter]  s   € à�}‰}Ðry   c                ó>  — t        |«      r3|du rt        d«      ‚t        j                  t	        | «      t
        ¬«      S |du r!t        j                  | j                  |¬«      S | j                  }| j                  r!|j                  «       }d|j                  _
        |S )NFz:Unable to avoid copy while creating an array as requested.©r   T)rF   Ú
ValueErrorÚnpr`   ÚlistÚobjectr“   Ú	_readonlyr€   ÚflagsÚ	writeable)r„   r   r�   rˆ   s       rw   Ú	__array__z DatetimeLikeArrayMixin.__array__d  s‚   € ô ˜5Ô!Ø�u‰}Ü ØPóð ô —8‘8œD ›J¬fÔ5Ð5à�4‰<Ü—8‘8˜DŸM™M°Ô7Ð7à—‘ˆØ�>Š>Ø—[‘[“]ˆFØ%*ˆF�L‰LÔ"Øˆry   c                 ó   — y rt   r—   ©r„   Úkeys     rw   Ú__getitem__z"DatetimeLikeArrayMixin.__getitem__x  ó   € Ø@Cry   c                 ó   — y rt   r—   rÕ   s     rw   r×   z"DatetimeLikeArrayMixin.__getitem__{  s   € ð ry   c                óÖ   •— t        t        t        t        f   t        ‰| �  |«      «      }t        j                  |«      r|S t        t        |«      }| j                  |«      |_	        |S )z’
        This getitem defers to the underlying array, which by-definition can
        only handle list-likes, slices, and integer scalars
        )
r   r   r
   rr   Úsuperr×   r   Ú	is_scalarÚ_get_getitem_freqÚ_freq)r„   rÖ   rˆ   Ú	__class__s      €rw   r×   z"DatetimeLikeArrayMixin.__getitem__�  s]   ø€ ô ”eœD¤-Ð/Ñ0´%±'Ñ2EÀcÓ2JÓKˆÜ�=‰=˜Ô ØˆMô œ$ Ó'ˆFð ×-Ñ-¨cÓ2ˆŒØˆry   c                ó:  — t        | j                  t        «      }|r| j                  }|S | j                  dk7  rd}|S t        | |«      }d}t        |t        «      rA| j                  �'|j                  �|j                  | j                  z  }|S | j                  }|S |t        u r| j                  }|S t        j                  |«      rSt        j                  |j                  t        j                  «      «      }t        |t        «      r| j!                  |«      S |S )z\
        Find the `freq` attribute to assign to the result of a __getitem__ lookup.
        rµ   N)r~   r   rM   r•   r¼   rc   ÚsliceÚstepÚEllipsisÚcomÚis_bool_indexerr   Úmaybe_booleans_to_slicer€   rÍ   Úuint8rÝ   )r„   rÖ   Ú	is_periodr•   Únew_keys        rw   rÝ   z(DatetimeLikeArrayMixin._get_getitem_freq”  s  € ô ˜tŸz™z¬;Ó7ˆ	ÙØ—9‘9ˆDð& ˆð% �Y‰Y˜!Š^ØˆDð" ˆô & d¨CÓ0ˆCØˆDÜ˜#œuÔ%Ø—9‘9Ð(¨S¯X©XÐ-AØŸ8™8 d§i¡iÑ/�Dð ˆð  Ÿ9™9�Dð ˆð œ‘ð —y‘y�ð
 ˆô	 ×$Ñ$ SÔ)Ü×5Ñ5°c·h±h¼r¿x¹xÓ6HÓI�Ü˜g¤uÔ-Ø×1Ñ1°'Ó:Ð:Øˆry   c                óf   •— t        ||| «      }t        ‰| �	  ||«       |ry | j                  «        y rt   )rd   rÛ   Ú__setitem__Ú_maybe_clear_freq)r„   rÖ   r£   Úno_oprß   s       €rw   rë   z"DatetimeLikeArrayMixin.__setitem__²  s6   ø€ ô & c¨5°$Ó7ˆô 	‰Ñ˜C Ô'áØà×ÑÕ ry   c                 ó   — y rt   r—   r˜   s    rw   rì   z(DatetimeLikeArrayMixin._maybe_clear_freqÈ  s   € ð 	ry   Tc                ó`  •— t        |«      }|t        k(  rÈ| j                  j                  dk(  r=t	        d| «      } | j
                  }t        || j                  d| j                  ¬«      }|S | j                  j                  dk(  rt        | j                  d¬«      S | j                  | j
                  j                  «       «      j                  | j                  «      S t        |«      r`t!        |t"        «      r@| j%                  |j&                  ¬«      }|j)                  «       }|j+                  ||d	¬
«      S | j%                  «       S t!        |t"        «      rt,        ‰	| �]  ||¬«      S |j                  dv rO| j
                  }|t0        j2                  k7  rt5        d| j                  › d|› d�«      ‚|r|j7                  «       }|S |j                  dv r| j                  |k7  s|j                  dk(  r&dt9        | «      j:                  › d|› �}t5        |«      ‚t1        j<                  | |¬«      S )NÚMro   Ú	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Ë   )rH   rÏ   r   Úkindr   r¿   r"   rò   Ú_cresor#   r“   r³   ÚravelÚreshapeÚshaperG   r~   rL   rÅ   Úna_valueÚconstruct_array_typeÚ_from_sequencerÛ   ÚastyperÍ   Úint64Ú	TypeErrorr�   ÚtypeÚ__name__Úasarray)
r„   r   r�   Úi8dataÚ	convertedÚ
arr_objectÚclsr²   Úmsgrß   s
            €rw   r  zDatetimeLikeArrayMixin.astypeÍ  sè  ø€ ô
 ˜UÓ#ˆà”FŠ?Ø�z‰z�‰ #Ò%Ü˜O¨TÓ2�ð Ÿ™�Ü.ØØ—w‘wØ#ØŸ™ô	�	ð !Ð à—‘—‘ CÒ'Ü*¨4¯=©=¸dÔCÐCà×#Ñ# D§I¡I§O¡OÓ$5Ó6×>Ñ>¸t¿z¹zÓJÐJä˜UÔ#Ü˜%¤Ô0Ø!×6Ñ6¸e¿n¹nÐ6ÓM�
Ø×0Ñ0Ó2�Ø×)Ñ)¨*¸EÈÐ)ÓNÐNà×0Ñ0Ó2Ð2ä˜œ~Ô.Ü‘7‘> %¨d�>Ó3Ð3Ø�Z‰Z˜4Ñð —Y‘YˆFØœŸ™Ò ÜØ& t§z¡z l°$°u°gð >Cð Cóð ñ
 ØŸ™›�ØˆMØ�j‰j˜DÑ  T§Z¡Z°5Ò%8¸U¿Z¹ZÈ3Ò=Nð !¤ d£×!4Ñ!4Ð 5°ZÀ¸wÐGˆCÜ˜C“.Ð ä—:‘:˜d¨%Ô0Ð0ry   c                 ó   — y rt   r—   r˜   s    rw   r€   zDatetimeLikeArrayMixin.view  s   € Øry   c                 ó   — y rt   r—   ©r„   r   s     rw   r€   zDatetimeLikeArrayMixin.view	  s   € Ø?Bry   c                 ó   — y rt   r—   r  s     rw   r€   zDatetimeLikeArrayMixin.view  rØ   ry   c                 ó   — y rt   r—   r  s     rw   r€   zDatetimeLikeArrayMixin.view  s   € Ø<?ry   c                ó"   •— t         ‰| �  |«      S rt   )rÛ   r€   )r„   r   rß   s     €rw   r€   zDatetimeLikeArrayMixin.view  s   ø€ ô ‰w‰|˜EÓ"Ð"ry   c                ó4   •— t         ‰| �  ||«       d | _        y rt   )rÛ   Ú_putmaskrÞ   )r„   Úmaskr£   rß   s      €rw   r  zDatetimeLikeArrayMixin._putmask  s   ø€ Ü‰Ñ˜˜uÔ%Øˆ�
ry   c                ó~  — t        |t        «      r	 | j                  |«      }t        || j                  «      s|t        u r%| j                  |«      }	 | j                  |«       |S t        |«      st        |«      ‚t        |«      t        | «      k7  rt        d«      ‚	 | j                  |d¬«      }| j                  |«       |S # t        t        f$ r}t        |«      |‚d }~ww xY w# t        $ r}t        |«      |‚d }~ww xY w# t        $ r.}t        t        |dd «      «      rnt        |«      |‚Y d }~|S d }~ww xY w)NzLengths must matchT)Úallow_objectr   )r~   Ústrr¤   rÌ   r   r>   r‘   r   r    r«   r  rE   r¾   Ú_validate_listlikerF   Úgetattr)r„   rª   Úerrs      rw   Ú_validate_comparison_valuez1DatetimeLikeArrayMixin._validate_comparison_value  sD  € Ü�eœSÔ!ð8à×0Ñ0°Ó7�ô
 �e˜T×5Ñ5Ô6¸%Ä3¹,Ø×%Ñ% eÓ,ˆEð8Ø×+Ñ+¨EÔ2ð, ˆô# ˜eÔ$Ü# EÓ*Ð*ä�‹Zœ3˜t›9Ò$ÜÐ1Ó2Ð2ð<Ø×/Ñ/°ÀDÐ/ÓI�Ø×+Ñ+¨EÔ2ð ˆøô; Ô 5Ð6ò 8ä'¨Ó.°CÐ7ûð8ûô ò 8ä'¨Ó.°CÐ7ûð8ûô ò <Ü"¤7¨5°'¸4Ó#@ÔAàä+¨EÓ2¸Ð;ó ð ˆûð<úsG   ’C ÁC( Â$D ÃC%ÃC Ã C%Ã(	DÃ1C=Ã=DÄ	D<Ä#D7Ä7D<)Úallow_listlikeÚunboxc               ó  — t        || j                  «      rn­t        |t        «      r	 | j                  |«      }nŠt        || j                  «      rt        }nmt        |«      r| j                  ||«      }t        |«      ‚t        || j                  «      r| j                  |«      }n| j                  ||«      }t        |«      ‚|s|S | j                  |«      S # t        $ r#}| j                  ||«      }t        |«      |‚d}~ww xY w)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    r  r¤   rÌ   Ú_validation_error_messager  rP   r   r   rQ   r‘   r§   )r„   r£   r  r  r  r  s         rw   Ú_validate_scalarz'DatetimeLikeArrayMixin._validate_scalarC  sû   € ô0 �e˜T×.Ñ.Ô/Øä˜œsÔ#ð.Ø×0Ñ0°Ó7‘ô
 # 5¨$¯*©*Ô5ä‰Eä�%Œ[ð ×0Ñ0°¸ÓGˆCÜ˜C“.Ð ä˜˜t×7Ñ7Ô8ð ×%Ñ% eÓ,‰Eð ×0Ñ0°¸ÓGˆCÜ˜C“.Ð áð ˆLØ×!Ñ! %Ó(Ð(øô9 ò .Ø×4Ñ4°U¸NÓK�Ü “n¨#Ð-ûð.ús   ©C Ã	DÃ#DÄDc                ó  — t        |d«      r t        |dd«      dkD  r|j                  › d�}ndt        |«      j                  › d�}|rd| j
                  j                  › d|› d�}|S 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        rw   r   z0DatetimeLikeArrayMixin._validation_error_message€  s°   € ô �5˜'Ô"¤w¨u°f¸aÓ'@À1Ò'DØŸ™˜ VÐ,‰Gàœ$˜u›+×.Ñ.Ð/¨qÐ1ˆGÙà% d×&7Ñ&7×&@Ñ&@Ð%Að B*Ø*1¨°)ð=ð ð ˆ
ð & d×&7Ñ&7×&@Ñ&@Ð%Að BØ�i˜yð*ð ð ˆ
ry   c                ó  — t        |t        | «      «      rR| j                  j                  dv r8|s6| j                  |j                  k7  r|j                  | j                  d¬«      }|S t        |t        «      r4t        |«      dk(  r&t        | «      j                  g | j                  ¬«      S t        |d«      rO|j                  t        k(  r<t        j                  |«      | j                  v r	 t        | «      j                  |«      }t        |t        «      rt#        |«      }t        |t$        j&                  «      r5|j                  t        k(  r"t        j(                  |d| j                  ¬«      }t+        |d¬	«      }t-        |«      }t+        |d¬	«      }t/        |«      r'	 t        | «      j                  || j                  ¬«      }t        |j                  t0        «      r@|j2                  j                  | j                  k(  r|j5                  «       }t+        |d¬	«      }|rt7        |j                  «      rnAt        | «      j9                  |j                  «      s| j!                  |d«      }t        |«      ‚| j                  j                  dv r|s|j                  | j                  d¬«      }|S # t        t        f$ r,}|r|cY d }~S | j!                  |d«      }t        |«      |‚d }~ww xY w# t        $ r Y �Œ6w xY w)
Nrø   F©Úround_okr   rË   r   T©Úconvert_non_numericÚdtype_if_all_nat©Úextract_numpy)r~   r  r   rú   ÚunitÚas_unitrÎ   r¾   r  r$  rÏ   r   Úinfer_dtyper�   rÌ   r  r   rB   rÍ   ÚndarrayÚmaybe_convert_objectsrb   Úpd_arrayrC   rJ   Ú
categoriesÚ_internal_get_valuesrF   r�   )r„   r£   r  r  r  s        rw   r  z)DatetimeLikeArrayMixin._validate_listlikeŸ  sd  € Ü�eœT $›ZÔ(Ø�z‰z�‰ $Ñ&©|ÀÇ	Á	ÈUÏZÉZÒ@WàŸ™ d§i¡i¸%˜Ó@�ØˆLä�eœTÔ"¤s¨5£z°Q¢ä˜“:×,Ñ,¨R°t·z±zÐ,ÓBÐBä�5˜'Ô" u§{¡{´fÒ'<ô �‰˜uÓ%¨×)<Ñ)<Ñ<ð2Ü  ›J×5Ñ5°eÓ<�Eô �eœTÔ"Ü;¸EÓBˆEÜ�eœRŸZ™ZÔ(¨U¯[©[¼FÒ-Bô ×-Ñ-Ø¨4À$Ç*Á*ôˆEô ˜e°4Ô8ˆÜ˜“ˆÜ˜e°4Ô8ˆä˜%Ô ðô ˜T›
×1Ñ1°%¸t¿z¹zÐ1ÓJ�ô �e—k‘kÔ#3Ô4à×Ñ×%Ñ%¨¯©Ò3à×2Ñ2Ó4�Ü% e¸4Ô@�áœO¨E¯K©KÔ8Øä�d“×0Ñ0°·±Ô=Ø×0Ñ0°¸Ó=ˆCÜ˜C“.Ð à�:‰:�?‰?˜dÑ"©<à—M‘M $§)¡)°e�MÓ<ˆEØˆøô_ #¤IÐ.ò 2Ù#Ø$�Ø×8Ñ8¸ÀÓE�CÜ# C›.¨cÐ1ûð	2ûô6 ò Úðús6   Ã-J4 Æ"&K2 Ê4K/ËK*ËK/ËK*Ë*K/Ë2	K?Ë>K?c                ó„   — t        |«      r| j                  |«      }n| j                  |d¬«      S | j                  |«      S )NT)r  )rE   r  r!  Ú_unboxr¢   s     rw   Ú_validate_setitem_valuez.DatetimeLikeArrayMixin._validate_setitem_valueá  s?   € Ü˜ÔØ×+Ñ+¨EÓ2‰Eà×(Ñ(¨¸tÐ(ÓDÐDà�{‰{˜5Ó!Ð!ry   c                ó�   — t        j                  |«      r| j                  |«      }|S | j                  |«       |j                  }|S )zZ
        Unbox either a scalar with _unbox_scalar or an instance of our own type.
        )r   rÜ   r§   r«   r“   r©   s     rw   r7  zDatetimeLikeArrayMixin._unboxé  sE   € ô
 �=‰=˜ÔØ×&Ñ& uÓ-ˆEð
 ˆð ×'Ñ'¨Ô.Ø—N‘NˆEØˆry   c                ó’   — ddl m} t        | ||¬«      } ||«      }t        |t        «      r|j                  «       S |j                  S )Nr   rm   )Ú	na_action)Úpandasrn   rW   r~   rO   Úto_numpyr`   )r„   Úmapperr;  rn   rˆ   s        rw   ÚmapzDatetimeLikeArrayMixin.mapû  s=   € å ä˜4 °9Ô=ˆÙ�v“ˆä�fœmÔ,Ø—?‘?Ó$Ð$à—<‘<Ðry   c                óL  — |j                   j                  dv r%t        j                  | j                  t
        ¬«      S t        |«      }t        |t        | «      «      s�|j                   t        k(  ret        j                  |d| j                   ¬«      }|j                   t        k7  r| j                  |«      S t        | j                  t        «      |«      S t        j                  | j                  t
        ¬«      S | j                   j                  dv r't        d| «      } |j                  | j                   «      }	 | j#                  |«       t        | j(                  |j(                  «      S # t$        t&        f$ r( t        j                  | j                  t
        ¬«      cY S w xY w)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Ë   Tr)  rø   úDatetimeArray | TimedeltaArray)r   rú   rÍ   Úzerosrþ   Úboolra   r~   r  rÏ   r   r2  rV   r  r   r/  r.  r«   r  rÌ   r¿   r±   s     rw   rV   zDatetimeLikeArrayMixin.isin  s<  € ð �<‰<×Ñ Ñ&ä—8‘8˜DŸJ™J¬dÔ3Ð3ä/°Ó7ˆä˜&¤$ t£*Ô-Ø�|‰|œvÒ%Ü×2Ñ2ØØ(,Ø%)§Z¡Zô�ð
 —<‘<¤6Ò)ØŸ9™9 VÓ,Ð,ô   §¡¬FÓ 3°VÓ<Ð<Ü—8‘8˜DŸJ™J¬dÔ3Ð3à�:‰:�?‰?˜dÑ"ÜÐ8¸$Ó?ˆDà—^‘^ D§I¡IÓ.ˆFð	4ð ×'Ñ'¨Ô/ô �D—I‘I˜vŸ{™{Ó+Ð+øô œ:Ð&ò 	4ä—8‘8˜DŸJ™J¬dÔ3Ò3ð	4ús   Ä;E, Å,4F#Æ"F#c                ó   — | j                   S rt   )Ú_isnanr˜   s    rw   rQ   zDatetimeLikeArrayMixin.isna>  s   € Ø�{‰{Ðry   c                ó(   — | j                   t        k(  S )z-
        return if each value is nan
        )r¿   r!   r˜   s    rw   rF  zDatetimeLikeArrayMixin._isnanA  s   € ð
 �y‰yœDÑ Ð ry   c                óH   — t        | j                  j                  «       «      S )zJ
        return if I have any nans; enables various perf speedups
        )rD  rF  Úanyr˜   s    rw   Ú_hasnazDatetimeLikeArrayMixin._hasnaH  s   € ô
 �D—K‘K—O‘OÓ%Ó&Ð&ry   c                óª   — | j                   rF|r|j                  |«      }|€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.
        )rJ  r  rÍ   ÚnanÚputmaskrF  )r„   rˆ   Ú
fill_valuer¯   s       rw   Ú_maybe_mask_resultsz*DatetimeLikeArrayMixin._maybe_mask_resultsO  sD   € ð& �;Š;ÙØŸ™ wÓ/�ØÐ!ÜŸV™V�
Ü�J‰J�v˜tŸ{™{¨JÔ7Øˆry   c                óH   — | j                   €y| j                   j                  S )a  
        Return the frequency object as a string if it's set, otherwise None.

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

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

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

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

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

        For PeriodIndex:

        >>> idx = pd.PeriodIndex(["2023-1", "2023-2", "2023-3"], freq="M")
        >>> idx.freqstr
        'M'
        N)r•   Úfreqstrr˜   s    rw   rQ  zDatetimeLikeArrayMixin.freqstrm  s"   € ð@ �9‰9ÐØØ�y‰y× Ñ Ð ry   c                ól   — | j                   dk7  ry	 t        j                  | «      S # t        $ r Y yw xY w)a  
        Tries to return a string representing a frequency generated by infer_freq.

        Returns None if it can't autodetect the frequency.

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

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

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

        For TimedeltaIndex:

        >>> tdelta_idx = pd.to_timedelta(["0 days", "10 days", "20 days"])
        >>> tdelta_idx
        TimedeltaIndex(['0 days', '10 days', '20 days'],
                       dtype='timedelta64[us]', freq=None)
        >>> tdelta_idx.inferred_freq
        '10D'
        rµ   N)r¼   rh   Ú
infer_freqrÌ   r˜   s    rw   Úinferred_freqz$DatetimeLikeArrayMixin.inferred_freq‘  s:   € ð: �9‰9˜Š>Øð	Ü×)Ñ)¨$Ó/Ð/øÜò 	Ùð	ús   ’' §	3²3c                ój   — | j                   }|€y 	 t        j                  |«      S # t        $ r Y y w xY wrt   )rQ  r   Úget_reso_from_freqstrÚKeyError)r„   rQ  s     rw   Ú_resolution_objz&DatetimeLikeArrayMixin._resolution_objµ  s;   € à—,‘,ˆØˆ?Øð	Ü×3Ñ3°GÓ<Ð<øÜò 	Ùð	ús   ‘& ¦	2±2c                ó.   — | j                   j                  S )zO
        Returns day, hour, minute, second, millisecond or microsecond
        )rX  Úattrnamer˜   s    rw   Ú
resolutionz!DatetimeLikeArrayMixin.resolution¿  s   € ð ×#Ñ#×,Ñ,Ð,ry   c                óJ   — t        j                  | j                  d¬«      d   S )NT©Útimeliker   ©r   Úis_monotonicr¿   r˜   s    rw   Ú_is_monotonic_increasingz/DatetimeLikeArrayMixin._is_monotonic_increasingÊ  ó   € ä×!Ñ! $§)¡)°dÔ;¸AÑ>Ð>ry   c                óJ   — t        j                  | j                  d¬«      d   S )NTr]  rµ   r_  r˜   s    rw   Ú_is_monotonic_decreasingz/DatetimeLikeArrayMixin._is_monotonic_decreasingÎ  rb  ry   c                óv   — t        t        | j                  j                  d«      «      «      | j                  k(  S )NÚK)r¾   rX   r¿   rü   Úsizer˜   s    rw   Ú
_is_uniquez!DatetimeLikeArrayMixin._is_uniqueÒ  s(   € ä”8˜DŸI™IŸO™O¨CÓ0Ó1Ó2°d·i±iÑ?Ð?ry   c                óò  — | j                   dkD  rXt        |dd «      | j                  k(  r> || j                  «       |j                  «       «      j	                  | j                  «      S 	 | j                  |«      }t        |dd «      }t        |«      r?t        j                  |t!        j"                  | j%                  t&        «      «      |«      }|S |t(        u r`|t*        j,                  u r't!        j.                  | j                  t0        ¬«      }|S t!        j2                  | j                  t0        ¬«      }|S t        | j                  t4        «      s€t7        t8        | «      } | j:                  |j:                  k7  rWt        |t=        | «      «      s	 |j?                  | j@                  d¬«      }n#|jJ                  }tI        | jJ                  ||«      S | jM                  |«      } || jJ                  jO                  d«      |jO                  d«      «      }tQ        |«      }| jR                  |z  }|jU                  «       r)|t*        j,                  u }	t!        jV                  |||	«       |S # t        $ r> t        |d«      r"t        |j                  t        «      rt        cY S t        | ||«      cY S w xY w# tB        $ r9 t!        jD                  |jF                  «      }tI        | jJ                  ||«      cY S w xY w)Nrµ   rþ   r   rË   Fr'  r}   ),r¼   r  rþ   rü   rý   r  r>   r$  r~   r   rI   ÚNotImplementedrf   rF   rU   Úcomp_method_OBJECT_ARRAYrÍ   r  r  rÏ   r   ÚoperatorÚneÚonesrD  rC  rM   r   ÚTimelikeOpsrû   r  r/  r.  rÌ   r`   Úasm8r)   r“   r7  r€   rQ   rF  rI  rM  )
r„   rª   rv   r   rˆ   Ú	other_arrÚ
other_valsÚo_maskr  Ú
nat_results
             rw   Ú_cmp_methodz"DatetimeLikeArrayMixin._cmp_methodÙ  sP  € Ø�9‰9�qŠ=œW U¨G°TÓ:¸d¿j¹jÒHá�d—j‘j“l E§K¡K£MÓ2×:Ñ:¸4¿:¹:ÓFÐFð	7Ø×3Ñ3°EÓ:ˆEô ˜˜w¨Ó-ˆÜ˜5Ô!ô ×1Ñ1Ø”B—J‘J˜tŸ{™{¬6Ó2Ó3°UóˆFð ˆMØ”C‰<Ø”X—[‘[Ñ ÜŸ™ §¡´4Ô8�ð ˆMô Ÿ™ $§*¡*´DÔ9�ØˆMä˜$Ÿ*™*¤kÔ2Üœ TÓ*ˆDØ�{‰{˜eŸl™lÒ*Ü! %¬¨d«Ô4ðà %§¡¨d¯i©iÀ% Ó H™ð !&§¡�IÜ9¸$¿-¹-ÈÐTVÓWÐWà—[‘[ Ó'ˆ
á�D—M‘M×&Ñ& tÓ,¨j¯o©o¸dÓ.CÓDˆä�e“ˆØ�{‰{˜VÑ#ˆØ�8‰8Œ:ØœxŸ{™{Ð*ˆJÜ�J‰J�v˜t ZÔ0àˆøôa !ò 	7Ü�u˜gÔ&¬:°e·k±kÄ:Ô+NÜ%Ò%Ü% d¨E°2Ó6Ò6ð	7ûô: &ò Ü$&§H¡H¨U¯Z©ZÓ$8˜	Ü=Ø ŸM™M¨9°bó ò ðús*   Á)I* ÆJ4 É*5J1Ê!J1Ê0J1Ê4?K6Ë5K6Ú__pow__Ú__rpow__Ú__mul__Ú__rmul__Ú__truediv__Ú__rtruediv__Ú__floordiv__Ú__rfloordiv__Ú__mod__Ú__rmod__Ú
__divmod__Ú__rdivmod__c                óÎ   — t        |t        «      r|j                  }d}||fS t        |t        t        f«      r|j
                  }d}||fS |j                  }|j                  }||fS )zN
        Get the int64 values and b_mask to pass to add_overflowsafe.
        N)r~   r   Úordinalr   r   r‚   rF  r¿   )r„   rª   Úi8valuesr  s       rw   Ú_get_i8_values_and_maskz.DatetimeLikeArrayMixin._get_i8_values_and_mask!  sq   € ô �eœVÔ$Ø—}‘}ˆHØˆDð ˜ˆ~Ðô ˜¤	¬9Ð5Ô6Ø—|‘|ˆHØˆDð
 ˜ˆ~Ðð —<‘<ˆDØ—z‘zˆHØ˜ˆ~Ðry   c                óJ  — t        | j                  t        «      r| j                  S t	        j
                  |«      syt        | j                  t        «      r| j                  S | j                  j                  dk(  rt        |t        «      r| j                  S | j                  j                  dk(  rGt        |t        «      r7|j                  �t        j                  |j                  «      r| j                  S t	        j                  | j                  d«      r6t        | j                  t        «      rt        |t        «      r| j                  S t	        j                  | j                  d«      r6t        |t        «      r&t        | j                  t        «      r| j                  S y)zP
        Check if we can preserve self.freq in addition or subtraction.
        Nrõ   rð   )r~   r   rM   r•   r   rÜ   r   rú   r   r   rò   r%   Úis_utcÚis_np_dtyper   r©   s     rw   Ú_get_arithmetic_result_freqz2DatetimeLikeArrayMixin._get_arithmetic_result_freq4  s  € ô �d—j‘j¤+Ô.Ø—9‘9ÐÜ—‘˜uÔ%ØÜ˜Ÿ	™	¤4Ô(à—9‘9ÐØ�Z‰Z�_‰_ Ò#¬
°5¼)Ô(DØ—9‘9Ðà�J‰J�O‰O˜sÒ"Ü˜5¤)Ô,Ø—‘Ð!¤Y×%5Ñ%5°e·h±hÔ%?ð
 —9‘9Ðä�O‰O˜DŸJ™J¨Ô,Ü˜4Ÿ9™9¤cÔ*Ü˜5¤)Ô,ð —9‘9Ðä�O‰O˜DŸJ™J¨Ô,Ü˜5¤)Ô,Ü˜4Ÿ9™9¤cÔ*à—9‘9Ðàry   c                óš  — t        j                  | j                  d«      s7t        dt	        | «      j
                  › dt	        |«      j
                  › �«      ‚t        d| «      } ddlm} ddl	m
} |t        usJ ‚t        |«      r\| j                  t        j                  «       j                  d| j                   › d	�«      z   } |j"                  ||j                  ¬
«      S t%        |«      }| j'                  |«      \  } }t        d| «      } | j)                  |«      \  }}t+        | j,                  t/        j0                  |d¬
«      «      }|j3                  d| j                   › d	�«      } ||j4                  | j                   ¬«      }|j3                  d| j                   › d	�«      }| j7                  |«      }	 |j"                  |||	¬«      S )Nrõ   úcannot add ú and rq   r   ©ro   )Útz_to_dtypezM8[Ú]rË   r}   ©rò   r.  ©r   r•   )r   rˆ  r   r  r  r  r   Úpandas.core.arraysro   Úpandas.core.arrays.datetimesrŽ  r   rQ   r“   Úto_datetime64r  r.  Ú_simple_newr   Ú_ensure_matching_resosr…  r   r¿   rÍ   r  r€   rò   r‰  )
r„   rª   ro   rŽ  rˆ   Úother_i8rs  Ú
res_valuesr   Únew_freqs
             rw   Ú_add_datetimelike_scalarz/DatetimeLikeArrayMixin._add_datetimelike_scalar^  sˆ  € ä�‰˜tŸz™z¨3Ô/ÜØœd 4›j×1Ñ1Ð2°%¼¸U»×8LÑ8LÐ7MÐNóð ô Ð$ dÓ+ˆå4Ý<àœCÑÐÐÜ�Œ;ð —]‘]¤S×%6Ñ%6Ó%8×%?Ñ%?À#ÀdÇiÁiÀ[ÐPQÐ@RÓ%SÑSˆFà,�=×,Ñ,¨V¸6¿<¹<ÔHÐHä˜%Ó ˆØ×1Ñ1°%Ó8‰ˆˆeÜÐ$ dÓ+ˆà×7Ñ7¸Ó>Ñˆ�&Ü! $§)¡)¬R¯Z©Z¸ÈÔ-MÓNˆØ—[‘[ 3 t§y¡y k°Ð!3Ó4ˆ
á˜uŸx™x¨d¯i©iÔ8ˆØ—[‘[ 3 t§y¡y k°Ð!3Ó4ˆ
Ø×3Ñ3°EÓ:ˆØ(ˆ}×(Ñ(¨¸5ÀxÔPÐPry   c                óº   — t        j                  | j                  d«      s7t        dt	        | «      j
                  › dt	        |«      j
                  › �«      ‚|| z   S )Nrõ   r‹  rŒ  )r   rˆ  r   r  r  r  r©   s     rw   Ú_add_datetime_arraylikez.DatetimeLikeArrayMixin._add_datetime_arraylike€  sS   € ä�‰˜tŸz™z¨3Ô/ÜØœd 4›j×1Ñ1Ð2°%¼¸U»×8LÑ8LÐ7MÐNóð ð
 �t‰|Ðry   c                ó  — | j                   j                  dk7  r!t        dt        | «      j                  › �«      ‚t        d| «      } t        |«      r	| t        z
  S t        |«      }| j                  |«      \  } }| j                  |«      S )Nrð   ú"cannot subtract a datelike from a ro   )r   rú   r  r  r  r   rQ   r   r   r–  Ú_sub_datetimelike)r„   rª   Útss      rw   Ú_sub_datetimelike_scalarz/DatetimeLikeArrayMixin._sub_datetimelike_scalarŠ  s€   € ð �:‰:�?‰?˜cÒ!ÜÐ@ÄÀdÃ×ATÑATÐ@UÐVÓWÐWä�O TÓ*ˆô �Œ;àœ#‘:Ðä�uÓˆà×.Ñ.¨rÓ2‰ˆˆbØ×%Ñ% bÓ)Ð)ry   c                ó  — | j                   j                  dk7  r!t        dt        | «      j                  › �«      ‚t        | «      t        |«      k7  rt        d«      ‚t        d| «      } | j                  |«      \  } }| j                  |«      S )Nrð   rž  ú$cannot add indices of unequal lengthro   )
r   rú   r  r  r  r¾   rÌ   r   r–  rŸ  r©   s     rw   Ú_sub_datetime_arraylikez.DatetimeLikeArrayMixin._sub_datetime_arraylike�  s}   € à�:‰:�?‰?˜cÒ!ÜÐ@ÄÀdÃ×ATÑATÐ@UÐVÓWÐWäˆt‹9œ˜E›
Ò"ÜÐCÓDÐDä�O TÓ*ˆà×1Ñ1°%Ó8‰ˆˆeØ×%Ñ% eÓ,Ð,ry   c                óü  — t        d| «      } ddlm} 	 | j                  |«       | j                  |«      \  }}t        | j                  t        j                  | d¬«      «      }|j                  d| j                  › d	�«      }| j                  |«      }	t        d
|	«      }	 |j                   ||j"                  |	¬«      S # t        $ r2}t        |«      j                  dd«      } t        |«      |«      |‚d }~ww xY w)Nro   r   ©rq   ÚcompareÚsubtractr}   rË   útimedelta64[r�  zTick | Noner‘  )r   r’  rq   Ú_assert_tzawareness_compatr  r  Úreplacer  r…  r   r¿   rÍ   r  r€   r.  r‰  r•  r   )
r„   rª   rq   r  Únew_messager—  rs  r˜  Úres_m8r™  s
             rw   rŸ  z(DatetimeLikeArrayMixin._sub_datetimelikeª  så   € ä�O TÓ*ˆå5ð	2Ø×+Ñ+¨EÔ2ð
  ×7Ñ7¸Ó>Ñˆ�&Ü% d§i¡i´·±¸X¸IÈTÔ1RÓSˆ
Ø—‘ <°·	±	¨{¸!Ð!<Ó=ˆà×3Ñ3°EÓ:ˆÜ˜ xÓ0ˆØ)ˆ~×)Ñ)¨&¸¿¹È8ÔTÐTøô ò 	2Ü˜c›(×*Ñ*¨9°jÓAˆKØ”$�s“)˜KÓ(¨cÐ1ûð	2ús   ”C  Ã 	C;Ã	-C6Ã6C;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   )rp   rË   )r   rˆ  r   r  r  r  Úpandas.core.arrays.periodrp   rÍ   Úbroadcast_torƒ  rþ   rM   r•   )r„   rª   rp   Úi8valsr   Úparrs         rw   Ú_add_periodz"DatetimeLikeArrayMixin._add_period¾  ss   € ä�‰˜tŸz™z¨3Ô/ÜÐ5´d¸4³j×6IÑ6IÐ5JÐKÓLÐLõ 	:ä—‘ §¡°·
±
Ó;ˆÜ˜EŸJ™JÓ'ˆÙ˜6¨Ô/ˆØ�d‰{Ðry   c                ó   — t        | «      ‚rt   r›   )r„   Úoffsets     rw   Ú_add_offsetz"DatetimeLikeArrayMixin._add_offsetË  s   € Ü! $Ó'Ð'ry   c                óŽ  — t        |«      rt        j                  | j                  d¬«      j	                  | j
                  j                  «      }|j                  t        «       t        | «      j                  || j                  ¬«      S t        d| «      } t        |«      }| j                  |«      \  } }| j                  |«      S )zk
        Add a delta of a timedeltalike

        Returns
        -------
        Same type as self
        r}   rË   rB  )rQ   rÍ   Úemptyrþ   r€   r“   r   Úfillr!   r  r•  r   r   r–  Ú_add_timedeltalike)r„   rª   Ú
new_valuess      rw   Ú_add_timedeltalike_scalarz0DatetimeLikeArrayMixin._add_timedeltalike_scalarÎ  sœ   € ô �Œ;äŸ™ $§*¡*°DÔ9×>Ñ>¸t¿}¹}×?RÑ?RÓSˆJØ�O‰OœDÔ!Ü˜“:×)Ñ)¨*¸D¿J¹JÐ)ÓGÐGô Ð4°dÓ;ˆÜ˜%Ó ˆØ×1Ñ1°%Ó8‰ˆˆeØ×&Ñ& uÓ-Ð-ry   c                ó¤   — t        | «      t        |«      k7  rt        d«      ‚t        d| «      j                  |«      \  } }| j	                  |«      S )zl
        Add a delta of a TimedeltaIndex

        Returns
        -------
        Same type as self
        r£  rB  )r¾   rÌ   r   r–  rº  r©   s     rw   Ú_add_timedelta_arraylikez/DatetimeLikeArrayMixin._add_timedelta_arraylikeâ  sT   € ô ˆt‹9œ˜E›
Ò"ÜÐCÓDÐDäØ,¨dó
ç
 Ñ
  Ó
'ñ 	ˆˆeð ×&Ñ& uÓ-Ð-ry   c                ó:  — | j                  |«      \  }}t        | j                  t        j                  |d¬«      «      }|j                  | j                  j                  «      }| j                  |«      }t        | «      j                  || j                  |¬«      S )Nr}   rË   r‘  )r…  r   r¿   rÍ   r  r€   r“   r   r‰  r  r•  )r„   rª   r—  rs  r»  r˜  r™  s          rw   rº  z)DatetimeLikeArrayMixin._add_timedeltalikeô  s…   € à×7Ñ7¸Ó>Ñˆ�&Ü% d§i¡i´·±¸HÈDÔ1QÓRˆ
Ø—_‘_ T§]¡]×%8Ñ%8Ó9ˆ
à×3Ñ3°EÓ:ˆô �D‹z×%Ñ%ØØ—*‘*Øð &ó 
ð 	
ry   c                óÌ  — t        | j                  t        «      r;t        dt	        | «      j
                  › dt	        t        «      j
                  › �«      ‚t        j                  | j                  t        j                  ¬«      }|j                  t        «       |j                  | j                  j                  «      }t	        | «      j                  || j                  d¬«      S )z$
        Add pd.NaT to self
        zCannot add rŒ  rË   Nr‘  )r~   r   rM   r  r  r  r   rÍ   r¸  rþ   r  r¹  r!   r€   r“   r•  ©r„   rˆ   s     rw   Ú_add_natzDatetimeLikeArrayMixin._add_nat  s¬   € ô
 �d—j‘j¤+Ô.ÜØœd 4›j×1Ñ1Ð2°%¼¼S»	×8JÑ8JÐ7KÐLóð ô —‘˜$Ÿ*™*¬B¯H©HÔ5ˆØ�‰”DÔØ—‘˜TŸ]™]×0Ñ0Ó1ˆä�D‹z×%Ñ%ØØ—*‘*Øð &ó 
ð 	
ry   c                ó2  — t        j                  | j                  t         j                  ¬«      }|j	                  t
        «       | j                  j                  dv r+t        d| «      } |j                  d| j                  › d�«      S |j                  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€   r.  rÁ  s     rw   Ú_sub_natzDatetimeLikeArrayMixin._sub_nat  sq   € ô —‘˜$Ÿ*™*¬B¯H©HÔ5ˆØ�‰”DÔØ�:‰:�?‰?˜dÑ"äÐ7¸Ó>ˆDØ—;‘; ¨d¯i©i¨[¸Ð:Ó;Ð;à—;‘;Ð0Ó1Ð1ry   c                ó.  — t        | j                  t        «      s7t        dt	        |«      j
                  › dt	        | «      j
                  › �«      ‚t        d| «      } | j                  |«       | j                  |«      \  }}t        | j                  t        j                  | d¬«      «      }t        j                  |D �cg c]  }| j                  j                  |z  ‘Œ c}«      }|€| j                   }n| j                   |z  }t"        ||<   |S c c}w )Núcannot subtract ú from rp   r}   rË   )r~   r   rM   r  r  r  r   r«   r…  r   r¿   rÍ   r  r`   r•   ÚbaserF  r   )r„   rª   r—  rs  Únew_i8_datar­   Únew_datar  s           rw   Ú_sub_periodlikez&DatetimeLikeArrayMixin._sub_periodlike-  sï   € ô ˜$Ÿ*™*¤kÔ2ÜØ"¤4¨£;×#7Ñ#7Ð"8¸¼tÀD»z×?RÑ?RÐ>SÐTóð ô �M 4Ó(ˆØ×#Ñ# EÔ*à×7Ñ7¸Ó>Ñˆ�&Ü& t§y¡y´"·*±*¸h¸YÈdÔ2SÓTˆÜ—8‘8¹ÓE¹°A˜TŸY™YŸ^™^¨aÓ/¸ÑEÓFˆàˆ>à—;‘;‰Dð —;‘; Ñ'ˆDÜˆ�‰Øˆùò Fs   Ã Dc                óî  — |t         j                  t         j                  fv sJ ‚t        |«      dk(  r| j                  dk(  r || |d   «      S t        d«      r;t        j                  dt        | «      j                  › d�t        t        «       ¬«       | j                  |j                  k(  sJ | j                  |j                  f«       ‚ || j                  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   Úperformance_warningsz)Adding/subtracting object-dtype array to z not vectorized.)Ú
stacklevelÚO)rl  ÚaddÚsubr¾   r¼   r   ÚwarningsÚwarnr  r  r?   rA   rþ   r  rÍ   r  )r„   rª   rv   r˜  s       rw   Ú_addsub_object_arrayz+DatetimeLikeArrayMixin._addsub_object_arrayF  sÎ   € ð  ”h—l‘l¤H§L¡LÐ1Ñ1Ð1Ð1Üˆu‹:˜Š?˜tŸy™y¨Aš~ñ �d˜E !™HÓ%Ð%äÐ,Ô-Ü�M‰MØ;Ü˜“:×&Ñ&Ð'Ð'7ð9ä"Ü+Ó-õ	ð �z‰z˜UŸ[™[Ò(ÐC¨4¯:©:°u·{±{Ð*CÓCÐ(á˜Ÿ™ CÓ(¬"¯*©*°UÓ*;Ó<ˆ
ØÐry   )Úskipnac               óÜ   — |dvrt        d|› dt        | «      › �«      ‚t        t        |«      } || j	                  «       fd|i|¤Ž}t        | «      j                  || j                  ¬«      S )N>   ÚcummaxÚcumminzAccumulation z not supported for rÕ  rË   )r  r  r  rY   r�   r•  r   )r„   ÚnamerÕ  r†   rv   rˆ   s         rw   Ú_accumulatez"DatetimeLikeArrayMixin._accumulatek  sm   € ØÐ+Ñ+Ü˜m¨D¨6Ð1DÄTÈ$ÃZÀLÐQÓRÐRäÔ/°Ó6ˆÙ�D—I‘I“KÑ9¨Ð9°&Ñ9ˆä�D‹z×%Ñ% f°D·J±JÐ%Ó?Ð?ry   Ú__add__c                ó   — t        |dd «      }t        |«      }|t        u r| j                  «       }�n½t	        |t
        t        t        j                  f«      r| j                  |«      }�n…t	        |t        «      rXt        j                  | j                  d«      r8t        |j                  ¬«      j!                  d«      }| j                  |«      }�nt	        |t"        «      r| j%                  |«      }�nút	        |t&        t        j(                  f«      r| j+                  |«      }�nÇt	        |t,        «      r3t        j                  | j                  d«      r| j/                  |«      }�n„t        j0                  |«      rjt	        | j                  t2        «      st5        | «      ‚t7        d| «      }|j9                  ||j                  j:                  z  t<        j>                  «      }�nt        j                  |d«      r| jA                  |«      }nÝtC        |«      r!| jE                  |t<        j>                  «      }n±t        j                  |d«      st	        |tF        «      r| jI                  |«      S tK        |«      rit	        | j                  t2        «      st5        | «      ‚t7        d| «      }|j9                  ||j                  j:                  z  t<        j>                  «      }ntL        S t	        |t        jN                  «      rDt        j                  |j                  d«      r$dd	l(m)}  |jT                  ||j                  ¬
«      S |S )Nr   ÚMm©ÚdaysÚsrõ   rp   rð   r   r¦  rË   )+r  ra   r   rÂ  r~   r   r   rÍ   Útimedelta64r¼  r   r   rˆ  r   r   r¸   r/  r   r¶  r   Ú
datetime64rš  r   r³  Ú
is_integerrM   r+   r   Ú_addsub_int_array_or_scalarÚ_nrl  rÐ  r¾  rF   rÔ  rK   rœ  rD   rj  r1  r’  rq   r  ©r„   rª   Úother_dtyperˆ   ÚtdÚobjrq   s          rw   rÛ  zDatetimeLikeArrayMixin.__add__t  sX  € ä˜e W¨dÓ3ˆÜ.¨uÓ5ˆð ”C‰<Ø:>¿-¹-»/ŠFÜ˜¤¤i´·±Ð@ÔAØ×3Ñ3°EÓ:ŠFÜ˜œsÔ#¬¯©¸¿
¹
ÀDÔ(Iä §¡Ô(×0Ñ0°Ó5ˆBØ×3Ñ3°BÓ7ŠFÜ˜œzÔ*à×%Ñ% eÓ,ŠFÜ˜¤¬"¯-©-Ð8Ô9Ø×2Ñ2°5Ó9ŠFÜ˜œvÔ&¬3¯?©?¸4¿:¹:ÀsÔ+KØ×%Ñ% eÓ,ŠFÜ�^‰^˜EÔ"ô ˜dŸj™j¬+Ô6Ü.¨tÓ4Ð4Ü�} dÓ+ˆCØ×4Ñ4°U¸S¿Y¹Y¿\¹\Ñ5IÌ8Ï<É<ÓXŠFô �_‰_˜[¨#Ô.à×2Ñ2°5Ó9‰FÜ˜[Ô)à×.Ñ.¨u´h·l±lÓC‰FÜ�_‰_˜[¨#Ô.´*Øœô3
ð ×/Ñ/°Ó6Ð6Ü˜kÔ*Ü˜dŸj™j¬+Ô6Ü.¨tÓ4Ð4Ü�} dÓ+ˆCØ×4Ñ4°U¸S¿Y¹Y¿\¹\Ñ5IÌ8Ï<É<ÓX‰Fô "Ð!ä�fœbŸj™jÔ)¬c¯o©o¸f¿l¹lÈCÔ.PÝ9à0�>×0Ñ0°¸v¿|¹|ÔLÐLØˆry   c                ó$   — | j                  |«      S rt   )rÛ  r©   s     rw   Ú__radd__zDatetimeLikeArrayMixin.__radd__°  s   € à�|‰|˜EÓ"Ð"ry   Ú__sub__c                ó°  — t        |dd «      }t        |«      }|t        u r| j                  «       }�nÅt	        |t
        t        t        j                  f«      r| j                  | «      }�nŒt	        |t        «      rYt        j                  | j                  d«      r9t        |j                  ¬«      j!                  d«      }| j                  | «      }�n#t	        |t"        «      r| j%                  | «      }�nÿt	        |t&        t        j(                  f«      r| j+                  |«      }�nÌt        j,                  |«      rjt	        | j                  t.        «      st1        | «      ‚t3        d| «      }|j5                  ||j                  j6                  z  t8        j:                  «      }�nMt	        |t<        «      r| j?                  |«      }�n*t        j                  |d«      r| jA                  | «      }�n tC        |«      r!| jE                  |t8        j:                  «      }nÔt        j                  |d«      st	        |tF        «      r| jI                  |«      }nœt	        |t.        «      r| j?                  |«      }nztK        |«      rit	        | j                  t.        «      st1        | «      ‚t3        d| «      }|j5                  ||j                  j6                  z  t8        j:                  «      }ntL        S t	        |t        jN                  «      rDt        j                  |j                  d«      r$dd	l(m)}  |jT                  ||j                  ¬
«      S |S )Nr   rÝ  rÞ  rà  rp   rõ   rð   r   r¦  rË   )+r  ra   r   rÄ  r~   r   r   rÍ   rá  r¼  r   r   rˆ  r   r   r¸   r/  r   r¶  r   râ  r¡  rã  rM   r+   r   rä  rå  rl  rÑ  r   rË  r¾  rF   rÔ  rK   r¤  rD   rj  r1  r’  rq   r  ræ  s          rw   rì  zDatetimeLikeArrayMixin.__sub__´  sh  € ä˜e W¨dÓ3ˆÜ.¨uÓ5ˆð ”C‰<Ø:>¿-¹-»/ŠFÜ˜¤¤i´·±Ð@ÔAØ×3Ñ3°U°FÓ;ŠFÜ˜œsÔ#¬¯©¸¿
¹
ÀDÔ(Iä §¡Ô(×0Ñ0°Ó5ˆBØ×3Ñ3°R°CÓ8ŠFÜ˜œzÔ*à×%Ñ% u fÓ-ŠFÜ˜¤¬"¯-©-Ð8Ô9Ø×2Ñ2°5Ó9ŠFÜ�^‰^˜EÔ"ô ˜dŸj™j¬+Ô6Ü.¨tÓ4Ð4Ü�} dÓ+ˆCØ×4Ñ4°U¸S¿Y¹Y¿\¹\Ñ5IÌ8Ï<É<ÓXŠFä˜œvÔ&Ø×)Ñ)¨%Ó0ŠFô �_‰_˜[¨#Ô.à×2Ñ2°E°6Ó:ŠFÜ˜[Ô)à×.Ñ.¨u´h·l±lÓC‰FÜ�_‰_˜[¨#Ô.´*Øœô3
ð ×1Ñ1°%Ó8‰FÜ˜¤[Ô1à×)Ñ)¨%Ó0‰FÜ˜kÔ*Ü˜dŸj™j¬+Ô6Ü.¨tÓ4Ð4Ü�} dÓ+ˆCØ×4Ñ4°U¸S¿Y¹Y¿\¹\Ñ5IÌ8Ï<É<ÓX‰Fô "Ð!ä�fœbŸj™jÔ)¬c¯o©o¸f¿l¹lÈCÔ.PÝ9à0�>×0Ñ0°¸v¿|¹|ÔLÐLØˆry   c           	     ó  — t        |dd «      }t        j                  |d«      xs t        |t        «      }|r|t        j                  | j
                  d«      r\t        j                  |«      rt        |«      | z
  S t        |t        «      s$ddl	m
}  |j                  ||j
                  ¬«      }|| z
  S | j
                  j                  dk(  rSt        |d«      rG|sEt        dt        | «      j                   › dt        |«      j                   › d	|j
                  › d
�«      ‚t        | j
                  t"        «      rDt        j                  |d«      r.t        dt        | «      j                   › d|j
                  › �«      ‚t        j                  | j
                  d«      rt%        d| «      } |  |z   S | |z
  }|j
                  j                  dk(  r7t        dt        | «      j                   › dt        |«      j                   › �«      ‚| S )Nr   rð   rõ   r   r�  rË   rÆ  rÇ  Ú[r�  rq   )r  r   rˆ  r~   rK   r   rÜ   r   rŽ   r’  ro   r  rú   r$  r  r  r  rM   r   )r„   rª   rç  Úother_is_dt64ro   Úflippeds         rw   Ú__rsub__zDatetimeLikeArrayMixin.__rsub__ð  s¼  € Ü˜e W¨dÓ3ˆÜŸ™¨°SÓ9ò 
¼ZØœó>
ˆñ œSŸ_™_¨T¯Z©Z¸Ô=ô �}‰}˜UÔ#ä  Ó'¨$Ñ.Ð.Ü˜eÔ%;Ô<å<à4˜×4Ñ4°UÀ%Ç+Á+ÔN�Ø˜4‘<ÐØ�Z‰Z�_‰_ Ò#¬°°wÔ(?Éô Ø"¤4¨£:×#6Ñ#6Ð"7°vÜ˜“;×'Ñ'Ð(¨¨%¯+©+¨°að9óð ô ˜Ÿ
™
¤KÔ0´S·_±_À[ÐRUÔ5VäÐ.¬t°D«z×/BÑ/BÐ.CÀ6È%Ï+É+ÈÐWÓXÐXÜ�_‰_˜TŸZ™Z¨Ô-ÜÐ(¨$Ó/ˆDØ�E˜U‘?Ð"à˜‘,ˆØ�=‰=×Ñ Ò$äØ"¤4¨£:×#6Ñ#6Ð"7°v¼dÀ5»k×>RÑ>RÐ=SÐTóð ð ˆxˆry   c                óv   — | |z   }|d d  | d d  t        | j                  t        «      s|j                  | _        | S rt   ©r~   r   rM   r•   rÞ   ©r„   rª   rˆ   s      rw   Ú__iadd__zDatetimeLikeArrayMixin.__iadd__  ó6   € Ø˜‘ˆØ™�)ˆ‰Qˆä˜$Ÿ*™*¤kÔ2àŸ™ˆDŒJØˆry   c                óv   — | |z
  }|d d  | d d  t        | j                  t        «      s|j                  | _        | S rt   rô  rõ  s      rw   Ú__isub__zDatetimeLikeArrayMixin.__isub__"  r÷  ry   c                ó&   •— t         ‰| �  ||¬«      S )N)ÚqsÚinterpolation)rÛ   Ú	_quantile)r„   rû  rü  rß   s      €rw   rý  z DatetimeLikeArrayMixin._quantile.  s   ø€ ô ‰wÑ  B°mÐ ÓDÐDry   ©ÚaxisrÕ  c               óÖ   — t        j                  d|«       t        j                  || j                  «       t	        j
                  | 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¼   rT   Únanminr“   Ú_wrap_reduction_result©r„   rÿ  rÕ  r†   rˆ   s        rw   ÚminzDatetimeLikeArrayMixin.min6  óO   € ô 	�‰˜˜FÔ#Ü
×Ñ  d§i¡iÔ0ä—‘˜tŸ}™}°4ÀÔGˆØ×*Ñ*¨4°Ó8Ð8ry   c               óÖ   — t        j                  d|«       t        j                  || j                  «       t	        j
                  | 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¼   rT   Únanmaxr“   r  r  s        rw   ÚmaxzDatetimeLikeArrayMixin.maxH  r  ry   r   )rÕ  rÿ  c               ó   — t        | j                  t        «      r"t        dt	        | «      j
                  › d�«      ‚t        j                  | j                  ||| 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
            Axis for the function to be applied on.

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

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

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

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

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

        For :class:`pandas.TimedeltaIndex`:

        >>> tdelta_idx = pd.to_timedelta([1, 2, 3], unit="D")
        >>> tdelta_idx
        TimedeltaIndex(['1 days', '2 days', '3 days'],
                        dtype='timedelta64[s]', 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ÿ  rÕ  r  )r~   r   rM   r  r  r  rT   Únanmeanr“   rQ   r  )r„   rÕ  rÿ  rˆ   s       rw   ÚmeanzDatetimeLikeArrayMixin.meanZ  su   € ôZ �d—j‘j¤+Ô.äØ.¬t°D«z×/BÑ/BÐ.Cð D7ð 7óð ô —‘Ø�M‰M ¨V¸$¿)¹)»+ô
ˆð ×*Ñ*¨4°Ó8Ð8ry   c               óà   — t        j                  d|«       |�#t        |«      | j                  k\  rt	        d«      ‚t        j                  | j                  ||¬«      }| j                  ||«      S )Nr—   z abs(axis) must be less than ndimrþ  )	r  Úvalidate_medianÚabsr¼   rÌ   rT   Ú	nanmedianr“   r  r  s        rw   ÚmedianzDatetimeLikeArrayMixin.median”  s^   € ä
×Ñ˜2˜vÔ&àÐ¤ D£	¨T¯Y©YÒ 6ÜÐ?Ó@Ð@ä×!Ñ! $§-¡-°dÀ6ÔJˆØ×*Ñ*¨4°Ó8Ð8ry   c                ó  — d }|r| j                  «       }t        j                  | j                  d«      |¬«      \  }}|j                  | j                  j
                  «      }t        t        j                  |«      }| j                  |«      S )Nr}   )r  )
rQ   rR   Úmoder€   r“   r   r   rÍ   r1  rƒ   )r„   Údropnar  Úi8modesÚ_Únpmodess         rw   Ú_modezDatetimeLikeArrayMixin._modež  sj   € ØˆÙØ—9‘9“;ˆDä—_‘_ T§Y¡Y¨t£_¸4Ô@‰
ˆ�Ø—,‘,˜tŸ}™}×2Ñ2Ó3ˆÜ”r—z‘z 7Ó+ˆØ×&Ñ& wÓ/Ð/ry   c               ó‚  — | j                   }|j                  dk(  r)|dv rt        d|› d�«      ‚|dv r^t        d|› d|› d�«      ‚t        |t        «      r)|dv rt        d|› d	�«      ‚|dv r%t        d|› d
|› d�«      ‚|dv rt        d|› d	�«      ‚| j
                  j                  d«      }ddlm}	 |	j                  |«      }
 |	||
|¬«      } |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"                  ||j                   ¬«      S |j                  | j
                  j                   «      }| j%                  |«      S )Nrð   )ÚsumÚprodÚcumsumÚcumprodÚvarÚskewÚkurtz,datetime64 type does not support operation 'r#  )rI  ÚallzN' with datetime64 dtypes is no longer supported. Use (obj != pd.Timestamp(0)).z() instead.zPeriod type does not support z operationszK' with PeriodDtype is no longer supported. Use (obj != pd.Period(0, freq)).)r  r!  r#  r$  r"  z"timedelta64 type does not support r|   r   )ÚWrappedCythonOp)Úhowrú   Úhas_dropped_na)Ú	min_countÚngroupsÚcomp_idsr  )ÚstdÚsemr¦  z-'std' and 'sem' are not valid for PeriodDtyperB  zm8[r�  rË   )r   rú   r  r~   rM   r“   r€   Úpandas.core.groupby.opsr&  Úget_kind_from_howÚ_cython_op_ndim_compatr'  Úcast_blocklistr’  rq   r   r.  r•  rƒ   )r„   r'  r(  r)  r*  Úidsr†   r   Únpvaluesr&  rú   rv   r˜  rq   Ú	new_dtypes                  rw   Ú_groupby_opz"DatetimeLikeArrayMixin._groupby_op«  s  € ð —
‘
ˆØ�:‰:˜ÒàÐQÑQÜÐ"NÈsÈeÐSTÐ UÓVÐVØ�nÑ$äØ˜�uð 4Ø47°5¸ðEóð ô
 ˜œ{Ô+àÐQÑQÜÐ"?À¸uÀKÐ PÓQÐQØ�nÑ$äØ˜�uð 7Ø7:°e¸;ðHóð ð
 Ð>Ñ>ÜÐ@ÀÀÀ[ÐQÓRÐRð —=‘=×%Ñ% hÓ/ˆå;à×0Ñ0°Ó5ˆÙ ¨4ÀÔOˆà.�R×.Ñ.Øð
àØØØñ
ð ñ
ˆ
ð �6‰6�R×&Ñ&Ñ&ð Ðð ×Ñ 8Ò+Ð+Ð+Ø�.Ñ Ý9ä˜$Ÿ*™*¤kÔ2ÜÐ OÓPÐPÜÐ8¸$Ó?ˆDØ˜dŸi™i˜[¨Ð*ˆIØ#Ÿ™¨Ó3ˆJØ-�>×-Ñ-¨jÀ
×@PÑ@PÔQÐQà—_‘_ T§]¡]×%8Ñ%8Ó9ˆ
Ø×&Ñ& zÓ2Ð2ry   ©ÚreturnrD  )NNF)r   úDtype | Noner�   rD  r7  ÚNone)r7  ztype[DatetimeLikeScalar])r£   r  r7  rr   )r£   rr   r7  z)np.int64 | np.datetime64 | np.timedelta64)rª   rr   r7  r9  ©r7  r’   )r7  rj   )r7  znpt.NDArray[np.int64])rÂ   zstr | floatr7  únpt.NDArray[np.object_])F)rÈ   rD  r7  zCallable[[object], str])NN)r   zNpDtype | Noner�   zbool | Noner7  r’   )rÖ   r6   r7  rr   )rÖ   z(SequenceIndexer | PositionalIndexerTupler7  r
   )rÖ   r4   r7  zSelf | DTScalarOrNaT)r7  r”   )rÖ   z,int | Sequence[int] | Sequence[bool] | slicer£   zNaTType | Any | Sequence[Any]r7  r9  ©r7  r9  ©T)r�   rD  ©r7  r
   )r   zLiteral['M8[ns]']r7  ro   )r   zLiteral['m8[ns]']r7  rq   ).)r   r8  r7  r,   rt   )r  únpt.NDArray[np.bool_]r7  r9  )r  rD  r  rD  )r  rD  r7  r  )r  rD  )r7  z6np.int64 | np.datetime64 | np.timedelta64 | np.ndarray)r;  zLiteral['ignore'] | None)r²   r,   r7  r?  )r7  r?  )rˆ   r’   r7  r’   )r7  z
str | None)r7  zResolution | None)r7  r  )r7  z@tuple[int | npt.NDArray[np.int64], None | npt.NDArray[np.bool_]])r7  ro   )rª   ro   r7  ro   )rª   zdatetime | np.datetime64r7  rq   )rª   ro   r7  rq   )rª   zTimestamp | DatetimeArrayr7  rq   )rª   r   r7  rp   )rª   rq   r7  r
   )rª   zTimedelta | TimedeltaArrayr7  r
   )rª   zPeriod | PeriodArrayr7  r;  )rª   r;  r7  r’   )rÙ  r  rÕ  rD  r7  r
   )rû  znpt.NDArray[np.float64]rü  r  r7  r
   )rÿ  úAxisInt | NonerÕ  rD  )rÕ  rD  rÿ  r@  )r  rD  )
r'  r  r(  rD  r)  Úintr*  rA  r2  znpt.NDArray[np.intp])ar  Ú
__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  r8  r   r7  r\   r?  rV   rQ   rF  rJ  r!   rO  rQ  rT  rX  r[  ra  rd  rh  ru  rx   rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r€  r�  r…  r‰  rš  rœ  r¡  r¤  rŸ  r³  r¶  r¼  r¾  rº  rÂ  rÄ  rË  rÔ  rÚ  re   rÛ  rë  rì  rò  rö  rù  rŒ   rý  r  r  r  r  r  r5  Ú__classcell__©rß   s   @rw   rŽ   rŽ   È   s»  ø… ñð $Ó#Ø4Ó4Ø)Ó)ØÓØ
Óàòó ðð INð(Ø'ð(ØAEð(à	ó(ð
 ò(ó ð(ó(ð((Ø"ð(à	2ó(ó.(ò,(óDó:ð ò
(ó ð
(ð  (-¸$ñ
(Ø$ð
(à	 ó
(ôð AEðØ#ðØ2=ðà	óð( ÚCó ØCàðà5ðð 
òó ðõ
ó&ð<!à9ð!ð -ð!ð 
õ	!ó,ö
71ðr Úó ØàÚBó ØBàÚCó ØCàÛ?ó Ø?ö#õ
ò"ðP  %Øñ;)ð ð	;)ð
 ó;)ôzô>@òD"ð ò
ó ð
ð" ó	 ó ð	 ó2,ónð ò!ó ð!ð ò'ó ð'ð .2¸4ðØ ðà	óð< ò!!ó ð!!ðF ò!ó ð!ðF òó ðð ò-ó ð-ð ò?ó ð?ð ò?ó ð?ð ò@ó ð@ò7ñv (¨	Ó2€GÙ(¨Ó4€HÙ'¨	Ó2€GÙ(¨Ó4€HÙ+¨MÓ:€KÙ,¨^Ó<€LÙ,¨^Ó<€LÙ-¨oÓ>€MÙ'¨	Ó2€GÙ(¨Ó4€HÙ*¨<Ó8€JÙ+¨MÓ:€Kà
ðà	Iòó ðð$ ò'ó ð'ðR òQó ðQðB òó ðð ð*Ø-ð*à	ò*ó ð*ð$ ò
-ó ð
-ð òUó ðUð& ò
ó ð
ò(ò.ó(.ð$ ò
ó ð
ð ò
ó ð
ð* ò2ó ð2ð& òó ðð0 ò"ó ð"ðH 8<õ @ñ ˜iÓ(ñ9ó )ð9òv#ñ ˜iÓ(ñ9ó )ð9òv'óRóð ðEà#ðEð ðEð 
ô	Eó ðEð Ø,0Àô 9ó ð9ð" Ø,0Àô 9ó ð9ð" &*À!õ 89ðt Ø/3ÀDô 9ó ð9ô0ðH3ð ðH3ð ð	H3ð
 ðH3ð ðH3ð "÷H3ry   rŽ   c                  ó   — e Zd ZdZdd„Zy)ÚDatelikeOpszK
    Common ops for DatetimeIndex/PeriodIndex, but not TimedeltaIndex.
    c                óÖ   — | j                  |t        j                  ¬«      }t        «       r(ddlm} t        | |t        j                  ¬«      ¬«      S |j                  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 <https://docs.python.org/3/library/datetime.html
        #strftime-and-strptime-behavior>`__.

        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='str')
        )rÃ   rÂ   r   )ÚStringDtype©rÿ   rË   Frö   )	rÅ   rÍ   rL  r   r<  rL  r3  r  rÏ   )r„   rÃ   rˆ   rL  s       rw   ÚstrftimezDatelikeOps.strftimeû  sP   € ðZ ×*Ñ*°{Ì2Ï6É6Ð*ÓRˆÜÔÝ*ä˜F©+¼r¿v¹vÔ*FÔGÐGØ�}‰}œV¨%ˆ}Ó0Ð0ry   N)rÃ   r  r7  r;  )r  rB  rC  rD  rN  r—   ry   rw   rJ  rJ  ö  s   „ ñô21ry   rJ  c                  ó  ‡ — e Zd ZdZed„ «       Zed„ «       Zej                  d"d„«       Ze	d#d„«       Z
e	ed$d„«       «       Ze	 	 	 	 d%d„«       Zed&d„«       Zed'd	„«       Zd(d)d„Zd„ Zd*ˆ fd„Zd„ Z	 	 d+	 	 	 	 	 d,d„Z	 	 d+	 	 	 	 	 d,d„Z	 	 d+	 	 	 	 	 d,d„Zdd
dœd-d„Zdd
dœd-d„Zd"d„Zd.d„Zd/ˆ fd„Z	 	 d0	 	 	 d1ˆ fd„Ze	 d2	 	 	 	 	 d3ˆ fd„«       Zd4d5ˆ fd„Z	 	 	 	 	 	 	 	 	 	 d6d„Zddddœ	 	 	 	 	 	 	 	 	 d7ˆ fd „Z ed8d!„«       Z!ˆ xZ"S )9ro  zK
    Common ops for TimedeltaIndex/DatetimeIndex, but not PeriodIndex.
    c                ó   — t        | «      ‚rt   r›   )r  r²   r   s      rw   Ú_validate_dtypezTimelikeOps._validate_dtype5  s   € ä! #Ó&Ð&ry   c                ó   — | j                   S )ac  
        Return the frequency object if it is set, otherwise None.

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

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

        Examples
        --------
        >>> datetimeindex = pd.date_range(
        ...     "2022-02-22 02:22:22", periods=10, tz="America/Chicago", freq="h"
        ... )
        >>> datetimeindex
        DatetimeIndex(['2022-02-22 02:22:22-06:00', '2022-02-22 03:22:22-06:00',
                       '2022-02-22 04:22:22-06:00', '2022-02-22 05:22:22-06:00',
                       '2022-02-22 06:22:22-06:00', '2022-02-22 07:22:22-06:00',
                       '2022-02-22 08:22:22-06:00', '2022-02-22 09:22:22-06:00',
                       '2022-02-22 10:22:22-06:00', '2022-02-22 11:22:22-06:00'],
                      dtype='datetime64[us, America/Chicago]', freq='h')
        >>> datetimeindex.freq
        <Hour>
        ©rÞ   r˜   s    rw   r•   zTimelikeOps.freq9  s   € ð8 �z‰zÐry   c                óø   — |�qt        |«      }| j                  | |«       | j                  j                  dk(  r!t	        |t
        t        f«      st        d«      ‚| j                  dkD  rt        d«      ‚|| _
        y )Nrõ   ú(TimedeltaArray/Index freq must be a Tickrµ   zCannot set freq with ndim > 1)r&   Ú_validate_frequencyr   rú   r~   r   r   r  r¼   rÌ   rÞ   r¢   s     rw   r•   zTimelikeOps.freqW  si   € àÐÜ˜eÓ$ˆEØ×$Ñ$ T¨5Ô1Ø�z‰z�‰ #Ò%¬j¸ÄÄsÀÔ.LÜÐ JÓKÐKà�y‰y˜1Š}Ü Ð!@ÓAÐAàˆ�
ry   c                óR  — |€d| _         y|dk(  r(| j                   €t        | j                  «      | _         yy|t        j                  u ry| j                   €0t        |«      } t        | «      j                  | |fi |¤Ž || _         yt        |«      }t        || j                   «       y)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.
        NÚinfer)rÞ   r&   rT  r   Ú
no_defaultr  rV  Ú_validate_inferred_freq)r„   r•   Úvalidate_kwdss      rw   Ú_maybe_pin_freqzTimelikeOps._maybe_pin_freqd  sŸ   € ð ˆ<àˆD�JØ�WŠ_ð �z‰zÐ!ô ' t×'9Ñ'9Ó:�•
ð "ð ”S—^‘^Ñ#ð Ø�Z‰ZÐô ˜T“?ˆDØ*ŒD�‹J×*Ñ*¨4°ÑG¸ÒGØˆD�Jô ˜T“?ˆDÜ# D¨$¯*©*Õ5ry   c           	     ó�  — |j                   }|j                  dk(  s||j                  k(  ry	  | j                  d|d   dt	        |«      ||j
                  dœ|¤Ž}t        j                  |j                  |j                  «      st        ‚y# t        $ r0}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•   r.  z	non-fixedúInferred frequency ú9 from passed values does not conform to passed frequency r—   )rT  rg  rQ  Ú_generate_ranger¾   r.  rÍ   Úarray_equalr¿   rÌ   r  )r  Úindexr•   r†   ÚinferredÚon_freqr  s          rw   rV  zTimelikeOps._validate_frequency…  sÞ   € ð ×&Ñ&ˆØ�:‰:˜Š?˜h¨$¯,©,Ò6Øð	Ø)�c×)Ñ)ð Ø˜A‘hØÜ˜E›
ØØ—Z‘Zñð ñˆGô —>‘> %§*¡*¨g¯l©lÔ;Ü Ð ð <øäò 	Øœc #›hÑ&ð �	ô Ø% h Zð 08Ø8<¿¹°~ðGóð ðûð	ús   ­AB Â	CÂ+C Ã Cc                ó   — t        | «      ‚rt   r›   )r  r^  r_  r`  r•   r…   r†   s          rw   rc  zTimelikeOps._generate_range±  s   € ô " #Ó&Ð&ry   c                ó@   — t        | j                  j                  «      S rt   )r    r“   r   r˜   s    rw   rû   zTimelikeOps._creso¹  s   € ä" 4§=¡=×#6Ñ#6Ó7Ð7ry   c                ó,   — t        | j                  «      S )a4  
        The precision unit of the datetime data.

        Returns the precision unit for the dtype.
        It means the smallest time frame that can be stored within this dtype.

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

        See Also
        --------
        TimelikeOps.as_unit : Converts to a specific unit.

        Examples
        --------
        >>> idx = pd.DatetimeIndex(["2020-01-02 01:02:03.004005006"])
        >>> idx.unit
        'ns'
        >>> idx.as_unit("s").unit
        's'
        )Údtype_to_unitr   r˜   s    rw   r.  zTimelikeOps.unit½  s   € ô6 ˜TŸZ™ZÓ(Ð(ry   Tc                ó¤  — |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                  ||| j                  ¬«      S )	aZ  
        Convert to a dtype with the given unit resolution.

        The limits of timestamp representation depend on the chosen resolution.
        Different resolutions can be converted to each other through as_unit.

        Parameters
        ----------
        unit : {'s', 'ms', 'us', 'ns'}
        round_ok : bool, default True
            If False and the conversion requires rounding, raise ValueError.

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

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

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

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

        For :class:`pandas.TimedeltaIndex`:

        >>> tdelta_idx = pd.to_timedelta(["1 day 3 min 2 us 42 ns"])
        >>> tdelta_idx
        TimedeltaIndex(['1 days 00:03:00.000002042'],
                        dtype='timedelta64[ns]', freq=None)
        >>> tdelta_idx.as_unit("s")
        TimedeltaIndex(['1 days 00:03:00'], dtype='timedelta64[s]', freq=None)
        )rà  ÚmsÚusÚnsz)Supported units are 's', 'ms', 'us', 'ns'z8[r�  r'  ro   r�  r‘  )rÌ   rÍ   r   rú   r   r“   r~   r   rò   rK   r  r•  r•   )r„   r.  r(  r   r»  r4  rò   s          rw   r/  zTimelikeOps.as_unitÚ  s¶   € ðT Ð.Ñ.ÜÐHÓIÐIä—‘˜DŸJ™JŸO™OÐ,¨B¨t¨f°AÐ6Ó7ˆÜ(¨¯©¸ÈÔQˆ
ä�d—j‘j¤"§(¡(Ô+Ø"×(Ñ(‰Iä�o tÓ,×/Ñ/ˆBÜ'¨2°DÔ9ˆIô �D‹z×%Ñ%ØØØ—‘ð &ó 
ð 	
ry   c                óâ   — | j                   |j                   k7  rS| j                   |j                   k  r| j                  |j                  «      } | |fS |j                  | j                  «      }| |fS rt   )rû   r/  r.  r©   s     rw   r–  z"TimelikeOps._ensure_matching_resos  s^   € Ø�;‰;˜%Ÿ,™,Ò&à�{‰{˜UŸ\™\Ò)Ø—|‘| E§J¡JÓ/�ð �Uˆ{Ðð Ÿ™ d§i¡iÓ0�Ø�Uˆ{Ðry   c                óò   •— |t         j                  t         j                  t         j                  fv r2t	        |«      dk(  r$|d   | u r t        ||«      | j                  fi |¤ŽS t        ‰| �   ||g|¢­i |¤ŽS )Nrµ   r   )	rÍ   ÚisnanÚisinfÚisfiniter¾   r  r“   rÛ   Ú__array_ufunc__)r„   ÚufuncÚmethodÚinputsr†   rß   s        €rw   ru  zTimelikeOps.__array_ufunc__%  sq   ø€ à”b—h‘h¤§¡¬"¯+©+Ð6Ñ6Ü�F“˜qÒ Ø�q‘	˜TÑ!ð *”7˜5 &Ó)¨$¯-©-ÑB¸6ÑBÐBä‰wÑ& u¨fÐH°vÒHÀÑHÐHry   c                óL  — t        | j                  t        «      rOt        d| «      } | j	                  d «      }|j                  ||||«      }|j	                  | j                  ||¬«      S | j                  d«      }t        t        j                  |«      }t        || j                  «      }|dk(  r| j                  «       S t        |||«      }	| j                  |	t        ¬«      }|j                  | j                   j                  «      }| j#                  || j                  ¬«      S )Nro   )Ú	ambiguousÚnonexistentr}   r   ©rN  rË   )r~   r   rK   r   Útz_localizeÚ_roundrò   r€   rÍ   r1  r*   rû   r�   r(   rO  r!   r“   r•  )
r„   r•   r  rz  r{  Únaiverˆ   r²   ÚnanosÚ	result_i8s
             rw   r~  zTimelikeOps._round0  sú   € ä�d—j‘j¤/Ô2ä˜¨Ó.ˆDØ×$Ñ$ TÓ*ˆEØ—\‘\ $¨¨i¸ÓEˆFØ×%Ñ%Ø—‘ 9¸+ð &ó ð ð —‘˜4“ˆÜ”b—j‘j &Ó)ˆÜ" 4¨¯©Ó5ˆØ�AŠ:à—9‘9“;ÐÜ! &¨$°Ó6ˆ	Ø×)Ñ)¨)ÄÐ)ÓEˆØ—‘˜TŸ]™]×0Ñ0Ó1ˆØ×Ñ ¨d¯j©jÐÓ9Ð9ry   c                óF   — | j                  |t        j                  ||«      S )aÞ  
        Perform round operation on the data to the specified `freq`.

        Parameters
        ----------
        freq : str or Offset
            The frequency level to round 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 a ValueError 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 a ValueError 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.

        See Also
        --------
        DatetimeIndex.floor :
            Perform floor operation on the data to the specified `freq`.
        DatetimeIndex.snap :
            Snap time stamps to nearest occurring frequency.

        Notes
        -----
        If the timestamps have a timezone, rounding will take place relative to the
        local ("wall") time and re-localized to the same timezone. When rounding
        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[us]', freq='min')

        >>> rng.round('h')
        DatetimeIndex(['2018-01-01 12:00:00', '2018-01-01 12:00:00',
                       '2018-01-01 12:00:00'],
                      dtype='datetime64[us]', 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[us]

        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[us, Europe/Amsterdam]', freq=None)

        >>> rng_tz.floor("2h", ambiguous=True)
        DatetimeIndex(['2021-10-31 02:00:00+02:00'],
                      dtype='datetime64[us, Europe/Amsterdam]', freq=None)
        )r~  r'   ÚNEAREST_HALF_EVEN©r„   r•   rz  r{  s       rw   ÚroundzTimelikeOps.roundF  s    € ðL �{‰{˜4¤×!:Ñ!:¸IÀ{ÓSÐSry   c                óF   — | j                  |t        j                  ||«      S )aÝ  
        Perform floor operation on the data to the specified `freq`.

        Parameters
        ----------
        freq : str or Offset
            The frequency level to floor 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 a ValueError 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 a ValueError 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.

        See Also
        --------
        DatetimeIndex.floor :
            Perform floor operation on the data to the specified `freq`.
        DatetimeIndex.snap :
            Snap time stamps to nearest occurring frequency.

        Notes
        -----
        If the timestamps have a timezone, flooring will take place relative to the
        local ("wall") time and re-localized to the same timezone. When flooring
        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[us]', freq='min')

        >>> rng.floor('h')
        DatetimeIndex(['2018-01-01 11:00:00', '2018-01-01 12:00:00',
                       '2018-01-01 12:00:00'],
                      dtype='datetime64[us]', 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[us]

        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[us, Europe/Amsterdam]', freq=None)

        >>> rng_tz.floor("2h", ambiguous=True)
        DatetimeIndex(['2021-10-31 02:00:00+02:00'],
                      dtype='datetime64[us, Europe/Amsterdam]', freq=None)
        )r~  r'   ÚMINUS_INFTYr„  s       rw   ÚfloorzTimelikeOps.floor®  s    € ðL �{‰{˜4¤×!4Ñ!4°iÀÓMÐMry   c                óF   — | j                  |t        j                  ||«      S )aÔ  
        Perform ceil operation on the data to the specified `freq`.

        Parameters
        ----------
        freq : str or Offset
            The frequency level to ceil 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 a ValueError 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 a ValueError 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.

        See Also
        --------
        DatetimeIndex.floor :
            Perform floor operation on the data to the specified `freq`.
        DatetimeIndex.snap :
            Snap time stamps to nearest occurring frequency.

        Notes
        -----
        If the timestamps have a timezone, ceiling will take place relative to the
        local ("wall") time and re-localized to the same timezone. When ceiling
        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[us]', freq='min')

        >>> rng.ceil('h')
        DatetimeIndex(['2018-01-01 12:00:00', '2018-01-01 12:00:00',
                       '2018-01-01 13:00:00'],
                      dtype='datetime64[us]', 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[us]

        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[us, Europe/Amsterdam]', freq=None)

        >>> rng_tz.ceil("h", ambiguous=True)
        DatetimeIndex(['2021-10-31 02:00:00+02:00'],
                      dtype='datetime64[us, Europe/Amsterdam]', freq=None)
        )r~  r'   Ú
PLUS_INFTYr„  s       rw   ÚceilzTimelikeOps.ceil	  s    € ðL �{‰{˜4¤×!3Ñ!3°YÀÓLÐLry   Nrþ  c               ód   — t        j                  | j                  ||| j                  «       ¬«      S ©Nr  )rT   Únananyr“   rQ   ©r„   rÿ  rÕ  s      rw   rI  zTimelikeOps.any�	  s!   € ä�}‰}˜TŸ]™]°¸fÈ4Ï9É9Ë;ÔWÐWry   c               ód   — t        j                  | j                  ||| j                  «       ¬«      S r�  )rT   Únanallr“   rQ   r�  s      rw   r%  zTimelikeOps.all…	  s#   € ô �}‰}˜TŸ]™]°¸fÈ4Ï9É9Ë;ÔWÐWry   c                ó   — d | _         y rt   rS  r˜   s    rw   rì   zTimelikeOps._maybe_clear_freq�	  s	   € Øˆ�
ry   c                ó"  — |€ntt        | «      dk(  rJt        |t        «      r:| j                  j                  dk(  r=t        |t
        t        f«      s't        d«      ‚|dk(  sJ ‚t        | j                  «      }| 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
        r   rõ   rU  rX  )r¾   r~   r   r   rú   r   r   r  r&   rT  r€   rÞ   )r„   r•   r‡   s      rw   Ú
_with_freqzTimelikeOps._with_freq�	  s~   € ð ˆ<àÜ�‹Y˜!Š^¤
¨4´Ô <à�z‰z�‰ #Ò%¬j¸ÄÄc¸{Ô.KÜÐ JÓKÐKð ˜7’?Ð"�?Ü˜T×/Ñ/Ó0ˆDà�i‰i‹kˆØˆŒ	Øˆ
ry   c                ó€   •— t        | j                  t        j                  «      r| j                  S t        ‰| �  «       S rt   )r~   r   rÍ   r“   rÛ   Ú_values_for_json)r„   rß   s    €rw   r–  zTimelikeOps._values_for_json°	  s-   ø€ ä�d—j‘j¤"§(¡(Ô+Ø—=‘=Ð Ü‰wÑ'Ó)Ð)ry   Fc                ó¼  •— | j                   �œ|rX| j                   j                  dk  r?t        j                  t	        | «      dz
  ddt        j
                  ¬«      }| d d d…   }||fS t        j                  t	        | «      t        j
                  ¬«      }| j                  «       }||fS |r"t        dt        | «      j                  › d�«      ‚t        ‰| �-  |¬«      S )Nr   rµ   éÿÿÿÿ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.)Úuse_na_sentinel)r•   r¸   rÍ   Úaranger¾   Úintpr�   ÚNotImplementedErrorr  r  rÛ   Ú	factorize)r„   r™  ÚsortÚcodesÚuniquesrß   s        €rw   r�  zTimelikeOps.factorize¶	  sË   ø€ ð
 �9‰9Ð á˜Ÿ	™	Ÿ™ ašÜŸ	™	¤# d£)¨a¡-°°R¼r¿w¹wÔG�Ø™t ˜t™*�ð ˜'�>Ð!ô Ÿ	™	¤# d£)´2·7±7Ô;�ØŸ)™)›+�Ø˜'�>Ð!áô &Ø(¬¨d«×)<Ñ)<Ð(=ð >=ð =óð ô
 ‰wÑ °Ð ÓAÐAry   r   c                ó4  •‡— t         ‰| �  ||«      }|d   Š|dk(  rv|D �cg c]  }t        |«      sŒ|‘Œ }}‰j                  �Ot	        ˆfd„|D «       «      r;t        |d d |dd  d¬«      }t	        ˆfd„|D «       «      r‰j                  }||_        |S c c}w )Nr   c              3  óP   •K  — | ]  }|j                   ‰j                   k(  –— Œ y ­wrt   ©r•   )r·   r­   ré  s     €rw   r¹   z0TimelikeOps._concat_same_type.<locals>.<genexpr>Þ	  s   øè ø€ Ð+RÉ	À1¨A¯F©F°c·h±hÕ,>É	ùs   ƒ#&r˜  rµ   T)Ústrictc              3  óZ   •K  — | ]"  }|d    d   ‰j                   z   |d   d    k(  –— Œ$ y­w)r   r˜  rµ   Nr£  )r·   Úpairré  s     €rw   r¹   z0TimelikeOps._concat_same_type.<locals>.<genexpr>à	  s0   øè ø€ ÐNÉÀ�t˜A‘w˜r‘{ S§X¡XÑ-°°a±¸±Õ;Éùs   ƒ(+)rÛ   Ú_concat_same_typer¾   r•   r%  ÚziprÞ   )	r  Ú	to_concatrÿ  Únew_objr­   Úpairsr™  ré  rß   s	          @€rw   r§  zTimelikeOps._concat_same_typeÏ	  s›   ù€ ô ‘'Ñ+¨I°tÓ<ˆà˜‰lˆà�1Š9ñ %.Ó8¡I˜q´°Qµš IˆIÐ8à�x‰xÐ#¬Ó+RÉ	Ó+RÔ(RÜ˜I c r˜N¨I°a°b¨MÀ$ÔG�ÜÓNÉÓNÔNØ"Ÿx™x�HØ$,�G”MØˆùò 9s
   ¡B²Bc                óJ   •— t         ‰| �  |¬«      }| j                  |_        |S )N)Úorder)rÛ   r�   r•   rÞ   )r„   r­  rª  rß   s      €rw   r�   zTimelikeOps.copyå	  s#   ø€ Ü‘'‘, U�,Ó+ˆØŸ	™	ˆŒØˆry   c          
     óø   — |dk7  rt         ‚|s| j                  }	n| j                  j                  «       }	t        j                  |	f||||||dœ|¤Ž |s| S t        | «      j                  |	| j                  ¬«      S )z2
        See NDFrame.interpolate.__doc__.
        Úlinear)rw  rÿ  re  ÚlimitÚlimit_directionÚ
limit_arearË   )rœ  r“   r�   rS   Úinterpolate_2d_inplacer  r•  r   )
r„   rw  rÿ  re  r°  r±  r²  r�   r†   Úout_datas
             rw   ÚinterpolatezTimelikeOps.interpolateê	  sŠ   € ð  �XÒÜ%Ð%áØ—}‘}‰Hà—}‘}×)Ñ)Ó+ˆHä×&Ñ&Øð		
àØØØØ+Ø!ñ		
ð ò		
ñ ØˆKÜ�D‹z×%Ñ% h°d·j±jÐ%ÓAÐAry   )Ú
allow_fillrN  rÿ  c               ó  •— t         ‰| �  ||||¬«      }t        j                  |t        j                  ¬«      }t        j                  |t        | «      «      }t        |t        «      r| j                  |«      }||_        |S )N)Úindicesr¶  rN  rÿ  rË   )rÛ   ÚtakerÍ   r  r›  r   Úmaybe_indices_to_slicer¾   r~   rá   rÝ   rÞ   )	r„   r¸  r¶  rN  rÿ  rˆ   Úmaybe_slicer•   rß   s	           €rw   r¹  zTimelikeOps.take
  st   ø€ ô ‘‘Ø¨
¸zÐPTð ó 
ˆô —*‘*˜W¬B¯G©GÔ4ˆÜ×0Ñ0°¼#¸d»)ÓDˆä�k¤5Ô)Ø×)Ñ)¨+Ó6ˆDØˆFŒLàˆry   c                ó
  — t        j                  | j                  «      sy| j                  }|t        k7  }t        | j                  «      }t        |«      }t        j                  |||z  dk7  «      j                  «       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_andr  )r„   Ú
values_intÚconsider_valuesrô   ÚppdÚ	even_dayss         rw   Ú_is_dates_onlyzTimelikeOps._is_dates_only(
  ss   € ô �‰˜tŸz™zÔ*àà—Y‘Yˆ
Ø$¬Ñ,ˆÜ" 4§:¡:Ó.ˆÜ˜dÓ#ˆô —N‘N ?°JÀÑ4DÈÑ4IÓJ×NÑNÓPÐTUÑUˆ	ØÐry   r<  )r[  Údictr7  r9  )r•   r   r7  r9  )r`  ú
int | Noner7  r
   )r7  rA  )r7  rl   r=  )r.  rl   r(  rD  r7  r
   )rv  znp.ufuncrw  r  )ÚraiserÅ  )rz  r9   r{  r:   r7  r
   )rÿ  r@  rÕ  rD  r7  rD  r>  r:  )TF)r™  rD  rž  rD  )r   )r©  zSequence[Self]rÿ  r-   r7  r
   )ÚC)r­  r  r7  r
   )
rw  r2   rÿ  rA  re  rn   r�   rD  r7  r
   )
r¸  r8   r¶  rD  rN  r   rÿ  r-   r7  r
   r6  )#r  rB  rC  rD  ÚclassmethodrQ  rF  r•   Úsetterr   r\  rV  rc  r@   rû   r.  r/  r–  ru  r~  r…  rˆ  r‹  rI  r%  rì   r”  r–  r�  r§  r�   rµ  r¹  rÂ  rG  rH  s   @rw   ro  ro  0  s�  ø„ ñð ñ'ó ð'ð ñó ðð: 
‡[�[ò
ó ð
ð ò6ó ð6ð@ Øò(ó ó ð(ðT ð'Ø",ð'à	ò'ó ð'ð ò8ó ð8ð ò)ó ð)ô8<
ò@õ	Iò:ð2 $+Ø'.ð	fTð !ðfTð %ð	fTð
 
ófTðV $+Ø'.ð	fNð !ðfNð %ð	fNð
 
ófNðV $+Ø'.ð	fMð !ðfMð %ð	fMð
 
ófMðV -1Àõ Xð -1Àõ Xóóõ@*ð !%ØðBàðBð õBð2 ð ðà!ðð ðð 
ô	ó ðö*ð
$Bð #ð$Bð ð	$Bð
 ð$Bð ð$Bð 
ó$BðT !ØØñàðð ð	ð
 ðð ðð 
õð0 òó ôry   ro  c                ó  — t        | d«      sGt        | t        t        f«      s#t	        j
                  | «      dk(  rt        | «      } t        | «      } d}n,t        | t        «      rt        d|› d�«      ‚t        | d¬«      } t        | t        «      s(t        | t        «      r5| j                  j                  dv r| j                  d	t        ¬
«      } d}| |fS t        | t        «      r&| j!                  «       } | j                  «       } d}| |fS t        | t        j"                  t$        f«      st	        j&                  | «      } | |fS t        | t(        «      r7| j*                  j-                  | j.                  t0        ¬«      j2                  } d}| |fS )Nr   r   FzCannot create a z from a MultiIndex.Tr,  r÷   r  rM  r|  )r$  r~   rÎ   ÚtuplerÍ   r¼   rB   rO   r  rb   r_   r]   r   rú   r=  r!   Ú_maybe_convert_datelike_arrayr1  r^   r  rN   r4  r¹  rŸ  r   Ú_values)rœ   r�   Úcls_names      rw   Ú!ensure_arraylike_for_datetimelikerÎ  B
  s\  € ô �4˜Ô!ä˜$¤¤u Ô.´2·7±7¸4³=ÀAÒ3Eä˜“:ˆDä6°tÓ<ˆØ‰Ü	�Dœ-Ô	(ÜÐ*¨8¨*Ð4GÐHÓIÐIä˜T°Ô6ˆä�$œÔ%Ü�4Ô,Ô-°$·*±*·/±/ÀTÑ2Ià�}‰}˜W¬tˆ}Ó4ˆØˆð  �ˆ:Ðô 
�DÔ-Ô	.Ø×1Ñ1Ó3ˆØ�}‰}‹ˆØˆð �ˆ:Ðô ˜œrŸz™z¬>Ð:Ô;ä�z‰z˜$Óˆð �ˆ:Ðô 
�Dœ.Ô	)ð �‰×#Ñ# D§J¡J¼3Ð#Ó?×GÑGˆØˆà�ˆ:Ðry   c                 ó   — y rt   r—   ©r`  s    rw   Úvalidate_periodsrÑ  i
  s   € Ø-0ry   c                 ó   — y rt   r—   rÐ  s    rw   rÑ  rÑ  m
  s   € Ø+.ry   c                óP   — | �#t        j                  | «      st        d| › �«      ‚| S )a.  
    If a `periods` argument is passed to the Datetime/Timedelta Array/Index
    constructor, cast it to an integer.

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

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

    Raises
    ------
    TypeError
        if periods is not None or int
    z periods must be an integer, got )r   rã  r  rÐ  s    rw   rÑ  rÑ  q
  s/   € ð$ Ð¤3§>¡>°'Ô#:ÜÐ:¸7¸)ÐDÓEÐEð €Nry   c                óV   — |�&| � | |k7  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
    ra  rb  )rÌ   rQ  )r•   rT  s     rw   rZ  rZ  Š
  sO   € ð  Ð ØÐ ¨Ò 5ÜØ% m _ð 5?à—<‘<�.ð"óð ð
 ˆ<Ø ˆDà€Kry   c                óð   — t        | t        «      r| j                  S t        | t        «      r3| 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ø   zdtype=z does not have a resolution.r   )	r~   rK   r.  rI   rú   rÌ   Úpyarrow_dtyperÍ   Údatetime_datarË   s    rw   rk  rk  §
  sk   € ô �%œÔ)Ø�z‰zÐÜ	�Eœ:Ô	&Ø�:‰:˜TÑ!Ü  ˜xÐ'CÐDÓEÐEØ×"Ñ"×'Ñ'Ð'Ü×Ñ˜EÓ" 1Ñ%Ð%ry   )ru   r  )rŠ   r1   r7  r1   )r�   rD  rÍ  r  r7  ztuple[ArrayLike, bool])r`  r9  r7  r9  )r`  rA  r7  rA  )r`  rÄ  r7  rÄ  )r•   r”   rT  r”   r7  r”   )r   z'DatetimeTZDtype | np.dtype | ArrowDtyper7  r  )¨Ú
__future__r   r   r   Ú	functoolsr   rl  Útypingr   r   r	   r
   r   r   r   r   r   rÒ  ÚnumpyrÍ   Úpandas._configr   Úpandas._config.configr   Úpandas._libsr   r   Úpandas._libs.tslibsr   r   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   Úpandas.compat.numpyr<   r  Úpandas.errorsr=   r>   r?   Úpandas.util._decoratorsr@   Úpandas.util._exceptionsrA   Úpandas.core.dtypes.castrB   Úpandas.core.dtypes.commonrC   rD   rE   rF   rG   rH   Úpandas.core.dtypes.dtypesrI   rJ   rK   rL   rM   Úpandas.core.dtypes.genericrN   rO   Úpandas.core.dtypes.missingrP   rQ   Úpandas.corerR   rS   rT   rU   Úpandas.core.algorithmsrV   rW   rX   Úpandas.core.array_algosrY   Úpandas.core.arraylikerZ   Úpandas.core.arrays._mixinsr[   r\   Úpandas.core.arrays.arrow.arrayr]   Úpandas.core.arrays.baser^   Úpandas.core.arrays.integerr_   Úpandas.core.commonÚcoreÚcommonrä   Úpandas.core.constructionr`   r3  ra   rb   Úpandas.core.indexersrc   rd   Úpandas.core.ops.commonre   Úpandas.core.ops.invalidrf   rg   Úpandas.tseriesrh   Úcollections.abcri   rj   rk   rl   r<  rn   r’  ro   rp   rq   rr   rE  rx   rŒ   rŽ   rJ  ro  rÎ  rÑ  rZ  rk  r—   ry   rw   Ú<module>rÿ     sØ  ðÞ "÷õ Û ÷
÷ 
õ 
ó ã å -Ý ,÷÷÷ ÷ ÷ ÷ ñ ÷*õ KÝ =Ý C÷÷ ÷ ÷ ó õ$ /÷ñ õ
õ 5å K÷÷ ÷õ ÷÷÷
ó ÷ñ õ
 ?Ý *÷õ ?Ý 2Ý 3ß  Ð  ÷ñ ÷
õ <÷õ
 'á÷ñ õ (å÷ñ ð .°Ñ7€ˆyÓ 7ó1ó
ô2k3˜XÐ'Bô k3ô\171Ð(ô 71ôtKÐ(ô Kðd$Øð$Ø #ð$àó$ðN 
Ú 0ó 
Ø 0ð 
Ú .ó 
Ø .óð2Ø
ðØ,=ðàóô:&ry   