28 #ifndef DOXYGEN_SHOULD_SKIP_THIS 39 template <
typename GUM_SCALAR >
41 GUM_CONSTRUCTOR(DSLWriter);
45 template <
typename GUM_SCALAR >
47 GUM_DESTRUCTOR(DSLWriter);
55 template <
typename GUM_SCALAR >
57 const IBayesNet< GUM_SCALAR >& bn) {
59 GUM_ERROR(IOError,
"Stream states flags are not all unset.");
62 output <<
"net " << bn.propertyWithDefault(
"name",
"unnamedBN") << std::endl
65 output <<
"// property softwar aGrUM " << GUM_VERSION << std::endl
68 for (
auto node : bn.topologicalOrder()) {
69 output << __variableBloc(bn, bn.variable(node));
76 if (output.fail()) {
GUM_ERROR(IOError,
"Writting in the ostream failed."); }
86 template <
typename GUM_SCALAR >
88 const IBayesNet< GUM_SCALAR >& bn) {
90 fb.open(filePath.c_str(), std::ios::out);
91 std::ostream output(&fb);
101 template <
typename GUM_SCALAR >
104 const DiscreteVariable& var) {
106 std::ostringstream oss;
108 id = bn.idFromName(var.name());
110 oss <<
"\tnode " << var.name() <<
"\n\t{\n";
112 oss <<
"\t\tTYPE = CPT;\n";
114 oss <<
"\t\tHEADER =\n\t\t{\n";
115 oss <<
"\t\t\tID = " << var.name() <<
";\n";
116 oss <<
"\t\t\tNAME = \"" << var.name() <<
"\";\n";
119 oss <<
"\t\tPARENTS = (";
120 const Sequence< const DiscreteVariable* >& tmp_vars =
121 bn.cpt(
id).variablesSequence();
123 for (
Idx i = tmp_vars.size() - 1; i > 0; i--) {
124 if (i < tmp_vars.size() - 1) oss <<
", ";
126 oss << tmp_vars[i]->name();
131 oss <<
"\t\tDEFINITION =\n\t\t{\n";
134 oss <<
"\t\t\tNAMESTATES = (";
136 for (
Idx i = 0; i < var.domainSize(); i++) {
137 if (i != 0) oss <<
", ";
147 oss <<
"\t\t\tPROBABILITIES = (";
150 Instantiation iter(*bn.cpt(
id).content());
151 for (iter.setFirst(); i < bn.cpt(
id).domainSize(); ++iter, ++i) {
152 if (i != 0) oss <<
", ";
153 oss << bn.cpt(
id)[iter];
169 #endif // DOXYGEN_SHOULD_SKIP_THIS ~DSLWriter() final
Destructor.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
void write(std::ostream &output, const IBayesNet< GUM_SCALAR > &bn) final
Writes a Bayesian Network in the output stream using the DSL format.
std::string __variableBloc(const IBayesNet< GUM_SCALAR > &bn, const DiscreteVariable &var)
DSLWriter()
Default constructor.
Size NodeId
Type for node ids.
#define GUM_ERROR(type, msg)