§
    1�Åjˆ"  ã                  ó„   — d dl mZ d dlmZmZ er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d„Z G d„ de¦  «        ZdS )é    )Úannotations)ÚTYPE_CHECKINGÚAny)ÚSequenceN)ÚBase)ÚexpectÚnoneÚdataú
np.ndarrayÚindicesÚupdatesÚaxisÚintÚ	reductionÚstrÚreturnc           	     ó’  ‡‡‡‡‡— ‰dk     r
| j         ‰z   Š‰j        d ‰…         ‰j        ‰dz   d …         z   Šdd
„Šd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   é   Úarrr   r   r   Úir   úlist[slice | int]c                ó@   — t          d ¦  «        g| j        z  }|||<   |S ©N)ÚsliceÚndim)r   r   r   Úslcs       ú\C:\Projects\Historical\venv\Lib\site-packages\onnx/backend/test/case/node/scatterelements.pyÚ
make_slicez$scatter_elements.<locals>.make_slice   s$   € Ý"'¨¡+¤+ °´Ñ!9ˆØˆˆD‰	Øˆ
ó    Úpackedr   c                ój   — | d         }t          dt          | ¦  «        ¦  «        D ]}|| |         f}Œ|S )Nr   r   )ÚrangeÚlen)r    Úunpackedr   s      r   Úunpackz scatter_elements.<locals>.unpack$   s?   € Ø˜!”9ˆÝ�q�#˜f™+œ+Ñ&Ô&ð 	+ð 	+ˆAØ ¨¤Ð*ˆHˆHØˆr   ÚidxúSequence[Sequence[Any]]úlist[tuple[Any, ...]]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>0   s'   øè è € Ð<Ð<¨�k !”nÐ<Ð<Ð<Ð<Ð<Ð<r   )r"   r#   ÚappendÚtupleÚlist)r&   Ú	final_idxr   s     @r   Úmake_indices_for_duplicatez4scatter_elements.<locals>.make_indices_for_duplicate*   sv   ø€ ð ˆ	Ý•s˜3˜qœ6‘{”{Ñ#Ô#ð 	ð 	ˆAØ×ÒÝÐ<Ð<Ð<Ð<¸Ð<Ñ<Ô<Ñ<Ô<ñô ð ð õ �I‰ŒÐr   c                óö   •— g | ]u} ‰t          j        ‰¦  «                             ‰j        d z
  d¦  «        ¦  «        ‰t	           ‰‰‰|¦  «        ¦  «                                      d d¦  «        d         g‘ŒvS )r   éÿÿÿÿr   )Únpr   Úreshaper   r0   )r,   r   r   Úidx_xsection_shaper   r   r%   s     €€€€€r   ú
<listcomp>z$scatter_elements.<locals>.<listcomp>6   s�   ø€ ð ð ð ð
 ð ˆF•2”:Ð0Ñ1Ô1×9Ò9¸'¼,ÈÑ:JÈBÑOÔOÑPÔPØ•E˜*˜* W¨d°AÑ6Ô6Ñ7Ô7Ô8×@Ò@ÀÀBÑGÔGÈÔJð	
ðð ð r   )r   r	   ÚaddÚmulÚmaxÚmin)r   r   r   r   r   r   r   r   )r    r   r   r   )r&   r'   r   r(   )r   Úshaper"   r1   r6   ÚconcatenateÚinsertÚpopÚrepeatÚarangeÚprodÚcopyr0   Ú	enumerateÚmaximumÚminimum)r
   r   r   r   r   r3   r&   Úupdates_idxÚ	scatteredÚiter_Úidx_setr8   r   r%   s    ` `       @@@r   Úscatter_elementsrM      sÄ  øøøøø€ ð ˆa‚x€xØŒy˜4Ñˆà œ u¨ uÔ-°´¸dÀQ¹h¸j¸jÔ0IÑIÐðð ð ð ð
ð ð ð ðð ð ð ðð ð ð ð ð ð ð õ
 �w”} TÔ*Ñ+Ô+ðñ ô €Cõ �rŒ~˜c¨Ð*Ñ*Ô*Ñ
+Ô
+€CØ‡J‚Jˆt�S—W’W‘Y”YÑÔÐõ �s‘)”)€KØ‡O‚O�DÑÔÐØ×ÒØ�bŒi�œ	 '¤-°Ô"5Ñ6Ô6½¼Ð@RÑ8SÔ8SÑTÔTñô ð õ ”˜‘”€IØ�FÒÐØ '­¨kÑ(:Ô(:Ô ;ˆ	•%˜‘*”*ÑÐð 'Ð& sÑ+Ô+Ø&Ð& {Ñ3Ô3ð ˆõ (¨™nœnð 	ð 	‰NˆE�7Ø˜EÒ!Ð!Ø˜'Ð"Ð"Ô" g¨k¸%Ô.@Ô&AÑAÐ"Ð"Ñ"Ð"Ø˜eÒ#Ð#Ø˜'Ð"Ð"Ô" g¨k¸%Ô.@Ô&AÑAÐ"Ð"Ñ"Ð"Ø˜eÒ#Ð#Ý%'¤ZØ˜gÔ&¨°¸EÔ0BÔ(Cñ&ô &�	˜'Ñ"Ð"ð ˜eÒ#Ð#Ý%'¤ZØ˜gÔ&¨°¸EÔ0BÔ(Cñ&ô &�	˜'Ñ"øð Ð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	edd	„¦   «         Z
d
S )ÚScatterElementsr   ÚNonec                 ó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 )NrO   ©r
   r   r   Úy)ÚinputsÚoutputs)é   rV   ©Údtype)r   r   é   )r   rY   r   )ç      ð?çš™™™™™ñ?g333333ó?)ç       @çÍÌÌÌÌÌ @gš™™™™™@Ú"test_scatter_elements_without_axis©rT   rU   Úname)
ÚonnxÚhelperÚ	make_noder6   ÚzerosÚfloat32ÚarrayÚint64rM   r   )Únoder
   r   r   rS   s        r   Ú$export_scatter_elements_without_axisz4ScatterElements.export_scatter_elements_without_axis`   sÖ   € åŒ{×$Ò$ØØ1Ð1Ð1Ø�Eð %ñ 
ô 
ˆõ
 Œx˜¥b¤jÐ1Ñ1Ô1ˆÝ”(˜I˜I˜I y y yÐ1½¼ÐBÑBÔBˆÝ”(˜O˜O˜O¨_¨_¨_Ð=ÅRÄZÐPÑPÔPˆå˜T 7¨GÑ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   rO   rR   rS   ©rT   rU   r   ©rZ   r\   g      @g      @g      @rW   rV   r[   r]   Útest_scatter_elements_with_axisr_   ©	ra   rb   rc   r6   rf   re   rg   rM   r   ©r   rh   r
   r   r   rS   s         r   Ú!export_scatter_elements_with_axisz1ScatterElements.export_scatter_elements_with_axisx   sÜ   € àˆÝŒ{×$Ò$ØØ1Ð1Ð1Ø�EØð	 %ñ 
ô 
ˆõ ŒxÐ2Ð2Ð2Ð3½2¼:ÐFÑFÔFˆÝ”(˜Q ˜F˜8­2¬8Ð4Ñ4Ô4ˆÝ”(˜S #˜J˜<­r¬zÐ:Ñ:Ô:ˆå˜T 7¨G°TÑ:Ô:ˆõ 	ØØ˜' 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   rO   rR   rS   rk   rl   rW   éýÿÿÿr[   r]   Ú+test_scatter_elements_with_negative_indicesr_   rn   ro   s         r   Ú-export_scatter_elements_with_negative_indicesz=ScatterElements.export_scatter_elements_with_negative_indices�   sÜ   € àˆÝŒ{×$Ò$ØØ1Ð1Ð1Ø�EØð	 %ñ 
ô 
ˆõ ŒxÐ2Ð2Ð2Ð3½2¼:ÐFÑFÔFˆÝ”(˜Q ˜G˜9­B¬HÐ5Ñ5Ô5ˆÝ”(˜S #˜J˜<­r¬zÐ:Ñ:Ô:ˆå˜T 7¨G°TÑ:Ô:ˆõ 	ØØ˜' 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   rO   rR   rS   r:   ©rT   rU   r   r   rl   rW   r[   r]   ©r   Ú,test_scatter_elements_with_duplicate_indicesr_   rn   ro   s         r   Ú.export_scatter_elements_with_duplicate_indicesz>ScatterElements.export_scatter_elements_with_duplicate_indices¨   sä   € àˆÝŒ{×$Ò$ØØ1Ð1Ð1Ø�EØØð %ñ 
ô 
ˆõ ŒxÐ2Ð2Ð2Ð3½2¼:ÐFÑFÔFˆÝ”(˜Q ˜F˜8­2¬8Ð4Ñ4Ô4ˆÝ”(˜S #˜J˜<­r¬zÐ:Ñ:Ô:ˆå˜T 7¨G°TÀUÐ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   rO   rR   rS   r;   rv   rl   rW   r[   r]   rw   Ú(test_scatter_elements_with_reduction_mulr_   rn   ro   s         r   Ú*export_scatter_elements_with_reduction_mulz:ScatterElements.export_scatter_elements_with_reduction_mulÁ   óä   € àˆÝŒ{×$Ò$ØØ1Ð1Ð1Ø�EØØð %ñ 
ô 
ˆõ ŒxÐ2Ð2Ð2Ð3½2¼:ÐFÑFÔFˆÝ”(˜Q ˜F˜8­2¬8Ð4Ñ4Ô4ˆÝ”(˜S #˜J˜<­r¬zÐ:Ñ:Ô:ˆå˜T 7¨G°TÀUÐ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   rO   rR   rS   r<   rv   rl   rW   r[   r]   rw   Ú(test_scatter_elements_with_reduction_maxr_   rn   ro   s         r   Ú*export_scatter_elements_with_reduction_maxz:ScatterElements.export_scatter_elements_with_reduction_maxÚ   r}   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   rO   rR   rS   r=   rv   rl   rW   r[   r]   rw   Ú(test_scatter_elements_with_reduction_minr_   rn   ro   s         r   Ú*export_scatter_elements_with_reduction_minz:ScatterElements.export_scatter_elements_with_reduction_minó   r}   r   N)r   rP   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodri   rp   rt   ry   r|   r€   rƒ   r+   r   r   rO   rO   _   sò   € € € € € Øð
ð 
ð 
ñ „\ð
ð. ð
ð 
ð 
ñ „\ð
ð. ð
ð 
ð 
ñ „\ð
ð. ð
ð 
ð 
ñ „\ð
ð0 ð
ð 
ð 
ñ „\ð
ð0 ð
ð 
ð 
ñ „\ð
ð0 ð
ð 
ð 
ñ „\ð
ð 
ð 
r   rO   )r   r	   )r
   r   r   r   r   r   r   r   r   r   r   r   )Ú
__future__r   Útypingr   r   Úcollections.abcr   Únumpyr6   ra   Úonnx.backend.test.case.baser   Úonnx.backend.test.case.noder   rM   rO   r+   r   r   ú<module>rŽ      sé   ðð #Ð "Ð "Ð "Ð "Ð "à %Ð %Ð %Ð %Ð %Ð %Ð %Ð %àð )Ø(Ð(Ð(Ð(Ð(Ð(à Ð Ð Ð à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø .Ð .Ð .Ð .Ð .Ð .ð ØðIð Ið Ið Ið IðXk
ð k
ð k
ð k
ð k
�dñ k
ô k
ð k
ð k
ð k
r   