U
    rh9                     @  s\   d dl mZ d dlmZ d dlZd dlZd dlmZ d dl	m
Z
 dd ZG dd	 d	eZdS )
    )annotations)AnyN)Base)expectc                 C  s8   t |D ]*}|d krg }|| d t|d  g7 }q|S )N   )rangeint)xseq
trip_counti r   D/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/loop.pycompute_loop_outputs   s
    r   c                   @  sB   e Zd ZeddddZeddddZeddddZd	S )
LoopNone)returnc                  C  s  t jdt jjdg} t jdt jjdg}t jdt jjdg}t jdt jjg }t jdt jjg }t jdt jjg }tddd	d
dg	tj
}tdg	tj
}t jjdg dgt jjdt jj|j| 	tdd}t jjdg dgt jjdt jjddgdd}	t jjdddgdgd}
t jjddgdgdgd}t jjddgdgdgd}t jjddddgdgd}t jjdddgdgd}t jjddgdgd}t jjddgdgd}t j|||	|
|||||g	d ||| g|||g}t jjd!d"d#d$gd%d&g|d'}td	tj}td(g	tj
}td	t}td)dd
d*d(g	tj
d+}t||||g||gd,t jd-d.gd/ d S )0Ny_inr   y_outscan_outcond_incond_out
iter_count            Constantr	   const_tensor_xnameZ	data_typeZdimsvalsinputsoutputsvalueoneconst_tensor_oner   Addendr$   r%   	Unsqueezeslice_startr   )r$   r%   axes	slice_endSlice	slice_outIdentity	loop_bodyr   r   condyres_yres_scanr$   r%   body      )r   r   Ztest_loop11    )r$   r%   r!   opset_imports)onnxhelpermake_tensor_value_infoTensorProtoFLOATBOOLINT64nparrayastypefloat32	make_nodemake_tensorshapeflattenfloat
make_graphint64boolZreshaper   make_opsetid)r   r   r   r   r   r   r	   r5   x_const_nodeone_const_nodeZ
i_add_nodeZstart_unsqueeze_nodeend_unsqueeze_node
slice_nodeZ
y_add_nodeidentity_nodeZscan_identity_noder3   noder   r6   r4   r7   r   r   r   export_loop_11   s                            "zLoop.export_loop_11c                    s  t jdt jjd } t jdt jjd }t jdt jjg }t jdt jjg }t jdt jjg }t	dddd	d
g
tj t jjdg dgt jjdt jj j  
tdd}t jjdg dgt jjdt jjddgdd}t jjdg dgt jjdt jjddgdd}t jjdg dgt jjdt jjddgdd}t jjdddgdgd}	t jjdddgdgd}
t jjddddgdgd}t jjd ddgdgd}t jjd!dgdgd}t j|||||	||
||g	d"||| g||g}t jjd#d$d%d&gd'g|d(}t	d

tj}g } fd)d* D }t	d
t}t||||g|gd+t jd,d-gt jt jj|jt jt jj|jt jt jt jjg gd. d S )/Nseq_inseq_outr   r   r   r   r   r   r   r   r   r	   r   r    r#   r'   r(   r   r-   const_tensor_zeror   r   r.   const_tensor_axesr)   r*   r+   r,   r/   r0   r1   SequenceInsertr2   r3   r   r   r4   	seq_emptyseq_resr8   c                   s   g | ]} d t | qS )N)r   ).0r   r	   r   r   
<listcomp>   s     z'Loop.export_loop_13.<locals>.<listcomp>Ztest_loop13_seqr=   r:   r$   r%   r!   r?   Zinput_type_protos)r@   rA   make_tensor_sequence_value_inforC   rD   rB   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   r   rS   make_tensor_type_protomake_sequence_type_proto)r[   r\   r   r   r   rT   rU   zero_const_node	axes_nodeadd_noderV   rW   insert_noderX   r3   rY   r   ra   rb   r4   r   rd   r   export_loop_13   s                        zLoop.export_loop_13c            #      C  s  t jt jjg } t j| }t j|}t jd|}t jdt jjg }t j	dt jj
g }t j	dt jj
g }t j	dt jjg }tdtj}tddd	d
dgtj}	t jjddgdgd}
t jjddgdgd}t jjddgdgd}t jjdg dgt jjdt jjddgdd}t jjddgdgd}t jdt jjg }t j||gdg |g}t jdt jjg }t j|gdg |g}t jjddgdg||d}t jjdg d gt jjd!t jj|	j|	 tdd}t jjdg d"gt jjd#t jjddgdd}t jjdg d$gt jjd%t jjd&dgdd}t jjdg d'gt jjd(t jjddgdd}t jjd)dd"gd*gd}t jjd+d*d'gd,gd}t jjd-d d$d,gd.gd}t jjd/dd.gdgd}t jjd0dgdgd}t j||
||||||||||gd1|||g||g}t jjd2d3d4d5gd6g|d7}tdtj}tdt} t|	|g|}!|g}"t||| |"g|!gd8t jd9d:gt jt jj|jt jt jj
| j|gd; d S )<N
opt_seq_inr\   r   r   r   r   r   r   r   r   r   ZOptionalHasElementZoptional_has_elemr+   ZNotoptional_is_noneZOptionalGetElementr[   r   constant_inZconst_tensorr   r    r#   ZSequenceConstructZinit_seq_in	then_body	else_bodyZIfsequence)r$   r%   Zthen_branchZelse_branchr	   r   r'   r(   r-   r]   r^   r.   r_   r)   r*   r,   r/   r0   r1   r`   r2   r3   r   r   r4   Zopt_seqrb   r8   Ztest_loop16_seq_noner=      rf   )r@   rA   rh   rC   rD   ri   Zmake_optional_type_protoZmake_value_inforg   rB   rE   rF   rG   rH   rI   rJ   rK   rL   rP   rM   rN   rO   rQ   rR   r   r   rS   )#Z	ten_in_tpZ	seq_in_tpZ	opt_in_tpZopt_inr\   r   r   r   Zx0r	   Zoptional_has_elem_noderp   Zoptional_get_elemrq   Zseq_const_inZthen_seq_outrr   Zelse_seq_outrs   Zif_noderT   rU   rj   rk   rl   rV   rW   rm   rX   r3   rY   r   r4   rb   ro   r   r   r   export_loop_16_none  s                    	                       zLoop.export_loop_16_noneN)__name__
__module____qualname__staticmethodrZ   rn   rv   r   r   r   r   r      s   p 	r   )
__future__r   typingr   ZnumpyrG   r@   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   r   r   r   r   r   r   <module>   s   