o
    ҷh                     @  s  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	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 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/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z; d dl<m=Z> d dl?m@Z@ d dlAmB  mCZD d dlEmFZF erd dlGmHZH d dlImJZJmKZKmLZLmMZMmNZNmOZO d dlPmQZQ d dlRZRd2ddZSG dd de>jTZU			 d3d4d'd(ZVd5d6d+d,ZWd7d8d-d.ZXd9d0d1ZYdS ):    )annotations)	timedeltaN)TYPE_CHECKINGcast)libtslibs)NaTNaTTypeTick	Timedeltaastype_overflowsafeget_supported_resoget_unit_from_dtypeiNaTis_supported_unitnpy_unit_to_abbrevperiods_per_second	to_offset)precision_from_unit)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                   s*   d fdd}| |_ d| d|_t|S )Nreturn
np.ndarrayc                   sH   | j } dkrt|| jd}nt| | jd}| jr"| j|d dd}|S )Ndaysresofloat64)
fill_valueconvert)asi8r   _cresor   _hasna_maybe_mask_results)selfvaluesresultr8    P/var/www/html/venv/lib/python3.10/site-packages/pandas/core/arrays/timedeltas.pyfV   s   z_field_accessor.<locals>.f
)r:   r;   )__name____doc__property)r6   r8   r9   rL   rJ   rI   rK   _field_accessorU   s   rQ   c                      s*  e Zd ZU dZdZeddZeeje	fZ
dd ZdZedd
d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 e dg Zded< g dZded< dddZedddZd ZeZed!d" Zed efd fd(d)Zed d*d+dd.d/Zed d*e j!d d0dd1d2Z"e	 dd d3dd5d6Z#dd7d8Z$dd9d:Z%dd<d=Z&ddd?d@Z'ddBdCZ(d d d d*d d>dDdEddMdNZ)d d d dOd*d>dPddRdSZ*d>dTd fdWdXZ+dddZd[Z,dd d\dd`daZ-dbdc Z.e/ddddedfZ0e0Z1dgdh Z2didj Z3ddldmZ4e/dndodp Z5e/dqdrds Z6e/dtdudv Z7e/dwdxdy Z8e/dzd{d| Z9e/d}d~d Z:e/ddd Z;e/ddd Z<dddZ=dddZ>dddZ?dddZ@dddZAeBCdZDeEddeDZFeBCdZGeEddeGZHeBCdZIeEddeIZJeBCdZKeEddeKZLedddZM  ZNS )TimedeltaArraya]  
    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(pd.TimedeltaIndex(['1H', '2H']))
    <TimedeltaArray>
    ['0 days 01:00:00', '0 days 02:00:00']
    Length: 2, dtype: timedelta64[ns]
    timedeltaarrayr   nsc                 C  s   t | dS )Nm)r   is_np_dtypexrJ   rJ   rK   <lambda>   s    zTimedeltaArray.<lambda>)r   timedelta64r:   type[Timedelta]c                 C  s   t S Nr   rF   rJ   rJ   rK   _scalar_type      zTimedeltaArray._scalar_typei  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_methodsrX   np.timedelta64Timedelta | NaTTypec                 C  s(   | d}|tjkrtS tj|| jdS )Ni8r=   )viewr   _valuer   _from_value_and_resorC   )rF   rX   yrJ   rJ   rK   	_box_func   s   

zTimedeltaArray._box_funcnp.dtype[np.timedelta64]c                 C  s   | 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^   rJ   rJ   rK   r|      s   zTimedeltaArray.dtypeNc                 C  s   t |j t |}|S r\   )_validate_td64_dtyper|   )clsrG   r|   rJ   rJ   rK   _validate_dtype   s   
zTimedeltaArray._validate_dtyperG   npt.NDArray[np.timedelta64]Tick | Noner|   r2   c                   st   t |dsJ t|rJ t|tjsJ t|||jks"J |d u s-t|t	s-J t
 j||d}||_|S )NrU   )rG   r|   )r   rV   r   is_unitless
isinstancenpndarraytyper|   r
   super_simple_new_freq)r~   rG   rc   r|   rH   	__class__rJ   rK   r      s   zTimedeltaArray._simple_newFr|   copyr   boolc                C  sb   |rt |}t||d d\}}td |d\}}td|}|d ur(t||dd}| j||j|dS )Nr   ri   Fr   r   r|   rc   )r}   sequence_to_td64nsdtlvalidate_inferred_freqr   r   r   r|   )r~   datar|   r   inferred_freqrc   _rJ   rJ   rK   _from_sequence   s   
zTimedeltaArray._from_sequence)r|   r   rc   ri   c          
      C  s   |rt |}|dvsJ |du }|tjur|nd}t|\}}t|||d\}}t|||\}}td|}|r;d}|durFt||dd}| j	||j
|d}	|du r_|dur_| |	| |	S |rgt|	j|	_|	S )z]
        A non-strict version of _from_sequence, called from TimedeltaIndex.__new__.
        Yrx   MNr   r   Fr   r   )r}   r   
no_defaultr   maybe_infer_freqr   r   r   r   r   r|   _validate_frequencyr   r   r   )
r~   r   r|   r   rc   ri   explicit_none
freq_inferr   rH   rJ   rJ   rK   _from_sequence_not_strict   s(   
z(TimedeltaArray._from_sequence_not_strictri   
str | Nonec                C  sX  t |}|d u rtdd |||fD rtdt||||dkr'td|d ur2t|d}|d ur=t|d}|d urJ|dvrItdnd}|d ur[|d ur[|j|d	d
}|d urj|d urj|j|d	d
}t|\}}|d ur~t	|||||d}	nt
|j|j|d}	|s|	dd  }	|s|	d d }	|	d| d}
| j|
|
j|dS )Nc                 s  s    | ]}|d u V  qd S r\   rJ   .0rX   rJ   rJ   rK   	<genexpr>)  s    z1TimedeltaArray._generate_range.<locals>.<genexpr>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   rt      m8[]r   )r   validate_periodsany
ValueErrorcomcount_not_noner   rp   r   r+   r   linspacerv   astyperu   r   r|   )r~   startendperiodsrc   closedri   left_closedright_closedindex
td64valuesrJ   rJ   rK   _generate_range$  s<   
 zTimedeltaArray._generate_rangec                 C  sL   t || js|turtd| | |tu rt|j| jS |	| jj
S )Nz'value' should be a Timedelta.)r   r_   r   r   _check_compatible_withr   rZ   rv   ri   rp   asm8rF   valuerJ   rJ   rK   _unbox_scalarU  s   
zTimedeltaArray._unbox_scalarc                 C  s   t |S r\   r]   r   rJ   rJ   rK   _scalar_from_string^  s   z"TimedeltaArray._scalar_from_stringNonec                 C  s   d S r\   rJ   rF   otherrJ   rJ   rK   r   a  r`   z%TimedeltaArray._check_compatible_withTc                 C  s   t |}t|dr=|| jkr|r|  S | S tt|r1t| j|dd}t	| j
||j| jdS td| j d| dtjj| ||dS )NrU   Fr   r   zCannot convert from z to z1. Supported resolutions are 's', 'ms', 'us', 'ns')r$   r   rV   r|   r   r   r   r   r{   r   r   rc   r   r   DatetimeLikeArrayMixinr   )rF   r|   r   
res_valuesrJ   rJ   rK   r   h  s   

zTimedeltaArray.astyper-   c           	      c  s    | j dkrtt| D ]}| | V  qd S | j}t| }d}|| d }t|D ]}|| }t|d | |}t||| dd}|E d H  q)d S )Nr   i'  Tbox)ndimrangelenr{   minr   )	rF   ir   length	chunksizechunksstart_iend_i	convertedrJ   rJ   rK   __iter__  s   
zTimedeltaArray.__iter__r   )axisr|   outkeepdimsinitialskipna	min_countr   AxisInt | NoneNpDtype | Noner   r   r   intc          	      C  s6   t d||||d tj| j|||d}| ||S )NrJ   )r|   r   r   r   )r   r   r   )nvvalidate_sumr'   nansumr{   _wrap_reduction_result)	rF   r   r|   r   r   r   r   r   rH   rJ   rJ   rK   sum  s   
zTimedeltaArray.sumr   )r   r|   r   ddofr   r   r   c                C  sR   t jd|||ddd tj| j|||d}|d u s| jdkr$| |S | |S )NrJ   )r|   r   r   std)fname)r   r   r   r   )r   validate_stat_ddof_funcr'   nanstdr{   r   ry   _from_backing_data)rF   r   r|   r   r   r   r   rH   rJ   rJ   rK   r     s   


zTimedeltaArray.std)r   r6   r7   c                  sj   |dkr!t t|}|| j fd|i|}t| j|d | jdS |dkr)tdt j	|fd|i|S )Ncumsumr   )rc   r|   cumprodz$cumprod not supported for Timedelta.)
getattrr)   r{   r   r   r   r|   	TypeErrorr   _accumulate)rF   r6   r   kwargsoprH   r   rJ   rK   r     s   
zTimedeltaArray._accumulateboxedc                 C  s   ddl m} || ddS )Nr   get_format_timedelta64Tr   )pandas.io.formats.formatr   )rF   r   r   rJ   rJ   rK   
_formatter  s   zTimedeltaArray._formatter)na_repdate_formatr   str | floatnpt.NDArray[np.object_]c                K  s,   ddl m} || j|}t|dd| jS )Nr   r   r   )r   r   r{   r   
frompyfunc)rF   r   r   r   r   	formatterrJ   rJ   rK   _format_native_types  s   z#TimedeltaArray._format_native_typesc                 C  s.   t |trJ tdt|j dt| j )Nzcannot add the type z to a )r   r
   r   r   rN   r   rJ   rJ   rK   _add_offset  s   zTimedeltaArray._add_offset__mul__c                   s   t r+| j }d }| jd ur ts | j }|jdkr d }t| j||j|dS tds5t	
tt| krHtjdsHtdtjrm| j  fddtt| D }t	
|}t| j||jdS | j }t| j||jdS )	Nr   r   r|   rU   z$Cannot multiply with unequal lengthsc                   s   g | ]
} | |  qS rJ   rJ   r   narrr   rJ   rK   
<listcomp>      z*TimedeltaArray.__mul__.<locals>.<listcomp>r|   )r"   r{   rc   r&   r  r   r   r|   hasattrr   arrayr   r   rV   r   r!   r   )rF   r   rH   rc   rJ   r  rK   r    s&   







zTimedeltaArray.__mul__c                 C  s   t || jr(t|}td|tu r"tj| jtjd}|	tj
 |S || j|S |tjtjfv r@tdt|j dt| j || j|}d}| jdur_| j| }|jdkr_| jjdkr_d}t| j||j|dS )zv
        Shared logic for __truediv__, __rtruediv__, __floordiv__, __rfloordiv__
        with scalar 'other'.
        rs   r  zCannot divide z by Nr   r   )r   _recognized_scalarsr   r   r   r   emptyshaper?   fillnanr{   r(   rtruediv	rfloordivr   r   rN   rc   nanosr   r|   )rF   r   r   resrH   rc   rJ   rJ   rK   _scalar_divlike_op  s$   

z!TimedeltaArray._scalar_divlike_opc                 C  s0   t |ds
t|}t|t| krtd|S )Nr|   z*Cannot divide vectors with unequal lengths)r	  r   r
  r   r   r   rJ   rJ   rK   _cast_divlike_op5  s
   

zTimedeltaArray._cast_divlike_opnp.ndarray | Selfc                 C  s   || j t|}t|jst|jr%|tjtjfv r%t	| j
||jdS |tjtjfv rG|  t|B }| rG|tj}t||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   maskrJ   rJ   rK   _vector_divlike_op>  s   z!TimedeltaArray._vector_divlike_op__truediv__c                 C  s   t j}t|r| ||S | |}t|jds#t|js#t	|jr)| 
||S t|jrZt|}| jdkrRdd t| |D }dd |D }tj|dd}|S t| j|}|S tS )NrU   r   c                 S  s   g | ]\}}|| qS rJ   rJ   r   leftrightrJ   rJ   rK   r  f      z.TimedeltaArray.__truediv__.<locals>.<listcomp>c                 S     g | ]}| d dqS r   r   reshaper   rJ   rJ   rK   r  g  r"  r   r   )r  r  r"   r  r  r   rV   r|   r    r   r  r!   r   r  r   zipconcatenater   r{   NotImplementedrF   r   r   res_cols	res_cols2rH   rJ   rJ   rK   r  T  s*   



zTimedeltaArray.__truediv____rtruediv__c                   sr   t j}t r |S   t jdr |S t	 jr7 fddt
tD }t|S tS )NrU   c                   s   g | ]
} | |  qS rJ   rJ   r  r   rF   rJ   rK   r    r  z/TimedeltaArray.__rtruediv__.<locals>.<listcomp>)r(   r  r"   r  r  r   rV   r|   r  r!   r   r   r   r
  r*  )rF   r   r   result_listrJ   r/  rK   r.  q  s   


zTimedeltaArray.__rtruediv____floordiv__c                 C  s   t j}t|r| ||S | |}t|jds#t|js#t	|jr)| 
||S t|jr`t|}| jdkrQdd t| |D }dd |D }tj|dd}nt| j|}|jtks^J |S tS )NrU   r   c                 S  s   g | ]\}}|| qS rJ   rJ   r  rJ   rJ   rK   r    r"  z/TimedeltaArray.__floordiv__.<locals>.<listcomp>c                 S  r#  r$  r%  r   rJ   rJ   rK   r    r"  r   r'  )r  r  r"   r  r  r   rV   r|   r    r   r  r!   r   r  r   r(  r)  r   r{   objectr*  r+  rJ   rJ   rK   r1    s*   



zTimedeltaArray.__floordiv____rfloordiv__c                   sv   t j}t r |S   t jdr |S t	 jr9 fddt
tD }t|}|S tS )NrU   c                   s   g | ]
} | |  qS rJ   rJ   r  r/  rJ   rK   r    r  z0TimedeltaArray.__rfloordiv__.<locals>.<listcomp>)r(   r  r"   r  r  r   rV   r|   r  r!   r   r   r   r
  r*  )rF   r   r   r0  rH   rJ   r/  rK   r3    s   


zTimedeltaArray.__rfloordiv____mod__c                 C  s$   t || jr
t|}| | | |  S r\   r   r  r   r   rJ   rJ   rK   r4       zTimedeltaArray.__mod____rmod__c                 C  s$   t || jr
t|}|||  |   S r\   r5  r   rJ   rJ   rK   r7    r6  zTimedeltaArray.__rmod__
__divmod__c                 C  s0   t || jr
t|}| | }| ||  }||fS r\   r5  rF   r   res1res2rJ   rJ   rK   r8    
   zTimedeltaArray.__divmod____rdivmod__c                 C  s0   t || jr
t|}||  }|||   }||fS r\   r5  r9  rJ   rJ   rK   r=    r<  zTimedeltaArray.__rdivmod__c                 C  s0   d }| j d ur| j  }t| j| j | j|dS )Nr   )rc   r   r   r{   r|   )rF   rc   rJ   rJ   rK   __neg__  s   
zTimedeltaArray.__neg__c                 C  s   t | | j | jdS )N)rc   )r   r{   r   rc   r^   rJ   rJ   rK   __pos__  s   zTimedeltaArray.__pos__c                 C  s   t | t| jS r\   )r   r   absr{   r^   rJ   rJ   rK   __abs__  s   zTimedeltaArray.__abs__npt.NDArray[np.float64]c                 C  s   t | j}| j| j| d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   ppsrJ   rJ   rK   rl     s   
6zTimedeltaArray.total_secondsc                 C  s
   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^   rJ   rJ   rK   rk      s   
zTimedeltaArray.to_pytimedeltaaC  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')re   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='U'))
    >>> 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='U')
    >>> 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')rf   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='N'))
    >>> 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='N')
    >>> 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')rg   r5   c                   s`   ddl m} g d | j}|r fddndd |fdd| 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   r4   )r<   hoursminutesre   millisecondsrf   rg   c                   s   t | rtjgt  S | jS r\   )r&   r   r  r   
componentsrW   columnsrJ   rK   rL     s   z$TimedeltaArray.components.<locals>.fc                 S  s   | j S r\   )rG  rW   rJ   rJ   rK   rL     s   c                   s   g | ]} |qS rJ   rJ   r   )rL   rJ   rK   r    s    z-TimedeltaArray.components.<locals>.<listcomp>rH  int64)pandasr5   rD   r   )rF   r5   hasnansrH   rJ   )rI  rL   rK   rG    s   	
zTimedeltaArray.components)r:   r[   )rX   rr   r:   rs   )r:   rz   )rG   r   rc   r   r|   rz   r:   r2   )r   r   r:   r2   r\   )ri   r   r:   r2   )r:   rr   )r:   rs   )r:   r   )T)r   r   )r:   r-   )
r   r   r|   r   r   r   r   r   r   r   )
r   r   r|   r   r   r   r   r   r   r   )r6   r7   r   r   )F)r   r   )r   r   r:   r   )r:   r2   )r:   r  )r:   rR   )r:   rB  )r:   r   )r:   r5   )OrN   
__module____qualname__rO   _typr   rZ   _internal_fill_valuer   r
   r  _is_recognized_dtype_infer_matchesrP   r_   __array_priority__ra   __annotations__rb   rd   rh   rj   rq   ry   r|   r   r   _default_dtypeclassmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r  __rmul__r  r  r  r  r.  r1  r3  r4  r7  r8  r=  r>  r?  rA  rl   rk   textwrapdedentdays_docstringrQ   r<   seconds_docstringre   microseconds_docstringrf   nanoseconds_docstringrg   rG  __classcell__rJ   rJ   r   rK   rR   k   s   
 %

.
0
	

!)
	






	

	



9rR   Fraiser   r   errorsr/   r:   tuple[np.ndarray, Tick | None]c                 C  s,  |dvsJ d}|durt |}tj| |dd\} }t| tr"| j}| jtks,t| jr6t	| ||d} d}nt
| jrIt| |d\} }|oG| }nt| jrt| jtr[| j}| j} nt| }t|pdd\}}t  td	d
t | tj}	W d   n1 sw   Y  | |	 }
|rt|
|}
t  td	d
t |	| |
| tj d} W d   n1 sw   Y  t| |< d}n4t| jdrt| j}t|st |}t!|}td| d}t"| |dd} d}n	t#d| j dtj$| |d} | 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ri   r`  Fr   rT   ignorez!invalid value encountered in casttimedelta64[ns]rU   r   r   r   dtype ' cannot be converted to timedelta64[ns]r   m8)&r   r   !ensure_arraylike_for_datetimeliker   rR   rc   r|   r2  r#   _objects_to_td64nsr    _ints_to_td64nsr   r%   _mask_datar   isnanr   warningscatch_warningsfilterwarningsRuntimeWarningr   rJ  rm   ru   r   r   rV   r   r   r   r   r   r   r
  kind)r   r   ri   r`  r   	copy_mader  rU   pbasefrac	data_unitnew_resonew_unit	new_dtyperJ   rJ   rK   r     sh   $






 
r   rT   ri   c                 C  sx   d}|dur|nd}| j tjkr| tj} d}|dkr3d| d}| |} t| td} d}| |fS | 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  re  )r|   r   rJ  r   ru   r   r   )r   ri   rt  	dtype_strrJ   rJ   rK   rk  _  s   

rk  c                 C  s*   t j| t jdd}t|||d}|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   rc  re  )r   r
  object_r   ru   )r   ri   r`  rG   rH   rJ   rJ   rK   rj    s   
rj  r0   c                 C  sX   t | } | tdkrd}t|t| tjr"| jdks"tt| s*td|  d| S )Nrh  zhPassing in 'timedelta' dtype with no precision is not allowed. Please pass in 'timedelta64[ns]' instead.rU   rf  rg  )r$   r   r|   r   r   rs  r   r   )r|   msgrJ   rJ   rK   r}     s   


r}   )r6   r7   r8   r7   r9   r7   )FNr_  )r   r   r`  r/   r:   ra  )rT   )ri   r7   )Nr_  )r`  r/   )r:   r0   )Z
__future__r   datetimer   r  typingr   r   ro  numpyr   pandas._libsr   r   pandas._libs.tslibsr   r	   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._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/   r0   r1   r2   r3   rK  r5   rX  rQ   TimelikeOpsrR   r   rk  rj  r}   rJ   rJ   rJ   rK   <module>   sV    8$	 	
       m($