o
    soi9                     @  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 u rg }|| d t|d  g7 }q|S )N   )rangeint)xseq
trip_counti r   T/home/ubuntu/.local/lib/python3.10/site-packages/onnx/backend/test/case/node/loop.pycompute_loop_outputs   s
   r   c                   @  s6   e Zd Zed
ddZed
ddZed
ddZd	S )LoopreturnNonec                  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g d	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g d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g d d!d"g|d#}td$	tj}td%g	tj
}td	t}tg d&	tj
d'}t||||g||gd(t jd)d*gd+ d S ),Ny_inr   y_outscan_outcond_incond_out
iter_countr               Constantr	   const_tensor_xname	data_typedimsvalsinputsoutputsvalueoneconst_tensor_oner   Addendr'   r(   	Unsqueezeslice_startr   )r'   r(   axes	slice_endSlicer	   r0   r2   	slice_outIdentity	loop_bodyr   )r   condyres_yres_scanr'   r(   bodyr      )r   r      r>   )r   r   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boolreshaper   make_opsetid)r   r   r   r   r   r   r	   r9   x_const_nodeone_const_node
i_add_nodestart_unsqueeze_nodeend_unsqueeze_node
slice_node
y_add_nodeidentity_nodescan_identity_noder7   noder   r:   r8   r;   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	g d
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g d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!g d"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   r0   const_tensor_zeror   r   r1   const_tensor_axesr,   r-   r.   r/   r2   r3   r4   r5   SequenceInsertr6   r7   r   )r   r8   	seq_emptyseq_resr<   r   c                   s   g | ]
} d t | qS )N)r   ).0r   r	   r   r   
<listcomp>   s    z'Loop.export_loop_13.<locals>.<listcomp>test_loop13_seqrB   r>   r'   r(   r"   rD   input_type_protos)rE   rF   make_tensor_sequence_value_inforH   rI   rG   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   r   rY   make_tensor_type_protomake_sequence_type_proto)re   rf   r   r   r   rZ   r[   zero_const_node	axes_nodeadd_noder^   r_   insert_nodera   r7   rc   r   rk   rl   r8   r   rn   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g d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*g d+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d0g d1d2g|d3}td4tj}td t} t|	|g|}!|g}"t||| |"g|!gd5t jd6d7gt jt jj|jt jt jj
| j|gd8 d S )9N
opt_seq_inrf   r   r   r   r   r   OptionalHasElementoptional_has_elemr.   Notoptional_is_noneOptionalGetElementre   r   constant_inconst_tensorr   r!   r&   SequenceConstructinit_seq_in	then_body	else_bodyIfsequence)r'   r(   then_branchelse_branchr	   r    r*   r+   r   r0   rg   rh   r1   ri   r,   r-   r/   r2   r3   r4   r5   rj   r6   r7   r   )r   r8   opt_seqrl   r<   r   test_loop16_seq_nonerB      rq   )rE   rF   rt   rH   rI   ru   make_optional_type_protomake_value_infors   rG   rJ   rK   rL   rM   rN   rO   rP   rQ   rU   rR   rS   rT   rV   rW   r   r   rY   )#	ten_in_tp	seq_in_tp	opt_in_tpopt_inrf   r   r   r   x0r	   optional_has_elem_noder   optional_get_elemr   seq_const_inthen_seq_outr   else_seq_outr   if_noderZ   r[   rv   rw   rx   r^   r_   ry   ra   r7   rc   r   r8   rl   r{   r   r   r   export_loop_16_none  s:  






	





zLoop.export_loop_16_noneN)r   r   )__name__
__module____qualname__staticmethodrd   rz   r   r   r   r   r   r      s    p 	r   )
__future__r   typingr   numpyrL   rE   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   r   r   r   r   r   <module>   s   