U
    rh                     @  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)ZarraxisiZslc r   G/tmp/pip-unpacked-wheel-xnis5xre/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indicesZreshaper   tuple).0r
   r	   Zidx_xsection_shaper   r   r   r   r   
<listcomp>"   s   zscatter.<locals>.<listcomp>r	   )r   shaper   listr   ZconcatenateinsertpoprepeatZarangeprodcopyr   )datar   updatesr	   idxZupdates_idxZ	scatteredr   r   r   scatter   s&    
 
 
r%   c                   @  s0   e Zd ZeddddZeddddZdS )ScatterNone)returnc               	   C  s   t jjddddgdgd} tjdtjd}tjd	d
dgd
dd	ggtjd}tjdddgdddggtjd}t|||}t	| |||g|gdt
ddgd d S )Nr&   r"   r   r#   y)inputsoutputs)   r,   Zdtyper   r            ?皙?g333333?       @ @g@Ztest_scatter_without_axis 
   r*   r+   nameZopset_imports)onnxr   	make_noder   zerosfloat32arrayint64r%   r   make_opsetid)noder"   r   r#   r)   r   r   r   export_scatter_without_axis9   s       z#Scatter.export_scatter_without_axisc               	   C  s   d} t jjddddgdg| d}tjdd	d
ddg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&   r"   r   r#   r)   )r*   r+   r	   r/   r1   g      @g      @g      @r-   r,   r0   r2   r   Ztest_scatter_with_axisr3   r4   r5   )
r7   r   r8   r   r;   r:   r<   r%   r   r=   )r	   r>   r"   r   r#   r)   r   r   r   export_scatter_with_axisR   s$    z Scatter.export_scatter_with_axisN)__name__
__module____qualname__staticmethodr?   r@   r   r   r   r   r&   8   s   r&   )r   )
__future__r   Znumpyr   r7   r   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   r%   r&   r   r   r   r   <module>   s   
)