
    Eg*                    t   d Z ddlmZ ddlmZ ddlZddlmZm	Z	 ddl
mZmZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmc mZ ddlmZmZ ddl m!Z! ddl"m#Z# erddl$m%Z%  e#g dej&        z   ed           e#g de           G d de!                                  Z'	 	 	 	 	 	 dddddZ(dS )z implement the TimedeltaIndex     )annotations)TYPE_CHECKINGN)indexlib)
Resolution	Timedelta	to_offset)disallow_ambiguous_unit)find_stack_level)	is_scalarpandas_dtype)	ABCSeries)TimedeltaArray)Indexmaybe_extract_name)DatetimeTimedeltaMixin)inherit_names)DtypeObj)__neg____pos____abs__total_secondsroundfloorceilT)wrap)
componentsto_pytimedeltasumstdmedianc                      e Zd ZU dZdZeZedd            Zde	d<   e
j        Zedd	            Zd
ej        ej        ej        d
dd
fddZddZd ZddZddZed d            Zd
S )!TimedeltaIndexal  
    Immutable Index of timedelta64 data.

    Represented internally as int64, and scalars returned Timedelta objects.

    Parameters
    ----------
    data : array-like (1-dimensional), optional
        Optional timedelta-like data to construct index with.
    unit : {'D', 'h', 'm', 's', 'ms', 'us', 'ns'}, optional
        The unit of ``data``.

        .. deprecated:: 2.2.0
         Use ``pd.to_timedelta`` instead.

    freq : str or pandas offset object, optional
        One of pandas date offset strings or corresponding objects. The string
        ``'infer'`` can be passed in order to set the frequency of the index as
        the inferred frequency upon creation.
    dtype : numpy.dtype or str, default None
        Valid ``numpy`` dtypes are ``timedelta64[ns]``, ``timedelta64[us]``,
        ``timedelta64[ms]``, and ``timedelta64[s]``.
    copy : bool
        Make a copy of input array.
    name : object
        Name to be stored in the index.

    Attributes
    ----------
    days
    seconds
    microseconds
    nanoseconds
    components
    inferred_freq

    Methods
    -------
    to_pytimedelta
    to_series
    round
    floor
    ceil
    to_frame
    mean

    See Also
    --------
    Index : The base pandas Index type.
    Timedelta : Represents a duration between two dates or times.
    DatetimeIndex : Index of datetime64 data.
    PeriodIndex : Index of Period data.
    timedelta_range : Create a fixed-frequency TimedeltaIndex.

    Notes
    -----
    To learn more about the frequency strings, please see `this link
    <https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases>`__.

    Examples
    --------
    >>> pd.TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days'])
    TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days'],
                   dtype='timedelta64[ns]', freq=None)

    We can also let pandas infer the frequency when possible.

    >>> pd.TimedeltaIndex(np.arange(5) * 24 * 3600 * 1e9, freq='infer')
    TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days'],
                   dtype='timedelta64[ns]', freq='D')
    timedeltaindexreturntype[libindex.TimedeltaEngine]c                    t           j        S N)libindexTimedeltaEngineselfs    S/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/core/indexes/timedeltas.py_engine_typezTimedeltaIndex._engine_type   s    ''    r   _dataResolution | Nonec                    | j         j        S r(   )r0   _resolution_objr+   s    r-   r3   zTimedeltaIndex._resolution_obj   s    z))r/   NFcopyboolc                   |t           j        ur1t          j        d| j         dt
          t                                 |t           j        ur2t          j        d| j         dt
          t                                 nd }t          |||           }t          |          r| 	                    |           t          |           |t          |          }t          |t                    rH|t           j        u r:|||j        k    r-|r|                                }|                     ||          S t          |t"                    rG|t           j        u r9|7|||j        k    r*|r|                                S |                                S t          j        |||||          }d }	|s#t          |t(          t*          f          r|j        }	|                     |||	          S )	NzThe 'closed' keyword in zD construction is deprecated and will be removed in a future version.)
stacklevelzThe 'unit' keyword in za construction is deprecated and will be removed in a future version. Use pd.to_timedelta instead.name)frequnitdtyper4   )r9   refs)r   
no_defaultwarningswarn__name__FutureWarningr   r   r   _raise_scalar_data_errorr
   r   
isinstancer   r<   r4   _simple_newr#   _view_from_sequence_not_strictr   r   _references)
clsdatar;   r:   closedr<   r4   r9   tdarrr=   s
             r-   __new__zTimedeltaIndex.__new__   s!    ''MF3< F F F+--	    s~%%M/ / / / +--     D!$c22T?? 	/((...%%% ''E t^,,	4&&%4:"5"5 #yy{{??4d?333 t^,,		$&&%4:"5"5 $yy{{"zz||# 8t$e$
 
 
  	$
4)U);<< 	$#Du4d;;;r/   r<   r   c                ,    t          j        |d          S )zF
        Can we compare values of the given dtype to our own?
        m)r   is_np_dtype)r,   r<   s     r-   _is_comparable_dtypez#TimedeltaIndex._is_comparable_dtype   s     uc***r/   c                    |                      |           	 | j                            |d          }n"# t          $ r}t	          |          |d}~ww xY wt          j        | |          S )z
        Get integer location for requested label

        Returns
        -------
        loc : int, slice, or ndarray[int]
        F)unboxN)_check_indexing_errorr0   _validate_scalar	TypeErrorKeyErrorr   get_loc)r,   keyerrs      r-   rX   zTimedeltaIndex.get_loc   sz     	""3'''	)*--c-??CC 	) 	) 	)3--S(	) }T3'''s   4 
AAAlabelstrc                (    t          |          }|d fS r(   )r   )r,   r[   parseds      r-   _parse_with_resozTimedeltaIndex._parse_with_reso   s    5!!t|r/   r^   r   c                    |                     |j                  }|t          |j                  z   t          dd          z
  }||fS )N   ns)r   resolution_stringr	   r   )r,   resor^   lboundrbounds        r-   _parsed_string_to_boundsz'TimedeltaIndex._parsed_string_to_bounds   sD    f677)F$<===	!T@R@RRv~r/   c                    dS )Ntimedelta64 r+   s    r-   inferred_typezTimedeltaIndex.inferred_type  s    }r/   )r%   r&   )r%   r1   )r4   r5   )r<   r   r%   r5   )r[   r\   )r^   r   )r%   r\   )rA   
__module____qualname____doc___typr   	_data_clspropertyr.   __annotations__r   _get_string_slicer3   r   r>   rM   rQ   rX   r_   rg   rk   rj   r/   r-   r#   r#   &   s-        "F FP DI( ( ( X(  / * * * X* ^^~E< E< E< E< E<R+ + + +( ( ("   
       X  r/   r#   )r;   periods
int | Noner;   
str | Noner%   c                   |t          j        || |          rd}t          |          }t          j        | |||||          }t
                              ||          S )a$  
    Return a fixed frequency TimedeltaIndex with day as the default.

    Parameters
    ----------
    start : str or timedelta-like, default None
        Left bound for generating timedeltas.
    end : str or timedelta-like, default None
        Right bound for generating timedeltas.
    periods : int, default None
        Number of periods to generate.
    freq : str, Timedelta, datetime.timedelta, or DateOffset, default 'D'
        Frequency strings can have multiples, e.g. '5h'.
    name : str, default None
        Name of the resulting TimedeltaIndex.
    closed : str, default None
        Make the interval closed with respect to the given frequency to
        the 'left', 'right', or both sides (None).
    unit : str, default None
        Specify the desired resolution of the result.

        .. versionadded:: 2.0.0

    Returns
    -------
    TimedeltaIndex

    Notes
    -----
    Of the four parameters ``start``, ``end``, ``periods``, and ``freq``,
    exactly three must be specified. If ``freq`` is omitted, the resulting
    ``TimedeltaIndex`` will have ``periods`` linearly spaced elements between
    ``start`` and ``end`` (closed on both sides).

    To learn more about the frequency strings, please see `this link
    <https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases>`__.

    Examples
    --------
    >>> pd.timedelta_range(start='1 day', periods=4)
    TimedeltaIndex(['1 days', '2 days', '3 days', '4 days'],
                   dtype='timedelta64[ns]', freq='D')

    The ``closed`` parameter specifies which endpoint is included.  The default
    behavior is to include both endpoints.

    >>> pd.timedelta_range(start='1 day', periods=4, closed='right')
    TimedeltaIndex(['2 days', '3 days', '4 days'],
                   dtype='timedelta64[ns]', freq='D')

    The ``freq`` parameter specifies the frequency of the TimedeltaIndex.
    Only fixed frequencies can be passed, non-fixed frequencies such as
    'M' (month end) will raise.

    >>> pd.timedelta_range(start='1 day', end='2 days', freq='6h')
    TimedeltaIndex(['1 days 00:00:00', '1 days 06:00:00', '1 days 12:00:00',
                    '1 days 18:00:00', '2 days 00:00:00'],
                   dtype='timedelta64[ns]', freq='6h')

    Specify ``start``, ``end``, and ``periods``; the frequency is generated
    automatically (linearly spaced).

    >>> pd.timedelta_range(start='1 day', end='5 days', periods=4)
    TimedeltaIndex(['1 days 00:00:00', '2 days 08:00:00', '3 days 16:00:00',
                    '5 days 00:00:00'],
                   dtype='timedelta64[ns]', freq=None)

    **Specify a unit**

    >>> pd.timedelta_range("1 Day", periods=3, freq="100000D", unit="s")
    TimedeltaIndex(['1 days', '100001 days', '200001 days'],
                   dtype='timedelta64[s]', freq='100000D')
    ND)rK   r;   r8   )comany_noner	   r   _generate_ranger#   rE   )startendrt   r:   r9   rK   r;   rL   s           r-   timedelta_ranger~   
  sk    f |WeS99|T??D*sGT&t  E %%e$%777r/   )NNNNNN)rt   ru   r;   rv   r%   r#   ))rn   
__future__r   typingr   r?   pandas._libsr   r)   r   pandas._libs.tslibsr   r   r	   pandas._libs.tslibs.timedeltasr
   pandas.util._exceptionsr   pandas.core.dtypes.commonr   r   pandas.core.dtypes.genericr   pandas.core.arrays.timedeltasr   pandas.core.commoncorecommonry   pandas.core.indexes.baser   r    pandas.core.indexes.datetimeliker   pandas.core.indexes.extensionr   pandas._typingr   
_field_opsr#   r~   rj   r/   r-   <module>r      sw   $ $ " " " " " "                             
 C B B B B B 4 4 4 4 4 4        1 0 0 0 0 0 8 8 8 8 8 8                          D C C C C C 7 7 7 7 7 7 ('''''' PPP 		      	 	Q Q Q Q Q+ Q Q	 	  Qj 		Z8 Z8 Z8 Z8 Z8 Z8 Z8 Z8 Z8r/   