o
    q::jF                     @  sn   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l
mZ 	 ddddZG dd de	ZdS )    )annotations)AnyN)helper)Base)expectdata
np.ndarrayindicesupdatesaxisintreturnc              	     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| }|t| |t|< |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   j/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/onnx/backend/test/case/node/scatter.py
make_slice   s   zscatter.<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.<locals>.unpackc              	     sH   g | ] }t jd  dt | d dd gqS )r   r   )npr	   reshaper   tuple).0r   r   idx_xsection_shaper	   r   r   r   r   
<listcomp>&   s    zscatter.<locals>.<listcomp>r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   shaper   listr   concatenateinsertpoprepeatarangeprodcopyr    )r   r	   r
   r   idxupdates_idx	scatteredr   r"   r   scatter   s$   
 



r2   c                   @  s(   e Zd ZedddZedddZdS )	Scatterr   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t
ddgd d S )Nr3   r   r	   r
   y)inputsoutputs)   r9   dtype)r   r      )r   r<   r   )      ?皙?g333333?)       @ @g@test_scatter_without_axis 
   r7   r8   nameopset_imports)onnxr   	make_noder   zerosfloat32arrayint64r2   r   make_opsetid)noder   r	   r
   r6   r   r   r   export_scatter_without_axis=   s    
z#Scatter.export_scatter_without_axisc               	   C  s   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|||| d}t||||g|gdt	ddgd d S )Nr   r3   r5   r6   )r7   r8   r   )r=   r?   g      @g      @g      @r:   r9   r>   r@   r%   test_scatter_with_axisrB   rC   rD   )
rG   r   rH   r   rK   rJ   rL   r2   r   rM   )r   rN   r   r	   r
   r6   r   r   r   export_scatter_with_axisV   s$   
z Scatter.export_scatter_with_axisN)r   r4   )__name__
__module____qualname__staticmethodrO   rQ   r   r   r   r   r3   <   s
    r3   )r   )
r   r   r	   r   r
   r   r   r   r   r   )
__future__r   typingr   numpyr   rG   r   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r2   r3   r   r   r   r   <module>   s   +