eis/eqpalg/.do_not_use/data_handler/rs_tools.cc

91 lines
2.6 KiB
C++

#include <eqpalg/data_handler/rs_tools.h>
#include <filesystem>
#include <dlib/statistics.h>
#include <dlib/serialize.h>
#define STAT_DATA_PATH "/users/dsc/stat_data"
namespace data_handler {
std::string get_data_path(std::string ruleId, int dim) {
return std::string(STAT_DATA_PATH) + "/" + ruleId + "_" + std::to_string(dim);
}
std::string get_total_rs_path(std::string ruleId, int dim) {
return get_data_path(ruleId, dim) + ".dat";
}
size_t get_rs_count(std::string ruleId, int dim) {
size_t rs_count = 0;
for (const auto& entry :
std::filesystem::directory_iterator(STAT_DATA_PATH)) {
if (entry.path().string().find(ruleId + "_" + std::to_string(dim)) !=
std::string::npos) {
rs_count++;
}
}
return rs_count;
}
std::string get_this_rs_path(std::string ruleId, int dim) {
return get_data_path(ruleId, dim) + ".1.dat";
}
std::string get_prev_rs_path(std::string ruleId, int dim) {
return get_data_path(ruleId, dim) + ".2.dat";
}
bool remove_old_rs(std::string ruleId, int dim) {
auto prev_fpath = get_prev_rs_path(ruleId, dim);
if (std::filesystem::exists(prev_fpath)) {
std::filesystem::remove(prev_fpath);
return true;
}
return false;
}
bool move_this_rs_to_old(std::string ruleId, int dim) {
auto this_fpath = get_this_rs_path(ruleId, dim);
auto prev_fpath = get_prev_rs_path(ruleId, dim);
if (std::filesystem::exists(this_fpath)) {
std::filesystem::rename(this_fpath, prev_fpath);
return true;
}
return false;
}
std::optional<dlib::running_stats<double>> get_rs(
std::string ruleId, int dim,
std::function<std::string(std::string, int dim)> path_func) {
auto ps_path = path_func(ruleId, dim);
if (std::filesystem::exists(ps_path)) {
dlib::running_stats<double> rs_tmp;
std::ifstream ifs(ps_path, std::ios::binary);
if (ifs.is_open()) {
dlib::deserialize(rs_tmp, ifs);
ifs.close();
ifs.clear();
return rs_tmp;
}
}
return std::nullopt;
}
json get_running_stats_format(dlib::running_stats<double>&& rs) {
return json{{"平均数", rs.mean()}, {"方差", rs.variance()},
{"偏态系数", rs.skewness()}, {"超值峰度", rs.ex_kurtosis()},
{"最大值", rs.max()}, {"最小值", rs.min()},
{"总样本数", rs.current_n()}};
}
bool make_sure_stat_data_exist() {
std::filesystem::path stat_tool(std::string(STAT_DATA_PATH));
if (!std::filesystem::exists(stat_tool)) {
std::filesystem::create_directory(stat_tool);
}
if (!std::filesystem::exists(stat_tool)) {
return false;
}
return true;
}
} // namespace data_handler