107 lines
3.7 KiB
Python
107 lines
3.7 KiB
Python
# Copyright (C) 2018-2023 Intel Corporation
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
import pytest
|
|
import torch
|
|
|
|
from pytorch_layer_test_class import PytorchLayerTest
|
|
|
|
|
|
|
|
class aten_cat(torch.nn.Module):
|
|
def forward(self, x):
|
|
return torch.cat(self.prepare_input(x), 1)
|
|
|
|
def prepare_input(self, x):
|
|
return [x, x]
|
|
|
|
class aten_cat_out(aten_cat):
|
|
def forward(self, x, out):
|
|
return torch.cat(self.prepare_input(x), 1, out=out), out
|
|
|
|
class aten_append_cat(aten_cat):
|
|
def prepare_input(self, x):
|
|
list = []
|
|
list.append(x)
|
|
list.append(x)
|
|
return list
|
|
|
|
class aten_append_cat_out(aten_cat_out):
|
|
def prepare_input(self, x):
|
|
list = []
|
|
list.append(x)
|
|
list.append(x)
|
|
return list
|
|
|
|
class aten_loop_append_cat(aten_cat):
|
|
def prepare_input(self, x):
|
|
list = []
|
|
for i in range(3):
|
|
list.append(x)
|
|
return list
|
|
|
|
|
|
class aten_loop_append_cat_out(aten_cat_out):
|
|
def prepare_input(self, x):
|
|
list = []
|
|
for i in range(3):
|
|
list.append(x)
|
|
return list
|
|
|
|
class aten_add_cat(aten_cat):
|
|
def forward(self, x):
|
|
list1 = self.prepare_input(x)
|
|
list2 = self.prepare_input(x)
|
|
return torch.cat(list1 + list2, dim=1)
|
|
|
|
|
|
class aten_add_cat_out(aten_cat_out):
|
|
def forward(self, x, out):
|
|
list1 = self.prepare_input(x)
|
|
list2 = self.prepare_input(x)
|
|
return torch.cat(list1 + list2, dim=1, out=out)
|
|
|
|
class TestCat(PytorchLayerTest):
|
|
def _prepare_input(self, out=False, num_repeats=2):
|
|
import numpy as np
|
|
data = np.random.randn(2, 1, 3)
|
|
if not out:
|
|
return (data, )
|
|
concat = [data for _ in range(num_repeats)]
|
|
out = np.zeros_like(np.concatenate(concat, axis=1))
|
|
return (data, out)
|
|
|
|
|
|
@pytest.mark.nightly
|
|
@pytest.mark.precommit
|
|
@pytest.mark.parametrize("out", [False, True])
|
|
def test_cat(self, out, ie_device, precision, ir_version):
|
|
model = aten_cat() if not out else aten_cat_out()
|
|
self._test(model, None, ["aten::cat", "prim::ListConstruct"],
|
|
ie_device, precision, ir_version, kwargs_to_prepare_input={"out": out, "num_repeats": 2})
|
|
|
|
@pytest.mark.nightly
|
|
@pytest.mark.precommit
|
|
@pytest.mark.parametrize("out", [False, True])
|
|
def test_append_cat(self, out, ie_device, precision, ir_version):
|
|
model = aten_append_cat() if not out else aten_append_cat_out()
|
|
self._test(model, None, ["aten::cat", "aten::append", "prim::ListConstruct"],
|
|
ie_device, precision, ir_version, kwargs_to_prepare_input={"out": out, "num_repeats": 2})
|
|
|
|
@pytest.mark.nightly
|
|
@pytest.mark.precommit
|
|
@pytest.mark.xfail(reason="Transformation RemoveMultiSubGraphOpDanglingParamsResults doesn't support removing unused merged inputs, ticket 112833.")
|
|
@pytest.mark.parametrize("out", [False, True])
|
|
def test_loop_append_cat(self, out, ie_device, precision, ir_version):
|
|
model = aten_loop_append_cat() if not out else aten_loop_append_cat_out()
|
|
self._test(model, None, ["aten::cat", "aten::append", "prim::ListConstruct", "prim::Loop"],
|
|
ie_device, precision, ir_version, freeze_model=False, kwargs_to_prepare_input={"out": out, "num_repeats": 3})
|
|
|
|
@pytest.mark.nightly
|
|
@pytest.mark.precommit
|
|
@pytest.mark.parametrize("out", [False, True])
|
|
def test_add_cat(self, out, ie_device, precision, ir_version):
|
|
model = aten_add_cat() if not out else aten_add_cat_out()
|
|
self._test(model, None, ["aten::cat", "aten::add", "prim::ListConstruct"],
|
|
ie_device, precision, ir_version, freeze_model=False, kwargs_to_prepare_input={"out": out, "num_repeats": 4})
|