#ifndef GRIDBASE_H #define GRIDBASE_H #include #include #include #include #include "common/Datasets.h" #include "common/Timer.h" #include "common/Colors.h" #include "main/HyperParameters.h" #include "GridData.h" #include "GridConfig.h" #include "bayesnet/network/Network.h" namespace platform { using json = nlohmann::ordered_json; class GridBase { public: explicit GridBase(struct ConfigGrid& config); ~GridBase() = default; void go(struct ConfigMPI& config_mpi); protected: virtual void save(json& results) = 0; virtual std::vector filterDatasets(Datasets& datasets) const = 0; virtual json initializeResults() = 0; virtual json producer(std::vector& names, json& tasks, struct ConfigMPI& config_mpi, MPI_Datatype& MPI_Result) = 0; virtual void consumer(Datasets& datasets, json& tasks, struct ConfigGrid& config, struct ConfigMPI& config_mpi, MPI_Datatype& MPI_Result) = 0; virtual void select_best_results_folds(json& results, json& all_results, std::string& model) = 0; virtual json store_result(std::vector& names, Task_Result& result, json& results) = 0; virtual void consumer_go(struct ConfigGrid& config, struct ConfigMPI& config_mpi, json& tasks, int n_task, Datasets& datasets, Task_Result* result) = 0; std::string get_color_rank(int rank); json build_tasks(); void summary(json& all_results, json& tasks, struct ConfigMPI& config_mpi); struct ConfigGrid config; Timer timer; // used to measure the time of the whole process const std::string separator = "|"; bayesnet::Smoothing_t smooth_type{ bayesnet::Smoothing_t::NONE }; }; } /* namespace platform */ #endif