aGrUM 3.0.0
a C++ library for (probabilistic) graphical models
DAGmodel_inl.h
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#pragma once
42
43
51
53
55
56namespace gum {
57 INLINE
58 const DAG& DAGmodel::internalDag() const { return dag_; }
59
60 INLINE
62 DAG g = dag_;
63 _nameNodes_(g);
64 return g;
65 }
66
67 INLINE
68 Size DAGmodel::size() const { return dag_.size(); }
69
70 INLINE
71 Size DAGmodel::sizeArcs() const { return dag_.sizeArcs(); }
72
73 INLINE const ArcSet& DAGmodel::arcs() const { return dag_.arcs(); }
74
75 INLINE bool DAGmodel::existsArc(const NodeId tail, const NodeId head) const {
76 return dag_.existsArc(tail, head);
77 }
78
79 INLINE bool DAGmodel::existsArc(std::string_view nametail, std::string_view namehead) const {
80 return existsArc(idFromName(nametail), idFromName(namehead));
81 }
82
83 INLINE const NodeSet& DAGmodel::parents(const NodeId id) const { return dag_.parents(id); }
84
85 INLINE const NodeSet& DAGmodel::parents(std::string_view name) const {
86 return parents(idFromName(name));
87 }
88
89 INLINE NodeSet DAGmodel::family(const NodeId id) const { return dag_.family(id); }
90
91 INLINE NodeSet DAGmodel::family(std::string_view name) const {
92 return dag_.family(idFromName(name));
93 }
94
95 INLINE const NodeSet& DAGmodel::children(const NodeId id) const { return dag_.children(id); }
96
97 INLINE const NodeSet& DAGmodel::children(std::string_view name) const {
98 return dag_.children(idFromName(name));
99 }
100
101 INLINE NodeSet DAGmodel::children(const NodeSet& ids) const { return dag_.children(ids); }
102
103 INLINE NodeSet DAGmodel::children(const std::vector< std::string >& names) const {
104 return children(nodeset(names));
105 }
106
107 INLINE NodeSet DAGmodel::parents(const NodeSet& ids) const { return dag_.parents(ids); }
109 INLINE NodeSet DAGmodel::parents(const std::vector< std::string >& names) const {
111 }
112
113 INLINE bool DAGmodel::exists(NodeId node) const { return dag_.exists(node); }
114
115 INLINE bool DAGmodel::exists(std::string_view name) const {
116 return variableNodeMap().exists(name);
117 }
118
119 INLINE const NodeGraphPart& DAGmodel::nodes() const {
120 return static_cast< const NodeGraphPart& >(dag_);
121 }
123 INLINE Sequence< NodeId > DAGmodel::topologicalOrder() const { return dag_.topologicalOrder(); }
124
126 return dag_.connectedComponents();
127 }
128
129 INLINE NodeSet DAGmodel::descendants(const NodeId id) const { return dag_.descendants(id); }
130
131 INLINE NodeSet DAGmodel::descendants(std::string_view name) const {
132 return descendants(idFromName(name));
133 }
134
135 INLINE NodeSet DAGmodel::ancestors(const NodeId id) const { return dag_.ancestors(id); }
136
137 INLINE NodeSet DAGmodel::ancestors(std::string_view name) const {
138 return ancestors(idFromName(name));
139 }
142 DAGmodel::moralizedAncestralGraph(const std::vector< std::string >& nodenames) const {
143 return moralizedAncestralGraph(nodeset(nodenames));
147 auto g = dag_.moralizedAncestralGraph(nodes);
148 _nameNodes_(g);
149 return g;
150 }
151
152 INLINE bool DAGmodel::isIndependent(NodeId X, NodeId Y, const NodeSet& Z) const {
153 return dag_.dSeparation(X, Y, Z);
154 }
155
156 INLINE bool DAGmodel::isIndependent(const NodeSet& X, const NodeSet& Y, const NodeSet& Z) const {
157 return dag_.dSeparation(X, Y, Z);
158 }
159
160 INLINE NodeSet DAGmodel::minimalCondSet(NodeId target, const NodeSet& soids) const {
161 return dag_.minimalCondSet(target, soids);
163
164 INLINE NodeSet DAGmodel::minimalCondSet(const NodeSet& targets, const NodeSet& soids) const {
165 return dag_.minimalCondSet(targets, soids);
167
168 INLINE NodeSet DAGmodel::minimalCondSet(std::string_view target,
169 const std::vector< std::string >& soids) const {
170 return dag_.minimalCondSet(idFromName(target), nodeset(soids));
171 }
172
173 INLINE NodeSet DAGmodel::minimalCondSet(const std::vector< std::string >& targets,
174 const std::vector< std::string >& soids) const {
175 return dag_.minimalCondSet(nodeset(targets), nodeset(soids));
177
178 INLINE bool DAGmodel::isIndependent(std::string_view Xname,
179 std::string_view Yname,
180 const std::vector< std::string >& Znames) const {
181 return isIndependent(idFromName(Xname), idFromName(Yname), nodeset(Znames));
182 }
183
184 INLINE bool DAGmodel::isIndependent(const std::vector< std::string >& Xnames,
185 const std::vector< std::string >& Ynames,
186 const std::vector< std::string >& Znames) const {
187 return isIndependent(nodeset(Xnames), nodeset(Ynames), nodeset(Znames));
188 }
189
190} /* namespace gum */
Class representing probabilistic DAG model.
Base class for dag.
Definition DAG.h:121
NodeProperty< NodeId > connectedComponents() const
Returns the weakly connected components of the underlying DAG. Each node maps to the id of its compon...
NodeSet family(const NodeId id) const final
returns the parents of a node and the node
DAG dag_
The DAG of this Directed Graphical Model.
Definition DAGmodel.h:284
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.
Sequence< NodeId > topologicalOrder() const
The topological order stays the same as long as no variable or arcs are added or erased src the topol...
NodeSet minimalCondSet(NodeId target, const NodeSet &soids) const
bool existsArc(const NodeId tail, const NodeId head) const
return true if the arc tail->head exists in the DAGmodel
DAG dag() const
Returns a named copy of the internal DAG: each node id is assigned the name of the corresponding vari...
UndiGraph moralizedAncestralGraph(const NodeSet &nodes) const
build a UndiGraph by moralizing the Ancestral Graph of a set of Nodes
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
bool exists(NodeId node) const final
Return true if this node exists in this graphical model.
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
bool isIndependent(NodeId X, NodeId Y, const NodeSet &Z) const final
check if node X and node Y are independent given nodes Z
NodeSet descendants(const NodeId id) const
returns the set of nodes with directed path outgoing from a given node
const NodeGraphPart & nodes() const final
Returns a named copy of the internal DAG: each node id is assigned the name of the corresponding vari...
NodeSet ancestors(const NodeId id) const
returns the set of nodes with directed path ingoing to a given node
const DAG & internalDag() const
Returns a const reference to the internal (unnamed) DAG. O(1), no copy. Use for stable references or ...
NodeId idFromName(std::string_view name) const override
Returns the NodeId of a variable given its name.
const VariableNodeMap & variableNodeMap() const override
Returns a constant reference to the VariableNodeMap of this model.
void _nameNodes_(NodeGraphPart &g) const
Names every node of g using variable(id).name() for each node id in g.
std::vector< NodeId > ids(const std::vector< std::string > &names) const
transform a vector of names into a vector of nodeId
std::vector< std::string > names(const std::vector< NodeId > &ids) const
transform a vector of NodeId in a vector of names
NodeSet nodeset(const std::vector< std::string > &names) const
transform a vector of names into a NodeSet
Class for node sets in graph.
Base class for undirected graphs.
Definition undiGraph.h:130
bool exists(NodeId id) const
Return true if id matches a node.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition types.h:74
Size NodeId
Type for node ids.
Set< Arc > ArcSet
Some typdefs and define for shortcuts ...
HashTable< NodeId, VAL > NodeProperty
Property on graph elements.
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
Useful macros for maths.
gum is the global namespace for all aGrUM entities
Definition agrum.h:46