
    Egő                       d dl mZ d dlmZ d dlZd dl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 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(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z: d dl;m<Z< d dl=m>c m?Z@ d dlAmBZB erd dlCmDZD d dlEmFZFmGZGmHZHmIZImJZJmKZK d dlLmMZM d dlNZNd-dZO G d de:jP                  ZQ	 	 	 d.d/d&ZRd0d1d)ZSd2d3d*ZTd4d,ZUdS )5    )annotations)	timedeltaN)TYPE_CHECKINGcast)libtslibs)	NaTNaTTypeTick	Timedeltaastype_overflowsafeget_supported_dtypeiNaTis_supported_dtypeperiods_per_second)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)validate_endpoints)TD64NS_DTYPEis_float_dtypeis_integer_dtypeis_object_dtype	is_scalaris_string_dtypepandas_dtype)ExtensionDtype)isna)nanops	roperator)datetimelike_accumulations)datetimelike)generate_regular_range)unpack_zerodim_and_defer)Iterator)AxisIntDateTimeErrorChoicesDtypeObjNpDtypeSelfnpt	DataFramenamestralias	docstringc                R    dfd}| |_         d| d|_        t          |          S )Nreturn
np.ndarrayc                    | j         }dk    rt          || j                  }nt          || j                  }| j        r|                     |d d          }|S )Ndaysresofloat64)
fill_valueconvert)asi8r   _cresor   _hasna_maybe_mask_results)selfvaluesresultr6   s      R/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/core/arrays/timedeltas.pyfz_field_accessor.<locals>.fR   ss    F??'T[AAAFF
 )T[IIIF; 	--4 .  F     
)r9   r:   )__name____doc__property)r4   r6   r7   rJ   s    `  rI   _field_accessorrP   Q   sH           AJ"Y"""AIA;;rK   c                      e Zd ZU dZdZ ej        dd          Zeej        e	fZ
d ZdZedvd	            Zd
Zg Zded<   g Zded<   dgZded<   g dZded<   eez   ez   dgz   Zded<   g dZded<   dwdZedxd            ZdZeZed             Zedefdy fd#            Zedd$d%dzd(            Zedd$e j!        dd)dzd*            Z"e	 d{dd+d|d-            Z#d}d.Z$d~d/Z%dd1Z&ddd3Z'dd5Z(dddd$dd2d6d7dd?Z)dddd@d$d2dAddCZ*d2dDd fdGZ+dddIZ,dddJddNZ-dO Z. e/dP          ddQ            Z0e0Z1dR Z2dS Z3ddUZ4 e/dV          dW             Z5 e/dX          dY             Z6 e/dZ          d[             Z7 e/d\          d]             Z8 e/d^          d_             Z9 e/d`          da             Z: e/db          dc             Z; e/dd          de             Z<ddfZ=ddgZ>ddhZ?ddjZ@ddkZA eBjC        dl          ZD eEdmdmeD          ZF eBjC        dn          ZG eEdodoeG          ZH eBjC        dp          ZI eEdqdqeI          ZJ eBjC        dr          ZK eEdsdseK          ZLeddu            ZM xZNS )TimedeltaArrayal  
    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
    ----------
    values : array-like
        The timedelta data.

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

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

    Methods
    -------
    None

    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[ns]
    timedeltaarrayr	   nsc                ,    t          j        | d          S )Nm)r   is_np_dtypexs    rI   <lambda>zTimedeltaArray.<lambda>   s    S_Q%<%< rK   )r   timedelta64r9   type[Timedelta]c                    t           S Nr   rF   s    rI   _scalar_typezTimedeltaArray._scalar_type   s    rK   i  z	list[str]
_other_ops	_bool_opsfreq_object_ops)r<   secondsmicrosecondsnanoseconds
_field_opsunit_datetimelike_ops)to_pytimedeltatotal_secondsroundfloorceilas_unit_datetimelike_methodsrY   np.timedelta64Timedelta | NaTTypec                    |                     d          }|t          j        k    rt          S t          j        || j                  S )Ni8r=   )viewr	   _valuer   _from_value_and_resorC   )rF   rY   ys      rI   	_box_funczTimedeltaArray._box_func   s9    FF4LL
??J-adkBBBBrK   np.dtype[np.timedelta64]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dtyper`   s    rI   r   zTimedeltaArray.dtype   s    " }""rK   Nc                    t          |          }t          |j                   ||j        k    rt          d          |S )Nz'Values resolution does not match dtype.)_validate_td64_dtyper   
ValueError)clsrG   r   s      rI   _validate_dtypezTimedeltaArray._validate_dtype   sB     %U++V\***FL  FGGGrK   rG   npt.NDArray[np.timedelta64]Tick | Noner   r0   c                d   t          j        |d          sJ t          j        |          rJ t	          |t
          j                  sJ t          |                      ||j        k    sJ |t	          |t                    sJ t                                          ||          }||_        |S )NrV   )rG   r   )r   rW   r   is_unitless
isinstancenpndarraytyper   r   super_simple_new_freq)r   rG   rd   r   rH   	__class__s        rI   r   zTimedeltaArray._simple_new   s     uc*****%e,,,,,&"*--;;tF||;;;$$$$|z$55|||$$F%$@@rK   Fr   copyr   boolc                   |rt          |          }t          ||d           \  }}|t          ||d          }|                     ||j        |          S )Nr   rj   Fr   r   rd   )r   sequence_to_td64nsr   r   r   )r   datar   r   rd   s        rI   _from_sequencezTimedeltaArray._from_sequence   sc     	0(//E'4dCCC
d&t5uEEEDt4:DAAArK   )r   r   rd   rj   c                   |rt          |          }|dvsJ t          |||          \  }}|t          ||d          }|                     ||j        |          }|                    |i            |S )zo
        _from_sequence_not_strict but without responsibility for finding the
        result's `freq`.
        Yrz   Mr   NFr   r   )r   r   r   r   r   _maybe_pin_freq)r   r   r   r   rd   rj   inferred_freqrH   s           rI   _from_sequence_not_strictz(TimedeltaArray._from_sequence_not_strict   s      	0(//E?****0DtLLLm&t5uEEEDTZmLLtR(((rK   rj   
str | Nonec               X   t          j        |          }|+t          d |||fD                       rt          d          t	          j        ||||          dk    rt          d          |"t          |                              d          }|"t          |                              d          }||dvrt          d          nd}|||                    |d	          }|||                    |d	          }t          |          \  }}|t          |||||
          }	n3t          j        |j        |j        |                              d          }	|s
|	dd          }	|s
|	d d         }	|	                    d| d          }
|                     |
|
j        |          S )Nc              3     K   | ]}|d u V  	d S r^    .0rY   s     rI   	<genexpr>z1TimedeltaArray._generate_range.<locals>.<genexpr>  s&      IIaT	IIIIIIrK   z1Must provide freq argument if no data is supplied   zVOf the four parameters: start, end, periods, and freq, exactly three must be specifiedrT   )smsusrT   z+'unit' must be one of 's', 'ms', 'us', 'ns'F)round_okr   rv      zm8[]r   )dtlvalidate_periodsanyr   comcount_not_noner   rq   r   r)   r   linspacerx   astyperw   r   r   )r   startendperiodsrd   closedrj   left_closedright_closedindex
td64valuess              rI   _generate_rangezTimedeltaArray._generate_range  s    &w//<CIIGUC3HIIIII<PQQQeS'488A==<  
 e$$,,T22E?C..((..C222 !NOOO 3 D!1MM$M77E?t/++dU+33C$6v$>$>!\*5#w4PPPEEKcj'BBII$OOE 	!""IE 	#2#JEZZd..
z1AMMMrK   c                   t          || j                  s|t          urt          d          |                     |           |t          u rt          j        |j        | j                  S |	                    | j                  j
        S )Nz'value' should be a Timedelta.)r   ra   r	   r   _check_compatible_withr   r[   rx   rj   rq   asm8rF   values     rI   _unbox_scalarzTimedeltaArray._unbox_scalar?  sz    %!233 	?S8H8H=>>>##E***C<<>%,	:::==++00rK   c                     t          |          S r^   r_   r   s     rI   _scalar_from_stringz"TimedeltaArray._scalar_from_stringH  s    rK   Nonec                    d S r^   r   rF   others     rI   r   z%TimedeltaArray._check_compatible_withK  s    rK   Tc                   t          |          }t          j        |d          r|| j        k    r|r|                                 S | S t          |          rFt          | j        |d          }t          |           	                    ||j        | j
                  S t          d| j         d| d          t          j                            | ||          S )NrV   Fr   r   zCannot convert from z to z1. Supported resolutions are 's', 'ms', 'us', 'ns')r"   r   rW   r   r   r   r   r~   r   r   rd   r   r   DatetimeLikeArrayMixinr   )rF   r   r   
res_valuess       rI   r   zTimedeltaArray.astypeR  s    
 U##?5#&& 	
"" '99;;&!%(( 
0ERRR
Dzz--j&6TY .    !F4: F F5 F F F  
 )00u40HHHrK   r+   c              #  R  K   | j         dk    r+t          t          |                     D ]}| |         V  d S | j        }t          |           }d}||z  dz   }t          |          D ]>}||z  }t	          |dz   |z  |          }t          |||         d          }|E d {V  ?d S )Nr   i'  Tbox)ndimrangelenr~   minr   )	rF   ir   length	chunksizechunksstart_iend_i	converteds	            rI   __iter__zTimedeltaArray.__iter__m  s      9q==3t99%%  1g  =DYYFI	)Q.F6]] % %i-QUi/88/WU]0CNNN	$$$$$$$$$	% %rK   r   )axisr   outkeepdimsinitialskipna	min_countr   AxisInt | NoneNpDtype | Noner   r   r   intc                   t          j        d||||d           t          j        | j        |||          }|                     ||          S )Nr   )r   r   r   r   )r   r   r   )nvvalidate_sumr%   nansumr~   _wrap_reduction_result)	rF   r   r   r   r   r   r   r   rH   s	            rI   sumzTimedeltaArray.sum  sd     	%gVV	
 	
 	
 MVy
 
 
 **4888rK   r   )r   r   r   ddofr   r   r   c                   t          j        d|||dd           t          j        | j        |||          }|| j        dk    r|                     |          S |                     |          S )Nr   )r   r   r   std)fname)r   r   r   r   )r   validate_stat_ddof_funcr%   nanstdr~   r   r{   _from_backing_data)rF   r   r   r   r   r   r   rH   s           rI   r   zTimedeltaArray.std  s     	"%BB%	
 	
 	
 	
 t}4TRRR<49>>>>&)))&&v...rK   )r   r4   r5   c               4   |dk    rat          t          |          } || j                                        fd|i|}t	          |                               |d | j                  S |dk    rt          d           t                      j	        |fd|i|S )Ncumsumr   )rd   r   cumprodz$cumprod not supported for Timedelta.)
getattrr'   r~   r   r   r   r   	TypeErrorr   _accumulate)rF   r4   r   kwargsoprH   r   s         rI   r   zTimedeltaArray._accumulate  s    83T::BR**,,FFVFvFFF::))&t4:)NNNYBCCC '577&tEEFEfEEErK   boxedc                (    ddl m}  || d          S )Nr   get_format_timedelta64Tr   )pandas.io.formats.formatr  )rF   r   r  s      rI   
_formatterzTimedeltaArray._formatter  s*    CCCCCC%%d5555rK   )na_repdate_formatr  str | floatnpt.NDArray[np.object_]c               n    ddl m}  || |          } t          j        |dd          | j                  S )Nr   r   r   )r  r  r   
frompyfuncr~   )rF   r  r  r   r  	formatters         rI   _format_native_typesz#TimedeltaArray._format_native_types  sM     	DCCCCC +*488	 .r}Y1--dm<<<rK   c                    t          |t                    rJ t          dt          |          j         dt          |           j                   )Nzcannot add the type z to a )r   r   r   r   rM   r   s     rI   _add_offsetzTimedeltaArray._add_offset  sO    eT*****T4;;#7TTtDzz?RTT
 
 	
rK   __mul__c                ,   t                    rc| j        z  }d }| j        &t                    s| j        z  }|j        dk    rd }t          |                               ||j        |          S t          d          st          j
                  t                    t          |           k    r)t          j        j        d          st          d          t          j                  rm| j        fdt!          t          |                     D             }t          j
        |          }t          |                               ||j                  S | j        z  }t          |                               ||j                  S )Nr   r   r   rV   z$Cannot multiply with unequal lengthsc                2    g | ]}|         |         z  S r   r   )r   narrr   s     rI   
<listcomp>z*TimedeltaArray.__mul__.<locals>.<listcomp>  s&    BBBAc!fuQx'BBBrK   r   )r    r~   rd   r$   r  r   r   r   hasattrr   arrayr   r   rW   r   r   r   )rF   r   rH   rd   r  s    `  @rI   r  zTimedeltaArray.__mul__  sw   U 		Q]U*FDy$T%[[$y5(6Q;;D::))&4)PPPug&& 	$HUOOEu::T""3?5;+L+L" CDDD5;'' 	F -CBBBBBs4yy1A1ABBBFXf%%F::))&)EEE &Dzz%%fFL%AAArK   c                   t          || j                  r}t          |          }t          d|          t          u rFt          j        | j        t
          j                  }|	                    t
          j
                   |S  || j        |          S |t          j        t          j        fv r9t          dt!          |          j         dt!          |           j                    || j        |          }d}| j        '| j        |z  }|j        dk    r| j        j        dk    rd}t!          |                               ||j        |          S )zv
        Shared logic for __truediv__, __rtruediv__, __floordiv__, __rfloordiv__
        with scalar 'other'.
        rt   r  zCannot divide z by Nr   r   )r   _recognized_scalarsr   r   r	   r   emptyshaper?   fillnanr~   r&   rtruediv	rfloordivr   r   rM   rd   nanosr   r   )rF   r   r   resrH   rd   s         rI   _scalar_divlike_opz!TimedeltaArray._scalar_divlike_op  sH   
 eT566 "	Qe$$E )511S88htz<<<   
 2dmU+++ i()*=>>>TT%[[%9TTtDzz?RTT   Ru--FDy$ y5(:??ty!';';  D::))&4)PPPrK   c                    t          |d          st          j        |          }t          |          t          |           k    rt	          d          |S )Nr   z*Cannot divide vectors with unequal lengths)r  r   r  r   r   r   s     rI   _cast_divlike_opzTimedeltaArray._cast_divlike_op  sL    ug&& 	$HUOOEu::T""IJJJrK   np.ndarray | Selfc                D    || j         t          j        |                    }t          |j                  st          |j                  rC|t          j        t          j        fv r)t          |           
                    ||j                  S |t          j        t          j        fv rw|                                 t          |          z  }|                                r?|                    t          j                  }t          j        ||t          j                   |S )z
        Shared logic for __truediv__, __floordiv__, and their reversed versions
        with timedelta64-dtype ndarray other.
        r  )r~   r   asarrayr   r   r   operatortruedivfloordivr   r   r&   r  r$   r   r   r?   putmaskr  )rF   r   r   rH   masks        rI   _vector_divlike_opz!TimedeltaArray._vector_divlike_op(  s     DM2:e#4#455U[)) 	F^EK-H-H 	FbU
 O
 O
 ::))&)EEE(#Y%899999;;e,Dxxzz 1rz22
64000rK   __truediv__c                Z   t           j        }t          |          r|                     ||          S |                     |          }t          j        |j        d          s(t          |j                  st          |j                  r| 
                    ||          S t          |j                  rst          j        |          }| j        dk    r=d t          | |          D             }d |D             }t          j        |d          }nt#          | j        |          }|S t&          S )NrV   r   c                    g | ]
\  }}||z  S r   r   r   leftrights      rI   r  z.TimedeltaArray.__truediv__.<locals>.<listcomp>P  s     MMM[T5D5LMMMrK   c                :    g | ]}|                     d d          S r   r   reshaper   s     rI   r  z.TimedeltaArray.__truediv__.<locals>.<listcomp>Q  &    @@@!QYYq"--@@@rK   r   r   )r'  r(  r    r!  r#  r   rW   r   r   r   r,  r   r   r&  r   zipconcatenater   r~   NotImplementedrF   r   r   res_cols	res_cols2rH   s         rI   r-  zTimedeltaArray.__truediv__>  s)    U 	6**5"555%%e,,OEK--	6,,	6 ek**	6
 **5"5555;'' 	"Ju%%Ey1}}MMCe<L<LMMM@@x@@@		:::-dmUCCM "!rK   __rtruediv__c                    t           j        }t                    r                     |          S                                t          j        j        d          r                     |          S t          j                  r= fdt          t                               D             }t          j        |          S t          S )NrV   c                2    g | ]}|         |         z  S r   r   r   r  r   rF   s     rI   r  z/TimedeltaArray.__rtruediv__.<locals>.<listcomp>j  s&    HHH!58d1g-HHHrK   )r&   r  r    r!  r#  r   rW   r   r,  r   r   r   r   r  r;  )rF   r   r   result_lists   ``  rI   r?  zTimedeltaArray.__rtruediv__[  s     U 	6**5"555%%e,,?5;,, 	"**5"555U[)) 	" IHHHHuSYY7G7GHHHK8K((( "!rK   __floordiv__c                ~   t           j        }t          |          r|                     ||          S |                     |          }t          j        |j        d          s(t          |j                  st          |j                  r| 
                    ||          S t          |j                  rt          j        |          }| j        dk    r=d t          | |          D             }d |D             }t          j        |d          }nt#          | j        |          }|j        t&          k    sJ |S t(          S )NrV   r   c                    g | ]
\  }}||z  S r   r   r0  s      rI   r  z/TimedeltaArray.__floordiv__.<locals>.<listcomp>  s     NNNkdEDEMNNNrK   c                :    g | ]}|                     d d          S r4  r5  r   s     rI   r  z/TimedeltaArray.__floordiv__.<locals>.<listcomp>  r7  rK   r   r8  )r'  r)  r    r!  r#  r   rW   r   r   r   r,  r   r   r&  r   r9  r:  r   r~   objectr;  r<  s         rI   rD  zTimedeltaArray.__floordiv__p  s:   U 	6**5"555%%e,,OEK--	",,	" ek**	"
 **5"555U[)) 	"Ju%%Ey1}}NNSu=M=MNNN@@x@@@		:::.t}eDD<6))))M "!rK   __rfloordiv__c                    t           j        }t                    r                     |          S                                t          j        j        d          r                     |          S t          j                  r? fdt          t                               D             }t          j        |          }|S t          S )NrV   c                2    g | ]}|         |         z  S r   r   rB  s     rI   r  z0TimedeltaArray.__rfloordiv__.<locals>.<listcomp>  s&    III158tAw.IIIrK   )r&   r  r    r!  r#  r   rW   r   r,  r   r   r   r   r  r;  )rF   r   r   rC  rH   s   ``   rI   rI  zTimedeltaArray.__rfloordiv__  s     U 	6**5"555%%e,,?5;,, 		"**5"555U[)) 	"IIIIIc$ii8H8HIIIKXk**FM "!rK   __mod__c                `    t          || j                  rt          |          }| | |z  |z  z
  S r^   r   r  r   r   s     rI   rL  zTimedeltaArray.__mod__  s:     eT566 	%e$$Etu}---rK   __rmod__c                `    t          || j                  rt          |          }||| z  | z  z
  S r^   rN  r   s     rI   rO  zTimedeltaArray.__rmod__  s:     eT566 	%e$$E---rK   
__divmod__c                l    t          || j                  rt          |          }| |z  }| ||z  z
  }||fS r^   rN  rF   r   res1res2s       rI   rQ  zTimedeltaArray.__divmod__  sG     eT566 	%e$$Eu}dUl"TzrK   __rdivmod__c                l    t          || j                  rt          |          }|| z  }||| z  z
  }||fS r^   rN  rS  s       rI   rV  zTimedeltaArray.__rdivmod__  sG     eT566 	%e$$E}td{"TzrK   c                    d }| j         | j          }t          |                               | j         | j        |          S Nr   )rd   r   r   r~   r   )rF   rd   s     rI   __neg__zTimedeltaArray.__neg__  s?    9 I:DDzz%%t}nDJT%RRRrK   c                    t          |                               | j                                        | j        | j                  S rY  )r   r   r~   r   r   rd   r`   s    rI   __pos__zTimedeltaArray.__pos__  s>    Dzz%%M  
 & 
 
 	
rK   c                    t          |                               t          j        | j                  | j                  S )Nr  )r   r   r   absr~   r   r`   s    rI   __abs__zTimedeltaArray.__abs__  s/    Dzz%%bfT]&;&;4:%NNNrK   npt.NDArray[np.float64]c                h    t          | j                  }|                     | j        |z  d          S )a{  
        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[ns]

        >>> 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[ns]', freq=None)

        >>> idx.total_seconds()
        Index([0.0, 86400.0, 172800.0, 259200.0, 345600.0], dtype='float64')
        N)r@   )r   rC   rE   rB   )rF   ppss     rI   rm   zTimedeltaArray.total_seconds  s3    l !--''	CD'IIIrK   c                *    t          | j                  S )a  
        Return an ndarray of datetime.timedelta objects.

        Returns
        -------
        numpy.ndarray

        Examples
        --------
        >>> tdelta_idx = pd.to_timedelta([1, 2, 3], unit='D')
        >>> tdelta_idx
        TimedeltaIndex(['1 days', '2 days', '3 days'],
                        dtype='timedelta64[ns]', freq=None)
        >>> tdelta_idx.to_pytimedelta()
        array([datetime.timedelta(days=1), datetime.timedelta(days=2),
               datetime.timedelta(days=3)], dtype=object)
        )r   r~   r`   s    rI   rl   zTimedeltaArray.to_pytimedelta  s    $ #4=111rK   aC  Number of days 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[ns]
    >>> 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[ns]', freq=None)
    >>> tdelta_idx.days
    Index([0, 10, 20], dtype='int64')r<   a  Number of seconds (>= 0 and less than 1 day) 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[ns]
    >>> 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[ns]', freq=None)
    >>> tdelta_idx.seconds
    Index([1, 2, 3], dtype='int32')rf   a  Number of microseconds (>= 0 and less than 1 second) for each element.

    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[ns]
    >>> 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[ns]', freq=None)
    >>> tdelta_idx.microseconds
    Index([1, 2, 3], dtype='int32')rg   a  Number of nanoseconds (>= 0 and less than 1 microsecond) 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')rh   r3   c                    ddl m} g d| j        }|rfdnd  |fd| D                       }|s|                    d          }|S )	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

        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   r2   )r<   hoursminutesrf   millisecondsrg   rh   c                j    t          |           rt          j        gt                    z  S | j        S r^   )r$   r   r  r   
components)rY   columnss    rI   rJ   z$TimedeltaArray.components.<locals>.f  s.    77 3F8c'll22|#rK   c                    | j         S r^   )ri  rX   s    rI   rJ   z$TimedeltaArray.components.<locals>.f  s
    |#rK   c                &    g | ]} |          S r   r   )r   rY   rJ   s     rI   r  z-TimedeltaArray.components.<locals>.<listcomp>  s!    ///QAAaDD///rK   )rj  int64)pandasr3   rD   r   )rF   r3   hasnansrH   rj  rJ   s       @@rI   ri  zTimedeltaArray.components  s    , 	%$$$$$
 
 
 + 
	$$ $ $ $ $ $$ $ $ ////$///AAA 	,]]7++FrK   )r9   r\   )rY   rs   r9   rt   )r9   r|   )rG   r   rd   r   r   r|   r9   r0   )r   r   r9   r0   r^   )rj   r   r9   r0   )r9   rs   )r9   rt   )r9   r   )T)r   r   )r9   r+   )
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r4   r5   r   r   )F)r   r   )r  r  r9   r  )r9   r0   )r9   r$  )r9   rR   )r9   r`  )r9   r  )r9   r3   )OrM   
__module____qualname__rN   _typr   r[   _internal_fill_valuer   r   r  _is_recognized_dtype_infer_matchesrO   ra   __array_priority__rb   __annotations__rc   re   ri   rk   rr   r{   r   r   r   _default_dtypeclassmethodr   r   r   r   
no_defaultr   r   r   r   r   r   r   r   r   r   r  r  r  r*   r  __rmul__r!  r#  r,  r-  r?  rD  rI  rL  rO  rQ  rV  rZ  r\  r_  rm   rl   textwrapdedentdays_docstringrP   r<   seconds_docstringrf   microseconds_docstringrg   nanoseconds_docstringrh   ri  __classcell__)r   s   @rI   rR   rR   g   s        # #J D)2>%66$bnd;<<1N   X JI$XK%%%%NNNJNNNN#-#;i#G6(#RRRRR( ( (    C C C C # # # X#& E!N  [  !*6	      [" +/e 	B 	B 	B 	B 	B [	B 
 ^     [8 /3+NKO+N +N +N +N +N [+N`1 1 1 1          I I I I I6% % % %,  $ $9 9 9 9 9 9.  $ $/ / / / / /, 8< 
F 
F 
F 
F 
F 
F 
F 
F6 6 6 6 6 (-$	= 	= 	= 	= 	= 	=
 
 
 i((B B B )(BB H'Q 'Q 'QR     , m,," " -,"8 n--" " .-"( n--" " .-"8 o.." " /."" i((. . )(. j)). . *). l++  ,+ m,,  -,S S S S
 
 
 

O O O O7J 7J 7J 7Jr2 2 2 2( %X_	) N8 ?66>::D'	' 8 o G -X_	' : #? L ,HO	' : "/ K 0 0 0 X0 0 0 0 0rK   rR   Fraiser   r   errorsr-   r9   tuple[np.ndarray, Tick | None]c                   |dvsJ d}|t          |          }t          j        | |d          \  } }t          | t                    r| j        }| j        t          k    st          | j                  rt          | ||          } d}n"t          | j                  rt          | |          \  } }|o| }nt          | j                  rqt          | j        t                    r| j        }| j        } nt!          j        |           }t%          | |pd          } t&          | |<   |                     d	          } d}not+          j        | j        d
          r=t/          | j                  s(t1          | j                  }t3          | |d          } d}nt5          d| j         d          t!          j        | |          } | j        j        d
k    sJ | j        dk    sJ | |fS )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 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   NrR   )cls_namerj   r  Fr   rT   zm8[ns]rV   r   zdtype z' cannot be converted to timedelta64[ns]r   m8)r   r   !ensure_arraylike_for_datetimeliker   rR   rd   r   rH  r!   _objects_to_td64nsr   _ints_to_td64nsr   r#   _mask_datar   isnanr   r   rw   r   rW   r   r   r   r   r  kind)r   r   rj   r  r   	copy_mader+  	new_dtypes           rI   r   r     s   H &&&&M#D))6d-  JD$ $'' "	 zVtz::!$T&AAA	$*	%	% V)$T:::i%I	
	#	# V dj.11 	":D:DD8D>>D(t|t<<T
yy""	S	)	) 	V!$*-- 	+DJ77I&t95IIIDD TTTTUUU8Dt$$$D:?c!!!!:rK   rT   rj   c                $   d}||nd}| j         t          j        k    r!|                     t          j                  } d}|dk    r4d| d}|                     |          } t          | t                    } d}n|                     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
    FNrT   Tztimedelta64[r   r  timedelta64[ns])r   r   rm  r   rw   r   r   )r   rj   r  	dtype_strs       rI   r  r  ;  s      I#44DzRX {{28$$	t||*4***	yy##"4|<<< 		 yy*++?rK   c                    t          j        | t           j        d          }t          |||          }|                    d          S )aR  
    Convert a object-dtyped or string-dtyped array into an
    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.
    Fr   r  r  )r   r  object_r   rw   )r   rj   r  rG   rH   s        rI   r  r  c  sC    < Xd"*5999F!&tFCCCF;;()))rK   r.   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.rV   zdtype 'z,' is invalid, should be np.timedelta64 dtypez;Supported timedelta64 resolutions are 's', 'ms', 'us', 'ns')r"   r   r   r   r   rW   r   )r   msgs     rI   r   r     s    E8 	 oo?5#&& XV5VVVWWW&& XVWWWLrK   )r4   r5   r6   r5   r7   r5   )FNr  )r   r   r  r-   r9   r  )rT   )rj   r5   )Nr  )r  r-   )r9   r.   )V
__future__r   datetimer   r'  typingr   r   numpyr   pandas._libsr   r   pandas._libs.tslibsr	   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._validatorsr   pandas.core.dtypes.commonr   r   r   r   r    r!   r"   pandas.core.dtypes.dtypesr#   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.commonr*   collections.abcr+   pandas._typingr,   r-   r.   r/   r0   r1   rn  r3   r|  rP   TimelikeOpsrR   r   r  r  r   r   rK   rI   <module>r     s    " " " " " "              
           
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 E D D D D D                     / . . . . . 6 6 6 6 6 6                  5 4 4 4 4 4 + + + + + +        ? > > > > > 2 2 2 2 2 2 = = = = = =                   ; ; ; ; ; ; !((((((                !         ,p p p p pS_ p p pr 	#*	Z Z Z Z Zz% % % % %P!* !* !* !* !*H     rK   