o
    r::j                     @  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kr$d	d }nd
d }|dk r1| j | }t| jdkrX|dkrXt| }t||ddD ]\}}||| |||< qH|S t|jdkrt| }|dkrt|jd D ]%}	t|jd D ]}
||||	|
f |
f ||	|
f |||	|
f |
f< qxqo|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r\t|jd D ]7}	t|jd D ],}
t|jd D ]!}|||	||	|
|f |f ||	|
|f ||	||	|
|f |f< q4q+q"|S |dkrt|jd D ]7}	t|jd D ],}
t|jd D ]!}|||	|
||	|
|f f ||	|
|f ||	|
||	|
|f f< qzqqqh|S t|jdkr t| }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   m/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/onnx/reference/ops/op_scatter_elements.pyf      zscatter_elements.<locals>.fmulc                 S  s   | | S r   r   r   r   r   r
   r      r   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
   _runu   s   zScatterElements._run)NN)__name__
__module____qualname__r3   r   r   r   r
   r0   t   s    r0   )r   N)
__future__r   numpyr   onnx.reference.op_runr   r/   r0   r   r   r   r
   <module>   s
   
i