a
    Of                     @  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
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>  m?Z@ d dlAmBZB erd dlCmDZD d dlEmFZFmGZGmHZHmIZImJZJmKZK d dlLmMZM d dlNZNddddddZOG dd de:jPZQd0dd d!d"d#d$ZRd1dd&d'd(ZSd2d d)d*d+ZTd,d-d.d/ZUdS )3    )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str)namealias	docstringc                   s.   dd fdd}| |_ d| d|_t|S )Nz
np.ndarrayreturnc                   sH   | j } dkrt|| jd}nt| | jd}| jrD| j|d dd}|S )NdaysZresofloat64)
fill_valueconvert)asi8r   _cresor   _hasna_maybe_mask_results)selfvaluesresultr5    V/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/core/arrays/timedeltas.pyfR   s    z_field_accessor.<locals>.f
)__name____doc__property)r4   r5   r6   rH   rF   rE   rG   _field_accessorQ   s    rM   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dd	d
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< dddddZedd	ddZd ZeZed!d" Zed efd#d$dd%d& fd'd(Zed d)d*d+d%d,d-d.Zed d)e j!d d/d+d%d,d0d1Z"edd d2d3d%d4d5d6Z#dd	d7d8Z$dd	d9d:Z%d;d	d<d=Z&dd+d?d@dAZ'dBd	dCdDZ(d d d d)d d>dEdFdGdHd+d+dIdJdKdLZ)d d d dMd)d>dNdGdHdId+d+dOdPdQZ*d>dRdSd+dT fdUdVZ+dd+dWdXdYZ,dd dZd[d\d]d^d_Z-d`da Z.e/dbd%d	dcddZ0e0Z1dedf Z2dgdh Z3did	djdkZ4e/dldmdn Z5e/dodpdq Z6e/drdsdt Z7e/dudvdw Z8e/dxdydz Z9e/d{d|d} Z:e/d~dd Z;e/ddd Z<d d	ddZ=d d	ddZ>d d	ddZ?dd	ddZ@d\d	ddZAeBCdZDeEddeDZFeBCdZGeEddeGZHeBCdZIeEddeIZJeBCdZKeEddeKZLedd	ddZM  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]
    Ztimedeltaarrayr   nsc                 C  s   t | dS )Nm)r   is_np_dtypexrF   rF   rG   <lambda>       zTimedeltaArray.<lambda>)r   timedelta64ztype[Timedelta]r7   c                 C  s   t S Nr   rB   rF   rF   rG   _scalar_type   s    zTimedeltaArray._scalar_typei  z	list[str]
_other_ops	_bool_opsfreq_object_ops)r9   secondsmicrosecondsnanoseconds
_field_opsunit_datetimelike_ops)to_pytimedeltatotal_secondsroundfloorceilas_unit_datetimelike_methodsznp.timedelta64Timedelta | NaTType)rS   r8   c                 C  s(   | d}|tjkrtS tj|| jdS )Ni8r:   )viewr   _valuer   Z_from_value_and_resor?   )rB   rS   yrF   rF   rG   	_box_func   s    

zTimedeltaArray._box_funcz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dtyperY   rF   rF   rG   rs      s    zTimedeltaArray.dtypeNc                 C  s(   t |}t |j ||jkr$td|S )Nz'Values resolution does not match dtype.)_validate_td64_dtypers   
ValueError)clsrC   rs   rF   rF   rG   _validate_dtype   s
    

zTimedeltaArray._validate_dtypeznpt.NDArray[np.timedelta64]zTick | Noner/   )rC   r]   rs   r8   c                   st   t |dsJ t|rJ t|tjs6J t|||jksDJ |d u sZt|t	sZJ t
 j||d}||_|S )NrP   )rC   rs   )r   rQ   r   Zis_unitless
isinstancenpZndarraytypers   r
   super_simple_new_freq)rv   rC   r]   rs   rD   	__class__rF   rG   r|      s    zTimedeltaArray._simple_newFrs   copybool)r   r8   c                C  sF   |rt |}t||d d\}}|d ur4t||dd}| j||j|dS )Nr   rc   Fr   rs   r]   )rt   sequence_to_td64nsr   r|   rs   )rv   datars   r   r]   rF   rF   rG   _from_sequence   s    zTimedeltaArray._from_sequence)rs   r   r]   rc   c                C  sb   |rt |}|dvsJ t|||d\}}|dur@t||dd}| j||j|d}||i  |S )zo
        _from_sequence_not_strict but without responsibility for finding the
        result's `freq`.
        Yrp   Mr   NFr   r   )rt   r   r   r|   rs   Z_maybe_pin_freq)rv   r   rs   r   r]   rc   inferred_freqrD   rF   rF   rG   _from_sequence_not_strict   s    z(TimedeltaArray._from_sequence_not_strictrc   z
str | None)rc   r8   c                C  s\  t |}|d u r2tdd |||fD r2tdt||||dkrNtd|d urdt|d}|d urzt|d}|d ur|dvrtdnd}|d ur|d ur|j|d	d
}|d ur|d ur|j|d	d
}t|\}}|d urt	|||||d}	nt
|j|j|d}	|s&|	dd  }	|s8|	d d }	|	d| d}
| j|
|
j|dS )Nc                 s  s   | ]}|d u V  qd S rW   rF   .0rS   rF   rF   rG   	<genexpr>  rU   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 specifiedrO   )smsusrO   z+'unit' must be one of 's', 'ms', 'us', 'ns'F)Zround_okr   rm      zm8[]r   )dtlZvalidate_periodsanyru   comZcount_not_noner   rj   r   r(   ry   Zlinspacero   astypern   r|   rs   )rv   startendZperiodsr]   closedrc   Zleft_closedZright_closedindexZ
td64valuesrF   rF   rG   _generate_range  s:    
 
zTimedeltaArray._generate_rangec                 C  sP   t || js|turtd| | |tu r>t|j| jS |	| jj
S d S )Nz'value' should be a Timedelta.)rx   rZ   r   ru   _check_compatible_withry   rV   ro   rc   rj   Zasm8rB   valuerF   rF   rG   _unbox_scalar?  s    
zTimedeltaArray._unbox_scalarc                 C  s   t |S rW   rX   r   rF   rF   rG   _scalar_from_stringH  s    z"TimedeltaArray._scalar_from_stringNonec                 C  s   d S rW   rF   rB   otherrF   rF   rG   r   K  s    z%TimedeltaArray._check_compatible_withTr   c                 C  s   t |}t|drv|| jkr.|r*|  S | S t|r^t| j|dd}t| j	||j| j
dS td| j d| dtjj| ||dS )NrP   Fr   r   zCannot convert from z to z1. Supported resolutions are 's', 'ms', 'us', 'ns')r!   r   rQ   rs   r   r   r   rr   rz   r|   r]   ru   r   ZDatetimeLikeArrayMixinr   )rB   rs   r   Z
res_valuesrF   rF   rG   r   R  s    

zTimedeltaArray.astyper*   c           	      c  s   | j dkr(tt| D ]}| | V  qnd| j}t| }d}|| d }t|D ]<}|| }t|d | |}t||| dd}|E d H  qNd S )Nr   i'  Tbox)ndimrangelenrr   minr   )	rB   ir   length	chunksizechunksZstart_iZend_iZ	convertedrF   rF   rG   __iter__m  s    
zTimedeltaArray.__iter__r   )axisrs   outkeepdimsinitialskipna	min_countzAxisInt | NonezNpDtype | Noneint)r   rs   r   r   r   c          	      C  s6   t d||||d tj| j|||d}| ||S )NrF   )rs   r   r   r   )r   r   r   )nvZvalidate_sumr$   Znansumrr   Z_wrap_reduction_result)	rB   r   rs   r   r   r   r   r   rD   rF   rF   rG   sum  s    
zTimedeltaArray.sumr   )r   rs   r   ddofr   r   )r   rs   r   r   r   c                C  sR   t jd|||ddd tj| j|||d}|d u s>| jdkrH| |S | |S )NrF   )rs   r   r   std)fname)r   r   r   r   )r   Zvalidate_stat_ddof_funcr$   Znanstdrr   r   rq   Z_from_backing_data)rB   r   rs   r   r   r   r   rD   rF   rF   rG   r     s    

zTimedeltaArray.std)r   r3   )r4   r   c                  sp   |dkrBt t|}|| j fd|i|}t| j|d | jdS |dkrTtdnt j	|fd|i|S d S )NZcumsumr   )r]   rs   Zcumprodz$cumprod not supported for Timedelta.)
getattrr&   rr   r   rz   r|   rs   	TypeErrorr{   _accumulate)rB   r4   r   kwargsoprD   r~   rF   rG   r     s    

zTimedeltaArray._accumulate)boxedc                 C  s   ddl m} || ddS )Nr   get_format_timedelta64Tr   )pandas.io.formats.formatr   )rB   r   r   rF   rF   rG   
_formatter  s    zTimedeltaArray._formatter)na_repdate_formatzstr | floatznpt.NDArray[np.object_])r   r8   c                K  s*   ddl m} || |}t|dd| jS )Nr   r   r   )r   r   ry   Z
frompyfuncrr   )rB   r   r   r   r   	formatterrF   rF   rG   _format_native_types  s    
z#TimedeltaArray._format_native_typesc                 C  s2   t |trJ tdt|j dt| j d S )Nzcannot add the type z to a )rx   r
   r   rz   rJ   r   rF   rF   rG   _add_offset  s    zTimedeltaArray._add_offset__mul__c                   s   t rV| j }d }| jd ur@ts@| j }|jdkr@d }t| j||j|dS tdsjt	
tt| krtjdstdtjr| j  fddtt| D }t	
|}t| j||jdS | j }t| j||jdS )	Nr   r   rs   rP   z$Cannot multiply with unequal lengthsc                   s   g | ]} | |  qS rF   rF   r   nZarrr   rF   rG   
<listcomp>  rU   z*TimedeltaArray.__mul__.<locals>.<listcomp>rs   )r   rr   r]   r#   r   rz   r|   rs   hasattrry   arrayr   r   rQ   ru   r   r   )rB   r   rD   r]   rF   r   rG   r     s&    







zTimedeltaArray.__mul__c                 C  s   t || jrPt|}td|tu rDtj| jtjd}|	tj
 |S || j|S |tjtjfv rtdt|j dt| j || j|}d}| jdur| j| }|jdkr| jjdkrd}t| j||j|dS dS )zv
        Shared logic for __truediv__, __rtruediv__, __floordiv__, __rfloordiv__
        with scalar 'other'.
        rl   r   zCannot divide z by Nr   r   )rx   _recognized_scalarsr   r   r   ry   emptyshaper;   fillnanrr   r%   rtruediv	rfloordivr   rz   rJ   r]   Znanosr|   rs   )rB   r   r   resrD   r]   rF   rF   rG   _scalar_divlike_op  s$    

z!TimedeltaArray._scalar_divlike_opc                 C  s0   t |dst|}t|t| kr,td|S )Nrs   z*Cannot divide vectors with unequal lengths)r   ry   r   r   ru   r   rF   rF   rG   _cast_divlike_op  s
    

zTimedeltaArray._cast_divlike_opznp.ndarray | Selfc                 C  s   || j t|}t|js&t|jrJ|tjtjfv rJt	| j
||jdS |tjtjfv r|  t|B }| r|tj}t||tj |S )z
        Shared logic for __truediv__, __floordiv__, and their reversed versions
        with timedelta64-dtype ndarray other.
        r   )rr   ry   asarrayr   rs   r   operatortruedivfloordivrz   r|   r%   r   r#   r   r   r;   Zputmaskr   )rB   r   r   rD   maskrF   rF   rG   _vector_divlike_op(  s    z!TimedeltaArray._vector_divlike_op__truediv__c                 C  s   t j}t|r| ||S | |}t|jdsFt|jsFt	|jrR| 
||S t|jrt|}| jdkrdd t| |D }dd |D }tj|dd}nt| j|}|S tS d S )NrP   r   c                 S  s   g | ]\}}|| qS rF   rF   r   leftrightrF   rF   rG   r   P  rU   z.TimedeltaArray.__truediv__.<locals>.<listcomp>c                 S  s   g | ]}| d dqS r   r   Zreshaper   rF   rF   rG   r   Q  rU   r   r   )r   r   r   r   r   r   rQ   rs   r   r   r   r   ry   r   r   zipconcatenater   rr   NotImplementedrB   r   r   Zres_colsZ	res_cols2rD   rF   rF   rG   r   >  s(    



zTimedeltaArray.__truediv____rtruediv__c                   sv   t j}t r |S   t jdr> |S t	 jrn fddt
tD }t|S tS d S )NrP   c                   s   g | ]} | |  qS rF   rF   r   r   rB   rF   rG   r   j  rU   z/TimedeltaArray.__rtruediv__.<locals>.<listcomp>)r%   r   r   r   r   r   rQ   rs   r   r   r   r   ry   r   r   )rB   r   r   result_listrF   r   rG   r   [  s    


zTimedeltaArray.__rtruediv____floordiv__c                 C  s   t j}t|r| ||S | |}t|jdsFt|jsFt	|jrR| 
||S t|jrt|}| jdkrdd t| |D }dd |D }tj|dd}nt| j|}|jtksJ |S tS d S )NrP   r   c                 S  s   g | ]\}}|| qS rF   rF   r   rF   rF   rG   r     rU   z/TimedeltaArray.__floordiv__.<locals>.<listcomp>c                 S  s   g | ]}| d dqS r   r   r   rF   rF   rG   r     rU   r   r   )r   r   r   r   r   r   rQ   rs   r   r   r   r   ry   r   r   r   r   r   rr   objectr   r   rF   rF   rG   r   p  s*    



zTimedeltaArray.__floordiv____rfloordiv__c                   sz   t j}t r |S   t jdr> |S t	 jrr fddt
tD }t|}|S tS d S )NrP   c                   s   g | ]} | |  qS rF   rF   r   r   rF   rG   r     rU   z0TimedeltaArray.__rfloordiv__.<locals>.<listcomp>)r%   r   r   r   r   r   rQ   rs   r   r   r   r   ry   r   r   )rB   r   r   r   rD   rF   r   rG   r     s    


zTimedeltaArray.__rfloordiv____mod__c                 C  s$   t || jrt|}| | | |  S rW   rx   r   r   r   rF   rF   rG   r     s    zTimedeltaArray.__mod____rmod__c                 C  s$   t || jrt|}|||  |   S rW   r   r   rF   rF   rG   r     s    zTimedeltaArray.__rmod__
__divmod__c                 C  s0   t || jrt|}| | }| ||  }||fS rW   r   rB   r   Zres1Zres2rF   rF   rG   r     s
    zTimedeltaArray.__divmod____rdivmod__c                 C  s0   t || jrt|}||  }|||   }||fS rW   r   r   rF   rF   rG   r     s
    zTimedeltaArray.__rdivmod__c                 C  s0   d }| j d ur| j  }t| j| j | j|dS Nr   )r]   rz   r|   rr   rs   )rB   r]   rF   rF   rG   __neg__  s    
zTimedeltaArray.__neg__c                 C  s   t | j| j | j| jdS r   )rz   r|   rr   r   rs   r]   rY   rF   rF   rG   __pos__  s    zTimedeltaArray.__pos__c                 C  s   t | jt| j| jdS )Nr   )rz   r|   ry   absrr   rs   rY   rF   rF   rG   __abs__  s    zTimedeltaArray.__abs__z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   r?   rA   r>   )rB   ZppsrF   rF   rG   rf     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   rr   rY   rF   rF   rG   re     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')r9   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')r_   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')r`   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')ra   r2   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   r1   )r9   hoursminutesr_   Zmillisecondsr`   ra   c                   s   t | rtjgt  S | jS rW   )r#   ry   r   r   
componentsrR   columnsrF   rG   rH     s    z$TimedeltaArray.components.<locals>.fc                 S  s   | j S rW   )r  rR   rF   rF   rG   rH     s    c                   s   g | ]} |qS rF   rF   r   )rH   rF   rG   r     rU   z-TimedeltaArray.components.<locals>.<listcomp>r  int64)pandasr2   r@   r   )rB   r2   ZhasnansrD   rF   )r  rH   rG   r    s    	
zTimedeltaArray.components)N)T)F)OrJ   
__module____qualname__rK   Z_typry   rV   Z_internal_fill_valuer   r
   r   Z_is_recognized_dtypeZ_infer_matchesrL   rZ   Z__array_priority__r[   __annotations__r\   r^   rb   rd   rk   rq   rs   r}   r   Z_default_dtypeclassmethodrw   r|   r   r   Z
no_defaultr   r   r   r   r   r   r   r   r   r   r   r   r   r)   r   __rmul__r   r   r   r   r   r   r   r   r   r   r   r   r  r  rf   re   textwrapdedentZdays_docstringrM   r9   Zseconds_docstringr_   Zmicroseconds_docstringr`   Znanoseconds_docstringra   r  __classcell__rF   rF   r~   rG   rN   g   s   
%
	 0	!)	






	
	9rN   Fraiser   r,   ztuple[np.ndarray, Tick | None])r   errorsr8   c                 C  s|  |dvsJ d}|dur t |}tj| |dd\} }t| trD| j}| jtksXt| jrlt	| ||d} d}nt
| jrt| |d\} }|o| }nt| jrt| jtr| j}| j} n
t| }t| |pd} t| |< | d	} d}nLt| jd
r t| js2t| j}t| |dd} d}ntd| j d|sDt| } ntj| |d} | jjd
ksdJ | jdkstJ | |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   NrN   )cls_namerc   r  Fr   rO   zm8[ns]rP   r   zdtype z' cannot be converted to timedelta64[ns]r   m8)r   r   Z!ensure_arraylike_for_datetimelikerx   rN   r]   rs   r   r    _objects_to_td64nsr   _ints_to_td64nsr   r"   Z_mask_datary   isnanr   r   rn   r   rQ   r   r   r   r   r   r   kind)r   r   rc   r  r   	copy_mader   Z	new_dtyperF   rF   rG   r     sH    $






r   rO   r   c                 C  sr   d}|dur|nd}| j tjkr0| tj} d}|dkr`d| d}| |} t| td} 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
    FNrO   Tztimedelta64[r   r   timedelta64[ns])rs   ry   r	  r   rn   r   r   )r   rc   r  Z	dtype_strrF   rF   rG   r  >  s    

r  )r  c                 C  s(   t j| t j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.
    r   r  r  )ry   r   Zobject_r   rn   )r   rc   r  rC   rD   rF   rF   rG   r  f  s    r  r-   r7   c                 C  sT   t | } | tdkr"d}t|t| ds@td|  dnt| sPtd| S )Nr  zhPassing in 'timedelta' dtype with no precision is not allowed. Please pass in 'timedelta64[ns]' instead.rP   zdtype 'z,' is invalid, should be np.timedelta64 dtypez;Supported timedelta64 resolutions are 's', 'ms', 'us', 'ns')r!   ry   rs   ru   r   rQ   r   )rs   msgrF   rF   rG   rt     s    rt   )FNr  )rO   )Nr  )V
__future__r   datetimer   r   typingr   r   numpyry   Zpandas._libsr   r   Zpandas._libs.tslibsr   r	   r
   r   r   r   r   r   r   Zpandas._libs.tslibs.conversionr   Zpandas._libs.tslibs.fieldsr   r   Zpandas._libs.tslibs.timedeltasr   r   r   r   r   Zpandas.compat.numpyr   r   Zpandas.util._validatorsr   Zpandas.core.dtypes.commonr   r   r   r   r   r    r!   Zpandas.core.dtypes.dtypesr"   Zpandas.core.dtypes.missingr#   Zpandas.corer$   r%   Zpandas.core.array_algosr&   Zpandas.core.arraysr'   r   Zpandas.core.arrays._rangesr(   Zpandas.core.commoncorecommonr   Zpandas.core.ops.commonr)   collections.abcr*   Zpandas._typingr+   r,   r-   r.   r/   r0   r
  r2   r  rM   ZTimelikeOpsrN   r   r  r  rt   rF   rF   rF   rG   <module>   sR   ,$	 	           `($