o
    r::j                     @  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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 ej(dd'ddZ)ej%j&ddd e' D ej(dej%j&dddgddgdd(d d!Z*G d"d# d#ejZ+G d$d% d%ejZ,e-d&kre.  dS dS ))    )annotationsN)Any)AttributeProto
GraphProto
ModelProtoOptionalProtoSequenceProtoSparseTensorProtoTensorProto	TypeProtocheckerdefshelpernumpy_helper)_pack_2bitx4)_pack_4bitx2c                   @  s   e Zd Zd3ddZd3ddZd3ddZd3d	d
Zd3ddZd3ddZd3ddZ	d3ddZ
d3ddZd3ddZd3ddZd3ddZd3ddZed4ddZd3d d!Zd3d"d#Zd3d$d%Zd3d&d'Zd3d(d)Zd3d*d+Zd3d,d-Zd3d.d/Zd3d0d1Zd2S )5TestHelperAttributeFunctionsreturn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attr r   \/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/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_int0   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_stringF   s   z1TestHelperAttributeFunctions.test_attr_doc_stringc                 C  sx   t jdtjdd}| |jd | |jtj | |jd | t	 t 
| W d    d S 1 s5w   Y  d S )Nalphaparent_alpharef_attr_name)r   make_attribute_refr   FLOATr   r   typer0   assertRaises
ValueErrorget_attribute_valuer   r   r   r    test_make_attribute_refN   s   "z4TestHelperAttributeFunctions.test_make_attribute_refc                 C  s4   t jdtjddd}| |jd | |jd d S )Nr-   r*   r.   )r+   r0   r   r1   r   r2   r   r0   r+   r   r   r   r    "test_make_attribute_ref_doc_stringZ   s   z?TestHelperAttributeFunctions.test_make_attribute_ref_doc_stringc                 C  s0   t dtjd}| |jd | |jd d S )Nr-   r*   r8   r   r   r   r    -test_make_attribute_ref_doc_string_positionald   s   zJTestHelperAttributeFunctions.test_make_attribute_ref_doc_string_positionalc                 C  sB   |  t tjdtjdd W d    d S 1 sw   Y  d S )Nr-   r)   r/   )r4   r5   r   r1   r   r2   r   r   r   r    .test_make_attribute_ref_requires_ref_attr_namei   s   "zKTestHelperAttributeFunctions.test_make_attribute_ref_requires_ref_attr_namec                 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   r6   r   r   r   r    test_attr_stringm   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   r   listrC   r   r   r   r   r   r    test_attr_repeated_float      z5TestHelperAttributeFunctions.test_attr_repeated_floatc                 C  rB   )Nints      )r   r   r   r   rF   rI   r   r   r   r   r   r    test_attr_repeated_int   rH   z3TestHelperAttributeFunctions.test_attr_repeated_intc                 C  sB   t dg d}| |jd | t|jg d t| d S )Nmixed)rJ   rK         @      @)r   rD   rN   rO   rE   r   r   r   r    (test_attr_repeated_mixed_floats_and_ints   rH   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   r   rF   rQ   r   r   r   r   r   r    test_attr_repeated_str   rH   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'   rJ   rJ   r   	data_typedimsvalsbtensors)r   make_tensorr
   r2   nponesr   r   r   rF   r[   r   r   )r   r[   r   r   r   r    test_attr_repeated_tensor_proto   s   z<TestHelperAttributeFunctions.test_attr_repeated_tensor_protor	   c                  C  sb   t jdtjdgtjg dtjddd} t jdtjdgtjg dtjddd}t 	| |ddgS )	Nsparse_valuesr#   )g    9?g    -?g   `Q?dtypeFr   rW   rX   rY   rawindices)rK   r#   r$   )
r   r\   r
   r2   r]   arrayfloat32INT64int64make_sparse_tensor)values_tensorindices_tensorr   r   r    _make_sparse_tensor   s$   
z0TestHelperAttributeFunctions._make_sparse_tensorc                 C  s@   |   }td|}| |jd tt| t| d S )Nsparse_attr)	rm   r   r   r   r   r   check_sparse_tensorr6   r   r   sparse_tensorr   r   r   r    test_attr_sparse_tensor_proto   s
   z:TestHelperAttributeFunctions.test_attr_sparse_tensor_protoc                 C  sN   |   }td||g}| |jd t| t|D ]}t| qd S )Nsparse_attrs)	rm   r   r   r   r   r   r   r6   ro   )r   rq   r   r@   r   r   r    'test_attr_sparse_tensor_repeated_protos   s   
zDTestHelperAttributeFunctions.test_attr_sparse_tensor_repeated_protosc                 C  sL   |   }td|}| dt| td||g}| dt| d S )Nstz<Sparse Tensor>stsz[<Sparse Tensor>, ...])rm   r   r   assertInprintable_attributerp   r   r   r    &test_printable_attribute_sparse_tensor   s
   zCTestHelperAttributeFunctions.test_printable_attribute_sparse_tensorc                 C  sZ   t  t  g}d|d _d|d _td|}| |jd | t|j| t| d S )Nr'   r   rZ   rJ   graphs)	r   r   r   r   r   rF   rz   r   r   )r   rz   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   tpr3   r   
TYPE_PROTOrF   r}   TYPE_PROTOS)r   r|   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   r3   lenrQ   r4   r5   r   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'r>   g@r   )assertRaisesRegex	TypeErrorr   r   r   STRINGr;   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   rK   )r   r4   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 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 )Nr   r   type_AttributeProto.AttributeTypevarr=   r(   r   r   r   c                 S  s   t | || || _d S N)setattrr3   r   r   r   r(   r   r   r    _set  s   
zETestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>._set	list[Any]c                 S  s   | | || _d S r   )extendr3   r   r   r   r    _extend  s   

zHTestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>._extendc                       | t jddS )Nr   r   )r   r2   r   r   r   r    <lambda>      zITestHelperAttributeFunctions.test_is_attr_legal_verbose.<locals>.<lambda>c                   r   )Nr%   rJ   )r   INTr   r   r   r    r     r   c                   r   )Nr@   s   str)r   r   r   r   r   r    r     r   c                       | t j| jddgS )Nr   rD   )r   FLOATSrC   r   r   r   r    r         c                   r   )NrJ   rK   )r   INTSrI   r   r   r   r    r   #      c                   r   )N   a   b)r   r   rQ   r   r   r   r    r   %  r   d   r>   rK   )
r   r   r   r   r   r=   r(   r   r   r   )
r   r   r   r   r   r   r(   r   r   r   )
ranger   r   randomchoicer   r   sampler4   r   )r   SET_ATTR_ir   funcr   )r   r   r    test_is_attr_legal_verbose  s*   

	







z7TestHelperAttributeFunctions.test_is_attr_legal_verboseNr   r   )r   r	   )__name__
__module____qualname__r!   r&   r,   r7   r9   r:   r<   rA   rG   rL   rP   rT   r_   staticmethodrm   rr   rt   ry   r{   r   r   r   r   r   r   r   r   r    r   #   s2    

















	
	


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Yr>   )r   )
assertTruer   hasr   	make_noder   op_typer   rF   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,   B  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   rJ   )	arg_valuer   r   )r   r   r   r   r   r   r   rF   r   r   r   	attributer   r   r   r   r    test_node_with_argF  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_domainQ  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ZrJ   rK   r>   r+   
value_infor   r)   )r   r   make_tensor_value_infor
   r2   
make_graphr   r   r   noder+   r   )r   	node_def1	node_def2r   graphr   r   r    
test_graphW  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_docstringj  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>   rJ   rK   )xxx)producer_name)r   r   r   r   r
   r2   r4   AttributeError
make_modelr   r   )r   r   	graph_def	model_defr   r   r    
test_modelo  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_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   r>   r   z
test;graph)TitleKeywordsr   Other)r   r   r   set_model_propsr   check_modelmetadata_propsaddkeyr(   r4   r   )r   r   r   duper   r   r    test_model_metadata_props  s   




z1TestHelperNodeFunctions.test_model_metadata_propsc                   s\  d/dd d0 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,gd |d-gd |dd)gd  t d.g d S )1N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_versionr"   r   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)      )r)      r   )r)      r   )r)      r   )r)      )zai.onnxr   )
ai.onnx.mlrK   )r  r#   )r  r   )r  r$   )zai.onnx.trainingrJ   )r)   r   )r   r   r   r   )r   r   r   r"   r   r   )r4   r5   )r   r>   r   r   r    test_model_irversion  s8   
z,TestHelperNodeFunctions.test_model_irversionNr   )r   r   r   r   r,   r   r   r   r   r   r   r   r  r   r   r   r    r   9  s    








r   c                   @  s  e Zd ZdBddZdBddZdBddZdBd	d
ZdBddZdBddZdBddZ	dBddZ
dBddZdBddZdBddZdBddZdBddZejeejejfddBddZejeddBd d!Zejeejejfd"dBd#d$ZdBd%d&ZejeejejfddBd'd(ZejeddBd)d*Zejeejejfd"dBd+d,ZdBd-d.Z dBd/d0Z!dBd1d2Z"dBd3d4Z#dBd5d6Z$dBd7d8Z%dBd9d:Z&dBd;d<Z'dBd=d>Z(dBd?d@Z)dAS )C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   r@   r   r   r    r     r   zETestHelperTensorFunctions.test_make_string_tensor.<locals>.<listcomp>)AmyBillyCindyDavidr>   rK   rK   Frc   )r   r\   r
   r   r   rF   string_data)r   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   rD   rN         @     ?     p??皙?ra   r>   rV   )r]   rf   naninfrg   r   r\   r
   BFLOAT16shaper   r   testingassert_equalr   to_arrayviewuint16astype	ml_dtypesbfloat16)r   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_pointr$   )r         ?rJ   P  333333$@r   r-  rJ   i  r   ra   )r   r\   r
   FLOAT8E4M3FNr   r#  r]   rf   r'  float8_e4m3fnr!  r"  r$  uint8r   yynpexpectedr   r   r    test_make_float8e4m3fn_tensor     
"z7TestHelperTensorFunctions.test_make_float8e4m3fn_tensorc                 C  r+  )Nr,  r   )r   r-  rJ   r.  r/  gh㈵gh㈵>)r   r-  rJ      r   r   r   ra   )r   r\   r
   FLOAT8E4M3FNUZr   r#  r]   rf   r'  float8_e4m3fnuzr!  r"  r$  r3  r4  r   r   r    test_make_float8e4m3fnuz_tensor  s   
"z9TestHelperTensorFunctions.test_make_float8e4m3fnuz_tensorc                 C  r+  )Nr,  r$   )r   r-  rJ   r.  `   )r   r-  rJ      r>  ra   )r   r\   r
   
FLOAT8E5M2r   r#  r]   rf   r'  float8_e5m2r!  r"  r$  r3  r4  r   r   r    test_make_float8e5m2_tensor  r9  z5TestHelperTensorFunctions.test_make_float8e5m2_tensorc                 C  r+  )Nr,  r   )r   r-  rJ   r.  r>  gHzgHz>)r   r-  rJ   r?  r>  r   r   ra   )r   r\   r
   FLOAT8E5M2FNUZr   r#  r]   rf   r'  float8_e5m2fnuzr!  r"  r$  r3  r4  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   rD   rN   r  r  r  r  r  ra   r>   Trc   )r]   rf   r  r  r'  r(  r$  r%  r   r\   r
   r  r   r   tobytes_little_endianr!  assert_allcloser#  )r   rf   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 )Nr0  ra   r>   Trc   )r]   rf   r'  r2  tobytesr   r\   r
   r1  rF   r   r   r#  r!  r"  r$  r3  r   r7  packed_valuesr5  r6  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-  rJ   r:  r   ra   r>   Trc   )r]   rf   rg   r&  r'  r<  rJ  r   r\   r
   r;  rF   r   r   r#  r!  r"  r$  r3  )r   r7  f8rL  r5  r6  r   r   r    #test_make_float8e4m3fnuz_tensor_raw.  s   

z=TestHelperTensorFunctions.test_make_float8e4m3fnuz_tensor_rawc                 C  rI  N)r   r-  rJ   r?  r   ra   r>   Trc   )r]   rf   r'  rA  rJ  r   r\   r
   r@  rF   r   r   r#  r!  r"  r$  r3  rK  r   r   r    test_make_float8e5m2_tensor_raw?  rN  z9TestHelperTensorFunctions.test_make_float8e5m2_tensor_rawc                 C  rI  rQ  )r]   rf   r'  rD  rJ  r   r\   r
   rC  rF   r   r   r#  r!  r"  r$  r3  rK  r   r   r    #test_make_float8e5m2fnuz_tensor_rawL  rN  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      ?rD   g @)r   |         rW        ra   )r   r\   r
   
FLOAT8E8M0r]   finforg   maxr   r#  rf   r3  r!  r"  r$  r4  r   r   r    test_make_float8e8m0_tensorY  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   rU  rV  rW  rX     ra   r>   Trc   )g      ?g      ?r   rD   r  i    )r]   rf   r3  rJ  r   r\   r
   rZ  rF   r   r   r#  r'  float8_e8m0fnur!  r"  r$  )r   e8m0_rawrL  r5  r6  r7  r   r   r    test_make_float8e8m0_tensor_rawd  s"   



z9TestHelperTensorFunctions.test_make_float8e8m0_tensor_raw)r$   r   r   r   r   r$   r#   r#   rU   )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   rJ   highsizer5  rD   )r
   UINT4INT4r]   r   randintr   r\   r   mathceilprodr   bytes
int32_datar!  r"  r   r#  	r   rb   rX   
type_rangedatar5  expected_data_sizeactual_data_sizer6  r   r   r    test_make_4bit_tensorw     
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 )Nra   r5  rD   )r]   ro  rf   int8reshaper   r\   r
   rk  r   rm  rn  r   rp  rq  r!  r"  r   rX   	num_elemsrt  r5  ru  rv  r   r   r    test_4bit_tensor_size     
z/TestHelperTensorFunctions.test_4bit_tensor_size)rc  rd  re  rU   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   rh  ri  rb   packed_int4Trd   )r]   r   rl  r3  
_pack_4bitr   r\   rJ  r   r#  r!  r"  r$  r   rb   rX   rt  packed_datar5  r6  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-  rJ   r:  r   ra   packed_fp4e2m1Tr  )r]   rf   r'  float4_e2m1fnr$  r3  r  r   r\   r
   
FLOAT4E2M1r   rJ  r   r#  r!  r"  )r   rt  r7  r  r5  r6  r   r   r    test_make_float4e2m1_raw_tensor  s   
z9TestHelperTensorFunctions.test_make_float4e2m1_raw_tensorc           	      C  rf  )N)r   r#   )r  rJ   r   rJ   rg  r5  r  )r
   UINT2INT2r]   r   rl  r   r\   r   rm  rn  ro  r   rp  rq  r!  r"  r   r#  rr  r   r   r    test_make_2bit_tensor  rx  z/TestHelperTensorFunctions.test_make_2bit_tensorc                 C  ry  )Nr  ra   r5  r  )r]   ro  rf   r{  r|  r   r\   r
   r  r   rm  rn  r   rp  rq  r!  r"  r}  r   r   r    test_2bit_tensor_size  r  z/TestHelperTensorFunctions.test_2bit_tensor_sizec                 C  r  )Nr   r   r  packed_int2Tr  )r]   r   rl  r3  
_pack_2bitr   r\   rJ  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-  rJ   r.  g333333i)r   r-  rJ   r   g      irz  ra   )r   r\   r
   r  r   r#  r]   rf   r'  r  r$  r3  r!  r"  r4  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      @r>   r$   rV   )rJ   r#   r$   r   r   test_indicesr   )
r   r\   r
   r2   rh   rj   r   valuesre   rX   )r   r  rk   re   rl   dense_shape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   )rK   r   r   r   )r   r   r
   r2   r   check_value_infor   vir   r   r    test_make_tensor_value_info     
z5TestHelperTensorFunctions.test_make_tensor_value_infoc                 C  r  )Nr   rK   r#   r   r   )r   make_sparse_tensor_value_infor
   r2   r   r  r  r   r   r    "test_make_sparse_tensor_value_info  r  z<TestHelperTensorFunctions.test_make_sparse_tensor_value_infoc                 C  sl   |  t}tjdtjdg ddd W d    n1 sw   Y  | dt|j | dt|j d S )Nmismatch_testr  r   rD   rN   Frc   zNumber of valuesz does not match tensor dimensions)	r4   r5   r   r\   r
   r2   rw   r=   	exception)r   contextr   r   r    -test_make_tensor_mismatched_dims_raises_error#  s   zGTestHelperTensorFunctions.test_make_tensor_mismatched_dims_raises_errorc                 C  sJ   |  t tjdtjdg ddd W d    d S 1 sw   Y  d S )Ntoo_many_testrK   r  Frc   )r4   r5   r   r\   r
   r2   r;   r   r   r    -test_make_tensor_too_many_values_raises_error/  s   "zGTestHelperTensorFunctions.test_make_tensor_too_many_values_raises_errorc                 C  s:   t jdtjddgdd}| |jg  | |jdg d S )Nscalar_testr   g      E@Frc   )r   r\   r
   r2   r   rX   
float_datar   r  r   r   r    test_make_tensor_scalar_dims9  s   z6TestHelperTensorFunctions.test_make_tensor_scalar_dimsc                 C  s<   t jdtjdg dd}| |jdg | t|jd d S )Nzero_dim_test)r   Frc   r   )r   r\   r
   r2   r   rX   r   r  r  r   r   r    test_make_tensor_zero_dimsD  s   z4TestHelperTensorFunctions.test_make_tensor_zero_dimsc                 C  H   |  t tjdtjddgdd W d    d S 1 sw   Y  d S )Nmismatch_int4r  rJ   Frc   )r4   r5   r   r\   r
   rk  r;   r   r   r    %test_make_tensor_mismatched_dims_int4O     "z?TestHelperTensorFunctions.test_make_tensor_mismatched_dims_int4c                 C  r  )Nmismatch_complexr  y      ?       @Frc   )r4   r5   r   r\   r
   	COMPLEX64r;   r   r   r    (test_make_tensor_mismatched_dims_complexY  r  zBTestHelperTensorFunctions.test_make_tensor_mismatched_dims_complexNr   )*r   r   r   r  r*  r8  r=  rB  rE  rH  rM  rP  rR  rS  r]  rb  parameterizedexpand	itertoolsproductr
   rj  rk  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r    r    s~    















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











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  r>   r  rV   )r   	elem_typer(   )r   r  r  tensor_value)r   r\   r
   r2   make_optionalr   TENSORr   r   r  r  make_sequencer   SEQUENCEsequence_value	UNDEFINEDr   HasField)r   r  rk   optionalvalues_sequenceoptional_noner   r   r    test_make_optionale  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 )NrK   r$   r  r   r>   r   r|   )r   make_tensor_type_protomake_value_infomake_optional_type_protor   r   r   r3   optional_typer  make_sequence_type_protosequence_type)r   tensor_type_prototensor_val_intooptional_type_protooptional_val_infosequence_type_protosequence_value_infor   r   r    test_make_optional_value_info  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 )NrK   r  r>   r  )r   r  r   )r   r  r  r  make_tensor_sequence_value_infor   )r   r  r  sequence_val_infosequence_val_info_primr   r   r    test_make_sequence_value_info  s   
zDTestHelperOptionalAndSequenceFunctions.test_make_sequence_value_infoNr   )r   r   r   r  r  r  r   r   r   r    r  d  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   rJ   r>   r   zI) optional inputs with matching initializers (
  %Y_Initializer[FLOAT, 1]	r   r   r   r
   r2   r   r\   printable_graphr   r   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   rJ   r>   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   r>   rJ   r   zX[FLOAT, ?])r   r   r   r   r
   r2   r\   r   r   r   r  rw   )r   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    s    

r  tensor_dtypec                 C     g | ]	}|t jkr|qS r   r
   r   r   tr   r   r    r         r   )idsr"   r   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  rK   r#   r>   rV   )r   tensor_dtype_to_np_dtyper
   UINT8UINT16UINT32UINT64r   create_random_intr]   r   randnr&  r\   r   r#  rC  r@  r;  r1  r  rZ  rb   rJ  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  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  rK   r#   r>   Trc   )"r   r  r
   r  r  r  r  r   r  r]   r   r  r&  r  rk  rj  r  r  r  r  rF  r\   r   r#  rC  r@  r;  r1  r  rZ  rb   rJ  r!  r"  )r  r  r  r)  np_array_intermediaterY   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
   r2   r   _r   r   r    /test_tensor_dtype_to_np_dtype_not_throw_warningj     zJTestHelperMappingFunctions.test_tensor_dtype_to_np_dtype_not_throw_warningc                 C  r  r   )r   $tensor_dtype_to_storage_tensor_dtyper
   r2   r  r   r   r    ;test_tensor_dtype_to_storage_tensor_dtype_not_throw_warningn  r  zVTestHelperMappingFunctions.test_tensor_dtype_to_storage_tensor_dtype_not_throw_warningc                 C  r  r   )r   tensor_dtype_to_fieldr
   r2   r  r   r   r    ,test_tensor_dtype_to_field_not_throw_warningr  r  zGTestHelperMappingFunctions.test_tensor_dtype_to_field_not_throw_warningc                 C  s   t td}d S )Nrg   )r   np_dtype_to_tensor_dtyper]   rb   r  r   r   r    /test_np_dtype_to_tensor_dtype_not_throw_warningv  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_bfloat16z  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_bfloat16  s   
zMTestHelperMappingFunctions.test_tensor_dtype_to_storage_tensor_dtype_bfloat16c                 C  s   |  ttjd d S )Nrq  )r   r   r
  r
   r  r;   r   r   r    #test_tensor_dtype_to_field_bfloat16  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  g  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 )TestAttrTypeToStrr2   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   )r   r   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'  r  r  )r   r  r   r   r    test_attr_type_to_str_undefined  s   
z1TestAttrTypeToStr.test_attr_type_to_str_undefinedN)r   r   r   r  r  r   AttributeTyper2   r   r   r  r  r  r   r   r   r   r  r  r  r   r  r   r   r   r   r    r    s(    














r  __main__)r  r"   r   r   )r  r"   r  r  r   r   )/
__future__r   r  rm  r   unittesttypingr   r'  numpyr]   r  r  onnxr   r   r   r   r   r	   r
   r   r   r   r   r   onnx.numpy_helperr   r  r   r  TestCaser   r   r  r  r  r  parametrizeget_all_tensor_dtypestensor_dtype_to_stringr  r  r  r  r   mainr   r   r   r    <module>   s\   8      (PF#;$