
    "f                         d Z ddl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          Z G d de          ZdS )zBit fields data store type.    )DictOptional   )ByteOrderHint)DataMeta)CodeInjector   )BitField)	CodeMakerc                   >    e Zd ZU dZeed<   deddfdZdeddfdZdS )BlendedDefaultz2Fake BitFields type for calculating default value.valuereturnNc                     || _         d S N)r   )selfr   s     W/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/bitfields/meta.py__init__zBlendedDefault.__init__   s    


    bitfieldc                 v    |j         1|j        }|j        }| j        ||z   z  |j         |z  |z  z  | _        dS dS )zAdd bitfield default value.N)defaultmasklsbr   )r   r   r   r   s       r   addzBlendedDefault.add   sN    '=D,C*~5!D(S0DJJJ ('r   )	__name__
__module____qualname____doc__int__annotations__r   r
   r    r   r   r   r      si         <<JJJc d    H       r   r   c                        e Zd ZU dZeed<   eed<   eed<   eed<   	 	 	 	 	 	 ddee         dedededede	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 xZS )BitFieldsMetaz%Bit fields data store type metaclass.
__nested__
__ignore____byteorder____default__Nlittler   Fmost_to_leastnbytes	byteorderr   ignorenested
fieldorderc
           	         |dvrt          d          |	dvrt          d          i }
|                                D ]5\  }}t          |t                    s|                    |           ||
|<   6d}|	dk    r|
                                n-t          t          |
                                                    }|D ]}|j        ||_        |j	        |j
        z   } i }|
                                D ]N\  }}t          |j	        |j	        |j
        z             D ]&}||v rt          d|d||                   |||<   'O|
r4t          d	 |
                                D                       }|d
z   dz  }nd}||}n(t          |          }||k     rt          d| d          d|dz  z  dz
  }t          |          }d|cxk    r|k    sn t          d|d          t          |          }|
                                D ]}|                    |           t          |          }d|cxk    r|k    sn t          d|d          |
                                D ]M}|j        r||j        |j	        z  z  }t          |j        t(                    r||j        j        |j	        z  z  }N|dk    rdn| d|d<   ||d<   ||z  |z  |d<   |
|d<   |j        |d<   d |
                                D             |d<   ||d<   ||d<   ||d<   t/          |          |d<   t1          |          }t3          |
                                          }t          |                    ||j        |                    }|                    |           |                    |           d                    |          |d <   t=                                          | |||          S )!N>   bigr)   z*byteorder must be either "big" or "little">   least_to_mostr*   z<fieldorder must be either "least_to_most" or "most_to_least"r   r2   z
bit field z overlaps with c              3   4   K   | ]}|j         |j        z   V  d S r   )r   size).0fields     r   	<genexpr>z(BitFieldsMeta.__new__.<locals>.<genexpr>g   s+      NNU%)ej0NNNNNNr         r	   znbytes must be at least z for bitfields specifiedz"default must be: 0 <= number <= 0xxz!ignore must be: 0 <= number <= 0x	BitFieldsz (BitFields)__format_name__r'   __compare_mask__
__fields__r(   c                 &    h | ]\  }}|j         |S r   )r   )r5   namer6   s      r   	<setcomp>z(BitFieldsMeta.__new__.<locals>.<setcomp>   s*     1
 1
 1
 T5em6OD6O6O6Or   __fields_with_defaults__r&   __max__
__nbytes__r%   
__implementation__) 
ValueErroritems
isinstancer
   finish_initializationvaluesreversedlist_lsbr   r4   range	TypeErrormaxr    r   r   r-   r   typr$   r&   r   boolr   r   
iter_linesupdate_scriptexecute_linesjoinsuper__new__)mcsr@   bases	namespacer+   r,   r   r-   r.   r/   fields	fieldnamer   r   field_propertiesr6   claimed_bitsinumbitsnbytes_neededmax_blended_defaultcode_injector
code_makerlines	__class__s                            r   rY   zBitFieldsMeta.__new__*   s    ---IJJJ???N   #,??#4#4 	) 	)Ixh11 **9555 (F9  _,, MMOOO$v}}//00 	
 & 	) 	)Ez! 
)ej(CC (* & 	, 	,Iu59ei%*&<== , ,$$#TYTTaTT   #,Q,  	NNfmmooNNNNNG$q[Q.MMM>"FF[[F%%V}VVV   fqj!Q& g,,G####t####J$JJJKKK(11]]__ 	' 	'E&&&& VF""""d""""IIIIJJJ]]__ 	< 	<E| <%*	11EI}55 <%).%);;  ;..KKt4I4I4I 	#$ &/	/")-$(>	$%"(	,#2#8	- 1
 1
$*LLNN1
 1
 1
	,- #)	,#	)"(	,"&v,,	,$Y//v}}//
Z**9o6KVTTUU##E***##E****.))E*:*:	&' wwsD%;;;r   r   c                     | j         S )zByte order ("little" or "big").)r'   clss    r   r,   zBitFieldsMeta.byteorder   s       r   c                     | j         S )zDefault integer basis.)r(   rk   s    r   r   zBitFieldsMeta.default   s     r   c                     | j         S )z/Mask for bits to ignore (e.g. 2 ignores bit 1).)r&   rk   s    r   r-   zBitFieldsMeta.ignore        ~r   c                     | j         S )z+Supports being nested in another bitfields.)r%   rk   s    r   r.   zBitFieldsMeta.nested   ro   r   )Nr)   r   r   Fr*   )r   r   r   r   rS   r!   r    r   r   strrY   propertyr,   r   r-   r.   __classcell__)ri   s   @r   r$   r$   !   su        //OOO     !%#+)~< ~<
 ~< !~< ~< ~< ~< ~< ~< ~< ~< ~< ~<@ !- ! ! ! X!     X s    X t    X    r   r$   N)r   typingr   r   _typingr   datar   _code_injectorr   r   r
   rg   r   r   r$   r"   r   r   <module>rx      s    " ! ! ! ! ! ! ! ! ! # # # # # #       ) ) ) ) ) )       ! ! ! ! ! !       &[ [ [ [ [H [ [ [ [ [r   