
    "f7                         d Z ddlm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  G d
 de          ZdS )z:Integer flag to bytes and bytes to integer flag transform.    )IntFlag)ListOptionalTupleType   )getbytes)ByteOrderHint)Record)InsufficientMemoryError)	Transformc                   D    e Zd ZU dZeeee         ef         e	d<   	 	 ddee         dedede
e         d	df
 fd
Zed	efd            Zed	e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eded	dfdZ xZS )FlagXzBFlag Enumeration to bytes and bytes to flag enumeration transform.__ben__littleNenumnbytes	byteordernamereturnc                     |1d                     d |j        D                       }|j         d| d}t                                          ||j                   |dk    sJ |dv sJ || _        |||f| _        d S )Nz, c                     g | ]	}|j         
S  )__name__).0bs     M/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/flag.py
<listcomp>z"FlagX.__init__.<locals>.<listcomp>   s    #G#G#G1AJ#G#G#G    z ())hintr   >   bigr   )join	__bases__r   super__init__
__nbytes__r   )selfr   r   r   r   
base_names	__class__s         r   r&   zFlagX.__init__   s     <#G#G#G#G#GHHJm44z444DDM222zzzz-----  $.r   c                     | j         \  }}}|S )zByte order ("little" or "big").r   )r(   r   _enum_nbytess       r   r   zFlagX.byteorder)   s     %)L!	5'r   c                     | j         \  }}}|S )zInteger flag enumeration.r,   )r(   
_byteorderr   r.   s       r   r   z
FlagX.enum/   s     %)L!
D'r   valuepiecesdumpc                    | j         \  }}}|3|                    t                              |||d                     d S 	 t          |          }t                              |||d          }||_        |                     ||           n## t          $ r t          |          |_         w xY w|                    |           d S )NFsigned)	r   appendintto_bytesmemory_add_flags_to_dump	Exceptionreprr1   )	r(   r1   r2   r3   r   r-   r   	int_valuepieces	            r   __pack__zFlagX.__pack__5   s     $(< 	5&<MM#,,ufi,NNOOOOOJJ	Y	%PP#''	48888   !%[[

 MM%     s   A
B  B-bufferoffsetc                    | j         \  }}}|W||z   }t          |          |k     rt          d           |t                              |||         |d                    |fS t          ||||          \  }}t                              ||d          }	 ||	          }
|
|_        |                     |	|           |
|fS )Nztoo few bytes to unpackFr5   )r   lenr   r8   
from_bytesr	   r1   r;   )r(   rA   rB   r3   r   r   r   endr?   r>   r1   s              r   
__unpack__zFlagX.__unpack__L   s     #',	4<6/C6{{S  -.GHHH S^^F6#:$6	%^PPQQ 
 !v>>vNN5)ENBB	Y
	4000f}r   c           	          | j         \  }}}||_        |D ]X}|j        pd}|                    |t	          |                                dz
            dft          ||z            d           Yd S )Nunlikelyr   bool)accessbitsr1   fmt)r   r1   r   
add_recordr8   
bit_lengthrJ   )r(   r1   r3   r0   r   r.   membermember_names           r   r;   zFlagX._add_flags_to_dumph   s    $(L!
D'
 	 	F +3KOO"&++--122A656>**	     	 	r   )r   N)N)r   
__module____qualname____doc__r   r
   r   r   r8   __annotations__r   strr&   propertyr   r   r   bytesr   r@   rG   r;   __classcell__)r*   s   @r   r   r      s        LL=$w-45555 $,"/ /7m/ / !	/
 sm/ 
/ / / / / /& =    X
 d7m    X IM! !!"&u+!5=f5E!	! ! ! !0 DH %(080@	w|	   8 6 d        r   r   N)rT   r   r   typingr   r   r   r   	_getbytesr	   _typingr
   r3   r   
exceptionsr   	transformr   r   r   r   r   <module>r_      s    A @       . . . . . . . . . . . .       " " " " " "       / / / / / /            d d d d dI d d d d dr   