
    "f                     n    d Z ddlmZ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  G d d	e          Zd
S )Bytes transform.    )ListOptionalTupleUnion   )getbytes)Record)InsufficientMemoryError)	Transformc                       e Zd ZU dZeeedf         ef         ed<   	 	 	 dde	e         dede	e
         ddf fd	Zedefd
            Z	 	 ddedede	e         de	e         deeef         f
dZ	 ddededede	e         deeef         f
dZ	 ddeeef         dee         de	e         ddfdZdeeef         dee         deddfdZ xZS )BytesXr   N__np__    nbytespadnamereturnc                 <   |9|dg}ndg}|r|                     d           dd                    |           d}t                                          |d           d	t	          |          cxk    rd
k    sn J ||r
J d            || _        ||f| _        d S )Ngreedyfixedpaddedzbytes (,)bytes)hintr   r   z must set nbytes when setting pad)appendjoinsuper__init__len
__nbytes__r   )selfr   r   r   descriptions	__class__s        N/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/bytes.pyr    zBytesX.__init__   s     <~ (z 'y .##H---6SXXl33666DG,,,CHH!!!!!!!!!!NsNN-ONNN ckr   c                     | j         d         S )z	Pad byte.r   )r   )r#   s    r&   r   z
BytesX.pad-   s     {1~r   bufferoffsetdumpc                 `   ||                      ||||          S | j        \  }}||}|*t          ||d                    }|t          |          z  }nW|}||z  }t          |||                   }t          |          |k     rt	          d          |r|                    |          }||fS )Nzinsufficient bytes)__unpack_and_dump__r   r   r!   r   rstrip)	r#   r(   r)   r*   r   nbytes_xr   valuestarts	            r&   
__unpack__zBytesX.__unpack__2   s     ++FFD&III#>F>&/**Ec%jj FFEfF&v.//E5zzF""-.BCCC *S))f}r   c                    | j         \  }}||}	 t          ||||          \  }}n# t          $ r d                    d |D                       }|d d = t	          dt          |          d          D ]K}|||dz            }	|                    d| d|t          |	          z    dt          |	          |	           L w xY w|-|r+|                    |          }||t          |          z
  z  }nd}d|_	        |rkt	          dt          |          d          D ]K}|||dz            }	|                    d| d|t          |	          z    dt          |	          |	           Ln$|                    d	t          |          
           t	          dt          |          d          D ]4}|||dz            }	|                    dt          |	          |	           5||fS )Nr   c              3   $   K   | ]}|j         V  d S N)memory).0subdumps     r&   	<genexpr>z-BytesX.__unpack_and_dump__.<locals>.<genexpr>`   s$      @@W^@@@@@@r   r      [:]accessr/   r5   [0:0]r>   r/   --pad--)
r   r	   r   r   ranger!   
add_recordreprr-   r5   )
r#   r(   r)   r*   r   r.   r   r/   ichunks
             r&   r,   zBytesX.__unpack_and_dump__R   s[    #>F	$VVT6BBME66& 	 	 	 HH@@4@@@@@EQQQ1c%jj"--  a!b&j)4q441s5zz>444u++       
 	 #LL%%E#e**,-CCC 		?1c%jj"--  a!b&j)4q441s5zz>444u++        OO7$u++O>>>q#c((B'' 	 	AAF
OEOO 5kk      f}s
   & BC r/   piecesc                    ||                      |||           d S | j        \  }}t          |          }|>t          |          }|r||k     r||||z
  z  z  }n||k    rt	          d| d|           |                    |           d S )Nexpected length to be  but instead found )__pack_and_dump__r   r   r!   
ValueErrorr   )r#   r/   rG   r*   r   r   pieceactual_nbytess           r&   __pack__zBytesX.__pack__   s     ""5&$77777 +KFC%LLE! #E

 =611SF]$:;;EE"f,,$[[[M[[   MM%     r   c           
         | j         \  }}t          |          }t          |          }|r^t          d|d          D ]K}|||dz            }	|                    d| d|t          |	          z    dt          |	          |	           Ln$|                    dt          |                     |i|rg||k     ra|||z
  z  }||z  }t          dt          |          d          D ]4}|||dz            }	|                    d	t          |	          |	           5n|||k    rt          d
| d|           |                    |           d S )Nr   r9   r:   r;   r<   r=   r?   r@   rA   rI   rJ   )r   r   r!   rB   rC   rD   rL   r   )
r#   r/   rG   r*   r   r   rM   rN   rE   rF   s
             r&   rK   zBytesX.__pack_and_dump__   s    keE

 		?1mR00  a!b&j)4q441s5zz>444u++        OO7$u++O>>>#-&*@*@-/0CSLE1c#hh++  ABJ$u++        MV$;$;SSSMSS   	er   )Nr   N)NNr4   )__name__
__module____qualname____doc__r   r   intr   __annotations__r   strr    propertyr   r
   r1   r,   	bytearrayr   rO   rK   __classcell__)r%   s   @r&   r   r      s"        %T	"E)**** !%"	" "" " sm	"
 
" " " " " "2 U    X "& $   v	
  
ucz	   B QU3 33%(3063@H3	ucz	3 3 3 3r "&	! !UI%&! U! v	!
 
! ! ! !6(UI%&( U( 	(
 
( ( ( ( ( ( ( (r   r   N)rT   typingr   r   r   r   	_getbytesr	   r*   r
   
exceptionsr   	transformr   r    r   r&   <module>r`      s      / / / / / / / / / / / /             / / / / / /            | | | | |Y | | | | |r   