o
    ŀgƓ                     @  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lNZNd2ddZOG dd de:jPZQ			 d3d4d'd(ZRd5d6d+d,ZSd7d8d-d.ZTd9d0d1ZUdS ):    )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                   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r5    Q/var/www/html/myenv/lib/python3.10/site-packages/pandas/core/arrays/timedeltas.pyfR   s   z_field_accessor.<locals>.f
)r7   r8   )__name____doc__property)r3   r5   r6   rI   rG   rF   rH   _field_accessorQ   s   rN   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 )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                 C  s   t | dS )Nm)r   is_np_dtypexrG   rG   rH   <lambda>   s    zTimedeltaArray.<lambda>)r   timedelta64r7   type[Timedelta]c                 C  s   t S Nr   rC   rG   rG   rH   _scalar_type      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_methodsrU   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_resor@   )rC   rU   yrG   rG   rH   	_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[   rG   rG   rH   ry      s   zTimedeltaArray.dtypeNc                 C  s(   t |}t |j ||jkrtd|S )Nz'Values resolution does not match dtype.)_validate_td64_dtypery   
ValueError)clsrD   ry   rG   rG   rH   _validate_dtype   s
   

zTimedeltaArray._validate_dtyperD   npt.NDArray[np.timedelta64]Tick | Nonery   r/   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 )NrR   )rD   ry   )r   rS   r   is_unitless
isinstancenpndarraytypery   r
   super_simple_new_freq)r|   rD   r`   ry   rE   	__class__rG   rH   r      s   zTimedeltaArray._simple_newFry   copyr   boolc                C  sF   |rt |}t||d d\}}|d urt||dd}| j||j|dS )Nr   rf   Fr   ry   r`   )rz   sequence_to_td64nsr   r   ry   )r|   datary   r   r`   rG   rG   rH   _from_sequence   s   zTimedeltaArray._from_sequence)ry   r   r`   rf   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`.
        Yru   Mr   NFr   r   )rz   r   r   r   ry   _maybe_pin_freq)r|   r   ry   r   r`   rf   inferred_freqrE   rG   rG   rH   _from_sequence_not_strict   s   z(TimedeltaArray._from_sequence_not_strictrf   
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 rY   rG   .0rU   rG   rG   rH   	<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 specifiedrQ   )smsusrQ   z+'unit' must be one of 's', 'ms', 'us', 'ns'F)round_okr   rq      zm8[]r   )dtlvalidate_periodsanyr{   comcount_not_noner   rm   r   r(   r   linspacers   astyperr   r   ry   )r|   startendperiodsr`   closedrf   left_closedright_closedindex
td64valuesrG   rG   rH   _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   rW   rs   rf   rm   asm8rC   valuerG   rG   rH   _unbox_scalar?  s   
zTimedeltaArray._unbox_scalarc                 C  s   t |S rY   rZ   r   rG   rG   rH   _scalar_from_stringH  s   z"TimedeltaArray._scalar_from_stringNonec                 C  s   d S rY   rG   rC   otherrG   rG   rH   r   K  r]   z%TimedeltaArray._check_compatible_withTc                 C  s   t |}t|dr;|| 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 )NrR   Fr   r   zCannot convert from z to z1. Supported resolutions are 's', 'ms', 'us', 'ns')r!   r   rS   ry   r   r   r   rx   r   r   r`   r{   r   DatetimeLikeArrayMixinr   )rC   ry   r   
res_valuesrG   rG   rH   r   R  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lenrx   minr   )	rC   ir   length	chunksizechunksstart_iend_i	convertedrG   rG   rH   __iter__m  s   
zTimedeltaArray.__iter__r   )axisry   outkeepdimsinitialskipna	min_countr   AxisInt | NoneNpDtype | Noner   r   r   intc          	      C  s6   t d||||d tj| j|||d}| ||S )NrG   )ry   r   r   r   )r   r   r   )nvvalidate_sumr$   nansumrx   _wrap_reduction_result)	rC   r   ry   r   r   r   r   r   rE   rG   rG   rH   sum  s   
zTimedeltaArray.sumr   )r   ry   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 )NrG   )ry   r   r   std)fname)r   r   r   r   )r   validate_stat_ddof_funcr$   nanstdrx   r   rv   _from_backing_data)rC   r   ry   r   r   r   r   rE   rG   rG   rH   r     s   


zTimedeltaArray.std)r   r3   r4   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   )r`   ry   cumprodz$cumprod not supported for Timedelta.)
getattrr&   rx   r   r   r   ry   	TypeErrorr   _accumulate)rC   r3   r   kwargsoprE   r   rG   rH   r     s   
zTimedeltaArray._accumulateboxedc                 C  s   ddl m} || ddS )Nr   get_format_timedelta64Tr   )pandas.io.formats.formatr   )rC   r   r   rG   rG   rH   
_formatter  s   zTimedeltaArray._formatter)na_repdate_formatr   str | floatnpt.NDArray[np.object_]c                K  s*   ddl m} || |}t|dd| jS )Nr   r   r   )r   r   r   
frompyfuncrx   )rC   r   r   r   r   	formatterrG   rG   rH   _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   rK   r   rG   rG   rH   _add_offset  s   zTimedeltaArray._add_offset__mul__c                   s8  t r;| j }|jjdkrtdtj d }| jd ur0ts0| j }|j	dkr0d }t| j
||j|dS tdsEttt| krXtjdsXtdtjr}| j  fddtt| D }t|}t| j
||jd	S | j }|jjdkrtdtj t| j
||jd	S )
NrR   zCannot multiply with r   r   ry   z$Cannot multiply with unequal lengthsc                   s   g | ]
} | |  qS rG   rG   r   narrr   rG   rH   
<listcomp>      z*TimedeltaArray.__mul__.<locals>.<listcomp>ry   )r   rx   ry   kindr   r   rK   r`   r#   r   r   hasattrr   arrayr   r   rS   r{   r   r   )rC   r   rE   r`   rG   r   rH   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'.
        rp   r   zCannot divide z by Nr   r   )r   _recognized_scalarsr   r   r   r   emptyshaper<   fillnanrx   r%   rtruediv	rfloordivr   r   rK   r`   nanosr   ry   )rC   r   r   resrE   r`   rG   rG   rH   _scalar_divlike_op  s$   

z!TimedeltaArray._scalar_divlike_opc                 C  s0   t |ds
t|}t|t| krtd|S )Nry   z*Cannot divide vectors with unequal lengths)r   r   r  r   r{   r   rG   rG   rH   _cast_divlike_op'  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   )rx   r   asarrayr   ry   r   operatortruedivfloordivr   r   r%   r  r#   r   r   r<   putmaskr  )rC   r   r   rE   maskrG   rG   rH   _vector_divlike_op0  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 )NrR   r   c                 S  s   g | ]\}}|| qS rG   rG   r   leftrightrG   rG   rH   r   X      z.TimedeltaArray.__truediv__.<locals>.<listcomp>c                 S     g | ]}| d dqS r   r   reshaper   rG   rG   rH   r   Y  r  r   r   )r  r  r   r  r  r   rS   ry   r   r   r  r   r   r  r   zipconcatenater   rx   NotImplementedrC   r   r   res_cols	res_cols2rE   rG   rG   rH   r  F  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 )NrR   c                   s   g | ]
} | |  qS rG   rG   r   r   rC   rG   rH   r   r  r   z/TimedeltaArray.__rtruediv__.<locals>.<listcomp>)r%   r  r   r  r  r   rS   ry   r  r   r   r   r   r  r!  )rC   r   r   result_listrG   r&  rH   r%  c  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 )NrR   r   c                 S  s   g | ]\}}|| qS rG   rG   r  rG   rG   rH   r     r  z/TimedeltaArray.__floordiv__.<locals>.<listcomp>c                 S  r  r  r  r   rG   rG   rH   r     r  r   r  )r  r  r   r  r  r   rS   ry   r   r   r  r   r   r  r   r  r   r   rx   objectr!  r"  rG   rG   rH   r(  x  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 )NrR   c                   s   g | ]
} | |  qS rG   rG   r   r&  rG   rH   r     r   z0TimedeltaArray.__rfloordiv__.<locals>.<listcomp>)r%   r  r   r  r  r   rS   ry   r  r   r   r   r   r  r!  )rC   r   r   r'  rE   rG   r&  rH   r*    s   


zTimedeltaArray.__rfloordiv____mod__c                 C  s$   t || jr
t|}| | | |  S rY   r   r  r   r   rG   rG   rH   r+       zTimedeltaArray.__mod____rmod__c                 C  s$   t || jr
t|}|||  |   S rY   r,  r   rG   rG   rH   r.    r-  zTimedeltaArray.__rmod__
__divmod__c                 C  s0   t || jr
t|}| | }| ||  }||fS rY   r,  rC   r   res1res2rG   rG   rH   r/    
   zTimedeltaArray.__divmod____rdivmod__c                 C  s0   t || jr
t|}||  }|||   }||fS rY   r,  r0  rG   rG   rH   r4    r3  zTimedeltaArray.__rdivmod__c                 C  s0   d }| j d ur| j  }t| j| j | j|dS Nr   )r`   r   r   rx   ry   )rC   r`   rG   rG   rH   __neg__  s   
zTimedeltaArray.__neg__c                 C  s   t | j| j | j| jdS r5  )r   r   rx   r   ry   r`   r[   rG   rG   rH   __pos__  s   zTimedeltaArray.__pos__c                 C  s   t | jt| j| jdS )Nr   )r   r   r   absrx   ry   r[   rG   rG   rH   __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   r@   rB   r?   )rC   ppsrG   rG   rH   ri     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   rx   r[   rG   rG   rH   rh     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')rb   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')rc   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')rd   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minutesrb   millisecondsrc   rd   c                   s   t | rtjgt  S | jS rY   )r#   r   r  r   
componentsrT   columnsrG   rH   rI     s   z$TimedeltaArray.components.<locals>.fc                 S  s   | j S rY   )r?  rT   rG   rG   rH   rI     s   c                   s   g | ]} |qS rG   rG   r   )rI   rG   rH   r     s    z-TimedeltaArray.components.<locals>.<listcomp>r@  int64)pandasr2   rA   r   )rC   r2   hasnansrE   rG   )rA  rI   rH   r?    s   	
zTimedeltaArray.components)r7   rX   )rU   ro   r7   rp   )r7   rw   )rD   r~   r`   r   ry   rw   r7   r/   )r   r   r7   r/   rY   )rf   r   r7   r/   )r7   ro   )r7   rp   )r7   r   )T)r   r   )r7   r*   )
r   r   ry   r   r   r   r   r   r   r   )
r   r   ry   r   r   r   r   r   r   r   )r3   r4   r   r   )F)r   r   )r   r   r7   r   )r7   r/   )r7   r  )r7   rO   )r7   r:  )r7   r   )r7   r2   )OrK   
__module____qualname__rL   _typr   rW   _internal_fill_valuer   r
   r  _is_recognized_dtype_infer_matchesrM   r\   __array_priority__r^   __annotations__r_   ra   re   rg   rn   rv   ry   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%  r(  r*  r+  r.  r/  r4  r6  r7  r9  ri   rh   textwrapdedentdays_docstringrN   r9   seconds_docstringrb   microseconds_docstringrc   nanoseconds_docstringrd   r?  __classcell__rG   rG   r   rH   rO   g   s   
 %

	
0
	

))
	






	

	



9rO   Fraiser   r   errorsr,   r7   tuple[np.ndarray, Tick | None]c                 C  sr  |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}nat
| jrIt| |d\} }|oG| }nNt| jrst| jtr[| j}| j} nt| }t| |ped} t| |< | d	} d}n$t| jd
rt| jst| j}t| |dd} d}n	td| j d|st| } ntj| |d} | jjd
ksJ | jdksJ | |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   NrO   )cls_namerf   rY  Fr   rQ   zm8[ns]rR   r   zdtype z' cannot be converted to timedelta64[ns]r   m8)r   r   !ensure_arraylike_for_datetimeliker   rO   r`   ry   r)  r    _objects_to_td64nsr   _ints_to_td64nsr   r"   _mask_datar   isnanr   r   rr   r   rS   r   r   r   r   r  r  r   )r   r   rf   rY  r   	copy_mader  	new_dtyperG   rG   rH   r     sJ   $







r   rQ   rf   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
    FNrQ   Tztimedelta64[r   r   timedelta64[ns])ry   r   rB  r   rr   r   r   )r   rf   rd  	dtype_strrG   rG   rH   r`  F  s   

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\  rf  )r   r  object_r   rr   )r   rf   rY  rD   rE   rG   rG   rH   r_  n  s   
r_  r-   c                 C  sR   t | } | tdkrd}t|t| 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.rR   zdtype 'z,' is invalid, should be np.timedelta64 dtypez;Supported timedelta64 resolutions are 's', 'ms', 'us', 'ns')r!   r   ry   r{   r   rS   r   )ry   msgrG   rG   rH   rz     s   rz   )r3   r4   r5   r4   r6   r4   )FNrX  )r   r   rY  r,   r7   rZ  )rQ   )rf   r4   )NrX  )rY  r,   )r7   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.   r/   r0   rC  r2   rQ  rN   TimelikeOpsrO   r   r`  r_  rz   rG   rG   rG   rH   <module>   sT    ,$	 	
       `($