
    "f)                         d Z ddl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
Zd Zd ZddZd Zd Z G d de          ZdS )zInterpret bytes as a string.    N)ListOptionalTupleUnion   )getbytes)Record)InsufficientMemoryError)	TransformFc                 8   d}t          |           D ]p\  }}|rg }|                    d|g           d}|r|dk    r nE|                    | ||dz                      }|                    |           |r||d         d<   d}q|                    dd           d S )	NT Fr   r       final)	enumerateappenddecode)	bufferdecoderzipped_char_byteszero_terminationresetibyte
char_byteschars	            L/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/str.py_decode_str_bytesr      s    EV$$  4 	J$$b*%5666E 			E~~fQQY/00$ 	'+b!!$E NN3dN#####r   c                     | D ],}|                     ||                    |          f           -|                    dd          rJ d S )Nr   Tr   )r   encode)stringencoderr   r   s       r   _encode_str_bytesr$   &   s[     ? ?  $t(<(<!=>>>>~~b~-------r   c              #     K   d}g g }}| D ]\  }}t          |          t          |          z   dk    r=|d                    |          t          |          fV  |t          |          z  }g g }}|                    |           ||z  }|r)|d                    |          t          |          fV  d S |dt                      fV  d S )Nr      r   )lenjoin	bytearrayr   )r   	row_index	row_chars	row_bytesr   r   s         r   _iter_str_rowsr-   -   s      IryI-    jz??S^^+b00RWWY//91E1EEEEEY'I#%ryIZ		 )++Yy-A-AAAAAAAY[[((((((r   c           
         d}d}t          |          D ]f\  }}}|                     d| d|t          |          z    dt          |          |           |t          |          z  }|t          |          z  }g|r|                     d||d                     |ra||d          }d}	t          dt          |          d          D ]8}
t          ||
|
dz                      |                     |	          _        d}	7d S d S )	Nr   [:])accessvaluememoryz	--error--r&   r   )r-   
add_recordr'   repradd_extra_bytesranger3   )dumpr   r   r"   nbytesncharindexcharsbytes_r2   r   s              r   _add_str_rows_to_dumpr?   @   s;   FE ./@ A A  uf4u44us5zz1444DKKPV 	 	
 	
 	
 	#f++U ;[&/::: q#f++r** 	 	A,0AF
1C,D,DDOOF##)FF 	 	r   c                     g }	 t          |||           t          | ||           d S # t          | ||           w xY w)Nr   )r   r?   )r9   r   r   r   s       r   _add_str_bytes_to_dumprB   U   Z    F&'+<===d$5fEEEEEEd$5fEEEEE   ) =c                     g }	 t          |||           t          | ||           d S # t          | ||           w xY w)N)r"   )r$   r?   )r9   r"   r#   r   s       r   _add_str_value_to_dumprF   ]   rC   rD   c                       e Zd ZdZ	 	 	 	 	 ddededeedf         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	 ddedede	e         deeef         fdZdedededeeef         fdZ	 ddedee         de	e         ddfdZdedee         deddfdZ xZS )StrXz.String to bytes and bytes to string transform.strictNr   Fencodingerrorsr:   padr   namereturnc                     t          |          dk    sJ |d| d}t                                          |d           t          j        |          }|| _        |||||f| _        d S )Nr   zstr ()str)hint)r'   super__init__codecslookup
__nbytes__	__cenpz__)	selfrJ   rK   r:   rL   r   rM   codecs_info	__class__s	           r   rT   zStrX.__init__i   sw     3xx1}}}}<&8&&&DE***mH-- $ffc;KKr   c                 *    | j         d         }|j        S )zCodecs encoding name.r   )rX   rM   )rY   rZ   s     r   rJ   zStrX.encoding   s     nQ'r   c                     | j         d         S )zCodecs error handling.r   rX   rY   s    r   rK   zStrX.errors        ~a  r   c                     | j         d         S )z	Pad byte.   r^   r_   s    r   rL   zStrX.pad   r`   r   c                     | j         d         S )zZero termination byte present.   r^   r_   s    r   r   zStrX.zero_termination   r`   r   r   offsetr9   c                    ||                      |||          S | j        \  }}}}}|}	|||d          }
|t          |
          z  }n3|}||z  }|||         }
t          |
          |k     rt          d          |r|                    |          }g }t          |
||d           t          d                    d |D                                 }|
||dz            }|dk    rd}||	|z   t          |          z   }|dk    rt          d          d	                    d
 |D                       }n9|r!||
v r|
d |
                    |                   }
t          |
|j	        |          }||fS )Nz.insufficient bytes for String, retry with dumpTr   r   c              3   :   K   | ]\  }}t          |          V  d S Nbytes.0cbs      r   	<genexpr>z"StrX.__unpack__.<locals>.<genexpr>   ,      (P(Pdaq(P(P(P(P(P(Pr   r       no zero termination presentr   c              3       K   | ]	\  }}|V  
d S ri    rl   s      r   rp   z"StrX.__unpack__.<locals>.<genexpr>   &      <<$!QA<<<<<<r   )
__unpack_and_dump__rX   r'   r
   incrementaldecoderr   r(   r<   rQ   rM   )rY   r   re   r9   rZ   rK   r:   rL   r   original_offsetchunkstartr   r   nstr_membytesterminationr3   s                    r   
__unpack__zStrX.__unpack__   s    ++FFDAAA=A^:VVS*: >677OEc%jj FFEfF5<(E5zzF""-D    	9!44V<<G9;eW.?RVWWWW(P(P>O(P(P(P P PQQM0A ABKg%%!~(=83{;K;KKg%%-.KLLLGG<<*;<<<<<EE  2se||0C 0 001{/88Ef}r   c                 4   | j         \  }}}}}|}	t          ||||          \  }
}|rV|                    |          }d|_        g }	 t	          |
||d           n!# t
          $ r t          |||
            w xY wt          d                    d |D                                 }|
||dz            }|dk    r|
|dz   d          }n|
|d          }d}||	|z   t          |          z   }d}t          ||           |r$|	                    dt          |          	           |r#|                    d
t          |                     |dk    rt          d          d                    d |D                       }n|r.||
v r*|
                    |          }|
|d          }|
d |         }
nd}d|_        t          ||
|                    |                     |r#|                    d
t          |                     t          |
|j        |          }||fS )Nr   Trg   rA   c              3   :   K   | ]\  }}t          |          V  d S ri   rj   rl   s      r   rp   z+StrX.__unpack_and_dump__.<locals>.<genexpr>   rq   r   r   rr   --termination--)r2   r4   --pad--rs   r   c              3       K   | ]	\  }}|V  
d S ri   ru   rl   s      r   rp   z+StrX.__unpack_and_dump__.<locals>.<genexpr>   rv   r   )rX   r   rx   r4   r   UnicodeDecodeErrorr?   r'   r(   r5   rk   r7   r
   r<   rB   rQ   rM   )rY   r   re   r9   rZ   rK   r:   rL   r   ry   rz   r   r   r|   r}   leftover_bytesr3   r   	pad_bytess                      r   rw   zStrX.__unpack_and_dump__   s    >B^:VVS*:  v>>v 5	9!44V<<GDK9;!7$5     &   %d,=eLLLL  (P(P>O(P(P(P P PQQM0A ABKg%%!&}q'8':':!;!&}~~!6!~(=83{;K;KK!$!$(9::: U'8{ASASTTT G$$Yn0E0EFFFg%%-.KLLLGG<<*;<<<<<EE   se||KK$$!!""I	bqb		DK"40N0Nv0V0VWWW B$$Yi0@0@AAA{/88Ef}s   A A9r3   piecesc                 x   ||                      |||           d S | j        \  }}}}}|                    |j        |          }	|r|	dz   }	t	          |	          }
|I|
|k    rt          d|
 d| d|           |
|k     r%|st          d|
 d| d|           |	|||
z
  z  z  }	|                    |	           d S )Nrr   number of string bytes () exceeds limit () for ) falls short of ()__pack_and_dump__rX   r!   rM   r'   	TypeError
ValueErrorr   rY   r3   r   r9   rZ   rK   r:   rL   r   rz   actual_nbytess              r   __pack__zStrX.__pack__  sM    ""5&$77777 BF>K.>LL!16::E (JJM! 6))#A= A A*0A A8<A A  
 !6)) (F} F F/5F F=AF F  
 SF]$:;;EMM%     r   c                    | j         \  }}}}}t          |||                    |                     |r|                    dd           |                    |j        |          }	|r|	dz   }	t          |	          }
|a|
|k    rt          d|
 d| d|           |
|k     r=|st          d|
 d| d|           |||
z
  z  }|	|z  }	|	                    d|           |
                    |	           d S )	Nr   rr   )r4   r   r   r   r   r   )rX   rF   incrementalencoderr5   r!   rM   r'   r   r   r7   r   r   s              r   r   zStrX.__pack_and_dump__/  su   =A^:VVS*:tUK,J,J6,R,RSSS 	?OO-gO>>>[-v66 	$GOEE

v%%=} = =&,= =48= =  
 v%% $B= B B+1B B9=B B   Vm34$$Y444er   )rI   Nr   FNri   )__name__
__module____qualname____doc__rQ   r   intrk   boolr   rT   propertyrJ   rK   rL   r   r	   r   r~   rw   r   r   r   __classcell__)r[   s   @r   rH   rH   e   sf       88
 #'!&"L LL L c4i 	L
 L L smL 
L L L L L L,  #       X 
 ! ! ! ! X! !U ! ! ! X! !$ ! ! ! X!
 DH3 33%(3080@3	sCx3 3 3 3jAA%(A06A	sCxA A A AH IM!! !!!!"&u+!!5=f5E!!	!! !! !! !!F!s !DK !v !RV ! ! ! ! ! ! ! !r   rH   )F)NN)r   rU   typingr   r   r   r   	_getbytesr   r9   r	   
exceptionsr
   	transformr   r   r$   r-   r?   rB   rF   rH   ru   r   r   <module>r      s*   # "  / / / / / / / / / / / /             / / / / / /            $ $ $ $.. . .) ) )&   *F F FF F Fk k k k k9 k k k k kr   