From bdc9e448d5066e17eb29362f63498c4534ad4e0a Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@etu.univ-amu.fr>
Date: Fri, 9 Nov 2018 13:26:31 +0100
Subject: [PATCH] Added an option to print time

---
 maca_common/include/ProgramParameters.hpp |  1 +
 maca_common/include/util.hpp              |  5 +++++
 maca_common/src/ProgramParameters.cpp     |  1 +
 maca_common/src/util.cpp                  | 12 ++++++++++++
 trainer/src/Trainer.cpp                   |  6 +++++-
 trainer/src/macaon_train.cpp              |  2 ++
 6 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/maca_common/include/ProgramParameters.hpp b/maca_common/include/ProgramParameters.hpp
index 2299fd2..2cd815a 100644
--- a/maca_common/include/ProgramParameters.hpp
+++ b/maca_common/include/ProgramParameters.hpp
@@ -46,6 +46,7 @@ struct ProgramParameters
   static int nbTrain;
   static bool randomEmbeddings;
   static bool printEntropy;
+  static bool printTime;
   static std::string sequenceDelimiterTape;
   static std::string sequenceDelimiter;
 
diff --git a/maca_common/include/util.hpp b/maca_common/include/util.hpp
index fc012e7..0ad31ce 100644
--- a/maca_common/include/util.hpp
+++ b/maca_common/include/util.hpp
@@ -163,6 +163,11 @@ std::string float2str(float f, const char * format);
 /// @return s without suffix at the end.
 std::string removeSuffix(const std::string & s, const std::string & suffix);
 
+/// @brief Return a string with the current system time.
+///
+/// @return Current system time.
+std::string getTime();
+
 /// @brief Macro giving informations about an error.
 #define ERRINFO (getFilenameFromPath(std::string(__FILE__))+ ":l." + std::to_string(__LINE__)).c_str()
 
diff --git a/maca_common/src/ProgramParameters.cpp b/maca_common/src/ProgramParameters.cpp
index 6ac3fe5..43604b5 100644
--- a/maca_common/src/ProgramParameters.cpp
+++ b/maca_common/src/ProgramParameters.cpp
@@ -39,6 +39,7 @@ float ProgramParameters::dynamicProbability;
 bool ProgramParameters::showFeatureRepresentation;
 bool ProgramParameters::randomEmbeddings;
 bool ProgramParameters::printEntropy;
+bool ProgramParameters::printTime;
 int ProgramParameters::iterationSize;
 int ProgramParameters::nbTrain;
 std::string ProgramParameters::sequenceDelimiterTape;
diff --git a/maca_common/src/util.cpp b/maca_common/src/util.cpp
index 6d8fc12..5bfa71d 100644
--- a/maca_common/src/util.cpp
+++ b/maca_common/src/util.cpp
@@ -1,6 +1,7 @@
 #include "util.hpp"
 #include <algorithm>
 #include <cstring>
+#include <ctime>
 
 bool isAlpha(char c)
 {
@@ -360,3 +361,14 @@ std::string removeSuffix(const std::string & s, const std::string & suffix)
   return result;
 }
 
+std::string getTime()
+{
+  time_t rawtime;
+  char buffer[80];
+
+  time (&rawtime);
+
+  strftime(buffer, sizeof(buffer), "%H:%M:%S", localtime(&rawtime));
+  return std::string(buffer);
+}
+
diff --git a/trainer/src/Trainer.cpp b/trainer/src/Trainer.cpp
index fda7506..3f43c06 100644
--- a/trainer/src/Trainer.cpp
+++ b/trainer/src/Trainer.cpp
@@ -96,7 +96,9 @@ void Trainer::train()
 {
   Dict::createFiles(ProgramParameters::expPath, "");
 
-  fprintf(stderr, "Training of \'%s\' :\n", tm.name.c_str());
+  fprintf(stderr, "%sTraining of \'%s\' :\n", 
+    ProgramParameters::printTime ? ("["+getTime()+"] ").c_str() : "",
+    tm.name.c_str());
 
   auto resetAndShuffle = [this]()
   {
@@ -318,6 +320,8 @@ void Trainer::printScoresAndSave(FILE * output)
 
   if (ProgramParameters::interactive)
     fprintf(stderr, "                            \r");
+  if (ProgramParameters::printTime)
+    fprintf(output, "[%s] ", getTime().c_str());
   fprintf(output, "Iteration %d/%d :\n", curIter+1, ProgramParameters::nbIter);
 
   printColumns(output, {names, acc, train, dev, savedStr});
diff --git a/trainer/src/macaon_train.cpp b/trainer/src/macaon_train.cpp
index 41f9b42..980b2d0 100644
--- a/trainer/src/macaon_train.cpp
+++ b/trainer/src/macaon_train.cpp
@@ -68,6 +68,7 @@ po::options_description getOptionsDescription()
       "The name of the buffer's tape that contains the delimiter token for a sequence")
     ("sequenceDelimiter", po::value<std::string>()->default_value("1"),
       "The value of the token that act as a delimiter for sequences")
+    ("printTime", "Print time on stderr")
     ("shuffle", po::value<bool>()->default_value(true),
       "Shuffle examples after each iteration");
 
@@ -236,6 +237,7 @@ int main(int argc, char * argv[])
   ProgramParameters::bdName = vm["bd"].as<std::string>();
   ProgramParameters::mcdName = vm["mcd"].as<std::string>();
   ProgramParameters::debug = vm.count("debug") == 0 ? false : true;
+  ProgramParameters::printTime = vm.count("printTime") == 0 ? false : true;
   ProgramParameters::trainName = vm["train"].as<std::string>();
   ProgramParameters::devName = vm["dev"].as<std::string>();
   ProgramParameters::lang = vm["lang"].as<std::string>();
-- 
GitLab