
    
NgA!                         d dl Z d dlmZm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                     dS dS )    N)ListOptional)
ModelProtoTensorProtoTensorShapeProtoValueInfoProtohelper)
make_modelmake_tensor_value_infoc                   ~    e Zd Zdedee         ddfdZdedefdZdede	de
e         fdZdd	Zdd
ZddZddZdS )TestSymbolicShape
onnx_modelvalue_infosreturnNc                 <   |D ]}|                      ||j                  }|J |             |j                            d          r|j        j        j        }n+|j                            d          r|j        j        j        }t          |j                  t          |j                  k    sJ |             t          |j                  D ]K\  }}|j        |         }|j
        dk    r|j        sJ |             0|j
        |j
        k    sJ |             LdS )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)	selfr   r   expected_vir   expected_shapedim_ir   expected_dims	            Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/test/symbolic_shape_test.py_assert_valueinfo_shapez)TestSymbolicShape._assert_valueinfo_shape   sN    ' 	T 	TK--j+:JKKE$$o$$$((77 K!,!1!=!C!**+?@@ K!,!1!D!Juy>>S);%<%<<<<o<<<'	22 T T
s-1%8)R//=99Z/9999=L,BBBBzOBBBBT	T 	T    c                 \   t                      }t          |j        j                  }t          |j        j                  }t          |j        j                  }||z   |z   D ]<}|j        j        j        j	        D ]#}|j
        r|                    |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    55j&,--z'.//**566
'!J. 	8 	8Av)/3 8 8= 8$((7778 #$$$r&   r   c                 |   t          |j        j                  }t          |j        j                  }t          |j        j                  }||z   |z   D ]g}|j        |k    rZ|j                            d          r|j        j        j	        c S |j                            d          r|j        j
        j	        c S hdS )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   r0   r1   r2   r3   s          r$   r   z&TestSymbolicShape._get_shape_from_name1   s     j&,--z'.//**566
'!J. 	; 	;Av~~6??=11 46-33336??#788 ;64::::tr&   c                    t          j        dddgdgdd          }t          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        	                    |d          }| 
                    |t          dt          j        d          g           |                     |d          |                     |d          k    sJ d S )NConcatABC   r0   r1   r   axisCastr,   r0   r1   to
test_graph      r   nodesr0   r1   Tstrict_moderB   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@   s~   !c3Z#XA
 
 
 {$$C58*9J % 
 
 %4.-c;3Dq#hOO-c;3Dq!fMM
 -h8IAt9UU

 

 

	  	**
-:::SW:XX$$3C9JGTTU	
 	
 	
 ((C
 
&&~x@@A A A A A Ar&   c                 f   t          j        dddgdgdd          }t          j        dddgdgdd          }t          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        	                    |d          }| 
                    |t          dt          j        d          t          dt          j        d          g           |                     |d          |                     |d
          k    sJ d S )Nr7   r8   r9   r:   r;   r<   DEr>   r,   r?   rA   rB   rC   rD   TrF   rH   rI   )r   concat1concat2rR   rS   r   rT   s          r$   test_two_symbolic_concatz*TestSymbolicShape.test_two_symbolic_concat]   s   "c3Z#XA
 
 
 "c3Z#XA
 
 
 {$$C58*9J % 
 
 %GT*-c;3Dq#hOO-c;3Dq!fMM-c;3Dq#hOO -h8IAt9UU
 
 
	  	**
-:::SW:XX$$&sK,=wGG&sK,=wGG	
 	
 	
 ((C
 
&&~x@@A A A 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                             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	        
                    |d          }|                     |          }||dz   k    sJ | |             d S )Nr7   r8   r9   r:   r;   r<   rW   rX   r>   r,   r?   rA   rB   unk__0rC   unk__1rD   TrF   )r	   rJ   rK   r   rL   rM   r   r
   r4   rN   rO   )	r   rY   rZ   rR   rS   r   original_countrT   inferred_counts	            r$   test_duplicate_symbolic_shapez/TestSymbolicShape.test_duplicate_symbolic_shape   s   "c3Z#XA
 
 
 "c3Z#XA
 
 
 {$$C58*9J % 
 
 %GT*-c;3Dq(mTT-c;3Dq!fMM-c;3Dq(mTT -k/!X 
 
 
	  	**
<<ZHH-:::SW:XX<<^LL
 !!33335T
5T5T33333r&   c                    t          j        dddgdgdd          }t          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        	                    |d          }| 
                    |t          dt          j        d          g           |                     |d          |                     |d          k    sJ d S )Nr7   r8   r9   r:   r;   r<   r>   r,   r?   rA   rC   rD   TrF   )rC   r   rI   rP   s         r$   test_unknown_shapez$TestSymbolicShape.test_unknown_shape   s   !c3Z#XA
 
 
 {$$C58*9J % 
 
 %4.-*QI  -c;3Dq$iPP	 -h8IAt9UU
 
 
	  	**
-:::SW:XX$$3C9JGTTU	
 	
 	

 ((C
 
&&~x@@A A A A A Ar&   )r   N)__name__
__module____qualname__r   r   r   r%   intr4   strr   r   r   rU   r[   ra   rc    r&   r$   r   r      s       T$T373GT	T T T T.
% 
% 
% 
% 
% 
%$,/	"	#   A A A A:#A #A #A #AJ!U !U !U !UFA A A A A Ar&   r   __main__)unittesttypingr   r   onnx.shape_inferencerK   r   r   r   r   r	   onnx.helperr
   r   TestCaser   rd   mainri   r&   r$   <module>rq      s   
  ! ! ! ! ! ! ! !     R R R R R R R R R R R R R R : : : : : : : :vA vA vA vA vA) vA vA vAr zHMOOOOO r&   