aGrUM
3.2.0
a C++ library for (probabilistic) graphical models
Toggle main menu visibility
UGmodel.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/UGmodel.h
>
43
44
#ifdef GUM_NO_INLINE
45
# include <
agrum/base/graphicalModels/UGmodel_inl.h
>
46
#endif
/* GUM_NO_INLINE */
47
48
namespace
gum
{
49
UGmodel::UGmodel
() { GUM_CONSTRUCTOR(
UGmodel
); }
50
51
UGmodel::UGmodel
(
const
UGmodel
& from) :
DiscreteGraphicalModel
(from),
graph_
(from.
graph_
) {
52
GUM_CONS_CPY(
UGmodel
);
53
}
54
55
UGmodel::UGmodel
(
UGmodel
&& from) :
56
DiscreteGraphicalModel
(
std
::move(from)),
graph_
(
std
::move(from.
graph_
)) {
57
GUM_CONS_MOV(
UGmodel
);
58
}
59
60
UGmodel::~UGmodel
() { GUM_DESTRUCTOR(
UGmodel
); }
61
62
UGmodel
&
UGmodel::operator=
(
const
UGmodel
& source) {
63
if
(
this
!= &source) {
64
DiscreteGraphicalModel::operator=
(source);
65
graph_
= source.
graph_
;
66
GUM_OP_CPY(
UGmodel
);
67
}
68
69
return
*
this
;
70
}
71
72
UGmodel
&
UGmodel::operator=
(
UGmodel
&& source) {
73
if
(
this
!= &source) {
74
DiscreteGraphicalModel::operator=
(std::move(source));
75
graph_
= std::move(source.graph_);
76
GUM_OP_MOV(
UGmodel
);
77
}
78
79
return
*
this
;
80
}
81
82
bool
UGmodel::hasSameStructure
(
const
UGmodel
& other)
const
{
83
if
(
this
== &other)
return
true
;
84
85
if
(
size
() != other.
size
())
return
false
;
86
87
if
(
sizeEdges
() != other.
sizeEdges
())
return
false
;
88
89
for
(
const
auto
& nid:
nodes
()) {
90
if
(!other.
exists
(
variable
(nid).name()))
return
false
;
91
}
92
93
for
(
const
auto
& edge:
edges
()) {
94
if
(!other.
edges
().
exists
(
Edge
(other.
idFromName
(
variable
(edge.first()).
name
()),
95
other.
idFromName
(
variable
(edge.second()).
name
()))))
96
return
false
;
97
}
98
99
return
true
;
100
}
101
}
// namespace gum
UGmodel.h
Class representing probabilistic undirected model.
UGmodel_inl.h
Interface-like class encapsulating basic functionalities for a IMarkovRandomFieldwork.
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::Edge
The base class for all undirected edges.
Definition
graphElements.h:164
gum::Set::exists
bool exists(const Key &k) const
Indicates whether a given elements belong to the set.
Definition
set_tpl.h:504
gum::UGmodel::hasSameStructure
bool hasSameStructure(const UGmodel &other) const
check if nodes X and nodes Y are independent given nodes Z
Definition
UGmodel.cpp:82
gum::UGmodel::UGmodel
UGmodel()
Default constructor.
Definition
UGmodel.cpp:49
gum::UGmodel::nodes
const NodeGraphPart & nodes() const final
Returns a named copy of the internal undirected graph: each node id is assigned the name of the corre...
Definition
UGmodel_inl.h:97
gum::UGmodel::operator=
UGmodel & operator=(const UGmodel &source)
Private copy operator.
Definition
UGmodel.cpp:62
gum::UGmodel::exists
bool exists(NodeId node) const final
Return true if this node exists in this graphical model.
Definition
UGmodel_inl.h:89
gum::UGmodel::graph_
UndiGraph graph_
The DAG of this Directed Graphical Model.
Definition
UGmodel.h:195
gum::UGmodel::edges
const EdgeSet & edges() const
return true if the edge node1-node2 exists in the UGModel
Definition
UGmodel_inl.h:73
gum::UGmodel::~UGmodel
~UGmodel() override
Destructor.
Definition
UGmodel.cpp:60
gum::UGmodel::sizeEdges
Size sizeEdges() const
Returns the number of arcs in this Directed Graphical Model.
Definition
UGmodel_inl.h:71
gum::UGmodel::size
Size size() const final
Returns the number of variables in this Directed Graphical Model.
Definition
UGmodel_inl.h:68
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
std
STL namespace.
aGrUM
3.2.0
© PHW&CG&others - 2022
DoXyGeN 1.18.0