aGrUM  0.16.0
gum::prm::gspan::Pattern Class Reference

This contains all the information we want for a node in a DFSTree. More...

#include <agrum/PRM/gspan/pattern.h>

+ Inheritance diagram for gum::prm::gspan::Pattern:
+ Collaboration diagram for gum::prm::gspan::Pattern:

Public Member Functions

Constructor and destructor.
 Pattern ()
 Default constructor. More...
 
 Pattern (const Pattern &source)
 Copy constructor. More...
 
 ~Pattern ()
 Destructor. More...
 
Graphical getters and setters.
NodeId addNodeWithLabel (LabelData &l)
 Insert a node with the given LabelData. More...
 
LabelDatalabel (NodeId node)
 Returns the LabelData assigned to node. More...
 
const LabelDatalabel (NodeId node) const
 Returns the LabelData assigned to node. More...
 
LabelDatalabel (NodeId i, NodeId j)
 Returns the LabelData assigned to arc. More...
 
const LabelDatalabel (NodeId i, NodeId j) const
 Returns the LabelData assigned to arc. More...
 
LabelDatalabel (const Arc &arc)
 Returns the LabelData assigned to arc. More...
 
const LabelDatalabel (const Arc &arc) const
 Returns the LabelData assigned to arc. More...
 
LabelDatalastAdded ()
 Insert a node with the given LabelData. More...
 
const LabelDatalastAdded () const
 Insert a node with the given LabelData. More...
 
void addArc (NodeId i, NodeId j, LabelData &l)
 Add an arc to this Pattern. More...
 
bool exists (NodeId id) const
 Returns true if id is a node in this Pattern. More...
 
bool exists (NodeId tail, NodeId head) const
 Returns true if (tail, head) is an arc in this Pattern. More...
 
Size size () const
 Returns the number of nodes in this Pattern. More...
 
Size sizeArcs () const
 Returns the number of arcs in this Pattern. More...
 
void rightmostPath (std::list< NodeId > &r_path) const
 Fill r_path with the rightmost path of this Pattern. The list is supposed empty. More...
 
std::string toDot (size_t name) const
 Print the pattern in the DOT syntax. More...
 
Access to topology
const NodeGraphPartnodes () const
 
const ArcSetarcs () const
 
DFSCode related methods.
DFSCodecode ()
 Returns the DFSCode of this Pattern. More...
 
const DFSCodecode () const
 Returns the DFSCode of this Pattern. More...
 
EdgeCodeedgeCode (NodeId tail, NodeId head)
 Returns the EdgeCode of an edge of this Pattern. More...
 
EdgeCodeedgeCode (const Arc &arc)
 Returns the EdgeCode of an edge of this Pattern. More...
 
const EdgeCodeedgeCode (NodeId tail, NodeId head) const
 Returns the EdgeCode of an edge of this Pattern. More...
 
const EdgeCodeedgeCode (const Arc &arc) const
 Returns the EdgeCode of an edge of this Pattern. More...
 
void pop_back ()
 Remove the last EdgeCode of this pattern. More...
 
void remove (NodeId node)
 Remove a node if it has no neighbors, raise an OperationNotAllowed otherwise. More...
 
bool isMinimal ()
 Returns the DFSCode of this Pattern. More...
 

Detailed Description

This contains all the information we want for a node in a DFSTree.

Several rules are used regarding nodes in Pattern::graph. First nodes are added respecting a depth-first search, thus each node is labelled from 1 to n, where n is the number of nodes in Pattern::graph.

Given two nodes id i and j, if i < j then i was discovered before j in the depth first search.

To retrieve the depth first search tree from Pattern::graph simple consider only arcs (u, v) with u < v. The set of arcs { (u,v) | u < v} is called the forward edge set and the set of arcs { (u,v) | u > v} is called the backward edge set.

The orientation in Pattern::graph is only used to differentiate forward edges from backward edges.

Definition at line 73 of file pattern.h.

Member Typedef Documentation

◆ ArcIterator

Definition at line 81 of file arcGraphPart.h.

◆ node_const_iterator

types for STL compliance

Definition at line 261 of file nodeGraphPart.h.

◆ node_const_iterator_safe

types for STL compliance

Definition at line 263 of file nodeGraphPart.h.

◆ node_iterator

types for STL compliance

Definition at line 260 of file nodeGraphPart.h.

◆ node_iterator_safe

types for STL compliance

Definition at line 262 of file nodeGraphPart.h.

◆ NodeConstIterator

Definition at line 270 of file nodeGraphPart.h.

◆ NodeConstIteratorSafe

◆ NodeIterator

Definition at line 269 of file nodeGraphPart.h.

◆ NodeIteratorSafe

Constructor & Destructor Documentation

◆ Pattern() [1/2]

INLINE gum::prm::gspan::Pattern::Pattern ( )

Default constructor.

Definition at line 35 of file pattern_inl.h.

35 : DiGraph(), __last(0) { GUM_CONSTRUCTOR(Pattern); }
DiGraph(Size nodes_size=HashTableConst::default_size, bool nodes_resize_policy=true, Size arcs_size=HashTableConst::default_size, bool arcs_resize_policy=true)
default constructor
Definition: diGraph.cpp:37
Pattern()
Default constructor.
Definition: pattern_inl.h:35
LabelData * __last
The last LabelData added to this pattern.
Definition: pattern.h:216

◆ Pattern() [2/2]

gum::prm::gspan::Pattern::Pattern ( const Pattern source)

Copy constructor.

Definition at line 40 of file pattern.cpp.

References addArc(), addNodeWithLabel(), code(), gum::prm::gspan::DFSCode::codes, gum::HashTable< Key, Val, Alloc >::insert(), label(), and size().

40  : DiGraph(), __last(0) {
41  GUM_CONS_CPY(Pattern);
42  NodeProperty< NodeId > node_map;
43 
44  for (NodeId node = 1; node <= source.size(); ++node) {
45  node_map.insert(
46  node, addNodeWithLabel(const_cast< LabelData& >(source.label(node))));
47  }
48 
49  for (const auto edge : source.code().codes)
50  addArc(node_map[edge->i],
51  node_map[edge->j],
52  const_cast< LabelData& >(
53  source.label(node_map[edge->i], node_map[edge->j])));
54  }
DiGraph(Size nodes_size=HashTableConst::default_size, bool nodes_resize_policy=true, Size arcs_size=HashTableConst::default_size, bool arcs_resize_policy=true)
default constructor
Definition: diGraph.cpp:37
Pattern()
Default constructor.
Definition: pattern_inl.h:35
NodeId addNodeWithLabel(LabelData &l)
Insert a node with the given LabelData.
Definition: pattern_inl.h:41
LabelData * __last
The last LabelData added to this pattern.
Definition: pattern.h:216
void addArc(NodeId i, NodeId j, LabelData &l)
Add an arc to this Pattern.
Definition: pattern_inl.h:118
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the call graph for this function:

◆ ~Pattern()

INLINE gum::prm::gspan::Pattern::~Pattern ( )

Destructor.

Definition at line 38 of file pattern_inl.h.

38 { GUM_DESTRUCTOR(Pattern); }
Pattern()
Default constructor.
Definition: pattern_inl.h:35

Member Function Documentation

◆ __expandCodeIsMinimal()

bool gum::prm::gspan::Pattern::__expandCodeIsMinimal ( NodeId  u,
NodeId  v 
)
private

Returns true if the expand code by adding and edge betwenne u and v is minimal with respect to __code.

Parameters
uA node in this Pattern.
vA node in this Pattern.
Returns
true if the expand code by adding and edge betwenne u and v is minimal with respect to __code.

Definition at line 99 of file pattern.cpp.

References __rec(), addArc(), addNodeWithLabel(), gum::ArcGraphPart::children(), gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::insert(), label(), and gum::ArcGraphPart::parents().

Referenced by isMinimal().

99  {
100  Bijection< NodeId, NodeId > node_map;
101  Pattern p;
102  node_map.insert(u, p.addNodeWithLabel(label(u)));
103  node_map.insert(v, p.addNodeWithLabel(label(v)));
104 
105  try {
106  p.addArc(1, 2, label(u, v));
107  } catch (NotFound&) { p.addArc(1, 2, label(v, u)); }
108 
109  for (const auto nei : children(u))
110  if (nei != v)
111  if (__rec(p, node_map, u, nei)) return true;
112 
113  for (const auto nei : parents(u))
114  if (nei != v)
115  if (__rec(p, node_map, u, nei)) return true;
116 
117  for (const auto nei : children(v))
118  if (nei != u)
119  if (__rec(p, node_map, v, nei)) return true;
120 
121  for (const auto nei : parents(v))
122  if (nei != u)
123  if (__rec(p, node_map, v, nei)) return true;
124 
125  return false;
126  }
Pattern()
Default constructor.
Definition: pattern_inl.h:35
LabelData & label(NodeId node)
Returns the LabelData assigned to node.
Definition: pattern_inl.h:50
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
bool __rec(Pattern &p, Bijection< NodeId, NodeId > &node_map, NodeId u, NodeId v)
Recurisve method used by __expandCodeIsMinimal.
Definition: pattern.cpp:128
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ __not_rec()

bool gum::prm::gspan::Pattern::__not_rec ( Pattern p,
Bijection< NodeId, NodeId > &  node_map,
NodeId  u,
NodeId  v 
)
private

A non recursive bugged version of __rec.

Definition at line 189 of file pattern.cpp.

References addArc(), addNodeWithLabel(), gum::ArcGraphPart::children(), code(), gum::prm::gspan::DFSCode::codes, gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::eraseFirst(), gum::ArcGraphPart::existsArc(), gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::existsFirst(), gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::first(), gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::insert(), label(), gum::ArcGraphPart::parents(), pop_back(), remove(), rightmostPath(), and gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::second().

192  {
193  std::vector< std::pair< NodeId, NodeId > > stack;
194  std::vector< size_t > rec_call;
195  stack.push_back(std::make_pair(a_u, a_v));
196  NodeId u = 0;
197  NodeId v = 0;
198 
199  while (!stack.empty()) {
200  bool go = true;
201  u = stack.back().first;
202  v = stack.back().second;
203  stack.pop_back();
204 
205  if ((u == 0) && (v == 0)) {
206  p.pop_back();
207  } else {
208  if (node_map.existsFirst(v)) {
209  if (node_map.second(u) < node_map.second(v)) {
210  // Invalid forward edge
211  go = false;
212  } else if ((p.existsArc(node_map.second(u), node_map.second(v)))
213  || (p.existsArc(node_map.second(v),
214  node_map.second(u)))) {
215  // Duplicate arc !
216  go = false;
217  }
218  } else {
219  node_map.insert(v, p.addNodeWithLabel(label(v)));
220  }
221 
222  if (go) {
223  // Retrieving arc label data
224  LabelData* data = 0;
225 
226  try {
227  data = &(label(u, v));
228  } catch (NotFound&) { data = &(label(v, u)); }
229 
230  // Adding arc
231  try {
232  p.addArc(node_map.second(u), node_map.second(v), *data);
233  } catch (OperationNotAllowed&) {
234  // Invalid neighbor
235  if (node_map.second(u) < node_map.second(v)) {
236  p.remove(node_map.second(v));
237  node_map.eraseFirst(v);
238  }
239 
240  go = false;
241  }
242 
243  if (go) {
244  // Check if this is minimal or if equal find another growth
245  size_t depth = p.code().codes.size() - 1;
246 
247  if (*(p.code().codes.back()) < *(code().codes[depth])) {
248  return true;
249  } else if (*(p.code().codes.back()) == *(code().codes[depth])) {
250  std::list< NodeId > r_path;
251  p.rightmostPath(r_path);
252  stack.push_back(std::make_pair((NodeId)0, (NodeId)0));
253 
254  for (const auto node : r_path) {
255  for (const auto nei : children(node)) {
256  stack.push_back(std::make_pair(node_map.first(node), nei));
257  ++(rec_call.back());
258  }
259 
260  for (const auto nei : parents(node)) {
261  stack.push_back(std::make_pair(node_map.first(node), nei));
262  ++(rec_call.back());
263  }
264  }
265  }
266 
267  if (p.code().codes.back()->isForward()) node_map.eraseFirst(v);
268  }
269  }
270  }
271  }
272 
273  return false;
274  }
DFSCode & code()
Returns the DFSCode of this Pattern.
Definition: pattern_inl.h:173
std::vector< EdgeCode *> codes
The vector containing the EdgeCode composing this DFSCode.
Definition: DFSCode.h:90
LabelData & label(NodeId node)
Returns the LabelData assigned to node.
Definition: pattern_inl.h:50
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the call graph for this function:

◆ __rec()

bool gum::prm::gspan::Pattern::__rec ( Pattern p,
Bijection< NodeId, NodeId > &  node_map,
NodeId  u,
NodeId  v 
)
private

Recurisve method used by __expandCodeIsMinimal.

Parameters
pA Pattern.
node_mapA bijection.
uA node in this Pattern.
vA node in this Pattern.
Returns
true if the expansion is minimal.

Definition at line 128 of file pattern.cpp.

References addArc(), addNodeWithLabel(), gum::ArcGraphPart::children(), code(), gum::prm::gspan::DFSCode::codes, gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::eraseFirst(), gum::ArcGraphPart::existsArc(), gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::existsFirst(), gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::first(), gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::insert(), label(), gum::ArcGraphPart::parents(), pop_back(), remove(), rightmostPath(), and gum::BijectionImplementation< T1, T2, Alloc, std::is_scalar< T1 >::value &&std::is_scalar< T2 >::value >::second().

Referenced by __expandCodeIsMinimal().

131  {
132  if (node_map.existsFirst(v)) {
133  if (node_map.second(u) < node_map.second(v)) {
134  // Invalid forward edge
135  return false;
136  } else if ((p.existsArc(node_map.second(u), node_map.second(v)))
137  || (p.existsArc(node_map.second(v), node_map.second(u)))) {
138  // Duplicate arc !
139  return false;
140  }
141  } else {
142  node_map.insert(v, p.addNodeWithLabel(label(v)));
143  }
144 
145  // Retrieving arc label data
146  LabelData* data = 0;
147 
148  try {
149  data = &(label(u, v));
150  } catch (NotFound&) { data = &(label(v, u)); }
151 
152  // Adding arc
153  try {
154  p.addArc(node_map.second(u), node_map.second(v), *data);
155  } catch (OperationNotAllowed&) {
156  // Invalid neighbor
157  if (node_map.second(u) < node_map.second(v)) {
158  p.remove(node_map.second(v));
159  node_map.eraseFirst(v);
160  }
161 
162  return false;
163  }
164 
165  // Check if this is minimal or if equal find another growth
166  size_t depth = p.code().codes.size() - 1;
167 
168  if (*(p.code().codes.back()) < *(code().codes[depth])) {
169  return true;
170  } else if (*(p.code().codes.back()) == *(code().codes[depth])) {
171  std::list< NodeId > r_path;
172  p.rightmostPath(r_path);
173 
174  for (const auto node : r_path) {
175  for (const auto nei : children(node_map.first(node)))
176  if (__rec(p, node_map, node_map.first(node), nei)) return true;
177 
178  for (const auto nei : parents(node_map.first(node)))
179  if (__rec(p, node_map, node_map.first(node), nei)) return true;
180  }
181  }
182 
183  if (p.code().codes.back()->isForward()) node_map.eraseFirst(v);
184 
185  p.pop_back();
186  return false;
187  }
DFSCode & code()
Returns the DFSCode of this Pattern.
Definition: pattern_inl.h:173
std::vector< EdgeCode *> codes
The vector containing the EdgeCode composing this DFSCode.
Definition: DFSCode.h:90
LabelData & label(NodeId node)
Returns the LabelData assigned to node.
Definition: pattern_inl.h:50
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
bool __rec(Pattern &p, Bijection< NodeId, NodeId > &node_map, NodeId u, NodeId v)
Recurisve method used by __expandCodeIsMinimal.
Definition: pattern.cpp:128
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _eraseSetOfArcs()

INLINE void gum::ArcGraphPart::_eraseSetOfArcs ( const ArcSet set)
protectedinherited

a (virtualized) function to remove a given set of arcs

Warning
this function uses eraseArc, which is a virtual function. Hence the behaviour of this function is that of a virtual function

Definition at line 91 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::eraseArc().

91  {
92  for (const auto arc : set)
93  eraseArc(arc);
94  }
virtual void eraseArc(const Arc &arc)
removes an arc from the ArcGraphPart
+ Here is the call graph for this function:

◆ _unvirtualizedEraseSetOfArcs()

INLINE void gum::ArcGraphPart::_unvirtualizedEraseSetOfArcs ( const ArcSet set)
protectedinherited

similar to _eraseSetOfArcs except that it is unvirtualized

Warning
this function uses ArcGraphPart::eraseArc, hence, as compared with _eraseSetOfArcs, it removes the arcs without calling a virtual eraseArc

Definition at line 124 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::eraseArc().

124  {
125  for (const auto& arc : set)
127  }
virtual void eraseArc(const Arc &arc)
removes an arc from the ArcGraphPart
+ Here is the call graph for this function:

◆ addArc() [1/2]

INLINE void gum::prm::gspan::Pattern::addArc ( NodeId  i,
NodeId  j,
LabelData l 
)

Add an arc to this Pattern.

This create an EdgeCode and check if it respects neighborhood restriction, if not an exception is raised.

Parameters
iThe DFS subscript of the first node in the code.
jThe DFS subscript of the second node in the code.
lThe label data of the added edge.
Exceptions
OperationNotAllowedRaised if the neighborhood restriction is not respected.

Definition at line 118 of file pattern_inl.h.

References __arc_map, __node_map, gum::DiGraph::addArc(), code(), gum::prm::gspan::DFSCode::codes, gum::NodeGraphPart::exists(), GUM_ERROR, gum::prm::gspan::LabelData::id, and gum::prm::gspan::DFSCode::validNeighbors().

Referenced by gum::prm::gspan::DFSTree< GUM_SCALAR >::__checkGrowth(), __expandCodeIsMinimal(), __not_rec(), __rec(), gum::prm::gspan::DFSTree< GUM_SCALAR >::addRoot(), and Pattern().

118  {
119  if (!(DiGraph::exists(i) && DiGraph::exists(j))) {
120  GUM_ERROR(NotFound, "node not found in this pattern");
121  }
122 
123  EdgeCode* edge =
124  new EdgeCode(i, j, __node_map[i]->id, l.id, __node_map[j]->id);
125 
126  if ((code().codes.size() == 0)
127  || (DFSCode::validNeighbors(code().codes.back(), edge))) {
128  DiGraph::addArc(i, j);
129  __arc_map.insert(Arc(i, j), std::make_pair(&l, edge));
130  code().codes.push_back(edge);
131  } else {
132  delete edge;
133  GUM_ERROR(OperationNotAllowed,
134  "illegal arc considering neighborhood restriction");
135  }
136  }
virtual void addArc(const NodeId tail, const NodeId head)
insert a new arc into the directed graph
Definition: diGraph_inl.h:35
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
DFSCode & code()
Returns the DFSCode of this Pattern.
Definition: pattern_inl.h:173
bool exists(const NodeId id) const
alias for existsNode
std::vector< EdgeCode *> codes
The vector containing the EdgeCode composing this DFSCode.
Definition: DFSCode.h:90
NodeProperty< LabelData *> __node_map
Mapping between nodes in this Pattern and their respective LabelData.
Definition: pattern.h:209
static bool validNeighbors(EdgeCode *e1, EdgeCode *e2)
Returns true of e2 is a valid neighbor for e1 (i.e.
Definition: DFSCode.h:142
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ addArc() [2/2]

INLINE void gum::DiGraph::addArc ( const NodeId  tail,
const NodeId  head 
)
virtualinherited

insert a new arc into the directed graph

Parameters
tailthe id of the tail of the new inserted arc
headthe id of the head of the new inserted arc
Warning
if the arc already exists, nothing is done. In particular, no exception is raised.
Exceptions
InvalidNodeif head or tail does not belong to the graph nodes

Reimplemented from gum::ArcGraphPart.

Reimplemented in gum::DAG.

Definition at line 35 of file diGraph_inl.h.

References gum::ArcGraphPart::addArc(), gum::NodeGraphPart::exists(), and GUM_ERROR.

Referenced by gum::EssentialGraph::__buildEssentialGraph(), gum::MarkovBlanket::__buildMarkovBlanket(), gum::learning::Miic::_orientation_3off2(), gum::learning::Miic::_orientation_latents(), gum::learning::Miic::_orientation_miic(), gum::learning::Miic::_propagatesHead(), addArc(), gum::DAG::addArc(), and gum::DAGCycleDetector::addArc().

35  {
36  if (!exists(head)) { GUM_ERROR(InvalidNode, "head node"); }
37 
38  if (!exists(tail)) { GUM_ERROR(InvalidNode, "tail node"); }
39 
40  ArcGraphPart::addArc(tail, head);
41  }
virtual void addArc(const NodeId tail, const NodeId head)
insert a new arc into the ArcGraphPart
bool exists(const NodeId id) const
alias for existsNode
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ addNode()

INLINE NodeId gum::NodeGraphPart::addNode ( )
virtualinherited

insert a new node and return its id

Returns
the id chosen by the internal idFactory

Reimplemented in gum::CliqueGraph.

Definition at line 253 of file nodeGraphPart_inl.h.

References GUM_EMIT1.

Referenced by gum::prm::gspan::DFSTree< GUM_SCALAR >::__addChild(), gum::prm::StructuredInference< GUM_SCALAR >::__addEdgesInReducedGraph(), gum::prm::o3prm::O3InterfaceFactory< GUM_SCALAR >::__addInterface2Dag(), gum::prm::ClassDependencyGraph< GUM_SCALAR >::__addNode(), gum::prm::o3prm::O3TypeFactory< GUM_SCALAR >::__addTypes2Dag(), gum::prm::gspan::StrictSearch< GUM_SCALAR >::__buildPatternGraph(), gum::prm::StructuredInference< GUM_SCALAR >::__buildPatternGraph(), gum::prm::o3prm::O3ClassFactory< GUM_SCALAR >::__checkAndAddNodesToDag(), gum::prm::LayerGenerator< GUM_SCALAR >::__generateClassDag(), gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::__generateClassDag(), gum::prm::gspan::DFSTree< GUM_SCALAR >::__initialiaze_root(), gum::IncrementalGraphLearner< AttributeSelection, isScalar >::_insertNode(), gum::prm::gspan::DFSTree< GUM_SCALAR >::addRoot(), gum::prm::gspan::DFSTree< GUM_SCALAR >::growPattern(), gum::IncrementalGraphLearner< AttributeSelection, isScalar >::IncrementalGraphLearner(), gum::prm::gspan::EdgeGrowth< GUM_SCALAR >::insert(), and gum::LeafAggregator::update().

253  {
254  NodeId newNode;
255 
256  // fill the first hole if holes exist
257  if (__holes && (!__holes->empty())) {
258  newNode = *(__holes->begin());
259  __eraseHole(newNode);
260  } else {
261  newNode = __boundVal;
262  ++__boundVal;
264  }
265 
266  GUM_EMIT1(onNodeAdded, newNode);
267 
268  return newNode;
269  }
bool empty() const noexcept
Indicates whether the set is the empty set.
Definition: set_tpl.h:707
NodeSet * __holes
the set of nodes not contained in the NodeGraphPart in the interval 1..__max
#define GUM_EMIT1(signal, arg1)
Definition: signaler1.h:42
iterator begin() const
The usual unsafe begin iterator to parse the set.
Definition: set_tpl.h:517
NodeId __boundVal
the id below which NodeIds may belong to the NodeGraphPart
void __updateEndIteratorSafe()
updating endIterator (always at __max+1)
Signaler1< NodeId > onNodeAdded
void __eraseHole(NodeId id)
to delete hole.
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the caller graph for this function:

◆ addNodes()

INLINE std::vector< NodeId > gum::NodeGraphPart::addNodes ( Size  n)
inherited

insert n nodes

Parameters
nthe number of nodes to add
Returns
the vector of chosen ids

Definition at line 271 of file nodeGraphPart_inl.h.

271  {
272  std::vector< NodeId > v;
273  v.reserve(N);
274  for (Idx i = 0; i < N; i++)
275  v.push_back(this->addNode());
276  return v;
277  }

◆ addNodeWithId()

void gum::NodeGraphPart::addNodeWithId ( const NodeId  id)
virtualinherited

try to insert a node with the given id

Warning
This method should be carefully used. Please prefer populateNodes or populateNodesFromProperty when possible
Exceptions
DuplicateElementexception if the id already exists

Definition at line 132 of file nodeGraphPart.cpp.

References gum::NodeGraphPart::__boundVal, gum::NodeGraphPart::__eraseHole(), gum::NodeGraphPart::__holes, gum::NodeGraphPart::__holes_resize_policy, gum::NodeGraphPart::__holes_size, gum::NodeGraphPart::__inHoles(), gum::NodeGraphPart::__updateEndIteratorSafe(), GUM_EMIT1, GUM_ERROR, gum::Set< Key, Alloc >::insert(), and gum::NodeGraphPart::onNodeAdded.

Referenced by gum::EssentialGraph::__buildEssentialGraph(), gum::MarkovBlanket::__buildMarkovBlanket(), gum::SpanningForestPrim::__computeInAComponent(), gum::learning::genericBNLearner::__learnDAG(), gum::learning::genericBNLearner::__prepare_miic_3off2(), gum::prm::GSpan< GUM_SCALAR >::__sortPatterns(), gum::InfluenceDiagram< GUM_SCALAR >::_addNode(), gum::InfluenceDiagram< GUM_SCALAR >::_moralGraph(), addNodeWithLabel(), gum::prm::StructuredInference< GUM_SCALAR >::CData::CData(), gum::InfluenceDiagram< GUM_SCALAR >::getDecisionGraph(), gum::BayesNetFragment< GUM_SCALAR >::installNode(), gum::prm::gspan::InterfaceGraph< GUM_SCALAR >::InterfaceGraph(), gum::learning::Miic::learnStructure(), gum::UndiGraph::partialUndiGraph(), gum::EssentialGraph::skeleton(), and gum::learning::StructuralConstraintDAG::StructuralConstraintDAG().

132  {
133  if (id >= __boundVal) {
134  if (id > __boundVal) { // we have to add holes
136 
137  for (NodeId i = __boundVal; i < id; ++i)
138  __holes->insert(i);
139  }
140 
141  __boundVal = id + 1;
142 
144  } else {
145  if (__inHoles(id)) { // we fill a hole
146  __eraseHole(id);
147  } else {
148  GUM_ERROR(DuplicateElement, "Id " << id << " is already used");
149  }
150  }
151 
152  GUM_EMIT1(onNodeAdded, id);
153  }
NodeSet * __holes
the set of nodes not contained in the NodeGraphPart in the interval 1..__max
#define GUM_EMIT1(signal, arg1)
Definition: signaler1.h:42
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
bool __holes_resize_policy
value for __holes configuration
bool __inHoles(NodeId id) const
NodeId __boundVal
the id below which NodeIds may belong to the NodeGraphPart
Size __holes_size
value for __holes configuration
void __updateEndIteratorSafe()
updating endIterator (always at __max+1)
Signaler1< NodeId > onNodeAdded
void __eraseHole(NodeId id)
to delete hole.
Size NodeId
Type for node ids.
Definition: graphElements.h:98
void insert(const Key &k)
Inserts a new element into the set.
Definition: set_tpl.h:613
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ addNodeWithLabel()

INLINE NodeId gum::prm::gspan::Pattern::addNodeWithLabel ( LabelData l)

Insert a node with the given LabelData.

Returns
The id assigned to the inserted node.

Definition at line 41 of file pattern_inl.h.

References __last, __node_map, gum::NodeGraphPart::addNodeWithId(), and size().

Referenced by gum::prm::gspan::DFSTree< GUM_SCALAR >::__checkGrowth(), __expandCodeIsMinimal(), __not_rec(), __rec(), gum::prm::gspan::DFSTree< GUM_SCALAR >::addRoot(), and Pattern().

41  {
42  NodeId n = NodeId(size() + 1);
44  __node_map.insert(n, &l);
45  __last = &l;
46  return n;
47  }
virtual void addNodeWithId(const NodeId id)
try to insert a node with the given id
Size size() const
Returns the number of nodes in this Pattern.
Definition: pattern_inl.h:147
NodeProperty< LabelData *> __node_map
Mapping between nodes in this Pattern and their respective LabelData.
Definition: pattern.h:209
LabelData * __last
The last LabelData added to this pattern.
Definition: pattern.h:216
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ arcs()

INLINE const ArcSet & gum::prm::gspan::Pattern::arcs ( ) const

Definition at line 170 of file pattern_inl.h.

References gum::ArcGraphPart::arcs().

Referenced by toDot().

170 { return DiGraph::arcs(); }
const ArcSet & arcs() const
returns the set of arcs stored within the ArcGraphPart
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ arcsProperty() [1/2]

template<typename VAL >
ArcProperty< VAL > gum::ArcGraphPart::arcsProperty ( VAL(*)(const Arc &)  f,
Size  size = 0 
) const
inherited

a method to create a hashMap of VAL from a set of arcs (using for every arc, say x, the VAL f(x))

Parameters
fa function assigning a VAL to any arc
sizean optional parameter enabling to fine-tune the returned Property. Roughly speaking, it is a good practice to have a size equal to half the number of arcs. If you do not specify this parameter, the method will assign it for you.

◆ arcsProperty() [2/2]

template<typename VAL >
ArcProperty< VAL > gum::ArcGraphPart::arcsProperty ( const VAL &  a,
Size  size = 0 
) const
inherited

a method to create a hashMap of VAL from a set of arcs (using for every arc, say x, the VAL a)

Parameters
athe default value assigned to each arc in the returned Property
sizean optional parameter enabling to fine-tune the returned Property. Roughly speaking, it is a good practice to have a size equal to half the number of arcs. If you do not specify this parameter, the method will assign it for you.

◆ asNodeSet()

INLINE NodeSet gum::NodeGraphPart::asNodeSet ( ) const
inherited

returns a copy of the set of nodes represented by the NodeGraphPart

Warning
this function is o(n) where n is the number of nodes. In space and in time. Usually, when you need to parse the nodes of a NodeGraphPart, prefer using
for(const auto n : nodes())
rather than
for(const auto n : asNodeSet())
as this is faster and consumes much less memory.

Definition at line 361 of file nodeGraphPart_inl.h.

References gum::Set< Key, Alloc >::insert().

Referenced by gum::InfluenceDiagram< GUM_SCALAR >::getPartialTemporalOrder().

361  {
362  NodeSet son(sizeNodes());
363 
364  if (!empty()) {
365  for (NodeId n = 0; n < __boundVal; ++n) {
366  if (!__inHoles(n)) son.insert(n);
367  }
368  }
369 
370  return son;
371  }
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
bool __inHoles(NodeId id) const
NodeId __boundVal
the id below which NodeIds may belong to the NodeGraphPart
bool empty() const
alias for emptyNodes
Size sizeNodes() const
returns the number of nodes in the NodeGraphPart
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ begin()

INLINE NodeGraphPartIterator gum::NodeGraphPart::begin ( ) const
noexceptinherited

a begin iterator to parse the set of nodes contained in the NodeGraphPart

Definition at line 333 of file nodeGraphPart_inl.h.

References gum::NodeGraphPartIterator::_validate().

Referenced by gum::prm::gspan::DFSTree< GUM_SCALAR >::parent().

333  {
334  NodeGraphPartIterator it(*this);
335  it._validate(); // stop the iterator at the first not-in-holes
336  return it;
337  }
friend class NodeGraphPartIterator
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beginSafe()

INLINE NodeGraphPartIteratorSafe gum::NodeGraphPart::beginSafe ( ) const
inherited

a begin iterator to parse the set of nodes contained in the NodeGraphPart

Definition at line 319 of file nodeGraphPart_inl.h.

References gum::NodeGraphPartIterator::_validate().

319  {
320  NodeGraphPartIteratorSafe it(*this);
321  it._validate(); // stop the iterator at the first not-in-holes
322  return it;
323  }
friend class NodeGraphPartIteratorSafe
+ Here is the call graph for this function:

◆ bound()

INLINE NodeId gum::NodeGraphPart::bound ( ) const
inherited

returns a number n such that all node ids are strictly lower than n

Definition at line 308 of file nodeGraphPart_inl.h.

Referenced by gum::NodeGraphPart::__clearNodes(), gum::StaticTriangulation::__computeEliminationTree(), gum::NodeGraphPartIterator::_setPos(), and gum::NodeGraphPartIterator::_validate().

308 { return __boundVal; }
NodeId __boundVal
the id below which NodeIds may belong to the NodeGraphPart
+ Here is the caller graph for this function:

◆ children()

INLINE const NodeSet & gum::ArcGraphPart::children ( const NodeId  id) const
inherited

returns the set of nodes with arc outgoing from a given node

Note that the set of arcs returned may be empty if no arc within the ArcGraphPart is outgoing from the given node.

Parameters
idthe node which is the tail of the arcs returned

Definition at line 62 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__checkChildren(), and gum::ArcGraphPart::__children.

Referenced by gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__AR(), gum::EssentialGraph::__buildEssentialGraph(), gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__connect(), gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__directedPath(), __expandCodeIsMinimal(), __not_rec(), __rec(), gum::InfluenceDiagram< GUM_SCALAR >::_getChildrenDecision(), gum::credal::CNLoopyPropagation< GUM_SCALAR >::_initialize(), gum::credal::CNLoopyPropagation< GUM_SCALAR >::_makeInferenceNodeToNeighbours(), gum::ArcGraphPart::ArcGraphPart(), gum::MarkovBlanket::children(), gum::EssentialGraph::children(), gum::DAGmodel::children(), gum::ArcGraphPart::directedUnorientedPath(), gum::InfluenceDiagram< GUM_SCALAR >::erase(), gum::ArcGraphPart::eraseChildren(), gum::InfluenceDiagram< GUM_SCALAR >::existsPathBetween(), gum::DiGraph::hasDirectedPath(), isMinimal(), gum::MixedGraph::mixedUnorientedPath(), gum::BayesBall::relevantPotentials(), gum::dSeparation::relevantPotentials(), remove(), gum::BayesBall::requisiteNodes(), gum::dSeparation::requisiteNodes(), gum::MarkovBlanket::toDot(), gum::EssentialGraph::toDot(), gum::InfluenceDiagram< GUM_SCALAR >::toDot(), gum::MixedGraph::toDot(), and gum::ArcGraphPart::unvirtualizedEraseChildren().

62  {
63  __checkChildren(id);
64  return *(__children[id]);
65  }
void __checkChildren(const NodeId id) const
when the ArcGraphPart contains no arc outgoing from a given node, this function adds an empty set ent...
NodeProperty< NodeSet *> __children
for each arc, the set of its children
Definition: arcGraphPart.h:275
+ Here is the call graph for this function:

◆ clear()

INLINE void gum::DiGraph::clear ( )
virtualinherited

removes all the nodes and arcs from the graph

Reimplemented from gum::NodeGraphPart.

Reimplemented in gum::MixedGraph.

Definition at line 43 of file diGraph_inl.h.

References gum::ArcGraphPart::clearArcs(), and gum::NodeGraphPart::clearNodes().

Referenced by gum::DiGraph::operator=().

43  {
46  }
void clearArcs()
removes all the arcs from the ArcGraphPart
virtual void clearNodes()
remove all the nodes from the NodeGraphPart
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ clearArcs()

void gum::ArcGraphPart::clearArcs ( )
inherited

removes all the arcs from the ArcGraphPart

Definition at line 79 of file arcGraphPart.cpp.

References gum::ArcGraphPart::__arcs, gum::ArcGraphPart::__children, gum::ArcGraphPart::__parents, gum::Set< Key, Alloc >::clear(), GUM_EMIT2, and gum::ArcGraphPart::onArcDeleted.

Referenced by gum::DiGraph::clear(), gum::MixedGraph::clear(), gum::ArcGraphPart::operator=(), gum::MixedGraph::operator=(), and gum::ArcGraphPart::~ArcGraphPart().

79  {
80  for (const auto& elt : __parents)
81  delete elt.second;
82 
83  __parents.clear();
84 
85  for (const auto& elt : __children)
86  delete elt.second;
87 
88  __children.clear();
89 
90  // we need this copy only if at least one onArcDeleted listener exists
91  if (onArcDeleted.hasListener()) {
92  ArcSet tmp = __arcs;
93  __arcs.clear();
94 
95  for (const auto& arc : tmp)
96  GUM_EMIT2(onArcDeleted, arc.tail(), arc.head());
97  } else {
98  __arcs.clear();
99  }
100  }
Set< Arc > ArcSet
Some typdefs and define for shortcuts ...
#define GUM_EMIT2(signal, arg1, arg2)
Definition: signaler2.h:42
NodeProperty< NodeSet *> __parents
for each arc, the sets of its parents
Definition: arcGraphPart.h:272
NodeProperty< NodeSet *> __children
for each arc, the set of its children
Definition: arcGraphPart.h:275
Signaler2< NodeId, NodeId > onArcDeleted
Definition: arcGraphPart.h:84
void clear()
Removes all the elements, if any, from the set.
Definition: set_tpl.h:375
Set< Arc > __arcs
the set of all the arcs contained within the ArcGraphPart
Definition: arcGraphPart.h:269
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ clearNodes()

INLINE void gum::NodeGraphPart::clearNodes ( )
virtualinherited

remove all the nodes from the NodeGraphPart

Definition at line 310 of file nodeGraphPart_inl.h.

Referenced by gum::DiGraph::clear(), gum::UndiGraph::clear(), gum::MixedGraph::clear(), and gum::MixedGraph::operator=().

310 { __clearNodes(); }
void __clearNodes()
code for clearing nodes (called twice)
+ Here is the caller graph for this function:

◆ code() [1/2]

INLINE DFSCode & gum::prm::gspan::Pattern::code ( )

Returns the DFSCode of this Pattern.

Definition at line 173 of file pattern_inl.h.

References __code.

Referenced by gum::prm::gspan::DFSTree< GUM_SCALAR >::__addChild(), gum::prm::gspan::DFSTree< GUM_SCALAR >::__checkGrowth(), __not_rec(), __rec(), gum::prm::GSpan< GUM_SCALAR >::__subgraph_mining(), addArc(), gum::prm::gspan::DFSTree< GUM_SCALAR >::growPattern(), isMinimal(), and Pattern().

173 { return __code; }
DFSCode __code
The DFSCode of this Pattern.
Definition: pattern.h:205
+ Here is the caller graph for this function:

◆ code() [2/2]

INLINE const DFSCode & gum::prm::gspan::Pattern::code ( ) const

Returns the DFSCode of this Pattern.

Definition at line 176 of file pattern_inl.h.

References __code.

176 { return __code; }
DFSCode __code
The DFSCode of this Pattern.
Definition: pattern.h:205

◆ directedPath()

const std::vector< NodeId > gum::ArcGraphPart::directedPath ( const NodeId  node1,
const NodeId  node2 
) const
inherited

returns a directed path from node1 to node2 belonging to the set of arcs

Parameters
node1the id from which the path begins
node2the id to which the path ends
Exceptions
NotFoundexception is raised if no path can be found between the two nodes

Definition at line 155 of file arcGraphPart.cpp.

References gum::List< Val, Alloc >::empty(), gum::HashTable< Key, Val, Alloc >::exists(), gum::List< Val, Alloc >::front(), GUM_ERROR, gum::HashTable< Key, Val, Alloc >::insert(), gum::ArcGraphPart::parents(), gum::List< Val, Alloc >::popFront(), and gum::List< Val, Alloc >::pushBack().

Referenced by gum::learning::Miic::_orientation_latents().

156  {
157  // not recursive version => use a FIFO for simulating the recursion
158  List< NodeId > nodeFIFO;
159  nodeFIFO.pushBack(n2);
160 
161  // mark[node] = successor if visited, else mark[node] does not exist
162  NodeProperty< NodeId > mark;
163  mark.insert(n2, n2);
164 
165  NodeId current;
166 
167  while (!nodeFIFO.empty()) {
168  current = nodeFIFO.front();
169  nodeFIFO.popFront();
170 
171  // check the parents
172 
173  for (const auto new_one : parents(current)) {
174  if (mark.exists(new_one)) // if this node is already marked, do not
175  continue; // check it again
176 
177  mark.insert(new_one, current);
178 
179  if (new_one == n1) {
180  std::vector< NodeId > v;
181 
182  for (current = n1; current != n2; current = mark[current])
183  v.push_back(current);
184 
185  v.push_back(n2);
186 
187  return v;
188  }
189 
190  nodeFIFO.pushBack(new_one);
191  }
192  }
193 
194  GUM_ERROR(NotFound, "no path found");
195  }
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
Size NodeId
Type for node ids.
Definition: graphElements.h:98
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ directedUnorientedPath()

const std::vector< NodeId > gum::ArcGraphPart::directedUnorientedPath ( const NodeId  node1,
const NodeId  node2 
) const
inherited

returns an unoriented (directed) path from node1 to node2 in the arc set

Parameters
node1the id from which the path begins
node2the id to which the path ends
Exceptions
NotFoundexception is raised if no path can be found between the two nodes

Definition at line 198 of file arcGraphPart.cpp.

References gum::ArcGraphPart::children(), gum::List< Val, Alloc >::empty(), gum::HashTable< Key, Val, Alloc >::exists(), gum::List< Val, Alloc >::front(), GUM_ERROR, gum::HashTable< Key, Val, Alloc >::insert(), gum::ArcGraphPart::parents(), gum::List< Val, Alloc >::popFront(), and gum::List< Val, Alloc >::pushBack().

198  {
199  // not recursive version => use a FIFO for simulating the recursion
200  List< NodeId > nodeFIFO;
201  nodeFIFO.pushBack(n2);
202 
203  // mark[node] = successor if visited, else mark[node] does not exist
204  NodeProperty< NodeId > mark;
205  mark.insert(n2, n2);
206 
207  NodeId current;
208 
209  while (!nodeFIFO.empty()) {
210  current = nodeFIFO.front();
211  nodeFIFO.popFront();
212 
213  // check the parents
214  for (const auto new_one : parents(current)) {
215  if (mark.exists(new_one)) // the node has already been visited
216  continue;
217 
218  mark.insert(new_one, current);
219 
220  if (new_one == n1) {
221  std::vector< NodeId > v;
222 
223  for (current = n1; current != n2; current = mark[current])
224  v.push_back(current);
225 
226  v.push_back(n2);
227 
228  return v;
229  }
230 
231  nodeFIFO.pushBack(new_one);
232  }
233 
234  // check the children
235  for (const auto new_one : children(current)) {
236  if (mark.exists(new_one)) // the node has already been visited
237  continue;
238 
239  mark.insert(new_one, current);
240 
241  if (new_one == n1) {
242  std::vector< NodeId > v;
243 
244  for (current = n1; current != n2; current = mark[current])
245  v.push_back(current);
246 
247  v.push_back(n2);
248 
249  return v;
250  }
251 
252  nodeFIFO.pushBack(new_one);
253  }
254  }
255 
256  GUM_ERROR(NotFound, "no path found");
257  }
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
Size NodeId
Type for node ids.
Definition: graphElements.h:98
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the call graph for this function:

◆ edgeCode() [1/4]

INLINE EdgeCode & gum::prm::gspan::Pattern::edgeCode ( NodeId  tail,
NodeId  head 
)

Returns the EdgeCode of an edge of this Pattern.

Definition at line 179 of file pattern_inl.h.

References __arc_map, and GUM_ERROR.

Referenced by gum::prm::gspan::DFSTree< GUM_SCALAR >::__checkGrowth().

179  {
180  try {
181  return *(__arc_map[Arc(tail, head)].second);
182  } catch (NotFound&) { GUM_ERROR(NotFound, "arc not found in Pattern"); }
183  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ edgeCode() [2/4]

INLINE EdgeCode & gum::prm::gspan::Pattern::edgeCode ( const Arc arc)

Returns the EdgeCode of an edge of this Pattern.

Definition at line 186 of file pattern_inl.h.

References __arc_map, and GUM_ERROR.

186  {
187  try {
188  return *(__arc_map[arc].second);
189  } catch (NotFound&) { GUM_ERROR(NotFound, "arc not found in Pattern"); }
190  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ edgeCode() [3/4]

INLINE const EdgeCode & gum::prm::gspan::Pattern::edgeCode ( NodeId  tail,
NodeId  head 
) const

Returns the EdgeCode of an edge of this Pattern.

Definition at line 193 of file pattern_inl.h.

References __arc_map, and GUM_ERROR.

193  {
194  try {
195  return *(__arc_map[Arc(tail, head)].second);
196  } catch (NotFound&) { GUM_ERROR(NotFound, "arc not found in Pattern"); }
197  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ edgeCode() [4/4]

INLINE const EdgeCode & gum::prm::gspan::Pattern::edgeCode ( const Arc arc) const

Returns the EdgeCode of an edge of this Pattern.

Definition at line 200 of file pattern_inl.h.

References __arc_map, and GUM_ERROR.

200  {
201  try {
202  return *(__arc_map[arc].second);
203  } catch (NotFound&) { GUM_ERROR(NotFound, "arc not found in Pattern"); }
204  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ empty()

INLINE bool gum::NodeGraphPart::empty ( ) const
inherited

alias for emptyNodes

Definition at line 306 of file nodeGraphPart_inl.h.

Referenced by remove().

306 { return emptyNodes(); }
bool emptyNodes() const
indicates whether there exists nodes in the NodeGraphPart
+ Here is the caller graph for this function:

◆ emptyArcs()

INLINE bool gum::ArcGraphPart::emptyArcs ( ) const
inherited

indicates wether the ArcGraphPart contains any arc

Definition at line 35 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__arcs, and gum::Set< Key, Alloc >::empty().

35 { return __arcs.empty(); }
bool empty() const noexcept
Indicates whether the set is the empty set.
Definition: set_tpl.h:707
Set< Arc > __arcs
the set of all the arcs contained within the ArcGraphPart
Definition: arcGraphPart.h:269
+ Here is the call graph for this function:

◆ emptyNodes()

INLINE bool gum::NodeGraphPart::emptyNodes ( ) const
inherited

indicates whether there exists nodes in the NodeGraphPart

Definition at line 304 of file nodeGraphPart_inl.h.

304 { return (sizeNodes() == 0); }
Size sizeNodes() const
returns the number of nodes in the NodeGraphPart

◆ end()

INLINE const NodeGraphPartIterator & gum::NodeGraphPart::end ( ) const
noexceptinherited

the end iterator to parse the set of nodes contained in the NodeGraphPart

Definition at line 339 of file nodeGraphPart_inl.h.

339  {
340  return __endIteratorSafe;
341  }
NodeGraphPartIteratorSafe __endIteratorSafe
the end iterator (used to speed-up parsings of the NodeGraphPart)

◆ endSafe()

INLINE const NodeGraphPartIteratorSafe & gum::NodeGraphPart::endSafe ( ) const
noexceptinherited

the end iterator to parse the set of nodes contained in the NodeGraphPart

Definition at line 329 of file nodeGraphPart_inl.h.

329  {
330  return __endIteratorSafe;
331  }
NodeGraphPartIteratorSafe __endIteratorSafe
the end iterator (used to speed-up parsings of the NodeGraphPart)

◆ eraseArc()

INLINE void gum::ArcGraphPart::eraseArc ( const Arc arc)
virtualinherited

removes an arc from the ArcGraphPart

Parameters
arcthe arc to be removed
Warning
if the arc does not exist, nothing is done. In particular, no exception is thrown. However, the signal onArcDeleted is fired only if a node is effectively removed.

Definition at line 79 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__arcs, gum::ArcGraphPart::__children, gum::ArcGraphPart::__parents, gum::Set< Key, Alloc >::erase(), gum::ArcGraphPart::existsArc(), GUM_EMIT2, gum::Arc::head(), gum::ArcGraphPart::onArcDeleted, and gum::Arc::tail().

Referenced by gum::EssentialGraph::__buildEssentialGraph(), gum::prm::LayerGenerator< GUM_SCALAR >::__generateClassDag(), gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::__generateClassDag(), gum::learning::genericBNLearner::__learnDAG(), gum::ArcGraphPart::_eraseSetOfArcs(), gum::learning::Miic::_orientation_3off2(), gum::learning::Miic::_orientation_latents(), gum::learning::Miic::_orientation_miic(), gum::BayesNetFragment< GUM_SCALAR >::_uninstallArc(), gum::ArcGraphPart::_unvirtualizedEraseSetOfArcs(), gum::DAGCycleDetector::eraseArc(), gum::InfluenceDiagram< GUM_SCALAR >::eraseArc(), gum::ArcGraphPart::eraseChildren(), gum::ArcGraphPart::eraseParents(), gum::learning::GreedyHillClimbing::learnStructure(), gum::learning::LocalSearchWithTabuList::learnStructure(), pop_back(), gum::BayesNet< double >::reverseArc(), gum::ArcGraphPart::unvirtualizedEraseChildren(), and gum::ArcGraphPart::unvirtualizedEraseParents().

79  {
80  // ASSUMING tail and head exists in __parents anf __children
81  // (if not, it is an error)
82  if (existsArc(arc)) {
83  NodeId tail = arc.tail(), head = arc.head();
84  __parents[head]->erase(tail);
85  __children[tail]->erase(head);
86  __arcs.erase(arc);
87  GUM_EMIT2(onArcDeleted, tail, head);
88  }
89  }
void erase(const Key &k)
Erases an element from the set.
Definition: set_tpl.h:656
#define GUM_EMIT2(signal, arg1, arg2)
Definition: signaler2.h:42
NodeProperty< NodeSet *> __parents
for each arc, the sets of its parents
Definition: arcGraphPart.h:272
NodeProperty< NodeSet *> __children
for each arc, the set of its children
Definition: arcGraphPart.h:275
Signaler2< NodeId, NodeId > onArcDeleted
Definition: arcGraphPart.h:84
Set< Arc > __arcs
the set of all the arcs contained within the ArcGraphPart
Definition: arcGraphPart.h:269
bool existsArc(const Arc &arc) const
indicates whether a given arc exists
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eraseChildren()

INLINE void gum::ArcGraphPart::eraseChildren ( const NodeId  id)
inherited

removes all the children of a given node

Parameters
idthe node all the children of which will be removed
Warning
although this method is not virtual, it calls method eraseArc( const Arc& arc ) and, as such, has a "virtual" behaviour. If you do not wish it to have this "virtual" behaviour, call instead method unvirtualizedEraseChildren
if no arc is a parent of id, nothing is done. In particular, no exception is thrown.

Definition at line 110 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__children, gum::Set< Key, Alloc >::beginSafe(), gum::ArcGraphPart::children(), gum::Set< Key, Alloc >::endSafe(), and gum::ArcGraphPart::eraseArc().

110  {
111  if (__children.exists(id)) {
112  NodeSet& children = *(__children[id]);
113 
114  for (auto iter = children.beginSafe(); // safe iterator needed here
115  iter != children.endSafe();
116  ++iter) {
117  // warning: use this erase so that you actually use the vritualized
118  // arc removal function
119  eraseArc(Arc(id, *iter));
120  }
121  }
122  }
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
virtual void eraseArc(const Arc &arc)
removes an arc from the ArcGraphPart
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
NodeProperty< NodeSet *> __children
for each arc, the set of its children
Definition: arcGraphPart.h:275
+ Here is the call graph for this function:

◆ eraseNode()

INLINE void gum::DiGraph::eraseNode ( const NodeId  id)
virtualinherited

remove a node and its adjacent arcs from the graph

Parameters
idthe id of the node to be removed
Warning
if the node does not exist, nothing is done. In particular, no exception is raised.

Reimplemented from gum::NodeGraphPart.

Reimplemented in gum::MixedGraph.

Definition at line 69 of file diGraph_inl.h.

References gum::NodeGraphPart::eraseNode(), gum::ArcGraphPart::unvirtualizedEraseChildren(), and gum::ArcGraphPart::unvirtualizedEraseParents().

Referenced by gum::BarrenNodesFinder::barrenNodes(), gum::InfluenceDiagram< GUM_SCALAR >::erase(), pop_back(), remove(), and gum::BayesNetFragment< GUM_SCALAR >::uninstallNode().

69  {
70  // warning: to remove the arcs adjacent to id, use the unvirtualized
71  // versions
72  // of arc removals
75 
77  }
void unvirtualizedEraseChildren(const NodeId id)
same function as eraseChildren but without any virtual call to an erase
void unvirtualizedEraseParents(const NodeId id)
same function as eraseParents but without any virtual call to an erase
virtual void eraseNode(const NodeId id)
erase the node with the given id
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eraseParents()

INLINE void gum::ArcGraphPart::eraseParents ( const NodeId  id)
inherited

erase all the parents of a given node

Parameters
idthe node all the parents of which will be removed
Warning
although this method is not virtual, it calls method eraseArc( const Arc& arc ) and, as such, has a "virtual" behaviour. If you do not wish it to have this "virtual" behaviour, call instead method unvirtualizedEraseParents
if no arc is a parent of id, nothing is done. In particular, no exception is thrown.

Definition at line 96 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__parents, gum::Set< Key, Alloc >::beginSafe(), gum::Set< Key, Alloc >::endSafe(), gum::ArcGraphPart::eraseArc(), and gum::ArcGraphPart::parents().

96  {
97  if (__parents.exists(id)) {
98  NodeSet& parents = *(__parents[id]);
99 
100  for (auto iter = parents.beginSafe(); // safe iterator needed here
101  iter != parents.endSafe();
102  ++iter) {
103  // warning: use this erase so that you actually use the virtualized
104  // arc removal function
105  eraseArc(Arc(*iter, id));
106  }
107  }
108  }
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
virtual void eraseArc(const Arc &arc)
removes an arc from the ArcGraphPart
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
NodeProperty< NodeSet *> __parents
for each arc, the sets of its parents
Definition: arcGraphPart.h:272
+ Here is the call graph for this function:

◆ exists() [1/2]

INLINE bool gum::prm::gspan::Pattern::exists ( NodeId  id) const

Returns true if id is a node in this Pattern.

Definition at line 139 of file pattern_inl.h.

References gum::NodeGraphPart::exists().

139 { return DiGraph::exists(id); }
bool exists(const NodeId id) const
alias for existsNode
+ Here is the call graph for this function:

◆ exists() [2/2]

INLINE bool gum::prm::gspan::Pattern::exists ( NodeId  tail,
NodeId  head 
) const

Returns true if (tail, head) is an arc in this Pattern.

Definition at line 142 of file pattern_inl.h.

References gum::ArcGraphPart::existsArc().

142  {
143  return DiGraph::existsArc(tail, head);
144  }
bool existsArc(const Arc &arc) const
indicates whether a given arc exists
+ Here is the call graph for this function:

◆ existsArc() [1/2]

INLINE bool gum::ArcGraphPart::existsArc ( const Arc arc) const
inherited

indicates whether a given arc exists

Parameters
arcthe arc we test whether or not it belongs to the ArcGraphPart

Definition at line 41 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__arcs, and gum::Set< Key, Alloc >::contains().

Referenced by gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__AorR(), gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__AR(), gum::MarkovBlanket::__buildMarkovBlanket(), gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__connect(), gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__directedPath(), gum::learning::Miic::__existsDirectedPath(), gum::prm::LayerGenerator< GUM_SCALAR >::__generateClassDag(), gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::__generateClassDag(), gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__jump_multi(), gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__jump_poly(), __not_rec(), __rec(), gum::learning::Miic::_orientation_3off2(), gum::learning::Miic::_orientation_latents(), gum::learning::Miic::_orientation_miic(), gum::learning::Miic::_updateProbaTriples(), gum::DAGCycleDetector::addArc(), gum::ArcGraphPart::eraseArc(), gum::DAGCycleDetector::eraseArc(), gum::InfluenceDiagram< GUM_SCALAR >::eraseArc(), and exists().

41  {
42  return __arcs.contains(arc);
43  }
bool contains(const Key &k) const
Indicates whether a given elements belong to the set.
Definition: set_tpl.h:581
Set< Arc > __arcs
the set of all the arcs contained within the ArcGraphPart
Definition: arcGraphPart.h:269
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ existsArc() [2/2]

INLINE bool gum::ArcGraphPart::existsArc ( const NodeId  tail,
const NodeId  head 
) const
inherited

indicates whether a given arc exists

Parameters
tailthe tail of the arc we test the existence in the ArcGraphPart
headthe head of the arc we test the existence in the ArcGraphPart

Definition at line 45 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__parents.

45  {
46  return __parents.exists(head) && __parents[head]->exists(tail);
47  }
NodeProperty< NodeSet *> __parents
for each arc, the sets of its parents
Definition: arcGraphPart.h:272

◆ existsNode()

◆ hasDirectedPath()

bool gum::DiGraph::hasDirectedPath ( const NodeId  from,
const NodeId  to 
)
inherited

checks whether there exists a directed path from from to to

If from==to, this function checks if a directed cycle containing from exists.

Parameters
from
to
Returns
true if a directed path exists

Definition at line 137 of file diGraph.cpp.

References gum::ArcGraphPart::children(), gum::Set< Key, Alloc >::contains(), gum::List< Val, Alloc >::empty(), gum::NodeGraphPart::exists(), gum::List< Val, Alloc >::front(), gum::Set< Key, Alloc >::insert(), gum::List< Val, Alloc >::popFront(), and gum::List< Val, Alloc >::pushBack().

Referenced by gum::DAG::addArc().

137  {
138  if (!exists(from)) return false;
139 
140  // not recursive version => use a FIFO for simulating the recursion
141  List< NodeId > nodeFIFO;
142  nodeFIFO.pushBack(from);
143 
144  NodeSet marked;
145  marked.insert(from);
146 
147  NodeId new_one;
148 
149  while (!nodeFIFO.empty()) {
150  new_one = nodeFIFO.front();
151  // std::cout<<new_one<<std::endl;
152  nodeFIFO.popFront();
153 
154  for (const auto chi : children(new_one)) {
155  if (chi == to) return true;
156 
157  if (!marked.contains(chi)) {
158  nodeFIFO.pushBack(chi);
159  marked.insert(chi);
160  }
161  }
162  }
163 
164  return false;
165  }
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
bool exists(const NodeId id) const
alias for existsNode
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
Size NodeId
Type for node ids.
Definition: graphElements.h:98
void insert(const Key &k)
Inserts a new element into the set.
Definition: set_tpl.h:613
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isMinimal()

bool gum::prm::gspan::Pattern::isMinimal ( )

Returns the DFSCode of this Pattern.

Definition at line 56 of file pattern.cpp.

References __expandCodeIsMinimal(), gum::ArcGraphPart::children(), code(), gum::prm::gspan::DFSCode::codes, gum::prm::gspan::LabelData::id, label(), nodes(), and gum::ArcGraphPart::parents().

Referenced by gum::prm::gspan::DFSTree< GUM_SCALAR >::__checkGrowth().

56  {
57  for (const auto node : nodes()) {
58  for (const auto next : parents(node)) {
59  Size u = label(node).id;
60  Size v = label(next).id;
61  EdgeCode edge_code(1, 2, u, label(next, node).id, v);
62 
63  if (edge_code < *(code().codes.front())) {
64  return false;
65  } else if (edge_code == (*code().codes.front())) {
66  if (__expandCodeIsMinimal(node, next)) { return false; }
67  }
68  }
69 
70  for (const auto next : children(node)) {
71  Size u = label(node).id;
72  Size v = label(next).id;
73  EdgeCode edge_code(1, 2, u, label(node, next).id, v);
74 
75  if (edge_code < *(code().codes.front())) {
76  return false;
77  } else if (edge_code == (*code().codes.front())) {
78  if (__expandCodeIsMinimal(node, next)) { return false; }
79  }
80  }
81  }
82 
83  return true;
84  }
DFSCode & code()
Returns the DFSCode of this Pattern.
Definition: pattern_inl.h:173
bool __expandCodeIsMinimal(NodeId u, NodeId v)
Returns true if the expand code by adding and edge betwenne u and v is minimal with respect to __code...
Definition: pattern.cpp:99
std::vector< EdgeCode *> codes
The vector containing the EdgeCode composing this DFSCode.
Definition: DFSCode.h:90
LabelData & label(NodeId node)
Returns the LabelData assigned to node.
Definition: pattern_inl.h:50
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
const NodeGraphPart & nodes() const
Definition: pattern_inl.h:166
Idx id
An unique identifier for this label.
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:48
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ label() [1/6]

INLINE LabelData & gum::prm::gspan::Pattern::label ( NodeId  node)

Returns the LabelData assigned to node.

Definition at line 50 of file pattern_inl.h.

References __node_map, and GUM_ERROR.

Referenced by __expandCodeIsMinimal(), __not_rec(), __rec(), gum::prm::gspan::TreeWidthSearch< GUM_SCALAR >::accept_root(), isMinimal(), Pattern(), and toDot().

50  {
51  try {
52  return *(__node_map[node]);
53  } catch (NotFound&) {
54  GUM_ERROR(NotFound, "node not found in this Pattern");
55  }
56  }
NodeProperty< LabelData *> __node_map
Mapping between nodes in this Pattern and their respective LabelData.
Definition: pattern.h:209
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the caller graph for this function:

◆ label() [2/6]

INLINE const LabelData & gum::prm::gspan::Pattern::label ( NodeId  node) const

Returns the LabelData assigned to node.

Definition at line 59 of file pattern_inl.h.

References __node_map, and GUM_ERROR.

59  {
60  try {
61  return *(__node_map[node]);
62  } catch (NotFound&) {
63  GUM_ERROR(NotFound, "node not found in this Pattern");
64  }
65  }
NodeProperty< LabelData *> __node_map
Mapping between nodes in this Pattern and their respective LabelData.
Definition: pattern.h:209
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ label() [3/6]

INLINE LabelData & gum::prm::gspan::Pattern::label ( NodeId  i,
NodeId  j 
)

Returns the LabelData assigned to arc.

Definition at line 82 of file pattern_inl.h.

References __arc_map, and GUM_ERROR.

82  {
83  try {
84  return *(__arc_map[Arc(i, j)].first);
85  } catch (NotFound&) {
86  GUM_ERROR(NotFound, "arc not found in this Pattern");
87  }
88  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ label() [4/6]

INLINE const LabelData & gum::prm::gspan::Pattern::label ( NodeId  i,
NodeId  j 
) const

Returns the LabelData assigned to arc.

Definition at line 91 of file pattern_inl.h.

References __arc_map, and GUM_ERROR.

91  {
92  try {
93  return *(__arc_map[Arc(i, j)].first);
94  } catch (NotFound&) {
95  GUM_ERROR(NotFound, "arc not found in this Pattern");
96  }
97  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ label() [5/6]

INLINE LabelData & gum::prm::gspan::Pattern::label ( const Arc arc)

Returns the LabelData assigned to arc.

Definition at line 100 of file pattern_inl.h.

References __arc_map, and GUM_ERROR.

100  {
101  try {
102  return *(__arc_map[arc].first);
103  } catch (NotFound&) {
104  GUM_ERROR(NotFound, "arc not found in this Pattern");
105  }
106  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ label() [6/6]

INLINE const LabelData & gum::prm::gspan::Pattern::label ( const Arc arc) const

Returns the LabelData assigned to arc.

Definition at line 109 of file pattern_inl.h.

References __arc_map, and GUM_ERROR.

109  {
110  try {
111  return *(__arc_map[arc].first);
112  } catch (NotFound&) {
113  GUM_ERROR(NotFound, "arc not found in this Pattern");
114  }
115  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ lastAdded() [1/2]

INLINE LabelData & gum::prm::gspan::Pattern::lastAdded ( )

Insert a node with the given LabelData.

Returns
The id assigned to the inserted node.

Definition at line 68 of file pattern_inl.h.

References __last, and GUM_ERROR.

68  {
69  if (__last) return *__last;
70 
71  GUM_ERROR(OperationNotAllowed, "there are no LabelData yet");
72  }
LabelData * __last
The last LabelData added to this pattern.
Definition: pattern.h:216
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ lastAdded() [2/2]

INLINE const LabelData & gum::prm::gspan::Pattern::lastAdded ( ) const

Insert a node with the given LabelData.

Returns
The id assigned to the inserted node.

Definition at line 75 of file pattern_inl.h.

References __last, and GUM_ERROR.

75  {
76  if (__last) return *__last;
77 
78  GUM_ERROR(OperationNotAllowed, "there are no LabelData yet");
79  }
LabelData * __last
The last LabelData added to this pattern.
Definition: pattern.h:216
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55

◆ listMapArcs()

template<typename VAL >
List< VAL > gum::ArcGraphPart::listMapArcs ( VAL(*)(const Arc &)  f) const
inherited

a method to create a list of VAL from a set of arcs (using for every arc, say x, the VAL f(x))

Parameters
fa function assigning a VAL to any arc

◆ listMapNodes()

template<typename VAL >
List< VAL > gum::NodeGraphPart::listMapNodes ( VAL(*)(const NodeId &)  f) const
inherited

a method to create a list of VAL from a set of nodes (using for every nodee, say x, the VAL f(x))

Parameters
fa function assigning a VAL to any node

◆ nextNodeId()

INLINE NodeId gum::NodeGraphPart::nextNodeId ( ) const
inherited

returns a new node id, not yet used by any node

Warning
a code like
id=nextNodeId();addNode(id);
is basically not thread safe !!
Returns
a node id not yet used by any node within the NodeGraphPart

Definition at line 226 of file nodeGraphPart_inl.h.

Referenced by gum::InfluenceDiagram< GUM_SCALAR >::_addNode().

226  {
227  NodeId next = 0;
228 
229  // return the first hole if holes exist
230  if (__holes && (!__holes->empty()))
231  next = *(__holes->begin());
232  else // in other case
233  next = __boundVal;
234 
235  return next;
236  }
bool empty() const noexcept
Indicates whether the set is the empty set.
Definition: set_tpl.h:707
NodeSet * __holes
the set of nodes not contained in the NodeGraphPart in the interval 1..__max
iterator begin() const
The usual unsafe begin iterator to parse the set.
Definition: set_tpl.h:517
NodeId __boundVal
the id below which NodeIds may belong to the NodeGraphPart
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the caller graph for this function:

◆ nodes()

INLINE const NodeGraphPart & gum::prm::gspan::Pattern::nodes ( ) const

Definition at line 166 of file pattern_inl.h.

References gum::NodeGraphPart::nodes().

Referenced by gum::prm::gspan::TreeWidthSearch< GUM_SCALAR >::accept_root(), and isMinimal().

166  {
167  return DiGraph::nodes();
168  }
const NodeGraphPart & nodes() const
return *this as a NodeGraphPart
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nodesProperty() [1/2]

template<typename VAL >
NodeProperty< VAL > gum::NodeGraphPart::nodesProperty ( VAL(*)(const NodeId &)  f,
Size  size = 0 
) const
inherited

a method to create a HashTable with key:NodeId and value:VAL

VAL are computed from the nodes using for all node x, VAL f(x). This method is a wrapper of the same method in HashTable.

See also
HashTable::map.
Parameters
fa function assigning a VAL to any node
sizean optional parameter enabling to fine-tune the returned Property. Roughly speaking, it is a good practice to have a size equal to half the number of nodes. If you do not specify this parameter, the method will assign it for you.

Referenced by gum::InfluenceDiagram< GUM_SCALAR >::_getChildrenDecision(), gum::BarrenNodesFinder::barrenNodes(), gum::BinaryJoinTreeConverterDefault::convert(), gum::InfluenceDiagram< GUM_SCALAR >::existsPathBetween(), and gum::UndiGraph::hasUndirectedCycle().

+ Here is the caller graph for this function:

◆ nodesProperty() [2/2]

template<typename VAL >
NodeProperty< VAL > gum::NodeGraphPart::nodesProperty ( const VAL &  a,
Size  size = 0 
) const
inherited

a method to create a hashMap with key:NodeId and value:VAL

for all nodes, the value stored is a. This method is a wrapper of the same method in HashTable.

See also
HashTable::map.
Parameters
athe default value assigned to each edge in the returned Property
sizean optional parameter enabling to fine-tune the returned Property. Roughly speaking, it is a good practice to have a size equal to half the number of nodes. If you do not specify this parameter, the method will assign it for you.

◆ operator!=() [1/3]

INLINE bool gum::ArcGraphPart::operator!= ( const ArcGraphPart p) const
inherited

tests whether two ArcGraphParts contain different arcs

Parameters
pthe ArcGraphPart that we compare with this

Definition at line 157 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__arcs.

157  {
158  return __arcs != p.__arcs;
159  }
Set< Arc > __arcs
the set of all the arcs contained within the ArcGraphPart
Definition: arcGraphPart.h:269

◆ operator!=() [2/3]

INLINE bool gum::DiGraph::operator!= ( const DiGraph g) const
inherited

tests whether two DiGraphs are different

Parameters
gthe DiGraph with which "this" is compared

Definition at line 83 of file diGraph_inl.h.

References gum::DiGraph::operator==().

83  {
84  return !operator==(p);
85  }
bool operator==(const DiGraph &g) const
tests whether two DiGraphs are identical (same nodes, same arcs)
Definition: diGraph_inl.h:79
+ Here is the call graph for this function:

◆ operator!=() [3/3]

INLINE bool gum::NodeGraphPart::operator!= ( const NodeGraphPart p) const
inherited

check whether two NodeGraphParts contain different nodes

Parameters
pthe NodeGraphPart to be compared with "this"

Definition at line 357 of file nodeGraphPart_inl.h.

References gum::NodeGraphPartIterator::operator==().

357  {
358  return !operator==(p);
359  }
bool operator==(const NodeGraphPart &p) const
check whether two NodeGraphParts contain the same nodes
+ Here is the call graph for this function:

◆ operator==() [1/3]

INLINE bool gum::ArcGraphPart::operator== ( const ArcGraphPart p) const
inherited

tests whether two ArcGraphParts contain the same arcs

Parameters
pthe ArcGraphPart that we compare with this

Definition at line 153 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__arcs.

Referenced by gum::DiGraph::operator==(), and gum::MixedGraph::operator==().

153  {
154  return __arcs == p.__arcs;
155  }
Set< Arc > __arcs
the set of all the arcs contained within the ArcGraphPart
Definition: arcGraphPart.h:269
+ Here is the caller graph for this function:

◆ operator==() [2/3]

INLINE bool gum::DiGraph::operator== ( const DiGraph g) const
inherited

tests whether two DiGraphs are identical (same nodes, same arcs)

Parameters
gthe DiGraph with which "this" is compared

Definition at line 79 of file diGraph_inl.h.

References gum::ArcGraphPart::operator==(), and gum::NodeGraphPart::operator==().

Referenced by gum::DiGraph::operator!=().

79  {
81  }
bool operator==(const NodeGraphPart &p) const
check whether two NodeGraphParts contain the same nodes
bool operator==(const ArcGraphPart &p) const
tests whether two ArcGraphParts contain the same arcs
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator==() [3/3]

INLINE bool gum::NodeGraphPart::operator== ( const NodeGraphPart p) const
inherited

check whether two NodeGraphParts contain the same nodes

Parameters
pthe NodeGraphPart to be compared with "this"

Definition at line 343 of file nodeGraphPart_inl.h.

References gum::NodeGraphPart::__boundVal, and gum::NodeGraphPart::__holes.

Referenced by gum::UndiGraph::operator==(), gum::DiGraph::operator==(), and gum::MixedGraph::operator==().

343  {
344  if (__boundVal != p.__boundVal) return false;
345 
346  if (__holes)
347  if (p.__holes)
348  return (*__holes == *p.__holes);
349  else
350  return false;
351  else if (p.__holes)
352  return false;
353 
354  return true;
355  }
NodeSet * __holes
the set of nodes not contained in the NodeGraphPart in the interval 1..__max
NodeId __boundVal
the id below which NodeIds may belong to the NodeGraphPart
+ Here is the caller graph for this function:

◆ parents()

INLINE const NodeSet & gum::ArcGraphPart::parents ( const NodeId  id) const
inherited

returns the set of nodes with arc ingoing to a given node

Note that the set of arcs returned may be empty if no arc within the ArcGraphPart is ingoing into the given node.

Parameters
idthe node toward which the arcs returned are pointing

Definition at line 57 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__checkParents(), and gum::ArcGraphPart::__parents.

Referenced by gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__AR(), gum::MCBayesNetGenerator< GUM_SCALAR, ICPTGenerator, ICPTDisturber >::__connect(), gum::learning::Miic::__existsDirectedPath(), __expandCodeIsMinimal(), gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::__generateClass(), gum::prm::LayerGenerator< GUM_SCALAR >::__generateClassDag(), gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::__generateClassDag(), gum::prm::LayerGenerator< GUM_SCALAR >::__generateClasses(), gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::__generateCluster(), __not_rec(), __rec(), gum::EssentialGraph::__strongly_protected(), gum::InfluenceDiagram< GUM_SCALAR >::_copyTables(), gum::credal::CNLoopyPropagation< GUM_SCALAR >::_initialize(), gum::credal::CNLoopyPropagation< GUM_SCALAR >::_makeInferenceNodeToNeighbours(), gum::InfluenceDiagram< GUM_SCALAR >::_moralGraph(), gum::learning::Miic::_orientation_miic(), gum::learning::Miic::_propagatesHead(), gum::BarrenNodesFinder::barrenNodes(), gum::ArcGraphPart::directedPath(), gum::ArcGraphPart::directedUnorientedPath(), gum::learning::BNDatabaseGenerator< GUM_SCALAR >::drawSamples(), gum::ArcGraphPart::eraseParents(), gum::InfluenceDiagram< GUM_SCALAR >::getPartialTemporalOrder(), isMinimal(), gum::learning::Miic::learnStructure(), gum::MixedGraph::mixedOrientedPath(), gum::MixedGraph::mixedUnorientedPath(), gum::DAG::moralGraph(), gum::prm::gspan::DFSTree< GUM_SCALAR >::parent(), gum::MarkovBlanket::parents(), gum::EssentialGraph::parents(), gum::DAGmodel::parents(), gum::BayesBall::relevantPotentials(), gum::dSeparation::relevantPotentials(), remove(), gum::BayesBall::requisiteNodes(), gum::dSeparation::requisiteNodes(), rightmostPath(), and gum::ArcGraphPart::unvirtualizedEraseParents().

57  {
58  __checkParents(id);
59  return *(__parents[id]);
60  }
void __checkParents(const NodeId id) const
when the ArcGraphPart contains no arc ingoing into a given node, this function adds an empty set entr...
NodeProperty< NodeSet *> __parents
for each arc, the sets of its parents
Definition: arcGraphPart.h:272
+ Here is the call graph for this function:

◆ pop_back()

INLINE void gum::prm::gspan::Pattern::pop_back ( )

Remove the last EdgeCode of this pattern.

Definition at line 207 of file pattern_inl.h.

References __arc_map, __code, __node_map, gum::prm::gspan::DFSCode::codes, gum::ArcGraphPart::eraseArc(), gum::DiGraph::eraseNode(), gum::prm::gspan::EdgeCode::i, gum::prm::gspan::EdgeCode::isForward(), and gum::prm::gspan::EdgeCode::j.

Referenced by __not_rec(), and __rec().

207  {
208  EdgeCode* edge = __code.codes.back();
209  __code.codes.pop_back();
210 
211  if (edge->isForward()) {
212  __node_map.erase(edge->j);
213  __arc_map.erase(Arc(edge->i, edge->j));
214  DiGraph::eraseArc(Arc(edge->i, edge->j));
215  DiGraph::eraseNode(edge->j);
216  } else {
217  __arc_map.erase(Arc(edge->i, edge->j));
218  DiGraph::eraseArc(Arc(edge->i, edge->j));
219  }
220 
221  delete edge;
222  }
ArcProperty< std::pair< LabelData *, EdgeCode *> > __arc_map
Mapping between edges in this Pattern and their respective LabelData.
Definition: pattern.h:213
virtual void eraseArc(const Arc &arc)
removes an arc from the ArcGraphPart
std::vector< EdgeCode *> codes
The vector containing the EdgeCode composing this DFSCode.
Definition: DFSCode.h:90
NodeProperty< LabelData *> __node_map
Mapping between nodes in this Pattern and their respective LabelData.
Definition: pattern.h:209
DFSCode __code
The DFSCode of this Pattern.
Definition: pattern.h:205
virtual void eraseNode(const NodeId id)
remove a node and its adjacent arcs from the graph
Definition: diGraph_inl.h:69
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ populateNodes()

void gum::NodeGraphPart::populateNodes ( const NodeGraphPart s)
inherited

populateNodes clears *this and fills it with the same nodes as "s"

populateNodes should basically be the preferred way to insert nodes with IDs not selected by the internal idFactory.

Parameters
sthe NodeGraphPart to be copied

Definition at line 64 of file nodeGraphPart.cpp.

References gum::NodeGraphPart::__boundVal, gum::NodeGraphPart::__holes, gum::NodeGraphPart::__holes_resize_policy, gum::NodeGraphPart::__holes_size, gum::NodeGraphPart::__updateEndIteratorSafe(), and gum::NodeGraphPart::clear().

Referenced by gum::DAGmodel::__moralGraph(), and gum::DAG::moralGraph().

64  {
65  clear(); // "virtual" flush of the nodes set
66  __holes_size = s.__holes_size;
67  __holes_resize_policy = s.__holes_resize_policy;
68 
69  if (s.__holes) __holes = new NodeSet(*s.__holes);
70 
71  __boundVal = s.__boundVal;
72 
74  }
NodeSet * __holes
the set of nodes not contained in the NodeGraphPart in the interval 1..__max
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
bool __holes_resize_policy
value for __holes configuration
NodeId __boundVal
the id below which NodeIds may belong to the NodeGraphPart
Size __holes_size
value for __holes configuration
void __updateEndIteratorSafe()
updating endIterator (always at __max+1)
virtual void clear()
alias for clearNodes
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ populateNodesFromProperty()

template<typename T >
void gum::NodeGraphPart::populateNodesFromProperty ( const NodeProperty< T > &  h)
inherited

populateNodesFromProperty clears *this and fills it with the keys of "h"

populateNodes should basically be the preferred way to insert nodes with IDs not selected by the internal idFactory.

◆ remove()

INLINE void gum::prm::gspan::Pattern::remove ( NodeId  node)

Remove a node if it has no neighbors, raise an OperationNotAllowed otherwise.

Definition at line 225 of file pattern_inl.h.

References __node_map, gum::ArcGraphPart::children(), gum::NodeGraphPart::empty(), gum::DiGraph::eraseNode(), GUM_ERROR, and gum::ArcGraphPart::parents().

Referenced by __not_rec(), and __rec().

225  {
226  if (DiGraph::parents(node).empty() && DiGraph::children(node).empty()) {
227  DiGraph::eraseNode(node);
228  __node_map.erase(node);
229  } else {
230  GUM_ERROR(OperationNotAllowed, "the given node has neighbors");
231  }
232  }
bool empty() const
alias for emptyNodes
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
NodeProperty< LabelData *> __node_map
Mapping between nodes in this Pattern and their respective LabelData.
Definition: pattern.h:209
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
virtual void eraseNode(const NodeId id)
remove a node and its adjacent arcs from the graph
Definition: diGraph_inl.h:69
#define GUM_ERROR(type, msg)
Definition: exceptions.h:55
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rightmostPath()

INLINE void gum::prm::gspan::Pattern::rightmostPath ( std::list< NodeId > &  r_path) const

Fill r_path with the rightmost path of this Pattern. The list is supposed empty.

Definition at line 153 of file pattern_inl.h.

References gum::ArcGraphPart::parents(), and size().

Referenced by __not_rec(), __rec(), and gum::prm::GSpan< GUM_SCALAR >::__subgraph_mining().

153  {
154  r_path.push_back(NodeId(size()));
155 
156  while (r_path.front() != 1) {
157  for (const auto par : parents(r_path.front())) {
158  if (par < r_path.front()) {
159  r_path.push_front(par);
160  break;
161  }
162  }
163  }
164  }
Size size() const
Returns the number of nodes in this Pattern.
Definition: pattern_inl.h:147
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ size()

INLINE Size gum::prm::gspan::Pattern::size ( ) const

Returns the number of nodes in this Pattern.

Definition at line 147 of file pattern_inl.h.

References gum::NodeGraphPart::size().

Referenced by addNodeWithLabel(), Pattern(), and rightmostPath().

147 { return DiGraph::size(); }
Size size() const
alias for sizeNodes
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sizeArcs()

INLINE Size gum::prm::gspan::Pattern::sizeArcs ( ) const

Returns the number of arcs in this Pattern.

Definition at line 150 of file pattern_inl.h.

References gum::ArcGraphPart::sizeArcs().

150 { return DiGraph::sizeArcs(); }
Size sizeArcs() const
indicates the number of arcs stored within the ArcGraphPart
+ Here is the call graph for this function:

◆ sizeNodes()

INLINE Size gum::NodeGraphPart::sizeNodes ( ) const
inherited

returns the number of nodes in the NodeGraphPart

Definition at line 280 of file nodeGraphPart_inl.h.

Referenced by gum::BinaryJoinTreeConverterDefault::__markConnectedComponent(), gum::BarrenNodesFinder::barrenNodes(), gum::BinaryJoinTreeConverterDefault::convert(), gum::EliminationSequenceStrategy::setGraph(), gum::MarkovBlanket::sizeNodes(), and gum::EssentialGraph::sizeNodes().

280  {
281  return (__holes) ? (__boundVal - __holes->size()) : __boundVal;
282  }
NodeSet * __holes
the set of nodes not contained in the NodeGraphPart in the interval 1..__max
NodeId __boundVal
the id below which NodeIds may belong to the NodeGraphPart
Size size() const noexcept
Returns the number of elements in the set.
Definition: set_tpl.h:701
+ Here is the caller graph for this function:

◆ toDot() [1/2]

std::string gum::prm::gspan::Pattern::toDot ( size_t  name) const

Print the pattern in the DOT syntax.

Definition at line 86 of file pattern.cpp.

References arcs(), and label().

86  {
87  std::stringstream sBuff;
88  sBuff << "digraph " << name << " {\n";
89 
90  for (const auto arc : arcs()) {
91  sBuff << label(arc.tail()).id << " -> ";
92  sBuff << label(arc.head()).id << ";\n";
93  }
94 
95  sBuff << "}\n";
96  return sBuff.str();
97  }
LabelData & label(NodeId node)
Returns the LabelData assigned to node.
Definition: pattern_inl.h:50
const ArcSet & arcs() const
Definition: pattern_inl.h:170
+ Here is the call graph for this function:

◆ toDot() [2/2]

const std::string gum::DiGraph::toDot ( ) const
virtualinherited

to friendly display the content of the graph in the DOT syntax

Parameters
nameThe graph name in the dot syntax. Default is G.
Returns
Returns a string describing the graph in the dot syntax

Reimplemented in gum::MixedGraph.

Definition at line 68 of file diGraph.cpp.

References gum::ArcGraphPart::arcs(), and gum::NodeGraphPart::nodes().

68  {
69  std::stringstream strBuff;
70  std::string tab = " ";
71  strBuff << "digraph {" << std::endl;
72 
73  for (const auto node : nodes())
74  strBuff << tab << node << ";" << std::endl;
75 
76  strBuff << std::endl;
77 
78  for (const auto& arc : arcs())
79  strBuff << tab << arc.tail() << " -> " << arc.head() << ";" << std::endl;
80 
81  strBuff << "}" << std::endl << std::endl;
82  return strBuff.str();
83  }
const NodeGraphPart & nodes() const
return *this as a NodeGraphPart
const ArcSet & arcs() const
returns the set of arcs stored within the ArcGraphPart
+ Here is the call graph for this function:

◆ topologicalOrder()

const Sequence< NodeId > & gum::DiGraph::topologicalOrder ( bool  clear = true) const
inherited

The topological order stays the same as long as no variable or arcs are added or erased src the topology.

Parameters
clearIf false returns the previously created topology.
Exceptions
InvalidDirectedCycleRaised if this DiGraph contains cycles.

Definition at line 91 of file diGraph.cpp.

References gum::DiGraph::__mutableTopologicalOrder, gum::DiGraph::__topologicalOrder(), and gum::SequenceImplementation< Key, Alloc, Gen >::clear().

Referenced by gum::prm::o3prm::O3ClassFactory< GUM_SCALAR >::__setO3ClassCreationOrder(), gum::prm::o3prm::O3InterfaceFactory< GUM_SCALAR >::__setO3InterfaceCreationOrder(), gum::prm::o3prm::O3TypeFactory< GUM_SCALAR >::__setO3TypeCreationOrder(), gum::learning::Miic::learnStructure(), and gum::DAGmodel::topologicalOrder().

91  {
92  if (clear
94  == nullptr)) { // we have to call _topologicalOrder
95  if (__mutableTopologicalOrder == nullptr) {
97  } else {
98  // clear is True
100  }
101 
103  }
104 
106  }
void clear()
Clear the sequence.
Definition: sequence_tpl.h:271
Sequence< NodeId > * __mutableTopologicalOrder
The topology sequence of this Directed Graphical Model.
Definition: diGraph.h:212
void __topologicalOrder() const
Returns a topological order of this DAGModel.
Definition: diGraph.cpp:108
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ toString()

const std::string gum::DiGraph::toString ( ) const
virtualinherited

to friendly display the content of the graph

Reimplemented in gum::MixedGraph.

Definition at line 61 of file diGraph.cpp.

References gum::ArcGraphPart::toString(), and gum::NodeGraphPart::toString().

Referenced by gum::operator<<().

61  {
62  std::string s = NodeGraphPart::toString();
63  s += " , ";
65  return s;
66  }
const std::string toString() const
to friendly display the content of the ArcGraphPart
std::string toString() const
a function to display the set of nodes
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ unvirtualizedEraseChildren()

INLINE void gum::ArcGraphPart::unvirtualizedEraseChildren ( const NodeId  id)
inherited

same function as eraseChildren but without any virtual call to an erase

Parameters
idthe node whose outgoing arcs will be removed

Definition at line 141 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__children, gum::Set< Key, Alloc >::beginSafe(), gum::ArcGraphPart::children(), gum::Set< Key, Alloc >::endSafe(), and gum::ArcGraphPart::eraseArc().

Referenced by gum::DiGraph::eraseNode(), and gum::MixedGraph::eraseNode().

141  {
142  if (__children.exists(id)) {
143  NodeSet& children = *(__children[id]);
144 
145  for (auto iter = children.beginSafe(); // safe iterator needed here
146  iter != children.endSafe();
147  ++iter) {
148  ArcGraphPart::eraseArc(Arc(id, *iter));
149  }
150  }
151  }
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
virtual void eraseArc(const Arc &arc)
removes an arc from the ArcGraphPart
const NodeSet & children(const NodeId id) const
returns the set of nodes with arc outgoing from a given node
NodeProperty< NodeSet *> __children
for each arc, the set of its children
Definition: arcGraphPart.h:275
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ unvirtualizedEraseParents()

INLINE void gum::ArcGraphPart::unvirtualizedEraseParents ( const NodeId  id)
inherited

same function as eraseParents but without any virtual call to an erase

Parameters
idthe node whose ingoing arcs will be removed

Definition at line 129 of file arcGraphPart_inl.h.

References gum::ArcGraphPart::__parents, gum::Set< Key, Alloc >::beginSafe(), gum::Set< Key, Alloc >::endSafe(), gum::ArcGraphPart::eraseArc(), and gum::ArcGraphPart::parents().

Referenced by gum::DiGraph::eraseNode(), and gum::MixedGraph::eraseNode().

129  {
130  if (__parents.exists(id)) {
131  NodeSet& parents = *(__parents[id]);
132 
133  for (auto iter = parents.beginSafe(); // safe iterator needed here
134  iter != parents.endSafe();
135  ++iter) {
136  ArcGraphPart::eraseArc(Arc(*iter, id));
137  }
138  }
139  }
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
virtual void eraseArc(const Arc &arc)
removes an arc from the ArcGraphPart
const NodeSet & parents(const NodeId id) const
returns the set of nodes with arc ingoing to a given node
NodeProperty< NodeSet *> __parents
for each arc, the sets of its parents
Definition: arcGraphPart.h:272
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ __arc_map

ArcProperty< std::pair< LabelData*, EdgeCode* > > gum::prm::gspan::Pattern::__arc_map
private

Mapping between edges in this Pattern and their respective LabelData.

Definition at line 213 of file pattern.h.

Referenced by addArc(), edgeCode(), label(), and pop_back().

◆ __code

DFSCode gum::prm::gspan::Pattern::__code
private

The DFSCode of this Pattern.

Definition at line 205 of file pattern.h.

Referenced by code(), and pop_back().

◆ __last

LabelData* gum::prm::gspan::Pattern::__last
private

The last LabelData added to this pattern.

Definition at line 216 of file pattern.h.

Referenced by addNodeWithLabel(), and lastAdded().

◆ __node_map

NodeProperty< LabelData* > gum::prm::gspan::Pattern::__node_map
private

Mapping between nodes in this Pattern and their respective LabelData.

Definition at line 209 of file pattern.h.

Referenced by addArc(), addNodeWithLabel(), label(), pop_back(), and remove().

◆ onArcAdded

Signaler2< NodeId, NodeId > gum::ArcGraphPart::onArcAdded
inherited

◆ onArcDeleted

Signaler2< NodeId, NodeId > gum::ArcGraphPart::onArcDeleted
inherited

Definition at line 84 of file arcGraphPart.h.

Referenced by gum::ArcGraphPart::clearArcs(), and gum::ArcGraphPart::eraseArc().

◆ onNodeAdded

Signaler1< NodeId > gum::NodeGraphPart::onNodeAdded
inherited

Definition at line 274 of file nodeGraphPart.h.

Referenced by gum::NodeGraphPart::addNodeWithId().

◆ onNodeDeleted

Signaler1< NodeId > gum::NodeGraphPart::onNodeDeleted
inherited

Definition at line 275 of file nodeGraphPart.h.

Referenced by gum::NodeGraphPart::__clearNodes().


The documentation for this class was generated from the following files: