aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
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
43
44#ifdef GUM_NO_INLINE
46#endif /* GUM_NO_INLINE */
47
48namespace gum {
49 DAGmodel::DAGmodel() { GUM_CONSTRUCTOR(DAGmodel); }
50
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
63 if (this != &source) {
65 dag_ = source.dag_;
66 GUM_OP_CPY(DAGmodel);
67 }
68
69 return *this;
70 }
71
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
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
Class representing probabilistic DAG model.
Interface-like class encapsulating basic functionalities for a DAGModel.
The base class for all directed edges.
DAG dag_
The DAG of this Directed Graphical Model.
Definition DAGmodel.h:284
DAGmodel()
Default constructor.
Definition DAGmodel.cpp:49
const ArcSet & arcs() const
return true if the arc tail->head exists in the DAGmodel
Size size() const final
Returns the number of variables in this Directed Graphical Model.
Size sizeArcs() const
Returns the number of arcs in this Directed Graphical Model.
bool hasSameStructure(const DAGmodel &other) const
Definition DAGmodel.cpp:87
DAGmodel & operator=(const DAGmodel &source)
Private copy operator.
Definition DAGmodel.cpp:62
~DAGmodel() override
Destructor.
Definition DAGmodel.cpp:60
bool exists(NodeId node) const final
Return true if this node exists in this graphical model.
UndiGraph moralGraph() const
The node's id are coherent with the variables and nodes of the topology.
Definition DAGmodel.cpp:81
const NodeGraphPart & nodes() const final
Returns a named copy of the internal DAG: each node id is assigned the name of the corresponding vari...
NodeId idFromName(std::string_view name) const override
Returns the NodeId of a variable given its name.
DiscreteGraphicalModel & operator=(const DiscreteGraphicalModel &source)
const DiscreteVariable & variable(NodeId id) const override
Returns a constant reference over a variable given its node id.
void _nameNodes_(NodeGraphPart &g) const
Names every node of g using variable(id).name() for each node id in g.
bool exists(const Key &k) const
Indicates whether a given elements belong to the set.
Definition set_tpl.h:504
Base class for undirected graphs.
Definition undiGraph.h:130
gum is the global namespace for all aGrUM entities
Definition agrum.h:46