
    Ng                     R    d dl Zd dlZd dlmZ d dlmZ ddZ G d de          ZdS )	    N)Base)expectnonec           	         dk     r
| j         z   j        d          j        dz   d          z   d d d }fdt          j                           D             }t          t	          j        |d                    }|                    |                                           t          |          }|                               |                    t	          j        t	          j	        j                           t	          j
                                       t	          j        |           }|dk    r&|t          |                   |t          |          <   n ||           ||          }}t          |          D ]\  }	}
|d	k    r||
xx         |||	                  z  cc<   (|d
k    r||
xx         |||	                  z  cc<   K|dk    r+t	          j        ||
         |||	                            ||
<   ||dk    r*t	          j        ||
         |||	                            ||
<   |S )Nr      c                 @    t          d           g| j        z  }|||<   |S N)slicendim)arraxisislcs       g/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/backend/test/case/node/scatterelements.py
make_slicez$scatter_elements.<locals>.make_slice   s$    T{{mch&D	
    c                 j    | d         }t          dt          |                     D ]}|| |         f}|S )Nr   r   )rangelen)packedunpackedr   s      r   unpackz scatter_elements.<locals>.unpack   s?    !9q#f++&& 	+ 	+A*HHr   c                     g }t          t          | d                             D ]0|                    t          fd| D                                  1t	          |          S )Nr   c              3   (   K   | ]}|         V  d S r	    ).0idx_elementr   s     r   	<genexpr>zGscatter_elements.<locals>.make_indices_for_duplicate.<locals>.<genexpr>!   s'      "I"Ik;q>"I"I"I"I"I"Ir   )r   r   appendtuplelist)idx	final_idxr   s     @r   make_indices_for_duplicatez4scatter_elements.<locals>.make_indices_for_duplicate   sk    	s3q6{{## 	K 	KAU"I"I"I"IS"I"I"IIIJJJJIr   c                     g | ]u} t          j                                      j        d z
  d                    t	           |                                                 d d          d         gvS )r   r   )npindicesreshaper   r    )r   r   r   idx_xsection_shaper(   r   r   s     r   
<listcomp>z$scatter_elements.<locals>.<listcomp>&   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   addmulmaxmin)r   shaper   r!   r'   concatenateinsertpoprepeatarangeprodcopyr    	enumeratemaximumminimum)datar(   updatesr   	reductionr$   r"   updates_idx	scatterediteridx_setr*   r   r   s    ` `       @@@r   scatter_elementsrB      s   axxy4 uu-dQhjj0II  
           
 w}T*++  C r~c***
+
+CJJtSWWYY s))KOODbi	'-"566@R8S8STT   IF 'k(:(: ;	%**55c::<V<V=
 =
[ 's^^ 	 	MD'E!!'"""gk$.?&@@""""e##'"""gk$.?&@@""""e##%'Zg&D0A(B& &	'"" e##%'Zg&D0A(B& &	'" r   c                       e Zd Zed	d            Zed	d            Zed	d            Zed	d            Zed	d            Zed	d            Z	dS )
ScatterElementsreturnNc                  x   t           j                            dg ddg          } t          j        dt          j                  }t          j        g dg dgt          j                  }t          j        g d	g d
gt          j                  }t          |||          }t          | |||g|gd           d S )NrD   r;   r(   r<   y)inputsoutputs)   rK   dtype)r   r      )r   rN   r   )      ?皙?g333333?)       @ @g@"test_scatter_elements_without_axisrI   rJ   name)
onnxhelper	make_noder'   zerosfloat32arrayint64rB   r   )noder;   r(   r<   rH   s        r   $export_scatter_elements_without_axisz4ScatterElements.export_scatter_elements_without_axisO   s    {$$111E % 
 

 xbj111(IIIyyy1BBB(OOO___=RZPPPT7G44 	'7+C5		
 	
 	
 	
 	
 	
r   c                  z   d} t           j                            dg ddg|           }t          j        g dgt          j                  }t          j        ddggt          j                  }t          j        d	d
ggt          j                  }t          ||||           }t          ||||g|gd           d S )Nr   rD   rG   rH   rI   rJ   r   rO   rQ   g      @g      @g      @rL   rK   rP   rR   test_scatter_elements_with_axisrT   	rV   rW   rX   r'   r[   rZ   r\   rB   r   r   r]   r;   r(   r<   rH   s         r   !export_scatter_elements_with_axisz1ScatterElements.export_scatter_elements_with_axisg   s    {$$111E	 % 
 
 x22232:FFF(QF828444(S#J<rz:::T7GT:: 	'7+C2		
 	
 	
 	
 	
 	
r   c                  z   d} t           j                            dg ddg|           }t          j        g dgt          j                  }t          j        ddggt          j                  }t          j        d	d
ggt          j                  }t          ||||           }t          ||||g|gd           d S )Nr   rD   rG   rH   r`   ra   rL   rP   rR   +test_scatter_elements_with_negative_indicesrT   rc   rd   s         r   -export_scatter_elements_with_negative_indicesz=ScatterElements.export_scatter_elements_with_negative_indices   s    {$$111E	 % 
 
 x22232:FFF(QG9BH555(S#J<rz:::T7GT:: 	'7+C>		
 	
 	
 	
 	
 	
r   c                     d} t           j                            dg ddg| d          }t          j        g dgt          j                  }t          j        ddggt          j                  }t          j        d	d
ggt          j                  }t          |||| d          }t          ||||g|gd           d S )Nr   rD   rG   rH   r,   rI   rJ   r   r=   ra   rL   rP   rR   r=   ,test_scatter_elements_with_duplicate_indicesrT   rc   rd   s         r   .export_scatter_elements_with_duplicate_indicesz>ScatterElements.export_scatter_elements_with_duplicate_indices   s    {$$111E % 
 
 x22232:FFF(QF828444(S#J<rz:::T7GTUKKK 	'7+C?		
 	
 	
 	
 	
 	
r   c                     d} t           j                            dg ddg| d          }t          j        g dgt          j                  }t          j        ddggt          j                  }t          j        d	d
ggt          j                  }t          |||| d          }t          ||||g|gd           d S )Nr   rD   rG   rH   r.   rk   ra   rL   rP   rR   rl   (test_scatter_elements_with_reduction_maxrT   rc   rd   s         r   *export_scatter_elements_with_reduction_maxz:ScatterElements.export_scatter_elements_with_reduction_max       {$$111E % 
 
 x22232:FFF(QF828444(S#J<rz:::T7GTUKKK 	'7+C;		
 	
 	
 	
 	
 	
r   c                     d} t           j                            dg ddg| d          }t          j        g dgt          j                  }t          j        ddggt          j                  }t          j        d	d
ggt          j                  }t          |||| d          }t          ||||g|gd           d S )Nr   rD   rG   rH   r/   rk   ra   rL   rP   rR   rl   (test_scatter_elements_with_reduction_minrT   rc   rd   s         r   *export_scatter_elements_with_reduction_minz:ScatterElements.export_scatter_elements_with_reduction_min   rr   r   )rE   N)
__name__
__module____qualname__staticmethodr^   re   ri   rn   rq   ru   r   r   r   rD   rD   N   s        
 
 
 \
. 
 
 
 \
. 
 
 
 \
. 
 
 
 \
0 
 
 
 \
0 
 
 
 \
 
 
r   rD   )r   r   )	numpyr'   rV   onnx.backend.test.case.baser   onnx.backend.test.case.noder   rB   rD   r   r   r   <module>r}      s   
      , , , , , , . . . . . .> > > >BR
 R
 R
 R
 R
d R
 R
 R
 R
 R
r   