
    bIg                       U d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlZd dlZd dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- eee.e/e/e/f   ee.e/e/e/e/f   f   Z0ee0   Z1eee.e.f      Z2g dZ3de4d<   eee.e/f   e/f   Z5d>d	Z6 e6e3      Z7	 d?	 	 	 	 	 d@d
Z8	 	 	 	 dA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dBdZ9	 	 	 	 	 	 dCdZ:	 	 	 	 dA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dDdZ;dCdZ<	 	 	 	 	 dE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dFdZ=dGdZ>dGdZ?	 	 	 	 	 	 dHdZ@dIdZAdJdZBd?dKdZC	 	 	 	 dL	 	 	 	 	 	 	 	 	 	 	 dMdZD	 	 	 	 dN	 	 	 	 	 	 	 	 	 	 	 dMdZEdOdZF	 d?	 	 	 	 	 	 	 	 	 	 	 dPdZG	 	 	 	 	 	 	 	 dQdZH	 	 	 	 	 	 	 	 dRdZI	 	 	 	 	 	 	 	 	 	 dSdZJ	 	 	 	 	 	 	 	 dTdZKdUdZL	 	 dV	 	 	 	 	 	 	 	 	 dWdZM	 dX	 	 	 	 	 	 	 dYd ZNdZd!ZOd[d"ZPd\d#ZQ	 dX	 	 	 	 	 	 	 d]d$ZR	 	 d^	 	 	 	 	 	 	 	 	 	 	 d_d%ZS	 dX	 	 	 	 	 	 	 d]d&ZT	 	 d^	 	 	 	 	 	 	 	 	 	 	 d_d'ZU	 	 	 	 d`d(ZV	 	 	 	 d`d)ZW	 	 	 	 	 	 dad*ZX	 db	 	 	 	 	 	 	 dcd+ZYddd,ZZ	 	 d^	 	 	 	 	 	 	 	 	 	 	 ded-Z[	 d?	 	 	 	 	 dfd.Z\dgd/Z]dhd0Z^did1Z_djd2Z`	 dk	 	 	 	 	 	 	 dld3Zadbdmd4Zbdnd5Zc	 	 	 	 	 	 	 	 	 	 dod6Zddpd7Zedqd8Zfdrd9Zgdrd:Zhdsd;Zidtd<Zjej                  j                         D  ci c]  \  } }|| 
 c}} Zmdud=Znyc c}} w )v    )annotationsN)isnan)
AnyCallableDictKeysViewListSequenceTupleTypeVarUnioncast)
IR_VERSIONAttributeProtoFunctionProto
GraphProtoMapProto
ModelProto	NodeProtoOperatorSetIdProtoOptionalProtoSequenceProtoSparseTensorProtoTensorProtoTensorShapeProtoTrainingInfoProto	TypeProtoValueInfoProtodefsmappingsubbyte))z1.0      r#   )z1.1r"      r#   )z1.1.2r"      r#   )z1.2r"      r#   )z1.3r"      r#   )z1.4.1   	   r#   )z1.5.0r$   
   r#   )z1.6.0r%         )z1.7.0r&      r,   r#   )z1.8.0r&      r,   r#   )z1.8.1r&   r.   r,   r#   )z1.9.0r&      r,   r#   )z1.10.0r'      r,   r#   )z1.10.1r'   r0   r,   r#   )z1.10.2r'   r0   r,   r#   )z1.11.0r'      r"   r#   )z1.12.0r'      r"   r#   )z1.13.0r'      r"   r#   )z1.13.1r'   r3   r"   r#   )z1.14.0r)      r"   r#   )z1.14.1r)   r4   r"   r#   )z1.15.0r)      r(   r#   )z1.16.0r*      r$   r#   )z1.17.0r*      r$   r#   VersionTableTypeVERSION_TABLEc                0    i dfd}| D ]  } ||  	 S )zOCreate a map from (opset-domain, opset-version) to ir-version from above table.c                h    ~ t        g d|      D ]  }|vs||<   |d   dk(  s|d|d   f<   ! y )N)ai.onnxz
ai.onnx.mlai.onnx.trainingr   r=   zai.onnx.preview.trainingr#   )zip)release_version
ir_versionargspairresults       H/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/helper.pyprocessz-create_op_set_id_version_map.<locals>.processZ   sQ    EtL 	MD6!)t700BLF5tAw>?		M    )r?   strr@   intrA   r   returnNone )tablerE   rowrC   s      @rD   create_op_set_id_version_maprN   V   s+    FM  MrF   c                J    ddfd| rt        fd| D              S S )a=  Given list of opset ids, determine minimum IR version required.

    Args:
        opsetidlist: A sequence of OperatorSetIdProto.
        ignore_unknown: If True, ignore unknown domain and return default minimum
            version for that domain.

    Returns:
        The minimum IR version required (integer)
    r"   c                T    | xs d|f}|t         v r	t         |   S rS t        d      )Nr<   zUnsupported opset-version.)OP_SET_ID_VERSION_MAP
ValueError)domainversionkeydefault_min_versionignore_unknowns      rD   find_minz)find_min_ir_version_for.<locals>.find_miny   s;    "G,''(--&&566rF   c              3  X   K   | ]!  } |j                   |j                         # y wN)rS   rT   ).0xrX   s     rD   	<genexpr>z*find_min_ir_version_for.<locals>.<genexpr>   s      FQ8AHHaii0Fs   '*)rS   
str | NonerT   rH   rI   rH   )max)opsetidlistrW   rV   rX   s    `@@rD   find_min_ir_version_forra   j   s,     7 F+FFFrF   c                R   t               }| |_        |j                  j                  |       |j                  j                  |       |r||_        |r||_        |||_        |||_        |r9|j                  j                  d t        |j                               D               |S )a  Construct a NodeProto.

    Args:
        op_type (string): The name of the operator to construct
        inputs (list of string): list of input names
        outputs (list of string): list of output names
        name (string, default None): optional unique identifier for NodeProto
        doc_string (string, default None): optional documentation string for NodeProto
        domain (string, default None): optional domain for NodeProto.
            If it's None, we will just use default domain (which is empty)
        overload (string, default None): optional field, used to
            resolve calls to model-local functions
        **kwargs (dict): the attributes of the node.  The acceptable values
            are documented in :func:`make_attribute`.

    Returns:
        NodeProto
    c              3  >   K   | ]  \  }}|t        ||        y wrZ   )make_attribute)r[   rU   values      rD   r]   zmake_node.<locals>.<genexpr>   s)      
U  3&
s   )r   op_typeinputextendoutputname
doc_stringrS   overload	attributesorteditems)	rf   inputsoutputsrj   rk   rS   rl   kwargsnodes	            rD   	make_nodert      s    8 ;DDLJJfKKw	$  
$V\\^4
 	

 KrF   c                6    t               }| |_        ||_        |S zConstruct an OperatorSetIdProto.

    Args:
        domain (string): The domain of the operator set id
        version (integer): Version of operator set id
    Returns:
        OperatorSetIdProto
    r   rS   rT   )rS   rT   operatorsetids      rD   make_operatorsetidry      s"     '(M!M#MrF   c                   |g }|g }|g }t               }|j                  j                  |        ||_        |j                  j                  |       |j
                  j                  |       |j                  j                  |       |j                  j                  |       |j                  j                  |       |r||_	        |S )a  Construct a GraphProto

    Args:
        nodes: list of NodeProto
        name (string): graph name
        inputs: list of ValueInfoProto
        outputs: list of ValueInfoProto
        initializer: list of TensorProto
        doc_string (string): graph documentation
        value_info: list of ValueInfoProto
        sparse_initializer: list of SparseTensorProto
    Returns:
        GraphProto
    )
r   rs   rh   rj   rg   ri   initializersparse_initializer
value_infork   )	nodesrj   rp   rq   r{   rk   r}   r|   graphs	            rD   
make_graphr      s    0 !
LE	JJeEJ	KKv	LL 	[)	##$67	J'%LrF   c                6    t               }| |_        ||_        |S rv   rw   )rS   rT   opsetids      rD   make_opsetidr      s     !"GGNGONrF   c                   |g }|g }|
g }
t               }| |_        ||_        |j                  j	                  |       |j
                  j	                  |       |j                  j	                  |       |j                  j	                  |       |j                  j	                  |       |j                  j	                  |       |r||_
        |	|	|_        |j                  j	                  |
       |S rZ   )r   rS   rj   rg   rh   ri   rs   opset_importrm   attribute_protork   rl   r}   )rS   fnamerp   rq   r~   opset_imports
attributesattribute_protosrk   rl   r}   fs               rD   make_functionr     s     

AAHAFGGNN6HHOOGFFMM%NN-(KKz"-.!
LL
#HrF   c                   t               }t        |_        |j                  j	                  |        d}|j                  dd      }||j                  j                  |       n3|j                  j                         }t        j                         |_        d}|j                  dd      }||j                  j                  |       |j                         D ]  \  }}t        |||        |S )zConstruct a ModelProto

    Args:
        graph (GraphProto): *make_graph* returns
        **kwargs: any attribute to add to the returned instance
    Returns:
        ModelProto
    Nr   	functions)r   r   r@   r   CopyFrompopr   rh   addr   onnx_opset_versionrT   r   ro   setattr)r   rr   modelr   impr   kvs           rD   
make_modelr   '  s     LE "E	KK9=MJJ5M !!-0   $$&--/04I

;-Iy) 1q! LrF   c                j    d}||vr"d}|j                  |g       }t        |      ||<   t        | fi |S )Nr@   r   )getra   r   )r   rr   ir_version_fieldopset_imports_fieldimportss        rD   make_model_gen_versionr   L  sG    #v%-**0"5#:7#C e&v&&rF   c                    | j                   d d = |j                         D ]-  \  }}| j                   j                         }||_        ||_        / y rZ   )metadata_propsro   r   rU   re   )proto
dict_valuer   r   entrys        rD   set_metadata_propsr   U  sP     	Q  " 1$$((*	rF   c                    t        | |       y rZ   )r   )r   r   s     rD   set_model_propsr   g  s    uj)rF   c                    t        t        |       dz        D cg c].  }|dz  dk(  r| |dz     j                  n| |dz     j                  0 c}S c c}w )Nr,   r   )rangelenrealimag)cais     rD   split_complex_to_pairsr   k  sX     s2w{# UaZAFbajoo	=  s   3Ac                    t         j                  t        j                  d|       d      }|r|dz	  S t	        |       ry|dz	  dz  dz   }||z   dz	  S )N<flittler1   i  r#   i  )rH   
from_bytesstructpackr   )fvaltruncateivalroundeds       rD   float32_to_bfloat16r   x  sX    >>&++dD18<DrzT{ 
a6)G7Nr!!rF   c                   |st        d      | |z  }t        j                  t        j                  dt        j                  |            d      }|dz  dz	  }|r3|dz  dk(  ryt        j                  |      r|r|dz  S y|d	z  d
z	  }|dz  }	|dk  rd}t        |      S |dk  rs|dz
  }
|
dk\  r|dd|
z   z  z  }||	d|
z
  z	  z  }n|	dkD  r|dz  }nd}dd|
z
  z  }|	|z  r|dz  s#|	|dz
  z  dkD  s|	|z  r|	|dz  z  r|	|dz
  z  dk(  r{|dz  }t        |      S |dk  rR|dz
  }
|
dk(  r|dz  }||	dz	  z  }n||
dz  z  }||	dz	  z  }|	dz  r9|	dz  s|	dz  r/|dz  dk  r|dz  }t        |      S |sy|r|dz  }t        |      S d}t        |      S |dz  dk(  rd|z  S t        j                  |      r|r|dz  S d|z  S |d	z  d
z	  }|dz  }	|dk7  r|dk  r	 t        |      S |dk  rp|dz
  }
|
dk\  r|dd|
z   z  z  }||	d|
z
  z	  z  }n
|	dkD  r|dz  }dd|
z
  z  }|	|z  r|dz  s#|	|dz
  z  dkD  s|	|z  r|	|dz  z  r|	|dz
  z  dk(  r|dz  }t        |      S |dk  rn|dz
  }
|
dk(  r|dz  }||	dz	  z  }n||
dz  z  }||	dz	  z  }|dz  dk(  r|dz  }|	dz  rK|	dz  s|	dz  rA|dz  dk  r|dz  }t        |      S |s'|dz  }t        |      S |r|dz  }t        |      S |dz  }t        |      S ) a  Convert a float32 value to a float8, e4m3 (as int).

    See :ref:`onnx-detail-float8` for technical details.

    Args:
        fval: float to convert
        scale: scale, divide *fval* by *scale* before casting it
        fn: no infinite values
        uz: no negative zero
        saturate: if True, any value out of range included inf becomes
            the maximum value, otherwise, it becomes NaN. The
            description of operator Cast fully describes the
            differences.

    Returns:
        converted float
    z4float32_to_float8e4m3 not implemented with fn=False.r   r                            t   r   x   w   r#   r,   r6   r5      r(   r"   i      i ~   u   y         )NotImplementedErrorrH   r   r   r   npfloat32isinfr   scalefnuzsaturater\   bretemexmasks               rD   float32_to_float8e4m3r     s    0 !B
 	
 	uAv{{4A7BAz>b
 C	
Nz)88A;Sy ^"
Ns7CL 3xK WSBRxqQV}$qR"W~%Qqb>D4xaq>A%HdaiQ$(^q5H q( 3x' WSBQws
qBwrQwqBw7{X1w;$J$&1HC 3x "4KC 3x C3x
Nz)#:88A;Sy #:^"
N63wL 3xK SW81R=(C1b>)CU1HCR"W~t8!GD1H~)DQ$!)_dQh19L 1HC, 3x+ SW73JC17NC27NC17NCd
t+tKq8|Wd
d*q 3x &t
 3x	 s
 3x t3xrF   c                   | |z  }t         j                  t        j                  dt	        j
                  |            d      }|dz  dz	  }|r9|r6|dz  dk(  ry|dz  dk(  r|r|d	z  S y|dz  d
z	  }|dz  }	|dk  rd}t        |      S |dk  rs|dz
  }
|
dk\  r|dd|
z   z  z  }||	d|
z
  z	  z  }n|	dkD  r|dz  }nd}dd|
z
  z  }|	|z  r|dz  s#|	|dz
  z  dkD  s|	|z  r|	|dz  z  r|	|dz
  z  dk(  r|dz  }t        |      S |dk  rK|dz
  }
||
dz  z  }||	dz	  z  }|	dz  r\|	dz  s|	dz  rR|d	z  d	k  r|dz  }t        |      S |s8d}t        |      S |dk(  r|	dk(  rd}t        |      S |r|d	z  }t        |      S d}t        |      S |sO|sL|dz  dk(  rd	|z  S t	        j                  |      r|rd|z  S d|z  S |dz  d
z	  }|dz  }	|dk7  r |dk  r	 t        |      S |dk  rp|dz
  }
|
dk\  r|dd|
z   z  z  }||	d|
z
  z	  z  }n
|	dkD  r|dz  }dd|
z
  z  }|	|z  r|dz  s#|	|dz
  z  dkD  s|	|z  r|	|dz  z  r|	|dz
  z  dk(  r|dz  }t        |      S |dk  r^|dz
  }
||
dz  z  }||	dz	  z  }|	dz  r[|	dz  s|	dz  rQ|d	z  dk  r|dz  }t        |      S |r|dz  }t        |      S |dz  }t        |      S |r|dz  }t        |      S |dz  }t        |      S t        d      )a  Convert a float32 value to a float8, e5m2 (as int).

    Args:
        fval: float to convert
        scale: scale, divide *fval* by *scale* before casting it
        fn: no infinite values
        uz: no negative zero
        saturate: if True, any value out of range included inf becomes
            the maximum value, otherwise, it becomes NaN. The
            description of operator Cast fully describes the
            differences.

    Returns:
        converted float
    r   r   r   r   r   r   ir   r   r   r   m   r   p   o   r#   r7   r6      r,   r   i i       {   |   n   q   z%fn and uz must be both False or True.)rH   r   r   r   r   r   r   r   r   s               rD   float32_to_float8e5m2r     s   , 	uAv{{4A7BAz>b
 C	b
Nz)
Nz)Tz!^"
Ns7CH 3xG WSBRxqQV}$qR"W~%Qqb>D4xaq>A%HdaiQ$(^q5H q$ 3x# WSB27NC17NC8|!g+1x<$J$&1HC 3x "C 3x #X!q&C
 3x	 4KC 3x C3x
Nz)#:88A;cz!#:^"
N63wD 3xC SW81R=(C1b>)CU1HCR"W~t8!GD1H~)DQ$!)_dQh19L 1HC$ 3x# SWrQwqBwx<a'kq8|d
d*q 3x "t 3x t
 3x	 t 3x t3x!"IJJrF   c                   t        | t        j                        s%t        j                  | t        j                        } | j                         }t        j                  | j                        dz  dk(  }|r*t        j                  |t        j                  dg            }fd}t        j                  |dd      } ||ddd   |ddd         }|j                  t        j                        S )ax  Convert an array of float32 value to a 4bit data-type and pack every two concecutive elements in a byte.
    See :ref:`onnx-detail-int4` for technical details.

    Args:
        array: array of float to convert and pack
        signed: Whether the 4 bit variant is signed or unsigned

    Returns:
        Packed array with size `ceil(farray.size/2)` (single dimension).
    dtyper,   r#   r   c                2    t        j                  | |      S rZ   )r!   float32x2_to_4bitx2)r\   ysigneds     rD   <lambda>z&pack_float32_to_4bit.<locals>.<lambda>  s    w::1aH rF   N)
isinstancer   ndarrayasarrayr   ravelprodshapeappendarray
frompyfuncastypeuint8)r   r   
array_flatis_odd_volumesingle_funcfuncarrs    `     rD   pack_float32_to_4bitr    s     eRZZ(

5

3JGGEKK(1,1MYYz288QC=9
HK==a+D
z!$Q$ADqD!1
2C::bhhrF   c           
        t               }||_        | |_        |t         j                  k(  r|rt	        d      t        |      }d}|r|t         j                  k(  rd}nt|t         j                  t         j                  t         j                  t         j                  fv rd}n1|t         j                  t         j                  fv rd}n|j                  }t        |      t        j                   u r(t#        |j$                        dkD  r|j'                         }|D ]  }||z  }	 t#        |      |k7  rN|t         j                  t         j                  fv rt#        |      |dz   k(  st)        d| dt#        |       d      |r	||_        n|t         j,                  t         j.                  fv rt1        |      }nO|t         j2                  k(  r`t        j4                  |      j7                  |      j9                  t        j:                        j'                         j=                         }n|t         j                  t         j                  t         j                  t         j                  t         j                  fv rt         j                  t>        t         j                  t@        t         j                  d	 t         j                  tB        t         j                  d
 i|   }	tE        tG        |	t        j4                  |      j7                  |      j'                         j=                                     }n|t         j                  t         j                  fv r=|t         j                  k(  }
tI        ||
      j'                         j=                         }nw|t         jJ                  k(  r)t        j4                  |      j7                  tL              }n;|t         j                  k(  r(t        j4                  |      j7                  tN              }tQ        |      }tS        ||      jU                  |       |jV                  jU                  |       |S )a  Make a TensorProto with specified arguments.  If raw is False, this
    function will choose the corresponding proto field to store the
    values based on data_type. If raw is True, use "raw_data" proto
    field to store the values, and values should be of type bytes in
    this case.

    Args:
        name (string): tensor name
        data_type (int): a value such as onnx.TensorProto.FLOAT
        dims (List[int]): shape
        vals: values
        raw (bool): if True, vals contains the serialized content of the tensor,
            otherwise, vals should be a list of values of the type defined by *data_type*

    Returns:
        TensorProto
    z*Can not use raw_data to store string type.r#   r,   g      ?z8Number of values does not match tensor's size. Expected z, but it is z. r   c                     t        | ddiS )Nr   T)r   rA   s    rD   r   zmake_tensor.<locals>.<lambda>  s    :O;"; rF   c                     t        | dddS )NT)r   r   )r   r  s    rD   r   zmake_tensor.<locals>.<lambda>  s    :Odt; rF   )r   ),r   	data_typerj   STRING	TypeErrortensor_dtype_to_np_dtypeBFLOAT16FLOAT8E4M3FNFLOAT8E4M3FNUZ
FLOAT8E5M2FLOAT8E5M2FNUZUINT4INT4itemsizetyper   r   r   r   flattenrR   raw_data	COMPLEX64
COMPLEX128r   FLOAT16r   r   viewuint16tolistr   r   r   listmapr  BOOLrH   bytestensor_dtype_to_fieldgetattrrh   dims)rj   r  r"  valsrawtensornp_dtypeexpected_sizedfcastr   fields               rD   make_tensorr+    s   ( ]F FFKK&&&3DEE'	2H M
,,,M$$&&""&&	
 
 M;,,k.>.>??M$--MDzRZZC

Oa$7||~  4yM! +++[-=-=>>D	]S00J=/Yefijnfoepprs  ..0F0FGG)$/D+---%%h/442994EMMOVVX    $$&&""&&
 
 $$&9((*?** - &&(=** -
 E HHTN))(3;;=DDFD 
 
 +"2"22F (V<DDFMMOD+***88D>((-D+,,,88D>((/D%i0%%d+
KKtMrF   c                    t               }|j                  j                  |        |j                  j                  |       |j                  j                  |       |S )zConstruct a SparseTensorProto

    Args:
        values (TensorProto): the values
        indices (TensorProto): the indices
        dims: the shape

    Returns:
        SparseTensorProto
    )r   valuesr   indicesr"  rh   )r-  r.  r"  sparses       rD   make_sparse_tensorr0    sG      F
MM6"
NNG$
KKtMrF   c                   t               }| |_        ||_        |t         j                  k(  r|S |t         j                  k(  r|j
                  }n|t         j                  k(  r|j                  }nk|t         j                  k(  r|j                  }nK|t         j                  k(  r|j                  }n+|t        j                  k(  r|j                  }nt        d      |j!                  |       |S )z/Make a Sequence with specified value arguments.z8The element type in the input sequence is not supported.)r   rj   	elem_type	UNDEFINEDTENSORtensor_valuesSPARSE_TENSORsparse_tensor_valuesSEQUENCEsequence_valuesMAP
map_valuesr   OPTIONALoptional_valuesr	  rh   )rj   r2  r-  sequencerm   s        rD   make_sequencer?  /  s     HHM"HM+++M(((**		m11	111		m,,	,,,		m''	'''		m,,	,,,	RSSVOrF   c                   t               }t        j                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  g}| |_
        ||_        |t        j                  k(  r|j                  j                  |       n||v r|j                  j                  |       |j                   j#                  |       |S )zMake a Map with specified key-value pair arguments.

    Criteria for conversion:
    - Keys and Values must have the same number of elements
    - Every key in keys must be of the same type
    - Every value in values must be of the same type
    )r   r   INT8INT16INT32INT64UINT8UINT16UINT32UINT64rj   key_typer  string_keysrh   keysr-  r   )rj   rI  rK  r-  	map_protovalid_key_int_typess         rD   make_maprN  L  s     
I	 IN!I;%%%$$T*	(	(d#f%rF   c                   t               }| |_        ||_        |t         j                  k(  r|S |t         j                  k(  r|j
                  }n|t         j                  k(  r|j                  }nk|t         j                  k(  r|j                  }nK|t         j                  k(  r|j                  }n+|t         j                  k(  r|j                  }nt        d      |j                  |       |S )z0Make an Optional with specified value arguments.z8The element type in the input optional is not supported.)r   rj   r2  r3  r4  tensor_valuer6  sparse_tensor_valuer8  sequence_valuer:  	map_valuer<  optional_valuer	  r   )rj   r2  re   optionalrm   s        rD   make_optionalrV  k  s     HHM"HM+++M((())		m11	100		m,,	,++		m''	'&&		m,,	,++	RSSuOrF   c                H    t        | t              r| S | j                  d      S )z2Coerce a string (or bytes) value into UTF-8 bytes.utf-8)r   r  encode)re   s    rD   	_to_bytesrZ    s    ue,5G%,,w2GGrF   c                
   t               }| |_        |r||_        t        |t        j
                        r't        |      |_        t         j                  |_	        nt        |t        j                        r't        |      |_        t         j                  |_	        nt        |t        t        f      r't!        |      |_        t         j$                  |_	        nLt        |t&              r2|j(                  j+                  |       t         j,                  |_	        n
t        |t.              r2|j0                  j+                  |       t         j2                  |_	        nt        |t4              r2|j6                  j+                  |       t         j8                  |_	        nt        |t:              r2|j<                  j+                  |       t         j>                  |_	        nDt        |t@        jB                  jD                        rtG        |      }tI        |      dk(  r|tK        d|  d      ||D ch c]  }t        |       }}t        j
                  t         jL                  ft        j                  t         jN                  ft        t        ft         jP                  ft&        t         jR                  ft.        t         jT                  ft4        t         jV                  ft:        t         jX                  ffD ]  \  }t[        fd|D              s|} n |tK        d      |t         jL                  k(  r2|j\                  j_                  |       t         jL                  |_	        n|t         jN                  k(  r2|j`                  j_                  |       t         jN                  |_	        nu|t         jP                  k(  r9|jb                  j_                  d |D               t         jP                  |_	        n)|t         jR                  k(  r1|jd                  j_                  |       t         jR                  |_	        n|t         jT                  k(  r1|jf                  j_                  |       t         jT                  |_	        n|t         jV                  k(  r1|jh                  j_                  |       t         jV                  |_	        n]|t         jX                  k(  r1|jj                  j_                  |       t         jX                  |_	        ntm               to        d| d      |M|j                  |k7  r>to        d	tq        |j                         d
|j                   dtq        |       d
| d	      |S c c}w )z0Makes an AttributeProto based on the value type.r   zCould not infer attribute `z` type from empty iteratorc              3  6   K   | ]  }t        |        y wrZ   )
issubclass)r[   texp_ts     rD   r]   z!make_attribute.<locals>.<genexpr>  s     ;z!U+;s   zRCould not infer the attribute type from the elements of the passed Iterable value.c              3  2   K   | ]  }t        |        y wrZ   )rZ  )r[   r   s     rD   r]   z!make_attribute.<locals>.<genexpr>  s     <	!<s   'z%' is not an accepted attribute value.zInferred attribute type 'z'(z") mismatched with specified type '))9r   rj   rk   r   numbersIntegralrH   r   INTr  Realfloatr   FLOATrG   r  rZ  sr  r   r^  r   r4  r   sparse_tensorr6  r   gGRAPHr   tp
TYPE_PROTOcollectionsabcIterabler  r   rR   INTSFLOATSSTRINGSTENSORSSPARSE_TENSORSGRAPHSTYPE_PROTOSallintsrh   floatsstringstensorssparse_tensorsgraphstype_protosAssertionErrorr	  _attr_type_to_str)	rU   re   rk   	attr_typeattrr   typesexp_enumr_  s	           @rD   rd   rd     s@    DDI$ %))*U"&&		E7<<	(u"((		EC<	(5!"))		E;	'"))		E,	-##E*"00		E:	&"((		E9	%"--		E;??33	4Uu:?y0-cU2LM  &+,T!W,E,!!>#6#67~445u~556n445"N$A$AB^223N667$ x ;U;; (I   h  +++IIU#&++DI.///KKu%&--DI.000LL<e<<&..DI.000LL&&..DI.777&&u-&55DI.///KKu%&--DI.444##E*&22DI ""!E7"GHIIi!7'(9$))(D'ER		{Rt  vG  HQ  vR  uS  SU  V_  U`  `a  b
 	
 Ka -s   8U8c                H    t               }| |_        ||_        |r||_        |S )zeMake an AttributeProto holding a reference to the parent function's attribute of given name and type.)r   rj   r  rk   )rj   r  rk   r  s       rD   make_attribute_refr    s)     DDIDI$KrF   c                   | j                   rt        d|        | j                  t        j                  k(  r| j
                  S | j                  t        j                  k(  r| j                  S | j                  t        j                  k(  r| j                  S | j                  t        j                  k(  r| j                  S | j                  t        j                  k(  r| j                  S | j                  t        j                  k(  r| j                  S | j                  t        j                   k(  r| j"                  S | j                  t        j$                  k(  rt'        | j(                        S | j                  t        j*                  k(  rt'        | j,                        S | j                  t        j.                  k(  rt'        | j0                        S | j                  t        j2                  k(  rt'        | j4                        S | j                  t        j6                  k(  rt'        | j8                        S | j                  t        j:                  k(  rt'        | j<                        S | j                  t        j>                  k(  rt'        | j@                        S | j                  t        jB                  k(  ry t        d|        )Nz)Cannot get value of reference attribute: zUnsupported ONNX attribute: )"ref_attr_namerR   r  r   rh  r   re  r   r  ri  r4  r^  r6  rj  rl  rk  rn  rm  rs  r  r{  rr  rz  rt  r|  ru  r}  rv  r~  rw  r  rx  r  r3  )r  s    rD   get_attribute_valuer    s   DTFKLLyyN(((vvyyN&&&vvyyN)))vvyyN)))vvyyN000!!!yyN(((vvyyN---wwyyN)))DKK  yyN'''DIIyyN***DLL!!yyN***DLL!!yyN111D''((yyN)))DKK  yyN...D$$%%yyN,,,
3D6:
;;rF   c                    | j                   D cg c]  }|j                  |k(  s| }}t        |      dkD  rt        d|       t        |      dk  rt        d|       t	        |d         S c c}w )Nr#   z'Node has multiple attributes with name z Node has no attribute with name r   )rm   rj   r   rR   r  )rs   	attr_namer\   matchings       rD   get_node_attr_valuer    sw    >>AaQVVy-@AHA
8}qB9+NOO
8}q;I;GHHx{++ Bs
   A0A0c                (    t               }| |_        |S rZ   )r   rj   )rj   value_info_protos     rD   make_empty_tensor_value_infor  $  s    %' rF   c                   t               }|j                  }| |_        |j                  }||j                  j                  g        |r"t        |      t        |      k7  rt        d      t        |      D ]n  \  }}|j                  j                         }|n?t        |t              r||_        n't        |t              r||_        nt        d| d      |se||   |_        p |S )z:Makes a Tensor TypeProto based on the data type and shape.>Invalid shape_denotation. Must be of the same length as shape.Invalid item in shape: z. Needs to be of int or str.)r   tensor_typer2  r   dimrh   r   rR   	enumerater   r   rH   	dim_valuerG   	dim_param
denotation)	r2  r   shape_denotation
type_prototensor_type_prototensor_shape_protor   r(  r  s	            rD   make_tensor_type_protor  *  s     J".."+*00 	%%b)$4 5U CP  e$ 	5DAq$((,,.CyAs# !As# ! -aS0LM   !1!!4	5  rF   c                    t               }| |_        |r||_        t        |||      }|j                  j                  |       |S )z8Makes a ValueInfoProto based on the data type and shape.)r   rj   rk   r  r  r   )rj   r2  r   rk   r  r  r  s          rD   make_tensor_value_infor  W  sM     &' &0#.y%AQR""#45rF   c                   t               }|j                  }| |_        |j                  }||j                  j                  g        |r"t        |      t        |      k7  rt        d      t        |      D ]n  \  }}|j                  j                         }|n?t        |t              r||_        n't        |t              r||_        nt        d| d      |se||   |_        p |S )z@Makes a SparseTensor TypeProto based on the data type and shape.r  r  z. Needs to be of int or text.)r   sparse_tensor_typer2  r   r  rh   r   rR   r  r   r   rH   r  rG   r  r  )	r2  r   r  r  sparse_tensor_type_protosparse_tensor_shape_protor   r(  r  s	            rD   make_sparse_tensor_type_protor  i  s     J)<<)2& 8 > > 	"%%,,R0$4 5U CP  e$ 	5DAq+//335CyAs# !As# ! -aS0MN   !1!!4	5  rF   c                    t               }| |_        |r||_        t        |||      }|j                  j
                  j                  |j
                         |S )zEMakes a SparseTensor ValueInfoProto based on the data type and shape.)r   rj   rk   r  r  r  r   )rj   r2  r   rk   r  r  r  s          rD   make_sparse_tensor_value_infor    sb     &' &0#<5*  ,,55 33 rF   c                d    t               }|j                  j                  j                  |        |S )zMakes a sequence TypeProto.)r   sequence_typer2  r   inner_type_protor  s     rD   make_sequence_type_protor    ,     J&&//0@ArF   c                d    t               }|j                  j                  j                  |        |S )zMakes an optional TypeProto.)r   optional_typer2  r   r  s     rD   make_optional_type_protor    r  rF   c                    t               }| |j                  _        |j                  j                  j	                  |       |S )zMakes a map TypeProto.)r   map_typerI  
value_typer   )rI  r  r  s      rD   make_map_type_protor    s9    
 J#+J ""++J7rF   c                p    t               }| |_        |r||_        |j                  j	                  |       |S )z1Makes a ValueInfoProto with the given type_proto.)r   rj   rk   r  r   )rj   r  rk   r  s       rD   make_value_infor    s<     &' &0#"":.rF   c                    t        | t              r| }n/t        | t              r| j                  dd      }nt        |       }t	        |      dk  r|S |d d dt	        |      dz
   dz   S )NrX  ignore)errors@   z	...<+len=>)r   rG   r  decoder   )ri  	sanitizeds     rD   _sanitize_strr    sl    !S		Au	HHWXH6	F	
9~Sb>iY")<'>a@@@rF   c                    t               }| |_        |r||_        t        |||      }t	        |      }|j
                  j                  j                  |j                         |S )zJMakes a Sequence[Tensors] ValueInfoProto based on the data type and shape.)r   rj   rk   r  r  r  r  r   )rj   r2  r   rk   elem_shape_denotationr  r  sequence_type_protos           rD   make_tensor_sequence_value_infor    se     &' &0#.y%AVW23DE''001D1R1RSrF   c           
     b   g }|j                  | j                         |j                  d       dd}dd}t        d      }dd}g }| j                  d      r#|j                   || j                               n| j                  d      r#|j                   || j
                               n[| j                  d      r/|j                  t        t        | j                                     n| j                  d	      rt        | j                  j                        d
kD  r|j                  d       nt        | j                  j                        }|j                  dt        | j                  |       d       n| j                  d      rF|j                  d| j                  j                   d       |j                  | j                         n4| j                  d      r!|j                  d| j                    d       n| j"                  r$|j                   ||| j"                               n| j$                  r$|j                   ||| j$                               n| j&                  r=|j                  t)        t+        t-        t        | j&                                           nY| j.                  r|j                  d       n:| j0                  rv|j                  d       t3        | j0                        D ];  \  }	}
|	t        | j0                        dz
  k7  rdnd}|j                  d|
 d|        = |j                  d       n| j4                  r|j                  d       t3        | j4                        D ]E  \  }	}|	t        | j4                        dz
  k7  rdnd}|j                  d|j                   d|        G |j                  d       |j7                  | j4                         n|j                  d       |rdj9                  |      |fS dj9                  |      S )N=r   c                
    | dS )Nz.15grK   )r   s    rD   	str_floatz&printable_attribute.<locals>.str_float  s     DrF   r   c                    t        |       S rZ   )rG   )r   s    rD   str_intz$printable_attribute.<locals>.str_int  s    1vrF   _Tc                D    ddj                  t        | |            z   dz   S )N[, ])joinr  )str_elemxss     rD   str_listz%printable_attribute.<locals>.str_list
  s"    TYYs8R011C77rF   ri  r^  r   z<Tensor>z<Scalar Tensor r  rk  z<graph rm  z<Type Proto z[<Tensor>, ...]r  r#   , r  z	<Unknown> )r   rg  rI   rG   )r   rH   rI   rG   )r  zCallable[[_T], str]r  zSequence[_T]rI   rG   )r   rj   r   HasFieldr   r   reprr  ri  r   r^  r"  r   r  r!  rk  rm  r{  rz  r|  rG   r  r  r}  r  r  r  rh   r  )r  	subgraphscontentr  r  r  r  r  r*  r   rm  commark  s                rD   printable_attributer    s    GNN499NN3 
B8 F}}Sy()	s	wtvv'	s	tM$&&123	s	tvv{{aNN:& *$&&*:*:;ENN_WTVVU-C,DAFG	s	Q/0dff	t	dggYa01	x	4;;78	x34	s4M4<< @ABC	()			st//0 	8EArD$4$4 5 99CrENN\"Qug67	8 	s	sdkk* 	7DAqDKK 01 44C"ENNWQVVHAeW56	7 	sdkk"{#xx &((88GrF   c                T    | j                  d      }|yt        t        | |            S )Nre   ?)
WhichOneofrG   r!  )r  whichs     rD   printable_dimr  D  s*    NN7#E}wsE"##rF   c           
        | j                  d      dk(  rt        j                  j                  | j                  j
                        }| j                  j                  d      r|t        | j                  j                  j                        rN|t        ddj                  t        t        | j                  j                  j                              z         z  }|S |dz  }|S | j                  d      yd| j                  d       S )	Nre   r  r   r  r\   , scalarr  zUnknown type )r  r   DataTypeNamer  r2  r  r   r   r  rG   r  r  r  r^  ri  s     rD   printable_typer  K  s    ||G-  %%amm&=&=>==!!'*1==&&**+S]AMM<O<O<S<S)T UUVV  Z||G$1<<0122rF   c                r    d| j                    }| j                  r| dt        | j                         d}|S )N%r  r  )rj   r  r  )r   ri  s     rD   printable_value_infor  Y  s9    
AFF8Avvc>!&&)*!,HrF   c           
     F   d| j                    d}|t        j                  j                  | j                        z  }| j
                  St        | j
                        r9|t        ddj                  t        t        | j
                              z         z  }n|dz  }|dz  }|S )Nr  r  r  r\   r  r  )
rj   r   r  r  r  r"  r   rG   r  r  r  s     rD   printable_tensor_protor  `  s    
AFF81A			"	"1;;	//Avvqvv;TCHHSaff%56677AOAHAHrF   c           	        g }t        | j                        rL|j                  dj                  | j                  D cg c]  }d| 	 c}             |j                  d       g }g }| j                  D ]  }|r[t        ||      }t        |d   t              st        dt         d      |j                  |d          |j                  |d          `t        |      }	t        |	t              st        dt         d      |j                  |	        dj                  t        |            }
dj                  | j                  D cg c]  }d| 	 c}      }| j                  r%|j                  | j                   d	|
 d
| d       n!|j                  | j                   d| d       |r|dj                  |      z   |fS |dj                  |      z   S c c}w c c}w )Nr  r  r  r#   z1printed_attr_subgraphs[1] must be an instance of .r   zprinted must be an instance of r  z](rb  (r  )r   ri   r   r  rm   r  r   r  r	  rh   rG   rn   rg   rf   )rs   prefixr  r  rj   r  printed_attrsr  printed_attr_subgraphsprintedprinted_attributesprinted_inputss               rD   printable_noder  l  s    G
4;;tyy!EAdV*!EFGs!FM *%8y%I"4Q7>GvQO  MM034  !7!:;)$/Ggs+"A#a HII  )* 6-#89YYtzzBt!D6
BCN~~$,,q);(<B~>NaPQ$,,q(8:;))611CHHW%%%7 "F(  Cs   GGc           	        g }|dz   }d| j                   g}| j                  D ch c]  }|j                    }}t        | j                        r|j	                  d       g }g }| j                  D ]E  }	|	j                   |vr|j	                  t        |	             ,|j	                  t        |	             G |rC|j	                  |dj                  |      z          g }|D ]  }
|j	                  |dz   |
z           |j	                  d       |re|j	                  d       |j	                  |dj                  |      z          g }|D ]  }
|j	                  |dz   |
z           |j	                  d       t        |      t        |      k  r| j                  D ch c]  }|j                    }}| j                  D cg c]  }|j                   |vrt        |       }}|j	                  d       |j	                  |dj                  |      z          g }|D ]  }
|j	                  |dz   |
z           |j	                  d       |j	                  d       |j	                  |dj                  |      z          g }| j                  D ]^  }t        ||d	
      }t        |d   t              st        dt         d      |j	                  |d          |j                  |d          ` dg}t        | j                        rE|j	                  dj                  | j                  D cg c]  }d|j                     c}             |j	                  |dj                  |      z          |j	                  |dz          |D ]  }|j	                  dt        |      z          ! dj                  |      S c c}w c c}w c c}w c c}w )zDisplay a GraphProto as a string.

    Args:
        graph (GraphProto): the graph to display
        prefix (string): prefix of every line

    Returns:
        string
    z  r   r  r  rb  z,optional inputs with matching initializers (zinitializers ({T)r  r#   z-contents_subgraphs[1] must be an instance of r  r   rI   r  r  }
)rj   r{   r   rg   r   r  r  r  rs   r  r   r  r	  rh   ri   printable_graph)r   r  r  indentheaderr^  initializersin_strsin_with_init_strsinpliner   graph_inputs	init_strsr  rs   contents_subgraphstailoutrk  s                       rD   r  r    so    Gd]Fuzz"F$)$5$56qAFF6L6
5;;c 	 ;; 	DCxx|+3C89!(()=c)BC		D
 NN6CHHV$445F 5v}t345cMMHINN6CHHV$445F) 5v}t345MM#  !C$55,1KK8qAFF8L8 **66- 'q)I 
 MM*+NN6CHHV$445F! 5v}t345MM#
MM#NN6CHHV,,-!F

 -+D&DI,Q/6KD6QRSTT)!,-(+,- :D
5<<DIIF#388*~FGHNN6CHHTN*+NN6C<  2toa001299W} 7< 92 Gs   N0N5= N:#N?c                x   t        | t        j                  j                  j                        s1t        dt        j                  j                  j                   d      | j                  j                  D ]  }|j                  dk(  r| j                  |j                         .|j                  |j                  k(  sH|j                  |j                  k(  r't        | |j                        D ]  }t        |        | j!                  |j                        st        t        | |j                                y)z:Empties `doc_string` field on any nested protobuf messageszproto must be an instance of r  rk   N)r   googleprotobufmessageMessager	  
DESCRIPTORfieldsrj   
ClearFieldr  TYPE_MESSAGElabelLABEL_REPEATEDr!  strip_doc_stringr  )r   
descriptorr\   s      rD   r  r    s    eV__44<<=+FOO,C,C,K,K+LAN
 	
 &&-- B
??l*Z__-__
 7 77:#<#<< 
8 (A$Q'(
0 
!@ABrF   c                V   t               }|j                  j                  |        |D ]-  \  }}|j                  j	                         }||_        ||_        / |r|j                  j                  |       |r2|D ]-  \  }}|j                  j	                         }||_        ||_        / |S rZ   )	r   	algorithmr   update_bindingr   rU   re   initializationinitialization_binding)r  algorithm_bindingsr  initialization_bindingstraining_infor   r   bindings           rD   make_training_infor    s     &'M$$Y/" 1..224
 $$--n=+ 	DAq#::>>@GGKGM	
 rF   c                <    t         j                  |    j                  S )zConvert a TensorProto's data_type to corresponding numpy dtype. It can be used while making tensor.

    Args:
        tensor_dtype: TensorProto's data_type

    Returns:
        numpy's data_type
    )r    TENSOR_TYPE_MAPr&  tensor_dtypes    rD   r
  r
    s     ""<0999rF   c                <    t         j                  |    j                  S )zConvert a TensorProto's data_type to corresponding data_type for storage.

    Args:
        tensor_dtype: TensorProto's data_type

    Returns:
        data_type for storage
    )r    r   storage_dtyper!  s    rD   $tensor_dtype_to_storage_tensor_dtyper%    s     ""<0>>>rF   c                <    t         j                  |    j                  S )zGet the name of given TensorProto's data_type.

    Args:
        tensor_dtype: TensorProto's data_type

    Returns:
        the name of data_type
    )r    r   rj   r!  s    rD   tensor_dtype_to_stringr'     s     ""<0555rF   c                ^    t         j                  t         j                  |    j                     S )zConvert a TensorProto's data_type to corresponding field name for storage. It can be used while making tensors.

    Args:
        tensor_dtype: TensorProto's data_type

    Returns:
        field name
    )r    _STORAGE_TENSOR_TYPE_TO_FIELDr   r$  r!  s    rD   r   r   ,  s+     00-;; rF   c                   | t         j                  v r!t        t        t         j                  |          S t	        j
                  | t        j                        rt        j                  S | t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   hv r#t        j"                  | j$                  d   d      S t'        d| d      )zConvert a numpy's dtype to corresponding tensor type. It can be used while converting numpy arrays to tensors.

    Args:
        np_dtype: numpy's data_type

    Returns:
        TensorsProto's data_type
    r   zUnable to convert type z into TensorProto element type.)r    _NP_TYPE_TO_TENSOR_TYPEr   rH   r   
issubdtypestr_r   r  custom_np_typesbfloat16float8e4m3fnfloat8e4m3fnuz
float8e5m2float8e5m2fnuzint4uint4mapping_name_to_data_typedescrrR   )r&  s    rD   np_dtype_to_tensor_dtyper8  :  s     7222++H5
 	

 
}}Xrww'!!!  $$&&""&&  889J19MNN

!(-LM rF   c                 >    t         j                  j                         S )zcGet all tensor types from TensorProto.

    Returns:
        all tensor types from TensorProto
    )r    r   rK  rK   rF   rD   get_all_tensor_dtypesr:  \  s     ""''))rF   c                    | t         j                  j                         v r	t        |    S t         j                  j	                         d   S )zConvert AttributeProto type to string.

    Args:
        attr_type: AttributeProto type.

    Returns:
        String representing the supplied attr_type.
    r   )r   AttributeTyper-  _ATTRIBUTE_TYPE_TO_STRrK  )r  s    rD   r  r  h  s@     N007799%i00'',,.q11rF   )rL   r8   rI   VersionMapType)F)r`   Sequence[OperatorSetIdProto]rW   boolrI   rH   )NNNN)rf   rG   rp   Sequence[str]rq   rA  rj   r^   rk   r^   rS   r^   rl   r^   rr   r   rI   r   )rS   rG   rT   rH   rI   r   )r~   Sequence[NodeProto]rj   rG   rp   Sequence[ValueInfoProto]rq   rC  r{   zSequence[TensorProto] | Nonerk   r^   r}   Sequence[ValueInfoProto] | Noner|   z"Sequence[SparseTensorProto] | NonerI   r   )NNNNN)rS   rG   r   rG   rp   rA  rq   rA  r~   rB  r   r?  r   zSequence[str] | Noner   zSequence[AttributeProto] | Nonerk   r^   rl   r^   r}   rD  rI   r   )r   r   rr   r   rI   r   )r   zRModelProto | GraphProto | FunctionProto | NodeProto | TensorProto | ValueInfoProtor   dict[str, str]rI   rJ   )r   r   r   rE  rI   rJ   )r   zSequence[np.complex64]rI   Sequence[int])r   rg  r   r@  rI   rH   )      ?TFT)r   rg  r   rg  r   r@  r   r@  r   r@  rI   rH   )rG  FFT)r   znp.ndarray | Sequencer   r@  rI   z
np.ndarray)rj   rG   r  rH   r"  rF  r#  r   r$  r@  rI   r   )r-  r   r.  r   r"  rF  rI   r   )rj   rG   r2  zSequenceProto.DataTyper-  zSequence[Any]rI   r   )
rj   rG   rI  rH   rK  z	list[Any]r-  r   rI   r   )rj   rG   r2  zOptionalProto.DataTypere   z
Any | NonerI   r   )re   str | bytesrI   r  )NN)
rU   rG   re   r   rk   r^   r  z
int | NonerI   r   rZ   )rj   rG   r  zAttributeProto.AttributeTyperk   r^   rI   r   )r  r   rI   r   )rs   r   r  rG   rI   r   )rj   rG   rI   r   )r2  rH   r   !Sequence[str | int | None] | Noner  list[str] | NonerI   r   )r  N)rj   rG   r2  rH   r   rI  rk   rG   r  rJ  rI   r   )r  r   rI   r   )rI  rH   r  r   rI   r   )r  )rj   rG   r  r   rk   rG   rI   r   )ri  rH  rI   rG   )rj   rG   r2  rH   r   rI  rk   rG   r  rJ  rI   r   )r  r   r  r@  rI   "str | tuple[str, list[GraphProto]])r  zTensorShapeProto.DimensionrI   rG   )r^  r   rI   rG   )r   r   rI   rG   )r^  r   rI   rG   )r  F)rs   r   r  rG   r  r@  rI   rK  )r   r   r  rG   rI   rG   )r   zgoogle.protobuf.message.MessagerI   rJ   )
r  r   r  AssignmentBindingTyper  zGraphProto | Noner  zAssignmentBindingType | NonerI   r   )r"  rH   rI   np.dtype)r"  rH   rI   rH   )r"  rH   rI   rG   )r&  rM  rI   rH   )rI   zKeysView[int])r  rH   rI   rG   )o
__future__r   collections.abcro  rc  r   cmathr   typingr   r   r   r   r	   r
   r   r   r   r   google.protobuf.messager	  numpyr   onnx._custom_element_types_custom_element_typesr.  onnxr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   rG   rH   VersionRowTyper8   rL  r9   __annotations__r>  rN   rQ   ra   rt   ry   r   r   r   r   r   r   r   r   r   r   r   r  r+  r0  r?  rN  rV  rZ  rd   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   r8  r:  r<  ro   r=  r  )r   r   s   00rD   <module>rY     s|   #         4     , uS#sC/0%S#sC8O2PPQ' U38_- # 8 eCHos*+" 5]C  GL-?C@ !... . 	.
 . . . . .b . 15!26=A((
( %( &	(
 .( ( 0( ;( (V, (,8<!26!!! ! 	!
 ! 0! %! 6! ! ! 0! !H J'	  
$*
" C
CC 	C 		C
 C 	CP {K
{K{K 	{K 		{K
 {K 	{K| 6 LQu
uu%2u:=uDHuup"-5B(
%  	:
$-7D>
%  	:H " 	[	[[ [ 	[
 [~ RV	
	6	DN		!<H, *.**,* '* 	*b )-
 - 	
 ' * *.**,* '* 	*b )-
 - 	
 ' ,  
  		A  .2
 - 	
 , * -2I
I%)I'IX$3	 :? &
 &  &26 &' &FL^B"- & :	
 2	:	?	6D* ,:+G+G+M+M+OP41a!Q$P 2 Qs   K