5cbd3f29e3
Fuzz / Run fuzz harnesses (${{ github.event_name == 'schedule' && 'nightly' || 'smoke' }}) (push) Has been cancelled
Create Releases / call-mac (push) Has been cancelled
Create Releases / call-linux (push) Has been cancelled
Create Releases / call-sdist (push) Has been cancelled
Create Releases / call-win (push) Has been cancelled
Create Releases / call-pyodide (push) Has been cancelled
Windows_No_Exception_CI / build (x64, 3.10) (push) Has been cancelled
Check URLs / build (push) Has been cancelled
Create Releases / Attest CI build artifacts (push) Has been cancelled
Create Releases / Check for Publish release build to pypi (push) Has been cancelled
Create Releases / Check for Publish preview build to test.pypi-weekly (push) Has been cancelled
Create Releases / Publish preview build to test.pypi-weekly (push) Has been cancelled
Create Releases / Check for Publish release build to test.pypi (rc-candidates) (push) Has been cancelled
Create Releases / Publish release build to test.pypi (push) Has been cancelled
Create Releases / Check for Publish preview build to pypi-weekly (push) Has been cancelled
Create Releases / Publish preview build to pypi-weekly (push) Has been cancelled
Create Releases / Publish release build to pypi (push) Has been cancelled
Create Releases / test source distribution (push) Has been cancelled
clang-tidy / clang-tidy (push) Has been cancelled
Lint / Validate SBOM (push) Has been cancelled
Lint / Enforce style (push) Has been cancelled
CI / Test windows-2022, 3.14, External, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, Internal, debug=1, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=1, onnx_ml=1, autogen=1 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=0, onnx_ml=0, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
Pixi CI / Install and lint (ubuntu-24.04-arm) (push) Has been cancelled
Pixi CI / Install and lint (windows-2022) (push) Has been cancelled
Pixi CI / Xcode generator build (push) Has been cancelled
Pixi CI / Install and test (macos-latest, default) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-24.04-arm, default) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-latest, default) (push) Has been cancelled
Pixi CI / Install and test (windows-2022, default) (push) Has been cancelled
Pixi CI / Install and test (macos-latest, oldies) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-24.04-arm, oldies) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-latest, oldies) (push) Has been cancelled
Pixi CI / Install and test (windows-2022, oldies) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Copilot Setup Steps / copilot-setup-steps (push) Has been cancelled
Generate and publish ONNX docs / build (push) Has been cancelled
Generate and publish ONNX docs / deploy (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
130 lines
3.9 KiB
Python
130 lines
3.9 KiB
Python
# Copyright (c) ONNX Project Contributors
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
from __future__ import annotations
|
|
|
|
import numpy as np
|
|
|
|
import onnx
|
|
from onnx.backend.test.case.base import Base
|
|
from onnx.backend.test.case.node import expect
|
|
|
|
|
|
def pad_impl(data, raw_pads, mode, constant_values=0.0, axes=None):
|
|
input_rank = data.ndim
|
|
if axes is None:
|
|
axes = list(range(input_rank))
|
|
else:
|
|
axes = [axis if axis >= 0 else axis + input_rank for axis in axes]
|
|
num_axes = len(axes)
|
|
|
|
if num_axes * 2 != raw_pads.size:
|
|
raise ValueError("The number of elements in raw_pads should be 2 * num_axes")
|
|
|
|
pad_width = []
|
|
for _ in range(input_rank):
|
|
pad_width += [[0, 0]] # init to zero
|
|
|
|
# re-order to np.pad accepted order ((x1_begin, x1_end), (x2_begin, x2_end), ...)
|
|
for i in range(num_axes):
|
|
axis = axes[i]
|
|
if axis < 0:
|
|
axis = input_rank + axis
|
|
pad_width[axis] = [raw_pads[i], raw_pads[i + num_axes]]
|
|
|
|
if mode == "constant":
|
|
return np.pad(
|
|
data,
|
|
pad_width=pad_width,
|
|
mode=mode,
|
|
constant_values=constant_values,
|
|
)
|
|
|
|
return np.pad(
|
|
data,
|
|
pad_width=pad_width,
|
|
mode=mode,
|
|
)
|
|
|
|
|
|
class Pad(Base):
|
|
@staticmethod
|
|
def export_constant_pad() -> None:
|
|
node = onnx.helper.make_node(
|
|
"Pad", inputs=["x", "pads", "value"], outputs=["y"], mode="constant"
|
|
)
|
|
x = np.random.randn(1, 3, 4, 5).astype(np.float32)
|
|
pads = np.array([0, 0, 1, 3, 0, 0, 2, 4]).astype(
|
|
np.int64
|
|
) # pad order [x1_begin, x2_begin, ..., x1_end, x2_end, ...]
|
|
value = np.float32(1.2)
|
|
y = pad_impl(x, pads, "constant", 1.2)
|
|
|
|
expect(node, inputs=[x, pads, value], outputs=[y], name="test_constant_pad")
|
|
|
|
@staticmethod
|
|
def export_reflection_edge_and_wrap_pad() -> None:
|
|
for mode in ("edge", "reflect", "wrap"):
|
|
node = onnx.helper.make_node(
|
|
"Pad", inputs=["x", "pads"], outputs=["y"], mode=mode
|
|
)
|
|
x = np.random.randn(1, 3, 4, 5).astype(np.int32)
|
|
pads = np.array([0, 0, 1, 1, 0, 0, 1, 1]).astype(
|
|
np.int64
|
|
) # pad order [x1_begin, x2_begin, ..., x1_end, x2_end, ...]
|
|
y = pad_impl(x, pads, mode)
|
|
|
|
expect(node, inputs=[x, pads], outputs=[y], name=f"test_{mode}_pad")
|
|
|
|
@staticmethod
|
|
def export_constant_pad_axes() -> None:
|
|
node = onnx.helper.make_node(
|
|
"Pad", inputs=["x", "pads", "value", "axes"], outputs=["y"], mode="constant"
|
|
)
|
|
x = np.random.randn(1, 3, 4, 5).astype(np.float32)
|
|
pads = np.array([0, 3, 0, 4]).astype(
|
|
np.int64
|
|
) # pad order [x1_begin, x2_begin, ..., x1_end, x2_end, ...]
|
|
value = np.float32(1.2)
|
|
axes = np.array([1, 3], dtype=np.int64)
|
|
y = pad_impl(
|
|
x,
|
|
pads,
|
|
"constant",
|
|
1.2,
|
|
[1, 3],
|
|
)
|
|
|
|
expect(
|
|
node,
|
|
inputs=[x, pads, value, axes],
|
|
outputs=[y],
|
|
name="test_constant_pad_axes",
|
|
)
|
|
|
|
@staticmethod
|
|
def export_constant_pad_negative_axes() -> None:
|
|
node = onnx.helper.make_node(
|
|
"Pad", inputs=["x", "pads", "value", "axes"], outputs=["y"], mode="constant"
|
|
)
|
|
x = np.random.randn(1, 3, 4, 5).astype(np.float32)
|
|
pads = np.array([0, 3, 0, 4]).astype(
|
|
np.int64
|
|
) # pad order [x1_begin, x2_begin, ..., x1_end, x2_end, ...]
|
|
value = np.float32(1.2)
|
|
axes = np.array([-3, -1], dtype=np.int64)
|
|
y = pad_impl(
|
|
x,
|
|
pads,
|
|
"constant",
|
|
1.2,
|
|
[-3, -1],
|
|
)
|
|
|
|
expect(
|
|
node,
|
|
inputs=[x, pads, value, axes],
|
|
outputs=[y],
|
|
name="test_constant_pad_negative_axes",
|
|
)
|