o
    wi                     @  s>   d dl mZ d dlZd dlmZ dddZG dd deZdS )	    )annotationsN)OpRunc                 C  s  |dkr	dd }n|dkrdd }n|dkrdd }ndd }|d	k r(| j | }t| jd
krM|d	krMt| }t||D ]\}}||| |||< q=|S t|jdkrt| }|d	krt|jd	 D ]%}	t|jd
 D ]}
||||	|
f |
f ||	|
f |||	|
f |
f< qmqd|S t|jd	 D ]%}	t|jd
 D ]}
|||	||	|
f f ||	|
f ||	||	|
f f< qq|S t|jdkrt| }|d	krt|jd	 D ]4}	t|jd
 D ]*}
t|jd D ] }||||	|
|f |
|f ||	|
|f |||	|
|f |
|f< qqq|S |d
krQt|jd	 D ]7}	t|jd
 D ],}
t|jd D ]!}|||	||	|
|f |f ||	|
|f ||	||	|
|f |f< q)q q|S |dkrt|jd	 D ]7}	t|jd
 D ],}
t|jd D ]!}|||	|
||	|
|f f ||	|
|f ||	|
||	|
|f f< qoqfq]|S t|jdkrt| }t|jd	 D ]G}t|jd
 D ]<}	t|jd D ]1}
t|jd D ]&}||	|
|g}|||	|
|f ||< t|}||| |||	|
|f ||< qƐqqq|S td|j d| d)zScatter elements.

    ::
        for 3-dim and axis=0
            output[indices[i][j][k]][j][k] = updates[i][j][k]
        for axis 1
            output[i][indices[i][j][k]][k] = updates[i][j][k]
        and so on.
    addc                 S  s   | | S N xyr   r   c/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/reference/ops/op_scatter_elements.pyf   s   zscatter_elements.<locals>.fminc                 S  
   t | |S r   )r   r   r   r   r
   r         
maxc                 S  r   r   )r   r   r   r   r
   r   !   r   c                 S  s   |S r   r   r   r   r   r
   r   &   s   r               z-ScatterND is not implement for indices.shape=z
 and axis=.)	ndimlenshapenpcopyziprangetupleNotImplementedError)dataindicesupdatesaxis	reductionr   	scatteredposupijkaindextuple_indexr   r   r
   scatter_elements   s   









"
"
"

r,   c                   @  s   e Zd ZdddZdS )ScatterElementsNc                 C  s   t |||||d}|fS )N)r!   r"   )r,   )selfr   r   r    r!   r"   resr   r   r
   _runp   s   zScatterElements._run)NN)__name__
__module____qualname__r0   r   r   r   r
   r-   o   s    r-   )r   N)
__future__r   numpyr   onnx.reference.op_runr   r,   r-   r   r   r   r
   <module>   s
   
d