From 2efe7c8ccaafbf7af855f7e26e8378bf60025a37 Mon Sep 17 00:00:00 2001
From: Michael Zikeli <michael.zikeli@fau.de>
Date: Wed, 5 Feb 2025 14:34:44 +0100
Subject: [PATCH] Refactor timer data exposure in Python callback to remove
 whitespace from column names.

---
 .../UniformGridCPU/UniformGridCPU.cpp         | 52 +++++++++----------
 1 file changed, 24 insertions(+), 28 deletions(-)

diff --git a/apps/benchmarks/UniformGridCPU/UniformGridCPU.cpp b/apps/benchmarks/UniformGridCPU/UniformGridCPU.cpp
index bc933c6ad..a61462030 100644
--- a/apps/benchmarks/UniformGridCPU/UniformGridCPU.cpp
+++ b/apps/benchmarks/UniformGridCPU/UniformGridCPU.cpp
@@ -227,12 +227,12 @@ int main(int argc, char** argv)
 
          const auto reducedTimeloopTiming = timeloopTiming.getReduced();
          WALBERLA_LOG_RESULT_ON_ROOT("Time loop timing:\n" << *reducedTimeloopTiming)
-
+                        
          WALBERLA_ROOT_SECTION()
          {
-            if(inputIsPython){
+            if(inputIsPython) {
                python_coupling::PythonCallback pythonCallbackResults("results_callback");
-               if (pythonCallbackResults.isCallable())
+               if (pythonCallbackResults.isCallable())      
                {
                   pythonCallbackResults.data().exposeValue("numProcesses", performance.processes());
                   pythonCallbackResults.data().exposeValue("numThreads", performance.threads());
@@ -250,32 +250,28 @@ int main(int argc, char** argv)
                   pythonCallbackResults.data().exposeValue("cse_global", infoCseGlobal);
                   pythonCallbackResults.data().exposeValue("cse_pdfs", infoCsePdfs);
 
-                  auto exposeTimers = [&pythonCallbackResults](const std::shared_ptr<WcTimingPool>& tp){
-                     std::string parseColumnName(const std::string& columnName) {
-                        std::string parsedName = columnName;
-                        std::replace(parsedName.begin(), parsedName.end(), ' ', '-');
-                        return parsedName;
-                     }
-                     auto& data = pythonCallbackResults.data();
-                     for (auto i = tp->begin(); i != tp->end(); ++i)
-                     {
-                     const std::string timerName = "Timer_" + i->first;
-                     const std::string coulumnName; 
-                     coulumnName = timerName + "_Total";
-                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.total());
-                     coulumnName = timerName + "_Average";
-                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.average());
-                     coulumnName = timerName + "_Count";
-                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.getCounter());
-                     coulumnName = timerName + "_Min";
-                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.min());
-                     coulumnName = timerName + "_Max";
-                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.max());
-                     coulumnName = timerName + "_Variance";
-                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.variance());
-                     }
+                  auto stripWhiteSpaces = [](std::string str) {
+                    str.erase(remove_if(str.begin(), str.end(), isspace), str.end());
+                    return str;
                   };
-                  exposeTimers(reducedTimeloopTiming);
+
+                  for (auto i = reducedTimeloopTiming->begin(); i != reducedTimeloopTiming->end(); ++i)
+                  {
+                    const std::string timerName = "Timer_" + i->first;
+                    std::string columnName = timerName + "_Total";
+                    pythonCallbackResults.data().exposeValue(stripWhiteSpaces(columnName).c_str(), i->second.total());
+                    columnName = timerName + "_Average";
+                    pythonCallbackResults.data().exposeValue(stripWhiteSpaces(columnName).c_str(), i->second.average());
+                    columnName = timerName + "_Count";
+                    pythonCallbackResults.data().exposeValue(stripWhiteSpaces(columnName).c_str(), i->second.getCounter());
+                    columnName = timerName + "_Min";
+                    pythonCallbackResults.data().exposeValue(stripWhiteSpaces(columnName).c_str(), i->second.min());
+                    columnName = timerName + "_Max";
+                    pythonCallbackResults.data().exposeValue(stripWhiteSpaces(columnName).c_str(), i->second.max());
+                    columnName = timerName + "_Variance";
+                    pythonCallbackResults.data().exposeValue(stripWhiteSpaces(columnName).c_str(), i->second.variance());
+                  }
+
                   // Call Python function to report results
                   pythonCallbackResults();
                }
-- 
GitLab