
    "f              	           d Z ddlmZmZmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZmZmZmZ ddlmZmZmZ dd	lmZ d
e_        dedefdZddededefdZddededeeef         fdZdededefdZdedefdZdS )zUtility functions.    )AnyListTuple   )getbytes)DataDataMeta)Dump)ExcessMemoryErrorImplementationError	PackError	SizeErrorUnpackError)calcsizeitemsItemsFormat)	Transformplumfmtreturnc                     t          | t                    rt          | d          }n3t          | t          t          f          r| j        }nt          |           }|t          d          |S )z:Calculate format size (raise SizeError if variably sized).
__nbytes__Nzsize varies)
isinstancer	   getattrr   r   nbytes	_calcsizer   )r   r   s     R/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/utilities.pyr   r      sj    #x    l++	C$	*	+	+   3~&&&M    Nvaluec                     g }	 t          j        | |d|           n1# t          $ r$}t          | |           t	                      |d}~ww xY wd                    |          S )zaPack value as formatted bytes.

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

    Nr   )r   __pack__	Exceptionpack_and_dumpr   join)r   r   piecesexcs       r   packr'   )   sx     F-ufdC0000 - - -eS!!!!##,	- 88Fs    
A
AA
c                 >   t                      }g }	 t          j        | ||                                |           n8# t          $ r+}|                                 t          ||          |d}~ww xY w|                                 d                    |          |fS )z{Pack value as formatted bytes and produce bytes summary.

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

    )dump	exceptionNr   )r
   r   r!   
add_recordr"   trim_blank_recordr   r$   )r   r   r)   r%   r&   s        r   r#   r#   <   s     66DF;ufdoo&7&7==== ; ; ;   TS111s:; 	88FT!!s   )< 
A1&A,,A1bufferc                     	 t          j        |dd|           \  }}||d         rt          d          n1# t          $ r$}t	          | |           t                      |d}~ww xY w|S )zkUnpack value from formatted bytes.

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

    r   Nz)too many bytes, retry with dump to follow)r   
__unpack__r   r"   unpack_and_dumpr   )r   r-   r   offsetr&   s        r   unpackr2   Q   s    -(D#>>v&''? 	Q#$OPPP	Q - - -V$$$!##,-
 Ls   36 
A$ AA$c                    t                      }	 |                                }t          j        |d||           \  }}||d         }|rat	          dt          |          d          D ]3}|                    |||dz                      }|sd|_        d|_        4t          |          n7# t          $ r*}	|
                                 t          ||	          |	d}	~	ww xY w|
                                 ||fS )zUnpack value from formatted bytes and produce a packed bytes summary.

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

    r   N   )memoryTz<excess bytes>)r
   r+   r   r/   rangelenseparater   r   r"   r,   r   )
r   r-   r)   dump_recordr   r1   extra_bytesirecordr&   s
             r   r0   r0   d   s#    66D.oo''(KEEvVWWo 	11c+..33 4 4$//{1q2v:7N/OO 4&*FO#3FL#K000	1  . . .   $$$#-. 	$;s   BB, ,
C 6%CC )N)__doc__typingr   r   r   	_getbytesr   datar   r	   r)   r
   
exceptionsr   r   r   r   r   r   r   r   r   	transformr   
__module__intbytesr'   r#   r2   r0    r   r   <module>rG      s     # # # # # # # # # #                                          = < < < < < < < < <             + #    "  +     &" " "; "%t:L " " " "* U s    &# #e # # # # # #r   