o
    5c3                     @  s  d dl mZ d dlm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 d d	lmZ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( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z9 d dl:m;Z; d dl<m=  m>Z? d dl@mAZA erd dlBmCZC d-ddZDG dd de9jEZF	d.d/d#d$ZGd0d&d'ZHd1d(d)ZId2d+d,ZJdS )3    )annotations)	timedelta)TYPE_CHECKINGcastN)libtslibs)	
BaseOffsetNaTNaTTypeTick	Timedeltaastype_overflowsafeiNaTperiods_per_second	to_offset)precision_from_unit)get_timedelta_field)array_to_timedelta64ints_to_pytimedeltaparse_timedelta_unit)DtypeObjNpDtypenpt)function)validate_endpoints)astype_td64_unit_conversion)	TD64NS_DTYPEis_dtype_equalis_float_dtypeis_integer_dtypeis_object_dtype	is_scalaris_string_dtypeis_timedelta64_dtypepandas_dtype)isna)nanops)datetimelike)generate_regular_range)unpack_zerodim_and_defer	DataFramenamestralias	docstringc                   s*   d fdd}| |_ d| d|_t|S )Nreturn
np.ndarrayc                   s0   | j }t| | jd}| jr| j|d dd}|S )Nresofloat64)
fill_valueconvert)asi8r   _reso_hasna_maybe_mask_results)selfvaluesresultr.    S/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/core/arrays/timedeltas.pyfB   s   z_field_accessor.<locals>.f
)r0   r1   )__name____doc__property)r,   r.   r/   rA   r?   r>   r@   _field_accessorA   s   
rF   c                      s  e Zd ZU dZdZeddZeeje	fZ
e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 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ed%d&dd)d*Z eed%e!j"dfdd+d,Z#edd-d.Z$ddd0d1Z%dd2d3Z&ddd5d6Z'ddd8d9Z(d:d; Z)dddd%dd7d<d=ddFdGZ*ddddHd%d7dIddKdLZ+dddNdOZ,dddPddRdSZ-dTdU Z.e/dVddWdXZ0e0Z1e/dYdZd[ Z2e/d\d]d^ Z3e/d_d`da Z4e/dbdcdd Z5e/dedfdg Z6e/dhdidj Z7e/dkdldm Z8e/dndodp Z9ddqdrZ:ddsdtZ;ddudvZ<ddxdyZ=ddzd{Z>e?d|d|d}Z@e?d~d~dZAe?dddZBe?dddZCedddZD  ZES )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
    timedeltaarrayr	   ns)r   timedelta64r0   type[Timedelta]c                 C  s   t S Nr   r;   r?   r?   r@   _scalar_typev      zTimedeltaArray._scalar_typei  z	list[str]
_other_ops	_bool_opsfreq_object_ops)dayssecondsmicrosecondsnanoseconds
_field_ops_datetimelike_ops)to_pytimedeltatotal_secondsroundfloorceil_datetimelike_methodsxnp.timedelta64Timedelta | NaTTypec                 C  s(   | d}|tjkrtS tj|| jdS )Ni8r2   )viewr	   valuer   _from_value_and_resor8   )r;   ra   yr?   r?   r@   	_box_func   s   

zTimedeltaArray._box_funcnp.dtypec                 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dtyperN   r?   r?   r@   rl      s   zTimedeltaArray.dtypeNc                 C  s   t |j t |}|S rL   )_validate_td64_dtyperl   )clsr<   rl   r?   r?   r@   _validate_dtype   s   
zTimedeltaArray._validate_dtyper<   r1   BaseOffset | Nonec                   sh   t |tjr|jdksJ t|rJ t |tjs J t|||jks'J t j	||d}||_
|S )Nm)r<   rl   )
isinstancenprl   kindr   is_unitlessndarraytypesuper_simple_new_freq)rn   r<   rS   rl   r=   	__class__r?   r@   ry      s   zTimedeltaArray._simple_newFrl   copyr~   boolc                C  sB   |rt | t||d d\}}td |d\}}| j||j|dS )Nr~   unitFrl   rS   )rm   sequence_to_td64nsdtlvalidate_inferred_freqry   rl   )rn   datarl   r~   inferred_freqrS   _r?   r?   r@   _from_sequence   s
   zTimedeltaArray._from_sequencec           
      C  s   |rt | |dvsJ |d u }|tjur|nd }t|\}}t|||d\}}t|||\}}|r6d }| j||j|d}	|d u rO|d urO| 	|	| |	S |rWt
|	j|	_|	S )NYrh   Mr   r   )rm   r   
no_defaultr   maybe_infer_freqr   r   ry   rl   _validate_frequencyr   r   rz   )
rn   r   rl   r~   rS   r   explicit_none
freq_inferr   r=   r?   r?   r@   _from_sequence_not_strict   s"   	z(TimedeltaArray._from_sequence_not_strictc           
      C  s   t |}|d u rtdd |||fD rtdt||||dkr'td|d ur/t|}|d ur7t|}t|\}}|d urIt||||}nt	
|j|j|d}|s]|dd  }|se|d d }|d	}	| j|	|	j|d
S )Nc                 s  s    | ]}|d u V  qd S rL   r?   .0ra   r?   r?   r@   	<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 specifiedrd      m8[ns]r   )r   validate_periodsany
ValueErrorcomcount_not_noner   r   r(   rs   linspacerf   astypere   ry   rl   )
rn   startendperiodsrS   closedleft_closedright_closedindex
td64valuesr?   r?   r@   _generate_range   s*   
 
zTimedeltaArray._generate_rangesetitemc                 C  s8   t || js|turtd| j||d t|jdS )Nz'value' should be a Timedelta.)r   rI   )rr   rO   r	   r   _check_compatible_withrs   rJ   rf   )r;   rf   r   r?   r?   r@   _unbox_scalar  s   zTimedeltaArray._unbox_scalarc                 C  s   t |S rL   rM   )r;   rf   r?   r?   r@   _scalar_from_string  s   z"TimedeltaArray._scalar_from_stringNonec                 C  s   d S rL   r?   )r;   otherr   r?   r?   r@   r      rP   z%TimedeltaArray._check_compatible_withTc                 C  s4   t |}|jdkrt| j||dS tjj| ||dS )Nrq   r~   )r$   rt   r   rk   r   DatetimeLikeArrayMixinr   )r;   rl   r~   r?   r?   r@   r   '  s   
zTimedeltaArray.astypec           	      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lenrk   minr   )	r;   ir   length	chunksizechunksstart_iend_i	convertedr?   r?   r@   __iter__3  s   
zTimedeltaArray.__iter__r   )axisrl   outkeepdimsinitialskipna	min_countr   
int | Nonerl   NpDtype | Noner   r   r   intc          	      C  s6   t d||||d tj| j|||d}| ||S )Nr?   )rl   r   r   r   )r   r   r   )nvvalidate_sumr&   nansumrk   _wrap_reduction_result)	r;   r   rl   r   r   r   r   r   r=   r?   r?   r@   sumF  s   
zTimedeltaArray.sumr   )r   rl   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 )Nr?   )rl   r   r   std)fname)r   r   r   r   )r   validate_stat_ddof_funcr&   nanstdrk   r   ri   _from_backing_data)r;   r   rl   r   r   r   r   r=   r?   r?   r@   r   Z  s   


zTimedeltaArray.stdboxedc                 C  s   ddl m} || ddS )Nr   get_format_timedelta64Tr   )pandas.io.formats.formatr   )r;   r   r   r?   r?   r@   
_formatterp  s   zTimedeltaArray._formatter)na_repdate_formatnpt.NDArray[np.object_]c                K  s,   ddl m} || j|}t|dd| jS )Nr   r   r   )r   r   rk   rs   
frompyfunc)r;   r   r   kwargsr   	formatterr?   r?   r@   _format_native_typesu  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 )rr   r   	TypeErrorrw   rC   r;   r   r?   r?   r@   _add_offset  s   zTimedeltaArray._add_offset__mul__c                   s   t r$| j }d }| jd urts| j }t| j||j|dS tds.t	t
t
| kr?tjs?tdtjrd| j  fddtt
| D }t	|}t| j||jdS | j }t| j||jdS )Nr   rl   z$Cannot multiply with unequal lengthsc                   s   g | ]
} | |  qS r?   r?   r   narrr   r?   r@   
<listcomp>      z*TimedeltaArray.__mul__.<locals>.<listcomp>rl   )r!   rk   rS   r%   rw   ry   rl   hasattrrs   arrayr   r#   r   r    r   )r;   r   r=   rS   r?   r   r@   r     s"   






zTimedeltaArray.__mul____truediv__c                   s  t || jr't|}td|tu r"tj| jtjd}|	tj
 |S | j| S t|rM| j| }d }| jd urB| jj| }t|}t| j||j|dS t|dsWt|}t|t| krctdt|jrm| j| S t|jr|  |   fddttD }t|| j}tj|dd	}|d
kr| }t| ||j}|S |dkr|t }|S |dkr| tj
 }|S | j| }t| j||jdS )Nrc   r   r   rl   *Cannot divide vectors with unequal lengthsc                   s   g | ]
}|  |  qS r?   r?   r   oravsravr?   r@   r     r   z.TimedeltaArray.__truediv__.<locals>.<listcomp>Fr   r   floatingdatetime)!rr   _recognized_scalarsr   r   r	   rs   emptyshaper4   fillnanrk   r   r!   rS   deltar   rw   ry   rl   r   r   r   r   r#   r    ravelr   reshapeinfer_dtyper   r   float)r;   r   r=   rS   result_listinferredflatr?   r   r@   r     sL   












zTimedeltaArray.__truediv____rtruediv__c                   s  t  jr't  td tu r"tjjtjd}|	tj
 |S  j S t r<tdt j dtj t dsFt  t tkrRtdt jr\ j S t jrt fddttD }t|S td j d	tj )
Nrc   r   Cannot divide  by rl   r   c                   s   g | ]
} | |  qS r?   r?   r   r   r;   r?   r@   r     r   z/TimedeltaArray.__rtruediv__.<locals>.<listcomp>z	 data by )rr   r   r   r   r	   rs   r   r   r4   r   r   rk   r   r!   r   rw   rC   r   r   r   r   r#   rl   r    r   )r;   r   r=   r   r?   r  r@   r    s.   







zTimedeltaArray.__rtruediv____floordiv__c           
        s  t |rRt|| jr,t|}td|tu r&tj| jtj	d}|
tj |S || jS | j| }d }| jd urJ| j| }|jdkrJ| jjdkrJd }t| ||dS t|ds\t|}t|t| krhtdt|jrt| |}| j|j }| j|jB }| r|tj	}t||tj |S t|jr|  |   fddttD }t|}t j!|d	d
}|"| j}|dkrt#|\}}t| |S |dkr| tj S |S t$|jst%|jr| j| }t| |S t&|dt|j'}	t(d|	 dt| j' )Nrc   r   r   rS   rl   "Cannot divide with unequal lengthsc                   s   g | ]
}|  |  qS r?   r?   r   r   r?   r@   r   Q  r   z/TimedeltaArray.__floordiv__.<locals>.<listcomp>Fr   r   r   r  r  ))r!   rr   r   r   r   r	   rs   r   r   r4   r   r   __rfloordiv__rk   rS   nanosrw   r   r   r   r   r#   rl   r7   _isnanr   r   putmaskr    r   r   asarrayr   r   r   r   r   r   getattrrC   r   )
r;   r   r=   rS   maskres_listresult_flatr   r   rl   r?   r   r@   r    sZ   









zTimedeltaArray.__floordiv__r	  c                   sZ  t  r<t jr,t  td tu r&tjjtj	d}|
tj |S  jS tdt j dtj t dsFt  t tkrRtdt jr}t   jj }j jB }| r{|tj	}t||tj |S t jr fddttD }t|}|S t dt j}td| dtj )	Nrc   r   r  r  rl   r  c                   s   g | ]
} | |  qS r?   r?   r   r  r?   r@   r     r   z0TimedeltaArray.__rfloordiv__.<locals>.<listcomp>)r!   rr   r   r   r   r	   rs   r   r   r4   r   r   r  rk   r   rw   rC   r   r   r   r   r#   rl   r7   r  r   r   r  r    r   r  )r;   r   r=   r  r   rl   r?   r  r@   r	  i  s:   




zTimedeltaArray.__rfloordiv____mod__c                 C  s$   t || jr
t|}| | | |  S rL   rr   r   r   r   r?   r?   r@   r       zTimedeltaArray.__mod____rmod__c                 C  s$   t || jr
t|}|||  |   S rL   r  r   r?   r?   r@   r    r  zTimedeltaArray.__rmod__
__divmod__c                 C  s0   t || jr
t|}| | }| ||  }||fS rL   r  r;   r   res1res2r?   r?   r@   r    
   zTimedeltaArray.__divmod____rdivmod__c                 C  s0   t || jr
t|}||  }|||   }||fS rL   r  r  r?   r?   r@   r    r  zTimedeltaArray.__rdivmod__c                 C  s2   | j d urt| | j | j  dS t| | j S Nr  )rS   rw   rk   rN   r?   r?   r@   __neg__  s   
zTimedeltaArray.__neg__c                 C  s   t | | j | jdS r  )rw   rk   r~   rS   rN   r?   r?   r@   __pos__  s   zTimedeltaArray.__pos__c                 C  s   t | t| jS rL   )rw   rs   absrk   rN   r?   r?   r@   __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
        -------
        seconds : [ndarray, Float64Index, Series]
            When the calling object is a TimedeltaArray, the return type
            is ndarray.  When the calling object is a TimedeltaIndex,
            the return type is a Float64Index. 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()
        Float64Index([0.0, 86400.0, 172800.0, 259200.0, 345600.0],
                     dtype='float64')
        N)r5   )r   r8   r:   r7   )r;   ppsr?   r?   r@   r\     s   
7zTimedeltaArray.total_secondsc                 C  s
   t | jS )z
        Return an ndarray of datetime.timedelta objects.

        Returns
        -------
        timedeltas : ndarray[object]
        )r   rk   rN   r?   r?   r@   r[     s   
zTimedeltaArray.to_pytimedeltarU   z Number of days for each element.rV   z>Number of seconds (>= 0 and less than 1 day) for each element.rW   zFNumber of microseconds (>= 0 and less than 1 second) for each element.rX   zJNumber of nanoseconds (>= 0 and less than 1 microsecond) for each element.r+   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
        r   r*   )rU   hoursminutesrV   millisecondsrW   rX   c                   s   t | rtjgt  S | jS rL   )r%   rs   r   r   
componentsra   columnsr?   r@   rA   9  s   z$TimedeltaArray.components.<locals>.fc                 S  s   | j S rL   )r&  r'  r?   r?   r@   rA   @  s   c                   s   g | ]} |qS r?   r?   r   )rA   r?   r@   r   C  s    z-TimedeltaArray.components.<locals>.<listcomp>r(  int64)pandasr+   r9   r   )r;   r+   hasnansr=   r?   )r)  rA   r@   r&    s   	
zTimedeltaArray.components)r0   rK   )ra   rb   r0   rc   )r0   rj   )r<   r1   rS   rp   r0   rG   )r~   r   r0   rG   rL   )F)r   r   r0   rb   )r0   rc   )r   r   r0   r   )T)r~   r   )
r   r   rl   r   r   r   r   r   r   r   )
r   r   rl   r   r   r   r   r   r   r   )r   r   )r0   r   )r0   rG   )r0   r!  )r0   r+   )FrC   
__module____qualname__rD   _typrs   rJ   _internal_fill_valuer   r   r   r#   _is_recognized_dtype_infer_matchesrE   rO   __array_priority__rQ   __annotations__rR   rT   rY   rZ   r`   ri   rl   rz   r   _default_dtypeclassmethodro   ry   r   r   r   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[   rF   rU   rV   rW   rX   r&  __classcell__r?   r?   r{   r@   rG   Q   s   
 

$$

E
+
L
/


	

	



:
rG   Fraiser~   r   r0   tuple[np.ndarray, Tick | None]c                 C  sf  |dvsJ d}|durt |}tj| |dd\} }t| tr"| j}t| js,t| jr6t	| ||d} d}nit
| jrIt| |d\} }|oG| }nVt| jrt| }t|pWd\}}| tj}	| |	 }
|rmt|
|}
|	| |
| tj d	} t| |< d}nt| jr| jtkrt| td
} d}n	td| j dtj| |d} | 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   NrG   )cls_namer   errorsF)r   rI   timedelta64[ns]r   dtype ' cannot be converted to timedelta64[ns]r   r   )r   r   !ensure_arraylike_for_datetimelikerr   rG   rS   r    rl   r"   _objects_to_td64nsr   ints_to_td64nsr   rs   isnanr   r   r*  r]   re   r   r#   r   r   r   r   )r   r~   r   r=  r   	copy_mader  rq   pbasefracr?   r?   r@   r   M  sD   !






r   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
    FNrI   Tztimedelta64[]r   r>  )rl   rs   r*  r   re   r   r   )r   r   rE  	dtype_strr?   r?   r@   rC    s   

rC  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}   r<  r>  )rs   r   object_r   re   )r   r   r=  r<   r=   r?   r?   r@   rB    s   
rB  r   c                 C  sB   t | } t| tdrd}t|t| tstd|  d| S )NrJ   zhPassing in 'timedelta' dtype with no precision is not allowed. Please pass in 'timedelta64[ns]' instead.r?  r@  )r$   r   rs   rl   r   r   )rl   msgr?   r?   r@   rm     s   
rm   )r,   r-   r.   r-   r/   r-   )FNr9  )r~   r   r0   r:  )rI   )Nr9  )r0   r   )K
__future__r   r   r   typingr   r   numpyrs   pandas._libsr   r   pandas._libs.tslibsr   r	   r
   r   r   r   r   r   r   pandas._libs.tslibs.conversionr   pandas._libs.tslibs.fieldsr   pandas._libs.tslibs.timedeltasr   r   r   pandas._typingr   r   r   pandas.compat.numpyr   r   pandas.util._validatorsr   pandas.core.dtypes.astyper   pandas.core.dtypes.commonr   r   r   r   r    r!   r"   r#   r$   pandas.core.dtypes.missingr%   pandas.corer&   pandas.core.arraysr'   r   pandas.core.arrays._rangesr(   pandas.core.commoncorecommonr   pandas.core.ops.commonr)   r+  r+   rF   TimelikeOpsrG   r   rC  rB  rm   r?   r?   r?   r@   <module>   sF    ,,
      
W
($