Add Linux specific options to compile

This commit is contained in:
Ricardo Montañana Gómez 2023-08-29 18:20:55 +02:00
parent 284ef6dfd1
commit 7c3e315ae7
Signed by: rmontanana
GPG Key ID: 46064262FD9A7ADE
10 changed files with 146 additions and 138 deletions

View File

@ -1,19 +1,31 @@
compilation_database_dir: build compilation_database_dir: build
output_directory: puml output_directory: puml
diagrams: diagrams:
myproject_class: BayesNet:
type: class type: class
glob: glob:
- src/bayesnet/*.cc - src/BayesNet/*.cc
- src/platform/*.cc - src/Platform/*.cc
using_namespace: bayesnet using_namespace: bayesnet
include: include:
namespaces: namespaces:
- bayesnet - bayesnet
- platform - platform
exclude:
namespaces:
- myproject::detail
plantuml: plantuml:
after: after:
- 'note left of {{ alias("MyProjectMain") }}: Main class of myproject library.' - "note left of {{ alias(\"MyProjectMain\") }}: Main class of myproject library."
sequence:
type: sequence
glob:
- src/Platform/main.cc
combine_free_functions_into_file_participants: true
using_namespace:
- std
- bayesnet
- platform
include:
paths:
- src/BayesNet
- src/Platform
start_from:
- function: main(int,const char **)

1
.gitignore vendored
View File

@ -35,3 +35,4 @@ build/
*.dSYM/** *.dSYM/**
cmake-build*/** cmake-build*/**
.idea .idea
puml/**

View File

@ -30,7 +30,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
option(ENABLE_CLANG_TIDY "Enable to add clang tidy." OFF) option(ENABLE_CLANG_TIDY "Enable to add clang tidy." OFF)
option(ENABLE_TESTING "Unit testing build" OFF) option(ENABLE_TESTING "Unit testing build" OFF)
option(CODE_COVERAGE "Collect coverage from test library" OFF) option(CODE_COVERAGE "Collect coverage from test library" OFF)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
# CMakes modules # CMakes modules
# -------------- # --------------
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})

View File

@ -32,6 +32,9 @@ clean: ## Clean the debug info
find . -name "*.gcda" -print0 | xargs -0 rm find . -name "*.gcda" -print0 | xargs -0 rm
@echo ">>> Done"; @echo ">>> Done";
clang-uml: ## Create uml class and sequence diagrams
clang-uml -p --add-compile-flag -I /usr/lib/gcc/x86_64-redhat-linux/8/include/
debug: ## Build a debug version of the project debug: ## Build a debug version of the project
@echo ">>> Building Debug BayesNet ..."; @echo ">>> Building Debug BayesNet ...";
@if [ -d ./build ]; then rm -rf ./build; fi @if [ -d ./build ]; then rm -rf ./build; fi

View File

@ -1,12 +0,0 @@
digraph BayesNet {
label=<BayesNet >
fontsize=30
fontcolor=blue
labelloc=t
layout=circo
class [shape=circle, fontcolor=red, fillcolor=lightblue, style=filled ]
class -> sepallength class -> sepalwidth class -> petallength class -> petalwidth petallength [shape=circle]
petallength -> sepallength petalwidth [shape=circle]
sepallength [shape=circle]
sepallength -> sepalwidth sepalwidth [shape=circle]
sepalwidth -> petalwidth }

View File

@ -10,7 +10,7 @@
#include "Folding.h" #include "Folding.h"
#include "Models.h" #include "Models.h"
#include "modelRegister.h" #include "modelRegister.h"
#include <fstream>
using namespace std; using namespace std;
@ -195,11 +195,11 @@ int main(int argc, char** argv)
Xt.index_put_({ i, "..." }, torch::tensor(Xd[i], torch::kInt32)); Xt.index_put_({ i, "..." }, torch::tensor(Xd[i], torch::kInt32));
} }
float total_score = 0, total_score_train = 0, score_train, score_test; float total_score = 0, total_score_train = 0, score_train, score_test;
Fold* fold; platform::Fold* fold;
if (stratified) if (stratified)
fold = new StratifiedKFold(nFolds, y, seed); fold = new platform::StratifiedKFold(nFolds, y, seed);
else else
fold = new KFold(nFolds, y.size(), seed); fold = new platform::KFold(nFolds, y.size(), seed);
for (auto i = 0; i < nFolds; ++i) { for (auto i = 0; i < nFolds; ++i) {
auto [train, test] = fold->getFold(i); auto [train, test] = fold->getFold(i);
cout << "Fold: " << i + 1 << endl; cout << "Fold: " << i + 1 << endl;

View File

@ -1,6 +1,7 @@
#include "Datasets.h" #include "Datasets.h"
#include "platformUtils.h" #include "platformUtils.h"
#include "ArffFiles.h" #include "ArffFiles.h"
#include <fstream>
namespace platform { namespace platform {
void Datasets::load() void Datasets::load()
{ {

View File

@ -2,7 +2,7 @@
#include "Datasets.h" #include "Datasets.h"
#include "Models.h" #include "Models.h"
#include "ReportConsole.h" #include "ReportConsole.h"
#include <fstream>
namespace platform { namespace platform {
using json = nlohmann::json; using json = nlohmann::json;
string get_date() string get_date()

View File

@ -1,19 +1,20 @@
#include "Folding.h" #include "Folding.h"
#include <algorithm> #include <algorithm>
#include <map> #include <map>
Fold::Fold(int k, int n, int seed) : k(k), n(n), seed(seed) namespace platform {
{ Fold::Fold(int k, int n, int seed) : k(k), n(n), seed(seed)
{
random_device rd; random_device rd;
random_seed = default_random_engine(seed == -1 ? rd() : seed); random_seed = default_random_engine(seed == -1 ? rd() : seed);
srand(seed == -1 ? time(0) : seed); srand(seed == -1 ? time(0) : seed);
} }
KFold::KFold(int k, int n, int seed) : Fold(k, n, seed), indices(vector<int>(n)) KFold::KFold(int k, int n, int seed) : Fold(k, n, seed), indices(vector<int>(n))
{ {
iota(begin(indices), end(indices), 0); // fill with 0, 1, ..., n - 1 iota(begin(indices), end(indices), 0); // fill with 0, 1, ..., n - 1
shuffle(indices.begin(), indices.end(), random_seed); shuffle(indices.begin(), indices.end(), random_seed);
} }
pair<vector<int>, vector<int>> KFold::getFold(int nFold) pair<vector<int>, vector<int>> KFold::getFold(int nFold)
{ {
if (nFold >= k || nFold < 0) { if (nFold >= k || nFold < 0) {
throw out_of_range("nFold (" + to_string(nFold) + ") must be less than k (" + to_string(k) + ")"); throw out_of_range("nFold (" + to_string(nFold) + ") must be less than k (" + to_string(k) + ")");
} }
@ -28,22 +29,22 @@ pair<vector<int>, vector<int>> KFold::getFold(int nFold)
} }
} }
return { train, test }; return { train, test };
} }
StratifiedKFold::StratifiedKFold(int k, torch::Tensor& y, int seed) : Fold(k, y.numel(), seed) StratifiedKFold::StratifiedKFold(int k, torch::Tensor& y, int seed) : Fold(k, y.numel(), seed)
{ {
n = y.numel(); n = y.numel();
this->y = vector<int>(y.data_ptr<int>(), y.data_ptr<int>() + n); this->y = vector<int>(y.data_ptr<int>(), y.data_ptr<int>() + n);
build(); build();
} }
StratifiedKFold::StratifiedKFold(int k, const vector<int>& y, int seed) StratifiedKFold::StratifiedKFold(int k, const vector<int>& y, int seed)
: Fold(k, y.size(), seed) : Fold(k, y.size(), seed)
{ {
this->y = y; this->y = y;
n = y.size(); n = y.size();
build(); build();
} }
void StratifiedKFold::build() void StratifiedKFold::build()
{ {
stratified_indices = vector<vector<int>>(k); stratified_indices = vector<vector<int>>(k);
int fold_size = n / k; int fold_size = n / k;
// Compute class counts and indices // Compute class counts and indices
@ -79,9 +80,9 @@ void StratifiedKFold::build()
remainder_samples_to_take--; remainder_samples_to_take--;
} }
} }
} }
pair<vector<int>, vector<int>> StratifiedKFold::getFold(int nFold) pair<vector<int>, vector<int>> StratifiedKFold::getFold(int nFold)
{ {
if (nFold >= k || nFold < 0) { if (nFold >= k || nFold < 0) {
throw out_of_range("nFold (" + to_string(nFold) + ") must be less than k (" + to_string(k) + ")"); throw out_of_range("nFold (" + to_string(nFold) + ") must be less than k (" + to_string(k) + ")");
} }
@ -92,4 +93,5 @@ pair<vector<int>, vector<int>> StratifiedKFold::getFold(int nFold)
train_indices.insert(train_indices.end(), stratified_indices[i].begin(), stratified_indices[i].end()); train_indices.insert(train_indices.end(), stratified_indices[i].begin(), stratified_indices[i].end());
} }
return { train_indices, test_indices }; return { train_indices, test_indices };
}
} }

View File

@ -4,34 +4,35 @@
#include <vector> #include <vector>
#include <random> #include <random>
using namespace std; using namespace std;
namespace platform {
class Fold { class Fold {
protected: protected:
int k; int k;
int n; int n;
int seed; int seed;
default_random_engine random_seed; default_random_engine random_seed;
public: public:
Fold(int k, int n, int seed = -1); Fold(int k, int n, int seed = -1);
virtual pair<vector<int>, vector<int>> getFold(int nFold) = 0; virtual pair<vector<int>, vector<int>> getFold(int nFold) = 0;
virtual ~Fold() = default; virtual ~Fold() = default;
int getNumberOfFolds() { return k; } int getNumberOfFolds() { return k; }
}; };
class KFold : public Fold { class KFold : public Fold {
private: private:
vector<int> indices; vector<int> indices;
public: public:
KFold(int k, int n, int seed = -1); KFold(int k, int n, int seed = -1);
pair<vector<int>, vector<int>> getFold(int nFold) override; pair<vector<int>, vector<int>> getFold(int nFold) override;
}; };
class StratifiedKFold : public Fold { class StratifiedKFold : public Fold {
private: private:
vector<int> y; vector<int> y;
vector<vector<int>> stratified_indices; vector<vector<int>> stratified_indices;
void build(); void build();
public: public:
StratifiedKFold(int k, const vector<int>& y, int seed = -1); StratifiedKFold(int k, const vector<int>& y, int seed = -1);
StratifiedKFold(int k, torch::Tensor& y, int seed = -1); StratifiedKFold(int k, torch::Tensor& y, int seed = -1);
pair<vector<int>, vector<int>> getFold(int nFold) override; pair<vector<int>, vector<int>> getFold(int nFold) override;
}; };
}
#endif #endif