Complete best build and report
This commit is contained in:
parent
c4d0a5b4e6
commit
c4f9187e2a
@ -7,11 +7,12 @@
|
|||||||
|
|
||||||
namespace platform {
|
namespace platform {
|
||||||
|
|
||||||
void BestResults::build()
|
string BestResults::build()
|
||||||
{
|
{
|
||||||
auto files = loadFiles();
|
auto files = loadFiles();
|
||||||
if (files.size() == 0) {
|
if (files.size() == 0) {
|
||||||
throw runtime_error("No result files were found!");
|
cerr << Colors::MAGENTA() << "No result files were found!" << Colors::RESET() << endl;
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
json bests;
|
json bests;
|
||||||
for (const auto& file : files) {
|
for (const auto& file : files) {
|
||||||
@ -20,7 +21,7 @@ namespace platform {
|
|||||||
for (auto const& item : data.at("results")) {
|
for (auto const& item : data.at("results")) {
|
||||||
bool update = false;
|
bool update = false;
|
||||||
if (bests.contains(item.at("dataset").get<string>())) {
|
if (bests.contains(item.at("dataset").get<string>())) {
|
||||||
if (item.at("score").get<double>() > bests["dataset"].at(0).get<double>()) {
|
if (item.at("score").get<double>() > bests[item.at("dataset").get<string>()].at(0).get<double>()) {
|
||||||
update = true;
|
update = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -31,14 +32,15 @@ namespace platform {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
string bestFileName = path + "/" + bestResultFile();
|
string bestFileName = path + bestResultFile();
|
||||||
if (FILE* fileTest = fopen(bestFileName.c_str(), "r")) {
|
if (FILE* fileTest = fopen(bestFileName.c_str(), "r")) {
|
||||||
fclose(fileTest);
|
fclose(fileTest);
|
||||||
cout << Colors::MAGENTA() << "File " << bestFileName << " already exists and it shall be overwritten." << Colors::RESET();
|
cout << Colors::MAGENTA() << "File " << bestFileName << " already exists and it shall be overwritten." << Colors::RESET() << endl;
|
||||||
}
|
}
|
||||||
ofstream file(bestFileName);
|
ofstream file(bestFileName);
|
||||||
file << bests;
|
file << bests;
|
||||||
file.close();
|
file.close();
|
||||||
|
return bestFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
string BestResults::bestResultFile()
|
string BestResults::bestResultFile()
|
||||||
@ -60,9 +62,43 @@ namespace platform {
|
|||||||
}
|
}
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
json BestResults::loadFile(const string& fileName)
|
||||||
|
{
|
||||||
|
ifstream resultData(fileName);
|
||||||
|
if (resultData.is_open()) {
|
||||||
|
json data = json::parse(resultData);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
throw invalid_argument("Unable to open result file. [" + fileName + "]");
|
||||||
|
}
|
||||||
|
|
||||||
void BestResults::report()
|
void BestResults::report()
|
||||||
{
|
{
|
||||||
|
string bestFileName = path + bestResultFile();
|
||||||
|
if (FILE* fileTest = fopen(bestFileName.c_str(), "r")) {
|
||||||
|
fclose(fileTest);
|
||||||
|
} else {
|
||||||
|
cerr << Colors::MAGENTA() << "File " << bestFileName << " doesn't exist." << Colors::RESET() << endl;
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
auto data = loadFile(bestFileName);
|
||||||
|
cout << Colors::GREEN() << "Best results for " << model << " and " << score << endl;
|
||||||
|
cout << "------------------------------------------" << endl;
|
||||||
|
cout << Colors::GREEN() << " # Dataset Score File Hyperparameters" << endl;
|
||||||
|
cout << "=== ========================= =========== ================================================================== ================================================= " << endl;
|
||||||
|
auto i = 0;
|
||||||
|
bool odd = true;
|
||||||
|
for (auto const& item : data.items()) {
|
||||||
|
auto color = odd ? Colors::BLUE() : Colors::CYAN();
|
||||||
|
cout << color << setw(3) << fixed << right << i++ << " ";
|
||||||
|
cout << setw(25) << left << item.key() << " ";
|
||||||
|
cout << setw(11) << setprecision(9) << fixed << item.value().at(0).get<double>() << " ";
|
||||||
|
cout << setw(66) << item.value().at(2).get<string>() << " ";
|
||||||
|
cout << item.value().at(1) << " ";
|
||||||
|
cout << endl;
|
||||||
|
odd = !odd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,17 +1,19 @@
|
|||||||
#ifndef BESTRESULTS_H
|
#ifndef BESTRESULTS_H
|
||||||
#define BESTRESULTS_H
|
#define BESTRESULTS_H
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using json = nlohmann::json;
|
||||||
namespace platform {
|
namespace platform {
|
||||||
class BestResults {
|
class BestResults {
|
||||||
public:
|
public:
|
||||||
explicit BestResults(const string& path, const string& score, const string& model) : path(path), score(score), model(model) {}
|
explicit BestResults(const string& path, const string& score, const string& model) : path(path), score(score), model(model) {}
|
||||||
void build();
|
string build();
|
||||||
void report();
|
void report();
|
||||||
private:
|
private:
|
||||||
vector<string> loadFiles();
|
vector<string> loadFiles();
|
||||||
string bestResultFile();
|
string bestResultFile();
|
||||||
|
json loadFile(const string& fileName);
|
||||||
string path;
|
string path;
|
||||||
string score;
|
string score;
|
||||||
string model;
|
string model;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
#include "Result.h"
|
#include "Result.h"
|
||||||
#include "Colors.h"
|
#include "Colors.h"
|
||||||
#include "BestScore.h"
|
#include "BestScore.h"
|
||||||
|
@ -2,14 +2,15 @@
|
|||||||
#include <argparse/argparse.hpp>
|
#include <argparse/argparse.hpp>
|
||||||
#include "Paths.h"
|
#include "Paths.h"
|
||||||
#include "BestResults.h"
|
#include "BestResults.h"
|
||||||
|
#include "Colors.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
argparse::ArgumentParser manageArguments(int argc, char** argv)
|
argparse::ArgumentParser manageArguments(int argc, char** argv)
|
||||||
{
|
{
|
||||||
argparse::ArgumentParser program("best");
|
argparse::ArgumentParser program("best");
|
||||||
program.add_argument("-m", "--model").default_value("any").help("Filter results of the selected model)");
|
program.add_argument("-m", "--model").default_value("").help("Filter results of the selected model)");
|
||||||
program.add_argument("-s", "--score").default_value("any").help("Filter results of the score name supplied");
|
program.add_argument("-s", "--score").default_value("").help("Filter results of the score name supplied");
|
||||||
program.add_argument("--build").help("build best score results file").default_value(false).implicit_value(true);
|
program.add_argument("--build").help("build best score results file").default_value(false).implicit_value(true);
|
||||||
program.add_argument("--report").help("report of best score results file").default_value(false).implicit_value(true);
|
program.add_argument("--report").help("report of best score results file").default_value(false).implicit_value(true);
|
||||||
try {
|
try {
|
||||||
@ -18,6 +19,9 @@ argparse::ArgumentParser manageArguments(int argc, char** argv)
|
|||||||
auto score = program.get<string>("score");
|
auto score = program.get<string>("score");
|
||||||
auto build = program.get<bool>("build");
|
auto build = program.get<bool>("build");
|
||||||
auto report = program.get<bool>("report");
|
auto report = program.get<bool>("report");
|
||||||
|
if (model == "" || score == "") {
|
||||||
|
throw runtime_error("Model and score name must be supplied");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (const exception& err) {
|
catch (const exception& err) {
|
||||||
cerr << err.what() << endl;
|
cerr << err.what() << endl;
|
||||||
@ -35,12 +39,14 @@ int main(int argc, char** argv)
|
|||||||
auto build = program.get<bool>("build");
|
auto build = program.get<bool>("build");
|
||||||
auto report = program.get<bool>("report");
|
auto report = program.get<bool>("report");
|
||||||
if (!report && !build) {
|
if (!report && !build) {
|
||||||
cout << "Either build, report or both, have to be selected to do anything!" << endl;
|
cerr << "Either build, report or both, have to be selected to do anything!" << endl;
|
||||||
|
cerr << program;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
auto results = platform::BestResults(platform::Paths::results(), model, score);
|
auto results = platform::BestResults(platform::Paths::results(), model, score);
|
||||||
if (build) {
|
if (build) {
|
||||||
results.build();
|
string fileName = results.build();
|
||||||
|
cout << Colors::GREEN() << fileName << " created!" << Colors::RESET() << endl;
|
||||||
}
|
}
|
||||||
if (report) {
|
if (report) {
|
||||||
results.report();
|
results.report();
|
||||||
|
Loading…
Reference in New Issue
Block a user