
    "fY                         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 ddlmZmZ dd	lmZ  G d
 de          ZdS )z:Sized object to bytes and bytes to sized object transform.    )AnyListOptionalTuple   )getbytes)Format)IntX)Record)ExcessMemoryErrorInsufficientMemoryError)	Transformc                   p    e Zd ZU dZeeeeee	f         e
d<   	 	 	 	 ddede	d	ed
ededee         ddf fdZedefd            Zedefd            Zede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 xZS )SizedXa1  Sized object to bytes and bytes to sized object transform.

    :param fmt: object format
    :param size_fmt: size format
    :param int ratio: number of bytes per increment of size member
    :param int offset: difference in size (in bytes)
    :param size_access: dump access description for size

    	__forss__r   r   --size--Nfmtsize_fmtratiooffsetsize_accessnamereturnc                     |j         }|d| }t                                          ||           |||||f| _        d S )Nzsized: )__hint__super__init__r   )	selfr   r   r   r   r   r   hint	__class__s	           N/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/sized.pyr   zSizedX.__init__   sN     |<#T##Dt$$$fe[(B    c                     | j         d         S )zSized object format.r   r   r   s    r!   r   z
SizedX.fmt1        ~a  r"   c                     | j         d         S )zDifference in size (in bytes).r   r$   r%   s    r!   r   zSizedX.offset6   r&   r"   c                     | j         d         S )z&Number of bytes per increment of size.   r$   r%   s    r!   r   zSizedX.ratio;   r&   r"   c                     | j         d         S )z@Description to list in access column for size (e.g. "--size--").   r$   r%   s    r!   r   zSizedX.size_access@   r&   r"   c                     | j         d         S )zSize format.   r$   r%   s    r!   r   zSizedX.size_fmtE   r&   r"   valuepiecesdumpc                    | j         \  }}}}}|d }	d }
n-|                    ||          }	|                    |          }
g }	 |                    |||
           ||
||
d d          z  }g |
d d <   n# ||
||
d d          z  }g |
d d <   w xY wt          t	          d                    |                    |z            |z   }|                    |||	           ||z  }d S )Naccessr   r   r"   )r   
add_record__pack__intlenjoin)r   r.   r/   r0   r   r   r   r   r   size_recordobject_recordobject_piecessizes                r!   r6   zSizedX.__pack__J   s(    59N1VUK<K MM//(/KKK OOO44M%'	&LL}===M$=aaa((#%aaa  M$=aaa((#%aaa %%%%3sxx..//5899FB$444-s   A5 5Bbufferc           	      "   | j         \  }}}}}|d }	d }
n-|                    ||          }	|                    |          }
|                    |||	          \  }}t          ||z
  |z            }||z   }|d |         }	 t	          |          |k     r#|
t          d          t          |||
|           |                    |||
          \  }}||d          }|ry|
ht          dt	          |          d          D ]I}|r"|
                    |||dz                       &|
                    dd|||dz            	           Jt          |          	 ||
||
d d          z  }g |
d d <   n# ||
||
d d          z  }g |
d d <   w xY w||fS )
Nr2   r4   znot enough buffer bytesr      )memoryTz<excess bytes>)separater.   rA   )	r   r5   
__unpack__r7   r8   r   r   ranger   )r   r>   r   r0   r   size_offsetr   r   r   r:   r;   r=   nbytesendobject_bufferr.   extra_bytesis                     r!   rC   zSizedX.__unpack__e   s!    :>6[%h<K MM//(/KKK OOO44M**66;GGfd[(E122vott	&=!!C'' (12KLLL???NN=&-PPME6'0K 5 ,"1c+&6&6;;   )44KAPRF
<S4TTTT)44)-&6'21q2v:'> 5     (4445 M$=aaa((#%aaa  M$=aaa((#%aaa %%%%f}s   CE0 0F
)r   r   r   N)N)__name__
__module____qualname____doc__r   r	   r7   floatstrr
   __annotations__r   r   propertyr   r   r   r   r   r   r   bytesr   r6   rC   __classcell__)r    s   @r!   r   r      s)          VS%d23333 %"C CC C 	C
 C C smC 
C C C C C C& !V ! ! ! X! ! ! ! ! X! !u ! ! ! X! !S ! ! ! X! !$ ! ! ! X!
 IM    "&u+ 5=f5E 	       8 DH3 33%(3080@3	sCx3 3 3 3 3 3 3 3r"   r   N)rN   typingr   r   r   r   	_getbytesr   _typingr	   r7   r
   r0   r   
exceptionsr   r   	transformr   r    r"   r!   <module>r[      s    A @ - - - - - - - - - - - -                         B B B B B B B B            H H H H HY H H H H Hr"   