o
    toi5                     @  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m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mZmZmZmZmZmZmZmZmZmZmZ d/d	d
Zd/dd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d0dd Z&ej#j$dd!d e% D d"d dej#j$d#d$d%gd#d&gdd1d(d)Z'G d*d+ d+ejZ(G d,d- d-ejZ)e*d.kre+  dS dS )2    )annotationsN)Any)AttributeProto
GraphProto
ModelProtoOptionalProtoSequenceProtoTensorProto	TypeProtocheckerdefshelpernumpy_helperarray
np.ndarrayreturnnpt.NDArray[np.uint8]c                 C  sx   |   tj }| j}|d dk}|r|j|d gdd |dM }|ddd  dK  < |ddd |ddd B S )	z[Convert a numpy array to flatten, packed int4/uint4. Elements must be in the correct range.      Frefcheck   N   r   ravelviewnpuint8copysizeresize)r   
array_flatr   	odd_sized r#   I/home/ubuntu/.local/lib/python3.10/site-packages/onnx/test/helper_test.py
_pack_4bit!   s   r%   c                 C  s   |   tj }| j}|d }|r|j|d|  gdd |dM }|ddd  dK  < |ddd  dK  < |ddd  dK  < |d	dd |ddd B |ddd B |ddd B S )
z[Convert a numpy array to flatten, packed int2/uint2. Elements must be in the correct range.r   Fr      r   Nr      r   r   )r   r!   r   pad_lenr#   r#   r$   
_pack_2bit.   s   8r)   c                   @  s   e Zd Zd&ddZd&ddZd&ddZd&d	d
Zd&ddZd&ddZd&ddZ	d&ddZ
d&ddZd&ddZd&ddZd&ddZd&ddZd&ddZd&dd Zd&d!d"Zd&d#d$Zd%S )'TestHelperAttributeFunctionsr   Nonec                 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attrr#   r#   r$   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intr&      i  i  )r   r.   r/   r0   ir   r2   r3   r#   r#   r$   test_attr_intJ   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/   r0   
doc_stringr3   r#   r#   r$   test_attr_doc_string`   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/   r0   sr   r2   get_attribute_valuer3   r#   r#   r$   test_attr_stringh   s    


z-TestHelperAttributeFunctions.test_attr_stringc                 C  B   t dddg}| |jd | t|jddg t| d S )Nfloatsr-          @r   r.   r/   r0   listrH   r   r2   r3   r#   r#   r$   test_attr_repeated_float~      z5TestHelperAttributeFunctions.test_attr_repeated_floatc                 C  rG   )Nintsr   r   )r   r.   r/   r0   rK   rN   r   r2   r3   r#   r#   r$   test_attr_repeated_int   rM   z3TestHelperAttributeFunctions.test_attr_repeated_intc                 C  sB   t dg d}| |jd | t|jg d t| d S )Nmixed)r   r         @      @)r-   rI   rQ   rR   rJ   r3   r#   r#   r$   (test_attr_repeated_mixed_floats_and_ints   rM   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stringsstr1str2s   str1s   str2)r   r.   r/   r0   rK   rT   r   r2   r3   r#   r#   r$   test_attr_repeated_str   rM   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   r0   	data_typedimsvalsbtensors)r   make_tensorr	   FLOATr   onesr.   r/   r0   rK   r^   r   r2   )r4   r^   r5   r#   r#   r$   test_attr_repeated_tensor_proto   s   z<TestHelperAttributeFunctions.test_attr_repeated_tensor_protoc                 C  s   ddg}g d}t jdtjt|gt|tjdd}g d}t jdtj	t|gt|tj
dd}t |||}t d|}| |jd tt | t| d S )	Nr&   g    9?g    -?g   `Q?sparse_valuesFr0   rZ   r[   r\   rawr   r&   r8   indicessparse_attr)r   r_   r	   r`   lenr   r   astypefloat32INT64int64make_sparse_tensorr.   r/   r0   r   check_sparse_tensorrE   r2   )r4   dense_shaperd   values_tensorlinear_indicesindices_tensorsparse_tensorr5   r#   r#   r$   test_attr_sparse_tensor_proto   s0   z:TestHelperAttributeFunctions.test_attr_sparse_tensor_protoc           
      C  s   ddg}g d}t jdtjt|gt|tjdd}g d}t jdtj	t|gt|tj
dd}t |||}||g}t d|}| |jd t| t |D ]}	t|	 qXd S )	Nr&   rc   rd   Fre   rg   rh   sparse_attrs)r   r_   r	   r`   rj   r   r   rk   rl   rm   rn   ro   r.   r/   r0   r   r2   rE   rp   )
r4   rq   rd   rr   rs   rt   ru   repeated_sparser5   rD   r#   r#   r$   'test_attr_sparse_tensor_repeated_protos   s6   
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   r]   r   graphs)	r   r0   r   r.   r/   rK   rz   r   r2   )r4   rz   r5   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/   r0   tptyper   
TYPE_PROTOrK   r}   TYPE_PROTOS)r4   r|   r5   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/   r   rj   rT   assertRaises
ValueErrorr3   r#   r#   r$   test_attr_empty_list   s   z1TestHelperAttributeFunctions.test_attr_empty_listc                 C  sD   |  td tjddtjd W d    d S 1 sw   Y  d S )NzInferred attribute type 'FLOAT'rB   g@r   )assertRaisesRegex	TypeErrorr   r.   r   STRINGr4   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 )NrB   r-   r   )r   r   r   ValidationErrorr2   r0   r1   r9   r3   r#   r#   r$   test_is_attr_legal   s   z/TestHelperAttributeFunctions.test_is_attr_legalc                   s   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| q.t dD ]}t }d|_t|dD ]}|| qU| tj	tj| qGd S )Nr5   r   type_AttributeProto.AttributeTypevarrA   r<   r   r   r+   c                 S  s   t | || || _d S N)setattrr   r5   r   r   r<   r#   r#   r$   _set  s   
zETestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>._set	list[Any]c                 S  s   | | || _d S r   )extendr   r   r#   r#   r$   _extend  s   

zHTestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>._extendc                       | t jddS )Nr1   r-   )r   r`   r5   r   r#   r$   <lambda>#      zITestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>.<lambda>c                   r   )Nr9   r   )r   INTr   r   r#   r$   r   $  r   c                   r   )NrD   s   str)r   r   r   r   r#   r$   r   %  r   c                       | t j| jddgS )Nr-   rI   )r   FLOATSrH   r   r   r#   r$   r   '      c                   r   )Nr   r   )r   INTSrN   r   r   r#   r$   r   +      c                   r   )N   a   b)r   r   rT   r   r   r#   r$   r   -  r   d   rB   r   )
r5   r   r   r   r   rA   r<   r   r   r+   )
r5   r   r   r   r   r   r<   r   r   r+   )
ranger   r0   randomchoicer   r2   sampler   r   )r4   SET_ATTR_ir5   funcr#   )r   r   r$   test_is_attr_legal_verbose  s*   

	







z7TestHelperAttributeFunctions.test_is_attr_legal_verboseNr   r+   )__name__
__module____qualname__r6   r:   r@   rF   rL   rO   rS   rW   rb   rv   ry   r{   r   r   r   r   r   r#   r#   r#   r$   r*   =   s$    












	


r*   c                   @  sp   e Zd ZdddZdddZdddZdd	d
ZdddZdddZdddZ	dddZ
dddZ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YrB   )r0   )
assertTruer   hasr   	make_noder/   op_typer0   rK   inputoutputr4   node_defr#   r#   r$   test_node_no_argB  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   rB   r>   )r0   r?   )r   r   r/   r?   r   r#   r#   r$   r@   J  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   rK   r   r   rj   	attributer.   r   r#   r#   r$   test_node_with_argN  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   rB   r>   ztest.domain)r0   r?   domain)r   r   r/   r   r   r#   r#   r$   test_node_domainY  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   rB   r?   
value_infor   r=   )r   r   make_tensor_value_infor	   r`   
make_graphr/   r0   rj   noder?   r   )r4   	node_def1	node_def2r   graphr#   r#   r$   
test_graph_  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/   r0   r?   )r4   r   r#   r#   r$   test_graph_docstringr  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   rB   r   r   )xxx)producer_name)r   r   r   r   r	   r`   r   AttributeError
make_modelr/   r   )r4   r   	graph_def	model_defr#   r#   r$   
test_modelw  s   z"TestHelperNodeFunctions.test_modelc                 C  s@   t g dg g }t j|dd}| t|d | |jd d S )Nr   rB   r?   r0   )r   r   r   assertFalsehasattrr/   r?   )r4   r   r   r#   r#   r$   test_model_docstring  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   rB   r   z
test;graph)TitleKeywordsr   Other)r   r   r   set_model_propsr   check_modelmetadata_propsaddkeyr<   r   r   )r4   r   r   duper#   r#   r$   test_model_metadata_props  s   




z1TestHelperNodeFunctions.test_model_metadata_propsc                   sD  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)gd |d*gd |dd&gd  t d+g d S ).Nopset_versionslist[tuple[str, int]]r   r   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   make_opsetid).0pairr#   r#   r$   
<listcomp>  r   zRTestHelperNodeFunctions.test_model_irversion.<locals>.mk_model.<locals>.<listcomp>)opset_imports)r   r   make_model_gen_version)r   r   r#   r#   r$   mk_model  s
   z>TestHelperNodeFunctions.test_model_irversion.<locals>.mk_model
ir_versionr7   r+   c                   s    | } |j| d S r   )r/   r   )r   r   modelr   r4   r#   r$   rB     s   z:TestHelperNodeFunctions.test_model_irversion.<locals>.test)r=   	   r   )r=   
   r8   )r=      r'   )r=         )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  r8   )zai.onnx.trainingr   )r=   r   )r   r   r   r   )r   r   r   r7   r   r+   )r   r   )r4   rB   r#   r   r$   test_model_irversion  s4   
z,TestHelperNodeFunctions.test_model_irversionNr   )r   r   r   r   r@   r   r   r   r   r   r   r   r	  r#   r#   r#   r$   r   A  s    








r   c                   @  s  e Zd Zd6ddZd6ddZd6ddZd6d	d
Zd6ddZd6ddZd6ddZ	d6ddZ
d6ddZd6ddZd6ddZd6ddZd6ddZejeejejfdd6ddZejedd6d d!Zejeejejfd"d6d#d$Zd6d%d&Zejeejejfdd6d'd(Zejedd6d)d*Zejeejejfd"d6d+d,Zd6d-d.Z d6d/d0Z!d6d1d2Z"d6d3d4Z#d5S )7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   rD   r#   r#   r$   r     r   zETestHelperTensorFunctions.test_make_string_tensor.<locals>.<listcomp>)AmyBillyCindyDavidrB   )r   r   Fre   )r   r_   r	   r   r/   rK   string_data)r4   string_listtensorr#   r#   r$   test_make_string_tensor  s   z1TestHelperTensorFunctions.test_make_string_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jd
tj|j	|d}| 
|jd
 t jt|t j|tjt j d S )Nr-   rI   rQ         @     ?     p??皙?dtyperB   rY   )r   r   naninfrl   r   r_   r	   BFLOAT16shaper/   r0   testingassert_equalr   to_arrayr   uint16rk   	ml_dtypesbfloat16)r4   np_arrayr  r#   r#   r$   test_make_bfloat16_tensor  s(   
z3TestHelperTensorFunctions.test_make_bfloat16_tensorc                 C  X   t dtjdgg d}t|}tjg dtj	d}tj
|tj|tj d S )N
zero_pointr8   )r         ?r   P  333333$@r   r)  r   i  r   r  )r   r_   r	   FLOAT8E4M3FNr   r!  r   r   r#  float8_e4m3fnr  r   r   r   r4   yynpexpectedr#   r#   r$   test_make_float8e4m3fn_tensor     
"z7TestHelperTensorFunctions.test_make_float8e4m3fn_tensorc                 C  r'  )Nr(  r   )r   r)  r   r*  r+  gh㈵gh㈵>)r   r)  r      r   r   r   r  )r   r_   r	   FLOAT8E4M3FNUZr   r!  r   r   r#  float8_e4m3fnuzr  r   r   r   r/  r#   r#   r$   test_make_float8e4m3fnuz_tensor  s   
"z9TestHelperTensorFunctions.test_make_float8e4m3fnuz_tensorc                 C  r'  )Nr(  r8   )r   r)  r   r*  `   )r   r)  r      r9  r  )r   r_   r	   
FLOAT8E5M2r   r!  r   r   r#  float8_e5m2r  r   r   r   r/  r#   r#   r$   test_make_float8e5m2_tensor  r4  z5TestHelperTensorFunctions.test_make_float8e5m2_tensorc                 C  r'  )Nr(  r   )r   r)  r   r*  r9  gHzgHz>)r   r)  r   r:  r9  r   r   r  )r   r_   r	   FLOAT8E5M2FNUZr   r!  r   r   r#  float8_e5m2fnuzr  r   r   r   r/  r#   r#   r$   test_make_float8e5m2fnuz_tensor  s   

"z9TestHelperTensorFunctions.test_make_float8e5m2fnuz_tensorc                 C  sx   t jddgddgddgddgt jt jggtjd	t j}tj	d
t
j|jt|dd}t jt|t j| d S )Nr-   rI   rQ   r  r  r  r  r  r  rB   Tre   )r   r   r  r  r#  r$  r   r"  r   r_   r	   r  r  r   tobytes_little_endianr  assert_allcloser!  )r4   r   r  r#   r#   r$   test_make_bfloat16_tensor_raw  s&   
	 z7TestHelperTensorFunctions.test_make_bfloat16_tensor_rawc                 C  d   t jg dtjd}| }tjdtjt	|j
|dd}t|}t j|t j|t j d S )Nr,  r  rB   Tre   )r   r   r#  r.  tobytesr   r_   r	   r-  rK   r  r   r!  r  r   r   r   r4   r2  packed_valuesr0  r1  r#   r#   r$   !test_make_float8e4m3fn_tensor_raw'     
"z;TestHelperTensorFunctions.test_make_float8e4m3fn_tensor_rawc                 C  sx   t jg dt jd}|tj}| }tjdt	j
t|j|dd}t|}t j|t j|tjt j d S )N)r   r)  r   r5  r   r  rB   Tre   )r   r   rl   rk   r#  r7  rE  r   r_   r	   r6  rK   r  r   r!  r  r   r   r   )r4   r2  f8rG  r0  r1  r#   r#   r$   #test_make_float8e4m3fnuz_tensor_raw4  s   

z=TestHelperTensorFunctions.test_make_float8e4m3fnuz_tensor_rawc                 C  rD  N)r   r)  r   r:  r   r  rB   Tre   )r   r   r#  r<  rE  r   r_   r	   r;  rK   r  r   r!  r  r   r   r   rF  r#   r#   r$   test_make_float8e5m2_tensor_rawE  rI  z9TestHelperTensorFunctions.test_make_float8e5m2_tensor_rawc                 C  rD  rL  )r   r   r#  r?  rE  r   r_   r	   r>  rK   r  r   r!  r  r   r   r   rF  r#   r#   r$   #test_make_float8e5m2fnuz_tensor_rawR  rI  z=TestHelperTensorFunctions.test_make_float8e5m2fnuz_tensor_rawc                 C  sd   t dtjdgddddddttjjg}t	|}tj
g d	tjd
}tj|tj| d S )Nscaler   r   gX9v?r-   g      ?rI   g @)r   |         rR        r  )r   r_   r	   
FLOAT8E8M0r   finforl   maxr   r!  r   r   r  r   r   r/  r#   r#   r$   test_make_float8e8m0_tensor_  s   
z5TestHelperTensorFunctions.test_make_float8e8m0_tensorc                 C  sx   t jg dt jd}| }tjdtjt|j	|dd}t
|}t jg dtjd}t j|t j|t j d S )N)x   rP  rQ  rR  rS     r  rB   Tre   )g      ?g      ?r-   rI   r  i    )r   r   r   rE  r   r_   r	   rU  rK   r  r   r!  r#  float8_e8m0fnur  r   r   )r4   e8m0_rawrG  r0  r1  r2  r#   r#   r$   test_make_float8e8m0_tensor_rawj  s"   



z9TestHelperTensorFunctions.test_make_float8e8m0_tensor_raw)r8   r   r'   r   r'   r8   r&   r&   rX   )i   c           	      C     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   highr   r0  rI   )r	   UINT4INT4r   r   randintr   r_   r  mathceilprodrj   bytes
int32_datar  r   r   r!  	r4   r  r[   
type_rangedatar0  expected_data_sizeactual_data_sizer1  r#   r#   r$   test_make_4bit_tensor}     
z/TestHelperTensorFunctions.test_make_4bit_tensorc                 C  h   t |}t jdg| t jd|}tdtj|j	|}t
|d }tt|j}t j|| d S )Nr  r0  rI   )r   ri  r   int8reshaper   r_   r	   re  r  rg  rh  rj   rj  rk  r  r   r4   r[   	num_elemsrn  r0  ro  rp  r#   r#   r$   test_4bit_tensor_size     
z/TestHelperTensorFunctions.test_4bit_tensor_size)r^  r_  r`  rX   c                 C  Z   t jjdd|t jd}t|}tjd||| dd}t	|}t j
|t j| d S )Nr   r   rc  r   r  packed_int4Trf   )r   r   rf  r   r%   r   r_   rE  r   r!  r  r   r   r4   r  r[   rn  packed_datar0  r1  r#   r#   r$   test_make_4bit_raw_tensor     
z3TestHelperTensorFunctions.test_make_4bit_raw_tensorc                 C  sh   t jg dtjd}|t j}t|}tjdt	j
|j| dd}t|}t j|t j| d S )N)r   r)  r   r5  r   r  packed_fp4e2m1Tr~  )r   r   r#  float4_e2m1fnr   r   r%   r   r_   r	   
FLOAT4E2M1r  rE  r   r!  r  r   )r4   rn  r2  r  r0  r1  r#   r#   r$   test_make_float4e2m1_raw_tensor  s   
z9TestHelperTensorFunctions.test_make_float4e2m1_raw_tensorc           	      C  ra  )N)r   r&   )r  r   r   r   rb  r0  r  )r	   UINT2INT2r   r   rf  r   r_   r  rg  rh  ri  rj   rj  rk  r  r   r   r!  rl  r#   r#   r$   test_make_2bit_tensor  rr  z/TestHelperTensorFunctions.test_make_2bit_tensorc                 C  rs  )Nr  r  r0  r  )r   ri  r   ru  rv  r   r_   r	   r  r  rg  rh  rj   rj  rk  r  r   rw  r#   r#   r$   test_2bit_tensor_size  rz  z/TestHelperTensorFunctions.test_2bit_tensor_sizec                 C  r{  )Nr   r   r|  packed_int2Tr~  )r   r   rf  r   r)   r   r_   rE  r   r!  r  r   r   r  r#   r#   r$   test_make_2bit_raw_tensor  r  z3TestHelperTensorFunctions.test_make_2bit_raw_tensorc                 C  sX   t dtjdgg d}t|}tjg dtj	d
tj}tj|
tj| d S )Nr(  r   )r   r)  r   r*  g333333i)r   r)  r   r'   g      irt  r  )r   r_   r	   r  r   r!  r   r   r#  r  r   r   r  r   r/  r#   r#   r$   test_make_float4e2m1_tensor  s   

z5TestHelperTensorFunctions.test_make_float4e2m1_tensorc                 C  sz   g d}t jdtjd|d}g d}t jdtjd|d}dg}t |||}| |j| | |j| | |j	| d S )Ng?g@gffffff
@g@g      @rB   r8   rY   )r   r&   r8   r   r   test_indicesr   )
r   r_   r	   r`   rm   ro   r/   valuesrh   r[   )r4   r  rr   rh   rt   rq   sparser#   r#   r$   test_make_sparse_tensor
  s   

z1TestHelperTensorFunctions.test_make_sparse_tensorc                 C  8   t dtjd}t| t dtjd}t| d S )Nr   )r   r   r   r#   )r   r   r	   r`   r   check_value_infor4   vir#   r#   r$   test_make_tensor_value_info     
z5TestHelperTensorFunctions.test_make_tensor_value_infoc                 C  r  )Nr   r   r&   r   r#   )r   make_sparse_tensor_value_infor	   r`   r   r  r  r#   r#   r$   "test_make_sparse_tensor_value_info!  r  z<TestHelperTensorFunctions.test_make_sparse_tensor_value_infoNr   )$r   r   r   r  r&  r3  r8  r=  r@  rC  rH  rK  rM  rN  rX  r]  parameterizedexpand	itertoolsproductr	   rd  re  rq  ry  r  r  r  r  r  r  r  r  r  r  r  r#   r#   r#   r$   r
    sr    




















r
  c                   @  *   e Zd Zd
ddZd
ddZd
ddZd	S )&TestHelperOptionalAndSequenceFunctionsr   r+   c                 C  s   g d}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 )Nr  rB   r  rY   )r0   	elem_typer<   )r0   r  r  tensor_value)r   r_   r	   r`   make_optionalr   TENSORr/   r0   r  r  make_sequencer   SEQUENCEsequence_value	UNDEFINEDr   HasField)r4   r  rr   optionalvalues_sequenceoptional_noner#   r#   r$   test_make_optional+  s6   
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   r8   r  r  rB   r0   r|   )r   make_tensor_type_protomake_value_infomake_optional_type_protor/   r0   r   r   optional_typer  make_sequence_type_protosequence_type)r4   tensor_type_prototensor_val_intooptional_type_protooptional_val_infosequence_type_protosequence_value_infor#   r#   r$   test_make_optional_value_infoL  s6   


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  rB   r  )r0   r  r  )r   r  r  r  make_tensor_sequence_value_infor/   )r4   r  r  sequence_val_infosequence_val_info_primr#   r#   r$   test_make_sequence_value_infom  s   
zDTestHelperOptionalAndSequenceFunctions.test_make_sequence_value_infoNr   )r   r   r   r  r  r  r#   r#   r#   r$   r  *  s    

!!r  c                   @  r  )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	|v | d S )
Nr   r   Y_Initializerr   r   r   rB   r   zI) optional inputs with matching initializers (
  %Y_Initializer[FLOAT, 1]	r   r   r   r	   r`   r   r_   printable_graphr   r4   r   r   r   	graph_strr#   r#   r$   *test_initializer_with_matching_graph_input{  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	|v | d S )
Nr   r   r  r   r   r   rB   r   z+) initializers (
  %Y_Initializer[FLOAT, 1]r  r  r#   r#   r$   (test_initializer_no_matching_graph_input  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   r  r   rB   r   r   zX[FLOAT, ?])r   r   r   r   r	   r`   r_   r   r   r   r  assertIn)r4   r   r   r  r#   r#   r$   test_unknown_dimensions  s   



z*TestPrintableGraph.test_unknown_dimensionsNr   )r   r   r   r  r  r  r#   r#   r#   r$   r  z  s    

r  tensor_dtypec                 C     g | ]	}|t jkr|qS r#   r	   r   r   tr#   r#   r$   r         r   c                 C  
   t | S r   r   tensor_dtype_to_stringr  r#   r#   r$   r        
 r   )idsr7   r+   c                 C  s   t | }| tjtjtjtjhv rtd|}nt	j
dd}||}t jd| |j|d}t|}| tjtjtjtjtjtjhv r_|j|jksKJ |j|jksSJ | | ks]J d S t	j|| d S )Nr  r   r&   rB   rY   )r   tensor_dtype_to_np_dtyper	   UINT8UINT16UINT32UINT64r   create_random_intr   r   randnrk   r_   r  r!  r>  r;  r6  r-  r  rU  r  rE  r  r   )r  np_typer%  r  roundtrip_arrayr#   r#   r$   test_make_tensor_vals  s4   




r  c                 C  r  r#   r  r  r#   r#   r$   r     r  c                 C  r  r   r  r  r#   r#   r$   r     r  vals_as_bytesTFvals_as_nparrayboolc                 C  s  t | }| tjtjtjtjhv rtd|}nt	j
dd}||}|rH|}| tjtjtjhv r6t|}| tjtjhv rBt|}t|}n|}t jd| |j|dd}t|}| tjtjtjtjtjtjhv r|j|jksrJ |j|jkszJ | | ksJ d S t	j !|| d S )Nr  r   r&   rB   Tre   )"r   r  r	   r  r  r  r  r   r  r   r   r  rk   r  re  rd  r%   r  r  r)   rA  r_   r  r!  r>  r;  r6  r-  r  rU  r  rE  r  r   )r  r  r  r%  np_array_intermediater\   r  r  r#   r#   r$   test_make_tensor_raw  sZ   



r  c                   @  s   e Zd ZejddddZejddddZejdddd	Zejddd
dZ	dddZ
dddZdddZdS )TestHelperMappingFunctionszerror::DeprecationWarningr   r+   c                 C     t tj}d S r   )r   r  r	   r`   r4   _r#   r#   r$   /test_tensor_dtype_to_np_dtype_not_throw_warning0     zJTestHelperMappingFunctions.test_tensor_dtype_to_np_dtype_not_throw_warningc                 C  r  r   )r   $tensor_dtype_to_storage_tensor_dtyper	   r`   r  r#   r#   r$   ;test_tensor_dtype_to_storage_tensor_dtype_not_throw_warning4  r  zVTestHelperMappingFunctions.test_tensor_dtype_to_storage_tensor_dtype_not_throw_warningc                 C  r  r   )r   tensor_dtype_to_fieldr	   r`   r  r#   r#   r$   ,test_tensor_dtype_to_field_not_throw_warning8  r  zGTestHelperMappingFunctions.test_tensor_dtype_to_field_not_throw_warningc                 C  s   t td}d S )Nrl   )r   np_dtype_to_tensor_dtyper   r  r  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j d S r   )r/   r   r  r	   r  r#  r$  r   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  INT32r   r#   r#   r$   2test_tensor_dtype_to_storage_tensor_dtype_bfloat16E  s   
zMTestHelperMappingFunctions.test_tensor_dtype_to_storage_tensor_dtype_bfloat16c                 C  s   |  ttjd d S )Nrk  )r/   r   r  r	   r  r   r#   r#   r$   #test_tensor_dtype_to_field_bfloat16K  s   z>TestHelperMappingFunctions.test_tensor_dtype_to_field_bfloat16Nr   )r   r   r   pytestmarkfilterwarningsr  r  r  r  r  r  r  r#   r#   r#   r$   r  -  s    





r  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S )TestAttrTypeToStrr`   r   r   r  GRAPHSPARSE_TENSORr   r   r   r   TENSORSGRAPHSSPARSE_TENSORSr   c                 C  s   t |}| || d S r   r   _attr_type_to_strr/   )r4   r   expected_strresultr#   r#   r$   test_attr_type_to_strR  s   
z'TestAttrTypeToStr.test_attr_type_to_strc                 C  s   t d}| |d d S )Ni'  r  r  )r4   r  r#   r#   r$   test_attr_type_to_str_undefinedh  s   
z1TestAttrTypeToStr.test_attr_type_to_str_undefinedN)r   r   r   r  r  r   AttributeTyper`   r   r   r  r  r  r   r   r   r   r   r  r  r   r  r  r#   r#   r#   r$   r  Q  s(    














r  __main__)r   r   r   r   )r  r7   r   r+   )r  r7   r  r  r   r+   ),
__future__r   r  rg  r   unittesttypingr   r#  numpyr   numpy.typingnptr  r  onnxr   r   r   r   r   r	   r
   r   r   r   r   r%   r)   TestCaser*   r   r
  r  r  r  parametrizeget_all_tensor_dtypesr  r  r  r  r   mainr#   r#   r#   r$   <module>   s\   4

     gPF#;$