未验证 提交 b06ec0c7 编写于 作者: H HongyuJia 提交者: GitHub

[CppExtension Unittest] Add unit test of vector<Tensor> (#53040)

上级 81fb7df2
...@@ -26,6 +26,16 @@ paddle::Tensor custom_add(const paddle::Tensor& x, const paddle::Tensor& y) { ...@@ -26,6 +26,16 @@ paddle::Tensor custom_add(const paddle::Tensor& x, const paddle::Tensor& y) {
return x.exp() + y.exp(); return x.exp() + y.exp();
} }
std::vector<paddle::Tensor> custom_tensor(
const std::vector<paddle::Tensor>& inputs) {
std::vector<paddle::Tensor> out;
out.reserve(inputs.size());
for (const auto& input : inputs) {
out.push_back(input + 1.0);
}
return out;
}
paddle::Tensor nullable_tensor(bool return_none = false) { paddle::Tensor nullable_tensor(bool return_none = false) {
paddle::Tensor t; paddle::Tensor t;
if (!return_none) { if (!return_none) {
...@@ -45,6 +55,7 @@ paddle::optional<paddle::Tensor> optional_tensor(bool return_option = false) { ...@@ -45,6 +55,7 @@ paddle::optional<paddle::Tensor> optional_tensor(bool return_option = false) {
PYBIND11_MODULE(custom_cpp_extension, m) { PYBIND11_MODULE(custom_cpp_extension, m) {
m.def("custom_add", &custom_add, "exp(x) + exp(y)"); m.def("custom_add", &custom_add, "exp(x) + exp(y)");
m.def("custom_sub", &custom_sub, "exp(x) - exp(y)"); m.def("custom_sub", &custom_sub, "exp(x) - exp(y)");
m.def("custom_tensor", &custom_tensor, "x + 1");
m.def("nullable_tensor", &nullable_tensor, "returned Tensor might be None"); m.def("nullable_tensor", &nullable_tensor, "returned Tensor might be None");
m.def( m.def(
"optional_tensor", &optional_tensor, "returned Tensor might be optional"); "optional_tensor", &optional_tensor, "returned Tensor might be optional");
......
...@@ -68,6 +68,7 @@ class TestCppExtensionJITInstall(unittest.TestCase): ...@@ -68,6 +68,7 @@ class TestCppExtensionJITInstall(unittest.TestCase):
def test_cpp_extension(self): def test_cpp_extension(self):
self._test_extension_function() self._test_extension_function()
self._test_extension_class() self._test_extension_class()
self._test_vector_tensor()
self._test_nullable_tensor() self._test_nullable_tensor()
self._test_optional_tensor() self._test_optional_tensor()
if paddle.is_compiled_with_cuda(): if paddle.is_compiled_with_cuda():
...@@ -109,6 +110,20 @@ class TestCppExtensionJITInstall(unittest.TestCase): ...@@ -109,6 +110,20 @@ class TestCppExtensionJITInstall(unittest.TestCase):
atol=1e-5, atol=1e-5,
) )
def _test_vector_tensor(self):
for dtype in self.dtypes:
np_inputs = [
np.random.uniform(-1, 1, [4, 8]).astype(dtype) for _ in range(3)
]
inputs = [paddle.to_tensor(np_x, dtype=dtype) for np_x in np_inputs]
out = custom_cpp_extension.custom_tensor(inputs)
target_out = [x + 1.0 for x in inputs]
for i in range(3):
np.testing.assert_allclose(
out[i].numpy(), target_out[i].numpy(), atol=1e-5
)
def _test_nullable_tensor(self): def _test_nullable_tensor(self):
x = custom_cpp_extension.nullable_tensor(True) x = custom_cpp_extension.nullable_tensor(True)
assert x is None, "Return None when input parameter return_none = True" assert x is None, "Return None when input parameter return_none = True"
......
...@@ -148,6 +148,7 @@ class TestCppExtensionSetupInstall(unittest.TestCase): ...@@ -148,6 +148,7 @@ class TestCppExtensionSetupInstall(unittest.TestCase):
# Extension # Extension
self._test_extension_function_plain() self._test_extension_function_plain()
self._test_extension_function_mixed() self._test_extension_function_mixed()
self._test_vector_tensor()
self._test_extension_class() self._test_extension_class()
self._test_nullable_tensor() self._test_nullable_tensor()
self._test_optional_tensor() self._test_optional_tensor()
...@@ -218,6 +219,22 @@ class TestCppExtensionSetupInstall(unittest.TestCase): ...@@ -218,6 +219,22 @@ class TestCppExtensionSetupInstall(unittest.TestCase):
atol=1e-5, atol=1e-5,
) )
def _test_vector_tensor(self):
import custom_cpp_extension
for dtype in self.dtypes:
np_inputs = [
np.random.uniform(-1, 1, [4, 8]).astype(dtype) for _ in range(3)
]
inputs = [paddle.to_tensor(np_x, dtype=dtype) for np_x in np_inputs]
out = custom_cpp_extension.custom_tensor(inputs)
target_out = [x + 1 for x in inputs]
for i in range(3):
np.testing.assert_allclose(
out[i].numpy(), target_out[i].numpy(), atol=1e-5
)
def _test_nullable_tensor(self): def _test_nullable_tensor(self):
import custom_cpp_extension import custom_cpp_extension
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册