o
    Mf                     @   s   d dl mZ d dlZd dlZd dlZejd  dkZer"eefZ	dZ
neZ	zejjZ
W n ey;   eed Z
Y nw G dd deddZG dd deZdS )	    )
namedtupleN   c                       s    e Zd ZdZ fddZ  ZS )ExtTypez'ExtType represents ext type in msgpack.c                    s\   t |ts	tdt |tstdd|  krdks$td tdtt| | ||S )Nzcode must be intzdata must be bytesr      zcode must be 0~127)
isinstanceint	TypeErrorbytes
ValueErrorsuperr   __new__)clscodedata	__class__ Y/var/www/html/analyze/labelStudio/lib/python3.10/site-packages/pip/_vendor/msgpack/ext.pyr      s   

zExtType.__new__)__name__
__module____qualname____doc__r   __classcell__r   r   r   r   r      s    r   z	code datac                   @   s   e Zd ZdZddgZd ddZdd Zd	d
 Zdd Zdd Z	e
dd Zdd Ze
dd Zdd Ze
dd Zdd Zdd Ze
dd ZdS )!	TimestampaR  Timestamp represents the Timestamp extension type in msgpack.

    When built with Cython, msgpack uses C methods to pack and unpack `Timestamp`. When using pure-Python
    msgpack, :func:`to_bytes` and :func:`from_bytes` are used to pack and unpack `Timestamp`.

    This class is immutable: Do not override seconds and nanoseconds.
    secondsnanosecondsr   c                 C   sX   t |ts	tdt |tstdd|  krdk s$td td|| _|| _dS )a  Initialize a Timestamp object.

        :param int seconds:
            Number of seconds since the UNIX epoch (00:00:00 UTC Jan 1 1970, minus leap seconds).
            May be negative.

        :param int nanoseconds:
            Number of nanoseconds to add to `seconds` to get fractional time.
            Maximum is 999_999_999.  Default is 0.

        Note: Negative times (before the UNIX epoch) are represented as negative seconds + positive ns.
        zseconds must be an intergerznanoseconds must be an integerr    ʚ;z?nanoseconds must be a non-negative integer less than 999999999.N)r   	int_typesr   r
   r   r   )selfr   r   r   r   r   __init__-   s   


zTimestamp.__init__c                 C   s   d | j| jS )z#String representation of Timestamp.z'Timestamp(seconds={0}, nanoseconds={1}))formatr   r   r   r   r   r   __repr__E   s   zTimestamp.__repr__c                 C   s*   t || ju r| j|jko| j|jkS dS )z0Check for equality with another Timestamp objectF)typer   r   r   r   otherr   r   r   __eq__K   s   zTimestamp.__eq__c                 C   s   |  | S )z(not-equals method (see :func:`__eq__()`))r&   r$   r   r   r   __ne__S   s   zTimestamp.__ne__c                 C   s   t | j| jfS )N)hashr   r   r!   r   r   r   __hash__W   s   zTimestamp.__hash__c                 C   s   t | dkrtd| d }d}n*t | dkr(td| d }|d@ }|d? }nt | dkr7td	| \}}ntd
t||S )a  Unpack bytes into a `Timestamp` object.

        Used for pure-Python msgpack unpacking.

        :param b: Payload from msgpack ext message with code -1
        :type b: bytes

        :returns: Timestamp object unpacked from msgpack ext payload
        :rtype: Timestamp
           !Lr      !Ql    "      !IqzFTimestamp type can only be created from 32, 64, or 96-bit byte objects)lenstructunpackr
   r   )br   r   data64r   r   r   
from_bytesZ   s   

zTimestamp.from_bytesc                 C   s`   | j d? dkr%| jd> | j B }|d@ dkrtd|}|S td|}|S td| j| j }|S )zPack this Timestamp object into bytes.

        Used for pure-Python msgpack packing.

        :returns data: Payload for EXT message with code -1 (timestamp type)
        :rtype: bytes
        r.   r   l        r+   r-   r0   )r   r   r2   pack)r   r5   r   r   r   r   to_bytesu   s   zTimestamp.to_bytesc                 C   s&   t | d }t | d d }t||S )zCreate a Timestamp from posix timestamp in seconds.

        :param unix_float: Posix timestamp in seconds.
        :type unix_float: int or float.
           r   )r   r   )unix_secr   r   r   r   r   	from_unix   s   
zTimestamp.from_unixc                 C   s   | j | jd  S )znGet the timestamp as a floating-point value.

        :returns: posix timestamp
        :rtype: float
        g    eAr   r   r!   r   r   r   to_unix      zTimestamp.to_unixc                 C   s   t t| d S )zCreate a Timestamp from posix timestamp in nanoseconds.

        :param int unix_ns: Posix timestamp in nanoseconds.
        :rtype: Timestamp
        r   )r   divmod)unix_nsr   r   r   from_unix_nano   s   zTimestamp.from_unix_nanoc                 C   s   | j d | j S )z~Get the timestamp as a unixtime in nanoseconds.

        :returns: posix timestamp in nanoseconds
        :rtype: int
        r   r<   r!   r   r   r   to_unix_nano   r>   zTimestamp.to_unix_nanoc                 C   s   t j dtt j|  d S )zlGet the timestamp as a UTC datetime.

        Python 2 is not supported.

        :rtype: datetime.
        r   )r   )datetimefromtimestamp_utc	timedeltar=   r!   r   r   r   to_datetime   s   zTimestamp.to_datetimec                 C   s   t |  S )zuCreate a Timestamp from datetime with tzinfo.

        Python 2 is not supported.

        :rtype: Timestamp
        )r   r;   	timestamp)dtr   r   r   from_datetime   s   zTimestamp.from_datetimeN)r   )r   r   r   r   	__slots__r   r"   r&   r'   r)   staticmethodr6   r8   r;   r=   rA   rB   rG   rJ   r   r   r   r   r   "   s(    




r   )collectionsr   rC   sysr2   version_infoPY2r   longr   rE   timezoneutcAttributeErrorrF   r   objectr   r   r   r   r   <module>   s    