
    )h^                     X    d dl Z d dlZd dlmZ  G d d edd            Z G d d      Zy)    N)
namedtuplec                   "     e Zd ZdZ fdZ xZS )ExtTypez'ExtType represents ext type in msgpack.c                     t        |t              st        d      t        |t              st        d      d|cxk  rdk  st	        d       t	        d      t
        |   | ||      S )Nzcode must be intzdata must be bytesr      zcode must be 0~127)
isinstanceint	TypeErrorbytes
ValueErrorsuper__new__)clscodedata	__class__s      J/var/www/html/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.pyr   zExtType.__new__	   sl    $$.//$&011DC122  122wsD$//    )__name__
__module____qualname____doc__r   __classcell__)r   s   @r   r   r      s    10 0r   r   z	code datac                       e Zd ZdZddgZddZd Zd Zd Zd Z	e
d	        Zd
 Ze
d        Zd Ze
d        Zd Zd Ze
d        Zy)	TimestampaV  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nanosecondsc                     t        |t              st        d      t        |t              st        d      d|cxk  rdk  st        d       t        d      || _        || _        y)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 neg. seconds + pos. ns.
        zseconds must be an integerznanoseconds must be an integerr    ʚ;z?nanoseconds must be a non-negative integer less than 999999999.N)r   r	   r
   r   r   r   )selfr   r   s      r   __init__zTimestamp.__init__   si     '3'899+s+<==[(5(^__ )^__&r   c                 <    d| j                    d| j                   dS )z#String representation of Timestamp.zTimestamp(seconds=z, nanoseconds=)r   r   r    s    r   __repr__zTimestamp.__repr__5   s#    #DLL>@P@P?QQRSSr   c                     t        |      | j                  u r4| j                  |j                  k(  xr | j                  |j                  k(  S y)z0Check for equality with another Timestamp objectF)typer   r   r   r    others     r   __eq__zTimestamp.__eq__9   s>    ;$..(<<5==0ZT5E5EIZIZ5ZZr   c                 &    | j                  |       S )z(not-equals method (see :func:`__eq__()`))r+   r)   s     r   __ne__zTimestamp.__ne__?   s    ;;u%%%r   c                 D    t        | j                  | j                  f      S )N)hashr   r   r%   s    r   __hash__zTimestamp.__hash__C   s    T\\4#3#3455r   c                 8   t        |       dk(  rt        j                  d|       d   }d}net        |       dk(  r$t        j                  d|       d   }|dz  }|dz	  }n3t        |       dk(  rt        j                  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   data64s       r   
from_byteszTimestamp.from_bytesF   s     q6Q;mmD!,Q/GKVq[]]4+A.F11G B,KVr\#)==#: KX  +..r   c                 (   | j                   dz	  dk(  rT| j                  dz  | j                   z  }|dz  dk(  rt        j                  d|      }|S t        j                  d|      }|S t        j                  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
        r6   r   l        r3   r5   r8   )r   r   r:   pack)r    r=   r   s      r   to_byteszTimestamp.to_bytesa   s     LLB1$%%+dll:F**a/{{40 	 {{40  ;;ud&6&6EDr   c                 X    t        | dz        }t        | dz  dz        }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   s      r   	from_unixzTimestamp.from_unixv   s2     h!m$8a<501+..r   c                 :    | j                   | j                  dz  z   S )znGet the timestamp as a floating-point value.

        :returns: posix timestamp
        :rtype: float
        g    eAr$   r%   s    r   to_unixzTimestamp.to_unix   s     ||d..444r   c                 &    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_nss    r   from_unix_nanozTimestamp.from_unix_nano   s     &%011r   c                 :    | j                   dz  | j                  z   S )z~Get the timestamp as a unixtime in nanoseconds.

        :returns: posix timestamp in nanoseconds
        :rtype: int
        r   r$   r%   s    r   to_unix_nanozTimestamp.to_unix_nano   s     ||e#d&6&666r   c                     t         j                  j                  }t         j                   j                  d|      t        j                  | j
                  | j                  dz        z   S )zRGet the timestamp as a UTC datetime.

        :rtype: `datetime.datetime`
        r     )r   microseconds)datetimetimezoneutcfromtimestamp	timedeltar   r   )r    rS   s     r   to_datetimezTimestamp.to_datetime   sV    
 ##  ..q#69K9KLLt/?/?4/G:
 
 	
r   c                 d    t        t        | j                               | j                  dz        S )zQCreate a Timestamp from datetime with tzinfo.

        :rtype: Timestamp
        rO   r$   )r   r	   	timestampmicrosecond)dts    r   from_datetimezTimestamp.from_datetime   s&     R\\^!4"..SWBWXXr   N)r   )r   r   r   r   	__slots__r!   r&   r+   r-   r0   staticmethodr>   rA   rE   rG   rK   rM   rV   r[    r   r   r   r      s     M*I',T&6 / /4* / /5 2 27
 Y Yr   r   )rQ   r:   collectionsr   r   r   r^   r   r   <module>r`      s/      "
0jK0 
0WY WYr   