o
    soiO                     @  sR   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dZ	G dd	 d	eZ
dS )    )annotationsN)Base)expectnonec              	     s   dk r	| j    jd   j d d   dd dd dd } fd	d
tj  D }ttj|dd}| |  t|}|  | tt	j  t
 t| }|dkry|t| |t|< |S ||||}}t|D ]K\}	}
|dkr||
  |||	  7  < q|dkr||
  |||	  9  < q|dkrt||
 |||	  ||
< q|dkrt||
 |||	  ||
< q|S )Nr      c                 S  s   t d g| j }|||< |S N)slicendim)arraxisislc r   _/home/ubuntu/.local/lib/python3.10/site-packages/onnx/backend/test/case/node/scatterelements.py
make_slice   s   z$scatter_elements.<locals>.make_slicec                 S  s,   | d }t dt| D ]}|| | f}q|S )Nr   r   )rangelen)packedunpackedr   r   r   r   unpack   s   z scatter_elements.<locals>.unpackc                   s>   g }t t| d D ] |t fdd| D  q
t|S )Nr   c                 3  s    | ]}|  V  qd S r   r   ).0idx_elementr   r   r   	<genexpr>#   s    zGscatter_elements.<locals>.make_indices_for_duplicate.<locals>.<genexpr>)r   r   appendtuplelist)idx	final_idxr   r   r   make_indices_for_duplicate   s   z4scatter_elements.<locals>.make_indices_for_duplicatec              	     sH   g | ] }t jd  dt | d dd gqS )r   r   )npindicesreshaper	   r   )r   r   r   idx_xsection_shaper"   r   r   r   r   
<listcomp>)   s    z$scatter_elements.<locals>.<listcomp>)r   r   addmulmaxmin)r	   shaper   r   r!   concatenateinsertpoprepeatarangeprodcopyr   	enumeratemaximumminimum)datar"   updatesr   	reductionr   r   updates_idx	scatterediter_idx_setr   r$   r   scatter_elements   sL   
 



r=   c                   @  s`   e Zd ZedddZedddZedddZedd	d
ZedddZedddZ	dS )ScatterElementsreturnNonec                  C  s   t jjdg ddgd} tjdtjd}tjg dg dgtjd}tjg d	g d
gtjd}t|||}t	| |||g|gdd d S )Nr>   r6   r"   r7   y)inputsoutputs)   rE   dtype)r   r      )r   rH   r   )      ?皙?g333333?)       @ @g@"test_scatter_elements_without_axisrC   rD   name)
onnxhelper	make_noder!   zerosfloat32arrayint64r=   r   )noder6   r"   r7   rB   r   r   r   $export_scatter_elements_without_axisS   s   
z4ScatterElements.export_scatter_elements_without_axisc                  C     d} t jjdg ddg| d}tjg dgtjd}tjddggtjd}tjd	d
ggtjd}t|||| }t||||g|gdd d S )Nr   r>   rA   rB   rC   rD   r   rI   rK   g      @g      @g      @rF   rE   rJ   rL   test_scatter_elements_with_axisrN   	rP   rQ   rR   r!   rU   rT   rV   r=   r   r   rW   r6   r"   r7   rB   r   r   r   !export_scatter_elements_with_axisk   "   
z1ScatterElements.export_scatter_elements_with_axisc                  C  rY   )Nr   r>   rA   rB   rZ   r[   rF   rJ   rL   +test_scatter_elements_with_negative_indicesrN   r]   r^   r   r   r   -export_scatter_elements_with_negative_indices   r`   z=ScatterElements.export_scatter_elements_with_negative_indicesc                  C     d} t jjdg ddg| dd}tjg dgtjd}tjddggtjd}tjd	d
ggtjd}t|||| dd}t||||g|gdd d S )Nr   r>   rA   rB   r'   rC   rD   r   r8   r[   rF   rJ   rL   r8   ,test_scatter_elements_with_duplicate_indicesrN   r]   r^   r   r   r   .export_scatter_elements_with_duplicate_indices   $   
z>ScatterElements.export_scatter_elements_with_duplicate_indicesc                  C  rd   )Nr   r>   rA   rB   r)   re   r[   rF   rJ   rL   rf   (test_scatter_elements_with_reduction_maxrN   r]   r^   r   r   r   *export_scatter_elements_with_reduction_max   ri   z:ScatterElements.export_scatter_elements_with_reduction_maxc                  C  rd   )Nr   r>   rA   rB   r*   re   r[   rF   rJ   rL   rf   (test_scatter_elements_with_reduction_minrN   r]   r^   r   r   r   *export_scatter_elements_with_reduction_min   ri   z:ScatterElements.export_scatter_elements_with_reduction_minN)r?   r@   )
__name__
__module____qualname__staticmethodrX   r_   rc   rh   rk   rm   r   r   r   r   r>   R   s    r>   )r   r   )
__future__r   numpyr!   rP   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r=   r>   r   r   r   r   <module>   s   
D