
    "f                     |    d Z ddlmZmZmZmZmZ ddlmZ ddl	m
Z
mZ  G d de          Z G d d	e
          ZdS )z;Base class for bytes to values (and vice versa) transforms.    )AnyListOptionalTupleUnion   )
exceptions)DumpRecordc                   .    e Zd ZU dZedef         ed<   dS )TransformMetazMeta class for plum types.N
__nbytes__)__name__
__module____qualname____doc__r   int__annotations__     R/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/transform.pyr   r      s/         $$ dCi      r   r   c                      e Zd ZU dZdZeedf         ed<   eed<   eed<   ddeded	dfd
Z	e
d	efd            Ze
d	efd            Z	 ddedee         dee         d	dfdZ	 ddededee         d	eeef         fdZddZded	efdZded	eeef         fdZded	efdZded	eeef         fdZddeded	efdZd	efdZdS )	Transformz#Packable/Unpacked bytes base class.Nr   __format_name____hint__r   namehintreturnc                 "    || _         || _        d S N)r   r   )selfr   r   s      r   __init__zTransform.__init__   s    #r   c                     | j         S )z:Transform format name (for repr and dump "Format" column).r   r!   s    r   r   zTransform.name"   s     ##r   c                 F    | j         }|t          j        | d          |S )zTransform format size in bytes.Nz sizes vary)r   r	   	SizeError)r!   nbytess     r   r(   zTransform.nbytes'   s/     >&$'='='=>>>r   valuepiecesdumpc                 &    t          | d          )Nz does not support pack	TypeError)r!   r)   r*   r+   s       r   __pack__zTransform.__pack__1   s     4999:::r   bufferoffsetc                 &    t          | d          )Nz does not support unpackr-   )r!   r0   r1   r+   s       r   
__unpack__zTransform.__unpack__6   s     4;;;<<<r   r   c                 &    t          | d          )Create view of bytes buffer.z does not support view()r-   r!   r0   r1   s      r   __view__zTransform.__view__;   s    4;;;<<<r   c                     g }	 |                      ||d           n;# t          $ r.}|                     |           t          j                    |d}~ww xY wd                    |          S )ziPack value as formatted bytes.

        :raises: ``PackError`` if type error, value error, etc.

        Nr   )r/   	Exceptionpack_and_dumpr	   ImplementationErrorjoin)r!   r)   r*   excs       r   packzTransform.pack?   s     !	<MM%.... 	< 	< 	<u%%%022;		< xxs    
A)AAc                    t                      }g }	 |                     |||                    | j                             n)# t          $ r}t          j        ||          |d}~ww xY wd                    |          |fS )zPack value as formatted bytes and produce bytes summary.

        :raises: ``PackError`` if type error, value error, etc.

        fmt)r+   	exceptionNr   )r
   r/   
add_recordr   r9   r	   	PackErrorr<   )r!   r)   r+   r*   r=   s        r   r:   zTransform.pack_and_dumpQ   s     vv 	JMM%T=Q)R)RSSSS 	J 	J 	J&DC@@@cI	J xx%%s   0A 
A)A$$A)c                     	 |                      |dd          \  }}||d         rt          j                    |S # t          $ r.}|                     |           t          j                    |d}~ww xY w)zUnpack value from formatted bytes.

        :raises: ``UnpackError`` if insufficient bytes, excess bytes, or value error

        r   N)r3   r	   ExcessMemoryErrorr9   unpack_and_dumpr;   )r!   r0   itemr1   r=   s        r   unpackzTransform.unpack`   s    
	<??61d;;LD&fgg 5 2444K 	< 	< 	<  (((022;	<s   8; 
A3)A..A3c                    t                      }	 |                     |d|                    | j                            \  }}||d         }|rft	          dt          |          d          D ]3}|                    |||dz                      }|sd|_        d|_        4t          j	        |          n(# t          $ r}t          j        ||          |d}~ww xY w||fS )zUnpack value from bytes and produce packed bytes summary.

        :raises: ``UnpackError`` if insufficient bytes, excess bytes, or value error

        r   r@   N   )memoryTz<excess bytes>)r
   r3   rC   r   rangelenseparater)   r	   rF   r9   UnpackError)	r!   r0   dmprH   r1   extra_bytesirecordr=   s	            r   rG   zTransform.unpack_and_dumpr   s    ff	<??3>>d.B>CC LD& !/K @q#k"2"2B77 8 8A ^^;q1r6z3J^KKF 8*.'7 2;???@  	< 	< 	<(c22;	< Sys   B%B6 6
C CCc                 .    |                      ||          S )r5   )r7   r6   s      r   viewzTransform.view   s    }}VV,,,r   c                     d| j         dS )Nz<transform >r$   r%   s    r   __repr__zTransform.__repr__   s    6T16666r   )r   r    )r   )r   r   r   r   r   r   r   r   strr"   propertyr   r(   r   r   bytesr   r   r/   r   r3   r7   r>   r
   r:   rI   rG   	bytearrayrV   rY   r   r   r   r   r      sS        --#'Jc4i '''MMM S       $c $ $ $ X$     X IM; ;;"&u+;5=f5E;	; ; ; ; DH= ==%(=080@=	sCx= = = =
= = = = #  %        $&3 &5+= & & & &<U <s < < < <$e c4i0@    8- -9 -c -# - - - -7# 7 7 7 7 7 7r   r   )	metaclassN)r   typingr   r   r   r   r    r	   r+   r
   r   typer   r   r   r   r   <module>rb      s    B A 4 4 4 4 4 4 4 4 4 4 4 4 4 4              ! ! ! ! !D ! ! !~7 ~7 ~7 ~7 ~7- ~7 ~7 ~7 ~7 ~7 ~7r   