
    
Ng                     >    d dl Zd dlmZ ddZ G d de          ZdS )    N)OpRunc                 v   |dk    rd }n|dk    rd }n|dk    rd }nd }dk     r
| j         z   t          | j                  d	k    rGdk    rAt          j        |           }t          |          D ]\  }} |||         |          ||<   |S t          j                  d
k    rt          j        |           }dk    rlt          j        d                   D ]P}	t          j        d	                   D ]3}
 |||	|
f         |
f         ||	|
f                   ||	|
f         |
f<   4Qnkt          j        d                   D ]P}	t          j        d	                   D ]3}
 |||	|	|
f         f         ||	|
f                   ||	|	|
f         f<   4Q|S t          j                  dk    rt          j        |           }dk    rt          j        d                   D ]r}	t          j        d	                   D ]U}
t          j        d
                   D ]8} |||	|
|f         |
|f         ||	|
|f                   ||	|
|f         |
|f<   9Vsn'd	k    rt          j        d                   D ]r}	t          j        d	                   D ]U}
t          j        d
                   D ]8} |||	|	|
|f         |f         ||	|
|f                   ||	|	|
|f         |f<   9Vsnd
k    rt          j        d                   D ]r}	t          j        d	                   D ]U}
t          j        d
                   D ]8} |||	|
|	|
|f         f         ||	|
|f                   ||	|
|	|
|f         f<   9Vs|S j        d         j        d	z   d         z   d d fdt          j                           D             }t          t          j        |d	                    }|	                    |
                                           t          |          }|
                               |	                    t          j        t          j        j                           t          j                                       t          j        |           }|dk    rLt          j        |t          |                   |t          |                             |t          |          <   n|dk    rLt          j        |t          |                   |t          |                             |t          |          <   n\|dk    r1|t          |          xx         |t          |                   z  cc<   n%|t          |                   |t          |          <   |S )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                     | |z   S N xys     b/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/reference/ops/op_scatter_elements.pyfzscatter_elements.<locals>.f   s    q5L    minc                 "    t          | |          S r   )r   r	   s     r   r   zscatter_elements.<locals>.f       q!99r   maxc                 "    t          | |          S r   )r   r	   s     r   r   zscatter_elements.<locals>.f!   r   r   c                     |S r   r   r	   s     r   r   zscatter_elements.<locals>.f&   s    Hr   r            Nc                 @    t          d           g| j        z  }|||<   |S r   )slicendim)arraxisislcs       r   
make_slicez$scatter_elements.<locals>.make_slice]   s$    T{{mch&D	
r   c                 j    | d         }t          dt          |                     D ]}|| |         f}|S )Nr   r   )rangelen)packedunpackedr   s      r   unpackz scatter_elements.<locals>.unpackb   s?    !9q#f++&& 	+ 	+A*HHr   c                     g | ]u} t          j                                      j        d z
  d                    t	           |                                                 d d          d         gvS )r   r   )npindicesreshaper   tuple).0r   r   idx_xsection_shaper)   r   r%   s     r   
<listcomp>z$scatter_elements.<locals>.<listcomp>k   s       
  F2:01199',:JBOOPPE**WdA66778@@BGGJ	
  r   )r   )r   r"   shaper(   copyzipr!   listconcatenateinsertpoprepeatarangeprodminimumr+   maximum)datar)   updatesr   	reductionr   	scatteredposupr   jkidxupdates_idxr-   r   r%   s    ` `          @@@r   scatter_elementsrE      s    E	 	 	 	 
e			 	 	 	 
e			 	 	 	
	 	 	 axxy4
4:!		GDMM	7G,, 	3 	3GCQy~r22IcNN
7=QGDMM	1997=+,,  w}Q/00  A23!!'!Q$-"23WQT]3 3IgadmQ.// 7=+,,  w}Q/00  A23!!!WQT]"23WQT]3 3IaA.// 
7=QGDMM	1997=+,,  w}Q/00  A"7=#344  <=A%gaAg&61&<=wq!Qw?O= =	'!Q'"2Aq"899 QYY7=+,,  w}Q/00  A"7=#344  <=A%aAq)91&<=wq!Qw?O= =	!WQ1W%5q"899 QYY7=+,,  w}Q/00  A"7=#344  <=A%aGAq!G,<&<=wq!Qw?O= =	!Q1a(8"899
  uu-dQhjj0II  
         
 w}T*++  C r~c***
+
+CJJtSWWYY s))KOOD
	")GM$/00"':L2M2MNN  
 IE "
eCjj!75+=+=#>!
 !
	%** 
e		 "
eCjj!75+=+=#>!
 !
	%** 
e		%**{););!<< 'k(:(: ;	%**r   c                       e Zd ZddZdS )ScatterElementsNc                 0    t          |||||          }|fS )N)r   r=   )rE   )selfr;   r)   r<   r   r=   ress          r   _runzScatterElements._run   s!    tWgDIVVVvr   )NN)__name__
__module____qualname__rK   r   r   r   rG   rG      s(             r   rG   )r   N)numpyr(   onnx.reference.op_runr   rE   rG   r   r   r   <module>rQ      sr        ' ' ' ' ' '@ @ @ @F    e     r   