
    i٤                    D   d dl mZ d dlmZ d dlZd dlmZmZmZ d dl	Z
d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZ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$ d d
l%m&Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>Z> d dl?m@ZA d dlBmCZC d dlDmEc mFZG d dlHmIZI erd dlJmKZKmLZL d dlMmNZNmOZOmPZPmQZQmRZRmSZS d dlTmUZU d dlVZVd dZW e)d       G d deAj                               ZY	 	 	 d!	 	 	 	 	 d"dZZd#d$dZ[	 d%	 	 	 d&dZ\d'dZ]y)(    )annotations)	timedeltaN)TYPE_CHECKINGSelfcast)libtslibs)DayNaTNaTTypeTick	Timedeltaastype_overflowsafeget_supported_dtypeiNaTis_supported_dtypeperiods_per_second	to_offset)cast_from_unit_vectorized)get_timedelta_daysget_timedelta_field)array_to_timedelta64floordiv_object_arrayints_to_pytimedeltaparse_timedelta_unittruediv_object_array)function)
set_module)validate_endpoints)TD64NS_DTYPEis_float_dtypeis_integer_dtypeis_object_dtype	is_scalaris_string_dtypepandas_dtype)
ArrowDtypeBaseMaskedDtypeExtensionDtype)isna)nanops	roperator)datetimelike_accumulations)datetimelike)generate_regular_range)unpack_zerodim_and_defer)CallableIterator)AxisIntDateTimeErrorChoicesDtypeObjNpDtypenptTimeUnit	DataFramec                J    dfd}| |_         d| d|_        t        |      S )Nc                    | j                   }dk(  rt        || j                        }nt        || j                        }| j                  r| j                  |d d      }|S )Ndaysresofloat64)
fill_valueconvert)asi8r   _cresor   _hasna_maybe_mask_results)selfvaluesresultaliass      Z/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/core/arrays/timedeltas.pyfz_field_accessor.<locals>.fZ   sa    F?'T[[AF
 )T[[IF;;--4 . F     
)return
np.ndarray)__name____doc__property)namerJ   	docstringrL   s    `  rK   _field_accessorrV   Y   s+      AJYKr"AIA;rM   zpandas.arraysc                      e Zd ZU dZdZeej                  efZ	d Z
ded<   dZedWd       ZedXd       Zd	Zg Zd
ed<   g Zd
ed<   g dZd
ed<   eez   ddgz   Zd
ed<   g dZd
ed<   dYdZedZd       ZdZded<   ed        Zedef	 	 	 	 	 	 	 d[ fd       Zedddd\d       Zeddej>                  dd	 	 	 d\d       Z e	 d]	 	 	 d^d        Z!dWd!Z"d_d"Z#d`d#Z$dadbd%Z%dcd&Z&dddddd$d'd(	 	 	 	 	 	 	 	 	 ddd)Z'dddd*dd$d+	 	 	 	 	 	 	 	 	 ded,Z(d$d-df fd.Z)dgdhd/Z*d0dd1	 	 	 did2Z+d3 Z, e-d4      djd5       Z.e.Z/d6 Z0d7 Z1dkd8Z2 e-d9      d:        Z3 e-d;      d<        Z4 e-d=      d>        Z5 e-d?      d@        Z6 e-dA      dB        Z7 e-dC      dD        Z8 e-dE      dF        Z9 e-dG      dH        Z:dldIZ;dldJZ<dldKZ=dmdLZ>dndMZ? e@j                  dN      ZB eCdOdOeB      ZD e@j                  dP      ZE eCdQdQeE      ZF e@j                  dR      ZG eCdSdSeG      ZH e@j                  dT      ZI eCdUdUeI      ZJedodV       ZK xZLS )pTimedeltaArrayaa  
    Pandas ExtensionArray for timedelta data.

    .. warning::

       TimedeltaArray is currently experimental, and its API may change
       without warning. In particular, :attr:`TimedeltaArray.dtype` is
       expected to change to be an instance of an ``ExtensionDtype``
       subclass.

    Parameters
    ----------
    data : array-like
        The timedelta data.
    dtype : numpy.dtype
        Currently, only ``numpy.dtype("timedelta64[ns]")`` is accepted.
    freq : Offset, optional
        Frequency of the data.
    copy : bool, default False
        Whether to copy the underlying array of data.

    Attributes
    ----------
    None

    Methods
    -------
    None

    See Also
    --------
    Timedelta : Represents a duration, the difference between two dates or times.
    TimedeltaIndex : Immutable Index of timedelta64 data.
    to_timedelta : Convert argument to timedelta.

    Examples
    --------
    >>> pd.arrays.TimedeltaArray._from_sequence(pd.TimedeltaIndex(["1h", "2h"]))
    <TimedeltaArray>
    ['0 days 01:00:00', '0 days 02:00:00']
    Length: 2, dtype: timedelta64[us]
    timedeltaarrayc                .    t        j                  | d      S Nm)r   is_np_dtypexs    rK   <lambda>zTimedeltaArray.<lambda>   s    QRTWAX rM   zCallable[[DtypeObj], bool]_is_recognized_dtype)r   timedelta64c                B    t        j                  d| j                        S )Nr   )nprb   unitrG   s    rK   _internal_fill_valuez#TimedeltaArray._internal_fill_value   s    ~~eTYY//rM   c                    t         S Nr   rf   s    rK   _scalar_typezTimedeltaArray._scalar_type   s    rM   i  z	list[str]
_other_ops	_bool_ops)r=   secondsmicrosecondsnanoseconds
_field_opsre   freq_datetimelike_ops)to_pytimedeltatotal_secondsroundfloorceilas_unit_datetimelike_methodsc                    |j                  d      }|t        j                  k(  rt        S t        j                  || j
                        S )Ni8r>   )viewr   _valuer   _from_value_and_resorD   )rG   r_   ys      rK   	_box_funczTimedeltaArray._box_func   s6    FF4L

?J--adkkBBrM   c                .    | j                   j                  S )a3  
        The dtype for the TimedeltaArray.

        .. warning::

           A future version of pandas will change dtype to be an instance
           of a :class:`pandas.api.extensions.ExtensionDtype` subclass,
           not a ``numpy.dtype``.

        Returns
        -------
        numpy.dtype
        )_ndarraydtyperf   s    rK   r   zTimedeltaArray.dtype   s    " }}"""rM   NTick | Day | None_freqc                z    t        |      }t        |j                         ||j                  k7  rt        d      |S )Nz'Values resolution does not match dtype.)_validate_td64_dtyper   
ValueError)clsrH   r   s      rK   _validate_dtypezTimedeltaArray._validate_dtype   s7     %U+V\\*FLL FGGrM   c                @   t        j                  |d      sJ t        j                  |      rJ t	        |t
        j                        sJ t        |             ||j                  k(  sJ |t	        |t        t        f      sJ t        | 1  ||      }||_        |S )Nr\   )rH   r   )r   r]   r	   is_unitless
isinstancerd   ndarraytyper   r   r
   super_simple_newr   )r   rH   rr   r   rI   	__class__s        rK   r   zTimedeltaArray._simple_new   s     uc***%%e,,,&"**-;tF|;-$$$|z$s<<<$F%$@rM   Fr   copyc                   d }|r;t        |      }t        j                  |      dk(  rt        j                  |      d   }t        |||      \  }}|t        ||d      }| j                  ||j                  |      S )Nintegerr   r   re   Fr   r   rr   )	r   r   infer_dtyperd   datetime_datasequence_to_td64nsr   r   r   )r   datar   r   re   rr   s         rK   _from_sequencezTimedeltaArray._from_sequence   sy    (/Et$	1''.q1'4dC
d&t5uEDt4::DAArM   )r   r   rr   re   c               2   |r=t        |      }|0t        j                  |      dk(  rt        j                  |      d   }|dvsJ t        |||      \  }}|t        ||d      }| j                  ||j                  |      }|j                  |i        |S )zo
        _from_sequence_not_strict but without responsibility for finding the
        result's `freq`.
        r   r   Yr   Mr   Fr   r   )
r   r   r   rd   r   r   r   r   r   _maybe_pin_freq)r   r   r   r   rr   re   inferred_freqrI   s           rK   _from_sequence_not_strictz(TimedeltaArray._from_sequence_not_strict  s     (/E| 5 B''.q1?***0DtLm&t5uEDTZZmLtR(rM   c                  t        j                  |      }| t        d |||fD              rt        d      t	        j
                  ||||      dk7  rt        d      |t        |      j                  d      }|t        |      j                  d      }|dvrt        d      |||j                  |d	      }|||j                  |d	      }t        |      \  }}|t        |||||
      }	n:t        j                  |j                  |j                  |      j                  d      }	|s|	dd  }	|s|	d d }	|	j                  d| d      }
| j                  |
|
j                   |      S )Nc              3  $   K   | ]  }|d u  
 y wri    ).0r_   s     rK   	<genexpr>z1TimedeltaArray._generate_range.<locals>.<genexpr>(  s     IaT	Is   z1Must provide freq argument if no data is supplied   zVOf the four parameters: start, end, periods, and freq, exactly three must be specifiedns)smsusr   z+'unit' must be one of 's', 'ms', 'us', 'ns'Fround_okre   r|      zm8[]r   )dtlvalidate_periodsanyr   comcount_not_noner   ry   r   r/   rd   linspacer~   astyper}   r   r   )r   startendperiodsrr   closedre   left_closedright_closedindex
td64valuess              rK   _generate_rangezTimedeltaArray._generate_range#  s    &&w/<CIGUC3HIIPQQeS'48A=< 
 e$,,T2E?C.((.C..JKK!1MM$M7E?t/++dU+3C$6v$>!\*5#w4PEKKcjj'BII$OE!"IE#2JEZZ#dV1.
z1A1AMMrM   c                (   t        || j                        s|t        urt        d      | j	                  |       |t        u r*t        j                  |j                  | j                        S |j                  | j                  d      j                  S )Nz'value' should be a Timedelta.Fr   )r   rk   r   r   _check_compatible_withrd   rb   r~   re   ry   asm8rG   values     rK   _unbox_scalarzTimedeltaArray._unbox_scalarQ  sp    %!2!23S8H=>>##E*C<>>%,,		::==U=;@@@rM   c                    t        |      S ri   rj   r   s     rK   _scalar_from_stringz"TimedeltaArray._scalar_from_stringZ  s    rM   c                     y ri   r   rG   others     rK   r   z%TimedeltaArray._check_compatible_with]  s    rM   Tc                   t        |      }t        j                  |d      r|| j                  k(  r|r| j	                         S | S t        |      rIt        | j                  |d      }t        |       j                  ||j                  | j                        S t        d| j                   d| d      t        j                  j                  | ||      S )Nr\   Fr   r   zCannot convert from z to z1. Supported resolutions are 's', 'ms', 'us', 'ns')r&   r   r]   r   r   r   r   r   r   r   rr   r   r   DatetimeLikeArrayMixinr   )rG   r   r   
res_valuess       rK   r   zTimedeltaArray.astyped  s    
 U#??5#&

"99;&!%(0ER
Dz--j&6&6TYY .   !*4::,d5' BF F 
 ))00u40HHrM   c              #  4  K   | j                   dkD  r!t        t        |             D ]	  }| |     y | j                  }t        |       }d}||z  dz   }t        |      D ]3  }||z  }t	        |dz   |z  |      }t        ||| d      }|E d {    5 y 7 w)Nr   i'  Tbox)ndimrangelenr   minr   )	rG   ir   length	chunksizechunksstart_iend_i	converteds	            rK   __iter__zTimedeltaArray.__iter__  s     99q=3t9% 1g ==DYFI	)Q.F6] %i-QUi/8/WU0CN	$$$	% %s   BBBBr   )axisr   outkeepdimsinitialskipna	min_countc                   t        j                  d||||d       t        j                  | j                  |||      }| j                  ||      S )Nr   )r   r   r   r   )r   r   r   )nvvalidate_sumr+   nansumr   _wrap_reduction_result)	rG   r   r   r   r   r   r   r   rI   s	            rK   sumzTimedeltaArray.sum  sP     	%gV	
 MMVy
 **488rM   r   )r   r   r   ddofr   r   c                   t        j                  d|||dd       t        j                  | j                  |||      }|| j
                  dk(  r| j                  |      S | j                  |      S )Nr   )r   r   r   std)fname)r   r   r   r   )r   validate_stat_ddof_funcr+   nanstdr   r   r   _from_backing_data)rG   r   r   r   r   r   r   rI   s           rK   r   zTimedeltaArray.std  si     	""%B%	
 t}}4TR<499>>>&))&&v..rM   )r   c                  |dk(  rZt        t        |      } || j                  j                         fd|i|}t	        |       j                  |d | j                        S |dk(  rt        d      t        | $  |fd|i|S )Ncumsumr   )rr   r   cumprodz$cumprod not supported for Timedelta.)
getattrr-   r   r   r   r   r   	TypeErrorr   _accumulate)rG   rT   r   kwargsoprI   r   s         rK   r   zTimedeltaArray._accumulate  s    83T:B**,FVFvFF:))&t4::)NNYBCC 7&tEFEfEErM   c                "    ddl m}  || d      S )Nr   get_format_timedelta64Tr   )pandas.io.formats.formatr  )rG   boxedr  s      rK   
_formatterzTimedeltaArray._formatter  s    C%d55rM   r   )na_repdate_formatc               n    ddl m}  || |      } t        j                  |dd      | j                        S )Nr   r   r   )r  r  rd   
frompyfuncr   )rG   r  r  r   r  	formatters         rK   _format_native_typesz#TimedeltaArray._format_native_types  s6     	D +48	 .r}}Y1-dmm<<rM   c                    t        |t        t        f      rJ t        dt	        |      j
                   dt	        |       j
                         )Nzcannot add the type z to a )r   r   r
   r   r   rQ   r   s     rK   _add_offsetzTimedeltaArray._add_offset  sI    edC[111"4;#7#7"8tDz?R?R>ST
 	
rM   __mul__c                0   t        |      rt        j                  |      rt        d| j                   d      | j
                  |z  }|j                  j                  dk7  r!t        dt        |      j                         d }| j                  +t        |      s | j                  |z  }|j                  dk(  rd }t        |       j                  ||j                  |      S t        |d      st        j                  |      }|j                  j                  dk(  rt        d| j                   d      t!        |j                  t"        t$        f      rt&        S t)        |      t)        |       k7  r+t        j*                  |j                  d      st-        d	      t/        |j                        rq| j
                  }t1        t)        |             D cg c]  }||   ||   z   }}t        j                  |      }t        |       j                  ||j                  
      S | j
                  |z  }|j                  j                  dk7  r!t        dt        |      j                         t        |       j                  ||j                  
      S c c}w )NzCannot multiply 'z.' by bool, explicitly cast to integers insteadr\   zCannot multiply with r   r   r   bz$Cannot multiply with unequal lengthsr   )r$   r   is_boolr   r   r   kindr   rQ   rr   r*   nr   hasattrrd   arrayr   r'   r(   NotImplementedr   r]   r   r#   r   )rG   r   rI   rr   arrr  s         rK   r  zTimedeltaArray.__mul__  s4   U{{5!'

| 4' ' 
 ]]U*F||  C'  "7U8L8L7M NOODyy$T%[yy5(66Q;D:))&4)PPug&HHUOE;;s"#DJJ< 0# #  ekkJ#@A!!u:T"3??5;;+L CDD5;;' --C16s4y1ABAc!fuQx'BFBXXf%F:))&)EE &<<# 3DK4H4H3IJKKDz%%fFLL%AA Cs   Jc                   t        || j                        rt        |      }t        d|      t        u rPt        j                  | j                  t
        j                        }|j                  t
        j                         |S  || j                  |      S |t        j                  t        j                  fv r7t        dt!        |      j"                   dt!        |       j"                          || j                  |      }d}| j$                  t        | j$                  t&              rl| j$                  j(                  |z  dk(  r#t'        | j$                  j(                  |z        }n<t+        t        | j$                  j(                              |z  }n| j$                  |z  }|j,                  dk(  r| j$                  j,                  dk7  rd}t!        |       j/                  ||j0                  |      S )	zv
        Shared logic for __truediv__, __rtruediv__, __floordiv__, __rfloordiv__
        with scalar 'other'.
        Timedelta | NaTTyper  zCannot divide z by Nr   )r=   r   )r   _recognized_scalarsr   r   r   rd   emptyshaper@   fillnanr   r,   rtruediv	rfloordivr   r   rQ   rr   r
   r  r   nanosr   r   )rG   r   r   resrI   rr   s         rK   _scalar_divlike_opz!TimedeltaArray._scalar_divlike_op   s   
 eT556e$E )51S8hhtzz< 
 dmmU++ i(()*=*=>>$T%[%9%9$:$tDz?R?R>ST  u-FDyy$ dii-yy{{U*a/"499;;%#78(		)DEM99u,D::?tyy!';  D:))&4)PPrM   c                    t        |d      st        j                  |      }t        |      t        |       k7  rt	        d      |S )Nr   z*Cannot divide vectors with unequal lengths)r  rd   r  r   r   r   s     rK   _cast_divlike_opzTimedeltaArray._cast_divlike_opO  s:    ug&HHUOEu:T"IJJrM   c                Z    || j                   t        j                  |            }t        |j                        st        |j                        rH|t        j                  t        j                  fv r&t        |       j                  ||j                        S |t        j                  t        j                  fv rp| j                         t        |      z  }|j                         rD|j                  t        j                         }t        j"                  ||t        j$                         |S )z
        Shared logic for __truediv__, __floordiv__, and their reversed versions
        with timedelta64-dtype ndarray other.
        r  )r   rd   asarrayr"   r   r!   operatortruedivfloordivr   r   r,   r   r*   r   r   r@   putmaskr  )rG   r   r   rI   masks        rK   _vector_divlike_opz!TimedeltaArray._vector_divlike_opX  s     DMM2::e#45U[[)^EKK-HbU
 O
 :))&)EE(##Y%8%89999;e,Dxxzrzz2

640rM   __truediv__c                   t         j                  }t        |      r| j                  ||      S | j	                  |      }t        j                  |j                  d      s*t        |j                        st        |j                        r| j                  ||      S t        |j                        rt        j                  |      }| j                  dkD  r[t        | |d      D cg c]
  \  }}||z   }}}|D cg c]  }|j!                  dd       }}t        j"                  |d      }|S t%        | j&                  |      }|S t(        S c c}}w c c}w Nr\   r   T)strictr   r   )r   )r(  r)  r$   r#  r%  r   r]   r   r"   r!   r-  r#   rd   r'  r   zipreshapeconcatenater   r   r  	rG   r   r   leftrightres_colsr_   	res_cols2rI   s	            rK   r.  zTimedeltaArray.__truediv__n  s)    U**5"55%%e,OOEKK-,ekk***5"555;;'JJu%Eyy1}47eD4Q%0T5D5L  8@@!QYYq"-@	@	: M .dmmUCM "! As   %E;E__rtruediv__c                   t         j                  }t        |      r| j                  ||      S | j	                  |      }t        j                  |j                  d      r| j                  ||      S t        |j                        r?t        t        |             D cg c]  }||   | |   z   }}t        j                  |      S t        S c c}w r[   )r,   r  r$   r#  r%  r   r]   r   r-  r#   r   r   rd   r  r  )rG   r   r   r  result_lists        rK   r:  zTimedeltaArray.__rtruediv__  s     U**5"55%%e,??5;;,**5"55U[[) 8=SY7GH!58d1g-HKH88K(( "!	 Is   C__floordiv__c                   t         j                  }t        |      r| j                  ||      S | j	                  |      }t        j                  |j                  d      s*t        |j                        st        |j                        r| j                  ||      S t        |j                        rt        j                  |      }| j                  dkD  rZt        | |d      D cg c]
  \  }}||z   }}}|D cg c]  }|j!                  dd       }}t        j"                  |d      }nt%        | j&                  |      }|j                  t(        k(  sJ |S t*        S c c}}w c c}w r0  )r(  r*  r$   r#  r%  r   r]   r   r"   r!   r-  r#   rd   r'  r   r2  r3  r4  r   r   objectr  r5  s	            rK   r=  zTimedeltaArray.__floordiv__  s0   U**5"55%%e,OOEKK-,ekk***5"55U[[)JJu%Eyy1}58uT5R&1dEDEM  8@@!QYYq"-@	@	:.t}}eD<<6)))M "! As   %E!;E'__rfloordiv__c                   t         j                  }t        |      r| j                  ||      S | j	                  |      }t        j                  |j                  d      r| j                  ||      S t        |j                        rAt        t        |             D cg c]  }||   | |   z   }}t        j                  |      }|S t        S c c}w r[   )r,   r   r$   r#  r%  r   r]   r   r-  r#   r   r   rd   r  r  )rG   r   r   r  r<  rI   s         rK   r@  zTimedeltaArray.__rfloordiv__  s      U**5"55%%e,??5;;,**5"55U[[)8=c$i8HI158tAw.IKIXXk*FM "! Js   C__mod__c                Z    t        || j                        rt        |      }| | |z  |z  z
  S ri   r   r  r   r   s     rK   rB  zTimedeltaArray.__mod__  s2     eT556e$Etu}---rM   __rmod__c                Z    t        || j                        rt        |      }||| z  | z  z
  S ri   rD  r   s     rK   rE  zTimedeltaArray.__rmod__  s2     eT556e$E---rM   
__divmod__c                f    t        || j                        rt        |      }| |z  }| ||z  z
  }||fS ri   rD  rG   r   res1res2s       rK   rG  zTimedeltaArray.__divmod__  s?     eT556e$Eu}dUl"TzrM   __rdivmod__c                f    t        || j                        rt        |      }|| z  }||| z  z
  }||fS ri   rD  rI  s       rK   rL  zTimedeltaArray.__rdivmod__  s?     eT556e$E}td{"TzrM   c                    d }| j                   | j                    }t        |       j                  | j                   | j                  |      S Nr   )rr   r   r   r   r   )rG   rr   s     rK   __neg__zTimedeltaArray.__neg__  sB    99 II:DDz%%t}}nDJJT%RRrM   c                    t        |       j                  | j                  j                         | j                  | j
                        S rO  )r   r   r   r   r   rr   rf   s    rK   __pos__zTimedeltaArray.__pos__  s:    Dz%%MM 

 & 
 	
rM   c                    t        |       j                  t        j                  | j                        | j
                        S )Nr  )r   r   rd   absr   r   rf   s    rK   __abs__zTimedeltaArray.__abs__   s-    Dz%%bffT]]&;4::%NNrM   c                l    t        | j                        }| j                  | j                  |z  d      S )ay  
        Return total duration of each element expressed in seconds.

        This method is available directly on TimedeltaArray, TimedeltaIndex
        and on Series containing timedelta values under the ``.dt`` namespace.

        Returns
        -------
        ndarray, Index or Series
            When the calling object is a TimedeltaArray, the return type
            is ndarray.  When the calling object is a TimedeltaIndex,
            the return type is an Index with a float64 dtype. When the calling object
            is a Series, the return type is Series of type `float64` whose
            index is the same as the original.

        See Also
        --------
        datetime.timedelta.total_seconds : Standard library version
            of this method.
        TimedeltaIndex.components : Return a DataFrame with components of
            each Timedelta.

        Examples
        --------
        **Series**

        >>> s = pd.Series(pd.to_timedelta(np.arange(5), unit="D"))
        >>> s
        0   0 days
        1   1 days
        2   2 days
        3   3 days
        4   4 days
        dtype: timedelta64[s]

        >>> s.dt.total_seconds()
        0         0.0
        1     86400.0
        2    172800.0
        3    259200.0
        4    345600.0
        dtype: float64

        **TimedeltaIndex**

        >>> idx = pd.to_timedelta(np.arange(5), unit="D")
        >>> idx
        TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days'],
                       dtype='timedelta64[s]', freq=None)

        >>> idx.total_seconds()
        Index([0.0, 86400.0, 172800.0, 259200.0, 345600.0], dtype='float64')
        N)rA   )r   rD   rF   rC   )rG   ppss     rK   ru   zTimedeltaArray.total_seconds  s1    l !-''		CD'IIrM   c                ,    t        | j                        S )a;  
        Return an ndarray of datetime.timedelta objects.

        Returns
        -------
        numpy.ndarray
            A NumPy ``timedelta64`` object representing the same duration as the
            original pandas ``Timedelta`` object. The precision of the resulting
            object is in nanoseconds, which is the default
            time resolution used by pandas for ``Timedelta`` objects, ensuring
            high precision for time-based calculations.

        See Also
        --------
        to_timedelta : Convert argument to timedelta format.
        Timedelta : Represents a duration between two dates or times.
        DatetimeIndex: Index of datetime64 data.
        Timedelta.components : Return a components namedtuple-like
                               of a single timedelta.

        Examples
        --------
        >>> 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.to_pytimedelta()
        array([datetime.timedelta(days=1), datetime.timedelta(days=2),
               datetime.timedelta(days=3)], dtype=object)

        >>> tidx = pd.TimedeltaIndex(data=["1 days 02:30:45", "3 days 04:15:10"])
        >>> tidx
        TimedeltaIndex(['1 days 02:30:45', '3 days 04:15:10'],
               dtype='timedelta64[us]', freq=None)
        >>> tidx.to_pytimedelta()
        array([datetime.timedelta(days=1, seconds=9045),
                datetime.timedelta(days=3, seconds=15310)], dtype=object)
        )r   r   rf   s    rK   rt   zTimedeltaArray.to_pytimedelta@  s    N #4==11rM   a8  Number of days for each element.

    See Also
    --------
    Series.dt.seconds : Return number of seconds for each element.
    Series.dt.microseconds : Return number of microseconds for each element.
    Series.dt.nanoseconds : Return number of nanoseconds for each element.

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

    >>> ser = pd.Series(pd.to_timedelta([1, 2, 3], unit='D'))
    >>> ser
    0   1 days
    1   2 days
    2   3 days
    dtype: timedelta64[s]
    >>> ser.dt.days
    0    1
    1    2
    2    3
    dtype: int64

    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.days
    Index([0, 10, 20], dtype='int64')r=   a2  Number of seconds (>= 0 and less than 1 day) for each element.

    See Also
    --------
    Series.dt.seconds : Return number of seconds for each element.
    Series.dt.nanoseconds : Return number of nanoseconds for each element.

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

    >>> ser = pd.Series(pd.to_timedelta([1, 2, 3], unit='s'))
    >>> ser
    0   0 days 00:00:01
    1   0 days 00:00:02
    2   0 days 00:00:03
    dtype: timedelta64[s]
    >>> ser.dt.seconds
    0    1
    1    2
    2    3
    dtype: int32

    For TimedeltaIndex:

    >>> tdelta_idx = pd.to_timedelta([1, 2, 3], unit='s')
    >>> tdelta_idx
    TimedeltaIndex(['0 days 00:00:01', '0 days 00:00:02', '0 days 00:00:03'],
                   dtype='timedelta64[s]', freq=None)
    >>> tdelta_idx.seconds
    Index([1, 2, 3], dtype='int32')rn   a  Number of microseconds (>= 0 and less than 1 second) for each element.

    See Also
    --------
    pd.Timedelta.microseconds : Number of microseconds (>= 0 and less than 1 second).
    pd.Timedelta.to_pytimedelta.microseconds : Number of microseconds (>= 0 and less
        than 1 second) of a datetime.timedelta.

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

    >>> ser = pd.Series(pd.to_timedelta([1, 2, 3], unit='us'))
    >>> ser
    0   0 days 00:00:00.000001
    1   0 days 00:00:00.000002
    2   0 days 00:00:00.000003
    dtype: timedelta64[us]
    >>> ser.dt.microseconds
    0    1
    1    2
    2    3
    dtype: int32

    For TimedeltaIndex:

    >>> tdelta_idx = pd.to_timedelta([1, 2, 3], unit='us')
    >>> tdelta_idx
    TimedeltaIndex(['0 days 00:00:00.000001', '0 days 00:00:00.000002',
                    '0 days 00:00:00.000003'],
                   dtype='timedelta64[us]', freq=None)
    >>> tdelta_idx.microseconds
    Index([1, 2, 3], dtype='int32')ro   a  Number of nanoseconds (>= 0 and less than 1 microsecond) for each element.

    See Also
    --------
    Series.dt.seconds : Return number of seconds for each element.
    Series.dt.microseconds : Return number of nanoseconds for each element.

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

    >>> ser = pd.Series(pd.to_timedelta([1, 2, 3], unit='ns'))
    >>> ser
    0   0 days 00:00:00.000000001
    1   0 days 00:00:00.000000002
    2   0 days 00:00:00.000000003
    dtype: timedelta64[ns]
    >>> ser.dt.nanoseconds
    0    1
    1    2
    2    3
    dtype: int32

    For TimedeltaIndex:

    >>> tdelta_idx = pd.to_timedelta([1, 2, 3], unit='ns')
    >>> tdelta_idx
    TimedeltaIndex(['0 days 00:00:00.000000001', '0 days 00:00:00.000000002',
                    '0 days 00:00:00.000000003'],
                   dtype='timedelta64[ns]', freq=None)
    >>> tdelta_idx.nanoseconds
    Index([1, 2, 3], dtype='int32')rp   c                    ddl m} g d| j                  }|rfd}nd } || D cg c]
  } ||       c}      }|s|j                  d      }|S c c}w )a  
        Return a DataFrame of the individual resolution components of the Timedeltas.

        The components (days, hours, minutes seconds, milliseconds, microseconds,
        nanoseconds) are returned as columns in a DataFrame.

        Returns
        -------
        DataFrame

        See Also
        --------
        TimedeltaIndex.total_seconds : Return total duration expressed in seconds.
        Timedelta.components : Return a components namedtuple-like of a single
            timedelta.

        Examples
        --------
        >>> 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.components
           days  hours  minutes  seconds  milliseconds  microseconds  nanoseconds
        0     1      0        3        0             0             2           42
        r   r9   )r=   hoursminutesrn   millisecondsro   rp   c                l    t        |       rt        j                  gt              z  S | j                  S ri   )r*   rd   r  r   
components)r_   columnss    rK   rL   z$TimedeltaArray.components.<locals>.f/  s)    7FF8c'l22||#rM   c                    | j                   S ri   )r^  r^   s    rK   rL   z$TimedeltaArray.components.<locals>.f6  s    ||#rM   )r_  int64)pandasr:   rE   r   )rG   r:   hasnansrL   r_   rI   r_  s         @rK   r^  zTimedeltaArray.components  s_    8 	%
 ++$$ $/QAaD/A]]7+F 0s   A)rO   np.timedelta64)rO   ztype[Timedelta])r_   rd  rO   r  )rO   np.dtype[np.timedelta64])rH   znpt.NDArray[np.timedelta64]rr   r   r   re  rO   r   )r   boolrO   r   ri   )re   r8   rO   r   )rO   r  )rO   None)T)r   rf  )rO   r2   )
r   AxisInt | Noner   NpDtype | Noner   rf  r   rf  r   int)
r   rh  r   ri  r   rj  r   rf  r   rf  )rT   strr   rf  )F)r  rf  )r  zstr | floatrO   npt.NDArray[np.object_])rO   r   )rO   znp.ndarray | Self)rO   rX   )rO   znpt.NDArray[np.float64])rO   rl  )rO   r:   )MrQ   
__module____qualname__rR   _typr   rd   rb   r   r  ra   __annotations___infer_matchesrS   rg   rk   __array_priority__rl   rm   rq   rs   rz   r   r   r   classmethodr   r    r   r   r   
no_defaultr   r   r   r   r   r   r   r   r   r   r  r
  r  r0   r  __rmul__r#  r%  r-  r.  r:  r=  r@  rB  rE  rG  rL  rP  rR  rU  ru   rt   textwrapdedentdays_docstringrV   r=   seconds_docstringrn   microseconds_docstringro   nanoseconds_docstringrp   r^  __classcell__)r   s   @rK   rX   rX   o   sf   )V D$bnnd;7X4X1N0 0   J	IyNJ	N#-	#9VV<L#LyL(9 C # #&  $E#   #'*6	+   (	
 
 " +/e B B 
 ^^
  
 < /3(N>F(N	(N (NZA I6%,  $ $9 9 	9 9 9 9.  $ $/ / 	/ / / /, 8< 
F6 (-$	=$	=	 	=
 i(7B )7Br H-Q^, m," -"< n-" ."( n-" ."< o." /"" i(. ). j). *. l+ , m, -S

O7Jr'2R %X__	)!ND 66>:D'	' B G -X__ 	'"F #L ,HOO	'!D "K 6 6rM   rX   c                6   |dvsJ d}|t        |      }t        j                  | |d      \  } }t        | t              r| j
                  }| j                  t        k(  st        | j                        rt        | ||      } d}nt        | j                        rt        | |      \  } }|xr | }nzt        | j                        rt        | j                  t              r| j                  }| j                  } nt!        j"                  |       }|z|dk7  rut!        j$                  d	
      5  | j'                  t         j(                        }ddd       || k(  z  j+                         }|rt-        |d||      \  }	}
t.        |	|<   |	|fS t1        | |xs d      } t.        | |<   | j3                  d      } d}ntt5        j6                  | j                  d      r;t9        | j                        s?t;        | j                        }t=        | |d      } d}nt?        d| j                   d      |st!        j@                  |       } nt!        jB                  | |      } | j                  jD                  dk(  sJ | j                  dk7  sJ | |fS # 1 sw Y   AxY w)a  
    Parameters
    ----------
    data : list-like
    copy : bool, default False
    unit : str, optional
        The timedelta unit to treat integers as multiples of. For numeric
        data this defaults to ``'ns'``.
        Must be un-specified if the data contains a str and ``errors=="raise"``.
    errors : {"raise", "coerce", "ignore"}, default "raise"
        How to handle elements that cannot be converted to timedelta64[ns].
        See ``pandas.to_timedelta`` for details.

    Returns
    -------
    converted : numpy.ndarray
        The sequence converted to a numpy array with dtype ``timedelta64[ns]``.
    inferred_freq : Tick, Day, or None
        The inferred frequency of the sequence.

    Raises
    ------
    ValueError : Data cannot be converted to timedelta64[ns].

    Notes
    -----
    Unlike `pandas.to_timedelta`, if setting ``errors=ignore`` will not cause
    errors to be ignored; they are caught and subsequently ignored at a
    higher level.
    r   NrX   )cls_namere   errorsFr   r   ignore)invalid)r   re   r  zm8[ns]r\   r   zdtype z' cannot be converted to timedelta64[ns]r   m8)#r   r   !ensure_arraylike_for_datetimeliker   rX   rr   r   r?  r%   _objects_to_td64nsr"   _ints_to_td64nsr!   r)   _mask_datard   isnanerrstater   ra  allr   r   r   r}   r   r]   r   r   r   r   r'  r  r  )r   r   re   r  r   	copy_mader,  int_data	all_roundrI   _	new_dtypes               rK   r   r   C  sL   H &&&M#D)66d-JD$ $'		 zzVtzz:!$T&A	$**	%)$T:i%I	

	# djj.1::D::D88D>D X. 1;;rxx01!12779I.5tF	  $t},,(t|t<T
yy"	S	)!$**-+DJJ7I&t95IDD &,STUUzz$xx4(::??c!!!::E1 1s   / JJc                ^   d}||nd}| j                   t        j                  k7  r!| j                  t        j                        } d}|dk7  rNd| d}| j	                  |      } t        | j                         }|| j                   k7  rt        | |      } d}| |fS | j	                  d      } | |fS )a  
    Convert an ndarray with integer-dtype to timedelta64[ns] dtype, treating
    the integers as multiples of the given timedelta unit.

    Parameters
    ----------
    data : numpy.ndarray with integer-dtype
    unit : str, default "ns"
        The timedelta unit to treat integers as multiples of.

    Returns
    -------
    numpy.ndarray : timedelta64[ns] array converted from data
    bool : whether a copy was made
    Fr   Tztimedelta64[r   r  ztimedelta64[ns])r   rd   ra  r   r}   r   r   )r   re   r  	dtype_strr  s        rK   r  r    s      I#4DzzRXX {{288$	t|"4&*	yy#'

3	

"&t9=D I
 ? yy*+?rM   c                l    t        j                  | t         j                        }t        |||      }|S )aR  
    Convert an object-dtyped or string-dtyped array into a
    timedelta64[ns]-dtyped array.

    Parameters
    ----------
    data : ndarray or Index
    unit : str, default "ns"
        The timedelta unit to treat integers as multiples of.
        Must not be specified if the data contains a str.
    errors : {"raise", "coerce", "ignore"}, default "raise"
        How to handle elements that cannot be converted to timedelta64[ns].
        See ``pandas.to_timedelta`` for details.

    Returns
    -------
    numpy.ndarray : timedelta64[ns] array converted from data

    Raises
    ------
    ValueError : Data cannot be converted to timedelta64[ns].

    Notes
    -----
    Unlike `pandas.to_timedelta`, if setting `errors=ignore` will not cause
    errors to be ignored; they are caught and subsequently ignored at a
    higher level.
    r  r  )rd   r'  object_r   )r   re   r  rH   rI   s        rK   r  r    s,    @ ZZBJJ/F!&tFCFMrM   c                    t        |       } | t        j                  d      k(  rd}t        |      t	        j
                  | d      st        d|  d      t        |       st        d      | S )Nr  zhPassing in 'timedelta' dtype with no precision is not allowed. Please pass in 'timedelta64[ns]' instead.r\   zdtype 'z,' is invalid, should be np.timedelta64 dtypez;Supported timedelta64 resolutions are 's', 'ms', 'us', 'ns')r&   rd   r   r   r   r]   r   )r   msgs     rK   r   r      sn    E8 	 o??5#&75')UVWW&VWWLrM   )rT   rk  rJ   rk  rU   rk  )FNraise)r   rf  r  r4   rO   z$tuple[np.ndarray, Tick | Day | None])r   )re   rk  rO   ztuple[np.ndarray, bool])Nr  )r  r4   rO   rP   )rO   r5   )^
__future__r   datetimer   r(  typingr   r   r   numpyrd   pandas._libsr   r	   pandas._libs.tslibsr
   r   r   r   r   r   r   r   r   r   r   pandas._libs.tslibs.conversionr   pandas._libs.tslibs.fieldsr   r   pandas._libs.tslibs.timedeltasr   r   r   r   r   pandas.compat.numpyr   r   pandas.util._decoratorsr   pandas.util._validatorsr   pandas.core.dtypes.commonr    r!   r"   r#   r$   r%   r&   pandas.core.dtypes.dtypesr'   r(   r)   pandas.core.dtypes.missingr*   pandas.corer+   r,   pandas.core.array_algosr-   pandas.core.arraysr.   r   pandas.core.arrays._rangesr/   pandas.core.commoncorecommonr   pandas.core.ops.commonr0   collections.abcr1   r2   pandas._typingr3   r4   r5   r6   r7   r8   rb  r:   rv  rV   TimelikeOpsrX   r   r  r  r   r   rM   rK   <module>r     s)   "        E  / . 6   
 , ? 2 =     ;2  ! , OLS__ L Lj 	#*	j
j !	j
 *jZ'V 5<#1##LrM   