
    "f'                         d Z ddlmZ ddlmZmZmZmZmZ  G d de	          Z
 G d de
          Z G d d	e
          Zd
S )zPack/unpack bytes summary.    )Enum)Any	GeneratorListTupleUnionc                   t    e Zd ZdZ	 	 	 	 	 	 ddededeeeef         df         d	e	d
ede
ddfdZded	e	fdZdS )BasezDump/Record Base class. N    FaccessvaluebitsmemoryfmtseparatereturnRecordc                 X    t          ||||||          }|                     |           |S )a?  Add child record.

        :param access: access description
        :param value: representation of value associated with bytes
        :param bits: start, end bit offset (None -> not a bit field)
        :param memory: bytes
        :param fmt: bytes format
        :param separate: add separator before row

        )r   append)selfr   r   r   r   r   r   records           M/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/dump.py
add_recordzBase.add_record   s2    ( tVS(CCFr   c                     t          dt          |          d          D ]&}|                     ||||dz                       d}'dS )zAdd records listing bytes without access/value descriptions.

        :param access: access description
        :param memory: memory bytes

        r      )r   r   r   N)rangelenr   )r   r   r   is       r   add_extra_byteszBase.add_extra_bytes&   sY     q#f++r** 	 	AOO6&QV2DOEEEFF	 	r   r   r   Nr   r   F)__name__
__module____qualname____doc__strr   r   r   intbytesboolr   r     r   r   r
   r
   
   s        !! -1   E#s(OT)*	
    
   0	c 	5 	 	 	 	 	 	r   r
   c                   h    e Zd ZdZ	 	 	 	 	 	 ddededeeeef         df         d	e	d
ede
ddf fdZd Z	 ddedeeed f         ddf         fdZedefd            Zedefd            Zej        deddfd            Zedefd            Zej        deddfd            Zed             Z xZS )r   a1  Pack/unpack bytes summary.

    :param access: access description
    :param value: representation of value associated with bytes
    :param bits: start, end bit offset (None -> not a bit field)
    :param memory: memory bytes
    :param fmt: class name
    :param separate: add separator before row

    r   Nr   Fr   r   r   r   r   r   r   c                     t                                                       || _        || _        || _        || _        || _        || _        d S N)super__init__r   _value_bitsr   r   r   )r   r   r   r   r   r   r   	__class__s          r   r/   zRecord.__init__A   sI     	
 r   c                 x    d| j         d| j        d| j         d| j         d| j         dt          |            dS )NzRecord(bits=z	, access=z, value=z	, memory=z, fmt=z
, records=))r   r   r   r   r   listr   s    r   __repr__zRecord.__repr__T   sw    %I% %k% % Z% % k	% %
 8% % Dzz% % %	
r   r   indentc              #   \   K   || fV  | D ] }|                     |dz             E d{V  !dS )zIterate dump records.   Niter_records)r   r8   r   s      r   r<   zRecord.iter_records_   s^       dl 	7 	7F**6A:6666666666	7 	7r   c                 `    | j         d}n#| j         \  }}|dk    rd| d}nd| d||z    d}|S )zBit field representation.Nr   r:   []:)r1   )r   r   lsbsizes       r   r   zRecord.bitsg   sW     :DD
ICqyy!3zzz.3..t...r   c                     t          | j        t                    r6t          | j                                      dd          d         dd         S t          | j                  S )Value representation.r@   r:   r   N)
isinstancer0   r   reprsplitr&   r6   s    r   r   zRecord.valuev   sV     dk4(( 	:$$**32215abb994;r   c                     || _         dS )rD   N)r0   r   r   s     r   r   zRecord.value   s     r   c                     | j         S )zEntry format.)_fmtr6   s    r   r   z
Record.fmt   s     yr   c                     t          |t                    s?t          |d          r|j        }n't          |d          r|j        }nt          |          }|| _        d S )Nnamer"   )rE   r&   hasattrrM   r"   rK   rI   s     r   r   z
Record.fmt   s`    %%% 	#uf%% #

++ #E

			r   c                 n    t          d | j        | j        | j        fD                       o
| j        dk    S )z3Has blank access, value, memory, and format fields.c              3   "   K   | ]
}|d k    V  dS )r   Nr*   ).0xs     r   	<genexpr>z"Record.is_blank.<locals>.<genexpr>   s&      GGARGGGGGGr   r   )allrK   r   r0   r   r6   s    r   is_blankzRecord.is_blank   s?     GG$)T[$+!FGGGGG #s"	
r   r!   r   )r"   r#   r$   r%   r&   r   r   r   r'   r(   r)   r/   r7   r   r<   propertyr   r   setterr   rU   __classcell__r2   s   @r   r   r   2   s       	 	 -1! !! ! E#s(OT)*	!
 ! ! ! 
! ! ! ! ! !&	
 	
 	
 7 77	5h't3	47 7 7 7 c    X  s       X  \3 4    \ S    X 	Z     Z 
 
 X
 
 
 
 
r   r   c                        e Zd ZdZddeddf fdZd ZddZdee	ed	f         ddf         fd
Z
edee         fd            Zdee         fdZdeeddf         fdZdefdZd Z xZS )DumpzGPack/unpack bytes summary.

    :param offset: master byte offset

    r   offsetr   Nc                 V    t                                                       || _        d S r-   )r.   r/   r]   )r   r]   r2   s     r   r/   zDump.__init__   s$    !r   c                 (    dt          |            dS )NzDump(r4   )r5   r6   s    r   r7   zDump.__repr__   s    $tDzz$$$$r   c                 $    t          |            d S r-   )printr6   s    r   __call__zDump.__call__   s    dr   r   c              #   H   K   | D ]}|                                 E d{V  dS )z2Iterate dump records, yield (level, record) pairs.Nr;   )r   r   s     r   r<   zDump.iter_records   sF       	- 	-F**,,,,,,,,,,	- 	-r   c                 X   d}g }| D ]!}|j         }|rE|                    d                    d |D                                  t          |          dz  }Q|j        |                    d           n|j        }dg|z  }|j        \  }}|r?	 t          |dz            ||<   n# t          t          f$ r Y nw xY w|dz  }|dz  }|dz  }|?|	                                 t          |dz
  dd          D ]
}	dg||	|	<   |                    d                    |                     #|S )	Nr    c              3   @   K   | ]}d                      |          V  dS )z{:02x}Nformat)rQ   cs     r   rS   z/Dump._get_bytes_column_cells.<locals>.<genexpr>   s.      %I%IQhooa&8&8%I%I%I%I%I%Ir      r   .r:   i)r   r   joinr   r1   r0   r&   
IndexError	TypeErrorreverser   )
recordsbitfield_sizecellsr   r   r   charsr]   rB   r   s
             r   _get_bytes_column_cellszDump._get_bytes_column_cells   sw    	- 	-F]F -SXX%I%I&%I%I%IIIJJJ #Fa%R    -%| 	(+EAIf&	2     aKEaKFAID  	 }q0!R88 ' 'A"%E!A#JJRWWU^^,,,,s   B%%B98B9c                 0   d |D             }t          |          r*dt          d |D                       z  fd|D             }t          d |D                       }dt          t	          || j        z                       z  }dt          t	          |                    z  }d}g }t          ||          D ][\  }}	|j        r5|                    | j        |z             }
|t          |j                  z  }n|}
|	                    |
|	z              \|S )	Nc                     g | ]	}|j         
S r*   )r   rQ   r   s     r   
<listcomp>z1Dump._get_offset_column_cells.<locals>.<listcomp>   s    222222r   z{:%ds}c              3   4   K   | ]}t          |          V  d S r-   r   )rQ   	bits_descs     r   rS   z0Dump._get_offset_column_cells.<locals>.<genexpr>   s(       F FIY F F F F F Fr   c                 :    g | ]}                     |          S r*   rg   )rQ   r{   r   s     r   rx   z1Dump._get_offset_column_cells.<locals>.<listcomp>   s%    @@@iCJJy))@@@r   c              3   >   K   | ]}t          |j                  V  d S r-   )r   r   rw   s     r   rS   z0Dump._get_offset_column_cells.<locals>.<genexpr>   s,      >>FS''>>>>>>r   z{:%dd}re   r   )
anymaxsumr   r&   r]   zipr   rh   r   )r   rp   r   nbytesoffset_templatefillerconsumedoffsetsr   r{   byte_offsetr   s              @r   _get_offset_column_cellszDump._get_offset_column_cells   s>   22'222 t99 	AS F F F F FFFFC@@@@4@@@D >>g>>>>>"SVdk-A)B)B%C%CCs3v;;'''!$Wd!3!3 	4 	4FI} %-44T[85KLLC...$NN;23333r   c              #     K   t          |           rt          |                                  \  }}ndt                      f}}d |D             }t	          d t          ||          D                       rt          d |D                       }dg|                     |          z   dgd |D             z   dg|                     |          z   d	gd
 |D             z   g}t          |          r$dgd t          ||          D             z   g|dd<   d |D             }d	                    d
                    d |D                                 }d	                    d
                    d |D                                 }t          t          |           }d |D             }	d|	d<   |V   |j	        |                    d           V  |V  t          ||	          D ]\  }
}|r|V   |j	        |
 V  |V  d S )NrV   c                 D    g | ]}|j                             d d          S )z(.)r   )r   replacerw   s     r   rx   z#Dump._get_lines.<locals>.<listcomp>   s*    KKKFM))%44KKKr   c              3   &   K   | ]\  }}|p| V  d S r-   r*   rQ   r8   r   s      r   rS   z"Dump._get_lines.<locals>.<genexpr>   s-      QQv#VQQQQQQr   c              3   (   K   | ]}|r|d z
  ndV  dS )r:   r   Nr*   )rQ   r8   s     r   rS   z"Dump._get_lines.<locals>.<genexpr>  s/      NNF&7FQJJaNNNNNNr   OffsetValuec                     g | ]	}|j         
S r*   )r   rw   s     r   rx   z#Dump._get_lines.<locals>.<listcomp>  s    <<<&<<<r   BytesFormatc                     g | ]	}|j         
S r*   )r   rw   s     r   rx   z#Dump._get_lines.<locals>.<listcomp>  s    ;;;&*;;;r   Accessc                 $    g | ]\  }}d |z  |z   S )z  r*   r   s      r   rx   z#Dump._get_lines.<locals>.<listcomp>  s%    WWWnff4&=6)WWWr   r:   c                 @    g | ]}t          d  |D                       S )c                 ,    g | ]}t          |          S r*   rz   )rQ   cells     r   rx   z.Dump._get_lines.<locals>.<listcomp>.<listcomp>  s    ;;;Dc$ii;;;r   )r   )rQ   columns     r   rx   z#Dump._get_lines.<locals>.<listcomp>  s/    SSS;;F;;;<<SSSr   z+{}++c              3   &   K   | ]}d |dz   z  V  dS )-   Nr*   rQ   ns     r   rS   z"Dump._get_lines.<locals>.<genexpr>  s*      'M'M!q1u'M'M'M'M'M'Mr   z|{}||c              3       K   | ]	}d |z  V  
dS )z {:%ds} Nr*   r   s     r   rS   z"Dump._get_lines.<locals>.<genexpr>  s&      -T-Tj1n-T-T-T-T-T-Tr   c                     g | ]	}|j         
S r*   )r   rw   s     r   rx   z#Dump._get_lines.<locals>.<listcomp>  s    <<<&fo<<<r   Fr   )r   r   r<   r   rT   tupler   rt   r~   rh   rl   r5   pop)r   indentsrp   accessescolumnscolumn_widthsborderrow_templaterows
separatorsrr   r   s               r   
_get_lineszDump._get_lines   sl     t99 	1"D$5$5$7$78GWW#fhh[WGKK7KKK QQ#gx:P:PQQQQQ 	ONNgNNNNNG J66w???I<<G<<<<I44W===J;;7;;;;
 x== 	
WWGX@V@VWWWXGAaCL
 TS7SSSsxx'M'M}'M'M'MMMNN}}SXX-T-Tm-T-T-T%T%TUUCM""<<G<<<

1!l!488A;;////"444 	. 	.OE8 %,%u-----r   c                 P    d                     |                                           S )N
)rl   r   r6   s    r   __str__zDump.__str__#  s    yy**+++r   c                 F    | d         }|j         r|dd         | dd<   dS dS )zERemove first record and move its child records up if nothing to show.r   N)rU   )r   first_records     r   trim_blank_recordzDump.trim_blank_record&  s9    Aw  	&"111oDGGG	& 	&r   rV   )r   N)r"   r#   r$   r%   r'   r/   r7   rb   r   r   r<   staticmethodr   r&   rt   r   r   r   r   rY   rZ   s   @r   r\   r\      sH        " "s "4 " " " " " "% % %   -ic8m(<dD(HI - - - -
 DI    \<49    01Ic4o6 1 1 1 1f, , , , ,& & & & & & &r   r\   N)r%   enumr   typingr   r   r   r   r   r5   r
   r   r\   r*   r   r   <module>r      s    !         5 5 5 5 5 5 5 5 5 5 5 5 5 5% % % % %4 % % %Pm
 m
 m
 m
 m
T m
 m
 m
`H& H& H& H& H&4 H& H& H& H& H&r   