o
    q::j~!                     @  sx   d dl mZ d dlmZmZ er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dZG dd deZdS )    )annotations)TYPE_CHECKINGAny)SequenceN)Base)expectnonedata
np.ndarrayindicesupdatesaxisint	reductionstrreturnc              	     s   dk r	| j    jd   j d d   d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r||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      arrr
   r   r   ir   list[slice | int]c                 S  s   t d g| j }|||< |S N)slicendim)r   r   r   slc r   r/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/onnx/backend/test/case/node/scatterelements.py
make_slice   s   z$scatter_elements.<locals>.make_slicepackedr   c                 S  s,   | d }t dt| D ]}|| | f}q|S )Nr   r   )rangelen)r   unpackedr   r   r   r   unpack$   s   z scatter_elements.<locals>.unpackidxSequence[Sequence[Any]]list[tuple[Any, ...]]c                   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>0   s    zGscatter_elements.<locals>.make_indices_for_duplicate.<locals>.<genexpr>)r   r   appendtuplelist)r"   	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   )npr   reshaper   r*   )r%   r   r   idx_xsection_shaper   r   r!   r   r   
<listcomp>6   s    z$scatter_elements.<locals>.<listcomp>)r   r   addmulmaxmin)r   r
   r   r   r   r   r   r   )r   r   r   r   )r"   r#   r   r$   )r   shaper   r+   r/   concatenateinsertpoprepeatarangeprodcopyr*   	enumeratemaximumminimum)r	   r   r   r   r   r-   r"   updates_idx	scatterediter_idx_setr   r1   r   scatter_elements   sL   
 





rG   c                   @  sn   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	edddZ
dS )ScatterElementsr   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 )NrH   r	   r   r   y)inputsoutputs)   rN   dtype)r   r      )r   rQ   r   )      ?皙?g333333?)       @ @g@"test_scatter_elements_without_axisrL   rM   name)
onnxhelper	make_noder/   zerosfloat32arrayint64rG   r   )noder	   r   r   rK   r   r   r   $export_scatter_elements_without_axis`   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   rH   rJ   rK   rL   rM   r   rR   rT   g      @g      @g      @rO   rN   rS   rU   test_scatter_elements_with_axisrW   	rY   rZ   r[   r/   r^   r]   r_   rG   r   r   r`   r	   r   r   rK   r   r   r   !export_scatter_elements_with_axisx   "   
z1ScatterElements.export_scatter_elements_with_axisc                  C  rb   )Nr   rH   rJ   rK   rc   rd   rO   rS   rU   +test_scatter_elements_with_negative_indicesrW   rf   rg   r   r   r   -export_scatter_elements_with_negative_indices   ri   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   rH   rJ   rK   r4   rL   rM   r   r   rd   rO   rS   rU   r   ,test_scatter_elements_with_duplicate_indicesrW   rf   rg   r   r   r   .export_scatter_elements_with_duplicate_indices   $   
z>ScatterElements.export_scatter_elements_with_duplicate_indicesc                  C  rm   )Nr   rH   rJ   rK   r5   rn   rd   rO   rS   rU   ro   (test_scatter_elements_with_reduction_mulrW   rf   rg   r   r   r   *export_scatter_elements_with_reduction_mul   rr   z:ScatterElements.export_scatter_elements_with_reduction_mulc                  C  rm   )Nr   rH   rJ   rK   r6   rn   rd   rO   rS   rU   ro   (test_scatter_elements_with_reduction_maxrW   rf   rg   r   r   r   *export_scatter_elements_with_reduction_max   rr   z:ScatterElements.export_scatter_elements_with_reduction_maxc                  C  rm   )Nr   rH   rJ   rK   r7   rn   rd   rO   rS   rU   ro   (test_scatter_elements_with_reduction_minrW   rf   rg   r   r   r   *export_scatter_elements_with_reduction_min   rr   z:ScatterElements.export_scatter_elements_with_reduction_minN)r   rI   )__name__
__module____qualname__staticmethodra   rh   rl   rq   rt   rv   rx   r   r   r   r   rH   _   s    rH   )r   r   )r	   r
   r   r
   r   r
   r   r   r   r   r   r
   )
__future__r   typingr   r   collections.abcr   numpyr/   rY   onnx.backend.test.case.baser   onnx.backend.test.case.noder   rG   rH   r   r   r   r   <module>   s   L