o
    soi>                     @  s   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d)dd	Zd*ddZ	d+d,ddZd-ddZ	d+d.ddZd/ddZ		 	d0d1d"d#Z	 d2d3d%d&ZG d'd( d(eZdS )4    )annotationsN)TensorProto)Base)expectreturnlist[np.ndarray | None]c                   C  s   g S N r	   r	   r	   Y/home/ubuntu/.local/lib/python3.10/site-packages/onnx/backend/test/case/model/sequence.pySequenceEmptyImpl   s   r   tensors
np.ndarraylist[np.ndarray]c                  G  s   t | S r   )list)r   r	   r	   r
   SequenceConstructImpl      r   sequencetensorposition
int | Nonec                 C  s    |d u rt | }| || | S r   )leninsert)r   r   r   r	   r	   r
   SequenceInsertImpl   s   r   intc                 C  s   | | S r   r	   r   r   r	   r	   r
   SequenceAtImpl"   r   r   c                 C  s   |d u rd}| |= | S )Nr	   r   r	   r	   r
   SequenceEraseImpl&   s   r   np.int64c                 C  s   t t| S r   )npint64r   )r   r	   r	   r
   SequenceLengthImpl/   s   r!      splitint | list[int] | Noneaxiskeepdimsc                   s   | j   d u r)dfddtD }|s)t| | } fdd|D S tr;fddtD }ntd }t| | S )Nr"   c                   (   g | ]}| d   k r| d  qS r"   r	   .0idim_sizer#   r	   r
   
<listcomp><       "z'SplitToSequenceImpl.<locals>.<listcomp>c                   s   g | ]}t | qS r	   )r   squeeze)r*   resr%   r	   r
   r.   A   s    c                   r'   r(   r	   r)   r,   r	   r
   r.   C   r/   )shaperanger   array_splitisscalarcumsum)r   r#   r%   r&   split_indicesresultsr	   )r%   r-   r#   r
   SplitToSequenceImpl3   s   

r:   new_axisc                 C  s   |st | |S t | |S r   )r   concatenatestack)r   r%   r;   r	   r	   r
   ConcatFromSequenceImplK   s   r>   c                   @  s   e Zd ZedddZdS )Sequencer   Nonec            $      C  s	  	 dSdTdd} t jdg dg}t jdddgdg}t jdddgdg}t jdg ddg}t jdddgdg}g d}g d}g d }g d!}	tj|tjd"}
tj|tjd"}tj|tjd"d# }d$}d#}t }t||
}t||}t|||}t	||}t
||sJ t jd%tjd&|f}t jdtjd&|f}| |||||g|||g g g|	gg d'dgt jjgd( t jjgd#  t jjg||g}t jj|d)t jd*d+gd,}t||
||g|gd-d. t jd/g d0d1g}t jd2d1d3gd4g}t jdd4dgdg}g d}tj|tjd"}
tj|tjd"}tj|tjd"d# }d$}d$}t|
||}t||}t	||}t
||sAJ t jd3tjd&|f}t jdtjd&|f}| |||g|||g g g|gg d5dgt jjgd( t jjgd#  t jjg||g}t jj|d)t jd*d+gd,}t||
||g|gd6d. t jd/g d0d1g}t jd2d1d3gd4g}t jdg d7d8g}t jdd8dgdg}g d}tj|tjd"}
tj|tjd"}tj|tjd"d# }d9}d:}d:}t|
||}t||}t||
|}t	||}t
||s	J t jd3tjd&|f}t jd;tjd&|f}t jdtjd&|f}| ||||g|||g g g g|gg d<dgt jjgd( t jjgd(  t jjg|||g}t jj|d)t jd*d+gd,}t||
||g|gd=d. t jd/g d0d1g}t jjd>d1gdgd$d?}g d}g d@}tj|tjd"}
tj|tjd"}tj|tjd"d# }t|
||}t|d$}| ||g|gd( |gg d0dgt jjgd( t jjg}t jj|d)t jd*d+gd,}t||
||g|gdAd. t jd/g d0d1g}t jjd>d1gdgd:d$dB}g d}g dC}tj|tjd"}
tj|tjd"}tj|tjd"d# }t|
||}t|d:d$}| ||g|gd( |gg d0dgt jjgd( t jjg}t jj|d)t jd*d+gd,}t||
||g|gdDd. t jjdEdgd1gd:d?}t jdFd1gdGg}g d}g } tj|tjd"}
t|
d:d?}t|}t
|tdHsJ t jj||gdIt jdt jj|gt jdGt jj| gdJ}t jj|d)t jd*d+gd,}t||
g|gdKd. t jjdEdgd1gdLdLdM}t jdd1dgdg}g d}d(dHg}	tjj| }
d$}t|
dLdLdM}t	||}t
||
| sJ t jdtjd&|f}| ||g|g g|	gddgdgt jjt jjgt jjg|g}t jj|d)t jd*d+gd,}t||
g|gdNd. t jdEddOgd1g}t jdFd1gdGg}dPg}d(g}!tg tj}
tg dQtj}"td(}#t jj||gdIt jdt jj|t jdOt jj|!gt jdGt jj| gdJ}t jj|d)t jd*d+gd,}t||
|"g|#gdRd. d S )UNnodeslist[onnx.helper.NodeProto]input_shapes'list[typing.Sequence[str | int] | None]output_shapesinput_names	list[str]output_namesinput_typeslist[TensorProto.DataType]output_typesinitializerslist[TensorProto] | Noner   onnx.helper.GraphProtoc                 S  sB   t jj| ddd t|||ddD dd t|||ddD |dS )Nr?   c                 S  "   g | ]\}}}t j|||qS r	   onnxhelpermake_tensor_value_info)r*   name
input_typeinput_shaper	   r	   r
   r.   c       z7Sequence.export.<locals>.make_graph.<locals>.<listcomp>F)strictc                 S  rO   r	   rP   )r*   rT   output_typeoutput_shaper	   r	   r
   r.   i   rW   )rA   rT   inputsoutputsinitializer)rQ   rR   
make_graphzip)rA   rC   rE   rF   rH   rI   rK   rL   r	   r	   r
   r^   V   s   
z#Sequence.export.<locals>.make_graphSequenceEmpty	Seq_emptySequenceInsertXSeq_1YSeq_2)rf   ZposSeq_3
SequenceAtpos_atout)         )r"   rn   ro   )rn   rn   ro   )Nrn   ro   )dtyperm   r"   rh   r	   )rc   re   rg   rh   rk   rn   zbackend-test    )producer_nameopset_importstest_sequence_model1)r[   r\   rT   SequenceConstruct)rc   re   rg   seq_1SequenceErase	pos_eraseseq_2)rc   re   rg   ry   rk   test_sequence_model2)rz   rc   
pos_insertseq_3r   r|   )rc   re   rg   ry   r|   rk   test_sequence_model3ConcatFromSequencer2   )rm   Nro   test_sequence_model4)r%   r;   )rm   rn   ro   rn   test_sequence_model5SplitToSequenceSequenceLengthr   ro   r?   )rA   rT   r[   r\   test_sequence_model6r   )r%   r&   test_sequence_model7Splitsn)r   r   r   test_sequence_model8r   )rA   rB   rC   rD   rE   rD   rF   rG   rH   rG   rI   rJ   rK   rJ   rL   rM   r   rN   )rQ   rR   	make_noder   onesfloat32zerosr   r   r   array_equalmake_tensorr   INT64FLOATmake_model_gen_versionmake_opsetidr   r   r   r>   r:   r!   r    r^   rS   randomrandDOUBLEarrayastype)$r^   seq_empty_nodeseq_insert_nodeseq_insert_node2seq_insert_node3seq_at_nodex_shapey_shapez_shape	out_shapexyzpos_val
pos_at_valrl   rh   rk   graphmodelseq_construct_nodeseq_erase_nodetensor_shapepos_erase_valry   pos_insert_valr|   seq_concat_nodeconcat_out_shape
concat_outseq_split_nodeseq_len_node	len_shapesplits_shapesplitsout_lenr	   r	   r
   exportT   s2  
"










		






	

zSequence.exportN)r   r@   )__name__
__module____qualname__staticmethodr   r	   r	   r	   r
   r?   S   s    r?   )r   r   )r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )Nr   r"   )
r   r   r#   r$   r%   r   r&   r   r   r   )r   )r   r   r%   r   r;   r   r   r   )
__future__r   typingnumpyr   rQ   r   onnx.backend.test.case.baser   onnx.backend.test.case.modelr   r   r   r   r   r   r!   r:   r>   r?   r	   r	   r	   r
   <module>   s,   


	
	