
    h8f                        S SK JrJrJrJrJrJr  S SKJrJ	r	J
r
JrJrJr   S(S\S\S\\\\\4         S\\\\\   4      4S jjr      S)S\S\S\\\\4      S	\\\      S
\\\      S\\   S\\   S\\   S\\   S\4S jjr          S*S\	S\	S\\\\4      S	\\\      S
\\\      S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\	4S jjr        S+S\S\S\\   S\\   S\\   S\\   S\\   S\\   S\\   S \\\\4      S\4S! jjr        S,S"\	S\S\\   S\\   S\\   S\\   S\\   S\\   S#\\   S\\   S\	4S$ jjr S-S\S%\S\\   S\4S& jjr S-S"\	S%\S\\   S\	4S' jjrg).    )DictListMutableMappingOptionalSetTuple)
GraphProto
ModelProtoTensorProtocheckerhelperutilsNg1g2io_mapreturnc                    [        U 5      [        La  [        S5      e[        U5      [        La  [        S5      eS[        [           S[        [           S[        [           4S jnSS[        S[
        [        [              S[        [           4S	 jjn/ nU(       d  / nU Vs1 s H  ofS
   iM	     nnU" U" U 5      U" XS95      nU(       a  UR                  SU45        U" U R                   V	s/ s H  oR                  PM     sn	UR                   V	s/ s H  oR                  PM     sn	5      nU(       a  UR                  SU45        U" U R                   V	s/ s H  oR                  PM     sn	UR                   V	s/ s H  oR                  PM     sn	5      nU(       a  UR                  SU45        U" U R                   V	s/ s H  oR                  R                  PM     sn	UR                   V	s/ s H  oR                  R                  PM     sn	5      U" U R                   V	s/ s H  oR                  R                  PM     sn	UR                   V	s/ s H  oR                  R                  PM     sn	5      -   nU(       a  UR                  SU45        U$ s  snf s  sn	f s  sn	f s  sn	f s  sn	f s  sn	f s  sn	f s  sn	f s  sn	f )a  Checks whether there are name collisions between two graphs

Returns a list of tuples where the first element represents the member containing overlapping names
(One of: "node", "edge", "value_info", "initializer", "sparse_initializer"), and the
second element contains a list of names that appear in both graphs on that category.

Optionally, it takes an io_map, representing the output/inputs to be connected. It provided, overlapping
present in the io_map argument will be ignored.
 g1 argument is not an ONNX graph g2 argument is not an ONNX graphc1c2r   c                 B    [        [        U 5      [        U5      -  5      $ N)listset)r   r   s     F/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/compose.py_overlapping-check_overlapping_names.<locals>._overlapping   s    CGc"g%&&    graphexcludec                    Uc
  [        5       n/ nU R                   Hi  nUR                   H#  nUS:w  d  M  XA;  d  M  UR                  U5        M%     UR                   H#  nUS:w  d  M  XQ;  d  M  UR                  U5        M%     Mk     U$ )N )r   nodeinputappendoutput)r    r!   edgesnios         r   _edge_names,check_overlapping_names.<locals>._edge_names   st    ?eGAWW7q/LLO  XX7q/LLO 	  r      )r!   edge
value_infoinitializersparse_initializerr   )typer	   
ValueErrorr   strr   r   r&   r0   namer1   r2   valuesindices)
r   r   r   r   r,   resultelemio_map_inputsoverlapes
             r   check_overlapping_namesr>      sH    Bxz!;<<Bxz!;<<'c 'S	 'd3i ': S0B dSVi  F)/0!WM0 ;r?K,RSGvw'('A'"--)H-Q&&-)HG |W-.(A(2>>*J>a66>*JG }g./ " 5 56 51 56 " 5 56 51 56 	!#!6!67!6A!67!#!6!67!6A!67	G +W56M; 1 	()H 	)*J 	7677s6   $J1J#J(
J-J2
J76J<
+K
Kinputsoutputsprefix1prefix2r6   
doc_stringc	                 2   [        U 5      [        La  [        S5      e[        U5      [        La  [        S5      eU(       d  U(       a  U(       a&  [        5       n	U	R                  U 5        U	n [	        XS9n U(       a&  [        5       n
U
R                  U5        U
n[	        XS9nU Vs/ s H)  nU(       a  X[S   -   OUS   U(       a  XkS   -   OUS   4PM+     nnU Vs1 s H  oS   iM	     nnU Vs1 s H  oS   iM	     nnU VVs0 s H  u  pX_M	     nnnU R
                   Vs1 s H  nUR                  iM     nnUR                   Vs1 s H  nUR                  iM     nnU(       d  U(       Ga  U(       dM  U R                   Vs/ s H  nUR                  PM     nnUR                   Vs/ s H  nUR                  PM     nnO[        U5      nU R                   Vs/ s H!  nUR                  U;   d  M  UR                  PM#     nnUR                   Vs/ s H1  nUR                  U;   d  UR                  U;   d  M%  UR                  PM3     nnU(       dM  U R
                   Vs/ s H  nUR                  PM     nnUR
                   Vs/ s H  nUR                  PM     nnO[        U5      nU R
                   Vs/ s H1  nUR                  U;   d  UR                  U;   d  M%  UR                  PM3     nnUR
                   Vs/ s H!  nUR                  U;   d  M  UR                  PM#     nn[        U5      [        U R                  5      :  d"  [        U5      [        U R
                  5      :  aF  [        R                  " [        R                  " U 5      5      nUR                  UU5      R                  n [        U5      [        UR                  5      :  d"  [        U5      [        UR
                  5      :  aF  [        R                  " [        R                  " U5      5      nUR                  UU5      R                  nU H0  u  nnUU;  a  [        SU S35      eUU;  d  M#  [        SU S	35      e   [!        XU5      n[        U5      S:  a/  US   u  n n![        S
U  S3SR#                  U!5      -   S-   S-   5      e[        5       n"U"R$                  R'                  U R$                  5        [        U"R$                  5      n#U"R$                  R'                  UR$                  5        [        U"R$                  5      n$[)        U#U$5       HK  n%U"R$                  U%   n&[+        U&R                  5       H   u  n'n(U(U;   d  M  UU(   U&R                  U''   M"     MM     U(       a  [        U5      nU"R                  R'                  U R                   Vs/ s H  nUR                  U;   d  M  UPM     sn5        U"R                  R'                  UR                   Vs/ s H  nUR                  U;   d  M  UPM     sn5        OmU"R                  R'                  U R                  5        U"R                  R'                  UR                   Vs/ s H  nUR                  U;  d  M  UPM     sn5        U(       a  [        U5      nU"R
                  R'                  U R
                   Vs/ s H  nUR                  U;   d  M  UPM     sn5        U"R
                  R'                  UR
                   Vs/ s H  nUR                  U;   d  M  UPM     sn5        OmU"R
                  R'                  U R
                   Vs/ s H  nUR                  U;  d  M  UPM     sn5        U"R
                  R'                  UR
                  5        U"R,                  R'                  U R,                  5        U"R,                  R'                  UR,                   V)s/ s H  n)U)R                  U;  d  M  U)PM     sn)5        U"R.                  R'                  U R.                  5        U"R.                  R'                  UR.                   V)s/ s H!  n)U)R0                  R                  U;  d  M  U)PM#     sn)5        U"R2                  R'                  U R2                  5        U"R2                  R'                  UR2                   V*s/ s H  n*U*R                  U;  d  M  U*PM     sn*5        Ub  UO&SR#                  U R                  UR                  /5      U"l        UcZ  SU R                   SUR                   S3U R                  -   S-   U R4                  -   S-   UR                  -   S-   UR4                  -   nUU"l        U"$ s  snf s  snf s  snf s  snnf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  sn)f s  sn)f s  sn*f )a$  Combines two ONNX graphs into a single one.

The combined graph is defined by connecting the specified set of outputs/inputs. Those inputs/outputs
not specified in the io_map argument will remain as inputs/outputs of the combined graph.

Arguments:
    g1 (GraphProto): First graph
    g2 (GraphProto): Second graph
    io_map (list of pairs of string): The pairs of names [(out0, in0), (out1, in1), ...]
                                      representing outputs of the first graph and inputs of the second
                                      to be connected
    inputs (list of string): Optional list of inputs to be included in the combined graph
                             By default, all inputs not present in the ``io_map`` argument will be
                             included in the combined model
    outputs (list of string): Optional list of outputs to be included in the combined graph
                              By default, all outputs not present in the ``io_map`` argument will be
                              included in the combined model
    prefix1 (string): Optional prefix to be added to all names in g1
    prefix2 (string): Optional prefix to be added to all names in g2
    name (string): Optional name for the combined graph
                   By default, the name is g1.name and g2.name concatenated with an undescore delimiter
    doc_string (string): Optional docstring for the combined graph
                         If not provided, a default docstring with the concatenation of g1 and g2 docstrings is used

Returns:
    GraphProto
r   r   prefixr   r.   zOutput z is not present in g1zInput z is not present in g2z=Cant merge two graphs with overlapping names. Found repeated z names: , 
zYConsider using ``onnx.compose.add_prefix`` to add a prefix to names in one of the graphs._zGraph combining  and z

)r3   r	   r4   CopyFromadd_prefix_graphr'   r6   r%   r   lenr   	Extractorr   
make_modelextract_modelr    r>   joinr$   extendrange	enumerater1   r2   r7   r0   rC   )+r   r   r   r?   r@   rA   rB   r6   rC   g1_copyg2_copyioio_map_g1_outsio_map_g2_insout_namein_namereversed_io_mapr+   g1_outsr*   g2_ins	g1_inputs	g2_inputs	input_set
g1_outputs
g2_outputs
output_sete1e2g1_out_name
g2_in_nameoverlapping_namescategorynamesgg2_nodes_beging2_nodes_endnode_idxr$   indexname_initvis+                                              r   merge_graphsrt   P   s+   L Bxz!;<<Bxz!;<< ' lGR B!"5B lGR B!"5B 

  $+Q%1#*Q%1  	 
 '--fefN-%+,VrUVM,BHI&->Xw(&OI!yy)y!qvvyG) hh'haffhF' )+2AI2)+2AI2IFI)+IAQVVy5HII !A66Y&!&&M*A !   *,))4)Q!&&)J4*,))4)Q!&&)J4JWJ "A66Z'166^+C "  
 +-))L)Qqvv7K&!&&)JLy>CM)S_s299~-M!2!22!67B!!)Z8>>By>CM)S_s299~-M!2!22!67B!!)Z8>>B $*Zg%w{m3HIJJV#vj\1FGHH	 $* 0?
!+A.%&Zx1ii  j	j
 	
 	AFFMM"''[NFFMM"''qvv;L .,7vvh%djj1LE5'$3E$:

5! 2 8 K		288C8aqvv/B8CD	288C8aqvv/B8CD	rxx 	288K8aqvv]/J8KL\
	BIIFIq:1EIFG	BIIFIq:1EIFG	BIINIq~1MINO			"MM(MM..K.$DII],J.K  5 56 --	
-{{}4 -	
 LL&LLbmmTmrwwm7SmTU%T388RWWbgg4F+GAFrwwiuRWWIR8gg mm 	
 gg  mm 	 ALHC
 .,I)'
 32 J 54
 MZ DC L GFN
 	L
	
 Us   '0f%f*1f/f4%f:f?g-g	g7g$g?g&gg>$g"&g"g'g'g,*g,g12g1g6 g6"g;:g;*h h 3hhh
h
2hh)hhm1m2producer_nameproducer_versiondomainmodel_versionc           
         [        U 5      [        La  [        S5      e[        U5      [        La  [        S5      eU R                  UR                  :w  a&  [        SU R                   SUR                   S35      eU R                  n0 n[	        U R
                  5      [	        UR
                  5      -   nU Hr  nUR                  U;   aF  UUR                     nUR                  U:w  a%  [        SU R
                   SUR
                   35      eMY  UR                  UUR                  '   Mt     U(       d  U(       a  U(       a&  [        5       nUR                  U 5        Un [        XS9n U(       a&  [        5       nUR                  U5        Un[        XS9nU Vs/ s H+  nU(       a  UUS	   -   OUS	   U(       a  UUS
   -   OUS
   4PM-     nn[        U R                  UR                  UUUUUS9n[        R                  " UU	U
UUUUS9n0 nU R                   H  nUR                  UUR                   '   M     UR                   Hv  nUR                   U;   aJ  UUR                      nUUR                  :w  a)  [        SUR                    SU SUR                   S35      eM]  UR                  UUR                   '   Mx     [        R"                  " UU5        [	        U R$                   Vs1 s H  nUR&                  iM     snUR$                   Vs1 s H  nUR&                  iM     sn-  5      nU(       a  [        SSR)                  U5      -   5      eUR$                  R+                  U R$                  5        UR$                  R+                  UR$                  5        [,        R.                  " U5        U$ s  snf s  snf s  snf )a  Combines two ONNX models into a single one.

The combined model is defined by connecting the specified set of outputs/inputs.
Those inputs/outputs not specified in the io_map argument will remain as
inputs/outputs of the combined model.

Both models should have the same IR version, and same operator sets imported.

Arguments:
    m1 (ModelProto): First model
    m2 (ModelProto): Second model
    io_map (list of pairs of string): The pairs of names [(out0, in0), (out1, in1), ...]
                                      representing outputs of the first graph and inputs of the second
                                      to be connected
    inputs (list of string): Optional list of inputs to be included in the combined graph
                             By default, all inputs not present in the ``io_map`` argument will be
                             included in the combined model
    outputs (list of string): Optional list of outputs to be included in the combined graph
                              By default, all outputs not present in the ``io_map`` argument will be
                              included in the combined model
    prefix1 (string): Optional prefix to be added to all names in m1
    prefix2 (string): Optional prefix to be added to all names in m2
    name (string): Optional name for the combined graph
                   By default, the name is g1.name and g2.name concatenated with an undescore delimiter
    doc_string (string): Optional docstring for the combined graph
                         If not provided, a default docstring with the concatenation of g1 and g2 docstrings is used
    producer_name (string): Optional producer name for the combined model. Default: 'onnx.compose'
    producer_version (string): Optional producer version for the combined model. Default: "1.0"
    domain (string): Optional domain of the combined model. Default: ""
    model_version (int): Optional version of the graph encoded. Default: 1

Returns:
    ModelProto
z m1 argument is not an ONNX modelz m2 argument is not an ONNX modelzIR version mismatch z != z-. Both models should have the same IR versionzPCan't merge two models with different operator set ids for a given domain. Got: rJ   rE   r   r.   )r?   r@   r6   rC   )rw   rx   ry   rz   opset_imports
ir_versionzaCan't merge models with different values for the same model metadata property. Found: property = z, with values .zPCan't merge models with overlapping local function names. Found in both graphs: rG   )r3   r
   r4   r}   r   opset_importry   versionrK   
add_prefixrt   r    r   rO   metadata_propsvaluekeyset_model_props	functionsr6   rQ   	MergeFromr   check_model)ru   rv   r   r?   r@   rA   rB   r6   rC   rw   rx   ry   rz   r}   opset_import_mapr|   entryfound_versionm1_copym2_copyrW   r    modelmodel_props
meta_entryr   ffunction_overlaps                               r   merge_modelsr     s   b Bxz!;<<Bxz!;<<	}}%"2==/bmm_ E; ;
 	
 J13)D,AAM<<++,U\\:M}}- OO,E"//1BD  . .3]]U\\*  ' lGR BB/B lGR BB/B 

  $+"Q%1#*"Q%1  	 
 

E #)##E K''
&0&6&6JNN# (''
>>[(
/E
((( **4..)9weT^TdTdSeefh  ) +5*:*:K
' ( 5+. &A&",,)G,Q!&&,)GG &(,		2B(CD
 	
 
OObll+	OObll+Lq
Z 	')Gs   2N2'N7N<
r    rF   rename_nodesrename_edgesrename_inputsrename_outputsrename_initializersrename_value_infosinplacename_mapc
           	      6	   [        U 5      [        La  [        S5      eU(       d  [        5       n
U
R                  U 5        OU n
S[        S[        S[        4S jnU	c  0 n	U(       aM  U
R
                   H=  nUR                   H  nU" X5      X'   M     UR                   H  nU" X5      X'   M     M?     U(       a1  U
R                   H!  nU" XR                  5      XR                  '   M#     U(       a1  U
R                   H!  nU" XR                  5      XR                  '   M#     U(       af  U
R
                   HV  nU" XR                  5      Ul        UR                   H,  nUR                  (       d  M  [        UR                  USU	S9  M.     MX     U(       a  U
R                   H#  nU" UUR                  5      U	UR                  '   M%     U
R                   Hk  nU" UUR                  R                  5      U	UR                  R                  '   U" UUR                  R                  5      U	UR                  R                  '   Mm     U(       a1  U
R                    H!  nU" XR                  5      XR                  '   M#     U
R
                   H  n[#        UR                  5       H-  u  nnUR                  U   U	;   d  M  U	U   UR                  U'   M/     [#        UR                  5       H-  u  nnUR                  U   U	;   d  M  U	U   UR                  U'   M/     M     U
R                   H)  nUR                  U	;   d  M  U	UR                     Ul        M+     U
R                   H)  nUR                  U	;   d  M  U	UR                     Ul        M+     U
R                   H)  nUR                  U	;   d  M  U	UR                     Ul        M+     U
R                   H  nUR                  R                  U	;   a(  U	UR                  R                     UR                  l        UR                  R                  U	;   d  Ma  U	UR                  R                     UR                  l        M     U
R                    H)  nUR                  U	;   d  M  U	UR                     Ul        M+     U
$ )a  Adds a prefix to names of elements in a graph: nodes, edges, inputs, outputs,
initializers, sparse initializer, value infos.

It can be used as a utility before merging graphs that have overlapping names.
Empty names are not prefixed.

Arguments:
    graph (GraphProto): Graph
    prefix (str): Prefix to be added to each name in the graph
    rename_nodes (bool): Whether to prefix node names
    rename_edges (bool): Whether to prefix node edge names
    rename_inputs (bool): Whether to prefix input names
    rename_outputs (bool): Whether to prefix output names
    rename_initializers (bool): Whether to prefix initializer and sparse initializer names
    rename_value_infos (bool): Whether to prefix value info names
    inplace (bool): If True, mutates the graph directly.
                    Otherwise, a copy will be created
    name_map: (Dict): shared name_map in subgraph

Returns:
    GraphProto
#graph argument is not an ONNX graphrF   r6   r   c                 ,    [        U5      S:  a  X-   $ U$ )Nr   )rM   )rF   r6   s     r   	_prefixed#add_prefix_graph.<locals>._prefixed  s     #D	Av}747r   T)r   r   )r3   r	   r4   rK   r5   r$   r%   r'   r6   	attributerl   rL   r1   r2   r7   r8   r0   rT   )r    rF   r   r   r   r   r   r   r   r   rl   r   r)   r=   r   r   rr   sparse_initr*   r'   input_in_descout_descr1   r2   r0   s                             r   rL   rL     s   D E{*$>??L	

58# 8S 8S 8 AWW'2 XX'2   WWE#,VZZ#@HZZ  XXE#,VZZ#@HZZ   Avvv.AF[[	;;;$!VTH )  MMD"+FDII">HTYY "//K09**//1H['',,- 2;++002H[((--.	 0 \\E#,VZZ#@HZZ  " VV"188,IAvxx{h&&v. - #177+IAvwwqzX%%f-
 ,	  77<<8##GLL1GL  HH==H$$X]]3HM  }}x''(8(89K %  22$$))X5-56H6O6O6T6T-U%%*%%**h6.67I7Q7Q7V7V.W&&+	 3 ll
??h&&z7JO # Hr   r   rename_functionsc
                 T   [        U 5      [        La  [        S5      eU	(       d  [        5       n
U
R                  U 5        U
n [	        U R
                  UUUUUUUSS9	  U(       a  0 nU R                   H%  nXR                  -   nXUR                  '   Xl        M'     U R                   H;  nUR                   H(  nUR                  U;   d  M  XR                     Ul	        M*     M=     U R
                  R                   H(  nUR                  U;   d  M  XR                     Ul	        M*     U $ )a  Adds a prefix to names of elements in a graph: nodes, edges, inputs, outputs,
initializers, sparse initializer, value infos, and local functions.

It can be used as a utility before merging graphs that have overlapping names.
Empty names are not _prefixed.

Arguments:
    model (ModelProto): Model
    prefix (str): Prefix to be added to each name in the graph
    rename_nodes (bool): Whether to prefix node names
    rename_edges (bool): Whether to prefix node edge names
    rename_inputs (bool): Whether to prefix input names
    rename_outputs (bool): Whether to prefix output names
    rename_initializers (bool): Whether to prefix initializer and sparse initializer names
    rename_value_infos (bool): Whether to prefix value info nanes
    rename_functions (bool): Whether to prefix local function names
    inplace (bool): If True, mutates the model directly.
                    Otherwise, a copy will be created

Returns:
    ModelProto
#model argument is not an ONNX modelT)r   r   r   r   r   r   r   )
r3   r
   r4   rK   rL   r    r   r6   r$   op_type)r   rF   r   r   r   r   r   r   r   r   m
f_name_mapr   
new_f_namer)   s                  r   r   r     s   D E{*$>??L	

5!!#%/-
 
A&&J!+qvvF ! AVV99
* *99 5AI  !
 !!AyyJ&&yy1	 " Lr   dim_idxc                 d   [        U 5      [        La  [        S5      eU(       d  [        5       nUR                  U 5        OU nUR                   Vs/ s H  oDR
                  PM     nnUR                   Hw  n[        UR                  5       H!  u  pxX;   d  M  USU 3-   UR                  U'   M#     [        UR                  5       H!  u  pyX;   d  M  U	SU 3-   UR                  U'   M#     My     UR
                  S-   n
UR                  R                  [        R                  " S/ U
/U
 S3[        R                  " U
 S3[        R                  S/U/S9S	95        [        [!        UR                  5      5       GH(  nUR                  R#                  S
5      nUR
                  SU 3-   nUR                  R                  [        R                  " SX/UR
                  /SUR
                   3S95        UR                   R$                  R&                  R(                   Vs/ s H  oR*                  PM     nnUR-                  US5        UR                  R                  [        R.                  " UR
                  UR                   R$                  R0                  U5      5        GM+     U$ s  snf s  snf )a  Inserts an extra dimension with extent 1 to each output in the graph.

Inserts an Unsqueeze node for each output. It can be used as a utility before merging graphs,
for example when the second one expects a batch dimension.

Arguments:
    graph (GraphProto): Graph
    dim_idx (int): Index of the dimension to be inserted.
                   A negative value means counting dimensions from the back.
    inplace (bool): If True, mutates the model directly.
                    Otherwise, a copy will be created

Returns:
    GraphProto
r   _collapsed_dim__expand_out_dim_idxConstantz	-constantz-valuer.   )r6   	data_typedimsvals)r?   r@   r6   r   r   	Unsqueezez
unsqueeze-)r?   r@   r6   )r3   r	   r4   rK   r'   r6   r$   rT   r%   r&   r   	make_nodemake_tensorr   INT64rS   rM   poptensor_typeshapedim	dim_valueinsertmake_tensor_value_info	elem_type)r    r   r   rl   r'   orig_out_namesr)   r*   outinpexpand_dim_krI   r+   prev_outputd	new_shapes                   r   expand_out_dim_graphr   \  sJ   ( E{*$>??L	

5019fkkN9VV)FA$!ogY$?? *  (FA$ _WI#>>
 )	  6611LFFMM!N >+$$$~V,%++ 		
& 3qxx=!HHLLOff	::	#2!!&&*		
 +,&&*<*<*B*B*F*FG*FQ[[*F	G!$	))**44i	
 "$ Ha :R Hs   J(J-c                     [        U 5      [        La  [        S5      eU(       d  [        5       nUR                  U 5        Un [	        U R
                  USS9  U $ )a  Inserts an extra dimension with extent 1 to each output in the graph.

Inserts an Unsqueeze node for each output. It can be used as a utility before merging graphs,
for example when the second one expects a batch dimension.

Arguments:
    model (ModelProto): Model
    dim_idx (int): Index of the dimension to be inserted.
                   A negative value means counting dimensions from the back.
    inplace (bool): If True, mutates the model directly.
                    Otherwise, a copy will be created

Returns:
    ModelProto
r   T)r   )r3   r
   r4   rK   r   r    )r   r   r   r   s       r   expand_out_dimr     sS    ( E{*$>??L	

5
 Lr   r   )NNNNNN)
NNNNNNzonnx.compose.merge_modelsz1.0r#   r.   )TTTTTTFN)TTTTTTTF)F)typingr   r   r   r   r   r   onnxr	   r
   r   r   r   r   r5   r>   rt   intr   boolrL   r   r   r    r   r   <module>r      s   D C L L OSBB"B,4T%S/5J,KB	%T#Y
 BR #'#'!! $xxx sCx!x T#Y	x
 d3i x c]x c]x 3-x x x~ #'#'!! $#>&+#$OOO sCx!O T#Y	O
 d3i O c]O c]O 3-O O C=O smO SMO C=O Oj $(#'$(%)*.)-#)-rrr 4.r 4.	r
 D>r TNr "$r !r d^r tCH~&r rp $(#'$(%)*.)-'+#GGG 4.G 4.	G
 D>G TNG "$G !G tnG d^G GZ $MMM d^M 	Mf $!!! d^! 	!r   