
    "f4:                        d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ  ed
          Z G d de          Zej        dk    rddlmZ eej                 ZneZeeeef         ee         eeedf         e
e         df         Zeeeef         ee         eeedf         e
e         def         Zdedeedf         fdZ  G d de          Z! e!d          Z"dS )z7Transform dict/iterable values to bytes and vice versa.    N)Enum)AnyDictIterableListOptionalTypeTupleUnion   )BytesX)DataDataMeta)Record)	Transformbytes)namec                       e Zd ZdZdZdS )DefaultzDefault sentinel.UNSPECIFIEDN)__name__
__module____qualname____doc__r        N/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/items.pyr   r      s        KKKr   r   )      )Literal.fmtreturnc                 p   | dS t          | t          t          f          r| j        S t          | t                    rd |                                 D             }n;t          | t          t          f          rd | D             }nt          d|           	 t          |          S # t          $ r Y dS w xY w)z8Calculate format size (return None if not a fixed size).Nc                 ,    g | ]}t          |          S r   calcsize.0fs     r   
<listcomp>zcalcsize.<locals>.<listcomp>8   s    333!333r   c                 ,    g | ]}t          |          S r   r%   r'   s     r   r*   zcalcsize.<locals>.<listcomp>:   s    ***!***r   zinvalid format )

isinstancer   r   
__nbytes__dictvaluestuplelist	TypeErrorsum)r!   sizess     r   r&   r&   /   s    
{t#	8,-- ~#t 333cjjll333	C%	'	' 3**c***1#112225zz   tts   B' '
B54B5c                       e Zd ZU dZeed<   	 	 	 ddedee         dee         ddf fdZd	e	e         de
e         fd
ZdedefdZedefd            Zdej        fdede
e         dee         deddf
dZej        fdede
e         dedefdZdej        fdededee         dedeeef         f
dZej        fdededededeeef         f
dZ xZS )ItemsXz.Value to bytes and bytes to value transformer._fmtNr!   r   hintr"   c                     |                      |          }||}t                                          ||           t          |          | _        || _        d S N)	_get_hintsuper__init__r&   r-   r7   )selfr!   r   r8   	__class__s       r   r=   zItemsX.__init__K   sR     ~~c""<Dt$$$"3--			r   formatsc                    g }|D ]}||                     d           t          |t          t          t          f          r)|                     |                     |                     e|                     |j                   |S )Nr   )appendr,   r.   r1   r0   r;   __hint__)r>   r@   hintsr!   s       r   
_get_hintszItemsX._get_hints[   s     	+ 	+C{U####C$e!455 +T^^C001111S\****r   c                 N   |dS t          |t                    rat          |                     |                                                    }t          |          dk    rd|                                 dS dS t          |t                    r,dd                    |                     |                     dS t          |t                    rOt          |                     |                    }t          |          dk    rd|                                 dS d	S |j
        S )
Nr   r   z
Dict[str, ]zDict[str, Any]zTuple[, zList[z	List[Any])r,   r.   setrE   r/   lenpopr0   joinr1   rC   )r>   r!   rD   s      r   r;   zItemsX._get_hintf   s   ;5c4   	$

5566E5zzQ2EIIKK2222##c5!! 	?>DIIdooc&:&:;;>>>>c4   	,,--E5zzQ-uyy{{----;|r   c                     | j         S )zItems format.)r7   )r>   s    r   r!   z
ItemsX.fmt}   s     yr   valuepiecesdumpc                    ||                      ||||           d S |t          j        u r| j        }|t	          |t
          t          f          r|                    |           d S t	          |t                    r|\  }}| 	                    ||||           d S t	          |t                    r|	                    |||           d S t	          |t                    r|D ]}| 	                    |||           d S t	          |t                    r0|                                D ]}| 	                    |||           d S t          d          t	          |t                    rt	          |t                    rt          |          t          |          z
  rt          d          |                                D ]]\  }}t	          |t"          t$          f          r|	                    ||         ||           ?| 	                    ||         |||           ^d S t	          |t          t          f          rt	          |t          t          f          r t'          |          t'          |          k    rt          d          t)          ||          D ]Q\  }}t	          |t"          t$          f          r|	                    |||           9| 	                    ||||           Rd S |	                    |||           d S )Nzinvalid value)__pack_and_dump__r   r   r7   r,   r   	bytearrayrB   r0   __pack__r   r1   r.   r/   r2   rI   itemsr   r   rJ   zip)	r>   rN   rO   rP   r!   item	bound_fmtr   subfmts	            r   rT   zItemsX.__pack__   s.    ""5&$<<<<< g)))i{eeY%788 5MM%(((((u-- 5&+OD)MM$i@@@@@t,, 5NN5&$77777t,, 	5 % : :dFD9999: :  t,, 5 % : :dFD9999: : $O444C&& 2!%.. 53u::C3H 5#O444$'IIKK I ILD&!&8Y*?@@ IdVTBBBB eDk64HHHHI I C%// 2!%%77 53u::S;Q;Q#O444$'UOO B BLFD!&8Y*?@@ Bfd;;;; dFD&AAAAB B UFD11111r   c           
      f   |t           j        u r| j        }| j        |_        |L|j        r|j         d|_        t          |t          t          f          r.|xj        dz  c_        t          	                    |||           d S t          |t                    rm	 |\  }}nE# t          $ r8 ||_        |xj        dz  c_        t          dt          |                     d w xY w||_        |                     ||||           d S t          |t                    r;|xj        t!          |          j        z  c_        |	                    |||           d S t          |t$                    rX|xj        dz  c_        t'          |          D ]6\  }}|                     |||                    d| d          d 	           7d S t          |t*                    r]|xj        d
z  c_        |                                D ]6\  }}|                     |||                    d|d          d 	           7d S |xj        t!          |          j        dz   z  c_        ||_        t1          d          t          |t*                    rt          |t*                    s d
|_        ||_        t1          d|          g }	|                                D ]\  }}
|                    d|d          }t          |
t2          t4          f          r|
j        |_        	 ||         }n,# t6          $ r |	                    |           d|_        Y yw xY wt          |
t2          t4          f          r|
	                    |||           |                     ||||
           |	rHt          |	          dk    rdt;          |	          dd          }nd|	d         }t1          |          t=          |          t=          |          z
  }|rwd}|D ]'}|                    d|d||         d|           d}(t          |          dk    rdnd}d                    d |D                       }t1          d| d|           d S t          |t          t$          f          rt          |t          t$          f          s d|_        ||_        t1          d|          t'          tA          ||                    D ]z\  }\  }
}|                    d| d          }t          |
t2          t4          f          r$|
j        |_        |
	                    |||           b|                     ||||
           {t          |          t          |          k    rt          |          t          |          k     rPtC          t          |          t          |                    D ]$}|                    ||         dd| d            %nTd}tC          t          |          t          |                    D ]'}|                    d||         d| d|!           d}(t          |          dk    rdnd}t1          t          |           d"| d#t          |                     d S t          |t2          t4          f          r%|j        |_        |	                    |||           d S t          |t                     r|j        dz   |_        ntE          |          dz   |_        ||_        t1          d$          )%N:r   unknownz4expected (value, fmt) pair, but got tuple of length r1   [rG   access)r!   r.   z
 (invalid)zfno format specified, value must be a packable data type or (value, fmt) pairing (or dict/list of them)z"invalid value, expected dict, got z	(missing)r   zmissing values: zmissing value: r   Tz(unexpected))r_   rN   r!   separateFrN   r/   rH   c              3   4   K   | ]}t          |          V  d S r:   )repr)r(   r   s     r   	<genexpr>z+ItemsX.__pack_and_dump__.<locals>.<genexpr>,  s(      !D!D$t**!D!D!D!D!D!Dr   zunexpected z: ztuple or listz+invalid value, expected list or tuple, got )r!   rN   r_   )r!   rN   r_   ra    z given, expected [bad item format, must be a packable data type/transform (or a dict, list, or tuple of them))#r   r   r7   __format_name__r!   r,   r   rS   bytes_xrT   r0   
ValueErrorrN   rJ   rR   r   typer   r1   	enumerate
add_recordr.   rU   r   r2   r   r   KeyErrorrB   rc   rI   rL   rV   rangestr)r>   rN   rO   rP   r!   rW   rX   ir   missingrY   subdumpsubvaluemissing_values
extra_keysra   value_snamess                     r   rR   zItemsX.__pack_and_dump__   s    '%%%)C+DH;x *"h>>>%%!344 )G#  55555E5)) % &+OD))!      !&DJHH	)HH$[sSXzz[[    %&&tVT9EEEEEE4(( DKK,,ufd33333E4(( F"(//  GAt**fdooXXXXo&F&FD +     
 E4(( F""'++--  JD$**fdoo]]]]o&K&KQU +      DKK0<??"
O  
 T"" b	eT** P!"
 NU N NOOOG #		 N Nf//T/??fx&;<< ."(+GK$T{HH   NN4((($/GMH
 fx&;<< NOOHfg>>>> **8VWfMMMM 0w<<!##%MWad8K%M%MNN%Ewqz%E%EN///Uc#hh.J B& % %DOO,4}}}#Dk*!)	 $     %HH%(__%9%9''x		!D!D!D!D!DDD @g @ @ @ @AAAB B eT]++ /	eeT]33 Y*"
 We W WXXX%.s3%?%? J J!>FD//Q/::fx&;<< J"(+GKOOD&':::: **4&IIII5zzSXX%%u::C(("3u::s3xx88 X XCF+hRShhhWWWWX  $H"3s88SZZ88 ) ) ."'(#+q888%-	 (    $)%(ZZ1__''(3u:: T T T T#c(( T TUUU! &%$ h	233 	xDHLL-----#t$$ 3<,6s88l2DJ6  s   B! !AC#L##&MMbufferoffsetc                 l   ||                      ||||          S |t          j        u r| j        }|t                              |||          S t          |t          t          f          rag }|D ]2}|                     ||||          \  }}|	                    |           3t          |t                    rt          |          |fS ||fS t          |t                    r@i }|                                D ]%\  }	}|                     ||||          \  }}|||	<   &||fS |                    ||          S r:   )__unpack_and_dump__r   r   r7   rh   
__unpack__r,   r1   r0   rB   r.   rU   )
r>   rx   ry   rP   r!   
list_valuerY   rW   
dict_valuer   s
             r   r|   zItemsX.__unpack__`  s[    ++FFD#FFF'%%%)C;%%ffd;;;cD%=)) 		&J ( (#vvtVLLf!!$''''#u%% 1Z((&00v%%c4   	&J #		 ( (f#vvtVLLf#'
4  v%%~~ff---r   c           
         |t           j        u r| j        }| j        |_        |:|j        r|j         d|_        nd|_        t
                              |||          S t          |t          t          f          rg }t          |          D ]M\  }}|                     |||                    d| d          |          \  }}|                    |           Nt          |t                    rt          |          |fS ||fS t          |t                    rXi }	|                                D ]=\  }
}|                     |||                    d|
d          |          \  }}||	|
<   >|	|fS t          |t           t"          f          r#|j        |_        |                    |||          S t'          |          |_        t)          d          )Nz:bytesr   r]   rG   r^   rf   )r   r   r7   rg   r!   rh   r|   r,   r1   r0   rk   r{   rl   rB   r.   rU   r   r   r   ro   r2   )r>   rx   ry   rP   r!   r}   rp   rY   rW   r~   r   s              r   r{   zItemsX.__unpack_and_dump__  s    '%%%)C+DH;x #"h..."%%ffd;;;cD%=)) 	&J&s^^ ( (	6#77FDOO8q888O$D$Df   f !!$''''#u%% 1Z((&00v%%c4   	&J #		 ( (f#77FDOO=t===O$I$I6   f $(
4  v%%cHi011 	8xDH>>&&$777s882
 
 	
r   )NNN)r   r   r   r   ItemsFormat__annotations__r   ro   r=   r   r   rE   r;   propertyr!   r   r   r   r   r   DefaultFormatrT   rR   intr
   r|   r{   __classcell__)r?   s   @r   r6   r6   E   sq        88
  ""	  sm sm	
 
      	(;"7 	DI 	 	 	 	[ S    . [    X "&$0<2 <2<2 U<2 v	<2
 <2 
<2 <2 <2 <2F %0^ ^^ U^ 	^
 ^ ^ ^ ^H "&$0$. $.$. $. v	$.
 $. 
sCx$. $. $. $.V %04
 4
4
 4
 	4

 4
 
sCx4
 4
 4
 4
 4
 4
 4
 4
r   r6   rU   )#r   sysenumr   typingr   r   r   r   r   r	   r
   r   r   r   datar   r   rP   r   	transformr   rh   r   version_infor    r   DefaultUnspecifiedro   r   r   r   r&   r6   rU   r   r   r   <module>r      s   > = 



       J J J J J J J J J J J J J J J J J J J J                                        
&g


         d       v !45 !cNDIy%S/4:tK cNI	#s(OJ+ %T	"2    ,u
 u
 u
 u
 u
Y u
 u
 u
p 	Gr   