aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
DAGmodel.cpp
Go to the documentation of this file.
1
/**
2
*
3
* Copyright (c) 2005-2021 by 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
) {
GUM_CONSTRUCTOR
(
DAGmodel
); }
30
31
DAGmodel
::
DAGmodel
(
const
DAGmodel
&
from
) :
dag_
(
from
.
dag_
),
_mutableMoralGraph_
(
nullptr
) {
32
GUM_CONS_CPY
(
DAGmodel
);
33
}
34
35
DAGmodel
::~
DAGmodel
() {
36
GUM_DESTRUCTOR
(
DAGmodel
);
37
if
(
_mutableMoralGraph_
!=
nullptr
) {
delete
_mutableMoralGraph_
; }
38
}
39
40
41
DAGmodel
&
DAGmodel
::
operator
=(
const
DAGmodel
&
source
) {
42
if
(
this
!= &
source
) {
43
GraphicalModel
::
operator
=(
source
);
44
45
if
(
_mutableMoralGraph_
) {
46
delete
_mutableMoralGraph_
;
47
_mutableMoralGraph_
=
nullptr
;
48
}
49
dag_
=
source
.
dag_
;
50
}
51
52
return
*
this
;
53
}
54
55
const
UndiGraph
&
DAGmodel
::
moralGraph
(
bool
clear
)
const
{
56
if
(
clear
|| (
_mutableMoralGraph_
==
nullptr
)) {
// we have to call dag().moralGraph()
57
if
(
_mutableMoralGraph_
==
nullptr
) {
58
_mutableMoralGraph_
=
new
UndiGraph
();
59
}
else
{
60
// clear is True , __mutableMoralGraph exists
61
_mutableMoralGraph_
->
clear
();
62
}
63
*
_mutableMoralGraph_
=
dag
().
moralGraph
();
64
}
65
66
return
*
_mutableMoralGraph_
;
67
}
68
69
bool
DAGmodel
::
hasSameStructure
(
const
DAGmodel
&
other
) {
70
if
(
this
== &
other
)
return
true
;
71
72
if
(
size
() !=
other
.
size
())
return
false
;
73
74
if
(
sizeArcs
() !=
other
.
sizeArcs
())
return
false
;
75
76
for
(
const
auto
&
nid
:
nodes
()) {
77
try
{
78
other
.
idFromName
(
variable
(
nid
).
name
());
79
}
catch
(
NotFound
) {
return
false
; }
80
}
81
82
for
(
const
auto
&
arc
:
arcs
()) {
83
if
(!
other
.
arcs
().
exists
(
Arc
(
other
.
idFromName
(
variable
(
arc
.
tail
()).
name
()),
84
other
.
idFromName
(
variable
(
arc
.
head
()).
name
()))))
85
return
false
;
86
}
87
88
return
true
;
89
}
90
}
// namespace gum
gum::Set::emplace
INLINE void emplace(Args &&... args)
Definition:
set_tpl.h:643