aGrUM
3.2.0
a C++ library for (probabilistic) graphical models
Toggle main menu visibility
DAGmodel.cpp
Go to the documentation of this file.
1
/****************************************************************************
2
* This file is part of the aGrUM/pyAgrum library. *
3
* *
4
* Copyright (c) 2005-2026 by *
5
* - Pierre-Henri WUILLEMIN(_at_LIP6) *
6
* - Christophe GONZALES(_at_AMU) *
7
* *
8
* The aGrUM/pyAgrum library is free software; you can redistribute it *
9
* and/or modify it under the terms of either : *
10
* *
11
* - the GNU Lesser General Public License as published by *
12
* the Free Software Foundation, either version 3 of the License, *
13
* or (at your option) any later version, *
14
* - the MIT license (MIT), *
15
* - or both in dual license, as here. *
16
* *
17
* (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18
* *
19
* This aGrUM/pyAgrum library is distributed in the hope that it will be *
20
* useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26
* OTHER DEALINGS IN THE SOFTWARE. *
27
* *
28
* See LICENCES for more details. *
29
* *
30
* SPDX-FileCopyrightText: Copyright 2005-2026 *
31
* - Pierre-Henri WUILLEMIN(_at_LIP6) *
32
* - Christophe GONZALES(_at_AMU) *
33
* SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34
* *
35
* Contact : info_at_agrum_dot_org *
36
* homepage : http://agrum.gitlab.io *
37
* gitlab : https://gitlab.com/agrumery/agrum *
38
* *
39
****************************************************************************/
40
41
42
#include <
agrum/base/graphicalModels/DAGmodel.h
>
43
44
#ifdef GUM_NO_INLINE
45
# include <
agrum/base/graphicalModels/DAGmodel_inl.h
>
46
#endif
/* GUM_NO_INLINE */
47
48
namespace
gum
{
49
DAGmodel::DAGmodel
() { GUM_CONSTRUCTOR(
DAGmodel
); }
50
51
DAGmodel::DAGmodel
(
const
DAGmodel
& from) :
DiscreteGraphicalModel
(from),
dag_
(from.
dag_
) {
52
GUM_CONS_CPY(
DAGmodel
);
53
}
54
55
DAGmodel::DAGmodel
(
DAGmodel
&& from) noexcept :
56
DiscreteGraphicalModel
(std::move(from)),
dag_
(std::move(from.dag_)) {
57
GUM_CONS_MOV(
DAGmodel
);
58
}
59
60
DAGmodel::~DAGmodel
() { GUM_DESTRUCTOR(
DAGmodel
); }
61
62
DAGmodel
&
DAGmodel::operator=
(
const
DAGmodel
& source) {
63
if
(
this
!= &source) {
64
DiscreteGraphicalModel::operator=
(source);
65
dag_
= source.
dag_
;
66
GUM_OP_CPY(
DAGmodel
);
67
}
68
69
return
*
this
;
70
}
71
72
DAGmodel
&
DAGmodel::operator=
(
DAGmodel
&& source)
noexcept
{
73
if
(
this
!= &source) {
74
DiscreteGraphicalModel::operator=
(std::move(source));
75
dag_
= std::move(source.dag_);
76
GUM_OP_MOV(
DAGmodel
);
77
}
78
return
*
this
;
79
}
80
81
UndiGraph
DAGmodel::moralGraph
()
const
{
82
auto
g =
dag_
.
moralGraph
();
83
_nameNodes_
(g);
84
return
g;
85
}
86
87
bool
DAGmodel::hasSameStructure
(
const
DAGmodel
& other)
const
{
88
if
(
this
== &other)
return
true
;
89
90
if
(
size
() != other.
size
())
return
false
;
91
92
if
(
sizeArcs
() != other.
sizeArcs
())
return
false
;
93
94
for
(
const
auto
& nid:
nodes
()) {
95
if
(!other.
exists
(
variable
(nid).name()))
return
false
;
96
}
97
98
for
(
const
auto
& arc:
arcs
()) {
99
if
(!other.
arcs
().
exists
(
Arc
(other.
idFromName
(
variable
(arc.tail()).
name
()),
100
other.
idFromName
(
variable
(arc.head()).
name
()))))
101
return
false
;
102
}
103
104
return
true
;
105
}
106
}
// namespace gum
DAGmodel.h
Class representing probabilistic DAG model.
DAGmodel_inl.h
Interface-like class encapsulating basic functionalities for a DAGModel.
gum::Arc
The base class for all directed edges.
Definition
graphElements.h:267
gum::DAG::moralGraph
UndiGraph moralGraph() const
build a UndiGraph by moralizing the dag
Definition
DAG.cpp:74
gum::DAGmodel::dag_
DAG dag_
The DAG of this Directed Graphical Model.
Definition
DAGmodel.h:284
gum::DAGmodel::DAGmodel
DAGmodel()
Default constructor.
Definition
DAGmodel.cpp:49
gum::DAGmodel::arcs
const ArcSet & arcs() const
return true if the arc tail->head exists in the DAGmodel
Definition
DAGmodel_inl.h:73
gum::DAGmodel::size
Size size() const final
Returns the number of variables in this Directed Graphical Model.
Definition
DAGmodel_inl.h:68
gum::DAGmodel::sizeArcs
Size sizeArcs() const
Returns the number of arcs in this Directed Graphical Model.
Definition
DAGmodel_inl.h:71
gum::DAGmodel::hasSameStructure
bool hasSameStructure(const DAGmodel &other) const
Definition
DAGmodel.cpp:87
gum::DAGmodel::operator=
DAGmodel & operator=(const DAGmodel &source)
Private copy operator.
Definition
DAGmodel.cpp:62
gum::DAGmodel::~DAGmodel
~DAGmodel() override
Destructor.
Definition
DAGmodel.cpp:60
gum::DAGmodel::exists
bool exists(NodeId node) const final
Return true if this node exists in this graphical model.
Definition
DAGmodel_inl.h:113
gum::DAGmodel::moralGraph
UndiGraph moralGraph() const
The node's id are coherent with the variables and nodes of the topology.
Definition
DAGmodel.cpp:81
gum::DAGmodel::nodes
const NodeGraphPart & nodes() const final
Returns a named copy of the internal DAG: each node id is assigned the name of the corresponding vari...
Definition
DAGmodel_inl.h:119
gum::DiscreteGraphicalModel::idFromName
NodeId idFromName(std::string_view name) const override
Returns the NodeId of a variable given its name.
Definition
discreteGraphicalModel_inl.h:61
gum::DiscreteGraphicalModel::operator=
DiscreteGraphicalModel & operator=(const DiscreteGraphicalModel &source)
Definition
discreteGraphicalModel.cpp:64
gum::DiscreteGraphicalModel::DiscreteGraphicalModel
DiscreteGraphicalModel()
Definition
discreteGraphicalModel.cpp:50
gum::DiscreteGraphicalModel::variable
const DiscreteVariable & variable(NodeId id) const override
Returns a constant reference over a variable given its node id.
Definition
discreteGraphicalModel_inl.h:51
gum::GraphicalModel::_nameNodes_
void _nameNodes_(NodeGraphPart &g) const
Names every node of g using variable(id).name() for each node id in g.
Definition
graphicalModel_inl.h:175
gum::Set::exists
bool exists(const Key &k) const
Indicates whether a given elements belong to the set.
Definition
set_tpl.h:504
gum::UndiGraph
Base class for undirected graphs.
Definition
undiGraph.h:130
gum::Variable::name
const std::string & name() const
returns the name of the variable
gum
gum is the global namespace for all aGrUM entities
Definition
agrum.h:46
aGrUM
3.2.0
© PHW&CG&others - 2022
DoXyGeN 1.18.0