U
    rhE@                     @  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d	Zd
ddddZd'dd
dddddZddd
dddZd(ddddddZdddddZd)d
dddddd d!Zd*dddd
d"d#d$ZG d%d& d&eZdS )+    )annotationsN)TensorProto)Base)expectzlist[np.ndarray | None]returnc                   C  s   g S N r	   r	   r	   I/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/model/sequence.pySequenceEmptyImpl   s    r   z
np.ndarrayzlist[np.ndarray])tensorsr   c                  G  s   t | S r   )list)r   r	   r	   r
   SequenceConstructImpl   s    r   z
int | None)sequencetensorpositionr   c                 C  s    |d krt | }| || | S r   )leninsert)r   r   r   r	   r	   r
   SequenceInsertImpl   s    r   int)r   r   r   c                 C  s   | | S r   r	   r   r   r	   r	   r
   SequenceAtImpl"   s    r   c                 C  s   |d krd}| |= | S )Nr	   r   r	   r	   r
   SequenceEraseImpl&   s    r   znp.int64)r   r   c                 C  s   t t| S r   )npint64r   )r   r	   r	   r
   SequenceLengthImpl/   s    r      zint | list[int] | None)r   splitaxiskeepdimsr   c                   s   | j   d krRdfddtD }|sRt| | } fdd|D S trvfddtD }ntd }t| | S )Nr   c                   s(   g | ] }| d   k r| d  qS r   r	   .0idim_sizer   r	   r
   
<listcomp><   s     z'SplitToSequenceImpl.<locals>.<listcomp>c                   s   g | ]}t | qS r	   )r   Zsqueeze)r#   resr   r	   r
   r'   A   s     c                   s(   g | ] }| d   k r| d  qS r!   r	   r"   r%   r	   r
   r'   C   s     )shaperanger   Zarray_splitZisscalarZcumsum)r   r   r   r    Zsplit_indicesresultsr	   )r   r&   r   r
   SplitToSequenceImpl3   s    

r-   )r   r   new_axisr   c                 C  s   |st | |S t | |S r   )r   Zconcatenatestack)r   r   r.   r	   r	   r
   ConcatFromSequenceImplK   s    r0   c                   @  s   e Zd ZeddddZdS )SequenceNoner   c            $      C  s	  d?dddddddddd	d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dddgdg}t jdddgdg}dddg}dddg}dddg}d ddg}	tj|tjd}
tj|tjd}tj|tjdd }d}d}t }t||
}t||}t|||}t	||}t
||s2tt jdtjd|f}t jdtjd|f}| |||||g|||g g g|	gdddddg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#dddgd$g}t jd%d$d&gd'g}t jdd'dgdg}dddg}tj|tjd}
tj|tjd}tj|tjdd }d}d}t|
||}t||}t	||}t
||stt jd&tjd|f}t jdtjd|f}| |||g|||g g g|gdddd&dg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#dddgd$g}t jd%d$d&gd'g}t jdd'dd)gd*g}t jdd*dgdg}dddg}tj|tjd}
tj|tjd}tj|tjdd }d+}d,}d,}t|
||}t||}t||
|}t	||}t
||sFtt jd&tjd|f}t jd)tjd|f}t jdtjd|f}| ||||g|||g g g g|gdddd&d)dg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#dddgd$g}t jjd.d$gdgdd/}dddg}dd dg}tj|tjd}
tj|tjd}tj|tjdd }t|
||}t|d}| ||g|gd |gdddgdgt jjgd t jjg}t jj|dt jddgd }t||
||g|gd0d" t jd#dddgd$g}t jjd.d$gdgd,dd1}dddg}ddddg}tj|tjd}
tj|tjd}tj|tjdd }t|
||}t|d,d}| ||g|gd |gdddgdgt jjgd t jjg}t jj|dt jddgd }t||
||g|gd2d" t jjd3dgd$gd,d/}t jd4d$gd5g}dddg}g } tj|tjd}
t|
d,d/}t|}t
|tdstt jj||gd6t jdt jj|gt jd5t jj| gd7}t jj|dt jddgd }t||
g|gd8d" t jjd3dgd$gd9d9d:}t jdd$dgdg}dddg}ddg}	tjj| }
d}t|
d9d9d:}t	||}t
||
| s~t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d;d" t jd3dd<gd$g}t jd4d$gd5g}d=g}dg}!tg tj}
td9d9d9gtj}"td}#t jj||gd6t jdt jj|t jd<t jj|!gt jd5t jj| gd7}t jj|dt jddgd }t||
|"g|#gd>d" d S )@Nzlist[onnx.helper.NodeProto]z'list[typing.Sequence[str | int] | None]z	list[str]zlist[TensorProto.DataType]zlist[TensorProto] | Nonezonnx.helper.GraphProto)	nodesinput_shapesoutput_shapesinput_namesoutput_namesinput_typesoutput_typesinitializersr   c           	   	   S  s>   t jj| ddd t|||D dd t|||D |d}|S )Nr1   c                 S  s"   g | ]\}}}t j|||qS r	   onnxhelpermake_tensor_value_info)r#   nameZ
input_typeZinput_shaper	   r	   r
   r'   c   s   z7Sequence.export.<locals>.make_graph.<locals>.<listcomp>c                 S  s"   g | ]\}}}t j|||qS r	   r;   )r#   r?   output_typeZoutput_shaper	   r	   r
   r'   i   s   )r3   r?   inputsoutputsZinitializer)r<   r=   
make_graphzip)	r3   r4   r5   r6   r7   r8   r9   r:   graphr	   r	   r
   rC   V   s(    
    z#Sequence.export.<locals>.make_graphZSequenceEmptyZ	Seq_emptyZSequenceInsertXZSeq_1YZSeq_2ZposZSeq_3Z
SequenceAtpos_atout         r   )Zdtyper	   zbackend-test    )Zproducer_nameZopset_importsZtest_sequence_model1)rA   rB   r?   ZSequenceConstructZseq_1ZSequenceErase	pos_eraseZseq_2Ztest_sequence_model2
pos_insertZseq_3r   Ztest_sequence_model3ZConcatFromSequencer)   Ztest_sequence_model4)r   r.   Ztest_sequence_model5ZSplitToSequenceZSequenceLengthr   r1   )r3   r?   rA   rB   Ztest_sequence_model6r   )r   r    Ztest_sequence_model7ZSplitsnZtest_sequence_model8)N) r<   r=   Z	make_noder   ZonesZfloat32zerosr   r   r   Zarray_equalAssertionErrorZmake_tensorr   ZINT64FLOATZmake_model_gen_versionZmake_opsetidr   r   r   r0   r-   r   r   rC   r>   randomZrandZDOUBLEarrayZastype)$rC   Zseq_empty_nodeZseq_insert_nodeZseq_insert_node2Zseq_insert_node3Zseq_at_nodeZx_shapeZy_shapeZz_shapeZ	out_shapexyzZpos_valZ
pos_at_valrK   rI   rJ   rE   modelZseq_construct_nodeZseq_erase_nodeZtensor_shapeZpos_erase_valrQ   Zpos_insert_valrR   Zseq_concat_nodeZconcat_out_shapeZ
concat_outZseq_split_nodeZseq_len_nodeZ	len_shapeZsplits_shapesplitsZout_lenr	   r	   r
   exportT   s   
  #      






    


   
      


      

     


	         
	      
        


  
    	     zSequence.exportN)__name__
__module____qualname__staticmethodr_   r	   r	   r	   r
   r1   S   s   r1   )N)N)Nr   r   )r   )
__future__r   typingZnumpyr   r<   r   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.modelr   r   r   r   r   r   r   r-   r0   r1   r	   r	   r	   r
   <module>   s*    	 	    