
    bIgX                    V    d dl mZ 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
y)	    )annotationsN)Base)expectc                   |dk  r| j                   |z   }|j                  d | |j                  |dz   d  z   }d }d }d }t        |j                  |         D 	cg c]c  }	 |t        j                  |      j                  |j                   dz
  d            |t         ||||	               j                  dd      d   ge }
}	t        t        j                  |
d            }
|
j                  ||
j                                t        |
      }|j                  |       |j                  |t        j                  t        j                  |j                  |         t        j                  |                   t        j                  |       }|dk(  r|t        |         |t        |
      <   |S  ||
       ||      }}
t        |
      D ]  \  }}|d	k(  r||xx   |||      z  cc<   |d
k(  r||xx   |||      z  cc<   8|dk(  r#t        j                   ||   |||            ||<   `|dk(  sft        j"                  ||   |||            ||<    |S c c}	w )Nr      c                B    t        d       g| j                  z  }|||<   |S N)slicendim)arraxisislcs       h/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/backend/test/case/node/scatterelements.py
make_slicez$scatter_elements.<locals>.make_slice   s$    T{mchh&D	
    c                R    | d   }t        dt        |             D ]	  }|| |   f} |S )Nr   r   )rangelen)packedunpackedr   s      r   unpackz scatter_elements.<locals>.unpack   s8    !9q#f+& 	+A*H	+r   c                    g }t        t        | d               D ]%  |j                  t        fd| D                     ' t	        |      S )Nr   c              3  (   K   | ]	  }|     y wr	    ).0idx_elementr   s     r   	<genexpr>zGscatter_elements.<locals>.make_indices_for_duplicate.<locals>.<genexpr>#   s     <k!n<s   )r   r   appendtuplelist)idx	final_idxr   s     @r   make_indices_for_duplicatez4scatter_elements.<locals>.make_indices_for_duplicate   sL    	s3q6{# 	A<<<	 Ir   )r   noneaddmulmaxmin)r   shaper   npindicesreshaper    r!   concatenateinsertpoprepeatarangeprodcopy	enumeratemaximumminimum)datar-   updatesr   	reductionidx_xsection_shaper   r   r$   r   r"   updates_idx	scatterediteridx_sets                  r   scatter_elementsrA      sc   axyy4 u-dQhj0II
 w}}T*+
  2::0199',,:JBOPE*WdA678@@BGJ	
C  r~~c*
+CJJtSWWY s)KOODbii		'--"56@R8ST IF 'k(: ;	%*& ! 's+&{3  's^ 	MD'E!'"gk$.?&@@"e#'"gk$.?&@@"e#%'ZZg&D0A(B&	'" e#%'ZZg&D0A(B&	'"	 Ms   A(Ic                  x    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	y)	ScatterElementsc                    t         j                  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       y )NrC   r9   r-   r:   y)inputsoutputs)   rI   dtype)r   r      )r   rL   r   )      ?皙?g333333?)       @ @g@"test_scatter_elements_without_axisrG   rH   name)
onnxhelper	make_noder,   zerosfloat32arrayint64rA   r   )noder9   r-   r:   rF   s        r   $export_scatter_elements_without_axisz4ScatterElements.export_scatter_elements_without_axisS   s    {{$$1E % 

 xxbjj1((Iy1B((O_=RZZPT7G4 	'7+C5		
r   c                    d} t         j                  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       y )Nr   rC   rE   rF   rG   rH   r   rM   rO   g      @g      @g      @rJ   rI   rN   rP   test_scatter_elements_with_axisrR   	rT   rU   rV   r,   rY   rX   rZ   rA   r   r   r[   r9   r-   r:   rF   s         r   !export_scatter_elements_with_axisz1ScatterElements.export_scatter_elements_with_axisk   s    {{$$1E	 % 
 xx232::F((QF82884((S#J<rzz:T7GT: 	'7+C2		
r   c                    d} t         j                  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       y )Nr   rC   rE   rF   r^   r_   rJ   rN   rP   +test_scatter_elements_with_negative_indicesrR   ra   rb   s         r   -export_scatter_elements_with_negative_indicesz=ScatterElements.export_scatter_elements_with_negative_indices   s    {{$$1E	 % 
 xx232::F((QG9BHH5((S#J<rzz:T7GT: 	'7+C>		
r   c                    d} t         j                  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       y )Nr   rC   rE   rF   r'   rG   rH   r   r;   r_   rJ   rN   rP   r;   ,test_scatter_elements_with_duplicate_indicesrR   ra   rb   s         r   .export_scatter_elements_with_duplicate_indicesz>ScatterElements.export_scatter_elements_with_duplicate_indices   s    {{$$1E % 
 xx232::F((QF82884((S#J<rzz:T7GTUK 	'7+C?		
r   c                    d} t         j                  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       y )Nr   rC   rE   rF   r)   ri   r_   rJ   rN   rP   rj   (test_scatter_elements_with_reduction_maxrR   ra   rb   s         r   *export_scatter_elements_with_reduction_maxz:ScatterElements.export_scatter_elements_with_reduction_max       {{$$1E % 
 xx232::F((QF82884((S#J<rzz:T7GTUK 	'7+C;		
r   c                    d} t         j                  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       y )Nr   rC   rE   rF   r*   ri   r_   rJ   rN   rP   rj   (test_scatter_elements_with_reduction_minrR   ra   rb   s         r   *export_scatter_elements_with_reduction_minz:ScatterElements.export_scatter_elements_with_reduction_min   rp   r   N)returnNone)
__name__
__module____qualname__staticmethodr\   rc   rg   rl   ro   rs   r   r   r   rC   rC   R   sx    
 
. 
 
. 
 
. 
 
0 
 
0 
 
r   rC   )r   r&   )
__future__r   numpyr,   rT   onnx.backend.test.case.baser   onnx.backend.test.case.noder   rA   rC   r   r   r   <module>r~      s+    #   , .AHR
d R
r   