
    h                        S r SSKrSSKrSSKrSSKrSr " S S\R                  5      rSSSS	S
.rSSSSS
.r	SSS.r
S rS rS rS rS rS rS rS rS 4S jr " S S\R                  5      r " S S5      r " S  S!5      r " S" S#\5      r " S$ S%\5      r " S& S'\5      r " S( S)\5      r " S* S+\5      r " S, S-\5      r " S. S/\5      r " S0 S15      rS2 r " S3 S45      r S5 r!S6 r" " S7 S85      r# " S9 S:5      r$S; r%S< r&S= r'g)>zImplementation of FlexBuffers binary format.

For more info check https://google.github.io/flatbuffers/flexbuffers.html and
corresponding C++ implementation at
https://github.com/google/flatbuffers/blob/master/include/flatbuffers/flexbuffers.h
    N)TypeBuilderGetRootDumpsLoadsc                   h    \ rS rSrSrSrSrSrSr\	S 5       r
\	S 5       r\	S	 5       r\	S
 5       rSrg)BitWidth!   zSupported bit widths of value types.

These are used in the lower 2 bits of a type field to determine the size of
the elements (and or size field) of the item pointed to (e.g. vector).
r            c                     U S:  d   eU S:  a  [         R                  $ U S:  a  [         R                  $ U S:  a  [         R                  $ U S:  a  [         R                  $ [        SU -  5      e)z@Returns the minimum `BitWidth` to encode unsigned integer value.r      i   l        l            zvalue is too big to encode: %s)r	   W8W16W32W64
ValueErrorvalues    Q/var/www/fran/franai/venv/lib/python3.13/site-packages/flatbuffers/flexbuffers.pyU
BitWidth.U-   si     A::[[	'	\\	'	\\	'	\\7%?@@    c                 P    U S-  n [         R                  U S:  a  U 5      $ U ) 5      $ )z>Returns the minimum `BitWidth` to encode signed integer value.r   r   )r	   r   r   s    r   I
BitWidth.I=   s,     
QJE::uze66v66r   c                     [         R                  " S[         R                  " SU 5      5      S   U :X  a  [        R                  $ [        R
                  $ )z6Returns the `BitWidth` to encode floating point value.z<fr   )structunpackpackr	   r   r   r   s    r   F
BitWidth.FL   s;     }}T6;;tU34Q75@\\<<r   c                     [         R                  [         R                  [         R                  [         R                  S.U    $ )Nr   r         )r	   r   r   r   r   
byte_widths    r   B
BitWidth.BS   s+    {{x||N r    N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   staticmethodr   r   r"   r*   __static_attributes__r,   r   r   r	   r	   !   sm     	"	#	#	#A A 7 7    r   r	   bhiqr%   r*   Hr   Qfd)r&   r'   c                 T    [         R                  " SU [        U5         -  U5      S   $ )N<%sr   )r   r    len)fmtbufs     r   _UnpackrA   _   s%    	us3s8},c	21	55r   c                 Z    [        U5      U-  n[        R                  " SX U   4-  U5      $ Nz<%d%s)r>   r   r    )r?   r@   lengthr)   s       r   _UnpackVectorrE   c   s-    3x6!*	w&j/!::C	@@r   c                 :    [         R                  " SX   -  U5      $ )Nr=   )r   r!   )r?   r   r)   s      r   _PackrG   h   s    	US_,e	44r   c                 P    [         R                  " S[        U5      X   4-  /UQ76 $ rC   )r   r!   r>   )r?   valuesr)   s      r   _PackVectorrJ   l   s&    	WFS_==	G	GGr   c                 6    SU-  U::  a  [        XU5      US U& gg)Nr   TF)rG   )r?   r@   r   r)   value_bit_widths        r   _MutaterM   p   s(    ?z)S4C	r   c                     U * US-
  -  $ Nr   r,   )buf_sizescalar_sizes     r   _PaddingBytesrR   z   s    
kAo	&&r   c                     XR                   c  SOU R                   -   nXR                  c  UOU R                  -   n[        X4U R                  5      $ Nr   )startstopslicestep)soffsetrD   rU   rV   s        r   _ShiftSlicer[      s?    
Aagg
6%	VV^6	8$	uAFF	##r   c                     S[        U 5      pCXC-
  nUS:  a4  UnUS-  nXg-  nU" X   U5      (       a  US-  nUnXWS-   -  nOUnUS:  a  M4  U$ )z3Implementation of C++ std::lower_bound() algorithm.r   r   r   )r>   )rI   r   predfirstlastcountr6   rX   s           r   _LowerBoundra      sn    3v;
,%	AA:DIAFIu1faeaxee 		 
,r   c                 
    X:  $ Nr,   )xys     r   <lambda>rf      s    15r   c                 ^    [        XU5      nU[        U 5      :w  a  U" XU   5      (       d  U$ g)z5Implementation of C++ std::binary_search() algorithm.)ra   r>   )rI   r   r]   indexs       r   _BinarySearchrj      s0    
fT
*%
c&k$uUm"<"<L	r   c                   ,   \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr \!S 5       r"\!S  5       r#\!S! 5       r$\!S" 5       r%\!S# 5       r&\!S$ 5       r'\!S% 5       r(\!S& 5       r)\!S' 5       r*\!S+S( j5       r+S)r,g*),r      zrSupported types of encoded data.

These are used as the upper 6 bits of a type field to indicate the actual
type.
r   r   r   r   r&            r'   	   
                                                   $   c                 $    [        U 5      S-  U-  $ )Nr   )int)type_	bit_widths     r   Pack	Type.Pack   s    J!Oy((r   c                 .    SU S-  -  [        U S-	  5      4$ )Nr   r   r   )r   packed_types    r   UnpackType.Unpack   s!    t#$d;!+;&<<<r   c                 \    U [         R                  :*  =(       d    U [         R                  :H  $ rc   )r   FLOATBOOLr   s    r   IsInlineType.IsInline   s    DJJ4%499"44r   c                     [         R                  U s=:*  =(       a    [         R                  :*  Os  =(       d    U [         R                  :H  $ rc   )r   
VECTOR_INTVECTOR_STRING_DEPRECATEDVECTOR_BOOLr   s    r   IsTypedVectorType.IsTypedVector   s6     	5AAD$A$AA 	%D$$$r   c                     [         R                  U s=:*  =(       a    [         R                  :*  Os  =(       d    U [         R                  :H  $ rc   )r   INTSTRINGr   r   s    r   IsTypedVectorElementTypeType.IsTypedVectorElementType   s+    88u+++Au		/AAr   c                     [         R                  U 5      (       d  [        S5      e[        U [         R                  -
  [         R                  -   5      $ )Nzmust be typed vector type)r   r   r   r   r   r   s    r   ToTypedVectorElementTypeType.ToTypedVectorElementType   s<    e$$233'$((233r   c                 d    [         R                  U s=:*  =(       a    [         R                  :*  $ s  $ rc   )r   VECTOR_INT2VECTOR_FLOAT4r   s    r   IsFixedTypedVectorType.IsFixedTypedVector   s'    u::(:(:::::r   c                 d    [         R                  U s=:*  =(       a    [         R                  :*  $ s  $ rc   )r   r   r   r   s    r   IsFixedTypedVectorElementType"Type.IsFixedTypedVectorElementType   s#    88u**

****r   c                     [         R                  U 5      (       d  [        S5      eU [         R                  -
  n[        US-  [         R                  -   5      US-  S-   4$ )Nzmust be fixed typed vector typer   r   )r   r   r   r   r   )r   
fixed_types     r   ToFixedTypedVectorElementType"Type.ToFixedTypedVectorElementType   sW    ""5))899 )))J
Q)*J!Oa,???r   c                    US:X  a&  [         R                  U 5      (       d  [        S5      eO%[         R                  U 5      (       d  [        S5      eU [         R                  -
  nUS:X  a  [        U[         R
                  -   5      $ US:X  a  [        U[         R                  -   5      $ US:X  a  [        U[         R                  -   5      $ US:X  a  [        U[         R                  -   5      $ [        SU-  5      e)zConverts element type to corresponding vector type.

Args:
  element_type: vector element type
  fixed_len: number of elements: 0 for typed vector; 2, 3, or 4 for fixed
    typed vector.

Returns:
  Typed vector type or fixed typed vector type.
r   z!must be typed vector element type'must be fixed typed vector element typer   r   r&   zunsupported fixed_len: %s)	r   r   r   r   r   r   r   VECTOR_INT3VECTOR_INT4)element_type	fixed_lenrZ   s      r   ToTypedVectorType.ToTypedVector   s     A~**<88<== 9 //==BCCDHH$FA~&4??*++	a&4+++,,	a&4+++,,	a&4+++,,2Y>??r   r,   Nr   )-r-   r.   r/   r0   r1   NULLr   UINTr   KEYr   INDIRECT_INTINDIRECT_UINTINDIRECT_FLOATMAPVECTORr   VECTOR_UINTVECTOR_FLOAT
VECTOR_KEYr   r   VECTOR_UINT2VECTOR_FLOAT2r   VECTOR_UINT3VECTOR_FLOAT3r   VECTOR_UINT4r   BLOBr   r   r2   r   r   r   r   r   r   r   r   r   r   r3   r,   r   r   r   r      sd    
$	#	
$
%	#&,-.	#&*+,*  +,-+,-+,-	$	$+) ) = = 5 5   B B 4 4 ; ; + + @ @ @ @r   r   c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)Bufi  zHClass to access underlying buffer object starting from the given offset.c                     Xl         US:  a  UO[        U5      U-   U l        [        U5      U R                  -
  U l        g rT   )_bufr>   _offset_length)selfr@   rZ   s      r   __init__Buf.__init__  s3    I#q[6c#h.?DLs8dll*DLr   c                     [        U[        5      (       a-  U R                  [        XR                  U R
                  5         $ [        U[        5      (       a  U R                  U R                  U-      $ [        S5      eNzinvalid key type
isinstancerW   r   r[   r   r   r   	TypeErrorr   keys     r   __getitem__Buf.__getitem__!  s^    #uYY{3dllCDD	C		YYt||c)**())r   c                     [        U[        5      (       a-  X R                  [        XR                  U R
                  5      '   g [        U[        5      (       a  XR                  U R                  U-   '   g [        S5      er   r   )r   r   r   s      r   __setitem__Buf.__setitem__)  sX    #u@EiiCt||<=	C		&)iis"#())r   c                      SU R                   -  $ )Nzbuf[%d:])r   r   s    r   __repr__Buf.__repr__1  s    $$r   c                 R    U R                   U R                  S R                  U5      $ )z<Returns the lowest index where the sub subsequence is found.N)r   r   find)r   subs     r   FindBuf.Find4  s"    99T\\^$))#..r   c                 H    [        U R                  U R                  U-   5      $ )z5Returns new `Buf` which starts from the given offset.)r   r   r   )r   rZ   s     r   Slice	Buf.Slice8  s    tyy$,,/00r   c           
      N    U R                  U[        [        XX-    5      -
  5      $ )zAReturn new `Buf` based on the encoded offset (indirect encoding).)r   rA   r   )r   rZ   r)   s      r   IndirectBuf.Indirect<  s%    ::fwq$8K*LMMNNr   )r   r   r   N)r-   r.   r/   r0   r1   r   r   r   r   r   r   r   r3   r,   r   r   r   r     s)    P+
**%/1Or   r   c                   2    \ rS rSrSrSrS r\S 5       rSr	g)ObjectiA  z.Base class for all non-trivial data accessors.r   _byte_widthc                     Xl         X l        g rc   r   )r   r@   r)   s      r   r   Object.__init__F  s    I!r   c                     U R                   $ rc   )r   r   s    r   	ByteWidthObject.ByteWidthJ  s    r   N)
r-   r.   r/   r0   r1   	__slots__r   propertyr   r3   r,   r   r   r   r   A  s#    6#)"  r   r   c                   J   ^  \ rS rSrSrSrSU 4S jjr\S 5       rS r	Sr
U =r$ )SizediO  zBBase class for all data accessors which need to read encoded size._sizec                 |   > [         TU ]  X5        US:X  a   [        [        U R                  5      U l        g X0l        g rT   )superr   rA   r   	SizeBytesr   )r   r@   r)   size	__class__s       r   r   Sized.__init__T  s.    	GS%qy1dnn-djjr   c                 6    U R                   U R                  * S $ rT   r   r   s    r   r   Sized.SizeBytes[  s    99d&&&++r   c                     U R                   $ rc   r   r   s    r   __len__Sized.__len___  s    ::r   r   )r-   r.   r/   r0   r1   r   r   r   r   r  r3   __classcell__r   s   @r   r   r   O  s.    J) , , r   r   c                   2    \ rS rSrSrSr\S 5       rS rSr	g)Blobic  z)Data accessor for the encoded blob bytes.r,   c                 2    U R                   S[        U 5       $ rT   r   r>   r   s    r   Bytes
Blob.Bytesh      99QT##r   c                 6    SU R                   [        U 5      4-  $ )NzBlob(%s, size=%d)r  r   s    r   r   Blob.__repr__l  s    $))SY!777r   N)
r-   r.   r/   r0   r1   r   r   r  r   r3   r,   r   r   r	  r	  c  s!    1)$ $8r   r	  c                   >    \ rS rSrSrSr\S 5       rS rS r	S r
Srg)	Stringip  z+Data accessor for the encoded string bytes.r,   c                 2    U R                   S[        U 5       $ rT   r  r   s    r   r  String.Bytesu  r  r   c                 6   UR                  S5      n[        U5      nU[        U 5      ::  an  [        [        X0R                  5      U R
                  U R                  * S& X R
                  SU& [        [        U 5      U-
  5      U R
                  U[        U 5      & gg)a  Mutates underlying string bytes in place.

Args:
  value: New string to replace the existing one. New string must have less
    or equal UTF-8-encoded bytes than the existing one to successfully
    mutate underlying byte buffer.

Returns:
  Whether the value was mutated or not.
utf-8r   TF)encoder>   rG   r   r   r   	bytearray)r   r   encodedns       r   MutateString.Mutatey  s     ll7#GGACI~).q!5E5E)Fdii!!!A&ii!n!*3t9q=!9diiCIr   c                 8    U R                   R                  S5      $ )Nr  r  decoder   s    r   __str__String.__str__      ::W%%r   c                 6    SU R                   [        U 5      4-  $ )NzString(%s, size=%d)r  r   s    r   r   String.__repr__  s     DIIs4y#999r   N)r-   r.   r/   r0   r1   r   r   r  r  r   r   r3   r,   r   r   r  r  p  s+    3)$ $(&:r   r  c                   R   ^  \ rS rSrSrSrU 4S jr\S 5       rS r	S r
S rSrU =r$ )	Keyi  z(Data accessor for the encoded key bytes.r,   c                 4   > US:X  d   e[         TU ]  X5        g rO   )r   r   )r   r@   r)   r   s      r   r   Key.__init__  s    ??	GS%r   c                 2    U R                   S[        U 5       $ rT   r  r   s    r   r  	Key.Bytes  r  r   c                 8    U R                   R                  S5      $ rT   )r   r   r   s    r   r  Key.__len__  s    99>>!r   c                 8    U R                   R                  S5      $ )Nasciir  r   s    r   r   Key.__str__  r"  r   c                 6    SU R                   [        U 5      4-  $ )NzKey(%s, size=%d)r  r   s    r   r   Key.__repr__      CI 666r   )r-   r.   r/   r0   r1   r   r   r   r  r  r   r   r3   r  r  s   @r   r&  r&    s8    0)& $ $&7 7r   r&  c                   8    \ rS rSrSrSrS r\S 5       rS r	Sr
g)Vectori  z+Data accessor for the encoded vector bytes.r,   c                 <   US:  d  U[        U 5      :  a  [        SU[        U 5      4-  5      eU R                  [        U 5      U R                  -  U-      nU R                  R	                  XR                  -  5      n[
        R                  X0R                  U5      $ )Nr   'vector index %s is out of [0, %d) range)r>   
IndexErrorr   r   r   Ref
PackedType)r   ri   r   r@   s       r   r   Vector.__getitem__  s    qyESY&
3uc$i6H
H  ))CI(8(885@AK
))//%"2"22
3C>>#//==r   c                 D    U  Vs/ s H  oR                   PM     sn$ s  snf )z5Returns the underlying encoded data as a list object.)Valuer   es     r   r<  Vector.Value  s     ""TGGT"""s   c                 N    SU R                   U R                  U R                  4-  $ )Nz"Vector(%s, byte_width=%d, size=%d))r   r   r   r   s    r   r   Vector.__repr__  s+    /		

3  r   N)r-   r.   r/   r0   r1   r   r   r   r<  r   r3   r,   r   r   r4  r4    s(    3)> # #r   r4  c                   p   ^  \ rS rSrSrSrSU 4S jjr\S 5       r\S 5       r	S r
\S 5       rS	 rS
rU =r$ )TypedVectori  zGData accessor for the encoded typed vector or fixed typed vector bytes.)_element_typer   c                 z   > [         TU ]  XU5        U[        R                  :X  a  [        R                  nX0l        g rc   )r   r   r   r   r   rD  )r   r@   r)   r   r   r   s        r   r   TypedVector.__init__  s/    	GSd+t{{" XXl%r   c                 L    U R                   S U R                  [        U 5      -   $ rc   )r   r   r>   r   s    r   r  TypedVector.Bytes  s#    993t''#d)344r   c                     U R                   $ rc   rD  r   s    r   ElementTypeTypedVector.ElementType  s    r   c                     US:  d  U[        U 5      :  a  [        SU[        U 5      4-  5      eU R                  R                  XR                  -  5      n[        X R                  SU R                  5      $ )Nr   r6  r   )r>   r7  r   r   r   r8  rD  )r   ri   r@   s      r   r   TypedVector.__getitem__  sj    qyESY&
3uc$i6H
H  ))//%"2"22
3Cs$$a););<<r   c           	         U (       d  / $ U R                   [        R                  L a>  [        [        U R
                  [        U 5      5       Vs/ s H  n[        U5      PM     sn$ U R                   [        R                  L a-  [        [        [        U R
                  [        U 5      5      5      $ U R                   [        R                  L a-  [        [        [        U R
                  [        U 5      5      5      $ U R                   [        R                  L a-  [        [        [        U R
                  [        U 5      5      5      $ U R                   [        R                  L a  U  Vs/ s H  oR                  PM     sn$ U R                   [        R                   L a  U  Vs/ s H  oR"                  PM     sn$ [%        SU R                   -  5      es  snf s  snf s  snf )z'Returns underlying data as list object.unsupported element_type: %s)rD  r   r   rE   r   r  r>   boolr   listr   r   r   r"   r   AsKeyr   AsStringr   r=  s     r   r<  TypedVector.Value  sK    iTYY&,Q

CIFGF!d1gFGG			txx	'-4::s4y9::			tyy	(-4::s4y9::			tzz	)-4::s4y9::			txx	'#$t!ggt$$			t{{	*"&'$Qjj$''4t7I7IIJJ H %'s   G$GGc                 d    SU R                   U R                  U R                  U R                  4-  $ )Nz8TypedVector(%s, byte_width=%d, element_type=%s, size=%d))r   r   rD  r   r   s    r   r   TypedVector.__repr__   s5    E		

	I  r   rJ  r   )r-   r.   r/   r0   r1   r   r   r   r  rK  r   r<  r   r3   r  r  s   @r   rC  rC    s]    O&)& 5 5  = K K( r   rC  c                   r   ^  \ rS rSrSr\S 5       rU 4S jr\S 5       r	\S 5       r
\S 5       rS rS	rU =r$ )
Mapi	  z(Data accessor for the encoded map bytes.c                     [        U [        5      (       a  U R                  n [        U[        5      (       a  UR                  nX:  $ rc   )r   r8  
AsKeyBytesar4   s     r   CompareKeysMap.CompareKeys  s5    !S
,,a!S
,,a5Lr   c                    > [        U[        5      (       a  [        TU ]  U5      $ [	        U R
                  UR                  S5      U R                  5      nUS:w  a  [        TU ]  U5      $ [        U5      e)Nr.  rh   )	r   r   r   r   rj   Keysr  r^  KeyError)r   r   ri   r   s      r   r   Map.__getitem__  sb    #sW %%$))SZZ%8$:J:JKE{W ''
3-r   c                    [        [        U R                  SU R                  -  U R                  *  5      nU R                  R	                  SU R                  -  U R                  5      n[        X![        R                  5      $ )N)rA   r   r   r   r   rC  r   r   )r   r)   r@   s      r   ra  Map.Keys  sj    	499R$***d.>.>->?J ))

R$"2"22D4D4D
ECs11r   c                 B    [        U R                  U R                  5      $ rc   )r4  r   r   r   s    r   Values
Map.Values&  s    $))T--..r   c                     [        U R                  U R                  5       VVs0 s H  u  pUR                  UR                  _M     snn$ s  snnf rc   )zipra  ri  r<  )r   kvs      r   r<  	Map.Value*  s:    ),TYY)DE)DAGGQWW)DEEEs   #Ac                 6    SU R                   [        U 5      4-  $ )NzMap(%s, size=%d)r  r   s    r   r   Map.__repr__.  r2  r   r,   )r-   r.   r/   r0   r1   r2   r^  r   r   ra  ri  r<  r   r3   r  r  s   @r   rY  rY  	  se    0  2 2 / / F F7 7r   rY  c                      \ rS rSrSrSr\S 5       rS rS r	\
S 5       rS rS	 r\
S
 5       r\
S 5       r\
S 5       rS r\
S 5       r\
S 5       r\
S 5       rS r\
S 5       r\
S 5       rS r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       r\
S 5       rS r\
S 5       r \
S 5       r!\
S 5       r"\
S 5       r#\
S  5       r$\
S! 5       r%\
S" 5       r&\
S# 5       r'\
S$ 5       r(\
S% 5       r)\
S& 5       r*\
S' 5       r+S(r,g))*r8  i2  z)Data accessor for the encoded data bytes.r   _parent_widthr   _typec                 H    [         R                  U5      u  p4[        XX45      $ rc   )r   r   r8  )r@   parent_widthr   r)   r   s        r   r9  Ref.PackedType7  s     K0Js*44r   c                 4    Xl         X l        X0l        X@l        g rc   rs  )r   r@   rw  r)   r   s        r   r   Ref.__init__<  s    I%!Jr   c                 d    SU R                   U R                  U R                  U R                  4-  $ )Nz1Ref(%s, parent_width=%d, byte_width=%d, type_=%s)rs  r   s    r   r   Ref.__repr__B  s5    >		

	B  r   c                 4    U R                   S U R                   $ rc   )r   rt  r   s    r   _Bytes
Ref._BytesJ  s    99)t))**r   c                 <    [        SU R                  < SU< 35      e)Nzcannot convert z to )r   ru  )r   target_types     r   _ConvertErrorRef._ConvertErrorN  s    
[I
JJr   c                 N    U R                   R                  SU R                  5      $ rT   )r   r   rt  r   s    r   	_IndirectRef._IndirectQ  s    99a!3!344r   c                 :    U R                   [        R                  L $ rc   )ru  r   r   r   s    r   IsNull
Ref.IsNullT      ::""r   c                 :    U R                   [        R                  L $ rc   )ru  r   r   r   s    r   IsBool
Ref.IsBoolX  r  r   c                     U R                   [        R                  L a#  [        [	        [
        U R                  5      5      $ U R                  S:g  $ rT   )ru  r   r   rQ  rA   r   r~  AsIntr   s    r   AsBool
Ref.AsBool\  s6    zzTYY'!T[[)**ZZ1_r   c                     U R                   =(       a4    [        [        U R                  XR                  [
        R                  5      $ )zMutates underlying boolean value bytes in place.

Args:
  value: New boolean value.

Returns:
  Whether the value was mutated or not.
)r  rM   r   r   rt  r	   r   r   r   s     r   
MutateBoolRef.MutateBoolc  s3     ;; 7	499e// r   c                 @    U R                   =(       d    U R                  $ rc   )IsIntIsFloatr   s    r   	IsNumericRef.IsNumericp  s    ::%%r   c                     U R                   [        R                  [        R                  [        R                  [        R
                  4;   $ rc   )ru  r   r   r   r   r   r   s    r   r  	Ref.IsIntt  s8    ::			  r   c                 t   U R                   (       a  gU R                  (       a  [        U R                  5      $ U R                  [
        R                  L a  [        [        U R                  5      $ U R                  [
        R                  L a+  [        [        U R                  5       SU R                   5      $ U R                  [
        R                  L a  [        [        U R                  5      $ U R                  [
        R                  L a+  [        [        U R                  5       SU R                   5      $ U R                   (       a  [#        U R$                  5      $ U R&                  (       a  [#        U R(                  5      $ U R*                  (       a  [#        U R,                  5      $ U R.                  (       a  [#        U R0                  5      $ U R2                  (       a  [#        U R4                  5      $ U R6                  (       a  [#        U R8                  5      $ U R;                  [
        R                  5      e)z+Returns current reference as integer value.r   N)r  r  r   r  ru  r   r   rA   r   r~  r   r  r   r   r   r   IsStringr>   rT  IsKeyrS  IsBlobAsBlobIsVectorAsVectorr   AsTypedVectorr   AsFixedTypedVectorr  r   s    r   r  	Ref.AsInt}  sn    {{		txx	Q$$	t((	(Q();4+;+;<==zzTYYQ$$	t))	)Q();4+;+;<==		_					##$$		 	 (())txx((r   c           	         U R                   [        R                  L a9  [        [        U R
                  XR                  [        R	                  U5      5      $ U R                   [        R                  L a=  [        [        U R                  5       XR                  [        R	                  U5      5      $ U R                   [        R                  L a9  [        [        U R
                  XR                  [        R                  U5      5      $ U R                   [        R                  L a=  [        [        U R                  5       XR                  [        R                  U5      5      $ g)zMutates underlying integer value bytes in place.

Args:
  value: New integer value. It must fit to the byte size of the existing
    encoded value.

Returns:
  Whether the value was mutated or not.
F)ru  r   r   rM   r   r   rt  r	   r   r  r   r   r   r   r  s     r   	MutateIntRef.MutateInt  s     zzTXXQ		5*<*<hjj>OPP	t((	(
T^^u&6&6

58I  
tyy	 Q		5*<*<hjj>OPP	t))	)
T^^u&6&6

58I  r   c                 \    U R                   [        R                  [        R                  4;   $ rc   )ru  r   r   r   r   s    r   r  Ref.IsFloat  s     ::$**d&9&9:::r   c                 p   U R                   (       a  gU R                  (       a  [        U R                  5      $ U R                  (       a  [        U R
                  5      $ U R                  [        R                  L a  [        [        U R                  5      $ U R                  [        R                  L a+  [        [        U R                  5       SU R                   5      $ U R                  (       a  [        U R                   5      $ U R"                  (       a  [        [%        U R&                  5      5      $ U R)                  5       (       a  [        [%        U R*                  5      5      $ U R-                  5       (       a  [        [%        U R.                  5      5      $ U R1                  [        R                  5      e)z2Returns current reference as floating point value.g        N)r  r  floatr  r  r  ru  r   r   rA   r"   r~  r   r  r   r  rT  r  r>   r  r   r  r   FixedTypedVectorr  r   s    r   AsFloatRef.AsFloat  s    {{	4;;	4::	tzz	!Q$$	t**	*Q();4+;+;<==	4==!!	3t}}%&&					3t))*++		 	 	"	"3t,,-..tzz**r   c           	         U R                   [        R                  L aD  [        [        U R
                  UU R                  [        R                  U R                  5      5      $ U R                   [        R                  L aH  [        [        U R                  5       UU R                  [        R                  U R                  5      5      $ g)zMutates underlying floating point value bytes in place.

Args:
  value: New float value. It must fit to the byte size of the existing
    encoded value.

Returns:
  Whether the value was mutated or not.
F)ru  r   r   rM   r"   r   rt  r	   r*   r   r  r   r  s     r   MutateFloatRef.MutateFloat  s     zzTZZ

))




**T''
(  
t**	*

..





**T%%
&  r   c                 :    U R                   [        R                  L $ rc   )ru  r   r   r   s    r   r  	Ref.IsKey      ::!!r   c                     U R                   (       a.  [        U R                  5       U R                  5      R                  $ U R                  [        R                  5      erc   )r  r&  r  r   r  r  r   r   r   s    r   r[  Ref.AsKeyBytes  s>    zz!4#3#34:::txx((r   c                     U R                   (       a-  [        [        U R                  5       U R                  5      5      $ U R                  [        R                  5      erc   )r  strr&  r  r   r  r   r   r   s    r   rS  	Ref.AsKey  s=    zzT^^%t'7'7899txx((r   c                 :    U R                   [        R                  L $ rc   )ru  r   r   r   s    r   r  Ref.IsString  s    ::$$r   c                     U R                   (       a.  [        U R                  5       U R                  5      R                  $ U R
                  (       a  U R                  $ U R                  [        R                  5      erc   )
r  r  r  r   r  r  r[  r  r   r   r   s    r   AsStringBytesRef.AsStringBytes  sO    }}DNN$d&6&67===	__t{{++r   c                     U R                   (       a-  [        [        U R                  5       U R                  5      5      $ U R
                  (       a  U R                  $ U R                  [        R                  5      erc   )
r  r  r  r  r   r  rS  r  r   r   r   s    r   rT  Ref.AsString  sN    }}($*:*:;<<	ZZt{{++r   c                 h    [        U R                  5       U R                  5      R                  U5      $ rc   )r  r  r   r  r  s     r   MutateStringRef.MutateString  s'    $.."D$4$45<<UCCr   c                 :    U R                   [        R                  L $ rc   )ru  r   r   r   s    r   r  
Ref.IsBlob  r  r   c                     U R                   (       a.  [        U R                  5       U R                  5      R                  $ U R                  [        R                  5      erc   )r  r	  r  r   r  r  r   r   r   s    r   r  
Ref.AsBlob  s>    {{$.."D$4$45;;;tyy))r   c                 n    U R                   =(       d#    U R                  =(       d    U R                  5       $ rc   )r  r   r   r   s    r   IsAnyVectorRef.IsAnyVector#  s%    ==KD..K$2I2I2KKr   c                 \    U R                   [        R                  [        R                  4;   $ rc   )ru  r   r   r   r   s    r   r  Ref.IsVector'  s    ::$++txx000r   c                     U R                   (       a$  [        U R                  5       U R                  5      $ U R	                  [
        R                  5      erc   )r  r4  r  r   r  r   r   r   s    r   r  Ref.AsVector+  s8    }}DNN$d&6&677t{{++r   c                 @    [         R                  U R                  5      $ rc   )r   r   ru  r   s    r   r   Ref.IsTypedVector2  s    djj))r   c                     U R                   (       aB  [        U R                  5       U R                  [        R                  U R                  5      5      $ U R                  S5      e)NTYPED_VECTOR)r   rC  r  r   r   r   ru  r  r   s    r   r  Ref.AsTypedVector6  sP    
..





'
'


3  ~..r   c                 @    [         R                  U R                  5      $ rc   )r   r   ru  r   s    r   r   Ref.IsFixedTypedVectorA  s    ""4::..r   c                     U R                   (       aF  [        R                  U R                  5      u  p[	        U R                  5       U R                  X5      $ U R                  S5      e)NFIXED_TYPED_VECTOR)r   r   r   ru  rC  r  r   r  )r   r   r   s      r   r  Ref.AsFixedTypedVectorE  sP    ==djjIl)4+;+;\PP344r   c                 :    U R                   [        R                  L $ rc   )ru  r   r   r   s    r   IsMap	Ref.IsMapM  r  r   c                     U R                   (       a$  [        U R                  5       U R                  5      $ U R	                  [
        R                  5      erc   )r  rY  r  r   r  r   r   r   s    r   AsMap	Ref.AsMapQ  s8    zz!4#3#344txx((r   c                    U R                   (       a  gU R                  (       a  U R                  $ U R                  (       a  U R                  $ U R
                  (       a  U R                  $ U R                  (       a  U R                  $ U R                  (       a  U R                  $ U R                  (       a  U R                  $ U R                  (       a  U R                  R                  $ U R                   (       a  U R"                  R                  $ U R$                  (       a  U R&                  R                  $ U R(                  (       a  U R*                  R                  $ [-        SU -  5      e)zConverts current reference to value of corresponding type.

This is equivalent to calling `AsInt` for integer values, `AsFloat` for
floating point values, etc.

Returns:
  Value of corresponding type.
Nzcannot convert %r to value)r  r  r  r  r  r  r  r  rT  r  rS  r  r  r  r  r<  r  r  r   r  r   r  r   r   s    r   r<  	Ref.ValueX  s     {{	[[	ZZ	\\	]]	ZZ	[[	ZZ	]]   			%%%		 	 $$***2T9::r   )r   r   rt  ru  N)-r-   r.   r/   r0   r1   r   r2   r9  r   r   r   r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r[  rS  r  r  rT  r  r  r  r  r  r  r   r  r   r  r  r  r<  r3   r,   r   r   r8  r8  2  sd   1=)5 5 + +K5 # # # #   & &   ) ):2 ; ; + +.: " " ) ) ) ) % % , , , ,D # # * * L L 1 1 , , * * / / / / 5 5 " " ) )  ;  ;r   r8  c                 <     [        U 5        g! [         a     gf = f)NTF)iterr   )objs    r   _IsIterabler  |  s#    I	 s    
c                      \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       rS	 r\S
 5       r\S 5       r\S 5       r\R$                  4S jrSS jr\R$                  4S jrS rS rSrg)r<  i  z;Class to represent given value during the encoding process.c                  T    [        S[        R                  [        R                  5      $ rT   )r<  r   r   r	   r   r,   r   r   Null
Value.Null  s    DIIx{{++r   c                 T    [        U [        R                  [        R                  5      $ rc   )r<  r   r   r	   r   r   s    r   Bool
Value.Bool  s    		8;;//r   c                 8    [        U [        R                  U5      $ rc   )r<  r   r   r   r   s     r   Int	Value.Int  s    ),,r   c                 8    [        U [        R                  U5      $ rc   )r<  r   r   r  s     r   UInt
Value.UInt  s    		9--r   c                 8    [        U [        R                  U5      $ rc   )r<  r   r   r  s     r   FloatValue.Float  s    

I..r   c                 T    [        U [        R                  [        R                  5      $ rc   )r<  r   r   r	   r   )rZ   s    r   r&  	Value.Key  s    8;;//r   c                 (    Xl         X l        X0l        g rc   _valueru  _min_bit_width)r   r   r   min_bit_widths       r   r   Value.__init__  s    KJ (r   c                     U R                   $ rc   )r  r   s    r   r<  Value.Value  s    ;;r   c                     U R                   $ rc   )ru  r   s    r   r   
Value.Type  s    ::r   c                     U R                   $ rc   )r  r   s    r   MinBitWidthValue.MinBitWidth  s    r   c                 `    [         R                  U R                  U R                  U5      5      $ rc   )r   r   ru  StoredWidthr   parent_bit_widths     r   StoredPackedTypeValue.StoredPackedType  s#    99TZZ!1!12B!CDDr   c                    [         R                  U R                  5      (       a  U R                  $ S HD  nU[	        X5      -   X#-  -   n[
        R                  X@R                  -
  5      nUSU-  :X  d  MB  Us  $    [        S5      e)Nr%   r   zrelative offset is too big)	r   r   ru  r  rR   r	   r   r  r   )r   rP   
elem_indexr)   
offset_locr   s         r   	ElemWidthValue.ElemWidth  s    }}TZZ      

(/0#$ 
 **Z++56i	Y	' ! 1
22r   c                     [         R                  U R                  5      (       a  [        U R                  U5      $ U R                  $ rc   )r   r   ru  maxr  r	  s     r   r  Value.StoredWidth  s5    }}TZZ  $$&677r   c                 \    SU R                   < SU R                  < SU R                  < S3$ )NzValue(z, )r  r   s    r   r   Value.__repr__  s    "&++tzz4;N;NOOr   c                 ,    [        U R                  5      $ rc   )r  r  r   s    r   r   Value.__str__  s    t{{r   )r  ru  r  Nr   )r-   r.   r/   r0   r1   r2   r  r  r  r  r  r&  r   r   r<  r   r  r	   r   r  r  r  r   r   r3   r,   r   r   r<  r<    s    C, , 0 0 - - . . / / 0 0(       /7kk E3 *2 
Pr   r<  c                    ^  U 4S jnU$ )Nc                    > [        US   [        5      (       a$  U R                  US   5        T" U /USS  Q70 UD6  g T" U /UQ70 UD6  g )Nr   r   )r   r  r&  )r   argskwargsfuncs      r   wrapperInMap.<locals>.wrapper  sN    $q'3
hhtAw
4%$qr(%f%
4!$!&!r   r,   r  r  s   ` r   InMapr"    s    " 
.r   c                    ^  U 4S jnU$ )Nc                    > [        U5      S:X  a  T" XS   5        g [        U5      S:X  a   U R                  US   5        T" XS   5        g [        S5      e)Nr   r   r   zinvalid number of arguments)r>   r&  r   )r   r  r  s     r   r  InMapForString.<locals>.wrapper  sM    
4yA~
4a	Ta
hhtAw
4a455r   r,   r!  s   ` r   InMapForStringr&    s    6 
.r   c                   :    \ rS rSrSrS rS rS r\S 5       r	Sr
g)	Pooli  zCCollection of (data, offset) pairs sorted by data for quick access.c                     / U l         g rc   _poolr   s    r   r   Pool.__init__  	    DJr   c                     X4n[        U R                  US 5      nUS:w  a  U R                  U   u  pRU$ U R                  R                  XC5        g )Nc                     U S   US   :  $ rT   r,   r\  s     r   rf   #Pool.FindOrInsert.<locals>.<lambda>  s    qtad{r   rh   )rj   r+  insert)r   datarZ   dori   _s         r   FindOrInsertPool.FindOrInsert  sM    	B$**b*BCE{**U#iamJJe r   c                     / U l         g rc   r*  r   s    r   Clear
Pool.Clear  r-  r   c                 P    U R                    VVs/ s H  u  pUPM	     snn$ s  snnf rc   r*  )r   r2  r4  s      r   ElementsPool.Elements  s      $

+
WTD
+++s   "r*  N)r-   r.   r/   r0   r1   r   r5  r8  r   r;  r3   r,   r   r   r(  r(    s(    K , ,r   r(  c                   l   \ rS rSrSrSS\R                  4S jrS r\	S 5       r
\	S 5       rS	 rS
 rS rS rS rS rS rS rS rS rS1S jrS r\S 5       r\S 5       rS rS1S jr\S 5       r\S2S j5       r\S2S j5       r \S2S j5       r!\S2S j5       r"\S2S j5       r#\S2S  j5       r$S! r%S" r&\'RP                  S1S# j5       r)\S$ 5       r*\'RP                  S1S% j5       r+\S1S& j5       r,\ S3S' j5       r-S( r.S) r/\'RP                  S1S* j5       r0S+ r1S, r2\S- 5       r3\	S. 5       r4\S/ 5       r5S0r6g)4r   i  z?Helper class to encode structural data into flexbuffers format.FTc                     Xl         X l        X0l        [        5       U l        [        5       U l        SU l        [        5       U l        / U l	        g NF)
_share_strings_share_keys_force_min_bit_widthr(  _string_pool	_key_pool	_finishedr  r   _stack)r   share_strings
share_keysforce_min_bit_widths       r   r   Builder.__init__  s@     (! 3DVDNDNDIDKr   c                 ,    [        U R                  5      $ rc   )r>   r   r   s    r   r  Builder.__len__  s    tyy>r   c                     U R                   $ rc   )rC  r   s    r   
StringPoolBuilder.StringPool  s    r   c                     U R                   $ rc   )rD  r   s    r   KeyPoolBuilder.KeyPool  s    >>r   c                     U R                   R                  5         U R                  R                  5         SU l        [	        5       U l        / U l        g r?  )rC  r8  rD  rE  r  r   rF  r   s    r   r8  Builder.Clear"  s;    NNDNDIDKr   c                    U R                   (       a  [        S5      e[        U R                  5      S:w  a  [        S5      eU R                  S   nU R	                  UR                  [        U R                  5      5      5      nU R                  XS9  U R                  [        UR                  5       SS9  U R                  [        USS9  SU l        U R                  $ )z8Finishes encoding process and returns underlying buffer.z!builder has been already finishedr   zinternal stack size must be oner   r(   T)rE  RuntimeErrorr>   rF  _Alignr  r   	_WriteAny_Writer   r  finished)r   r   r)   s      r   FinishBuilder.Finish)  s    ~~<== 4;;1:;;KKNEU__S^<=JNN5N0KK5))+K:KK:!K,DM99r   c                 H    U R                   US  nUS UR                  S5       $ rT   )r   r   )r   rZ   r   s      r   _ReadKeyBuilder._ReadKey>  s'    
))FG
C}!r   c                     SU-  nU R                   R                  S[        [        U R                   5      U5      -  5        U$ )Nr       )r   extendrR   r>   )r   	alignmentr)   s      r   rW  Builder._AlignB  s7    iJIIW}S^ZHHIr   c                 N    U R                   R                  [        XU5      5        g rc   )r   rb  rG   )r   r?   r   r)   s       r   rY  Builder._WriteG  s    IIU3z23r   c                 N    U R                   R                  [        XU5      5        g rc   )r   rb  rJ   )r   r?   rI   r)   s       r   _WriteVectorBuilder._WriteVectorJ  s    II[j9:r   c                     [        U R                  5      U-
  nUS:X  d  USSU-  -  :  d   eU R                  [        X25        g )Nr'   r   )r>   r   rY  r   )r   rZ   r)   relative_offsets       r   _WriteOffsetBuilder._WriteOffsetM  s?    $))nv-O?oq:~1FGGGKK?/r   c           
         [         R                  [        [         R                  [        [         R                  [
        [         R                  [        [         R                  [        0R                  UR                   5      nU(       a  U R                  X1R                  U5        g U R                  UR                  U5        g rc   )r   r   r   r   r   r   r   r   r"   getrY  r<  rl  )r   r   r)   r?   s       r   rX  Builder._WriteAnyR  ss    		1		1!		1

A 
c%**o  
kk#{{J/
Z0r   c                    [         R                  [        U5      5      nU R                  U5      nU R	                  [        [        U5      U5        [        U R
                  5      nU R
                  R                  U5        U(       a  U R
                  R                  S5        U R                  R                  [        XcU5      5        U$ rT   )
r	   r   r>   rW  rY  r   rb  appendrF  r<  )r   r2  append_zeror   r   r)   locs          r   
_WriteBlobBuilder._WriteBlob_  s    

3t9%IY'JKK3t9j)
dii.CIIT
iiqKKuS34Jr   c                    [         R                  U5      n[         R                  [        U5      5      U:  a  [	        S5      eU R                  U5        U(       d   U R                  [        [        U5      U5        [        U R                  5      n[        R                  [        [        R                  [        [        R                  [        0R                  U5      nU(       d  [        S5      eU R!                  XsU5        [        R#                  X(       a  [        U5      OS5      nU R$                  R'                  [)        XhU5      5        U$ )z7Writes scalar vector elements to the underlying buffer.z*too many elements for the given byte_widthzunsupported element_typer   )r	   r*   r   r>   r   rW  rY  r   r   r   r   r   r   r"   ro  r   rh  r   rF  rr  r<  )	r   r   r)   elementsfixedr   rt  r?   r   s	            r   _WriteScalarVectorBuilder._WriteScalarVectorj  s    

:&I zz#h- 9,CDDKK	
kk!S]J/
dii.C88Q		1djj!
4
8
8
FC011cZ0|eS]KEKKuS34Jr   Nc           	         [        U5      nU(       a  U(       d  [        S5      e[        U R                  [        R                  U5      5      nSnU(       a2  [        XdR                  [        U R                  5      5      5      nUS-  n[        R                  n[        U5       Hl  u  p[        XjR                  [        U R                  5      Xy-   5      5      nU(       d  M>  U	S:X  a  U
R                  nMR  XR                  :w  d  Mc  [        S5      e   U(       a%  [        R                  U5      (       d  [        S5      eU R                  U5      nU(       a@  U R                  UR                  U5        U R!                  [
        SUR"                  -  U5        U(       d  U R!                  [
        X[5        [        U R                  5      nU H  n
U R%                  X5        M     U(       d3  U H-  n
U R                  R'                  U
R)                  U5      5        M/     U(       a  [        R*                  nO6U(       a  [        R-                  X(       a  UOS5      nO[        R.                  n[        XU5      $ )z0Writes vector elements to the underlying buffer.zfixed vector must be typedr   r   r   z.typed vector elements must be of the same typer   )r>   r   r  rB  r	   r   r  r   r   r   	enumeraterV  r   rW  rl  r<  rY  r  rX  rr  r  r   r   r   )r   rx  typedry  keysrD   r   prefix_elemsvector_typer6   r>  r)   rt  r   s                 r   _CreateVectorBuilder._CreateVector  s   ]FU344 D--xzz&/ABILiDII!?@ial((K(#iS^\=M!NOi	6+FF"OPP $ T77DDBCCY'J


J/
kk!Q$***J7
kk!V( dii.C
nnQ#  !		++I67  hhe	"";%QGY''r   c                 @   U R                  U5      n[        U R                  5      n[        R                  [
        [        R                  [        [        R                  [        0U   nU R                  XaU5        U R                  R                  [        XRU5      5        g rc   )rW  r>   r   r   r   r   r   r   r   r"   rY  rF  rr  r<  )r   r   r   r   r)   rt  r?   s          r   _PushIndirectBuilder._PushIndirect  sr    Y'J
dii.Ca!3!3Q8K8KQ
OC 	KKJ'KKuS34r   c                 8   [        U R                  5      nUR                  S5      nU R                  US[        R
                  S9nU R                  (       aC  U R                  R                  X45      nUb%  U R                  US2	 U=U R                  S   l
        nU$ )zEncodes string value.r  Trs  r   Nrh   )r>   r   r  ru  r   r   r@  rC  r5  rF  r  )r   r   reset_tor  rt  prev_locs         r   r  Builder.String  s     499~Hll7#G
//'t4;;/
GC""//=h		IIhi '//BJr   c                 @    U R                  US[        R                  S9$ )zEncodes binary blob value.

Args:
  value: A byte/bytearray value to encode

Returns:
  Offset of the encoded value in underlying the byte buffer.
Fr  )ru  r   r   r  s     r   r	  Builder.Blob  s     ??5e499?EEr   c                    [        U[        [        45      (       a  UnOUR                  S5      nSU;   a  [	        S5      e[        U R                  5      nU R                  R                  U5        U R                  R                  S5        U R                  (       a/  U R                  R                  X#5      nUb  U R                  US2	 UnU R                  R                  [        R                  U5      5        U$ )zEncodes key value.

Args:
  value: A byte/bytearray/str value to encode. Byte object must not contain
    zero bytes. String object must be convertible to ASCII.

Returns:
  Offset of the encoded value in the underlying byte buffer.
r.  r   zkey contains zero byteN)r   bytesr  r  r   r>   r   rb  rr  rA  rD  r5  rF  r<  r&  )r   r   r  rt  r  s        r   r&  Builder.Key  s     %%+,,gW%gG|/00
dii.CIIWIIQ,,W:h		IIcdOKKuyy~&Jr   c                     U(       a  U R                  U5        U R                  R                  [        R	                  5       5        g)zEncodes None value.N)r&  rF  rr  r<  r  r   s     r   r  Builder.Null  s(    

hhsmKKuzz|$r   c                 `    U R                   R                  [        R                  U5      5        g)z8Encodes boolean value.

Args:
  value: A boolean value.
N)rF  rr  r<  r  r  s     r   r  Builder.Bool  s     	KKuzz%()r   c                     US:X  a  [         R                  U5      O[         R                  U5      nU R                  R	                  [
        R                  X5      5        g)z{Encodes signed integer value.

Args:
  value: A signed integer value.
  byte_width: Number of bytes to use: 1, 2, 4, or 8.
r   N)r	   r   r*   rF  rr  r<  r  r   r   r)   r   s       r   r  Builder.Int  s>     &01_

5!(**Z:PIKKuyy23r   c                     US:X  a  [         R                  U5      O[         R                  U5      nU R                  U[        R
                  U5        g)zEncodes signed integer value indirectly.

Args:
  value: A signed integer value.
  byte_width: Number of bytes to use: 1, 2, 4, or 8.
r   N)r	   r   r*   r  r   r   r  s       r   IndirectIntBuilder.IndirectInt  s;     &01_

5!(**Z:PIud//;r   c                     US:X  a  [         R                  U5      O[         R                  U5      nU R                  R	                  [
        R                  X5      5        g)zEncodes unsigned integer value.

Args:
  value: An unsigned integer value.
  byte_width: Number of bytes to use: 1, 2, 4, or 8.
r   N)r	   r   r*   rF  rr  r<  r  r  s       r   r  Builder.UInt"  s>     &01_

5!(**Z:PIKKuzz%34r   c                     US:X  a  [         R                  U5      O[         R                  U5      nU R                  U[        R
                  U5        g)zEncodes unsigned integer value indirectly.

Args:
  value: An unsigned integer value.
  byte_width: Number of bytes to use: 1, 2, 4, or 8.
r   N)r	   r   r*   r  r   r   r  s       r   IndirectUIntBuilder.IndirectUInt-  s;     &01_

5!(**Z:PIud00)<r   c                     US:X  a  [         R                  U5      O[         R                  U5      nU R                  R	                  [
        R                  X5      5        g)ztEncodes floating point value.

Args:
  value: A floating point value.
  byte_width: Number of bytes to use: 4 or 8.
r   N)r	   r"   r*   rF  rr  r<  r  r  s       r   r  Builder.Float8  s>     &01_

5!(**Z:PIKKu{{545r   c                     US:X  a  [         R                  U5      O[         R                  U5      nU R                  U[        R
                  U5        g)zEncodes floating point value indirectly.

Args:
  value: A floating point value.
  byte_width: Number of bytes to use: 4 or 8.
r   N)r	   r"   r*   r  r   r   r  s       r   IndirectFloatBuilder.IndirectFloatC  s;     &01_

5!(**Z:PIud119=r   c                 ,    [        U R                  5      $ )zStarts vector construction.r>   rF  r   s    r   _StartVectorBuilder._StartVectorN      t{{r   c                     U R                  U R                  US X#5      nU R                  US2	 U R                  R                  U5        UR                  $ )z6Finishes vector construction by encodung its elements.N)r  rF  rr  r<  )r   rU   r~  ry  vecs        r   
_EndVectorBuilder._EndVectorR  sI    


T[[0%
?CEFKKs99r   c              #      #    U(       a  U R                  U5         U R                  5       nU v   U R                  USSS9  g ! U R                  WSSS9  f = f7f)NFr~  ry  r&  r  r  r   r   rU   s      r   r4  Builder.VectorY  sO     

hhsm7!ej
ooe5o6dooe5o6   AA AAAc                     U R                  5          U H  nU R                  U5        M     SSS5        g! , (       d  f       g= f)zvEncodes sequence of any elements as a vector.

Args:
  elements: sequence of elements, they may have different types.
N)r4  Add)r   rx  r>  s      r   VectorFromElementsBuilder.VectorFromElementsd  s,     
!  
s	   5
Ac              #      #    U(       a  U R                  U5         U R                  5       nU v   U R                  USSS9  g ! U R                  WSSS9  f = f7f)NTFr  r  r  s      r   rC  Builder.TypedVectoro  sO     

hhsm6!ej
ooe4uo5dooe4uo5r  c                    [        U[        R                  5      (       a  UR                  S:X  a!  U R                  [        R
                  SUSS9  g
UR                  S:X  a!  U R                  [        R
                  SUSS9  g
UR                  S;   a+  U R                  [        R                  UR                  USS9  g
UR                  S;   a+  U R                  [        R                  UR                  USS9  g
[        S	UR                  -  5      eUc  U R                  OU R                  U5      nU R                  5          U H  nU" U5        M     S
S
S
5        g
! , (       d  f       g
= f)a  Encodes sequence of elements of the same type as typed vector.

Args:
  elements: Sequence of elements, they must be of the same type.
  element_type: Suggested element type. Setting it to None means determining
    correct value automatically based on the given elements.
r:   r&   Fry  r;   r'   )r4   r5   r6   lr7   )r*   r8   r   Lr9   zunsupported array typecode: %sN)r   arraytypecoderz  r   r   r   itemsizer   r   r  AdderrC  )r   rx  r   addr>  s        r   TypedVectorFromElementsBuilder.TypedVectorFromElementsz  s.    (EKK((			c	!

AxuE#

AxuE 99HHh'' 	  	
  99IIx(((% 	  	
 9H<M<MMNN$,DHH$**\2JcA
a&  s    E
E)c                   ^ S[        U5      s=::  a  S::  d  O  [        S5      eU Vs1 s H  n[        U5      iM     nn[        U5      S:w  a  [        S5      eUu  nUcN  [        [
        R                  [        [
        R                  0R                  U5      nU(       d  [        SU-  5      eUS:X  aw  [
        R                  [        R                  [
        R                  [        R                  [
        R                  [        R                  0U   mS[        U4S	 jU 5       5      -  nU R!                  X#US
S9  gs  snf )ae  Encodes sequence of elements of the same type as fixed typed vector.

Args:
  elements: Sequence of elements, they must be of the same type. Allowed
    types are `Type.INT`, `Type.UINT`, `Type.FLOAT`. Allowed number of
    elements are 2, 3, or 4.
  element_type: Suggested element type. Setting it to None means determining
    correct value automatically based on the given elements.
  byte_width: Number of bytes to use per element. For `Type.INT` and
    `Type.UINT`: 1, 2, 4, or 8. For `Type.FLOAT`: 4 or 8. Setting it to 0
    means determining correct value automatically based on the given
    elements.
r   r&   z&only 2, 3, or 4 elements are supportedr   z%all elements must be of the same typeNrP  r   c              3   4   >#    U  H  nT" U5      v   M     g 7frc   r,   ).0r>  widths     r   	<genexpr>7Builder.FixedTypedVectorFromElements.<locals>.<genexpr>  s     7hE!HHhs   Tr  )r>   r   typer   r   r   r   r  r   ro  r   r	   r   r   r"   r  rz  )r   rx  r   r)   r>  typesr   r  s          @r   FixedTypedVectorFromElements$Builder.FixedTypedVectorFromElements  s   " H""?@@&'hT!WhE'
5zQ=>>HU488UDJJ7;;EBl6>??Q
))XZZ
((HJJ
**hjj 		e
 7h777jLhdK' (s   D>c                 ,    [        U R                  5      $ )zStarts map construction.r  r   s    r   	_StartMapBuilder._StartMap  r  r   c                   ^  T R                   US n[        U5      S-  S:w  a  [        S5      eUSSS2    H<  nUR                  [        R                  Ld  M"  [        S[        R                  -  5      e   [        USSS2   USSS2   5      n[        UU 4S jS9nT R                   US2	 U H  nT R                   R                  U5        M      T R                  T R                   USS2   S	S
S9nT R                  T R                   US-   SS2   S
S
US9nT R                   US2	 T R                   R                  U5        UR                  $ )z3Finishes map construction by encodung its elements.Nr   r   z&must be even number of keys and valueszall map keys must be of %s typer   c                 @   > TR                  U S   R                  5      $ rT   )r^  r<  )pairr   s    r   rf   !Builder._EndMap.<locals>.<lambda>  s    4==a+Gr   )r   TFr  )r~  ry  r  )rF  r>   rV  r   r   rl  sortedrb  r  rr  r<  )r   rU   stackr   pairsr  r  rI   s   `       r   _EndMapBuilder._EndMap  sD    KKE
5zA~ABBSqSz		!<txxGHH  cc
E!$Q$K(E5GHEEF
kk  dkk%((34uMDEAINN#5D   F 	EFKKv<<r   c              #      #    U(       a  U R                  U5         U R                  5       nU v   U R                  U5        g ! U R                  W5        f = f7frc   )r&  r  r  r  s      r   rY  Builder.Map  sA     

hhsmnnej
ll5dll5r  c                     U R                  5       nUR                  5        H'  u  p4U R                  U5        U R                  U5        M)     U R	                  U5        g rc   )r  itemsr&  r  r  )r   rx  rU   rm  rn  s        r   MapFromElementsBuilder.MapFromElements  sE    NNE 
hhqk
hhqk ! 	LLr   c                    [         R                  U R                  [         R                  U R                  [         R
                  U R                  [         R                  U R                  [         R                  U R                  [         R                  U R                  [         R                  U R                  [         R                  U R                   [         R"                  U R$                  [         R&                  U R(                  0
U   $ rc   )r   r   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r&  r   r	  r   r  )r   r   s     r   r  Builder.Adder  s    		499$((4++		499D--

DJJT//$((		499T[[  r   c                    Uc  U R                  5         g[        U[        5      (       a  U R                  U5        g[        U[        5      (       a  U R                  U5        g[        U[        5      (       a  U R                  U5        g[        U[        5      (       a  U R                  U5        g[        U[        [        45      (       a  U R                  U5        g[        U[        5      (       aU  U R                  5          UR                  5        H'  u  p#U R!                  U5        U R#                  U5        M)     SSS5        g[        U[$        R$                  5      (       a  U R'                  U5        g[)        U5      (       a  U R+                  U5        g[-        S[/        U5      -  5      e! , (       d  f       g= f)z$Encodes value of any supported type.Nzunsupported python type: %s)r  r   rQ  r  r   r  r  r  r  r  r  r  r	  dictrY  r  r&  r  r  r  r  r  r   r  )r   r   rm  rn  s       r   r  Builder.Add  s/    }
iik	E4	 	 
ii	E3		
hhuo	E5	!	!
jj	E3		
kk%	EE9-	.	.
ii	E4	 	 88:KKMDA
((1+
((1+ " : 
E5;;	'	'
""5)	U		
e$3d5kABB :s   <F22
G c                      U R                   S   $ )Nrh   )rF  r   s    r   	LastValueBuilder.LastValue  s    ;;r?r   c                 :    U R                   R                  U5        g rc   )rF  rr  r  s     r   
ReuseValueBuilder.ReuseValue   s    KKur   )	r   rE  rB  rD  rA  r@  rF  rC  rZ  rc   r   rT   )7r-   r.   r/   r0   r1   r	   r   r   r  r   rN  rQ  r8  r[  r^  rW  rY  rh  rl  rX  ru  rz  r  r  r&  r  r"  r	  r&  r  r  r  r  r  r  r  r  r  r  
contextlibcontextmanagerr4  r  rC  r  r  r  r  rY  r  r  r  r  r  r3   r,   r   r   r   r     s/   G "++	"    *
4;0
1	08(t5   		F 		F<% 	* 	* 	4 	4 	< 	< 	5 	5 	= 	= 	6 	6 	> 	> 7 7 	 	 6 6 	 	: 	45&L 	&LP8   C C4   	 	r   r   c                     [        U 5      S:  a  [        S5      eU S   n[        R                  [	        U SU-   * 5      XS   S9$ )z/Returns root `Ref` object for the given buffer.r   zbuffer is too smallrh   r   re  r   )r>   r   r8  r9  r   )r@   r)   s     r   r   r   %  sO    X\
*
++2w*		#Z !:r7 
 
 r   c                 X    [        5       nUR                  U 5        UR                  5       $ )z1Returns bytearray with the encoded python object.)r   r  r[  )r  fbbs     r   r   r   /  s     	#''#,	r   c                 ,    [        U 5      R                  $ )z.Returns python object decoded from the buffer.)r   r<  )r@   s    r   r   r   6  s    			r   )(r1   r  r  enumr   __all__IntEnumr	   r   r   r"   rA   rE   rG   rJ   rM   rR   r[   ra   rj   r   r   r   r   r	  r  r&  r4  rC  rY  r8  r  r<  r"  r&  r(  r   r   r   r   r,   r   r   <module>r     s\      
:6t|| 6r 	$$6A
5H'
$$ '9 v@4<< v@r%O %OP F (
85 
8!:U !:H7& 7.U 8?% ?D&7& &7RG; G;T
M M`
, ,._ _Dr   