
    Ng                     `   d Z ddlZddlZddlZddlZdZ G d dej                  Zdddd	d
Zddddd
Z	dddZ
d Zd Zd Zd Zd Zd Zd Zd Zd fdZ G d dej                  Z G d d          Z G d  d!          Z G d" d#e          Z G d$ d%e          Z G d& d'e          Z G d( d)e          Z G d* d+e          Z G d, d-e          Z G d. d/e          Z G d0 d1          Zd2 Z G d3 d4          Z d5 Z!d6 Z" G d7 d8          Z# G d9 d:          Z$d; Z%d< Z&d= Z'dS )>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                   z    e Zd ZdZdZdZdZdZed             Z	ed             Z
ed             Zed	             Zd
S )BitWidthzSupported 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                     | dk    sJ | dk     rt           j        S | dk     rt           j        S | dk     rt           j        S | dk     rt           j        S t          d| z            )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    S/var/www/html/ai-engine/env/lib/python3.11/site-packages/flatbuffers/flexbuffers.pyUz
BitWidth.U,   sq     A::::[	'		\	'		\	'		\7%?@@@    c                 R    | dz  } t                               | dk    r| n|            S )z>Returns the minimum `BitWidth` to encode signed integer value.r   r   )r	   r   r   s    r   Iz
BitWidth.I<   s-     
QJE::uzzeev666r   c                     t          j        dt          j        d|                     d         | k    rt          j        S t          j        S )z6Returns the `BitWidth` to encode floating point value.z<fr   )structunpackpackr	   r   r   r   s    r   Fz
BitWidth.FK   s<     }T6;tU3344Q75@@\<r   c                 l    t           j        t           j        t           j        t           j        d|          S )Nr
   r         )r	   r   r   r   r   
byte_widths    r   Bz
BitWidth.BR   s1     ;<<<	 
  r   N)__name__
__module____qualname____doc__r   r   r   r   staticmethodr   r   r   r&    r   r   r	   r	   !   s         
 	"	#	#	#A A <A 7 7 <7   <   <  r   r	   bhiqr!   r&   Hr   Qfd)r"   r#   c                 d    t          j        d| t          |                   z  |          d         S )N<%sr   )r   r   len)fmtbufs     r   _Unpackr:   a   s(    	us3s88},c	2	21	55r   c                 f    t          |          |z  }t          j        d|| |         fz  |          S Nz<%d%s)r7   r   r   )r8   r9   lengthr%   s       r   _UnpackVectorr>   e   s2    3xx6!*	w&#j/!::C	@	@@r   c                 >    t          j        d| |         z  |          S )Nr6   )r   r   )r8   r   r%   s      r   _Packr@   j   s    	US_,e	4	44r   c                 V    t          j        dt          |          | |         fz  g|R  S r<   )r   r   r7   )r8   valuesr%   s      r   _PackVectorrC   n   s.    	WFS_==	G	G	G	GGr   c                 H    d|z  |k    rt          | ||          |d |<   dS dS )Nr
   TF)r@   )r8   r9   r   r%   value_bit_widths        r   _MutaterF   r   s6    ?z))S%44C4	r   c                     |  |dz
  z  S Nr
   r,   )buf_sizescalar_sizes     r   _PaddingBytesrK   |   s    
kAo	&&r   c                 z    || j         dn| j         z   }|| j        |n| j        z   }t          ||| j                  S Nr   )startstopslicestep)soffsetr=   rN   rO   s        r   _ShiftSlicerT      sB    
AAag
6%	QV^66	8$	udAF	#	##r   c                     dt          |           }}||z
  }|dk    r6|}|dz  }||z  } || |         |          r|dz  }|}||dz   z  }n|}|dk    6|S )z3Implementation of C++ std::lower_bound() algorithm.r   r   r
   )r7   )rB   r   predfirstlastcountr/   rQ   s           r   _LowerBoundrZ      s    3v;;%
,%		AA:DIAtF1Iu 1faetaxeee 			 
,r   c                     | |k     S Nr,   )xys     r   <lambda>r_      s
    1q5 r   c                 v    t          | ||          }|t          |           k    r ||| |                   s|S dS )z5Implementation of C++ std::binary_search() algorithm.)rZ   r7   )rB   r   rV   indexs       r   _BinarySearchrc      sC    
feT
*
*%
c&kk$$ufUm"<"<L	r   c                   `   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZe d             Z!e d             Z"e d              Z#e d!             Z$e d"             Z%e d#             Z&e d$             Z'e d%             Z(e d&             Z)e d)d'            Z*d(S )*r   zxSupported 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                 ,    t          |           dz  |z  S )Nr   )int)type_	bit_widths     r   Packz	Type.Pack   s    JJ!Oy((r   c                 6    d| dz  z  t          | dz	            fS )Nr
   r   r   )r   packed_types    r   UnpackzType.Unpack   s$    t#$d;!+;&<&<<<r   c                 B    | t           j        k    p| t           j        k    S r\   )r   FLOATBOOLr}   s    r   IsInlinezType.IsInline   s    DJ4%49"44r   c                 j    t           j        | cxk    ot           j        k    nc p| t           j        k    S r\   )r   
VECTOR_INTVECTOR_STRING_DEPRECATEDVECTOR_BOOLr   s    r   IsTypedVectorzType.IsTypedVector   s;    ?eDDDDt'DDDDD %D$$%r   c                 j    t           j        | cxk    ot           j        k    nc p| t           j        k    S r\   )r   INTSTRINGr   r   s    r   IsTypedVectorElementTypezType.IsTypedVectorElementType   s4    8u++++++++Au	/AAr   c                     t                               |           st          d          t          | t           j        z
  t           j        z             S )Nzmust be typed vector type)r   r   r   r   r   r   s    r   ToTypedVectorElementTypezType.ToTypedVectorElementType   sC    e$$ 42333'$(2333r   c                 J    t           j        | cxk    ot           j        k    nc S r\   )r   VECTOR_INT2VECTOR_FLOAT4r   s    r   IsFixedTypedVectorzType.IsFixedTypedVector   s*    u::::(::::::r   c                 J    t           j        | cxk    ot           j        k    nc S r\   )r   r   r   r   s    r   IsFixedTypedVectorElementTypez"Type.IsFixedTypedVectorElementType   s(    8u****
*****r   c                     t                               |           st          d          | t           j        z
  }t          |dz  t           j        z             |dz  dz   fS )Nzmust be fixed typed vector typer   r   )r   r   r   r   r   )r}   
fixed_types     r   ToFixedTypedVectorElementTypez"Type.ToFixedTypedVectorElementType   s]    ""5)) :8999 ))J
Q)**J!Oa,???r   c                    |dk    r*t                               |           st          d          n)t                               |           st          d          | t           j        z
  }|dk    rt          |t           j        z             S |dk    rt          |t           j        z             S |dk    rt          |t           j        z             S |dk    rt          |t           j        z             S t          d|z            )a  Converts 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_lenrS   s      r   ToTypedVectorzType.ToTypedVector   s     A~~**<88 ><===> //== DBCCCDH$FA~~&4?*+++	a&4++,,,	a&4++,,,	a&4++,,,2Y>???r   Nr   )+r'   r(   r)   r*   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   r+   r   r   r   r   r   r   r   r   r   r   r,   r   r   r   r      s        
 
$	#	
$
%	#&,-.	#&*+,*  +,-+,-+,-	$	$+) ) <) = = <= 5 5 <5 % % <% B B <B 4 4 <4 ; ; <; + + <+ @ @ <@ @ @ @ <@ @ @r   r   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
BufzHClass to access underlying buffer object starting from the given offset.c                     || _         |dk    r|nt          |          |z   | _        t          |          | j        z
  | _        d S rM   )_bufr7   _offset_length)selfr9   rS   s      r   __init__zBuf.__init__  s?    DI#q[[66c#hh.?DLs88dl*DLLLr   c                     t          |t                    r&| j        t          || j        | j                           S t          |t                    r| j        | j        |z            S t          d          Nzinvalid key type
isinstancerP   r   rT   r   r   r|   	TypeErrorr   keys     r   __getitem__zBuf.__getitem__   sf    #u *Y{3dlCCDD	C		 *Yt|c)**()))r   c                     t          |t                    r%|| j        t          || j        | j                  <   d S t          |t                    r|| j        | j        |z   <   d S t          d          r   r   )r   r   r   s      r   __setitem__zBuf.__setitem__(  sp    #u *@EdiCt|<<===	C		 *&)dis"###()))r   c                     d| j         z  S )Nzbuf[%d:])r   r   s    r   __repr__zBuf.__repr__0  s    $$r   c                 P    | j         | j        d                             |          S )z<Returns the lowest index where the sub subsequence is found.N)r   r   find)r   subs     r   FindzBuf.Find3  s#    9T\]]#((---r   c                 <    t          | j        | j        |z             S )z5Returns new `Buf` which starts from the given offset.)r   r   r   )r   rS   s     r   Slicez	Buf.Slice7  s    ty$,/000r   c           
      n    |                      |t          t          | |||z                      z
            S )zAReturn new `Buf` based on the encoded offset (indirect encoding).)r   r:   r   )r   rS   r%   s      r   IndirectzBuf.Indirect;  s2    ::fwq$vfz6I/I*JKKKLLLr   N)r'   r(   r)   r*   r   r   r   r   r   r   r   r,   r   r   r   r     s        PP+ + +
* * ** * *% % %. . .1 1 1M M M M Mr   r   c                   2    e Zd ZdZdZd Zed             ZdS )Objectz.Base class for all non-trivial data accessors.r   _byte_widthc                 "    || _         || _        d S r\   r   )r   r9   r%   s      r   r   zObject.__init__D  s    DI!Dr   c                     | j         S r\   )r   r   s    r   	ByteWidthzObject.ByteWidthH  s    r   N)r'   r(   r)   r*   	__slots__r   propertyr   r,   r   r   r   r   @  sI        66#)" " "   8  r   r   c                   D     e Zd ZdZdZd fd	Zed             Zd Z xZ	S )SizedzBBase class for all data accessors which need to read encoded size._sizer   c                     t                                          ||           |dk    r!t          t          | j                  | _        d S || _        d S rM   )superr   r:   r   	SizeBytesr   )r   r9   r%   size	__class__s       r   r   zSized.__init__Q  sH    	GGS*%%%qyy1dn--djjjdjjjr   c                 ,    | j         | j         d         S rM   r   r   s    r   r   zSized.SizeBytesX  s    9d&&q())r   c                     | j         S r\   r   r   s    r   __len__zSized.__len__\  s
    :r   r   )
r'   r(   r)   r*   r   r   r   r   r   __classcell__r   s   @r   r   r   M  sr        JJ)      * * 8*      r   r   c                   2    e Zd ZdZdZed             Zd ZdS )Blobz)Data accessor for the encoded blob bytes.r,   c                 :    | j         dt          |                    S rM   r   r7   r   s    r   Bytesz
Blob.Bytesd      9Qs4yy[!!r   c                 4    d| j         t          |           fz  S )NzBlob(%s, size=%d)r   r   s    r   r   zBlob.__repr__h  s    $)SYY!777r   N)r'   r(   r)   r*   r   r   r   r   r,   r   r   r   r   `  sG        11)" " 8"8 8 8 8 8r   r   c                   >    e Zd ZdZdZed             Zd Zd Zd Z	dS )Stringz+Data accessor for the encoded string bytes.r,   c                 :    | j         dt          |                    S rM   r   r   s    r   r   zString.Bytesp  r   r   c                 R   |                     d          }t          |          }|t          |           k    rot          t          || j                  | j        | j         d<   || j        d|<   t          t          |           |z
            | j        |t          |           <   dS dS )a4  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)encoder7   r@   r   r   r   	bytearray)r   r   encodedns       r   MutatezString.Mutatet  s     ll7##GGACII~~',Q43C'D'Ddi!!!#$di!n(TQ77di#d))T5r   c                 6    | j                             d          S )Nr   r   decoder   s    r   __str__zString.__str__      :W%%%r   c                 4    d| j         t          |           fz  S )NzString(%s, size=%d)r   r   s    r   r   zString.__repr__  s     DIs4yy#999r   N)
r'   r(   r)   r*   r   r   r   r   r   r   r,   r   r   r   r   l  se        33)" " 8"  (& & &: : : : :r   r   c                   N     e Zd ZdZdZ fdZed             Zd Zd Z	d Z
 xZS )Keyz(Data accessor for the encoded key bytes.r,   c                 \    |dk    sJ t                                          ||           d S rH   )r   r   )r   r9   r%   r   s      r   r   zKey.__init__  s0    ????	GGS*%%%%%r   c                 :    | j         dt          |                    S rM   r   r   s    r   r   z	Key.Bytes  r   r   c                 6    | j                             d          S rM   )r   r   r   s    r   r   zKey.__len__  s    9>>!r   c                 6    | j                             d          S )Nasciir   r   s    r   r   zKey.__str__  r   r   c                 4    d| j         t          |           fz  S )NzKey(%s, size=%d)r   r   s    r   r   zKey.__repr__      CII 666r   )r'   r(   r)   r*   r   r   r   r   r   r   r   r   r   s   @r   r  r    s        00)& & & & & " " 8"  & & &7 7 7 7 7 7 7r   r  c                   8    e Zd ZdZdZd Zed             Zd ZdS )Vectorz+Data accessor for the encoded vector bytes.r,   c                 F   |dk     s|t          |           k    r!t          d|t          |           fz            | j        t          |           | j        z  |z            }| j                            || j        z            }t
                              || j        |          S )Nr   'vector index %s is out of [0, %d) range)r7   
IndexErrorr   r   r   Ref
PackedType)r   rb   r   r9   s       r   r   zVector.__getitem__  s    qyyESYY&&@#d))
    )CII(885@AK
)//%$"22
3
3C>>#t/===r   c                     d | D             S )z5Returns the underlying encoded data as a list object.c                     g | ]	}|j         
S r,   Value.0es     r   
<listcomp>z Vector.Value.<locals>.<listcomp>  s    """AG"""r   r,   r   s    r   r  zVector.Value  s     #"T""""r   c                 0    d| j         | j        | j        fz  S )Nz"Vector(%s, byte_width=%d, size=%d))r   r   r   r   s    r   r   zVector.__repr__  s     /	D$dj12 2r   N)	r'   r(   r)   r*   r   r   r   r  r   r,   r   r   r  r    sX        33)> > > # # 8#2 2 2 2 2r   r  c                   v     e Zd ZdZdZd
 fd	Zed             Zed             Zd Z	ed             Z
d	 Z xZS )TypedVectorzGData accessor for the encoded typed vector or fixed typed vector bytes.)_element_typer   r   c                     t                                          |||           |t          j        k    rt          j        }|| _        d S r\   )r   r   r   r   r   r  )r   r9   r%   r   r   r   s        r   r   zTypedVector.__init__  sC    	GGS*d+++t{"" Xl%Dr   c                 J    | j         d | j        t          |           z           S r\   )r   r   r7   r   s    r   r   zTypedVector.Bytes  s#    92d&T2233r   c                     | j         S r\   )r  r   s    r   ElementTypezTypedVector.ElementType  s    r   c                     |dk     s|t          |           k    r!t          d|t          |           fz            | j                            || j        z            }t          || j        d| j                  S )Nr   r  r
   )r7   r  r   r   r   r  r  )r   rb   r9   s      r   r   zTypedVector.__getitem__  sz    qyyESYY&&@#d))
    )//%$"22
3
3CsD$a);<<<r   c           	         | sg S | j         t          j        u r2d t          t          | j        t          |                     D             S | j         t          j        u r5t          t          t          | j        t          |                               S | j         t          j
        u r5t          t          t          | j        t          |                               S | j         t          j        u r5t          t          t          | j        t          |                               S | j         t          j        u rd | D             S | j         t          j        u rd | D             S t          d| j         z            )z'Returns underlying data as list object.c                 ,    g | ]}t          |          S r,   )boolr  s     r   r  z%TypedVector.Value.<locals>.<listcomp>  s    GGG!d1ggGGGr   c                     g | ]	}|j         
S r,   )AsKeyr  s     r   r  z%TypedVector.Value.<locals>.<listcomp>  s    $$$!ag$$$r   c                     g | ]	}|j         
S r,   )AsStringr  s     r   r  z%TypedVector.Value.<locals>.<listcomp>  s    '''Qaj'''r   unsupported element_type: %s)r  r   r   r>   r   r   r7   r   listr   r   r   r   r   r   r   r   s    r   r  zTypedVector.Value  s>     iTY&&GG}Q
CIIFFGGGG		tx	'	'-4:s4yy99:::		ty	(	(-4:s4yy99:::		tz	)	)-4:s4yy99:::		tx	'	'$$t$$$$		t{	*	*''$''''4t7IIJJJr   c                 <    d| j         | j        | j        | j        fz  S )Nz8TypedVector(%s, byte_width=%d, element_type=%s, size=%d))r   r   r  r   r   s    r   r   zTypedVector.__repr__  s'    E	D$d&8$*EF Fr   r   )r'   r(   r)   r*   r   r   r   r   r   r   r  r   r   r   s   @r   r  r    s        OO&)& & & & & & 4 4 84   8= = = K K 8K(F F F F F F Fr   r  c                        e Zd ZdZed             Z fdZed             Zed             Z	ed             Z
d Z xZS )Mapz(Data accessor for the encoded map bytes.c                 ~    t          | t                    r| j        } t          |t                    r|j        }| |k     S r\   )r   r  
AsKeyBytesar-   s     r   CompareKeyszMap.CompareKeys  s=    !S 
,a!S 
,aq5Lr   c                 8   t          |t                    r!t                                          |          S t	          | j        |                    d          | j                  }|dk    r!t                                          |          S t          |          )Nr  ra   )	r   r|   r   r   rc   Keysr   r2  KeyError)r   r   rb   r   s      r   r   zMap.__getitem__  s|    #s &WW  %%%$)SZZ%8%8$:JKKE{{WW  '''
3--r   c                     t          t          | j        d| j        z  | j                            }| j                            d| j        z  | j                  }t          ||t          j                  S )N)r:   r   r   r   r   r  r   r   )r   r%   r9   s      r   r4  zMap.Keys  sa    DIb4+;&;T=M<M&MNOOJ
)

R$"22D4D
E
ECsJ111r   c                 6    t          | j        | j                  S r\   )r  r   r   r   s    r   Valuesz
Map.Values  s    $)T-...r   c                 J    d t          | j        | j                  D             S )Nc                 .    i | ]\  }}|j         |j         S r,   r  )r  kvs      r   
<dictcomp>zMap.Value.<locals>.<dictcomp>  s"    EEEAAGQWEEEr   )zipr4  r:  r   s    r   r  z	Map.Value  s$    EETY)D)DEEEEr   c                 4    d| j         t          |           fz  S )NzMap(%s, size=%d)r   r   s    r   r   zMap.__repr__  r	  r   )r'   r(   r)   r*   r+   r2  r   r   r4  r:  r  r   r   r   s   @r   r-  r-    s        00  <     2 2 82
 / / 8/ F F 8F7 7 7 7 7 7 7r   r-  c                      e Zd ZdZdZed             Zd Zd Ze	d             Z
d Zd Ze	d	             Ze	d
             Ze	d             Zd Ze	d             Ze	d             Ze	d             Zd Ze	d             Ze	d             Zd Ze	d             Ze	d             Ze	d             Ze	d             Ze	d             Ze	d             Zd Ze	d             Ze	d             Z e	d             Z!e	d             Z"e	d             Z#e	d              Z$e	d!             Z%e	d"             Z&e	d#             Z'e	d$             Z(e	d%             Z)e	d&             Z*d'S )(r  z)Data accessor for the encoded data bytes.r   _parent_widthr   _typec                 `    t                               |          \  }}t          | |||          S r\   )r   r   r  )r9   parent_widthr   r%   r}   s        r   r  zRef.PackedType#  s,    K00JsL*e444r   c                 >    || _         || _        || _        || _        d S r\   rC  )r   r9   rG  r%   r}   s        r   r   zRef.__init__(  s$    DI%D!DDJJJr   c                 <    d| j         | j        | j        | j        fz  S )Nz1Ref(%s, parent_width=%d, byte_width=%d, type_=%s)rC  r   s    r   r   zRef.__repr__.  s'    >Y*D,<djIJ Jr   c                 *    | j         d | j                 S r\   )r   rD  r   s    r   _Bytesz
Ref._Bytes2  s    9(d(())r   c                 6    t          d| j        d|          )Nzcannot convert z to )r   rE  )r   target_types     r   _ConvertErrorzRef._ConvertError6  s    
)[[I
J
JJr   c                 B    | j                             d| j                  S rM   )r   r   rD  r   s    r   	_IndirectzRef._Indirect9  s    9a!3444r   c                 (    | j         t          j        u S r\   )rE  r   r   r   s    r   IsNullz
Ref.IsNull<      :""r   c                 (    | j         t          j        u S r\   )rE  r   r   r   s    r   IsBoolz
Ref.IsBool@  rS  r   c                     | j         t          j        u r't          t	          t
          | j                            S | j        dk    S rM   )rE  r   r   r$  r:   r   rK  AsIntr   s    r   AsBoolz
Ref.AsBoolD  s7    zTY'!T[))***Z1_r   c                 h    | j         o+t          t          | j        || j        t
          j                  S )zMutates underlying boolean value bytes in place.

    Args:
      value: New boolean value.

    Returns:
      Whether the value was mutated or not.
    )rU  rF   r   r   rD  r	   r   r   r   s     r   
MutateBoolzRef.MutateBoolK  s/     ; I1di(:HKHHIr   c                     | j         p| j        S r\   )IsIntIsFloatr   s    r   	IsNumericzRef.IsNumericW  s    :%%r   c                 l    | j         t          j        t          j        t          j        t          j        fv S r\   )rE  r   r   r   r   r   r   s    r   r]  z	Ref.IsInt[  s)    :$(D$5ty,. . .r   c                    | j         rdS | j        rt          | j                  S | j        t
          j        u rt          t          | j	                  S | j        t
          j
        u r4t          t          |                                 d| j                           S | j        t
          j        u rt          t          | j	                  S | j        t
          j        u r4t          t          |                                 d| j                           S | j        rt#          | j                  S | j        rt#          | j                  S | j        rt#          | j                  S | j        rt#          | j                  S | j        rt#          | j                  S | j        rt#          | j                  S |                     t
          j                  )z+Returns current reference as integer value.r   N)rR  rU  r|   rX  rE  r   r   r:   r   rK  r   rP  r   r   r   r   IsStringr7   r(  IsKeyr&  IsBlobAsBlobIsVectorAsVectorr   AsTypedVectorr   AsFixedTypedVectorrN  r   s    r   rW  z	Ref.AsInt`  s    { =Q	 =	tx		Q$$$	t(	(	(Q(():$*:):;<<<zTYQ$$$	t)	)	)Q(():$*:):;<<<	 )	 )__	 	)	 )		 )#$$$		  )()))tx(((r   c           	         | j         t          j        u r:t          t          | j        || j        t                              |                    S | j         t          j        u rGt          t          | 	                                || j
        t                              |                    S | j         t          j        u r:t          t          | j        || j        t                              |                    S | j         t          j        u rGt          t          | 	                                || j
        t                              |                    S dS )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)rE  r   r   rF   r   r   rD  r	   r   rP  r   r   r   r   rZ  s     r   	MutateIntzRef.MutateInt~  s    zTXQ	5$*<hjj>O>OPPP	t(	(	(Q((%1AZZ&&( ( (	ty	 	 Q	5$*<hjj>O>OPPP	t)	)	)Q((%1AZZ&&( ( ( Ur   c                 @    | j         t          j        t          j        fv S r\   )rE  r   r   r   r   s    r   r^  zRef.IsFloat  s    :$*d&9:::r   c                     | j         rdS | j        rt          | j                  S | j        rt          | j                  S | j        t          j        u rt          t          | j                  S | j        t          j        u r4t          t          |                                 d| j                           S | j        rt          | j                  S | j        r!t          t%          | j                            S |                                 r!t          t%          | j                            S |                                 r!t          t%          | j                            S |                     t          j                  )z2Returns current reference as floating point value.g        N)rR  rU  floatrX  r]  rW  rE  r   r   r:   r   rK  r   rP  r   rb  r(  rf  r7   rg  r   rh  r   FixedTypedVectorrN  r   s    r   AsFloatzRef.AsFloat  sL    { +S	 +4;	 +4:	tz	!	!Q$$$	t*	*	*Q(():$*:):;<<<	 	+4=!!!	 +3t}%%&&&					 +3t)**+++		 	 	"	" +3t,--...tz***r   c           	      h   | j         t          j        u r?t          t          | j        || j        t                              | j                            S | j         t          j	        u rLt          t          | 
                                || j        t                              | j                            S dS )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)rE  r   r   rF   r   r   rD  r	   r&   r   rP  r   rZ  s     r   MutateFloatzRef.MutateFloat  s     zTZQ	5$*<ZZ 2335 5 5	t*	*	*Q((%1AZZ 0113 3 3 Ur   c                 (    | j         t          j        u S r\   )rE  r   r   r   s    r   rc  z	Ref.IsKey      :!!r   c                     | j         r,t          |                                 | j                  j        S |                     t          j                  r\   )rc  r  rP  r   r   rN  r   r   r   s    r   r/  zRef.AsKeyBytes  sB    z )!!4#344::tx(((r   c                     | j         r4t          t          |                                 | j                            S |                     t          j                  r\   )rc  strr  rP  r   rN  r   r   r   s    r   r&  z	Ref.AsKey  sG    z )T^^%%t'788999tx(((r   c                 (    | j         t          j        u S r\   )rE  r   r   r   s    r   rb  zRef.IsString  s    :$$r   c                     | j         r,t          |                                 | j                  j        S | j        r| j        S |                     t          j	                  r\   )
rb  r   rP  r   r   rc  r/  rN  r   r   r   s    r   AsStringByteszRef.AsStringBytes  sT    } ,DNN$$d&677==	 ,_t{+++r   c                     | j         r4t          t          |                                 | j                            S | j        r| j        S |                     t          j	                  r\   )
rb  rw  r   rP  r   rc  r&  rN  r   r   r   s    r   r(  zRef.AsString  sY    } ,(($*:;;<<<	 ,Zt{+++r   c                 v    t          |                                 | j                                      |          S r\   )r   rP  r   r   rZ  s     r   MutateStringzRef.MutateString  s-    $..""D$455<<UCCCr   c                 (    | j         t          j        u S r\   )rE  r   r   r   s    r   rd  z
Ref.IsBlob  rS  r   c                     | j         r,t          |                                 | j                  j        S |                     t          j                  r\   )rd  r   rP  r   r   rN  r   r   r   s    r   re  z
Ref.AsBlob  sB    { *$..""D$455;;ty)))r   c                 F    | j         p| j        p|                                 S r\   )rf  r   r   r   s    r   IsAnyVectorzRef.IsAnyVector  s#    =KD.K$2I2I2K2KKr   c                 @    | j         t          j        t          j        fv S r\   )rE  r   r   r   r   s    r   rf  zRef.IsVector  s    :$+tx000r   c                     | j         r't          |                                 | j                  S |                     t
          j                  r\   )rf  r  rP  r   rN  r   r   r   s    r   rg  zRef.AsVector  s?    } ,DNN$$d&6777t{+++r   c                 @    t                               | j                  S r\   )r   r   rE  r   s    r   r   zRef.IsTypedVector	  s    dj)))r   c                     | j         rEt          |                                 | j        t                              | j                            S |                     d          )NTYPED_VECTOR)r   r  rP  r   r   r   rE  rN  r   s    r   rh  zRef.AsTypedVector  s\     /))4+;66tzBBD D D ~...r   c                 @    t                               | j                  S r\   )r   r   rE  r   s    r   r   zRef.IsFixedTypedVector  s    ""4:...r   c                     | j         rKt                              | j                  \  }}t	          |                                 | j        ||          S |                     d          )NFIXED_TYPED_VECTOR)r   r   r   rE  r  rP  r   rN  )r   r   r   s      r   ri  zRef.AsFixedTypedVector  s]     5==djIIlD))4+;\4PPP3444r   c                 (    | j         t          j        u S r\   )rE  r   r   r   s    r   IsMapz	Ref.IsMap!  rt  r   c                     | j         r't          |                                 | j                  S |                     t
          j                  r\   )r  r-  rP  r   rN  r   r   r   s    r   AsMapz	Ref.AsMap%  s?    z )!!4#3444tx(((r   c                 x   | j         rdS | j        r| j        S | j        r| j        S | j        r| j        S | j        r| j        S | j	        r| j
        S | j        r| j        S | j        r| j        j        S | j        r| j        j        S | j        r| j        j        S | j        r| j        j        S t-          d| z            )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)rR  rU  rX  r]  rW  r^  rp  rb  r(  rc  r&  rd  re  r  r  r  rf  rg  r   rh  r   ri  r   r   s    r   r  z	Ref.Value,  s     { ;T	 ;[	 ;Z	 ;\	 ;]	 ;Z	 ;[	 	;Z	 ;]  		 ;%%		  ;$**2T9:::r   N)+r'   r(   r)   r*   r   r+   r  r   r   r   rK  rN  rP  rR  rU  rX  r[  r_  r]  rW  rk  r^  rp  rr  rc  r/  r&  rb  rz  r(  r}  rd  re  r  rf  rg  r   rh  r   ri  r  r  r  r,   r   r   r  r    s       11=)5 5 <5  J J J * * 8*K K K5 5 5 # # 8# # # 8#   8
I 
I 
I & & 8& . . 8. ) ) 8):  . ; ; 8; + + 8+.  & " " 8" ) ) 8) ) ) 8) % % 8% , , 8, , , 8,D D D # # 8# * * 8* L L 8L 1 1 81 , , 8, * * 8* / / 8/ / / 8/ 5 5 85 " " 8" ) ) 8)  ;  ; 8 ;  ;  ;r   r  c                 H    	 t          |            dS # t          $ r Y dS w xY w)NTF)iterr   )objs    r   _IsIterabler  P  s9    III4	   55s    
!!c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
d Zed	             Zed
             Zed             Zej        fdZddZej        fdZd Zd ZdS )r  z;Class to represent given value during the encoding process.c                  L    t          dt          j        t          j                  S rM   )r  r   r   r	   r   r,   r   r   Nullz
Value.Null[  s    DIx{+++r   c                 L    t          | t          j        t          j                  S r\   )r  r   r   r	   r   r   s    r   Boolz
Value.Bool_  s    	8;///r   c                 8    t          | t          j        |          S r\   )r  r   r   r   r~   s     r   Intz	Value.Intc  s    ),,,r   c                 8    t          | t          j        |          S r\   )r  r   r   r  s     r   UIntz
Value.UIntg  s    	9---r   c                 8    t          | t          j        |          S r\   )r  r   r   r  s     r   FloatzValue.Floatk  s    
I...r   c                 L    t          | t          j        t          j                  S r\   )r  r   r   r	   r   )rS   s    r   r  z	Value.Keyo  s    8;///r   c                 0    || _         || _        || _        d S r\   _valuerE  _min_bit_width)r   r   r}   min_bit_widths       r   r   zValue.__init__s  s     DKDJ (Dr   c                     | j         S r\   )r  r   s    r   r  zValue.Valuez  s
    ;r   c                     | j         S r\   )rE  r   s    r   r   z
Value.Type~  s
    :r   c                     | j         S r\   )r  r   s    r   MinBitWidthzValue.MinBitWidth  s    r   c                 h    t                               | j        |                     |                    S r\   )r   r   rE  StoredWidthr   parent_bit_widths     r   StoredPackedTypezValue.StoredPackedType  s'    99TZ!1!12B!C!CDDDr   r   c                    t                               | j                  r| j        S dD ]J}|t	          ||          z   ||z  z   }t
                              || j        z
            }|d|z  k    r|c S Kt          d          )Nr!   r
   zrelative offset is too big)	r   r   rE  r  rK   r	   r   r  r   )r   rI   
elem_indexr%   
offset_locr~   s         r   	ElemWidthzValue.ElemWidth  s    }}TZ   !     
mHjAAA
*+j**Z$+566i	Y	'	' 
(
1
2
22r   c                 x    t                               | j                  rt          | j        |          S | j        S r\   )r   r   rE  maxr  r  s     r   r  zValue.StoredWidth  s5    }}TZ   8$&6777r   c                 8    d| j         d| j        d| j        dS )NzValue(z, )r  r   s    r   r   zValue.__repr__  s&     "&+++tzzz4;N;N;NOOr   c                 *    t          | j                  S r\   )rw  r  r   s    r   r   zValue.__str__  s    t{r   Nr   )r'   r(   r)   r*   r+   r  r  r  r  r  r  r   r   r  r   r  r	   r   r  r  r  r   r   r,   r   r   r  r  X  s       CC, , <, 0 0 <0 - - <- . . <. / / </ 0 0 <0( ( (   8   8   8 /7k E E E E	3 	3 	3 	3 *2    
P P P    r   r  c                       fd}|S )Nc                     t          |d         t                    r1|                     |d                     | g|dd          R i | d S  | g|R i | d S )Nr   r
   )r   rw  r  )r   argskwargsfuncs      r   wrapperzInMap.<locals>.wrapper  s    $q'3 "
hhtAw
d4%$qrr(%%%f%%%%%
d4!$!!!&!!!!!r   r,   r  r  s   ` r   InMapr    s#    " " " " " 
.r   c                       fd}|S )Nc                     t          |          dk    r | |d                    d S t          |          dk    r/|                     |d                     | |d                    d S t          d          )Nr
   r   r   zinvalid number of arguments)r7   r  r   )r   r  r  s     r   r  zInMapForString.<locals>.wrapper  s~    
4yyA~~
d4a	Ta
hhtAw
d4a4555r   r,   r  s   ` r   InMapForStringr    s#    6 6 6 6 6 
.r   c                   :    e Zd ZdZd Zd Zd Zed             ZdS )PoolzCCollection of (data, offset) pairs sorted by data for quick access.c                     g | _         d S r\   _poolr   s    r   r   zPool.__init__      DJJJr   c                     ||f}t          | j        |d           }|dk    r| j        |         \  }}|S | j                            ||           d S )Nc                 &    | d         |d         k     S rM   r,   r0  s     r   r_   z#Pool.FindOrInsert.<locals>.<lambda>  s    qtad{ r   ra   )rc   r  insert)r   datarS   dorb   _s         r   FindOrInsertzPool.FindOrInsert  s]    	vB$*b*B*BCCE{{*U#iamJeR   4r   c                     g | _         d S r\   r  r   s    r   Clearz
Pool.Clear  r  r   c                 $    d | j         D             S )Nc                     g | ]\  }}|S r,   r,   )r  r  r  s      r   r  z!Pool.Elements.<locals>.<listcomp>  s    +++WT1D+++r   r  r   s    r   ElementszPool.Elements  s    ++
++++r   N)	r'   r(   r)   r*   r   r  r  r   r  r,   r   r   r  r    sb        KK       , , 8, , ,r   r  c                      e Zd ZdZddej        fdZd Zed             Z	ed             Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd0dZd Zed             Zed             Zd Zd0dZed             Zed1d            Zed1d            Zed1d            Z ed1d            Z!ed1d            Z"ed1d             Z#d! Z$d" Z%e&j'        d0d#            Z(ed$             Z)e&j'        d0d%            Z*ed0d&            Z+e	 	 d2d'            Z,d( Z-d) Z.e&j'        d0d*            Z/d+ Z0d, Z1ed-             Z2ed.             Z3ed/             Z4dS )3r   z?Helper class to encode structural data into flexbuffers format.FTc                     || _         || _        || _        t                      | _        t                      | _        d| _        t                      | _        g | _	        d S 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   zBuilder.__init__  sP     (D!D 3DDVVDNDNDIDKKKr   c                 *    t          | j                  S r\   )r7   r   r   s    r   r   zBuilder.__len__  s    ty>>r   c                     | j         S r\   )r  r   s    r   
StringPoolzBuilder.StringPool  s    r   c                     | j         S r\   )r  r   s    r   KeyPoolzBuilder.KeyPool  s
    >r   c                     | j                                          | j                                         d| _        t	                      | _        g | _        d S r  )r  r  r  r  r   r   r  r   s    r   r  zBuilder.Clear  sH    NDNDIDKKKr   c                    | j         rt          d          t          | j                  dk    rt          d          | j        d         }|                     |                    t          | j                                      }|                     ||           |                     t          |
                                d           |                     t          |d           d| _        | j        S )z8Finishes encoding process and returns underlying buffer.z!builder has been already finishedr
   zinternal stack size must be oner   r$   T)r  RuntimeErrorr7   r  _Alignr  r   	_WriteAny_Writer   r  finished)r   r   r%   s      r   FinishzBuilder.Finish  s    ~ ><=== 4;1:;;;KNEU__S^^<<==JNN5ZN000KK5))++K:::KK:!K,,,DM9r   c                 Z    | j         |d          }|d |                    d                   S rM   )r   r   )r   rS   r   s      r   _ReadKeyzBuilder._ReadKey  s+    
)FGG
C||r   c                     d|z  }| j                             dt          t          | j                   |          z             |S )Nr
       )r   extendrK   r7   )r   	alignmentr%   s      r   r  zBuilder._Align  s>    iJIW}S^^ZHHHIIIr   c                 X    | j                             t          |||                     d S r\   )r   r  r@   )r   r8   r   r%   s       r   r  zBuilder._Write  s*    IU3z2233333r   c                 X    | j                             t          |||                     d S r\   )r   r  rC   )r   r8   rB   r%   s       r   _WriteVectorzBuilder._WriteVector  s*    I[fj99:::::r   c                     t          | j                  |z
  }|dk    s|dd|z  z  k     sJ |                     t          ||           d S )Nr#   r
   )r7   r   r  r   )r   rS   r%   relative_offsets       r   _WriteOffsetzBuilder._WriteOffset  sR    $)nnv-O??oq:~1FGGGGKK?J/////r   c           
      Z   t           j        t          t           j        t          t           j        t
          t           j        t          t           j        t          i	                    |j                   }|r| 
                    ||j        |           d S |                     |j        |           d S r\   )r   r   r   r   r   r   r   r   r   getr  r  r  )r   r   r%   r8   s       r   r  zBuilder._WriteAny  s~    	1diDHaAtz1	c%*oo   1
kk#u{J/////
Z00000r   c                    t                               t          |                    }|                     |          }|                     t          t          |          |           t          | j                  }| j                            |           |r| j                            d           | j                            t          |||                     |S rM   )
r	   r   r7   r  r  r   r  appendr  r  )r   r  append_zeror}   r~   r%   locs          r   
_WriteBlobzBuilder._WriteBlob(  s    

3t99%%IY''JKK3t99j)))
di..CIT 
iqKuS%33444Jr   c                    t                               |          }t                               t          |                    |k    rt	          d          |                     |           |s)|                     t          t          |          |           t          | j                  }t          j	        t          t          j        t          t          j        t          i                    |          }|st          d          |                     |||           t                              ||rt          |          nd          }| j                            t)          |||                     |S )z7Writes scalar vector elements to the underlying buffer.z*too many elements for the given byte_widthzunsupported element_typer   )r	   r&   r   r7   r   r  r  r   r   r   r   r   r   r   r  r   r  r   r  r  r  )	r   r   r%   elementsfixedr~   r  r8   r}   s	            r   _WriteScalarVectorzBuilder._WriteScalarVector3  s$   

:&&I zz#h--  9,,CDDDKK	 0
kk!S]]J///
di..C8Q	1dj!
4
8
8
F
FC 20111c8Z000|e-JS]]]KKEKuS%33444Jr   Nc           	         t          |          }|r|st          d          t          | j        t                              |                    }d}|r:t          ||                    t          | j                                      }|dz  }t          j	        }t          |          D ]h\  }	}
t          ||
                    t          | j                  ||	z                       }|r(|	dk    r|
j        }N||
j        k    rt          d          i|r)t                              |          st          d          |                     |          }|r?|                     |j        |           |                     t
          d|j        z  |           |s|                     t
          ||           t          | j                  }|D ]}
|                     |
|           |s2|D ]/}
| j                            |
                    |                     0|rt          j        }n.|r t                              ||r|nd          }nt          j        }t          |||          S )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   )r7   r   r  r  r	   r   r  r   r   r   	enumerater  r   r  r  r  r  r  r  r  r  r   r   r   )r   r  typedr  keysr=   r~   prefix_elemsvector_typer/   r  r%   r  r}   s                 r   _CreateVectorzBuilder._CreateVectorK  sm   ]]F 5U 53444 D-xzz&/A/ABBIL iDI!?!?@@ial(K(## Q Q1iS^^\A=M!N!NOOi	 Q66++AF""OPPP DT77DD DBCCCY''J 8

J///
kk!Q$**J777 )
kk!VZ((( di..C $ $
nnQ
####  8 8 8!	++I667777 hee	 "";%0FQGGeY'''r   c                 N   |                      |          }t          | j                  }t          j        t
          t          j        t          t          j        t          i|         }| 
                    |||           | j                            t          |||                     d S r\   )r  r7   r   r   r   r   r   r   r   r   r  r  r  r  )r   r   r}   r~   r%   r  r8   s          r   _PushIndirectzBuilder._PushIndirect  s    Y''J
di..C1AQ 	C
 	KKUJ'''KuS%3344444r   c                     t          | j                  }|                    d          }|                     |dt          j                  }| j        r;| j                            ||          }|| j        |d= |x| j	        d         _
        }|S )zEncodes string value.r   Tr  r}   Nra   )r7   r   r   r   r   r   r  r  r  r  r  )r   r   reset_tor   r  prev_locs         r   r   zBuilder.String  s     49~~Hll7##G
//'t4;/
G
GC 0"//==h		Ihii '//BJr   c                 F    |                      |dt          j                  S )zEncodes binary blob value.

    Args:
      value: A byte/bytearray value to encode

    Returns:
      Offset of the encoded value in underlying the byte buffer.
    Fr  )r   r   r   rZ  s     r   r   zBuilder.Blob  s     ??5e49?EEEr   c                    t          |t          t          f          r|}n|                    d          }d|v rt	          d          t          | j                  }| j                            |           | j                            d           | j	        r)| j
                            ||          }|| j        |d= |}| j                            t                              |                     |S )a  Encodes 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   r7   r   r  r  r  r  r  r  r  r  )r   r   r   r  r  s        r   r  zBuilder.Key  s     %%+,, &ggW%%gG||/000
di..CIWIQ ,,Wc::h		IcddOKuyy~~&&&Jr   c                     |r|                      |           | j                            t                                                     dS )zEncodes None value.N)r  r  r  r  r  r   s     r   r  zBuilder.Null  s=    
 
hhsmmmKuzz||$$$$$r   c                 j    | j                             t                              |                     dS )zDEncodes boolean value.

    Args:
      value: A boolean value.
    N)r  r  r  r  rZ  s     r   r  zBuilder.Bool  s,     	Kuzz%(()))))r   r   c                     |dk    rt                               |          nt                               |          }| j                            t
                              ||                     dS )zEncodes 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&   r  r  r  r  r   r   r%   r~   s       r   r  zBuilder.Int  sX     &01__

5!!!(**Z:P:PIKuyy	2233333r   c                     |dk    rt                               |          nt                               |          }|                     |t          j        |           dS )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   IndirectIntzBuilder.IndirectInt  sO     &01__

5!!!(**Z:P:PIud/;;;;;r   c                     |dk    rt                               |          nt                               |          }| j                            t
                              ||                     dS )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&   r  r  r  r  r  s       r   r  zBuilder.UInt  sX     &01__

5!!!(**Z:P:PIKuzz%3344444r   c                     |dk    rt                               |          nt                               |          }|                     |t          j        |           dS )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   IndirectUIntzBuilder.IndirectUInt  sO     &01__

5!!!(**Z:P:PIud0)<<<<<r   c                     |dk    rt                               |          nt                               |          }| j                            t
                              ||                     dS )zEncodes floating point value.

    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  r  s       r   r  zBuilder.Float  sX     &01__

5!!!(**Z:P:PIKu{{5)4455555r   c                     |dk    rt                               |          nt                               |          }|                     |t          j        |           dS )zEncodes 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   IndirectFloatzBuilder.IndirectFloat  sO     &01__

5!!!(**Z:P:PIud19=====r   c                 *    t          | j                  S )zStarts vector construction.r7   r  r   s    r   _StartVectorzBuilder._StartVector      t{r   c                     |                      | j        |d         ||          }| j        |d= | j                            |           |j        S )z6Finishes vector construction by encodung its elements.N)r  r  r  r  )r   rN   r  r  vecs        r   
_EndVectorzBuilder._EndVector  sP    


T[0%
?
?CEFFKs9r   c              #      K   |r|                      |           	 |                                 }| V  |                     |dd           d S # |                     |dd           w xY w)NFr  r  r  r#  r'  r   r   rN   s      r   r  zBuilder.Vector$  sx      
 
hhsmmm7!!ejjj
ooe5o66666dooe5o6666   A A'c                     |                                  5  |D ]}|                     |           	 ddd           dS # 1 swxY w Y   dS )zEncodes sequence of any elements as a vector.

    Args:
      elements: sequence of elements, they may have different types.
    N)r  Add)r   r  r  s      r   VectorFromElementszBuilder.VectorFromElements/  s     
    !                 s   >AAc              #      K   |r|                      |           	 |                                 }| V  |                     |dd           d S # |                     |dd           w xY w)NTFr)  r*  r+  s      r   r  zBuilder.TypedVector:  sx      
 
hhsmmm6!!ejjj
ooe4uo55555dooe4uo5555r,  c                    t          |t          j                  r|j        dk    r%|                     t          j        d|d           d
S |j        dk    r%|                     t          j        d|d           d
S |j        dv r*|                     t          j        |j        |d           d
S |j        dv r*|                     t          j        |j        |d           d
S t          d	|j        z            || j
        n|                     |          }|                                 5  |D ]} ||           	 d
d
d
           d
S # 1 swxY w Y   d
S )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.
    r3   r"   Fr  r4   r#   )r-   r.   r/   lr0   )r&   r1   r   Lr2   zunsupported array typecode: %sN)r   arraytypecoder  r   r   r   itemsizer   r   r.  Adderr  )r   r  r   addr  s        r   TypedVectorFromElementszBuilder.TypedVectorFromElementsE  s    (EK(( 		c	!	!
AxuEEEEE##
AxuEEEEE 999Hh' 	  	@ 	@ 	@ 	@ 	@ 999Ix((% 	  	A 	A 	A 	A 	A 9H<MMNNN$,DHH$**\2J2Jc   	 	A
#a&&&&	                 s   *E		EEc                 j   dt          |          cxk    rdk    sn t          d          d |D             }t          |          dk    rt          d          |\  }|Kt          t          j        t          t          j        i                    |          }|st          d|z            |d	k    rht          j	        t          j        t          j        t          j        t          j        t          j        i|         dt          fd
|D                       z  }|                     |||d           dS )a  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 supportedc                 ,    h | ]}t          |          S r,   )typer  s     r   	<setcomp>z7Builder.FixedTypedVectorFromElements.<locals>.<setcomp>v  s    '''T!WW'''r   r
   z%all elements must be of the same typeNr)  r   c              3   .   K   | ]} |          V  d S r\   r,   )r  r  widths     r   	<genexpr>z7Builder.FixedTypedVectorFromElements.<locals>.<genexpr>  s+      77EE!HH777777r   Tr2  )r7   r   r   r|   r   r   rn  r   r  r   r	   r   r   r   r  r  )r   r  r   r%   typesr}   r@  s         @r   FixedTypedVectorFromElementsz$Builder.FixedTypedVectorFromElementsa  s5   $ H""""""""?@@@''h'''E
5zzQ=>>>FE48UDJ7;;EBBl @6>???Q
)XZ
(HJ
*hj 		e
 7777h777777jL*hdKKKKKr   c                 *    t          | j                  S )zStarts map construction.r"  r   s    r   	_StartMapzBuilder._StartMap  r$  r   c                      j         |d         }t          |          dz  dk    rt          d          |ddd         D ]1}|j        t          j        urt          dt          j        z            2t          |ddd         |ddd                   }t          | fd          } j         |d= |D ]} j                             |                                 j         |dd         d	d
          }                      j         |dz   dd         d
d
|          } j         |d=  j         	                    |           |j
        S )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                 D                         | d         j                  S rM   )r  r  )pairr   s    r   r_   z!Builder._EndMap.<locals>.<lambda>  s    4==a+G+G r   )r   TFr)  )r  r  r  )r  r7   r  r   r   r@  sortedr  r  r  r  )r   rN   stackr   pairsrH  r  rB   s   `       r   _EndMapzBuilder._EndMap  s    KE
5zzA~ABBBSSqSz I I		!	!<txGHHH 
" ccc
E!$Q$K((E5GGGGHHHEEFF  
kdk%((34uMMDEAILqL!e$   H HF 	EFFKv<r   c              #      K   |r|                      |           	 |                                 }| V  |                     |           d S # |                     |           w xY wr\   )r  rE  rL  r+  s      r   r-  zBuilder.Map  sj      
 
hhsmmmnnejjj
ll5dll5s   A
 
A!c                     |                                  }|                                D ]/\  }}|                     |           |                     |           0|                     |           d S r\   )rE  itemsr  r.  rL  )r   r  rN   r=  r>  s        r   MapFromElementszBuilder.MapFromElements  sf    NNE    1
hhqkkk
hhqkkkkLLr   c                 f   t           j        | j        t           j        | j        t           j        | j        t           j        | j        t           j	        | j
        t           j        | j        t           j        | j        t           j        | j        t           j        | j        t           j        | j        i
|         S r\   )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   r8  zBuilder.Adder  sv    	49$(4+	49D-
DJT/$(	49T[  r   c                    ||                                   dS t          |t                    r|                     |           dS t          |t                    r|                     |           dS t          |t                    r|                     |           dS t          |t                    r| 	                    |           dS t          |t          t          f          r|                     |           dS t          |t                    rt|                                 5  |                                D ]/\  }}|                     |           |                     |           0	 ddd           dS # 1 swxY w Y   dS t          |t$          j                  r|                     |           dS t)          |          r|                     |           dS t-          dt/          |          z            )z$Encodes value of any supported type.Nzunsupported python type: %s)r  r   r$  r  r|   r  rn  r  rw  r   r  r   r   dictr-  rO  r  r.  r5  r:  r  r/  r   r=  )r   r   r=  r>  s       r   r.  zBuilder.Add  s,    }
iikkkkk	E4	 	  C
ii	E3		 C
hhuooooo	E5	!	! C
jj	E3		 C
kk%	EE9-	.	. C
ii	E4	 	  
C88::  KKMM 	 	DAq
((1+++
((1++++	                  
E5;	'	' C
""5)))))	U		 C
e$$$$$3d5kkABBBs   %AE88E<?E<c                     | j         d         S )Nra   )r  r   s    r   	LastValuezBuilder.LastValue  s    ;r?r   c                 :    | j                             |           d S r\   )r  r  rZ  s     r   
ReuseValuezBuilder.ReuseValue  s    Kur   r\   r   rM   )5r'   r(   r)   r*   r	   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r  r   r  r  r  r  r  r  r  r  r   r#  r'  
contextlibcontextmanagerr  r/  r  r:  rC  rE  rL  r-  rP  r8  r.  rU  rW  r,   r   r   r   r     s       GG ##+;        8   8    *    
4 4 4; ; ;0 0 0
1 1 1	 	 	  08( 8( 8( 8(t	5 	5 	5   > 		F 	F 	5	F  <% % % % 	* * 	5* 	4 4 4 	54 	< < < 	5< 	5 5 5 	55 	= = = 	5= 	6 6 6 	56 	> > > 	5>     7 7 7 7 	  	5 6 6 6 6 	   	56 	 15./'L 'L 'L 	5'LR    6         C C >C4   8 	  	5  r   r   c                     t          |           dk     rt          d          | d         }t                              t	          | d|z              || d                   S )z/Returns root `Ref` object for the given buffer.r   zbuffer is too smallra   r   r7  r   )r7   r   r  r  r   )r9   r%   s     r   r   r     sc    XX\\
*
+
++2w*		#Z !!:3r7 
 
D 
D Dr   c                 p    t                      }|                    |            |                                S )z1Returns bytearray with the encoded python object.)r   r.  r  )r  fbbs     r   r   r     s(    		#''#,,,	r   c                 *    t          |           j        S )z.Returns python object decoded from the buffer.)r   r  )r9   s    r   r   r     s    		r   )(r*   r5  rX  enumr   __all__IntEnumr	   r   r   r   r:   r>   r@   rC   rF   rK   rT   rZ   rc   r   r   r   r   r   r   r  r  r  r-  r  r  r  r  r  r  r   r   r   r   r,   r   r   <module>ra     s          
:8 8 8 8 8t| 8 8 8v 	$$$$6 6 6A A A
5 5 5H H H  ' ' '
$ $ $  $ '9&8    s@ s@ s@ s@ s@4< s@ s@ s@l%M %M %M %M %M %M %M %MP
 
 
 
 
 
 
 
    F   &	8 	8 	8 	8 	85 	8 	8 	8 :  :  :  :  :U  :  :  :F7 7 7 7 7& 7 7 7,2 2 2 2 2U 2 2 2.9F 9F 9F 9F 9F% 9F 9F 9Fx$7 $7 $7 $7 $7& $7 $7 $7Nn; n; n; n; n; n; n; n;b	  J J J J J J J JZ  	 	 	, , , , , , , ,.Y Y Y Y Y Y Y YxD D D      r   