From 4c3b6ff3fb85b7b474e0c04129a31c1c20942904 Mon Sep 17 00:00:00 2001 From: Christophe Guillon <christophe.guillon@inria.fr> Date: Wed, 20 Nov 2024 12:05:07 +0100 Subject: [PATCH] fix : Tensor assertion with no implementation on toString() Set toString() method to always return a valid string even in the case where the Tensor has no implementaiton or when the tensor is undefined (i.e. no specified size). --- python_binding/data/pybind_Tensor.cpp | 6 +----- src/data/Tensor.cpp | 11 +++++++---- unit_tests/data/Test_Tensor.cpp | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/python_binding/data/pybind_Tensor.cpp b/python_binding/data/pybind_Tensor.cpp index fc800816b..b972c87dc 100644 --- a/python_binding/data/pybind_Tensor.cpp +++ b/python_binding/data/pybind_Tensor.cpp @@ -336,11 +336,7 @@ void init_Tensor(py::module& m){ .def("cpy_transpose", (void (Tensor::*)(const Tensor& src, const std::vector<DimSize_t>& transpose)) &Tensor::copyTranspose, py::arg("src"), py::arg("transpose")) .def("__str__", [](Tensor& b) { - if (b.empty() && b.undefined()) { - return std::string("{}"); - } else { - return b.toString(); - } + return b.toString(); }) .def("__repr__", [](Tensor& b) { return fmt::format("Tensor(dims = {}, dtype = {})", b.dims(), std::string(EnumStrings<DataType>::data[static_cast<int>(b.dataType())])); diff --git a/src/data/Tensor.cpp b/src/data/Tensor.cpp index 6f60d2f15..3dcdcc65d 100644 --- a/src/data/Tensor.cpp +++ b/src/data/Tensor.cpp @@ -235,10 +235,11 @@ void Aidge::Tensor::resize(const std::vector<Aidge::DimSize_t>& dims, } std::string Aidge::Tensor::toString() const { - AIDGE_ASSERT( - mImpl && (undefined() || (dims() == std::vector<DimSize_t>({0})) || - (mImpl->hostPtr() != nullptr)), - "tensor should have a valid host pointer"); + + if (!hasImpl() || undefined()) { + // Return no value on no implementation or undefined size + return std::string("{}"); + } // TODO: move lambda elsewhere? auto ptrToString = [](DataType dt, void* ptr, std::size_t idx) { @@ -272,8 +273,10 @@ std::string Aidge::Tensor::toString() const { }; if (dims().empty()) { + // The Tensor is defined with rank 0, hence scalar return ptrToString(mDataType, mImpl->hostPtr(), 0); } + std::string res; std::size_t dim = 0; std::size_t counter = 0; diff --git a/unit_tests/data/Test_Tensor.cpp b/unit_tests/data/Test_Tensor.cpp index c313675e1..4462eb91e 100644 --- a/unit_tests/data/Test_Tensor.cpp +++ b/unit_tests/data/Test_Tensor.cpp @@ -458,7 +458,7 @@ TEST_CASE("[core/data] Tensor(other)", "[Tensor][extract][zeros][print]") { SECTION("Pretty printing for debug") { Tensor x{}; // Empty Tensor - REQUIRE_THROWS(x.print()); + REQUIRE_NOTHROW(x.print()); // scalar x = Tensor(42); REQUIRE_NOTHROW(x.print()); -- GitLab