
    bIg?!                        d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZmZ  G d dej                        Zedk(  r ej                           yy)    )annotationsN)
ModelProtoTensorProtoTensorShapeProtoValueInfoProtohelper)
make_modelmake_tensor_value_infoc                  \    e Zd Z	 	 	 	 	 	 d	dZd
dZ	 	 	 	 	 	 ddZddZddZddZddZ	y)TestSymbolicShapec                   |D ]D  }| j                  ||j                        }|J |        |j                  j                  d      r!|j                  j                  j
                  }n;|j                  j                  d      r |j                  j                  j
                  }t        |j                        t        j                        k(  sJ |        t        |j                        D ]Y  \  }}|j                  |   }|j                  dk(  r|j                  r1J |        |j                  |j                  k(  rSJ |         G y)zAssert onnx_model.value_info should be the same as expected value_infos
        Instead of exact symbol, use -1 to represent symbolic shape in expected value_infos
        Ntensor_typesparse_tensor_type)_get_shape_from_namenametypeHasFieldr   shaper   lendim	enumerate	dim_value	dim_param)	self
onnx_modelvalue_infosexpected_vir   expected_shapedim_ir   expected_dims	            Z/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/test/symbolic_shape_test.py_assert_valueinfo_shapez)TestSymbolicShape._assert_valueinfo_shape   s-    ' 	TK--j+:J:JKE$55$((7!,!1!1!=!=!C!C!!**+?@!,!1!1!D!D!J!Juyy>S););%<<MM<'		2 T
s-11%8))R/==9ZL9===L,B,BBSzlSBT	T    c                   t               }t        |j                  j                        }t        |j                  j                        }t        |j                  j
                        }||z   |z   D ]Y  }|j                  j                  j                  j                  D ]*  }|j                  s|j                  |j                         , [ t        |      S )z0Return the total number of unique symbolic shape)setlistgraphinputoutput
value_infor   r   r   r   r   addr   )r   r   symbol_shape_setinputsoutputs
valueinfosvr   s           r"   _count_unique_dim_param_numberz0TestSymbolicShape._count_unique_dim_param_number%   s    5j&&,,-z''../***556
'!J. 	8Avv))//33 8==$((78	8 #$$r$   c                   t        |j                  j                        }t        |j                  j                        }t        |j                  j                        }||z   |z   D ]  }|j
                  |k(  s|j                  j                  d      r"|j                  j                  j                  c S |j                  j                  d      sl|j                  j                  j                  c S  y)zHGet shape from tensor_type or sparse_tensor_type according to given namer   r   N)r'   r(   r)   r*   r+   r   r   r   r   r   r   )r   r   r   r.   r/   r0   r1   s          r"   r   z&TestSymbolicShape._get_shape_from_name1   s     j&&,,-z''../***556
'!J. 	;Avv~66??=166--33366??#786644:::	; r$   c                   t        j                  dddgdgdd      }t        j                   j                  ddgdgt        j                  	      }t        j
                  d
||gt        j                  dt        j                  ddg      t        j                  dt        j                  ddg      gt        j                  dt        j                  dd g      g      }t        |      }t        j                  j                  |d      }| j                  |t        dt        j                  d      g       | j                  |d      | j                  |d      k(  sJ y )NConcatABC   r.   r/   r   axisCastr*   r.   r/   to
test_graph      r   nodesr.   r/   Tstrict_moder@   r   r   	make_nodeonnxr   FLOAT
make_graphr
   r	   shape_inferenceinfer_shapesr#   r   r   concatcast	graph_defr   inferred_models         r"   test_concat_enable_symbolicz-TestSymbolicShape.test_concat_enable_symbolic@   sR   !!c3Z#XA
 {{$$C58*9J9J % 
 %%4.--c;3D3Dq#hO--c;3D3Dq!fM
 --h8I8IAt9U

	  	*
--:::SW:X$$3C9J9JGTU	
 ((C
&&~x@A 	A Ar$   c                x   t        j                  dddgdgdd      }t        j                  dddgdgdd      }t        j                   j                  d	dgd
gt        j                        }t        j
                  d|||gt        j                  dt        j                  ddg      t        j                  dt        j                  ddg      t        j                  dt        j                  ddg      gt        j                  d
t        j                  dd g      g      }t        |      }t        j                  j                  |d      }| j                  |t        dt        j                  d      t        dt        j                  d      g       | j                  |d      | j                  |d
      k(  sJ y )Nr5   r6   r7   r8   r9   r:   DEr<   r*   r=   r?   r@   rA   rB   TrD   rF   rG   )r   concat1concat2rP   rQ   r   rR   s          r"   test_two_symbolic_concatz*TestSymbolicShape.test_two_symbolic_concat]   s   ""c3Z#XA
 ""c3Z#XA
 {{$$C58*9J9J % 
 %%GT*--c;3D3Dq#hO--c;3D3Dq!fM--c;3D3Dq#hO --h8I8IAt9U
	  	*
--:::SW:X$$&sK,=,=wG&sK,=,=wG	
 ((C
&&~x@A 	A Ar$   c                   t        j                  dddgdgdd      }t        j                  dddgdgdd      }t        j                   j                  d	dgd
gt        j                        }t        j
                  d|||gt        j                  dt        j                  ddg      t        j                  dt        j                  ddg      t        j                  dt        j                  ddg      gt        j                  d
t        j                  ddg      g      }t        |      }| j                  |      }t        j                  j                  |d      }| j                  |      }||dz   k(  sJ | |        y )Nr5   r6   r7   r8   r9   r:   rU   rV   r<   r*   r=   r?   r@   unk__0rA   unk__1rB   TrD   )r   rH   rI   r   rJ   rK   r
   r	   r2   rL   rM   )	r   rW   rX   rP   rQ   r   original_countrR   inferred_counts	            r"   test_duplicate_symbolic_shapez/TestSymbolicShape.test_duplicate_symbolic_shape   s~   ""c3Z#XA
 ""c3Z#XA
 {{$$C58*9J9J % 
 %%GT*--c;3D3Dq(mT--c;3D3Dq!fM--c;3D3Dq(mT --k//!X
	  	*
<<ZH--:::SW:X<<^L
 !!33T7G
|5TT3r$   c                   t        j                  dddgdgdd      }t        j                   j                  ddgdgt        j                  	      }t        j
                  d
||gt        j                  dt        j                  dd g      t        j                  dt        j                  dd g      gt        j                  dt        j                  dd g      g      }t        |      }t        j                  j                  |d      }| j                  |t        dt        j                  d      g       | j                  |d      | j                  |d      k(  sJ y )Nr5   r6   r7   r8   r9   r:   r<   r*   r=   r?   rA   rB   TrD   )rA   r   rG   rN   s         r"   test_unknown_shapez$TestSymbolicShape.test_unknown_shape   sW   !!c3Z#XA
 {{$$C58*9J9J % 
 %%4.--**QI --c;3D3Dq$iP	 --h8I8IAt9U
	  	*
--:::SW:X$$3C9J9JGTU	

 ((C
&&~x@A 	A Ar$   N)r   r   r   zlist[ValueInfoProto]returnNone)r   r   rb   int)r   r   r   strrb   zTensorShapeProto | None)rb   rc   )
__name__
__module____qualname__r#   r2   r   rS   rY   r_   ra    r$   r"   r   r      s_    T$T3GT	T.
%$,/	 A:#AJ!UFAr$   r   __main__)
__future__r   unittestonnx.shape_inferencerI   r   r   r   r   r   onnx.helperr	   r
   TestCaser   rf   mainri   r$   r"   <module>rq      sJ    #   R R :vA)) vAr zHMMO r$   