§
    Ë²ÅjÃ  ã                   ó  — 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      úLC:\Projects\Historical\venv\Lib\site-packages\torch/onnx/symbolic_opset16.pyú
<dictcomp>z grid_sampler.<locals>.<dictcomp>:   s   € ÐGÐGÐG‘t�q˜!ˆa�ÐGÐGÐGó    c                 ó   — i | ]\  }}||“Œ	S r   r   r   s      r   r   z grid_sampler.<locals>.<dictcomp>;   s   € ÐIÐIÐI™t˜q !�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ÝÔ0Ð1VÑWÔWÐWØGÐGÕ>ÔDÑFÔFÐGÑGÔGÈ	ÔR€FØIÐIÕ'@Ô'FÑ'HÔ'HÐIÑIÔIØô€Nð �4Š4ØØØÝ˜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Ô6€IÝ!Ô3°EÑ:Ô:€Kå
ˆ9�~„~�˜[Ñ)Ô)Ò)Ð)ÝÔ-ØØa˜ÐaÐaÐU^ÐaÐaÐañ
ô 
ð 	
ð �KÒÐ 4¨;Ð#6Ð#6ØŸš˜g uÑ-Ô-ˆØ—’�j­%¬,¸°s½SÀÑ=MÔ=MÑ7MÑ*NÔ*N�ÑOÔOˆØ�dŠd�7˜C ¨Ñ8Ô8ˆå
Ô
+¨CÑ
0Ô
0€CÝÔ  Ñ%Ô%ð 
Ø�tŠtÐ% t¨U°CÀÐQVˆtÑWÔWÐWõ Ô$×/Ò/°Ñ5Ô5¸ÒAÐAØ—$’$ØØÝ Ô.×9Ò9¸$Ñ?Ô?×IÒIÑKÔKð ñ ô ˆCð �tŠtØØØØØØð ñ 
ô 
ð 	
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à—’�V˜QŸTšT '¨4Ñ0Ô0Ñ1Ô1€Ið ŸšØ�˜AŸDšD µU´\À!Í5Ì;Ð5WÑ5WÔ5W˜DÑXÔXñô Ðõ ,5Ô+GØ	ˆ4Ð"¨Q¸ð,ñ ,ô ,Ñ(€EÑ%ˆJ˜ qð �MŠM˜*­e¬l¸B¸4ÅuÄ{Ð.SÑ.SÔ.SˆMÑTÔT€Eà—=’= ¨D°%Ñ8Ô8€LÝ	Ô˜zÔ/°Ñ>Ô>Ð>Ø—M’M )¨U°EÑ:Ô:€MÝ	Ô˜zÔ/°Ñ?Ô?Ð?Ø—-’- 	¨3°Ñ6Ô6€KÝ	Ô˜zÔ/°Ñ=Ô=Ð=à —O’O J°Ñ5Ô5€MÝ	Ô˜|Ô1°=ÑAÔAÐAØ"—o’o j°%Ñ8Ô8€OÝ	Ô˜|Ô1°?ÑCÔCÐCØ—?’? :¨sÑ3Ô3€LÝ	Ô˜|Ô1°<Ñ@Ô@Ð@àˆQŒTÐ#ÐQ eÐQÐQ°CÀ[ÐQÐQÐQ€Fõ ,5Ô+GØ	ˆ4Ð"¨Q¸ð,ñ ,ô ,Ñ(€EÑ%ˆJ˜ qð !—m’m I¨vÑ6Ô6€OÝ	Ô˜zÔ/°ÑAÔAÐAØ"—o’o j°&Ñ9Ô9€OÝ	Ô˜|Ô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  c¨3°Ñ4Ô4ðØÔðð ð ñ 5Ô4ñ &Ô%ðð2 €Ð#Ñ$Ô$Ø€Ô˜C  c¨3Ñ/Ô/ð*
�9Ô)ð *
ð *
ð *
ñ 0Ô/ñ %Ô$ð*
ðZ €Ð&Ñ'Ô'Ø€Ô˜C  c¨3°°SÑ9Ô9ð@ØÔð@à
Œ(Œ.ð@ð 
ð@ð Œ8Œ>ð	@ð
 
ŒŒð@ð ð@ð ð@ð @ð @ñ :Ô9ñ (Ô'ð@ð @ð @r   