"""This file exports ONNX ops for opset 18. Note [ONNX Operators that are added/updated in opset 18] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ https://github.com/onnx/onnx/blob/main/docs/Changelog.md#version-18-of-the-default-onnx-operator-set New operators: CenterCropPad Col2Im Mish OptionalGetElement OptionalHasElement Pad Resize ScatterElements ScatterND """ import functools from typing import Sequence from torch import _C from torch.onnx import symbolic_helper from torch.onnx._internal import _beartype, registration # EDITING THIS FILE? READ THIS FIRST! # see Note [Edit Symbolic Files] in symbolic_helper.py __all__ = ["col2im"] _onnx_symbolic = functools.partial(registration.onnx_symbolic, opset=18) @_onnx_symbolic("aten::col2im") @symbolic_helper.parse_args("v", "v", "v", "is", "is", "is") @_beartype.beartype def col2im( g, input: _C.Value, output_size: _C.Value, kernel_size: _C.Value, dilation: Sequence[int], padding: Sequence[int], stride: Sequence[int], ): # convert [i0, i1, ..., in] into [i0, i0, i1, i1, ..., in, in] adjusted_padding = [] for pad in padding: for _ in range(2): adjusted_padding.append(pad) num_dimensional_axis = symbolic_helper._get_tensor_sizes(output_size)[0] if not adjusted_padding: adjusted_padding = [0, 0] * num_dimensional_axis if not dilation: dilation = [1] * num_dimensional_axis if not stride: stride = [1] * num_dimensional_axis return g.op( "Col2Im", input, output_size, kernel_size, dilations_i=dilation, pads_i=adjusted_padding, strides_i=stride, )