aGrUM
0.20.2
a C++ library for (probabilistic) graphical models
DAGmodel.cpp
Go to the documentation of this file.
1
/**
2
*
3
* Copyright 2005-2020 Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
4
* info_at_agrum_dot_org
5
*
6
* This library is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU Lesser General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public License
17
* along with this library. If not, see <http://www.gnu.org/licenses/>.
18
*
19
*/
20
21
22
#
include
<
agrum
/
tools
/
graphicalModels
/
DAGmodel
.
h
>
23
24
#
ifdef
GUM_NO_INLINE
25
#
include
<
agrum
/
tools
/
graphicalModels
/
DAGmodel_inl
.
h
>
26
#
endif
/* GUM_NO_INLINE */
27
28
namespace
gum
{
29
DAGmodel
::
DAGmodel
() :
mutableMoralGraph__
(
nullptr
) {
30
GUM_CONSTRUCTOR
(
DAGmodel
);
31
}
32
33
DAGmodel
::
DAGmodel
(
const
DAGmodel
&
from
) :
34
dag_
(
from
.
dag_
),
mutableMoralGraph__
(
nullptr
) {
35
GUM_CONS_CPY
(
DAGmodel
);
36
}
37
38
DAGmodel
::~
DAGmodel
() {
39
GUM_DESTRUCTOR
(
DAGmodel
);
40
if
(
mutableMoralGraph__
!=
nullptr
) {
delete
mutableMoralGraph__
; }
41
}
42
43
44
DAGmodel
&
DAGmodel
::
operator
=(
const
DAGmodel
&
source
) {
45
if
(
this
!= &
source
) {
46
GraphicalModel
::
operator
=(
source
);
47
48
if
(
mutableMoralGraph__
) {
49
delete
mutableMoralGraph__
;
50
mutableMoralGraph__
=
nullptr
;
51
}
52
dag_
=
source
.
dag_
;
53
}
54
55
return
*
this
;
56
}
57
58
const
UndiGraph
&
DAGmodel
::
moralGraph
(
bool
clear
)
const
{
59
if
(
clear
60
|| (
mutableMoralGraph__
61
==
nullptr
)) {
// we have to call dag().moralGraph()
62
if
(
mutableMoralGraph__
==
nullptr
) {
63
mutableMoralGraph__
=
new
UndiGraph
();
64
}
else
{
65
// clear is True ,__mutableMoralGraph exists
66
mutableMoralGraph__
->
clear
();
67
}
68
*
mutableMoralGraph__
=
dag
().
moralGraph
();
69
}
70
71
return
*
mutableMoralGraph__
;
72
}
73
74
bool
DAGmodel
::
hasSameStructure
(
const
DAGmodel
&
other
) {
75
if
(
this
== &
other
)
return
true
;
76
77
if
(
size
() !=
other
.
size
())
return
false
;
78
79
if
(
sizeArcs
() !=
other
.
sizeArcs
())
return
false
;
80
81
for
(
const
auto
&
nid
:
nodes
()) {
82
try
{
83
other
.
idFromName
(
variable
(
nid
).
name
());
84
}
catch
(
NotFound
) {
return
false
; }
85
}
86
87
for
(
const
auto
&
arc
:
arcs
()) {
88
if
(!
other
.
arcs
().
exists
(
Arc
(
other
.
idFromName
(
variable
(
arc
.
tail
()).
name
()),
89
other
.
idFromName
(
variable
(
arc
.
head
()).
name
()))))
90
return
false
;
91
}
92
93
return
true
;
94
}
95
}
// namespace gum
gum::Set::emplace
INLINE void emplace(Args &&... args)
Definition:
set_tpl.h:669