From c69dc08134e900785a73fc914134dc256bcac9fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana=20G=C3=B3mez?= Date: Thu, 29 Feb 2024 12:53:11 +0100 Subject: [PATCH 1/3] Begin b_list excel --- .clang-uml | 4 +- CMakeLists.txt | 1 - lib/PyClassifiers | 2 +- sample/CMakeLists.txt | 5 ++- src/CMakeLists.txt | 51 +++++++++++++++-------- src/{modules => best}/BestResults.cc | 6 +-- src/{modules => best}/BestResults.h | 0 src/{modules => best}/BestResultsExcel.cc | 9 ++-- src/{modules => best}/BestResultsExcel.h | 4 +- src/{modules => best}/BestScore.h | 0 src/{modules => best}/Statistics.cc | 0 src/{modules => best}/Statistics.h | 0 src/{ => best}/b_best.cc | 1 + src/{modules => common}/CLocale.h | 0 src/{modules => common}/Colors.h | 0 src/{modules => common}/Dataset.cc | 0 src/{modules => common}/Dataset.h | 0 src/{modules => common}/Datasets.cc | 0 src/{modules => common}/Datasets.h | 0 src/{modules => common}/DotEnv.h | 0 src/{modules => common}/Paths.h | 0 src/{modules => common}/Symbols.h | 0 src/{modules => common}/Timer.h | 0 src/{modules => common}/Utils.h | 0 src/{modules => grid}/GridData.cc | 0 src/{modules => grid}/GridData.h | 0 src/{modules => grid}/GridSearch.cc | 0 src/{modules => grid}/GridSearch.h | 0 src/{ => grid}/b_grid.cc | 0 src/list/DatasetsExcel.cc | 51 +++++++++++++++++++++++ src/list/DatasetsExcel.h | 22 ++++++++++ src/{ => list}/b_list.cc | 15 +++++++ src/{modules => main}/Experiment.cc | 0 src/{modules => main}/Experiment.h | 0 src/{modules => main}/HyperParameters.cc | 0 src/{modules => main}/HyperParameters.h | 0 src/{modules => main}/Models.cc | 0 src/{modules => main}/Models.h | 0 src/{modules => main}/PartialResult.h | 0 src/{modules => main}/Result.cc | 0 src/{modules => main}/Result.h | 0 src/{ => main}/b_main.cc | 0 src/{modules => main}/modelRegister.h | 0 src/{modules => manage}/CommandParser.cc | 0 src/{modules => manage}/CommandParser.h | 0 src/{modules => manage}/ManageResults.cc | 2 +- src/{modules => manage}/ManageResults.h | 0 src/{modules => manage}/Results.cc | 0 src/{modules => manage}/Results.h | 0 src/{ => manage}/b_manage.cc | 0 src/{modules => reports}/ExcelFile.cc | 7 ++++ src/{modules => reports}/ExcelFile.h | 3 ++ src/{modules => reports}/ReportBase.cc | 0 src/{modules => reports}/ReportBase.h | 0 src/{modules => reports}/ReportConsole.cc | 3 +- src/{modules => reports}/ReportConsole.h | 0 src/{modules => reports}/ReportExcel.cc | 1 - src/{modules => reports}/ReportExcel.h | 0 58 files changed, 148 insertions(+), 39 deletions(-) rename src/{modules => best}/BestResults.cc (98%) rename src/{modules => best}/BestResults.h (100%) rename src/{modules => best}/BestResultsExcel.cc (98%) rename src/{modules => best}/BestResultsExcel.h (90%) rename src/{modules => best}/BestScore.h (100%) rename src/{modules => best}/Statistics.cc (100%) rename src/{modules => best}/Statistics.h (100%) rename src/{ => best}/b_best.cc (98%) rename src/{modules => common}/CLocale.h (100%) rename src/{modules => common}/Colors.h (100%) rename src/{modules => common}/Dataset.cc (100%) rename src/{modules => common}/Dataset.h (100%) rename src/{modules => common}/Datasets.cc (100%) rename src/{modules => common}/Datasets.h (100%) rename src/{modules => common}/DotEnv.h (100%) rename src/{modules => common}/Paths.h (100%) rename src/{modules => common}/Symbols.h (100%) rename src/{modules => common}/Timer.h (100%) rename src/{modules => common}/Utils.h (100%) rename src/{modules => grid}/GridData.cc (100%) rename src/{modules => grid}/GridData.h (100%) rename src/{modules => grid}/GridSearch.cc (100%) rename src/{modules => grid}/GridSearch.h (100%) rename src/{ => grid}/b_grid.cc (100%) create mode 100644 src/list/DatasetsExcel.cc create mode 100644 src/list/DatasetsExcel.h rename src/{ => list}/b_list.cc (78%) rename src/{modules => main}/Experiment.cc (100%) rename src/{modules => main}/Experiment.h (100%) rename src/{modules => main}/HyperParameters.cc (100%) rename src/{modules => main}/HyperParameters.h (100%) rename src/{modules => main}/Models.cc (100%) rename src/{modules => main}/Models.h (100%) rename src/{modules => main}/PartialResult.h (100%) rename src/{modules => main}/Result.cc (100%) rename src/{modules => main}/Result.h (100%) rename src/{ => main}/b_main.cc (100%) rename src/{modules => main}/modelRegister.h (100%) rename src/{modules => manage}/CommandParser.cc (100%) rename src/{modules => manage}/CommandParser.h (100%) rename src/{modules => manage}/ManageResults.cc (99%) rename src/{modules => manage}/ManageResults.h (100%) rename src/{modules => manage}/Results.cc (100%) rename src/{modules => manage}/Results.h (100%) rename src/{ => manage}/b_manage.cc (100%) rename src/{modules => reports}/ExcelFile.cc (97%) rename src/{modules => reports}/ExcelFile.h (94%) rename src/{modules => reports}/ReportBase.cc (100%) rename src/{modules => reports}/ReportBase.h (100%) rename src/{modules => reports}/ReportConsole.cc (97%) rename src/{modules => reports}/ReportConsole.h (100%) rename src/{modules => reports}/ReportExcel.cc (99%) rename src/{modules => reports}/ReportExcel.h (100%) diff --git a/.clang-uml b/.clang-uml index e5e6e41..46de6dd 100644 --- a/.clang-uml +++ b/.clang-uml @@ -5,7 +5,7 @@ diagrams: type: class glob: - src/*.cc - - src/Command/*.cc + - src/modules/*.cc using_namespace: platform include: namespaces: @@ -17,7 +17,7 @@ diagrams: sequence: type: sequence glob: - - src/Command/b_main.cc + - src/b_main.cc combine_free_functions_into_file_participants: true using_namespace: - std diff --git a/CMakeLists.txt b/CMakeLists.txt index b54c2f5..e708cc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,7 +78,6 @@ message("XLSXWRITER_LIB=${XLSXWRITER_LIB}") # Subdirectories # -------------- -set(Platform_MODULES ${Platform_SOURCE_DIR}/src/modules/) add_subdirectory(config) add_subdirectory(src) add_subdirectory(sample) diff --git a/lib/PyClassifiers b/lib/PyClassifiers index bd6f6f5..0608c0a 160000 --- a/lib/PyClassifiers +++ b/lib/PyClassifiers @@ -1 +1 @@ -Subproject commit bd6f6f58375407ce1c9cae671d8e82fa5429f9e3 +Subproject commit 0608c0a52a3cecdf6abd02138ccfe956ffe9ebef diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt index 2545059..63148de 100644 --- a/sample/CMakeLists.txt +++ b/sample/CMakeLists.txt @@ -1,5 +1,6 @@ include_directories( - ${Platform_SOURCE_DIR}/src/modules + ${Platform_SOURCE_DIR}/src/common + ${Platform_SOURCE_DIR}/src/main ${Platform_SOURCE_DIR}/lib/PyClassifiers/src ${Python3_INCLUDE_DIRS} ${Platform_SOURCE_DIR}/lib/Files @@ -10,5 +11,5 @@ include_directories( ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/lib/json/include ${CMAKE_BINARY_DIR}/configured_files/include ) -add_executable(PlatformSample sample.cc ${Platform_MODULES}/Models.cc) +add_executable(PlatformSample sample.cc ${Platform_SOURCE_DIR}/src/main/Models.cc) target_link_libraries(PlatformSample PyClassifiers ArffFiles mdlp "${TORCH_LIBRARIES}") \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 23f3b32..42e65c8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,10 +1,10 @@ include_directories( + ## Libs ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/src ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/lib/folding ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/lib/mdlp ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/lib/json/include ${Platform_SOURCE_DIR}/lib/PyClassifiers/src - ${Platform_MODULES} ${Platform_SOURCE_DIR}/lib/Files ${Platform_SOURCE_DIR}/lib/mdlp ${Platform_SOURCE_DIR}/lib/argparse/include @@ -13,24 +13,41 @@ include_directories( ${Python3_INCLUDE_DIRS} ${MPI_CXX_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}/configured_files/include + ## Platform + ${Platform_SOURCE_DIR}/src/common + ${Platform_SOURCE_DIR}/src/best + ${Platform_SOURCE_DIR}/src/grid + ${Platform_SOURCE_DIR}/src/main + ${Platform_SOURCE_DIR}/src/manage + ${Platform_SOURCE_DIR}/src/reports ) -set(best_sources BestResults.cc Result.cc Statistics.cc BestResultsExcel.cc ReportExcel.cc ReportBase.cc Datasets.cc Dataset.cc ExcelFile.cc) -list(TRANSFORM best_sources PREPEND ${Platform_MODULES}) -add_executable(b_best b_best.cc ${best_sources}) -set(grid_sources GridSearch.cc GridData.cc HyperParameters.cc Datasets.cc Dataset.cc Models.cc) -list(TRANSFORM grid_sources PREPEND ${Platform_MODULES}) -add_executable(b_grid b_grid.cc ${grid_sources}) -add_executable(b_list b_list.cc ${Platform_MODULES}Datasets.cc ${Platform_MODULES}Dataset.cc) -set(main_sources Experiment.cc Datasets.cc Dataset.cc Models.cc HyperParameters.cc ReportConsole.cc ReportBase.cc Result.cc) -list(TRANSFORM main_sources PREPEND ${Platform_MODULES}) -add_executable(b_main b_main.cc ${main_sources}) -set(manage_sources Results.cc ManageResults.cc CommandParser.cc Result.cc ReportConsole.cc ReportExcel.cc ReportBase.cc Datasets.cc Dataset.cc ExcelFile.cc) -list(TRANSFORM manage_sources PREPEND ${Platform_MODULES}) -add_executable(b_manage b_manage.cc ${manage_sources}) - +# b_best +set(best_sources b_best.cc BestResults.cc Statistics.cc BestResultsExcel.cc) +list(TRANSFORM best_sources PREPEND best/) +add_executable(b_best ${best_sources} main/Result.cc reports/ReportExcel.cc reports/ReportBase.cc reports/ExcelFile.cc common/Datasets.cc common/Dataset.cc) target_link_libraries(b_best Boost::boost "${XLSXWRITER_LIB}" "${TORCH_LIBRARIES}" ArffFiles mdlp) + +# b_grid +set(grid_sources b_grid.cc GridSearch.cc GridData.cc) +list(TRANSFORM grid_sources PREPEND grid/) +add_executable(b_grid ${grid_sources} main/HyperParameters.cc main/Models.cc common/Datasets.cc common/Dataset.cc) target_link_libraries(b_grid PyClassifiers ${MPI_CXX_LIBRARIES} ArffFiles) -target_link_libraries(b_list ArffFiles mdlp "${TORCH_LIBRARIES}") + +# b_list +set(list_sources b_list.cc DatasetsExcel.cc) +list(TRANSFORM list_sources PREPEND list/) +add_executable(b_list ${list_sources} common/Datasets.cc common/Dataset.cc reports/ReportExcel.cc reports/ExcelFile.cc reports/ReportBase.cc) +target_link_libraries(b_list ArffFiles mdlp "${TORCH_LIBRARIES}" "${XLSXWRITER_LIB}") + +# b_main +set(main_sources b_main.cc Experiment.cc Models.cc HyperParameters.cc) +list(TRANSFORM main_sources PREPEND main/) +add_executable(b_main ${main_sources} common/Datasets.cc common/Dataset.cc reports/ReportConsole.cc reports/ReportBase.cc main/Result.cc) target_link_libraries(b_main PyClassifiers BayesNet ArffFiles mdlp "${TORCH_LIBRARIES}") -target_link_libraries(b_manage "${TORCH_LIBRARIES}" "${XLSXWRITER_LIB}" ArffFiles mdlp) \ No newline at end of file + +# b_manage +set(manage_sources b_manage.cc ManageResults.cc CommandParser.cc Results.cc) +list(TRANSFORM manage_sources PREPEND manage/) +add_executable(b_manage ${manage_sources} main/Result.cc reports/ReportConsole.cc reports/ReportExcel.cc reports/ReportBase.cc reports/ExcelFile.cc common/Datasets.cc common/Dataset.cc) +target_link_libraries(b_manage "${TORCH_LIBRARIES}" "${XLSXWRITER_LIB}" ArffFiles mdlp) diff --git a/src/modules/BestResults.cc b/src/best/BestResults.cc similarity index 98% rename from src/modules/BestResults.cc rename to src/best/BestResults.cc index 66742fa..33cd26b 100644 --- a/src/modules/BestResults.cc +++ b/src/best/BestResults.cc @@ -302,9 +302,9 @@ namespace platform { // Build the table of results json table = buildTableResults(models); std::vector datasets = getDatasets(table.begin().value()); - BestResultsExcel excel(score, datasets); - excel.reportSingle(model, path + bestResultFile()); - messageExcelFile(excel.getFileName()); + BestResultsExcel excel_report(score, datasets); + excel_report.reportSingle(model, path + bestResultFile()); + messageExcelFile(excel_report.getFileName()); } } void BestResults::reportAll(bool excel) diff --git a/src/modules/BestResults.h b/src/best/BestResults.h similarity index 100% rename from src/modules/BestResults.h rename to src/best/BestResults.h diff --git a/src/modules/BestResultsExcel.cc b/src/best/BestResultsExcel.cc similarity index 98% rename from src/modules/BestResultsExcel.cc rename to src/best/BestResultsExcel.cc index 05ab3f8..61b7b08 100644 --- a/src/modules/BestResultsExcel.cc +++ b/src/best/BestResultsExcel.cc @@ -32,11 +32,11 @@ namespace platform { } BestResultsExcel::BestResultsExcel(const std::string& score, const std::vector& datasets) : score(score), datasets(datasets) { - workbook = workbook_new((Paths::excel() + fileName).c_str()); + file_name = "BestResults.xlsx"; + workbook = workbook_new(getFileName().c_str()); setProperties("Best Results"); int maxDatasetName = (*max_element(datasets.begin(), datasets.end(), [](const std::string& a, const std::string& b) { return a.size() < b.size(); })).size(); datasetNameSize = std::max(datasetNameSize, maxDatasetName); - createFormats(); } void BestResultsExcel::reportAll(const std::vector& models, const json& table, const std::map>& ranks, bool friedman, double significance) { @@ -170,10 +170,7 @@ namespace platform { doFriedman(); } } - std::string BestResultsExcel::getFileName() - { - return Paths::excel() + fileName; - } + void BestResultsExcel::header(bool ranks) { row = 0; diff --git a/src/modules/BestResultsExcel.h b/src/best/BestResultsExcel.h similarity index 90% rename from src/modules/BestResultsExcel.h rename to src/best/BestResultsExcel.h index 1ab75d0..b700547 100644 --- a/src/modules/BestResultsExcel.h +++ b/src/best/BestResultsExcel.h @@ -9,13 +9,12 @@ using json = nlohmann::json; namespace platform { - class BestResultsExcel : ExcelFile { + class BestResultsExcel : public ExcelFile { public: BestResultsExcel(const std::string& score, const std::vector& datasets); ~BestResultsExcel(); void reportAll(const std::vector& models, const json& table, const std::map>& ranks, bool friedman, double significance); void reportSingle(const std::string& model, const std::string& fileName); - std::string getFileName(); private: void build(); void header(bool ranks); @@ -24,7 +23,6 @@ namespace platform { void formatColumns(); void doFriedman(); void addConditionalFormat(std::string formula); - const std::string fileName = "BestResults.xlsx"; std::string score; std::vector models; std::vector datasets; diff --git a/src/modules/BestScore.h b/src/best/BestScore.h similarity index 100% rename from src/modules/BestScore.h rename to src/best/BestScore.h diff --git a/src/modules/Statistics.cc b/src/best/Statistics.cc similarity index 100% rename from src/modules/Statistics.cc rename to src/best/Statistics.cc diff --git a/src/modules/Statistics.h b/src/best/Statistics.h similarity index 100% rename from src/modules/Statistics.h rename to src/best/Statistics.h diff --git a/src/b_best.cc b/src/best/b_best.cc similarity index 98% rename from src/b_best.cc rename to src/best/b_best.cc index ca1de0f..aee3cc4 100644 --- a/src/b_best.cc +++ b/src/best/b_best.cc @@ -65,5 +65,6 @@ int main(int argc, char** argv) std::cout << Colors::GREEN() << fileName << " created!" << Colors::RESET() << std::endl; results.reportSingle(excel); } + std::cout << Colors::RESET(); return 0; } diff --git a/src/modules/CLocale.h b/src/common/CLocale.h similarity index 100% rename from src/modules/CLocale.h rename to src/common/CLocale.h diff --git a/src/modules/Colors.h b/src/common/Colors.h similarity index 100% rename from src/modules/Colors.h rename to src/common/Colors.h diff --git a/src/modules/Dataset.cc b/src/common/Dataset.cc similarity index 100% rename from src/modules/Dataset.cc rename to src/common/Dataset.cc diff --git a/src/modules/Dataset.h b/src/common/Dataset.h similarity index 100% rename from src/modules/Dataset.h rename to src/common/Dataset.h diff --git a/src/modules/Datasets.cc b/src/common/Datasets.cc similarity index 100% rename from src/modules/Datasets.cc rename to src/common/Datasets.cc diff --git a/src/modules/Datasets.h b/src/common/Datasets.h similarity index 100% rename from src/modules/Datasets.h rename to src/common/Datasets.h diff --git a/src/modules/DotEnv.h b/src/common/DotEnv.h similarity index 100% rename from src/modules/DotEnv.h rename to src/common/DotEnv.h diff --git a/src/modules/Paths.h b/src/common/Paths.h similarity index 100% rename from src/modules/Paths.h rename to src/common/Paths.h diff --git a/src/modules/Symbols.h b/src/common/Symbols.h similarity index 100% rename from src/modules/Symbols.h rename to src/common/Symbols.h diff --git a/src/modules/Timer.h b/src/common/Timer.h similarity index 100% rename from src/modules/Timer.h rename to src/common/Timer.h diff --git a/src/modules/Utils.h b/src/common/Utils.h similarity index 100% rename from src/modules/Utils.h rename to src/common/Utils.h diff --git a/src/modules/GridData.cc b/src/grid/GridData.cc similarity index 100% rename from src/modules/GridData.cc rename to src/grid/GridData.cc diff --git a/src/modules/GridData.h b/src/grid/GridData.h similarity index 100% rename from src/modules/GridData.h rename to src/grid/GridData.h diff --git a/src/modules/GridSearch.cc b/src/grid/GridSearch.cc similarity index 100% rename from src/modules/GridSearch.cc rename to src/grid/GridSearch.cc diff --git a/src/modules/GridSearch.h b/src/grid/GridSearch.h similarity index 100% rename from src/modules/GridSearch.h rename to src/grid/GridSearch.h diff --git a/src/b_grid.cc b/src/grid/b_grid.cc similarity index 100% rename from src/b_grid.cc rename to src/grid/b_grid.cc diff --git a/src/list/DatasetsExcel.cc b/src/list/DatasetsExcel.cc new file mode 100644 index 0000000..8e55c11 --- /dev/null +++ b/src/list/DatasetsExcel.cc @@ -0,0 +1,51 @@ +#include +#include "DatasetsExcel.h" +#include "Paths.h" + + +namespace platform { + DatasetsExcel::DatasetsExcel() + { + file_name = "datasets.xlsx"; + workbook = workbook_new(getFileName().c_str()); + setProperties("Datasets"); + } + DatasetsExcel::~DatasetsExcel() + { + workbook_close(workbook); + } + void DatasetsExcel::report() + { + worksheet = workbook_add_worksheet(workbook, "Datasets"); + formatColumns(); + worksheet_merge_range(worksheet, 0, 0, 0, 4, "Datasets", styles["headerFirst"]); + // Body header + row = 3; + int col = 1; + int i = 0; + // Get Datasets + // auto data = platform::Datasets(false, platform::Paths::datasets()); + // auto datasets = data.getNames(); + auto datasets = std::vector{ "iris", "wine", "digits", "breast_cancer" }; + int maxDatasetName = (*std::max_element(datasets.begin(), datasets.end(), [](const std::string& a, const std::string& b) { return a.size() < b.size(); })).size(); + datasetNameSize = std::max(datasetNameSize, maxDatasetName); + writeString(row, 0, "Nº", "bodyHeader"); + writeString(row, 1, "Dataset", "bodyHeader"); + for (auto const& name : datasets) { + row++; + writeInt(row, 0, i++, "ints"); + writeString(row, 1, name.c_str(), "text"); + } + row++; + formatColumns(); + } + + void DatasetsExcel::formatColumns() + { + worksheet_freeze_panes(worksheet, 4, 2); + std::vector columns_sizes = { 5, datasetNameSize }; + for (int i = 0; i < columns_sizes.size(); ++i) { + worksheet_set_column(worksheet, i, i, columns_sizes.at(i), NULL); + } + } +} \ No newline at end of file diff --git a/src/list/DatasetsExcel.h b/src/list/DatasetsExcel.h new file mode 100644 index 0000000..31737fd --- /dev/null +++ b/src/list/DatasetsExcel.h @@ -0,0 +1,22 @@ +#ifndef DATASETS_EXCEL_H +#define DATASETS_EXCEL_H +#include "ExcelFile.h" +#include +#include +#include + +using json = nlohmann::json; + +namespace platform { + + class DatasetsExcel : public ExcelFile { + public: + DatasetsExcel(); + ~DatasetsExcel(); + void report(); + private: + void formatColumns(); + int datasetNameSize = 25; // Min size of the column + }; +} +#endif //DATASETS_EXCEL_H \ No newline at end of file diff --git a/src/b_list.cc b/src/list/b_list.cc similarity index 78% rename from src/b_list.cc rename to src/list/b_list.cc index feda478..741c43a 100644 --- a/src/b_list.cc +++ b/src/list/b_list.cc @@ -1,8 +1,11 @@ #include #include +#include #include "Paths.h" #include "Colors.h" #include "Datasets.h" +#include "DatasetsExcel.h" +#include "config.h" const int BALANCE_LENGTH = 75; @@ -27,6 +30,13 @@ void outputBalance(const std::string& balance) int main(int argc, char** argv) { auto data = platform::Datasets(false, platform::Paths::datasets()); + argparse::ArgumentParser program("b_list", { project_version.begin(), project_version.end() }); + program.add_argument("--excel") + .help("Output in Excel format") + .default_value(false) + .implicit_value(true); + program.parse_args(argc, argv); + auto excel = program.get("--excel"); locale mylocale(std::cout.getloc(), new separated); locale::global(mylocale); std::cout.imbue(mylocale); @@ -52,5 +62,10 @@ int main(int argc, char** argv) outputBalance(oss.str()); } std::cout << Colors::RESET() << std::endl; + if (excel) { + auto report = platform::DatasetsExcel(); + report.report(); + std::cout << "Output saved in " << report.getFileName() << std::endl; + } return 0; } diff --git a/src/modules/Experiment.cc b/src/main/Experiment.cc similarity index 100% rename from src/modules/Experiment.cc rename to src/main/Experiment.cc diff --git a/src/modules/Experiment.h b/src/main/Experiment.h similarity index 100% rename from src/modules/Experiment.h rename to src/main/Experiment.h diff --git a/src/modules/HyperParameters.cc b/src/main/HyperParameters.cc similarity index 100% rename from src/modules/HyperParameters.cc rename to src/main/HyperParameters.cc diff --git a/src/modules/HyperParameters.h b/src/main/HyperParameters.h similarity index 100% rename from src/modules/HyperParameters.h rename to src/main/HyperParameters.h diff --git a/src/modules/Models.cc b/src/main/Models.cc similarity index 100% rename from src/modules/Models.cc rename to src/main/Models.cc diff --git a/src/modules/Models.h b/src/main/Models.h similarity index 100% rename from src/modules/Models.h rename to src/main/Models.h diff --git a/src/modules/PartialResult.h b/src/main/PartialResult.h similarity index 100% rename from src/modules/PartialResult.h rename to src/main/PartialResult.h diff --git a/src/modules/Result.cc b/src/main/Result.cc similarity index 100% rename from src/modules/Result.cc rename to src/main/Result.cc diff --git a/src/modules/Result.h b/src/main/Result.h similarity index 100% rename from src/modules/Result.h rename to src/main/Result.h diff --git a/src/b_main.cc b/src/main/b_main.cc similarity index 100% rename from src/b_main.cc rename to src/main/b_main.cc diff --git a/src/modules/modelRegister.h b/src/main/modelRegister.h similarity index 100% rename from src/modules/modelRegister.h rename to src/main/modelRegister.h diff --git a/src/modules/CommandParser.cc b/src/manage/CommandParser.cc similarity index 100% rename from src/modules/CommandParser.cc rename to src/manage/CommandParser.cc diff --git a/src/modules/CommandParser.h b/src/manage/CommandParser.h similarity index 100% rename from src/modules/CommandParser.h rename to src/manage/CommandParser.h diff --git a/src/modules/ManageResults.cc b/src/manage/ManageResults.cc similarity index 99% rename from src/modules/ManageResults.cc rename to src/manage/ManageResults.cc index 196fe3c..45a3f9e 100644 --- a/src/modules/ManageResults.cc +++ b/src/manage/ManageResults.cc @@ -164,7 +164,7 @@ namespace platform { if (indexList) { std::tie(option, index) = parser.parse(Colors::GREEN(), mainOptions, 'r', numFiles - 1); } else { - std::tie(option, subIndex) = parser.parse(Colors::MAGENTA(), listOptions, 'r', results.at(index).getJson()["results"].size() - 1); + std::tie(option, subIndex) = parser.parse(Colors::CYAN(), listOptions, 'r', results.at(index).getJson()["results"].size() - 1); } switch (option) { case 'q': diff --git a/src/modules/ManageResults.h b/src/manage/ManageResults.h similarity index 100% rename from src/modules/ManageResults.h rename to src/manage/ManageResults.h diff --git a/src/modules/Results.cc b/src/manage/Results.cc similarity index 100% rename from src/modules/Results.cc rename to src/manage/Results.cc diff --git a/src/modules/Results.h b/src/manage/Results.h similarity index 100% rename from src/modules/Results.h rename to src/manage/Results.h diff --git a/src/b_manage.cc b/src/manage/b_manage.cc similarity index 100% rename from src/b_manage.cc rename to src/manage/b_manage.cc diff --git a/src/modules/ExcelFile.cc b/src/reports/ExcelFile.cc similarity index 97% rename from src/modules/ExcelFile.cc rename to src/reports/ExcelFile.cc index 0300ab3..cf51110 100644 --- a/src/modules/ExcelFile.cc +++ b/src/reports/ExcelFile.cc @@ -4,14 +4,17 @@ namespace platform { ExcelFile::ExcelFile() { setDefault(); + createFormats(); } ExcelFile::ExcelFile(lxw_workbook* workbook) : workbook(workbook) { setDefault(); + createFormats(); } ExcelFile::ExcelFile(lxw_workbook* workbook, lxw_worksheet* worksheet) : workbook(workbook), worksheet(worksheet) { setDefault(); + createFormats(); } void ExcelFile::setDefault() { @@ -26,6 +29,10 @@ namespace platform { { return workbook; } + std::string ExcelFile::getFileName() + { + return Paths::excel() + file_name; + } void ExcelFile::setProperties(std::string title) { char line[title.size() + 1]; diff --git a/src/modules/ExcelFile.h b/src/reports/ExcelFile.h similarity index 94% rename from src/modules/ExcelFile.h rename to src/reports/ExcelFile.h index efc115f..199f587 100644 --- a/src/modules/ExcelFile.h +++ b/src/reports/ExcelFile.h @@ -3,6 +3,7 @@ #include #include #include +#include "Paths.h" #include "xlsxwriter.h" namespace platform { @@ -19,6 +20,7 @@ namespace platform { ExcelFile(lxw_workbook* workbook); ExcelFile(lxw_workbook* workbook, lxw_worksheet* worksheet); lxw_workbook* getWorkbook(); + std::string getFileName(); protected: void setProperties(std::string title); void writeString(int row, int col, const std::string& text, const std::string& style = ""); @@ -36,6 +38,7 @@ namespace platform { uint32_t colorTitle; uint32_t colorOdd; uint32_t colorEven; + std::string file_name; private: void setDefault(); }; diff --git a/src/modules/ReportBase.cc b/src/reports/ReportBase.cc similarity index 100% rename from src/modules/ReportBase.cc rename to src/reports/ReportBase.cc diff --git a/src/modules/ReportBase.h b/src/reports/ReportBase.h similarity index 100% rename from src/modules/ReportBase.h rename to src/reports/ReportBase.h diff --git a/src/modules/ReportConsole.cc b/src/reports/ReportConsole.cc similarity index 97% rename from src/modules/ReportConsole.cc rename to src/reports/ReportConsole.cc index 7f6ef0d..d483c6a 100644 --- a/src/modules/ReportConsole.cc +++ b/src/reports/ReportConsole.cc @@ -94,10 +94,10 @@ namespace platform { std::cout << headerLine(fVector("Test scores: ", lastResult["scores_test"], 14, 12)); std::cout << headerLine(fVector("Train times: ", lastResult["times_train"], 10, 3)); std::cout << headerLine(fVector("Test times: ", lastResult["times_test"], 10, 3)); - std::cout << std::string(MAXL, '*') << std::endl; } else { footer(totalScore); } + std::cout << std::string(MAXL, '*') << Colors::RESET() << std::endl; } void ReportConsole::showSummary() { @@ -124,6 +124,5 @@ namespace platform { if (!getExistBestFile() && compare) { std::cout << headerLine("*** Best Results File not found. Couldn't compare any result!"); } - std::cout << std::string(MAXL, '*') << std::endl << Colors::RESET(); } } \ No newline at end of file diff --git a/src/modules/ReportConsole.h b/src/reports/ReportConsole.h similarity index 100% rename from src/modules/ReportConsole.h rename to src/reports/ReportConsole.h diff --git a/src/modules/ReportExcel.cc b/src/reports/ReportExcel.cc similarity index 99% rename from src/modules/ReportExcel.cc rename to src/reports/ReportExcel.cc index b441280..953c304 100644 --- a/src/modules/ReportExcel.cc +++ b/src/reports/ReportExcel.cc @@ -49,7 +49,6 @@ namespace platform { createWorksheet(); } setProperties(data["title"].get()); - createFormats(); formatColumns(); } diff --git a/src/modules/ReportExcel.h b/src/reports/ReportExcel.h similarity index 100% rename from src/modules/ReportExcel.h rename to src/reports/ReportExcel.h From b68d520726c91852f17c77d85dddb80172f41005 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana=20G=C3=B3mez?= Date: Thu, 29 Feb 2024 13:20:37 +0100 Subject: [PATCH 2/3] Fix excel constructor --- .vscode/launch.json | 24 +++++++++++++----------- Makefile | 16 ---------------- src/CMakeLists.txt | 6 +++--- src/best/BestResultsExcel.cc | 1 + src/list/DatasetsExcel.cc | 1 + src/reports/ExcelFile.cc | 4 +--- src/reports/ExcelFile.h | 1 - src/reports/ReportExcel.cc | 1 + 8 files changed, 20 insertions(+), 34 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 25c9e26..ad6ce9b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -2,9 +2,9 @@ "version": "0.2.0", "configurations": [ { + "name": "sample", "type": "lldb", "request": "launch", - "name": "sample", "program": "${workspaceFolder}/build_debug/sample/BayesNetSample", "args": [ "-d", @@ -14,14 +14,14 @@ "-s", "271", "-p", - "/Users/rmontanana/Code/discretizbench/datasets/", + "${workspaceFolder}/../discretizbench/datasets/", ], //"cwd": "${workspaceFolder}/build/sample/", }, { + "name": "experimentPy", "type": "lldb", "request": "launch", - "name": "experimentPy", "program": "${workspaceFolder}/build_debug/src/b_main", "args": [ "-m", @@ -36,9 +36,9 @@ "cwd": "${workspaceFolder}/../discretizbench", }, { + "name": "gridsearch", "type": "lldb", "request": "launch", - "name": "gridsearch", "program": "${workspaceFolder}/build_debug/src/b_grid", "args": [ "-m", @@ -52,9 +52,9 @@ "cwd": "${workspaceFolder}/../discretizbench", }, { + "name": "experimentBayes", "type": "lldb", "request": "launch", - "name": "experimentBayes", "program": "${workspaceFolder}/build_debug/src/b_main", "args": [ "-m", @@ -69,23 +69,23 @@ "cwd": "/home/rmontanana/Code/discretizbench", }, { + "name": "best", "type": "lldb", "request": "launch", - "name": "best", "program": "${workspaceFolder}/build_debug/src/b_best", "args": [ "-m", "BoostAODE", "-s", "accuracy", - "--build", + "--excel" ], "cwd": "${workspaceFolder}/../discretizbench", }, { + "name": "manage", "type": "lldb", "request": "launch", - "name": "manage", "program": "${workspaceFolder}/build_debug/src/b_manage", "args": [ "-n", @@ -94,18 +94,20 @@ "cwd": "${workspaceFolder}/../discretizbench", }, { + "name": "list", "type": "lldb", "request": "launch", - "name": "list", "program": "${workspaceFolder}/build_debug/src/b_list", - "args": [], + "args": [ + "--excel" + ], //"cwd": "/Users/rmontanana/Code/discretizbench", "cwd": "${workspaceFolder}/../discretizbench", }, { + "name": "test", "type": "lldb", "request": "launch", - "name": "test", "program": "${workspaceFolder}/build_debug/tests/unit_tests", "args": [ "-c=\"Metrics Test\"", diff --git a/Makefile b/Makefile index f788e9c..1266f51 100644 --- a/Makefile +++ b/Makefile @@ -96,22 +96,6 @@ test: ## Run tests (opt="-s") to verbose output the tests, (opt="-c='Test Maximu done @echo ">>> Done"; -opt = "" -testp: ## Run platform tests (opt="-s") to verbose output the tests, (opt="-c='Stratified Fold Test'") to run only that section - @echo ">>> Running Platform tests..."; - @$(MAKE) clean - @cmake --build $(f_debug) --target unit_tests_platform $(n_procs) - @if [ -f $(f_debug)/tests/unit_tests_platform ]; then cd $(f_debug)/tests ; ./unit_tests_platform $(opt) ; fi ; - @echo ">>> Done"; - -opt = "" -testb: ## Run Platform tests (opt="-s") to verbose output the tests, (opt="-c='Test Maximum Spanning Tree'") to run only that section - @echo ">>> Running Platform tests..."; - @$(MAKE) clean - @cmake --build $(f_debug) --target unit_tests_bayesnet $(n_procs) - @if [ -f $(f_debug)/tests/unit_tests_bayesnet ]; then cd $(f_debug)/tests ; ./unit_tests_bayesnet $(opt) ; fi ; - @echo ">>> Done"; - coverage: ## Run tests and generate coverage report (build/index.html) @echo ">>> Building tests with coverage..." @$(MAKE) test diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 42e65c8..bcece79 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,7 +26,7 @@ include_directories( set(best_sources b_best.cc BestResults.cc Statistics.cc BestResultsExcel.cc) list(TRANSFORM best_sources PREPEND best/) add_executable(b_best ${best_sources} main/Result.cc reports/ReportExcel.cc reports/ReportBase.cc reports/ExcelFile.cc common/Datasets.cc common/Dataset.cc) -target_link_libraries(b_best Boost::boost "${XLSXWRITER_LIB}" "${TORCH_LIBRARIES}" ArffFiles mdlp) +target_link_libraries(b_best Boost::boost "${TORCH_LIBRARIES}" "${XLSXWRITER_LIB}" ArffFiles mdlp) # b_grid set(grid_sources b_grid.cc GridSearch.cc GridData.cc) @@ -38,13 +38,13 @@ target_link_libraries(b_grid PyClassifiers ${MPI_CXX_LIBRARIES} ArffFiles) set(list_sources b_list.cc DatasetsExcel.cc) list(TRANSFORM list_sources PREPEND list/) add_executable(b_list ${list_sources} common/Datasets.cc common/Dataset.cc reports/ReportExcel.cc reports/ExcelFile.cc reports/ReportBase.cc) -target_link_libraries(b_list ArffFiles mdlp "${TORCH_LIBRARIES}" "${XLSXWRITER_LIB}") +target_link_libraries(b_list "${TORCH_LIBRARIES}" "${XLSXWRITER_LIB}" ArffFiles mdlp) # b_main set(main_sources b_main.cc Experiment.cc Models.cc HyperParameters.cc) list(TRANSFORM main_sources PREPEND main/) add_executable(b_main ${main_sources} common/Datasets.cc common/Dataset.cc reports/ReportConsole.cc reports/ReportBase.cc main/Result.cc) -target_link_libraries(b_main PyClassifiers BayesNet ArffFiles mdlp "${TORCH_LIBRARIES}") +target_link_libraries(b_main PyClassifiers BayesNet ArffFiles mdlp) # b_manage set(manage_sources b_manage.cc ManageResults.cc CommandParser.cc Results.cc) diff --git a/src/best/BestResultsExcel.cc b/src/best/BestResultsExcel.cc index 61b7b08..b70c04b 100644 --- a/src/best/BestResultsExcel.cc +++ b/src/best/BestResultsExcel.cc @@ -37,6 +37,7 @@ namespace platform { setProperties("Best Results"); int maxDatasetName = (*max_element(datasets.begin(), datasets.end(), [](const std::string& a, const std::string& b) { return a.size() < b.size(); })).size(); datasetNameSize = std::max(datasetNameSize, maxDatasetName); + createFormats(); } void BestResultsExcel::reportAll(const std::vector& models, const json& table, const std::map>& ranks, bool friedman, double significance) { diff --git a/src/list/DatasetsExcel.cc b/src/list/DatasetsExcel.cc index 8e55c11..b2c11bb 100644 --- a/src/list/DatasetsExcel.cc +++ b/src/list/DatasetsExcel.cc @@ -8,6 +8,7 @@ namespace platform { { file_name = "datasets.xlsx"; workbook = workbook_new(getFileName().c_str()); + createFormats(); setProperties("Datasets"); } DatasetsExcel::~DatasetsExcel() diff --git a/src/reports/ExcelFile.cc b/src/reports/ExcelFile.cc index cf51110..ec36073 100644 --- a/src/reports/ExcelFile.cc +++ b/src/reports/ExcelFile.cc @@ -1,20 +1,18 @@ #include "ExcelFile.h" +#include "Paths.h" namespace platform { ExcelFile::ExcelFile() { setDefault(); - createFormats(); } ExcelFile::ExcelFile(lxw_workbook* workbook) : workbook(workbook) { setDefault(); - createFormats(); } ExcelFile::ExcelFile(lxw_workbook* workbook, lxw_worksheet* worksheet) : workbook(workbook), worksheet(worksheet) { setDefault(); - createFormats(); } void ExcelFile::setDefault() { diff --git a/src/reports/ExcelFile.h b/src/reports/ExcelFile.h index 199f587..3d07bef 100644 --- a/src/reports/ExcelFile.h +++ b/src/reports/ExcelFile.h @@ -3,7 +3,6 @@ #include #include #include -#include "Paths.h" #include "xlsxwriter.h" namespace platform { diff --git a/src/reports/ReportExcel.cc b/src/reports/ReportExcel.cc index 953c304..28ef068 100644 --- a/src/reports/ReportExcel.cc +++ b/src/reports/ReportExcel.cc @@ -9,6 +9,7 @@ namespace platform { ReportExcel::ReportExcel(json data_, bool compare, lxw_workbook* workbook, lxw_worksheet* worksheet) : ReportBase(data_, compare), ExcelFile(workbook, worksheet) { createFile(); + createFormats(); } void ReportExcel::formatColumns() From 23c3bed6677e2d62bd67656499171772d978bce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana=20G=C3=B3mez?= Date: Thu, 29 Feb 2024 16:14:01 +0100 Subject: [PATCH 3/3] Complete excel in b_list --- src/list/DatasetsExcel.cc | 41 +++++++++++++++++++++------------------ src/list/DatasetsExcel.h | 7 ++++--- src/list/b_list.cc | 31 ++++++++++++++++++----------- src/reports/ExcelFile.cc | 6 ++++++ 4 files changed, 52 insertions(+), 33 deletions(-) diff --git a/src/list/DatasetsExcel.cc b/src/list/DatasetsExcel.cc index b2c11bb..2ed0d8e 100644 --- a/src/list/DatasetsExcel.cc +++ b/src/list/DatasetsExcel.cc @@ -4,7 +4,7 @@ namespace platform { - DatasetsExcel::DatasetsExcel() + DatasetsExcel::DatasetsExcel(json& data) : data(data), ExcelFile() { file_name = "datasets.xlsx"; workbook = workbook_new(getFileName().c_str()); @@ -17,34 +17,37 @@ namespace platform { } void DatasetsExcel::report() { + int datasetNameSize = 25; // Min size of the column + int balanceSize = 75; // Min size of the column worksheet = workbook_add_worksheet(workbook, "Datasets"); - formatColumns(); - worksheet_merge_range(worksheet, 0, 0, 0, 4, "Datasets", styles["headerFirst"]); + worksheet_merge_range(worksheet, 0, 0, 0, 5, "Datasets", styles["headerFirst"]); + formatColumns(datasetNameSize, balanceSize); // Body header - row = 3; - int col = 1; + row = 2; + int col = 0; int i = 0; - // Get Datasets - // auto data = platform::Datasets(false, platform::Paths::datasets()); - // auto datasets = data.getNames(); - auto datasets = std::vector{ "iris", "wine", "digits", "breast_cancer" }; - int maxDatasetName = (*std::max_element(datasets.begin(), datasets.end(), [](const std::string& a, const std::string& b) { return a.size() < b.size(); })).size(); - datasetNameSize = std::max(datasetNameSize, maxDatasetName); - writeString(row, 0, "Nº", "bodyHeader"); - writeString(row, 1, "Dataset", "bodyHeader"); - for (auto const& name : datasets) { + for (const auto& name : { "Nº", "Dataset", "Samples", "Features", "Classes", "Balance" }) { + writeString(row, col++, name, "bodyHeader"); + } + for (auto& [key, value] : data.items()) { row++; + if (key.size() > datasetNameSize) { + datasetNameSize = key.size(); + } writeInt(row, 0, i++, "ints"); - writeString(row, 1, name.c_str(), "text"); + writeString(row, 1, key.c_str(), "text"); + writeInt(row, 2, value["samples"], "ints"); + writeInt(row, 3, value["features"], "ints"); + writeInt(row, 4, value["classes"], "ints"); + writeString(row, 5, value["balance"].get().c_str(), "text"); } row++; - formatColumns(); + formatColumns(datasetNameSize, balanceSize); } - - void DatasetsExcel::formatColumns() + void DatasetsExcel::formatColumns(int dataset, int balance) { worksheet_freeze_panes(worksheet, 4, 2); - std::vector columns_sizes = { 5, datasetNameSize }; + std::vector columns_sizes = { 5, dataset, 10, 10, 10, balance }; for (int i = 0; i < columns_sizes.size(); ++i) { worksheet_set_column(worksheet, i, i, columns_sizes.at(i), NULL); } diff --git a/src/list/DatasetsExcel.h b/src/list/DatasetsExcel.h index 31737fd..d6ae74a 100644 --- a/src/list/DatasetsExcel.h +++ b/src/list/DatasetsExcel.h @@ -11,12 +11,13 @@ namespace platform { class DatasetsExcel : public ExcelFile { public: - DatasetsExcel(); + explicit DatasetsExcel(json& data); ~DatasetsExcel(); void report(); private: - void formatColumns(); - int datasetNameSize = 25; // Min size of the column + void formatColumns(int dataset, int balance); + json data; + }; } #endif //DATASETS_EXCEL_H \ No newline at end of file diff --git a/src/list/b_list.cc b/src/list/b_list.cc index 741c43a..142f088 100644 --- a/src/list/b_list.cc +++ b/src/list/b_list.cc @@ -1,6 +1,7 @@ #include #include #include +#include #include "Paths.h" #include "Colors.h" #include "Datasets.h" @@ -15,7 +16,7 @@ struct separated : numpunct { std::string do_grouping() const { return "\03"; } }; -void outputBalance(const std::string& balance) +std::string outputBalance(const std::string& balance) { auto temp = std::string(balance); while (temp.size() > BALANCE_LENGTH - 1) { @@ -24,12 +25,12 @@ void outputBalance(const std::string& balance) std::cout << setw(52) << " "; temp = temp.substr(BALANCE_LENGTH); } - std::cout << temp << std::endl; + return temp; } int main(int argc, char** argv) { - auto data = platform::Datasets(false, platform::Paths::datasets()); + auto datasets = platform::Datasets(false, platform::Paths::datasets()); argparse::ArgumentParser program("b_list", { project_version.begin(), project_version.end() }); program.add_argument("--excel") .help("Output in Excel format") @@ -44,26 +45,34 @@ int main(int argc, char** argv) std::string balanceBars = std::string(BALANCE_LENGTH, '='); std::cout << "=== ============================== ====== ===== === " << balanceBars << std::endl; int num = 0; - for (const auto& dataset : data.getNames()) { + json data; + for (const auto& dataset : datasets.getNames()) { auto color = num % 2 ? Colors::CYAN() : Colors::BLUE(); std::cout << color << setw(3) << right << num++ << " "; std::cout << setw(30) << left << dataset << " "; - data.loadDataset(dataset); - auto nSamples = data.getNSamples(dataset); + datasets.loadDataset(dataset); + auto nSamples = datasets.getNSamples(dataset); std::cout << setw(6) << right << nSamples << " "; - std::cout << setw(5) << right << data.getFeatures(dataset).size() << " "; - std::cout << setw(3) << right << data.getNClasses(dataset) << " "; + std::cout << setw(5) << right << datasets.getFeatures(dataset).size() << " "; + std::cout << setw(3) << right << datasets.getNClasses(dataset) << " "; std::stringstream oss; std::string sep = ""; - for (auto number : data.getClassesCounts(dataset)) { + for (auto number : datasets.getClassesCounts(dataset)) { oss << sep << std::setprecision(2) << fixed << (float)number / nSamples * 100.0 << "% (" << number << ")"; sep = " / "; } - outputBalance(oss.str()); + auto balance = outputBalance(oss.str()); + std::cout << balance << std::endl; + // Store data for Excel report + data[dataset] = json::object(); + data[dataset]["samples"] = nSamples; + data[dataset]["features"] = datasets.getFeatures(dataset).size(); + data[dataset]["classes"] = datasets.getNClasses(dataset); + data[dataset]["balance"] = oss.str(); } std::cout << Colors::RESET() << std::endl; if (excel) { - auto report = platform::DatasetsExcel(); + auto report = platform::DatasetsExcel(data); report.report(); std::cout << "Output saved in " << report.getFileName() << std::endl; } diff --git a/src/reports/ExcelFile.cc b/src/reports/ExcelFile.cc index ec36073..e9407b6 100644 --- a/src/reports/ExcelFile.cc +++ b/src/reports/ExcelFile.cc @@ -87,11 +87,13 @@ namespace platform { if (name == "textCentered") { format_set_align(style, LXW_ALIGN_CENTER); format_set_font_size(style, normalSize); + format_set_align(style, LXW_ALIGN_VERTICAL_CENTER); format_set_border(style, LXW_BORDER_THIN); } else if (name == "text") { format_set_font_size(style, normalSize); format_set_border(style, LXW_BORDER_THIN); format_set_align(style, LXW_ALIGN_VERTICAL_CENTER); + format_set_text_wrap(style); } else if (name == "bodyHeader") { format_set_bold(style); format_set_font_size(style, normalSize); @@ -101,18 +103,22 @@ namespace platform { format_set_bg_color(style, lxw_color_t(colorTitle)); } else if (name == "result") { format_set_font_size(style, normalSize); + format_set_align(style, LXW_ALIGN_VERTICAL_CENTER); format_set_border(style, LXW_BORDER_THIN); format_set_num_format(style, "0.0000000"); } else if (name == "time") { format_set_font_size(style, normalSize); format_set_border(style, LXW_BORDER_THIN); + format_set_align(style, LXW_ALIGN_VERTICAL_CENTER); format_set_num_format(style, "#,##0.000000"); } else if (name == "ints") { format_set_font_size(style, normalSize); format_set_num_format(style, "###,##0"); + format_set_align(style, LXW_ALIGN_VERTICAL_CENTER); format_set_border(style, LXW_BORDER_THIN); } else if (name == "floats") { format_set_border(style, LXW_BORDER_THIN); + format_set_align(style, LXW_ALIGN_VERTICAL_CENTER); format_set_font_size(style, normalSize); format_set_num_format(style, "#,##0.00"); }