U
    qh                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	Z
d dlZd dlZd dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ G dd dej Z!G d	d
 d
ej Z"G dd dej Z#G dd dej Z$G dd dej Z%ej&j'ddd e( D dd ddddddZ)ej&j'ddd e( D dd ddddddZ*G d d! d!ej Z+G d"d# d#ej Z,e-d$kre.  e.e/g dS )%    )annotationsN)Any)AttributeProto
GraphProto
ModelProtoOptionalProtoSequenceProtoTensorProto	TypeProto_custom_element_typescheckerdefshelpernumpy_helper)to_array_extended)Cast_19c                   @  s   e Zd ZddddZddddZddddZddd	d
ZddddZddddZddddZ	ddddZ
ddddZddddZddddZddddZddddZddddZdddd Zddd!d"Zddd#d$Zd%S )&TestHelperAttributeFunctionsNonereturnc                 C  sh   t dd}| |jd | |jd t| t dd}| |jd | |jd t| d S )Nfloat      ?g    _B)r   make_attributeassertEqualnamefr   check_attributeselfattr r    9/tmp/pip-unpacked-wheel-xnis5xre/onnx/test/helper_test.pytest_attr_float%   s    
z,TestHelperAttributeFunctions.test_attr_floatc                 C  s   t dd}| |jd | |jd t| t dd}| |jd | |jd t| t dd}| |jd | |jd t| t dd}| |jd | |jd t| d S )Nint      i  i  )r   r   r   r   ir   r   r   r    r    r!   test_attr_int1   s     


z*TestHelperAttributeFunctions.test_attr_intc                 C  sV   t dd}| |jd | |jd t ddd}| |jd | |jd d S )Navalue doc)r   r   r   r   
doc_stringr   r    r    r!   test_attr_doc_stringG   s    z1TestHelperAttributeFunctions.test_attr_doc_stringc                 C  s   t dd}| |jd | |jd t| t dd}| |jd | |jd t| t dd}| |jd | |jd t| t dd}| |jd | t |d t| d S )Nstrs   testtestr*       )r   r   r   r   sr   r   get_attribute_valuer   r    r    r!   test_attr_stringO   s     


z-TestHelperAttributeFunctions.test_attr_stringc                 C  sB   t dddg}| |jd | t|jddg t| d S )Nfloatsr          @r   r   r   r   listr4   r   r   r   r    r    r!   test_attr_repeated_floate   s    z5TestHelperAttributeFunctions.test_attr_repeated_floatc                 C  sB   t dddg}| |jd | t|jddg t| d S )Nints      )r   r   r   r   r7   r9   r   r   r   r    r    r!   test_attr_repeated_intk   s    z3TestHelperAttributeFunctions.test_attr_repeated_intc                 C  sJ   t dddddg}| |jd | t|jddddg t| d S )Nmixedr:   r;         @g      @r   r5   r6   r   r    r    r!   (test_attr_repeated_mixed_floats_and_intsq   s    zETestHelperAttributeFunctions.test_attr_repeated_mixed_floats_and_intsc                 C  sB   t dddg}| |jd | t|jddg t| d S )NstringsZstr1Zstr2s   str1s   str2)r   r   r   r   r7   r@   r   r   r   r    r    r!   test_attr_repeated_strw   s    z3TestHelperAttributeFunctions.test_attr_repeated_strc                 C  sn   t jdtjdtddt jdtjdtddg}t d|}| |jd | t	|j
| t| d S )Nr(   r:   r:   r   	data_typedimsvalsbtensors)r   make_tensorr	   FLOATnpZonesr   r   r   r7   rH   r   r   )r   rH   r   r    r    r!   test_attr_repeated_tensor_proto}   s"          z<TestHelperAttributeFunctions.test_attr_repeated_tensor_protoc                 C  s   ddg}dddg}t jdtjt|gt|tjdd}ddd	g}t jd
tj	t|gt|tj
dd}t |||}t d|}| |jd tt | t| d S )Nr$       9?    -?   `Q?sparse_valuesFr   rD   rE   rF   rawr;   r%   indicesZsparse_attr)r   rI   r	   rJ   lenrK   arrayastypefloat32INT64int64make_sparse_tensorr   r   r   r   check_sparse_tensorr2   r   )r   dense_shaperP   values_tensorlinear_indicesindices_tensorsparse_tensorr   r    r    r!   test_attr_sparse_tensor_proto   s4    

  z:TestHelperAttributeFunctions.test_attr_sparse_tensor_protoc           
      C  s   ddg}dddg}t jdtjt|gt|tjdd}ddd	g}t jd
tj	t|gt|tj
dd}t |||}||g}t d|}| |jd t| t |D ]}	t|	 qd S )Nr$   rM   rN   rO   rP   FrQ   r;   r%   rS   Zsparse_attrs)r   rI   r	   rJ   rT   rK   rU   rV   rW   rX   rY   rZ   r   r   r   r   r   r2   r[   )
r   r\   rP   r]   r^   r_   r`   Zrepeated_sparser   r1   r    r    r!   'test_attr_sparse_tensor_repeated_protos   s8    

  
zDTestHelperAttributeFunctions.test_attr_sparse_tensor_repeated_protosc                 C  sZ   t  t  g}d|d _d|d _td|}| |jd | t|j| t| d S )Nr(   r   rG   r:   graphs)	r   r   r   r   r   r7   rc   r   r   )r   rc   r   r    r    r!   test_attr_repeated_graph_proto   s    

z;TestHelperAttributeFunctions.test_attr_repeated_graph_protoc                 C  s   t  }td|}| |jd | |j| | |jtj t  t  g}td|}| |jd | t	|j
| | |jtj d S )N
type_prototype_protos)r
   r   r   r   r   tptyper   
TYPE_PROTOr7   rf   TYPE_PROTOS)r   re   r   typesr    r    r!   test_attr_type_proto   s    z1TestHelperAttributeFunctions.test_attr_type_protoc                 C  sJ   t jdg tjd}| |jtj | t|jd | t	t jdg  d S )Nempty	attr_typer   )
r   r   r   STRINGSr   rh   rT   r@   assertRaises
ValueErrorr   r    r    r!   test_attr_empty_list   s    z1TestHelperAttributeFunctions.test_attr_empty_listc              	   C  s.   |  td tjddtjd W 5 Q R X d S )NzInferred attribute type 'FLOAT'r/   g@rn   )assertRaisesRegex	TypeErrorr   r   r   STRINGr   r    r    r!   test_attr_mismatch   s    z/TestHelperAttributeFunctions.test_attr_mismatchc                 C  sd   t  }| tjtj| t  }d|_| tjtj| t  }d|_d|_d|_| tjtj| d S )Nr/   r   r;   )r   rq   r   ValidationErrorr   r   r   r&   r   r    r    r!   test_is_attr_legal   s    z/TestHelperAttributeFunctions.test_is_attr_legalc                   s   ddddddddddd	dddd
d fddfddfdd fdd fdd fddg}t dD ](}t }d|_t|| t| qtt dD ]<}t }d|_t|dD ]}|| q| tj	tj| qd S )Nr   zAttributeProto.AttributeTyper.   r   r   )r   type_varr)   r   c                 S  s   t | || || _d S N)setattrrh   r   r{   r|   r)   r    r    r!   _set   s    zETestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>._setz	list[Any]c                 S  s   | | || _d S r}   )extendrh   r   r    r    r!   _extend   s    
zHTestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>._extendc                   s    | t jddS )Nr   r   )r   rJ   r   r   r    r!   <lambda>
  r0   zITestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>.<lambda>c                   s    | t jddS )Nr&   r:   )r   INTr   r   r    r!   r     r0   c                   s    | t jddS )Nr1   s   str)r   rv   r   r   r    r!   r     r0   c                   s    | t j| jddgS )Nr   r5   )r   FLOATSr4   r   r   r    r!   r     s
      c                   s    | t j| jddgS )Nr:   r;   )r   INTSr9   r   r   r    r!   r     r0   c                   s    | t j| jddgS )N   a   b)r   rp   r@   r   r   r    r!   r     s
      d   r/   r;   )
ranger   r   randomchoicer   r   samplerq   ry   )r   ZSET_ATTRZ_ir   funcr    )r   r   r!   test_is_attr_legal_verbose   s(    	







z7TestHelperAttributeFunctions.test_is_attr_legal_verboseN)__name__
__module____qualname__r"   r'   r-   r3   r8   r<   r?   rA   rL   ra   rb   rd   rl   rs   rx   rz   r   r    r    r    r!   r   $   s"   	r   c                   @  s   e Zd ZddddZddddZddddZddd	d
ZddddZddddZddddZ	ddddZ
ddddZddddZdS )TestHelperNodeFunctionsr   r   c                 C  sn   |  td tjddgdgdd}| |jd | |jd | t|j	dg | t|j
dg d S )NReluXYr/   r   )
assertTruer   hasr   	make_noder   op_typer   r7   inputoutputr   node_defr    r    r!   test_node_no_arg)  s    z(TestHelperNodeFunctions.test_node_no_argc                 C  s*   t jddgdgddd}| |jd d S )Nr   r   r   r/   r+   )r   r,   )r   r   r   r,   r   r    r    r!   r-   1  s    z,TestHelperNodeFunctions.test_attr_doc_stringc                 C  s   |  td tjddgdgdd}| |jd | t|jdg | t|j	dg | t
|jd | |jd tdd d S )Nr   r   r   r:   )	arg_valuer   r   )r   r   r   r   r   r   r   r7   r   r   rT   	attributer   r   r    r    r!   test_node_with_arg5  s    z*TestHelperNodeFunctions.test_node_with_argc                 C  s,   t jddgdgdddd}| |jd d S )Nr   r   r   r/   r+   ztest.domain)r   r,   domain)r   r   r   r   r   r    r    r!   test_node_domain@  s         z(TestHelperNodeFunctions.test_node_domainc              
   C  s   t ddgdg}t dddgdg}t dtjddgg}t j||gdt dtjddggt dtjddggd |d	}| |jd | t|j	d | |j	d
 | | |j	d | | |j
d | |jd
 |d
  d S )Nr   r   r   AddZr:   r;   r/   r,   
value_infor   r*   )r   r   make_tensor_value_infor	   rJ   
make_graphr   r   rT   noder,   r   )r   Z	node_def1Z	node_def2r   graphr    r    r!   
test_graphF  s"    z"TestHelperNodeFunctions.test_graphc                 C  s4   t g dg g d d}| |jd | |jd d S )Nmy graphzmy docs)r   r   r   r   r,   )r   r   r    r    r!   test_graph_docstringY  s    z,TestHelperNodeFunctions.test_graph_docstringc                 C  s|   t ddgdg}t |gdt dtjddggt dtjddgg}| jtt j|dd t j|dd}| 	|j
d d S )	Nr   r   r   r/   r:   r;   )Zxxx)producer_name)r   r   r   r   r	   rJ   rq   AttributeError
make_modelr   r   )r   r   Z	graph_def	model_defr    r    r!   
test_model^  s    z"TestHelperNodeFunctions.test_modelc                 C  s@   t g dg g }t j|dd}| t|d | |jd d S )Nr   r/   r,   r   )r   r   r   assertFalsehasattrr   r,   )r   r   r   r    r    r!   test_model_docstringj  s    z,TestHelperNodeFunctions.test_model_docstringc                 C  s   t g dg g }t j|dd}t |ddd t| t |ddd t| |j }d|_d|_	| 
tjtj| d S )Nr   r/   r   z
test;graph)TitleZKeywordsr   ZOther)r   r   r   Zset_model_propsr   check_modelZmetadata_propsaddkeyr)   rq   ry   )r   r   r   Zduper    r    r!   test_model_metadata_propsr  s      
 

z1TestHelperNodeFunctions.test_model_metadata_propsc                   s:  ddddd dddd fd	d
}|dgd |dgd |dgd |dgd |dgd |dgd |dgd |dgd |dgd |dgd |dgd |dgd |dgd |dgd |d gd |d!gd |d"gd |d#gd |d$gd |d%gd |dd!gd  t d&g d S )'Nzlist[tuple[str, int]]r   )opset_versionsr   c                 S  s(   t g dg g }t j|dd | D dS )Nr   c                 S  s   g | ]}t j| qS r    )r   Zmake_opsetid).0pairr    r    r!   
<listcomp>  s     zRTestHelperNodeFunctions.test_model_irversion.<locals>.mk_model.<locals>.<listcomp>)Zopset_imports)r   r   Zmake_model_gen_version)r   r   r    r    r!   mk_model  s
    z>TestHelperNodeFunctions.test_model_irversion.<locals>.mk_modelr#   r   )r   
ir_versionr   c                   s    | } |j| d S r}   )r   r   )r   r   modelr   r   r    r!   r/     s    z:TestHelperNodeFunctions.test_model_irversion.<locals>.test)r*   	      )r*   
   r%   )r*         )r*         )r*      )r*      )r*         )r*      )r*      )r*      )r*      r   )r*      )r*      r   )r*      )zai.onnxr   )
ai.onnx.mlr;   )r   r$   )r   r   )r   r%   )zai.onnx.trainingr:   )r*   r   )rq   rr   )r   r/   r    r   r!   test_model_irversion  s0    z,TestHelperNodeFunctions.test_model_irversionN)r   r   r   r   r-   r   r   r   r   r   r   r   r   r    r    r    r!   r   (  s   r   c                   @  s  e Zd ZddddZeeddddddZddd	d
Z	ddddZ
ddddZddddZeeddddddZddddZddddZddddZddddZejeejejfdeeddddddZejedeeddddd d!Zejeejejfd"eeddddd#d$Zddd%d&Zddd'd(Zddd)d*Zd+S ),TestHelperTensorFunctionsr   r   c                 C  s:   dd dD }t jdtjd|dd}| |t|j d S )Nc                 S  s   g | ]}| d qS )zutf-8)encode)r   r1   r    r    r!   r     s     zETestHelperTensorFunctions.test_make_string_tensor.<locals>.<listcomp>)ZAmyZBillyZCindyZDavidr/   )r;   r;   FrQ   )r   rI   r	   rv   r   r7   Zstring_data)r   Zstring_listtensorr    r    r!   test_make_string_tensor  s    z1TestHelperTensorFunctions.test_make_string_tensorz1.26.0z'The test requires numpy 1.26.0 or laterc                 C  sV  t jddgddgddgddgt jt jggt jd	}t td
tdd td
tdd gtd
tdd td
tdd gtd
tdd td
tdd gtd
tdd td
tdd gtd
tdd td
tdd gg}t	j
dtj|j|d}| |jd t jtj|tjdt| d S )Nr   r5   r>         @     ?     p??皙?dtype!f3F800000r   4000000040400000408000003DCC0000Z3DCD00007FC000007F800000r/   rC   to)rK   rU   naninfrW   structunpackbytesfromhexr   rI   r	   BFLOAT16shaper   r   testingassert_equalCastevalr   to_array)r   np_array
np_resultsr   r    r    r!   test_make_bfloat16_tensor  sT    

z3TestHelperTensorFunctions.test_make_bfloat16_tensorc              
   C  s`   t dtjdgdddddg}t|}tjddddd	gtjd
}tj	
tj|tjd| d S )N
zero_pointr%   r         ?r:   P  333333$@  r   r   r   )r   rI   r	   FLOAT8E4M3FNr   r   rK   rU   rW   r   r   r   r   r   yynpexpectedr    r    r!   test_make_float8e4m3fn_tensor  s       
z7TestHelperTensorFunctions.test_make_float8e4m3fn_tensorc                 C  sh   t dtjdgddddddd	g}t|}tjdddd
dddgtjd}tj	
tj|tjd| d S )Nr  r   r   r  r:   r  r  gh㈵gh㈵>   r   r   r   )r   rI   r	   FLOAT8E4M3FNUZr   r   rK   rU   rW   r   r   r   r   r	  r    r    r!   test_make_float8e4m3fnuz_tensor  s    
z9TestHelperTensorFunctions.test_make_float8e4m3fnuz_tensorc              
   C  s`   t dtjdgdddddg}t|}tjdddddgtjd	}tj	
tj|tjd
| d S )Nr  r%   r   r  r:   r  `      r   r   )r   rI   r	   
FLOAT8E5M2r   r   rK   rU   rW   r   r   r   r   r	  r    r    r!   test_make_float8e5m2_tensor  s       
z5TestHelperTensorFunctions.test_make_float8e5m2_tensorc                 C  sh   t dtjdgddddddd	g}t|}tjdddd
dddgtjd}tj	
tj|tjd| d S )Nr  r   r   r  r:   r  r  gHzgHz>r  r   r   )r   rI   r	   FLOAT8E5M2FNUZr   r   rK   rU   rW   r   r   r   r   r	  r    r    r!   test_make_float8e5m2fnuz_tensor
  s    
z9TestHelperTensorFunctions.test_make_float8e5m2fnuz_tensorc                 C  s  t jddgddgddgddgt jt jggt jd	}t td
tdd td
tdd gtd
tdd td
tdd gtd
tdd td
tdd gtd
tdd td
tdd gtd
tdd td
tdd gg}dd }|	t j
t j }||	t j }tjdtj|j|dd}| |jd t jjtj|tjdt|dd d S )Nr   r5   r>   r   r   r   r   r   r   r   r   r   r   r   r   r   Z3DCB0000r   r   c                 S  s   | d? S )Nr   r    )xr    r    r!   truncate?  s    zITestHelperTensorFunctions.test_make_bfloat16_tensor_raw.<locals>.truncater/   TrQ   r   g-C6?)Zrtol)rK   rU   r   r   rW   r   r   r   r   rV   viewZuint32flattenZuint16tobytesr   rI   r	   r   r   r   r   r   Zassert_allcloser   r   r   r   )r   r   r  r  Zvalues_as_intspacked_valuesr   r    r    r!   test_make_bfloat16_tensor_raw  sV    

z7TestHelperTensorFunctions.test_make_bfloat16_tensor_rawc                 C  s   t jdddddgt jd}t jdd |D t jd}| }tjd	tjt	|j
|d
d}t|}t jtj|tjd| d S )Nr   r  r:   r  r   r   c                 S  s   g | ]}t |qS r    r   Zfloat32_to_float8e4m3r   r  r    r    r!   r   U  s     zOTestHelperTensorFunctions.test_make_float8e4m3fn_tensor_raw.<locals>.<listcomp>r/   TrQ   r   )rK   rU   rW   uint8r  r   rI   r	   r  r7   r   r   r   r   r   r   r   r   r  Zf8r  r
  r  r    r    r!   !test_make_float8e4m3fn_tensor_rawR  s     
z;TestHelperTensorFunctions.test_make_float8e4m3fn_tensor_rawc                 C  s   t jdddddgt jd}t jdd |D t jd}| }tjd	tjt	|j
|d
d}t|}t jtj|tjd| d S )Nr   r  r:   r  r   r   c                 S  s   g | ]}t j|d dqS )T)uzr  r  r    r    r!   r   e  s     zQTestHelperTensorFunctions.test_make_float8e4m3fnuz_tensor_raw.<locals>.<listcomp>r/   TrQ   r   )rK   rU   rW   r   r  r   rI   r	   r  r7   r   r   r   r   r   r   r   r!  r    r    r!   #test_make_float8e4m3fnuz_tensor_rawb  s     
z=TestHelperTensorFunctions.test_make_float8e4m3fnuz_tensor_rawc                 C  s   t jdddddgt jd}t jdd |D t jd}| }tjd	tjt	|j
|d
d}t|}t jtj|tjd| d S )Nr   r  r:   r  r   r   c                 S  s   g | ]}t |qS r    r   Zfloat32_to_float8e5m2r  r    r    r!   r   u  s     zMTestHelperTensorFunctions.test_make_float8e5m2_tensor_raw.<locals>.<listcomp>r/   TrQ   r   )rK   rU   rW   r   r  r   rI   r	   r  r7   r   r   r   r   r   r   r   r!  r    r    r!   test_make_float8e5m2_tensor_rawr  s     
z9TestHelperTensorFunctions.test_make_float8e5m2_tensor_rawc                 C  s   t jdddddgt jd}t jdd |D t jd}| }tjd	tjt	|j
|d
d}t|}t jtj|tjd| d S )Nr   r  r:   r  r   r   c                 S  s   g | ]}t j|d d dqS )T)fnr#  r%  r  r    r    r!   r     s     zQTestHelperTensorFunctions.test_make_float8e5m2fnuz_tensor_raw.<locals>.<listcomp>r/   TrQ   r   )rK   rU   rW   r   r  r   rI   r	   r  r7   r   r   r   r   r   r   r   r!  r    r    r!   #test_make_float8e5m2fnuz_tensor_raw  s    
z=TestHelperTensorFunctions.test_make_float8e5m2fnuz_tensor_raw)r%   r   r   r   r   r%   r$   r$   rB   )i   z1.22.0z'The test requires numpy 1.22.0 or laterc           	      C  s   t jdt jdi}tjj|| d || d d |d}td||j|}t	
t|jd }tt|j}tj|| t|}tj|| d S )Nr   r   ir   r   r:   highsizer
  r5   )r	   UINT4INT4rK   r   randintr   rI   r   mathceilprodrT   r   
int32_datar   r   r   )	r   r   rE   
type_rangedatar
  expected_data_sizeactual_data_sizer  r    r    r!   test_make_4bit_tensor  s       
  z/TestHelperTensorFunctions.test_make_4bit_tensorc                 C  sh   t |}t jdg| t jd|}tdtj|j	|}t
|d }tt|j}t j|| d S )Nr   r
  r5   )rK   r6  rU   Zint8Zreshaper   rI   r	   r2  r   r4  r5  rT   r   r7  r   r   )r   rE   Z	num_elemsr9  r
  r:  r;  r    r    r!   test_4bit_tensor_size  s    
z/TestHelperTensorFunctions.test_4bit_tensor_size)r)  r*  r+  rB   c                 C  s   t jdt jdi}tjj|| d || d d |dtj}tj	||t jkd}tj
d||| dd	}t|}tj|| d S )
Nr,  r-  r   r:   r.  )signedZpacked_int4T)rR   )r	   r1  r2  rK   r   r3  rV   rW   r   Zpack_float32_to_4bitrI   r  r   r   r   r   )r   r   rE   r8  r9  Zpacked_datar
  r  r    r    r!   test_make_4bit_raw_tensor  s2      
       
z3TestHelperTensorFunctions.test_make_4bit_raw_tensorc                 C  s   dddddg}t jdtjd|d}d	d
dddg}t jdtjd|d}dg}t |||}| |j| | |j| | |j	| d S )N皙?皙@ffffff
@皙@      @r/   r%   rC   r:   r$   r%   r   r   Ztest_indicesr   )
r   rI   r	   rJ   rX   rZ   r   valuesrS   rE   )r   rG  r]   rS   r_   r\   sparser    r    r!   test_make_sparse_tensor  s&          z1TestHelperTensorFunctions.test_make_sparse_tensorc                 C  s8   t dtjd}t| t dtjd}t| d S )Nr   )r;   r   r   r    )r   r   r	   rJ   r   check_value_infor   vir    r    r!   test_make_tensor_value_info  s    
z5TestHelperTensorFunctions.test_make_tensor_value_infoc                 C  s8   t dtjd}t| t dtjd}t| d S )Nr   )r;   r$   r   r    )r   Zmake_sparse_tensor_value_infor	   rJ   r   rJ  rK  r    r    r!   "test_make_sparse_tensor_value_info  s    
z<TestHelperTensorFunctions.test_make_sparse_tensor_value_infoN)r   r   r   r   unittestZskipIfversion_utilsZnumpy_older_thanr  r  r  r  r  r  r"  r$  r&  r(  parameterizedexpand	itertoolsproductr	   r1  r2  r<  r>  r@  rI  rM  rN  r    r    r    r!   r     sl   59

 r   c                   @  s6   e Zd ZddddZddddZddddZd	S )
&TestHelperOptionalAndSequenceFunctionsr   r   c                 C  s   dddddg}t jdtjd|d}t jdtj|d	}| |jd | |j	tj | |j
| t jdtj||gd
}t jdtj|d	}| |jd | |j	tj | |j| t jdtjd d	}| |jd | |j	tj | |d d S )NrA  rB  rC  rD  rE  r/   rF  rC   )r   	elem_typer)   )r   rV  rG  tensor_value)r   rI   r	   rJ   Zmake_optionalr   TENSORr   r   rV  rW  Zmake_sequencer   ZSEQUENCEZsequence_value	UNDEFINEDr   ZHasField)r   rG  r]   optionalZvalues_sequenceZoptional_noner    r    r!   test_make_optional  sH             z9TestHelperOptionalAndSequenceFunctions.test_make_optionalc                 C  s   t jddgd}t jd|d}t |}t jd|d}| |jd | |jj | |jjj	|j t 
|}t |}t jd|d}| |jd | |jj t jd|d}| |jjj	jj	|j d S )Nr;   r%   rV  r   r/   r   re   )r   make_tensor_type_protomake_value_infoZmake_optional_type_protor   r   r   rh   Zoptional_typerV  make_sequence_type_protoZsequence_type)r   tensor_type_protoZtensor_val_intoZoptional_type_protoZoptional_val_infosequence_type_protoZsequence_value_infor    r    r!   test_make_optional_value_info"  s@     
  

  zDTestHelperOptionalAndSequenceFunctions.test_make_optional_value_infoc                 C  sF   t jdd d}t |}t jd|d}t jddd d}| || d S )Nr;   r\  r/   r]  )r   rV  r   )r   r^  r`  r_  Zmake_tensor_sequence_value_infor   )r   ra  rb  Zsequence_val_infoZsequence_val_info_primr    r    r!   test_make_seuence_value_infoC  s    
   zCTestHelperOptionalAndSequenceFunctions.test_make_seuence_value_infoN)r   r   r   r[  rc  rd  r    r    r    r!   rU     s   !!rU  c                   @  s6   e Zd ZddddZddddZddddZd	S )
TestPrintableGraphr   r   c                 C  s   t dddgdg}t dtjdgg}t j|gdt dtjdgt dtjdggt dtjdggt dtjdgdggd |d}t |}| d	|k| d S )
Nr   r   Y_Initializerr   r   r:   r/   r   zI) optional inputs with matching initializers (
  %Y_Initializer[FLOAT, 1]	r   r   r   r	   rJ   r   rI   printable_graphr   r   r   r   r   	graph_strr    r    r!   *test_initializer_with_matching_graph_inputQ  s*    
z=TestPrintableGraph.test_initializer_with_matching_graph_inputc                 C  s   t dddgdg}t dtjdgg}t j|gdt dtjdggt dtjdggt dtjdgdggd |d}t |}| d	|k| d S )
Nr   r   rf  r   r   r:   r/   r   z+) initializers (
  %Y_Initializer[FLOAT, 1]rg  ri  r    r    r!   (test_initializer_no_matching_graph_inputl  s&    
z;TestPrintableGraph.test_initializer_no_matching_graph_inputc                 C  s   t jt dddgdggdt dtjd ggt dtjd ggt dtjdgdggd d}t |}t	| t 
|}| d| d S )	Nr   r   rf  r   r/   r:   r   zX[FLOAT, ?])r   r   r   r   r	   rJ   rI   r   r   r   rh  ZassertIn)r   r   r   rj  r    r    r!   test_unknown_dimensions  s    



z*TestPrintableGraph.test_unknown_dimensionsN)r   r   r   rk  rl  rm  r    r    r    r!   re  P  s   re  tensor_dtypec                 C  s@   g | ]8}|t jt jt jt jt jt jt jt jt j	t j
h
kr|qS r    )r	   r   r  r  r  r  r1  r2  rv   Z	COMPLEX64Z
COMPLEX128r   tr    r    r!   r     s   r   c                 C  s
   t | S r}   r   Ztensor_dtype_to_stringrn  r    r    r!   r     r0   r   )idsr#   r   )rn  r   c                 C  sF   t jddt| }tjd| |j|d}t j	|t
| d S )Nr;   r$   r/   rC   )rK   r   randnrV   r   tensor_dtype_to_np_dtyperI   r   r   r   r   r   rn  r   r   r    r    r!   test_make_tensor_vals  s       rw  c                 C  s8   g | ]0}|t jt jt jt jt jt jt jt jhkr|qS r    )	r	   r   rv   r  r  r  r  r1  r2  ro  r    r    r!   r     s   c                 C  s
   t | S r}   rq  rr  r    r    r!   r     r0   c                 C  sL   t jddt| }tjd| |j| dd}t j	
|t| d S )Nr;   r$   r/   TrQ   )rK   r   rt  rV   r   ru  rI   r   r  r   r   r   r   rv  r    r    r!   test_make_tensor_raw  s    rx  c                   @  s   e Zd ZejdddddZejdddddZejddddd	Zejdddd
dZ	ddddZ
ddddZddddZdS )TestHelperMappingFunctionszerror::DeprecationWarningr   r   c                 C  s   t tj}d S r}   )r   ru  r	   rJ   r   _r    r    r!   /test_tensor_dtype_to_np_dtype_not_throw_warning  s    zJTestHelperMappingFunctions.test_tensor_dtype_to_np_dtype_not_throw_warningc                 C  s   t tj}d S r}   )r   $tensor_dtype_to_storage_tensor_dtyper	   rJ   rz  r    r    r!   ;test_tensor_dtype_to_storage_tensor_dtype_not_throw_warning  s    zVTestHelperMappingFunctions.test_tensor_dtype_to_storage_tensor_dtype_not_throw_warningc                 C  s   t tj}d S r}   )r   tensor_dtype_to_fieldr	   rJ   rz  r    r    r!   ,test_tensor_dtype_to_field_not_throw_warning  s    zGTestHelperMappingFunctions.test_tensor_dtype_to_field_not_throw_warningc                 C  s   t td}d S NrW   )r   np_dtype_to_tensor_dtyperK   r   rz  r    r    r!   /test_np_dtype_to_tensor_dtype_not_throw_warning  s    zJTestHelperMappingFunctions.test_np_dtype_to_tensor_dtype_not_throw_warningc                 C  s   |  ttjtd d S r  )r   r   ru  r	   r   rK   r   rw   r    r    r!   &test_tensor_dtype_to_np_dtype_bfloat16  s    
 zATestHelperMappingFunctions.test_tensor_dtype_to_np_dtype_bfloat16c                 C  s   |  ttjtj d S r}   )r   r   r}  r	   r   ZUINT16rw   r    r    r!   2test_tensor_dtype_to_storage_tensor_dtype_bfloat16  s    
zMTestHelperMappingFunctions.test_tensor_dtype_to_storage_tensor_dtype_bfloat16c                 C  s   |  ttjd d S )Nr7  )r   r   r  r	   r   rw   r    r    r!   #test_tensor_dtype_to_field_bfloat16  s    
 z>TestHelperMappingFunctions.test_tensor_dtype_to_field_bfloat16N)r   r   r   pytestmarkfilterwarningsr|  r~  r  r  r  r  r  r    r    r    r!   ry    s   



ry  c                   @  s   e Zd Zejejjdfejjdfejj	dfejj
dfejjdfejjdfejjdfejjdfejjd	fejjd
fejjdfejjdfejjdfejjdfgdd Zdd Zdd ZdS )TestAttrTypeToStrrJ   r   rv   rX  GRAPHSPARSE_TENSORri   r   r   rp   TENSORSGRAPHSSPARSE_TENSORSrj   c                 C  s   t |}| || d S r}   r   Z_attr_type_to_strr   )r   ro   Zexpected_strresultr    r    r!   test_attr_type_to_str  s    
z'TestAttrTypeToStr.test_attr_type_to_strc                 C  s   t d}| |d d S )Ni'  rY  r  )r   r  r    r    r!   test_attr_type_to_str_undefined  s    
z1TestAttrTypeToStr.test_attr_type_to_str_undefinedc                 C  s6   dd }t j D ]\}}| t||| qd S )Nc                 S  s(   t t| rtt| S d|  } tt| S )NZfloat8)r   r   getattrr   r    r    r!   _get  s    


z1TestAttrTypeToStr.test_custom_types.<locals>._get)r   Zmapping_name_to_data_typeitemsr   r   r  )r   r  kvr    r    r!   test_custom_types  s    z#TestAttrTypeToStr.test_custom_typesN)r   r   r   rQ  rR  r   ZAttributeTyperJ   r   rv   rX  r  r  ri   r   r   rp   r  r  r  rj   r  r  r  r    r    r    r!   r    s(   














r  __main__)0
__future__r   rS  r4  r   r   rO  typingr   ZnumpyrK   rQ  r  rP  Zonnxr   r   r   r   r   r	   r
   r   r   r   r   r   Zonnx.reference.op_runr   Zonnx.reference.ops.op_castr   r   ZTestCaser   r   r   rU  re  r  ZparametrizeZget_all_tensor_dtypesrw  rx  ry  r  r   main__file__r    r    r    r!   <module>   sX   8     XPF
&&
