aGrUM  0.20.2
a C++ library for (probabilistic) graphical models
gum::learning::BNDatabaseGenerator< GUM_SCALAR > Class Template Reference

#include <BNDatabaseGenerator.h>

+ Inheritance diagram for gum::learning::BNDatabaseGenerator< GUM_SCALAR >:
+ Collaboration diagram for gum::learning::BNDatabaseGenerator< GUM_SCALAR >:

Public Attributes

Signaler2< Size, doubleonProgress
 Progression (percent) and time. More...
 
Signaler1< const std::string &> onStop
 with a possible explanation for stopping More...
 

Public Member Functions

Constructors / Destructors
 BNDatabaseGenerator (const BayesNet< GUM_SCALAR > &bn)
 default constructor More...
 
 ~BNDatabaseGenerator ()
 destructor More...
 
Accessors / Modifiers
double drawSamples (Size nbSamples)
 generate and stock database, returns log2likelihood using ProgressNotifier as notification More...
 
void toCSV (const std::string &csvFileURL, bool useLabels=true, bool append=false, std::string csvSeparator=",", bool checkOnAppend=false) const
 generates csv database according to bn More...
 
DatabaseTable toDatabaseTable (bool useLabels=true) const
 generates a DatabaseVectInRAM More...
 
std::vector< std::vector< Idx > > database () const
 generates database according to bn into a std::vector More...
 
void setVarOrder (const std::vector< Idx > &varOrder)
 change columns order More...
 
void setVarOrder (const std::vector< std::string > &varOrder)
 change columns order using variable names More...
 
void setVarOrderFromCSV (const std::string &csvFileURL, const std::string &csvSeparator=",")
 change columns order according to a csv file More...
 
void setTopologicalVarOrder ()
 set columns in topoligical order More...
 
void setAntiTopologicalVarOrder ()
 set columns in antiTopoligical order More...
 
void setRandomVarOrder ()
 set columns in random order More...
 
std::vector< IdxvarOrder () const
 returns variable order indexes More...
 
std::vector< std::string > varOrderNames () const
 returns variable order. More...
 
double log2likelihood () const
 returns log2Likelihood of generated samples More...
 

Detailed Description

template<typename GUM_SCALAR>
class gum::learning::BNDatabaseGenerator< GUM_SCALAR >

Definition at line 79 of file BNDatabaseGenerator.h.

Constructor & Destructor Documentation

◆ BNDatabaseGenerator() [1/3]

template<typename GUM_SCALAR >
gum::learning::BNDatabaseGenerator< GUM_SCALAR >::BNDatabaseGenerator ( const BayesNet< GUM_SCALAR > &  bn)

default constructor

Definition at line 39 of file BNDatabaseGenerator_tpl.h.

40  :
41  bn__(bn) {
42  // for debugging purposes
43  GUM_CONSTRUCTOR(BNDatabaseGenerator);
44 
45  // get the node names => they will serve as ids
46  NodeId id = 0;
47  for (const auto& var: bn__.dag()) {
48  auto name = bn__.variable(var).name();
49  names2ids__.insert(name, var);
50  ++id;
51  }
52  nbVars__ = id;
53  varOrder__.resize(nbVars__);
54  std::iota(varOrder__.begin(), varOrder__.end(), (Idx)0);
55  }
void insert(const T1 &first, const T2 &second)
Inserts a new association in the gum::Bijection.
Bijection< std::string, NodeId > names2ids__
bijection nodes names
const BayesNet< GUM_SCALAR > & bn__
Bayesian network.
Size Idx
Type for indexes.
Definition: types.h:52
Size NodeId
Type for node ids.
Definition: graphElements.h:97
BNDatabaseGenerator(const BayesNet< GUM_SCALAR > &bn)
default constructor
std::vector< Idx > varOrder__
variable order in generated database

◆ ~BNDatabaseGenerator()

template<typename GUM_SCALAR >
gum::learning::BNDatabaseGenerator< GUM_SCALAR >::~BNDatabaseGenerator ( )

destructor

Definition at line 59 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

59  {
60  GUM_DESTRUCTOR(BNDatabaseGenerator);
61  }
BNDatabaseGenerator(const BayesNet< GUM_SCALAR > &bn)
default constructor
+ Here is the call graph for this function:

◆ BNDatabaseGenerator() [2/3]

template<typename GUM_SCALAR>
gum::learning::BNDatabaseGenerator< GUM_SCALAR >::BNDatabaseGenerator ( const BNDatabaseGenerator< GUM_SCALAR > &  )
privatedelete

◆ BNDatabaseGenerator() [3/3]

template<typename GUM_SCALAR>
gum::learning::BNDatabaseGenerator< GUM_SCALAR >::BNDatabaseGenerator ( BNDatabaseGenerator< GUM_SCALAR > &&  )
privatedelete

Member Function Documentation

◆ database()

template<typename GUM_SCALAR >
std::vector< std::vector< Idx > > gum::learning::BNDatabaseGenerator< GUM_SCALAR >::database ( ) const

generates database according to bn into a std::vector

returns database using specified data order

Warning
: makes a copy of the whole database

Definition at line 276 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

276  {
277  if (!drawnSamples__)
278  GUM_ERROR(OperationNotAllowed, "drawSamples() must be called first.");
279 
280  auto db(database__);
281  for (Idx i = 0; i < database__.size(); ++i) {
282  for (Idx j = 0; j < nbVars__; ++j) {
283  db.at(i).at(j) = (Idx)database__.at(i).at(varOrder__.at(j));
284  }
285  }
286  return db;
287  }
bool drawnSamples__
whether drawSamples has been already called.
std::vector< std::vector< Idx > > database__
generated database
Size Idx
Type for indexes.
Definition: types.h:52
std::vector< Idx > varOrder__
variable order in generated database
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
+ Here is the call graph for this function:

◆ drawSamples()

template<typename GUM_SCALAR >
double gum::learning::BNDatabaseGenerator< GUM_SCALAR >::drawSamples ( Size  nbSamples)

generate and stock database, returns log2likelihood using ProgressNotifier as notification

draw instances from bn__

Definition at line 66 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

66  {
67  Timer timer;
68  int progress = 0;
69 
70  timer.reset();
71 
72  if (onProgress.hasListener()) {
73  GUM_EMIT2(onProgress, progress, timer.step());
74  }
75  database__.clear();
76  database__.resize(nbSamples);
77  for (auto& row: database__) {
78  row.resize(nbVars__);
79  }
80  // get the order in which the nodes will be sampled
81  const gum::Sequence< gum::NodeId >& topOrder = bn__.topologicalOrder();
82  std::vector< gum::Instantiation > instantiations;
83 
84  // create instantiations in advance
85  for (Idx node = 0; node < nbVars__; ++node)
86  instantiations.push_back(gum::Instantiation(bn__.cpt(node)));
87 
88  // create the random generator
89  std::random_device rd;
90  std::mt19937 gen(rd());
91  std::uniform_real_distribution<> distro(0.0, 1.0);
92 
93  // perform the sampling
94  log2likelihood__ = 0;
95  const gum::DAG& dag = bn__.dag();
96  for (Idx i = 0; i < nbSamples; ++i) {
97  if (onProgress.hasListener()) {
98  int p = int((i * 100) / nbSamples);
99  if (p != progress) {
100  progress = p;
101  GUM_EMIT2(onProgress, progress, timer.step());
102  }
103  }
104  std::vector< Idx >& sample = database__.at(i);
105  for (Idx j = 0; j < nbVars__; ++j) {
106  const gum::NodeId node = topOrder[j];
107  const auto& var = bn__.variable(node);
108  const auto& cpt = bn__.cpt(node);
109 
110  gum::Instantiation& inst = instantiations[node];
111  for (auto par: dag.parents(node))
112  inst.chgVal(bn__.variable(par), sample.at(par));
113 
114  const double nb = distro(gen);
115  double cumul = 0.0;
116  for (inst.chgVal(var, 0); !inst.end(); inst.incVar(var)) {
117  cumul += cpt[inst];
118  if (cumul >= nb) break;
119  }
120 
121  if (inst.end()) inst.chgVal(var, var.domainSize() - 1);
122  sample.at(node) = inst.val(var);
123 
124  log2likelihood__ += std::log2(bn__.cpt(node)[inst]);
125  }
126  }
127 
128  drawnSamples__ = true;
129 
130  if (onProgress.hasListener()) {
131  std::stringstream ss;
132  ss << "Database of size " << nbSamples << " generated in " << timer.step()
133  << " seconds. Log2likelihood : " << log2likelihood__;
134  GUM_EMIT1(onStop, ss.str());
135  }
136 
137  return log2likelihood__;
138  }
Signaler2< Size, double > onProgress
Progression (percent) and time.
bool drawnSamples__
whether drawSamples has been already called.
std::vector< std::vector< Idx > > database__
generated database
#define GUM_EMIT1(signal, arg1)
Definition: signaler1.h:41
const NodeSet & parents(NodeId id) const
returns the set of nodes with arc ingoing to a given node
The generic class for storing (ordered) sequences of objects.
Definition: sequence.h:1021
Instantiation & chgVal(const DiscreteVariable &v, Idx newval)
Assign newval to variable v in the Instantiation.
void incVar(const DiscreteVariable &v)
Operator increment for variable v only.
Idx val(Idx i) const
Returns the current value of the variable at position i.
#define GUM_EMIT2(signal, arg1, arg2)
Definition: signaler2.h:41
const BayesNet< GUM_SCALAR > & bn__
Bayesian network.
Class for assigning/browsing values to tuples of discrete variables.
Definition: instantiation.h:82
double log2likelihood__
log2Likelihood of generated samples
Signaler1< const std::string &> onStop
with a possible explanation for stopping
Base class for dag.
Definition: DAG.h:101
Size NodeId
Type for node ids.
Definition: graphElements.h:97
Potential< GUM_SCALAR > log2(const Potential< GUM_SCALAR > &arg)
Definition: potential.h:612
bool end() const
Returns true if the Instantiation reached the end.
+ Here is the call graph for this function:

◆ log2likelihood()

template<typename GUM_SCALAR >
double gum::learning::BNDatabaseGenerator< GUM_SCALAR >::log2likelihood ( ) const

returns log2Likelihood of generated samples

Definition at line 393 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

393  {
394  if (!drawnSamples__) {
395  GUM_ERROR(OperationNotAllowed, "drawSamples() must be called first.");
396  }
397  return log2likelihood__;
398  }
bool drawnSamples__
whether drawSamples has been already called.
double log2likelihood__
log2Likelihood of generated samples
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
+ Here is the call graph for this function:

◆ operator=() [1/2]

template<typename GUM_SCALAR>
BNDatabaseGenerator& gum::learning::BNDatabaseGenerator< GUM_SCALAR >::operator= ( const BNDatabaseGenerator< GUM_SCALAR > &  )
privatedelete

◆ operator=() [2/2]

template<typename GUM_SCALAR>
BNDatabaseGenerator& gum::learning::BNDatabaseGenerator< GUM_SCALAR >::operator= ( BNDatabaseGenerator< GUM_SCALAR > &&  )
privatedelete

◆ setAntiTopologicalVarOrder()

template<typename GUM_SCALAR >
void gum::learning::BNDatabaseGenerator< GUM_SCALAR >::setAntiTopologicalVarOrder ( )

set columns in antiTopoligical order

Definition at line 347 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

347  {
348  std::vector< Idx > varOrder;
349  varOrder.reserve(nbVars__);
350  for (const auto& v: bn__.topologicalOrder()) {
351  varOrder.push_back(v);
352  }
353  std::reverse(varOrder.begin(), varOrder.end());
354  setVarOrder(varOrder);
355  }
const BayesNet< GUM_SCALAR > & bn__
Bayesian network.
void setVarOrder(const std::vector< Idx > &varOrder)
change columns order
std::vector< Idx > varOrder() const
returns variable order indexes
+ Here is the call graph for this function:

◆ setRandomVarOrder()

template<typename GUM_SCALAR >
void gum::learning::BNDatabaseGenerator< GUM_SCALAR >::setRandomVarOrder ( )

set columns in random order

Definition at line 359 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

359  {
360  std::vector< std::string > varOrder;
361  varOrder.reserve(bn__.size());
362  for (const auto& var: bn__.dag()) {
363  varOrder.push_back(bn__.variable(var).name());
364  }
365  std::random_device rd;
366  std::mt19937 g(rd());
367  std::shuffle(varOrder.begin(), varOrder.end(), g);
368  setVarOrder(varOrder);
369  }
const BayesNet< GUM_SCALAR > & bn__
Bayesian network.
void setVarOrder(const std::vector< Idx > &varOrder)
change columns order
std::vector< Idx > varOrder() const
returns variable order indexes
+ Here is the call graph for this function:

◆ setTopologicalVarOrder()

template<typename GUM_SCALAR >
void gum::learning::BNDatabaseGenerator< GUM_SCALAR >::setTopologicalVarOrder ( )

set columns in topoligical order

Definition at line 336 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

336  {
337  std::vector< Idx > varOrder;
338  varOrder.reserve(nbVars__);
339  for (const auto& v: bn__.topologicalOrder()) {
340  varOrder.push_back(v);
341  }
342  setVarOrder(varOrder);
343  }
const BayesNet< GUM_SCALAR > & bn__
Bayesian network.
void setVarOrder(const std::vector< Idx > &varOrder)
change columns order
std::vector< Idx > varOrder() const
returns variable order indexes
+ Here is the call graph for this function:

◆ setVarOrder() [1/2]

template<typename GUM_SCALAR >
void gum::learning::BNDatabaseGenerator< GUM_SCALAR >::setVarOrder ( const std::vector< Idx > &  varOrder)

change columns order

Definition at line 291 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

292  {
293  if (varOrder.size() != nbVars__) {
294  GUM_ERROR(FatalError,
295  "varOrder's size must be equal to the number of variables");
296  }
297  std::vector< bool > usedVars(nbVars__, false);
298  for (const auto& i: varOrder) {
299  if (i >= nbVars__) {
300  GUM_ERROR(FatalError, "varOrder contains invalid variables");
301  }
302  if (usedVars.at(i))
303  GUM_ERROR(FatalError, "varOrder must not have repeated variables");
304  usedVars.at(i) = true;
305  }
306 
307  if (std::find(usedVars.begin(), usedVars.end(), false) != usedVars.end()) {
308  GUM_ERROR(FatalError, "varOrder must contain all variables");
309  }
310 
312  }
std::vector< Idx > varOrder() const
returns variable order indexes
std::vector< Idx > varOrder__
variable order in generated database
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
+ Here is the call graph for this function:

◆ setVarOrder() [2/2]

template<typename GUM_SCALAR >
void gum::learning::BNDatabaseGenerator< GUM_SCALAR >::setVarOrder ( const std::vector< std::string > &  varOrder)

change columns order using variable names

Definition at line 316 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

317  {
318  std::vector< Idx > varOrderIdx;
319  varOrderIdx.reserve(varOrder.size());
320  for (const auto& vname: varOrder) {
321  varOrderIdx.push_back(names2ids__.second(vname));
322  }
323  setVarOrder(varOrderIdx);
324  }
const T2 & second(const T1 &first) const
Returns the second value of a pair given its first value.
Bijection< std::string, NodeId > names2ids__
bijection nodes names
void setVarOrder(const std::vector< Idx > &varOrder)
change columns order
+ Here is the call graph for this function:

◆ setVarOrderFromCSV()

template<typename GUM_SCALAR >
void gum::learning::BNDatabaseGenerator< GUM_SCALAR >::setVarOrderFromCSV ( const std::string &  csvFileURL,
const std::string &  csvSeparator = "," 
)

change columns order according to a csv file

Definition at line 328 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

330  {
331  setVarOrder(varOrderFromCSV__(csvFileURL, csvSeparator));
332  }
void setVarOrder(const std::vector< Idx > &varOrder)
change columns order
std::vector< Idx > varOrderFromCSV__(const std::string &csvFileURL, const std::string &csvSeparator=",") const
returns varOrder from a csv file
+ Here is the call graph for this function:

◆ toCSV()

template<typename GUM_SCALAR >
void gum::learning::BNDatabaseGenerator< GUM_SCALAR >::toCSV ( const std::string &  csvFileURL,
bool  useLabels = true,
bool  append = false,
std::string  csvSeparator = ",",
bool  checkOnAppend = false 
) const

generates csv database according to bn

generates database, and writes csv file

Definition at line 142 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

146  {
147  if (!drawnSamples__) {
148  GUM_ERROR(OperationNotAllowed, "drawSamples() must be called first.");
149  }
150 
151  if (csvSeparator.find("\n") != std::string::npos) {
152  GUM_ERROR(InvalidArgument,
153  "csvSeparator must not contain end-line characters");
154  }
155 
156  bool includeHeader = true;
157  if (append) {
158  std::ifstream csvFile(csvFileURL);
159  if (csvFile) {
160  auto varOrder = varOrderFromCSV__(csvFile, csvSeparator);
161  if (checkOnAppend && varOrder != varOrder__) {
162  GUM_ERROR(
163  OperationNotAllowed,
164  "Inconsistent variable order in csvFile when appending. You "
165  "can use setVarOrderFromCSV(url) function to get the right "
166  "order. You could also set parameter checkOnAppend=false if you "
167  "know what you are doing.");
168  }
169  includeHeader = false;
170  }
171  csvFile.close();
172  }
173 
174 
175  auto ofstreamFlag = append ? std::ofstream::app : std::ofstream::out;
176 
177  std::ofstream os(csvFileURL, ofstreamFlag);
178  bool firstCol = true;
179  if (includeHeader) {
180  for (const auto& i: varOrder__) {
181  if (firstCol) {
182  firstCol = false;
183  } else {
184  os << csvSeparator;
185  }
186  os << bn__.variable(i).name();
187  }
188  }
189  os << std::endl;
190 
191  bool firstRow = true;
192  for (const auto& row: database__) {
193  if (firstRow) {
194  firstRow = false;
195  } else {
196  os << std::endl;
197  }
198  firstCol = true;
199  for (const auto& i: varOrder__) {
200  if (firstCol) {
201  firstCol = false;
202  } else {
203  os << csvSeparator;
204  }
205  if (useLabels) {
206  os << bn__.variable(i).label(row.at(i));
207  } else {
208  os << row[i];
209  }
210  }
211  }
212 
213  os.close();
214  }
bool drawnSamples__
whether drawSamples has been already called.
std::vector< std::vector< Idx > > database__
generated database
const BayesNet< GUM_SCALAR > & bn__
Bayesian network.
std::vector< Idx > varOrderFromCSV__(const std::string &csvFileURL, const std::string &csvSeparator=",") const
returns varOrder from a csv file
std::vector< Idx > varOrder() const
returns variable order indexes
std::vector< Idx > varOrder__
variable order in generated database
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
+ Here is the call graph for this function:

◆ toDatabaseTable()

template<typename GUM_SCALAR >
DatabaseTable gum::learning::BNDatabaseGenerator< GUM_SCALAR >::toDatabaseTable ( bool  useLabels = true) const

generates a DatabaseVectInRAM

Definition at line 219 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

219  {
220  if (!drawnSamples__)
221  GUM_ERROR(OperationNotAllowed, "proceed() must be called first.");
222 
223  DatabaseTable<> db;
224  std::vector< std::string > varNames;
225  varNames.reserve(nbVars__);
226  for (const auto& i: varOrder__) {
227  varNames.push_back(names2ids__.first(i));
228  }
229 
230  // create the translators
231  for (std::size_t i = 0; i < nbVars__; ++i) {
232  const Variable& var = bn__.variable(varOrder__[i]);
233  db.insertTranslator(var, i);
234  }
235 
236 
237  // db.setVariableNames(varNames);
238  // db.setVariableNames(varOrderNames());
239 
240  if (useLabels) {
241  std::vector< std::string > xrow(nbVars__);
242  for (const auto& row: database__) {
243  for (Idx i = 0; i < nbVars__; ++i) {
244  Idx j = varOrder__.at(i);
245  xrow[i] = bn__.variable(j).label(row.at(j));
246  }
247  db.insertRow(xrow);
248  }
249  } else {
250  std::vector< DBTranslatedValueType > translatorType(nbVars__);
251  for (std::size_t i = 0; i < nbVars__; ++i) {
252  translatorType[i] = db.translator(i).getValType();
253  }
254  DBRow< DBTranslatedValue > xrow(nbVars__);
256  for (const auto& row: database__) {
257  for (Idx i = 0; i < nbVars__; ++i) {
258  Idx j = varOrder__.at(i);
259 
260  if (translatorType[i] == DBTranslatedValueType::DISCRETE)
261  xrow[i].discr_val = std::size_t(row.at(j));
262  else
263  xrow[i].cont_val = float(row.at(j));
264  }
265  }
266  db.insertRow(xrow, xmiss);
267  }
268 
269  return db;
270  }
bool drawnSamples__
whether drawSamples has been already called.
std::vector< std::vector< Idx > > database__
generated database
const T1 & first(const T2 &second) const
Returns the first value of a pair given its second value.
Bijection< std::string, NodeId > names2ids__
bijection nodes names
The class representing a tabular database as used by learning tasks.
const BayesNet< GUM_SCALAR > & bn__
Bayesian network.
std::vector< Idx > varOrder__
variable order in generated database
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
+ Here is the call graph for this function:

◆ varOrder()

template<typename GUM_SCALAR >
std::vector< Idx > gum::learning::BNDatabaseGenerator< GUM_SCALAR >::varOrder ( ) const

returns variable order indexes

Definition at line 374 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

374  {
375  return varOrder__;
376  }
std::vector< Idx > varOrder__
variable order in generated database
+ Here is the call graph for this function:

◆ varOrderFromCSV__() [1/2]

template<typename GUM_SCALAR >
std::vector< Idx > gum::learning::BNDatabaseGenerator< GUM_SCALAR >::varOrderFromCSV__ ( const std::string &  csvFileURL,
const std::string &  csvSeparator = "," 
) const
private

returns varOrder from a csv file

Definition at line 402 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

404  {
405  std::ifstream csvFile(csvFileURL);
406  std::vector< Idx > varOrder;
407  if (csvFile) {
408  varOrder = varOrderFromCSV__(csvFile, csvSeparator);
409  csvFile.close();
410  } else {
411  GUM_ERROR(NotFound, "csvFileURL does not exist");
412  }
413 
414  return varOrder;
415  }
std::vector< Idx > varOrderFromCSV__(const std::string &csvFileURL, const std::string &csvSeparator=",") const
returns varOrder from a csv file
std::vector< Idx > varOrder() const
returns variable order indexes
#define GUM_ERROR(type, msg)
Definition: exceptions.h:54
+ Here is the call graph for this function:

◆ varOrderFromCSV__() [2/2]

template<typename GUM_SCALAR >
std::vector< Idx > gum::learning::BNDatabaseGenerator< GUM_SCALAR >::varOrderFromCSV__ ( std::ifstream &  csvFile,
const std::string &  csvSeparator = "," 
) const
private

returns varOrder from a csv file

Definition at line 419 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

421  {
422  std::string line;
423  std::vector< std::string > header_found;
424  header_found.reserve(nbVars__);
425  while (std::getline(csvFile, line)) {
426  std::size_t i = 0;
427  auto pos = line.find(csvSeparator);
428  while (pos != std::string::npos) {
429  header_found.push_back(line.substr(i, pos - i));
430  pos += csvSeparator.length();
431  i = pos;
432  pos = line.find(csvSeparator, pos);
433 
434  if (pos == std::string::npos)
435  header_found.push_back(line.substr(i, line.length()));
436  }
437  break;
438  }
439 
440  std::vector< Size > varOrder;
441  varOrder.reserve(nbVars__);
442 
443  for (const auto& hf: header_found) {
444  varOrder.push_back(names2ids__.second(hf));
445  }
446 
447  return varOrder;
448  }
const T2 & second(const T1 &first) const
Returns the second value of a pair given its first value.
Bijection< std::string, NodeId > names2ids__
bijection nodes names
std::vector< Idx > varOrder() const
returns variable order indexes
+ Here is the call graph for this function:

◆ varOrderNames()

template<typename GUM_SCALAR >
std::vector< std::string > gum::learning::BNDatabaseGenerator< GUM_SCALAR >::varOrderNames ( ) const

returns variable order.

Definition at line 381 of file BNDatabaseGenerator_tpl.h.

References gum::learning::genericBNLearner::Database::Database().

381  {
382  std::vector< std::string > varNames;
383  varNames.reserve(nbVars__);
384  for (const auto& i: varOrder__) {
385  varNames.push_back(names2ids__.first(i));
386  }
387 
388  return varNames;
389  }
const T1 & first(const T2 &second) const
Returns the first value of a pair given its second value.
Bijection< std::string, NodeId > names2ids__
bijection nodes names
std::vector< Idx > varOrder__
variable order in generated database
+ Here is the call graph for this function:

Member Data Documentation

◆ bn__

template<typename GUM_SCALAR>
const BayesNet< GUM_SCALAR >& gum::learning::BNDatabaseGenerator< GUM_SCALAR >::bn__
private

Bayesian network.

Definition at line 150 of file BNDatabaseGenerator.h.

◆ database__

template<typename GUM_SCALAR>
std::vector< std::vector< Idx > > gum::learning::BNDatabaseGenerator< GUM_SCALAR >::database__
private

generated database

Definition at line 159 of file BNDatabaseGenerator.h.

◆ drawnSamples__

template<typename GUM_SCALAR>
bool gum::learning::BNDatabaseGenerator< GUM_SCALAR >::drawnSamples__ = false
private

whether drawSamples has been already called.

Definition at line 165 of file BNDatabaseGenerator.h.

◆ log2likelihood__

template<typename GUM_SCALAR>
double gum::learning::BNDatabaseGenerator< GUM_SCALAR >::log2likelihood__ = 0
private

log2Likelihood of generated samples

Definition at line 168 of file BNDatabaseGenerator.h.

◆ names2ids__

template<typename GUM_SCALAR>
Bijection< std::string, NodeId > gum::learning::BNDatabaseGenerator< GUM_SCALAR >::names2ids__
private

bijection nodes names

Definition at line 153 of file BNDatabaseGenerator.h.

◆ nbVars__

template<typename GUM_SCALAR>
Size gum::learning::BNDatabaseGenerator< GUM_SCALAR >::nbVars__
private

number of variables

Definition at line 156 of file BNDatabaseGenerator.h.

◆ onProgress

Signaler2< Size, double > gum::ProgressNotifier::onProgress
inherited

Progression (percent) and time.

Definition at line 47 of file progressNotification.h.

◆ onStop

Signaler1< const std::string& > gum::ProgressNotifier::onStop
inherited

with a possible explanation for stopping

Definition at line 50 of file progressNotification.h.

◆ varOrder__

template<typename GUM_SCALAR>
std::vector< Idx > gum::learning::BNDatabaseGenerator< GUM_SCALAR >::varOrder__
private

variable order in generated database

Definition at line 162 of file BNDatabaseGenerator.h.


The documentation for this class was generated from the following files: