From 3e9cb04f709c01eb53148191edf62334b924e9ca Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Thu, 14 Nov 2024 01:31:12 +0100
Subject: [PATCH] Improve parallel checker data file format

---
 src/dev/ParallelChecker.hpp          | 36 +++++++++++++++++++++-------
 tests/test_ParallelChecker_read.cpp  | 33 +++++++++++++------------
 tests/test_ParallelChecker_write.cpp |  4 ++--
 3 files changed, 47 insertions(+), 26 deletions(-)

diff --git a/src/dev/ParallelChecker.hpp b/src/dev/ParallelChecker.hpp
index 97729f38a..ab9f092fb 100644
--- a/src/dev/ParallelChecker.hpp
+++ b/src/dev/ParallelChecker.hpp
@@ -461,7 +461,10 @@ class ParallelChecker
                 << rang::fg::reset << ")\n";
       is_comparable = false;
     }
-    std::vector reference_data_shape = group.getDataSet(reference_name).getSpace().getDimensions();
+
+    auto data_group = group.getGroup("data");
+
+    std::vector reference_data_shape = data_group.getDataSet(reference_name).getSpace().getDimensions();
     if (reference_data_shape.size() != data_shape.size()) {
       std::cout << rang::fg::cyan << " | " << rang::fgB::red << "different data shape kind: reference ("
                 << rang::fgB::yellow << reference_data_shape.size() << "d array" << rang::fgB::red << ") / target ("
@@ -583,7 +586,9 @@ class ParallelChecker
       group.createAttribute("item_type", std::string{itemName(item_type)});
       group.createAttribute("data_type", demangle<DataType>());
 
-      this->_writeArray(group, name, item_value.arrayView());
+      auto data_group = group.createGroup("data");
+
+      this->_writeArray(data_group, name, item_value.arrayView());
 
       this->_writeItemNumbers<item_type>(i_connectivity, file, group);
 
@@ -622,7 +627,8 @@ class ParallelChecker
       group.createAttribute("item_type", std::string{itemName(item_type)});
       group.createAttribute("data_type", demangle<DataType>());
 
-      this->_writeTable(group, name, item_array.tableView());
+      auto data_group = group.createGroup("data");
+      this->_writeTable(data_group, name, item_array.tableView());
 
       this->_writeItemNumbers<item_type>(i_connectivity, file, group);
 
@@ -666,7 +672,8 @@ class ParallelChecker
 
       group.createAttribute("data_type", demangle<DataType>());
 
-      this->_writeArray(group, name, subitem_value_per_item.arrayView());
+      auto data_group = group.createGroup("data");
+      this->_writeArray(data_group, name, subitem_value_per_item.arrayView());
 
       this->_writeItemNumbers<item_type>(i_connectivity, file, group);
       this->_writeItemNumbers<sub_item_type>(i_connectivity, file, group);
@@ -712,7 +719,8 @@ class ParallelChecker
 
       group.createAttribute("data_type", demangle<DataType>());
 
-      this->_writeTable(group, name, subitem_value_per_item.tableView());
+      auto data_group = group.createGroup("data");
+      this->_writeTable(data_group, name, subitem_value_per_item.tableView());
 
       this->_writeItemNumbers<item_type>(i_connectivity, file, group);
       this->_writeItemNumbers<sub_item_type>(i_connectivity, file, group);
@@ -753,7 +761,10 @@ class ParallelChecker
 
       Array<const int> reference_item_numbers =
         this->_readArray<int>(group, std::string{itemName(item_type)} + "_numbers");
-      Array<const DataType> reference_item_value = this->_readArray<DataType>(group, reference_name);
+
+      auto data_group = group.getGroup("data");
+
+      Array<const DataType> reference_item_value = this->_readArray<DataType>(data_group, reference_name);
 
       Array<const int> item_numbers = this->_getItemNumber<item_type>(i_connectivity);
 
@@ -880,7 +891,10 @@ class ParallelChecker
 
       Array<const int> reference_item_numbers =
         this->_readArray<int>(group, std::string{itemName(item_type)} + "_numbers");
-      Table<const DataType> reference_item_array = this->_readTable<DataType>(group, reference_name);
+
+      auto data_group = group.getGroup("data");
+
+      Table<const DataType> reference_item_array = this->_readTable<DataType>(data_group, reference_name);
 
       Array<const int> item_numbers = this->_getItemNumber<item_type>(i_connectivity);
 
@@ -1020,7 +1034,9 @@ class ParallelChecker
       Array<const IndexType> reference_subitem_rows_map = this->_readArray<IndexType>(group, "rows_map");
       Array<const IndexType> reference_subitem_index    = this->_readArray<IndexType>(group, "sub_item_index");
 
-      Array<const DataType> reference_subitem_value_per_item = this->_readArray<DataType>(group, reference_name);
+      auto data_group = group.getGroup("data");
+
+      Array<const DataType> reference_subitem_value_per_item = this->_readArray<DataType>(data_group, reference_name);
 
       Array<const int> item_numbers           = this->_getItemNumber<item_type>(i_connectivity);
       Array<const int> sub_item_numbers       = this->_getItemNumber<sub_item_type>(i_connectivity);
@@ -1211,7 +1227,9 @@ class ParallelChecker
       Array<const IndexType> reference_subitem_rows_map = this->_readArray<IndexType>(group, "rows_map");
       Array<const IndexType> reference_subitem_index    = this->_readArray<IndexType>(group, "sub_item_index");
 
-      Table<const DataType> reference_subitem_array_per_item = this->_readTable<DataType>(group, reference_name);
+      auto data_group = group.getGroup("data");
+
+      Table<const DataType> reference_subitem_array_per_item = this->_readTable<DataType>(data_group, reference_name);
 
       Array<const int> item_numbers           = this->_getItemNumber<item_type>(i_connectivity);
       Array<const int> sub_item_numbers       = this->_getItemNumber<sub_item_type>(i_connectivity);
diff --git a/tests/test_ParallelChecker_read.cpp b/tests/test_ParallelChecker_read.cpp
index 40628382f..0bb1d5566 100644
--- a/tests/test_ParallelChecker_read.cpp
+++ b/tests/test_ParallelChecker_read.cpp
@@ -331,7 +331,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
         for (size_t i = 0; i < cell_numbers.size(); ++i) {
           values[i] = std::sin(cell_numbers[i]);
         }
-        group.createDataSet<double>(name, HighFive::DataSpace{std::vector<size_t>{cell_numbers.size()}})
+        group.createDataSet<double>("data/" + name, HighFive::DataSpace{std::vector<size_t>{cell_numbers.size()}})
           .write_raw<double>(&(values[0]));
 
         group.createAttribute("filename", source_location.filename());
@@ -512,8 +512,9 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet<double>(name, HighFive::DataSpace{std::vector<size_t>{double_table.numberOfRows(),
-                                                                               double_table.numberOfColumns()}})
+          .createDataSet<double>("data/" + name,
+                                 HighFive::DataSpace{
+                                   std::vector<size_t>{double_table.numberOfRows(), double_table.numberOfColumns()}})
           .write_raw<double>(&(double_table(0, 0)));
 
         group.createAttribute("filename", source_location.filename());
@@ -654,7 +655,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet(name, HighFive::DataSpace{std::vector<size_t>{node_numbers.size()}},
+          .createDataSet("data/" + name, HighFive::DataSpace{std::vector<size_t>{node_numbers.size()}},
                          test_TinyVectorDataType<DataType>{})
           .template write_raw<double>(&(values[0][0]), test_TinyVectorDataType<DataType>{});
 
@@ -751,7 +752,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet(name,
+          .createDataSet("data/" + name,
                          HighFive::DataSpace{std::vector<size_t>{dt_table.numberOfRows(), dt_table.numberOfColumns()}},
                          test_TinyMatrixDataType<DataType>{})
           .template write_raw<double>(&(dt_table[0][0](0, 0)), test_TinyMatrixDataType<DataType>{});
@@ -900,7 +901,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet(name, HighFive::DataSpace{std::vector<size_t>{node_numbers.size()}},
+          .createDataSet("data/" + name, HighFive::DataSpace{std::vector<size_t>{node_numbers.size()}},
                          test_TinyMatrixDataType<DataType>{})
           .template write_raw<double>(&(values[0](0, 0)), test_TinyMatrixDataType<DataType>{});
 
@@ -997,7 +998,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet(name,
+          .createDataSet("data/" + name,
                          HighFive::DataSpace{std::vector<size_t>{dt_table.numberOfRows(), dt_table.numberOfColumns()}},
                          test_TinyVectorDataType<DataType>{})
           .template write_raw<double>(&(dt_table[0][0][0]), test_TinyVectorDataType<DataType>{});
@@ -1158,7 +1159,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
 
-        group.createDataSet<double>(name, HighFive::DataSpace{std::vector<size_t>{values.size()}})
+        group.createDataSet<double>("data/" + name, HighFive::DataSpace{std::vector<size_t>{values.size()}})
           .write_raw<double>(&(values[0]));
 
         group.createAttribute("filename", source_location.filename());
@@ -1376,8 +1377,9 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet<double>(name, HighFive::DataSpace{std::vector<size_t>{double_table.numberOfRows(),
-                                                                               double_table.numberOfColumns()}})
+          .createDataSet<double>("data/" + name,
+                                 HighFive::DataSpace{
+                                   std::vector<size_t>{double_table.numberOfRows(), double_table.numberOfColumns()}})
           .write_raw<double>(&(double_table(0, 0)));
 
         group.createAttribute("filename", source_location.filename());
@@ -1527,7 +1529,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet(name,
+          .createDataSet("data/" + name,
                          HighFive::DataSpace{std::vector<size_t>{dt_table.numberOfRows(), dt_table.numberOfColumns()}},
                          test_TinyMatrixDataType<DataType>{})
           .template write_raw<double>(&(dt_table[0][0](0, 0)), test_TinyMatrixDataType<DataType>{});
@@ -1688,7 +1690,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
 
-        group.createDataSet<double>(name, HighFive::DataSpace{std::vector<size_t>{values.size()}})
+        group.createDataSet<double>("data/" + name, HighFive::DataSpace{std::vector<size_t>{values.size()}})
           .write_raw<double>(&(values[0]));
 
         group.createAttribute("filename", source_location.filename());
@@ -1891,7 +1893,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet(name,
+          .createDataSet("data/" + name,
                          HighFive::DataSpace{std::vector<size_t>{dt_table.numberOfRows(), dt_table.numberOfColumns()}},
                          test_TinyVectorDataType<DataType>{})
           .template write_raw<double>(&(dt_table[0][0][0]), test_TinyVectorDataType<DataType>{});
@@ -2052,8 +2054,9 @@ TEST_CASE("ParallelChecker_read", "[dev]")
           }
         }
         group
-          .createDataSet<double>(name, HighFive::DataSpace{std::vector<size_t>{double_table.numberOfRows(),
-                                                                               double_table.numberOfColumns()}})
+          .createDataSet<double>("data/" + name,
+                                 HighFive::DataSpace{
+                                   std::vector<size_t>{double_table.numberOfRows(), double_table.numberOfColumns()}})
           .write_raw<double>(&(double_table(0, 0)));
 
         group.createAttribute("filename", source_location.filename());
diff --git a/tests/test_ParallelChecker_write.cpp b/tests/test_ParallelChecker_write.cpp
index 460d77dad..e1463d00b 100644
--- a/tests/test_ParallelChecker_write.cpp
+++ b/tests/test_ParallelChecker_write.cpp
@@ -109,7 +109,7 @@ TEST_CASE("ParallelChecker_write", "[dev]")
       REQUIRE(group_var0.getNumberObjects() == 2);
 
       REQUIRE(group_var0.exist(std::string{itemName(item_type)} + "_numbers"));
-      REQUIRE(group_var0.exist(var_name));
+      REQUIRE(group_var0.exist("data/" + var_name));
 
       REQUIRE(group_var0.getNumberAttributes() == 7);
       REQUIRE(group_var0.hasAttribute("filename"));
@@ -372,7 +372,7 @@ TEST_CASE("ParallelChecker_write", "[dev]")
       REQUIRE(group_var0.exist(std::string{itemName(sub_item_type)} + "_numbers"));
       REQUIRE(group_var0.exist("sub_item_index"));
       REQUIRE(group_var0.exist("rows_map"));
-      REQUIRE(group_var0.exist(var_name));
+      REQUIRE(group_var0.exist("data/" + var_name));
 
       REQUIRE(group_var0.getNumberAttributes() == 8);
       REQUIRE(group_var0.hasAttribute("filename"));
-- 
GitLab