aGrUM 2.3.2
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-2025 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-2025 *
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
51 DAGmodel::DAGmodel(const DAGmodel& from) : dag_(from.dag_) { GUM_CONS_CPY(DAGmodel); }
52
53 DAGmodel::~DAGmodel() { GUM_DESTRUCTOR(DAGmodel); }
54
56 if (this != &source) {
58 dag_ = source.dag_;
59 }
60
61 return *this;
62 }
63
65
67 if (this == &other) return true;
68
69 if (size() != other.size()) return false;
70
71 if (sizeArcs() != other.sizeArcs()) return false;
72
73 for (const auto& nid: nodes()) {
74 try {
75 other.idFromName(variable(nid).name());
76 } catch (NotFound const&) { return false; }
77 }
78
79 for (const auto& arc: arcs()) {
80 if (!other.arcs().exists(Arc(other.idFromName(variable(arc.tail()).name()),
81 other.idFromName(variable(arc.head()).name()))))
82 return false;
83 }
84
85 return true;
86 }
87} // namespace gum
Class representing probabilistic DAG model.
Interface-like class encapsulating basic functionalities for a DAGModel.
The base class for all directed edges.
UndiGraph moralGraph() const
build a UndiGraph by moralizing the dag
Definition DAG.cpp:68
const DAG & dag() const
Returns a constant reference to the dag of this Bayes Net.
DAG dag_
The DAG of this Directed Graphical Model.
Definition DAGmodel.h:272
DAGmodel()
Default constructor.
Definition DAGmodel.cpp:49
const ArcSet & arcs() const
return true if the arc tail->head exists in the DAGmodel
virtual 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)
Definition DAGmodel.cpp:66
DAGmodel & operator=(const DAGmodel &source)
Private copy operator.
Definition DAGmodel.cpp:55
UndiGraph moralGraph() const
The node's id are coherent with the variables and nodes of the topology.
Definition DAGmodel.cpp:64
virtual ~DAGmodel()
Destructor.
Definition DAGmodel.cpp:53
const NodeGraphPart & nodes() const final
Returns a constant reference to the dag of this Bayes Net.
virtual const DiscreteVariable & variable(NodeId id) const =0
Returns a constant reference over a variable given it's node id.
GraphicalModel & operator=(const GraphicalModel &source)
Private copy operator.
virtual NodeId idFromName(const std::string &name) const =0
Getter by name.
Exception : the element we looked for cannot be found.
bool exists(const Key &k) const
Indicates whether a given elements belong to the set.
Definition set_tpl.h:533
Base class for undirected graphs.
Definition undiGraph.h:128
gum is the global namespace for all aGrUM entities
Definition agrum.h:46