#ifndef TEST_UTILS_H #define TEST_UTILS_H #include #include #include #include #include #include #include "ArffFiles.hpp" #include "fimdlp/CPPFImdlp.h" #include "folding_config.h" bool file_exists(const std::string& name); std::pair, map> discretize(std::vector& X, mdlp::labels_t& y, std::vector features); std::vector discretizeDataset(std::vector& X, mdlp::labels_t& y); std::tuple>, std::vector, std::vector, std::string, map>> loadFile(const std::string& name); std::tuple, std::string, map>> loadDataset(const std::string& name, bool class_last, bool discretize_dataset); class RawDatasets { public: RawDatasets(const std::string& file_name, bool discretize) { // Xt can be either discretized or not tie(Xt, yt, featurest, classNamet, statest) = loadDataset(file_name, true, discretize); // Xv is always discretized tie(Xv, yv, featuresv, classNamev, statesv) = loadFile(file_name); auto yresized = torch::transpose(yt.view({ yt.size(0), 1 }), 0, 1); dataset = torch::cat({ Xt, yresized }, 0); nSamples = dataset.size(1); weights = torch::full({ nSamples }, 1.0 / nSamples, torch::kDouble); weightsv = std::vector(nSamples, 1.0 / nSamples); classNumStates = discretize ? statest.at(classNamet).size() : 0; } torch::Tensor Xt, yt, dataset, weights; std::vector> Xv; std::vector weightsv; std::vector yv; std::vector featurest, featuresv; map> statest, statesv; std::string classNamet, classNamev; int nSamples, classNumStates; double epsilon = 1e-5; }; class Paths { public: static std::string datasets() { std::string result = { folding_data_path.begin(), folding_data_path.end() }; return result + "/"; } static std::string csv() { return datasets() + "../csv/"; } }; class CSVFiles { public: static void write_csv(std::string fname, std::vector indices) { std::ofstream file(Paths::csv() + fname); for (auto i = 0; i < indices.size(); ++i) { file << indices[i] << std::endl; } file.close(); } static std::vector read_csv(std::string fname) { std::ifstream file(Paths::csv() + fname); std::vector indices; std::string line; while (std::getline(file, line)) { indices.push_back(std::stoi(line)); } file.close(); return indices; } }; #endif //TEST_UTILS_H