
    wi!                        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                     dS dS )    )annotationsN)
ModelProtoTensorProtoTensorShapeProtoValueInfoProtohelper)
make_modelmake_tensor_value_infoc                  F    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	dS )TestSymbolicShape
onnx_modelr   value_infoslist[ValueInfoProto]returnNonec                <   |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	            m/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/onnx/test/symbolic_shape_test.py_assert_valueinfo_shapez)TestSymbolicShape._assert_valueinfo_shape   sM    ' 	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=L,BBBBzOBBBBT	T 	T    intc                \   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   strTensorShapeProto | Nonec                |   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   r2   r3   r4   r5   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   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_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 )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_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 )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_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 )Nr;   r<   r=   r>   r?   r@   rB   r.   rC   rE   rG   rH   TrJ   )rG   r   rM   rT   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'   N)r   r   r   r   r   r   )r   r   r   r(   )r   r   r   r7   r   r8   )r   r   )
__name__
__module____qualname__r&   r6   r   rY   r_   re   rg    r'   r%   r   r      s        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__)
__future__r   unittestonnx.shape_inferencerO   r   r   r   r   r   onnx.helperr	   r
   TestCaser   rh   mainrk   r'   r%   <module>rs      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'   