[PT FE]: handle prim::ListConstruct + aten::pad case (#15288)

This commit is contained in:
Ekaterina Aidova authored and GitHub committed 2023-01-31 14:08:22 +00:00
1 parent 407590cfc2
commit a12de8183c
4 files changed
+240

No files matched your search

@@ -108,3 +108,95 @@ class TestPad(PytorchLayerTest):
def test_pad2d(self, pads, mode, value, ie_device, precision, ir_version):
self._test(*self.create_model(pads, mode, value), ie_device, precision, ir_version,
kwargs_to_prepare_input={'ndim': 2}, trace_model=True)
class TestPadListPaddingings(PytorchLayerTest):
def _prepare_input(self, ndim=4, pad_w=0, pad_h=0):
import numpy as np
input_5d_shape = [1, 3, 14, 14, 18]
return (np.random.randn(*input_5d_shape[:ndim]).astype(np.float32), np.array(pad_w, dtype=np.int32), np.array(pad_h, dtype=np.int32))
def create_model(self, mode, value=None):
import torch
import torch.nn.functional as F
class aten_pad(torch.nn.Module):
def __init__(self, mode, value=None):
super().__init__()
self.mode = mode
self.value = value
def forward(self, x, pad_w:int, pad_h:int):
return F.pad(x, [pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2], value=self.value)
ref_net = None
return aten_pad(mode, value), ref_net, "aten::pad"
@pytest.mark.parametrize("pad_w,pad_h,mode,value", [
(2, 0, "reflect", None),
(0, 2, "reflect", None),
(10, 10, "reflect", None),
(0, 0, "reflect", None),
(5, 3, "reflect", None),
(2, 0, "replicate", None),
(0, 2, "replicate", None),
(10, 10, "replicate", None),
(5, 3, "replicate", None),
(0, 0, "replicate", None),
(2, 0, "constant", None),
(0, 3, "constant", 42.),
(4, 4, "constant", -0.57),
(1, 2, "constant", None),
(0, 0, "constant", -0.57),
])
@pytest.mark.nightly
@pytest.mark.precommit
def test_pad4d(self, pad_w, pad_h, mode, value, ie_device, precision, ir_version):
self._test(*self.create_model(mode, value), ie_device, precision, ir_version,
kwargs_to_prepare_input={'ndim': 4, "pad_w": pad_w, "pad_h": pad_h})
@pytest.mark.parametrize("pad_w,pad_h,mode,value", [
(2, 0, "reflect", None),
(0, 2, "reflect", None),
(10, 10, "reflect", None),
(0, 0, "reflect", None),
(5, 3, "reflect", None),
(2, 0, "replicate", None),
(0, 2, "replicate", None),
(10, 10, "replicate", None),
(5, 3, "replicate", None),
(0, 0, "replicate", None),
(2, 0, "constant", None),
(0, 3, "constant", 42.),
(4, 4, "constant", -0.57),
(1, 2, "constant", None),
(0, 0, "constant", -0.57)
])
@pytest.mark.nightly
def test_pad5d(self, pad_w, pad_h, mode, value, ie_device, precision, ir_version):
self._test(*self.create_model(mode, value), ie_device, precision, ir_version,
kwargs_to_prepare_input={'ndim': 5, "pad_w": pad_w, "pad_h": pad_h})
@pytest.mark.parametrize("pad_w,pad_h,mode,value", [
(2, 0, "reflect", None),
(0, 2, "reflect", None),
(10, 10, "reflect", None),
(0, 0, "reflect", None),
(5, 3, "reflect", None),
(2, 0, "replicate", None),
(0, 2, "replicate", None),
(10, 10, "replicate", None),
(5, 3, "replicate", None),
(0, 0, "replicate", None),
(2, 0, "constant", None),
(0, 3, "constant", 42.),
(4, 4, "constant", -0.57),
(1, 2, "constant", None),
(0, 0, "constant", -0.57)
])
@pytest.mark.nightly
@pytest.mark.precommit
def test_pad2d(self, pad_w, pad_h, mode, value, ie_device, precision, ir_version):
self._test(*self.create_model(mode, value), ie_device, precision, ir_version,
kwargs_to_prepare_input={'ndim': 2, "pad_w": pad_w, "pad_h": pad_h})