
    Χg
                        d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZmZ  ej        ej        d          Z ed           e	j        d	d	d
d
d          dej        fd                        Z ed           e	j        d	d
d	d	          dej        fd                        Z ed           e	j        d	d
d	d	dd          dej        dej        j        dedej        j        dej        j        dedefd                        ZdS )a  This file exports ONNX ops for opset 16.

Note [ONNX Operators that are added/updated in opset 16]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
https://github.com/onnx/onnx/blob/main/docs/Changelog.md#version-16-of-the-default-onnx-operator-set
New operators:
    GridSample https://github.com/onnx/onnx/pull/3557

Updated operators:
    Identity
    If
    LeakyRelu
    Loop
    PRelu
    RoiAlign
    Scan
    ScatterElements
    ScatterND
    Where
    GreaterOrEqual
    LessOrEqual
    N)GRID_SAMPLE_INTERPOLATION_MODESGRID_SAMPLE_PADDING_MODES)_type_utilserrorssymbolic_helperutils)	jit_utilsregistration   )opsetzaten::grid_samplervibgc                 6   t          j        |          dk    rt          j        d          S d t          j                    D             |         }d t          j                    D             |         }|                     d||t          |          ||          S )N   z#GridSample with 5D volumetric inputc                     i | ]\  }}||	S  r   .0kr   s      W/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/onnx/symbolic_opset16.py
<dictcomp>z grid_sampler.<locals>.<dictcomp>:   s    GGGtq!aGGG    c                     i | ]\  }}||	S r   r   r   s      r   r   z grid_sampler.<locals>.<dictcomp>;   s    IIItq!aIIIr   
GridSample)align_corners_imode_spadding_mode_s)r   _get_tensor_rank_onnx_unsupportedr   itemsr   opint)r   inputgrid	mode_enumpadding_mode_enumalign_cornersr   r   s           r   grid_samplerr*   -   s     '..!3301VWWWGG>DFFGGG	RFII'@'F'H'HIIIN 44M**%    r   zaten::scatter_addc           	         t           j                            |t           j        j                  }t	          j        |          }t	          j        |          }t          |          t          |          k    rt	          j        dd| d| d          S ||k    sd |v rh|                     d|          }|                     dt          j
        dgt          |          z                      }	|                     d	||	|          }t	          j        |          }t	          j        |          r|                     d
||||d          S t           j                            |          |k    rG|                     d|t           j                            |                                                    }|                     d
||||d          S )Nscatter_addz	`index` (z0) should have the same dimensionality as `src` ()ShapeConstantr   value_tSliceScatterElementsaddaxis_ireduction_sCast)to_i)r   JitScalarType
from_value	UNDEFINEDr   _get_tensor_sizeslen_unimplementedr#   torchtensor_maybe_get_scalar	_is_value	onnx_type)
r   selfdimindexsrcsrc_type	src_sizesindex_sizesadjusted_shapestartss
             r   r,   r,   H   s    (33[&0 H  1#66I!3E::K
9~~[))))-aaaU^aaa
 
 	
 K4;#6#6gu--j%,sS=M=M7M*N*NOOdd7C88

+C
0
0C %% 
tt%tUCQVtWWW $//55AA$$ .99$??IIKK   C tt  
 
 	
r   zaten::scatter_reducesrE   rF   rG   rH   reduceinclude_selfc                    |dk    rt          j        d          |st          j        d          dddddd	}||         }|                     d
|                     d|                    }	|                     d|	|                     dt          j        dt          j                                      }
t          j        | d|
dd          \  }\  }}}|                    dt          j        dgt          j                            }|                    d||          }t          j	        |j
        |           |                    d||          }t          j	        |j
        |           |                    d||          }t          j	        |j
        |           |                    d|          }t          j	        |j
        |           |                    d|          }t          j	        |j
        |           |                    d|          }t          j	        |j
        |            | j        dg|R ||d}t          j        | d|
dd          \  }\  }}}|                    d|          }t          j	        |j
        |           |                    d|          }t          j	        |j
        |           |                                                                }|S )Nmeanz7ONNX does not support mean reduction for scatter_reducez;ONNX does not support include_self=False for scatter_reducenoner4   mulminmax)rR   sumprodaminamaxSizer.   Equalr/   r   )dtyper0   If      )n_blocksoutputsReshapeIdentityr3   r5      Squeeze)r   OnnxExporterErrorr#   r@   rA   int64r	   add_op_with_blocksr   _add_output_to_blockblocknodeoutput)r   rE   rF   rG   rH   rO   rP   reduce_modeonnx_reduce	self_rankself_rank_is_zeroif_op
if_contextelse_context_neg_1self_reshapeindex_reshapesrc_reshapeself_identityindex_identityesrc_identityresultresult_squeezedresult_identityresult_finals                             r   scatter_reducer   w   s    &E
 
 	
  
&I
 
 	

  K f%KVQTT'40011I ADDU\!5;5W5W5WDXX  ,5+G	4"Q, , ,(E%Jq MM*elB4u{.S.S.SMTTE==D%88L	z/>>>MM)UE::M	z/???--	366K	z/=== OOJ55M	|1=AAA"ooj%88O	|1?CCC??:s33L	|1<@@@QT#QeQQC[QQQF ,5+G	4"Q, , ,(E%Jq !mmIv66O	z/AAA"ooj&99O	|1?CCC::<<&&((Lr   )__doc__	functoolsr@   torch.nn.functionalr   r   
torch.onnxr   r   r   r   torch.onnx._internalr	   r
   partialonnx_symbolic_onnx_symbolic
parse_argsGraphContextr*   r,   _CValuer$   strboolr   r   r   r   <module>r      s   6             C B B B B B B B B B B B 8 8 8 8 8 8 8 8 #"<#=RHHH
 $%%Cc344   54 &%2 #$$Cc3//*
9) *
 *
 *
 0/ %$*
Z &''Cc3S99@@
(.@ 
@ 8>	@
 
@ @ @ @ @ :9 ('@ @ @r   