
    #)di]                     (   d Z ddlmZ ddlZddlZ	 e n# eef$ r eZY nw xY wdZ	ddZ
ddZ G d d	ej                  Z G d
 dej                  Z G d dej                  Z G d deej                  Z G d deej                  Zd ZdS )aL  Python 'hex' Codec - 2-digit hex with spaces content transfer encoding.

Encode and decode may be a bit missleading at first sight...

The textual representation is a hex dump: e.g. "40 41"
The "encoded" data of this is the binary form, e.g. b"@A"

Therefore decoding is binary to text and thus converting binary data to hex dump.

    )absolute_importN0123456789ABCDEFstrictc                     t          j        d |                                 D                       t          |           fS )'40 41 42' -> b'@ab'c                 .    g | ]}t          |d           S    int.0hs     a/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/serial/tools/hexlify_codec.py
<listcomp>zhex_encode.<locals>.<listcomp>(   s     >>>ASBZZ>>>    )serialto_bytessplitlendataerrorss     r   
hex_encoder   &   s4    O>>>>>??TKKr   c                     t          d                    d t          j        |           D                                 t	          |           fS )b'@ab' -> '40 41 42' c              3   Z   K   | ]&}d                      t          |                    V  'dS z{:02X} Nformatordr   bs     r   	<genexpr>zhex_decode.<locals>.<genexpr>-   s6      UUI,,SVV44UUUUUUr   )unicodejoinr   	iterbytesr   r   s     r   
hex_decoder)   +   sE    BGGUUf>Nt>T>TUUUUUVVX[\`XaXabbr   c                       e Zd ZddZddZdS )Codecr   c                 b    t          j        d |                                D                       S )r   c                 .    g | ]}t          |d           S r	   r   r   s     r   r   z Codec.encode.<locals>.<listcomp>3   s     AAAqAr

AAAr   )r   r   r   selfr   r   s      r   encodezCodec.encode1   s)    AADJJLLAAABBBr   c                 ~    t          d                    d t          j        |          D                                 S )r   r   c              3   Z   K   | ]&}d                      t          |                    V  'dS r   r    r#   s     r   r%   zCodec.decode.<locals>.<genexpr>7   6      XXAy//A77XXXXXXr   r&   r'   r   r(   r.   s      r   decodezCodec.decode5   s7    rwwXXAQRVAWAWXXXXXYYYr   Nr   )__name__
__module____qualname__r0   r5    r   r   r+   r+   0   sF        C C C CZ Z Z Z Z Zr   r+   c                   4    e Zd ZdZd
dZd Zd Zd ZddZd	S )IncrementalEncoderzIncremental hex encoderr   c                 "    || _         d| _        d S Nr   )r   state)r/   r   s     r   __init__zIncrementalEncoder.__init__=   s    


r   c                     d| _         d S r>   r?   r/   s    r   resetzIncrementalEncoder.resetA   s    


r   c                     | j         S NrB   rC   s    r   getstatezIncrementalEncoder.getstateD   s
    zr   c                     || _         d S rF   rB   )r/   r?   s     r   setstatezIncrementalEncoder.setstateG   s    


r   Fc                    | j         }g }|                                D ]}|t          v rCt                              |          }|r|                    ||dz  z              d}Ed|dz  z   }N|dk    r|r| j        dk    rt          d          d}s| j        dk    r"t          d                    |                    || _         t          j	        |          S )	z        Incremental encode, keep track of digits and emit a byte when a pair
        of hex digits is found. The space is optional unless the error
        handling is defined to be 'strict'.
           r          r   zodd number of hex digitsznon-hex digit found: {!r})
r?   upper	HEXDIGITSindexappendr   UnicodeErrorr!   r   r   )r/   r   finalr?   encodedczs          r   r0   zIncrementalEncoder.encodeJ   s     
 	N 	NAI~~OOA&& -NN1#5666EE!Q!V,EEc CT[H44&'ABBB;(**&'B'I'I!'L'LMMM +
w'''r   Nr6   F)	r7   r8   r9   __doc__r@   rD   rG   rI   r0   r:   r   r   r<   r<   :   so        !!         ( ( ( ( ( (r   r<   c                       e Zd ZdZddZdS )IncrementalDecoderzIncremental decoderFc                 ~    t          d                    d t          j        |          D                                 S )Nr   c              3   Z   K   | ]&}d                      t          |                    V  'dS r   r    r#   s     r   r%   z,IncrementalDecoder.decode.<locals>.<genexpr>h   r3   r   r4   )r/   r   rT   s      r   r5   zIncrementalDecoder.decodeg   s7    rwwXXAQRVAWAWXXXXXYYYr   NrX   )r7   r8   r9   rY   r5   r:   r   r   r[   r[   e   s4        Z Z Z Z Z Zr   r[   c                       e Zd ZdZdS )StreamWriterz-Combination of hexlify codec and StreamWriterNr7   r8   r9   rY   r:   r   r   r_   r_   k           7777r   r_   c                       e Zd ZdZdS )StreamReaderz-Combination of hexlify codec and StreamReaderNr`   r:   r   r   rc   rc   o   ra   r   rc   c            	      t    t          j        dt          t          t          t
          t          t                    S )zencodings module APIhexlify)namer0   r5   incrementalencoderincrementaldecoderstreamwriterstreamreader)codecs	CodecInfor   r)   r<   r[   r_   rc   r:   r   r   getregentryrm   s   s1    --!!	 	 	 	r   r6   )rY   
__future__r   rk   r   r&   	NameErrorAttributeErrorstrrP   r   r)   r+   r<   r[   r_   rc   rm   r:   r   r   <module>rr      s  
 
 ' & & & & &  GG>"   GGG 	
L L L L
c c c c
Z Z Z Z ZFL Z Z Z(( (( (( (( ((2 (( (( ((VZ Z Z Z Z2 Z Z Z8 8 8 8 85&- 8 8 88 8 8 8 85&- 8 8 8    s    	!!