o
    soi                     @  s^   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Z
G dd	 d	eZdS )    )annotationsN)helper)Base)expectc              	     s    dk r	| j    jd   j 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      c                 S  s   t d g| j }|||< |S )N)slicendim)arraxisislc r   W/home/ubuntu/.local/lib/python3.10/site-packages/onnx/backend/test/case/node/scatter.py
make_slice   s   zscatter.<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.<locals>.unpackc              	     sH   g | ] }t jd  dt | d dd gqS )r   r   )npindicesreshaper   tuple).0r   r
   idx_xsection_shaper   r   r   r   r   
<listcomp>"   s    zscatter.<locals>.<listcomp>r
   )r   shaper   listr   concatenateinsertpoprepeatarangeprodcopyr   )datar   updatesr
   idxupdates_idx	scatteredr   r   r   scatter   s$   
 

r-   c                   @  s(   e Zd ZedddZedddZdS )	Scatter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t
ddgd d S )Nr.   r(   r   r)   y)inputsoutputs)   r5   dtype)r   r      )r   r8   r   )      ?皙?g333333?)       @ @g@test_scatter_without_axis 
   r3   r4   nameopset_imports)onnxr   	make_noder   zerosfloat32arrayint64r-   r   make_opsetid)noder(   r   r)   r2   r   r   r   export_scatter_without_axis9   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   r.   r1   r2   )r3   r4   r
   )r9   r;   g      @g      @g      @r6   r5   r:   r<   r   test_scatter_with_axisr>   r?   r@   )
rC   r   rD   r   rG   rF   rH   r-   r   rI   )r
   rJ   r(   r   r)   r2   r   r   r   export_scatter_with_axisR   s$   
z Scatter.export_scatter_with_axisN)r/   r0   )__name__
__module____qualname__staticmethodrK   rM   r   r   r   r   r.   8   s
    r.   )r   )
__future__r   numpyr   rC   r   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r-   r.   r   r   r   r   <module>   s   
)