o
    toi                     @  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rO|d	krOt| }t||ddD ]\}}||| |||< q?|S t|jdkrt| }|d	krt|jd	 D ]%}	t|jd
 D ]}
||||	|
f |
f ||	|
f |||	|
f |
f< qoqf|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rSt|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< qqqh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   Z/home/ubuntu/.local/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      T)strict         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__r1   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