
    hn!                         S SK r S SKJrJr  S SKrS SKJrJrJrJ	r	J
r
  S SKJrJr   " S S\ R                  5      r\S:X  a  \ R"                  " 5         gg)    N)ListOptional)
ModelProtoTensorProtoTensorShapeProtoValueInfoProtohelper)
make_modelmake_tensor_value_infoc                       \ rS rSrS\S\\   SS4S jrS\S\4S jr	S\S\
S\\   4S	 jrSS
 jrSS jrSS jrSS jrSrg)TestSymbolicShape   
onnx_modelvalue_infosreturnNc                    U GHY  nU R                  XR                  5      nUc   U 5       eUR                  R                  S5      (       a!  UR                  R                  R
                  nO@UR                  R                  S5      (       a   UR                  R                  R
                  n[        UR                  5      [        WR                  5      :X  d   U 5       e[        UR                  5       Ha  u  pgUR                  U   nUR                  S:X  a  UR                  (       d   U 5       eM?  UR                  UR                  :X  a  M[   U 5       e   GM\     g)z
Assert 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)	selfr   r   expected_vir   expected_shapedim_ir   expected_dims	            W/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/test/symbolic_shape_test.py_assert_valueinfo_shape)TestSymbolicShape._assert_valueinfo_shape   s!    'K--j:J:JKE$55$((77!,!1!1!=!=!C!C!!**+?@@!,!1!1!D!D!J!Juyy>S););%<<MM<'		2
-11%8))R/==9ZL9===L,B,BBSzlSB 3 '    c                    [        5       n[        UR                  R                  5      n[        UR                  R                  5      n[        UR                  R
                  5      nX4-   U-    Hb  nUR                  R                  R                  R                   H1  nUR                  (       d  M  UR                  UR                  5        M3     Md     [        U5      $ )z2
return 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_number0TestSymbolicShape._count_unique_dim_param_number&   s     5j&&,,-z''../***556
!J.Avv))//33===$((7 4 / #$$r(   r   c                    [        UR                  R                  5      n[        UR                  R                  5      n[        UR                  R                  5      nX4-   U-    H  nUR
                  U:X  d  M  UR                  R                  S5      (       a"  UR                  R                  R                  s  $ UR                  R                  S5      (       d  My  UR                  R                  R                  s  $    g)zJ
Get shape from tensor_type or sparse_tensor_type according to given name
r   r   N)r+   r,   r-   r.   r/   r   r   r   r   r   r   )r    r   r   r2   r3   r4   r5   s          r%   r   &TestSymbolicShape._get_shape_from_name4   s     j&&,,-z''../***556
!J.Avv~66??=1166--33366??#7886644::: / r(   c                    [         R                  " SSS/S/SSS9n[        R                   R                  SS/S/[        R                  S	9n[         R
                  " S
X/[         R                  " S[        R                  SS/5      [         R                  " S[        R                  SS/5      /[         R                  " S[        R                  SS /5      /S9n[        U5      n[        R                  R                  USS9nU R                  U[        S[        R                  S5      /5        U R                  US5      U R                  US5      :X  d   eg )NConcatABC   r2   r3   r   axisCastr.   r2   r3   to
test_graph      r   nodesr2   r3   Tstrict_moderF   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_symbolic-TestSymbolicShape.test_concat_enable_symbolicE   sP   !!c3Z#XA
 {{$$C58*9J9J % 
 %%.--c;3D3Dq#hO--c;3D3Dq!fM
 --h8I8IAt9U

	  	*
--:::SW:X$$3C9J9JGTU	
 ((C
&&~x@A 	A Ar(   c                 h   [         R                  " SSS/S/SSS9n[         R                  " SSS/S/SSS9n[        R                   R                  S	S/S
/[        R                  S9n[         R
                  " SXU/[         R                  " S[        R                  SS/5      [         R                  " S[        R                  SS/5      [         R                  " S[        R                  SS/5      /[         R                  " S
[        R                  SS /5      /S9n[        U5      n[        R                  R                  USS9nU R                  U[        S[        R                  S5      [        S[        R                  S5      /5        U R                  US5      U R                  US
5      :X  d   eg )Nr;   r<   r=   r>   r?   r@   DErB   r.   rC   rE   rF   rG   rH   TrJ   rL   rM   )r    concat1concat2rV   rW   r   rX   s          r%   test_two_symbolic_concat*TestSymbolicShape.test_two_symbolic_concatb   s   ""c3Z#XA
 ""c3Z#XA
 {{$$C58*9J9J % 
 %%T*--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                    [         R                  " SSS/S/SSS9n[         R                  " SSS/S/SSS9n[        R                   R                  S	S/S
/[        R                  S9n[         R
                  " SXU/[         R                  " S[        R                  SS/5      [         R                  " S[        R                  SS/5      [         R                  " S[        R                  SS/5      /[         R                  " S
[        R                  SS/5      /S9n[        U5      nU R                  U5      n[        R                  R                  USS9nU R                  U5      nXS-   :X  d   U U 35       eg )Nr;   r<   r=   r>   r?   r@   r\   r]   rB   r.   rC   rE   rF   unk__0rG   unk__1rH   TrJ   )r	   rN   rO   r   rP   rQ   r   r
   r6   rR   rS   )	r    r^   r_   rV   rW   r   original_countrX   inferred_counts	            r%   test_duplicate_symbolic_shape/TestSymbolicShape.test_duplicate_symbolic_shape   sz   ""c3Z#XA
 ""c3Z#XA
 {{$$C58*9J9J % 
 %%T*--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                    [         R                  " SSS/S/SSS9n[        R                   R                  SS/S/[        R                  S	9n[         R
                  " S
X/[         R                  " S[        R                  SS /5      [         R                  " S[        R                  SS /5      /[         R                  " S[        R                  SS /5      /S9n[        U5      n[        R                  R                  USS9nU R                  U[        S[        R                  S5      /5        U R                  US5      U R                  US5      :X  d   eg )Nr;   r<   r=   r>   r?   r@   rB   r.   rC   rE   rG   rH   TrJ   )rG   r   rM   rT   s         r%   test_unknown_shape$TestSymbolicShape.test_unknown_shape   sU   !!c3Z#XA
 {{$$C58*9J9J % 
 %%.--**QI --c;3D3Dq$iP	 --h8I8IAt9U
	  	*
--:::SW:X$$3C9J9JGTU	

 ((C
&&~x@A 	A Ar(    )r   N)__name__
__module____qualname____firstlineno__r   r   r   r&   intr6   strr   r   r   rY   r`   rg   rj   __static_attributes__rl   r(   r%   r   r      sx    T$T373GT	T0% % %$,/	"	#"A:#AJ!UFAr(   r   __main__)unittesttypingr   r   onnx.shape_inferencerO   r   r   r   r   r	   onnx.helperr
   r   TestCaser   rm   mainrl   r(   r%   <module>r{      sH   
  !  R R :{A)) {A| zMMO r(   