32 template <
typename GUM_SCALAR >
38 __gspan(0), __pdata(0), __mining(false), __dot(
".") {
49 template <
typename GUM_SCALAR >
59 template <
typename GUM_SCALAR >
79 template <
typename GUM_SCALAR >
91 template <
typename GUM_SCALAR >
95 template <
typename GUM_SCALAR >
99 template <
typename GUM_SCALAR >
108 if (!this->
hasEvidence() && (chain.second->cpf().nbrDim() == 1)) {
112 m.
set(i, chain.second->cpf().get(i));
130 for (
const auto pot : data.
pool)
131 if (pot->contains(
__query.second->type().variable())) pots.
insert(pot);
133 if (pots.
size() == 1) {
140 for (i.setFirst(), j.setFirst(); !i.end(); i.inc(), j.inc())
147 for (i.setFirst(), j.
setFirst(); !i.end(); i.inc(), j.
inc())
158 for (i.setFirst(), j.setFirst(); !i.end(); i.inc(), j.inc())
172 template <
typename GUM_SCALAR >
179 template <
typename GUM_SCALAR >
182 s <<
"Triangulation time: " <<
triang_time << std::endl;
183 s <<
"Pattern mining time: " <<
mining_time << std::endl;
184 s <<
"Pattern elimination time: " <<
pattern_time << std::endl;
185 s <<
"Inner node elimination time: " <<
inner_time << std::endl;
186 s <<
"Observed node elimination time: " <<
obs_time << std::endl;
187 s <<
"Full inference time: " <<
full_time << std::endl;
188 s <<
"#patterns: " <<
__gspan->patterns().size() << std::endl;
190 typedef std::vector< gspan::Pattern* >::const_iterator Iter;
192 for (Iter p =
__gspan->patterns().begin(); p !=
__gspan->patterns().end();
194 if (
__gspan->matches(**p).size()) {
195 s <<
"Pattern n°" << count++
196 <<
" match count: " <<
__gspan->matches(**p).size() << std::endl;
197 s <<
"Pattern n°" << count++ <<
" instance count: " << (**p).size()
205 template <
typename GUM_SCALAR >
216 typedef std::vector< gspan::Pattern* >::const_iterator Iter;
218 for (Iter p =
__gspan->patterns().begin(); p !=
__gspan->patterns().end();
240 template <
typename GUM_SCALAR >
249 &(data.graph), &(data.mod), data.partial_order());
252 for (
size_t i = 0; i < data.inners().size(); ++i)
253 if (!data.barren.exists(elim_order[i]))
258 data.matches.begin();
260 for (
const auto elt : **iter)
263 if (data.obs().size())
272 if (data.obs().size()) {
273 for (; iter != data.matches.end(); ++iter) {
280 for (; iter != data.matches.end(); ++iter) {
287 for (
const auto pat : fake_patterns) {
288 for (
const auto elt : *pat)
291 data.matches.erase(pat);
296 if (data.queries().size())
297 for (
const auto m : data.matches)
308 template <
typename GUM_SCALAR >
315 std::pair< Idx, std::string >& v) {
316 if ((*inst).hasRefAttr((*inst).get(v.second).id())) {
317 std::vector< std::pair< PRMInstance< GUM_SCALAR >*, std::string > >& refs =
320 for (
auto r = refs.begin(); r != refs.end(); ++r) {
321 if (!match.exists(r->first)) {
329 for (
const auto m : data.
matches) {
331 std::make_pair((*m)[v.first], &((*m)[v.first]->get(v.second))))) {
332 GUM_ASSERT(inst->
type().name() == (*m)[v.first]->type().name());
333 GUM_ASSERT(inst->
get(v.second).safeName()
334 == (*m)[v.first]->get(v.second).safeName());
345 template <
typename GUM_SCALAR >
350 std::pair< Idx, std::string > v;
353 for (
const auto inst : match) {
354 for (
const auto& elt : *inst) {
356 v = std::make_pair(match.pos(inst), elt.second->safeName());
357 data.
map.insert(
id, v);
359 data.
mod.insert(
id, elt.second->type()->domainSize());
360 data.
vars.insert(
id, &(elt.second->type().variable()));
368 if (
id != data.
vars.first(var))
377 && (inst->type().containerDag().children(elt.second->id()).size()
385 for (
const auto mat : data.
matches) {
391 match.atPos(pos)->get(
__query.second->safeName()).type().variable();
406 template <
typename GUM_SCALAR >
409 std::pair< Idx, std::string > attr) {
410 for (
const auto mat : data.
matches)
411 if (mat->atPos(attr.first)
412 ->hasRefAttr(mat->atPos(attr.first)->get(attr.second).id()))
418 template <
typename GUM_SCALAR >
424 for (
const auto node : data.
barren) {
425 for (
const auto pot : pool)
426 if (pot->contains(*data.
vars.second(node))) {
443 while (candidates.
size()) {
444 node = candidates.
back();
445 candidates.
erase(node);
448 for (
const auto pot : pool) {
449 if (pot->contains(*data.
vars.second(node))) {
470 template <
typename GUM_SCALAR >
476 const std::vector< NodeId >& elim_order) {
479 std::pair< Idx, std::string > target;
482 for (
size_t idx = data.
inners().
size(); idx < end; ++idx) {
483 target = data.
map[data.
vars.first(data.
vars.second(elim_order[idx]))];
484 eliminateNode(&(match[target.first]->get(target.second).type().variable()),
492 template <
typename GUM_SCALAR >
498 const std::vector< NodeId >& elim_order) {
501 std::pair< Idx, std::string > target;
504 for (
size_t idx = data.
inners().
size(); idx < end; ++idx) {
505 target = data.
map[data.
vars.first(data.
vars.second(elim_order[idx]))];
506 eliminateNode(&(match[target.first]->get(target.second).type().variable()),
514 template <
typename GUM_SCALAR >
526 GUM_ASSERT((**iter).size() == match.size());
528 for (
Size idx = 0; idx < match.size(); ++idx) {
529 GUM_ASSERT((**iter).atPos(idx)->type() == match.atPos(idx)->type());
536 std::pair< Idx, std::string > target;
541 for (
Size idx = 0; idx < match.size(); ++idx) {
543 const auto& chains = source[idx]->type().slotChains();
545 for (
const auto sc : chains) {
547 GUM_ASSERT(!(sc->isMultiple()));
552 ->getInstance(sc->id())
553 .
get(sc->lastElt().safeName())
557 ->getInstance(sc->id())
558 .
get(sc->lastElt().safeName())
563 if (bij.
first(&(match[idx]
564 ->getInstance(sc->id())
565 .
get(sc->lastElt().safeName())
569 ->getInstance(sc->id())
570 .
get(sc->lastElt().safeName())
584 for (
const auto p : pool) {
585 for (
const auto v : p->variablesSequence()) {
587 target = data.
map[data.
vars.first(v)];
589 v, &(match[target.first]->get(target.second).type().variable()));
598 for (
const auto pot : *my_pool)
609 template <
typename GUM_SCALAR >
616 for (
const auto& elt : *this->
_sys) {
639 partial_order[0].insert(agg);
647 if (partial_order[0].empty()) partial_order.
erase(0);
649 if (partial_order.
size() > 1) {
652 if (partial_order[1].empty()) partial_order.
erase(1);
657 partial_order.
insert(query_set);
660 for (
auto attr = inst->
begin(); attr != inst->
end(); ++attr)
666 for (
const auto& elt : this->
evidence(inst))
673 if (partial_order.
size() > 1)
674 for (
size_t idx = 0; idx < partial_order[0].
size(); ++idx)
676 &(inst->
get(v[idx]).type().variable()), pool,
__trash);
680 for (
const auto elt : *inst)
685 for (
const auto& elt : this->
evidence(inst))
691 for (
size_t idx = 0; idx < partial_order[0].
size(); ++idx)
702 for (
const auto srcPot : data->
pool) {
708 for (
const auto agg : data->
c.aggregates())
710 inst->
get(agg->id()).cpf())));
717 for (
size_t idx = data->
inners().
size(); idx < size; ++idx)
724 for (
const auto pot : pool)
731 template <
typename GUM_SCALAR >
738 for (
const auto pot : data.
pool) {
741 for (
Size var_1 = 0; var_1 < vars.
size(); ++var_1) {
747 data.
mods.insert(id_1, vars.
atPos(var_1)->domainSize());
751 for (
Size var_2 = var_1 + 1; var_2 < vars.
size(); ++var_2) {
757 data.
mods.insert(id_2, vars.
atPos(var_2)->domainSize());
771 for (
const auto pot : *elt.second) {
774 pot->variablesSequence();
776 for (
Size var_1 = 0; var_1 < vars.
size(); ++var_1) {
782 data.
mods.insert(id_1, vars.
atPos(var_1)->domainSize());
786 for (
Size var_2 = var_1 + 1; var_2 < vars.
size(); ++var_2) {
792 data.
mods.insert(id_2, vars.
atPos(var_2)->domainSize());
805 template <
typename GUM_SCALAR >
808 partial_order.insert(
NodeSet());
809 partial_order.insert(
NodeSet());
812 template <
typename GUM_SCALAR >
817 matches(m), __real_order(0) {
820 for (
int i = 0; i < 4; ++i)
824 template <
typename GUM_SCALAR >
834 template <
typename GUM_SCALAR >
847 template <
typename GUM_SCALAR >
855 for (
const auto node :
c.containerDag().nodes()) {
856 switch (
c.get(node).elt_type()) {
866 mods.insert(node,
c.get(node).type()->domainSize());
877 const auto& parents =
c.containerDag().parents(node);
880 for (
auto tail = parents.begin(); tail != parents.end(); ++tail) {
887 while (marry != parents.end()) {
898 switch (
c.get(node).elt_type()) {
900 if (
c.isOutputNode(
c.get(node)))
908 for (
const auto par :
c.containerDag().parents(node)) {
909 const auto& prnt =
c.get(par);
911 if ((!
c.isOutputNode(prnt))
926 if (
c.isOutputNode(
c.get(node)))
953 template <
typename GUM_SCALAR >
961 template <
typename GUM_SCALAR >
970 template <
typename GUM_SCALAR >
975 template <
typename GUM_SCALAR >
982 template <
typename GUM_SCALAR >
989 template <
typename GUM_SCALAR >
996 template <
typename GUM_SCALAR >
1001 template <
typename GUM_SCALAR >
1006 template <
typename GUM_SCALAR >
1008 return "StructuredInference";
1011 template <
typename GUM_SCALAR >
1016 template <
typename GUM_SCALAR >
1022 template <
typename GUM_SCALAR >
1030 GUM_ASSERT(!data.
mod.exists(
id));
1034 GUM_ASSERT(!data.
map.exists(
id));
1035 data.
vars.eraseFirst(
id);
1036 GUM_ASSERT(!data.
vars.existsFirst(
id));
1041 data.
pots.erase(
id);
1042 GUM_ASSERT(!data.
pots.exists(
id));
List< NodeSet > partial_order
The partial order used of variable elimination.
void __buildPatternGraph(PData &data, Set< Potential< GUM_SCALAR > * > &pool, const Sequence< PRMInstance< GUM_SCALAR > * > &match)
Build the DAG corresponding to Pattern data.pattern, initialize pool with all the Potentials of all v...
A class to combine efficiently several MultiDim tablesMultiDimCombinationDefault is a class designed ...
Headers of StructuredInference.
void insert(const T1 &first, const T2 &second)
Inserts a new association in the gum::Bijection.
HashTable< const PRMClass< GUM_SCALAR > *, CData *> __cdata_map
Mapping between a Class<GUM_SCALAR> and data about instances reduced using only Class<GUM_SCALAR> lev...
aGrUM's Potential is a multi-dimensional array with tensor operators.
void __reducePattern(const gspan::Pattern *p)
Proceed with the elimination of all inner variables (observed or not) of all usable matches of Patter...
NodeProperty< Size > mods
The class variables modalities.
UndiGraph reducedGraph
The reduced graph.
virtual void _marginal(const typename PRMInference< GUM_SCALAR >::Chain &chain, Potential< GUM_SCALAR > &m)
See PRMInference::_marginal().
const List< NodeSet > * partial_order()
virtual void addNodeWithId(const NodeId id)
try to insert a node with the given id
Val & push_back(Args &&... args)
An alias for pushBack used for STL compliance.
PData(const gspan::Pattern &p, typename GSpan< GUM_SCALAR >::MatchedInstances &m)
Default constructor.
double step() const
Returns the delta time between now and the last reset() call (or the constructor).
NodeSet & queries()
Returns the set of queried nodes given all the matches of pattern.
List< NodeSet > partial_order
Partial order used for triangulation, first is outputs nodes, second query nodes. ...
Set< Potential< GUM_SCALAR > *> __trash
Keeping track of create potentials to delete them after inference.
PRMAttribute< GUM_SCALAR > & get(NodeId id)
Getter on an PRMAttribute<GUM_SCALAR> of this PRMInstance<GUM_SCALAR>.
const T1 & first(const T2 &second) const
Returns the first value of a pair given its second value.
const std::string & name() const
Returns the name of this object.
virtual GUM_SCALAR get(const Instantiation &i) const final
Default implementation of MultiDimContainer::get().
GSpan< GUM_SCALAR >::MatchedInstances & matches
A reference over the usable matches of pattern.
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
void eraseFirst(const T1 &first)
Erases an association containing the given first element.
std::vector< NodeId > __elim_order
Size size() const noexcept
Returns the size of the sequence.
EMap & evidence(const PRMInstance< GUM_SCALAR > &i)
Returns EMap of evidences over i.
GSpan< GUM_SCALAR > * __gspan
Pointer over th GSpan<GUM_SCALAR> instance used by this class.
An PRMInstance is a Bayesian Network fragment defined by a Class and used in a PRMSystem.
const Potential< GUM_SCALAR > & normalize() const
normalisation of this do nothing if sum is 0
UndiGraph moral_graph
The class moral graph. NodeId matches those in c.
PData * __pdata
The pattern data of the pattern which one of its matches contains the query.
The generic class for storing (ordered) sequences of objects.
virtual void addEdge(const NodeId first, const NodeId second)
insert a new edge into the undirected graph
NodeSet & outputs()
Returns the set of outputs nodes given all the matches of pattern.
PRMClass< GUM_SCALAR > & type()
Returns the type of this instance.
NodeProperty< std::pair< Idx, std::string > > map
To ease translating potentials from one match to another.
bool __mining
Flag which tells to use pattern mining or not.
virtual void erase(const DiscreteVariable &var) final
Removes a var from the variables of the multidimensional matrix.
Set< Potential< GUM_SCALAR > *> * __eliminateObservedNodesInSource(typename StructuredInference::PData &data, const Set< Potential< GUM_SCALAR > * > &pool, const Sequence< PRMInstance< GUM_SCALAR > * > &match, const std::vector< NodeId > &elim_order)
List< NodeSet > * __real_order
A copy of __partial_order without empty sets.
Set< const PRMInstance< GUM_SCALAR > *> instances
The Set of Instances reduces at class level.
Bijection< const DiscreteVariable *, NodeId > var2node
Mapping between DiscreteVariable and NodeId.
void __insertNodeInElimLists(typename StructuredInference::PData &data, const Sequence< PRMInstance< GUM_SCALAR > * > &match, PRMInstance< GUM_SCALAR > *inst, PRMAttribute< GUM_SCALAR > *attr, NodeId id, std::pair< Idx, std::string > &v)
Abstract class representing an element of PRM class.
Private structure to represent data about a Class<GUM_SCALAR>.
void __reduceAloneInstances(RGData &data)
Add the reduced potentials of instances not in any used patterns.
UndiGraph graph
A yet to be triangulated undigraph.
NodeSet & obs()
Returns the set of inner and observed nodes given all the matches of pattern.
std::string __dot
Unreduce the match containing the query.
void erase(const Key &k)
Erases an element from the set.
bool exists(const NodeId id) const
alias for existsNode
Base class for discrete random variable.
Generic doubly linked lists.
gum is the global namespace for all aGrUM entities
NodeSet & outputs()
Returns the set of outputs nodes.
bool __found_query
Flag with an explicit name.
iterator begin() const
The usual unsafe begin iterator to parse the set.
void __addEdgesInReducedGraph(RGData &data)
Add the nodes in the reduced graph.
PRM< GUM_SCALAR > const * _prm
The PRM<GUM_SCALAR> on which inference is done.
virtual NodeId addNode()
insert a new node and return its id
const gspan::Pattern & pattern
The pattern for which this represents data about it.
Size size() const
Returns the number of attributes in this PRMInstance<GUM_SCALAR>.
NodeSet & queries()
Returns the set of query nodes (which will not be eliminated).
StructuredInference & operator=(const StructuredInference &source)
Copy operator.
NodeProperty< Potential< GUM_SCALAR > *> pots
To handle barren nodes.
void __buildReduceGraph(RGData &data)
This calls __reducePattern() over each pattern and then build the reduced graph which is used for inf...
const NodeSet & neighbours(const NodeId id) const
returns the set of edges adjacent to a given node
virtual void eraseNode(const NodeId id)
remove a node and its adjacent edges from the graph
std::vector< std::pair< PRMInstance< GUM_SCALAR > *, std::string > > & getRefAttr(NodeId id)
Returns a vector of pairs of refering attributes of id.
NodeSet & outputs()
Returns the set of outputs nodes (which will be eliminated).
Representation of a setA Set is a structure that contains arbitrary elements.
const std::string & safeName() const
Returns the safe name of this PRMClassElement, if any.
void reset()
Reset the timer.
bool existsFirst(const T1 &first) const
Returns true if first is the first element in a pair in the gum::Bijection.
bool exists(const Key &k) const
Indicates whether a given elements belong to the set.
void __removeBarrenNodes(typename StructuredInference::PData &data, Set< Potential< GUM_SCALAR > * > &pool)
void erase(Size i)
Erases the ith element of the List (the first one is in position 0).
HashTable< const Sequence< PRMInstance< GUM_SCALAR > *> *, Set< Potential< GUM_SCALAR > *> *> __elim_map
Mapping between a Pattern's match and its potential pool after inner variables were eliminated...
RGData()
Default constructor.
<agrum/PRM/structuredInference.h>
Bijection< NodeId, const DiscreteVariable *> vars
Bijection between graph's nodes and their corresponding DiscreteVariable, for inference purpose...
Private structure to represent data about a pattern.
class for graph triangulations for which we enforce a given partial ordering on the nodes elimination...
PRMInference< GUM_SCALAR >::Chain __query
The query.
void inc()
Operator increment.
StructuredInference(const PRM< GUM_SCALAR > &prm, const PRMSystem< GUM_SCALAR > &system, gspan::SearchStrategy< GUM_SCALAR > *strategy=0)
Default constructor.
Set< Potential< GUM_SCALAR > *> pool
The potential pool obtained by C elimination of inner nodes.
Size size() const noexcept
Returns the number of elements in the list.
const Bijection< const DiscreteVariable *, const DiscreteVariable *> & bijection() const
Returns a mapping between DiscreteVariable used in this and the ones used in this PRMInstance<GUM_SCA...
Set< const PRMInstance< GUM_SCALAR > *> __reducedInstances
This keeps track of reduced instances.
const std::vector< NodeId > & eliminationOrder()
returns an elimination ordering compatible with the triangulated graph
Set< NodeId > barren
Set of barren nodes.
const NodeGraphPart & nodes() const
return *this as a NodeGraphPart
A PRMSystem is a container of PRMInstance and describe a relational skeleton.
Base class for all aGrUM's exceptions.
virtual std::string name() const
Tells this algorithm to use pattern mining or not.
Set of pairs of elements with fast search for both elements.
Potential< GUM_SCALAR > * copyPotential(const Bijection< const DiscreteVariable *, const DiscreteVariable * > &bij, const Potential< GUM_SCALAR > &source)
Returns a copy of a Potential after applying a bijection over the variables in source.
List< NodeSet > __partial_order
We'll use a PartialOrderedTriangulation with three sets: output, nodes and obs with children outside ...
void eliminateNode(const DiscreteVariable *var, Set< Potential< GUM_SCALAR > * > &pool, Set< Potential< GUM_SCALAR > * > &trash)
Proceeds with the elimination of var in pool.
NodeSet & inners()
Returns the set of inner nodes.
Set< Potential< GUM_SCALAR > *> * __eliminateObservedNodes(typename StructuredInference::PData &data, const Set< Potential< GUM_SCALAR > * > &pool, const Sequence< PRMInstance< GUM_SCALAR > * > &match, const std::vector< NodeId > &elim_order)
Add in data.queries() any queried variable in one of data.pattern matches.
A PRMSlotChain represents a sequence of gum::prm::PRMClassElement<GUM_SCALAR> where the n-1 first gum...
bool hasEvidence() const
Returns true if i has evidence on PRMAttribute<GUM_SCALAR> a.
PRMSystem< GUM_SCALAR > const * _sys
The Model on which inference is done.
NodeProperty< Size > mod
The pattern's variables modalities.
NodeSet & aggregators()
Returns the set of aggregators and their parents.
Unsafe iterators for the Set class.
std::pair< const PRMInstance< GUM_SCALAR > *, const PRMAttribute< GUM_SCALAR > *> Chain
Code alias.
Set< Potential< GUM_SCALAR > *> * __translatePotSet(typename StructuredInference::PData &data, const Set< Potential< GUM_SCALAR > * > &pool, const Sequence< PRMInstance< GUM_SCALAR > * > &match)
Translate a given Potential Set into one w.r.t. variables in match.
Class for assigning/browsing values to tuples of discrete variables.
virtual void _joint(const std::vector< typename PRMInference< GUM_SCALAR >::Chain > &queries, Potential< GUM_SCALAR > &j)
See PRMInference::_joint().
void erase(const Key &k)
Remove an element from the sequence.
HashTable< const PRMClass< GUM_SCALAR > *, std::vector< NodeId > *> __outputs
std::string __str(const PRMInstance< GUM_SCALAR > *i, const PRMAttribute< GUM_SCALAR > *a) const
Val & insert(const Val &val)
Inserts a new element at the end of the chained list (alias of pushBack).
This abstract class is used as base class for all inference class on PRM<GUM_SCALAR>.
bool __allInstanceNoRefAttr(typename StructuredInference::PData &data, std::pair< Idx, std::string > attr)
Private structure to represent data about a reduced graph.
std::vector< NodeId > & elim_order()
The elimination order for nodes of this class.
This class represents a Probabilistic Relational PRMSystem<GUM_SCALAR>.
const iterator & end()
Returns a reference over the iterator at the end of the list of gum::prm::PRMAttribute<GUM_SCALAR> in...
A PRMClass is an object of a PRM representing a fragment of a Bayesian Network which can be instantia...
This class discovers pattern in a PRM<GUM_SCALAR>'s PRMSystem<GUM_SCALAR> to speed up structured infe...
std::pair< Idx, std::string > __query_data
virtual void set(const Instantiation &i, const GUM_SCALAR &value) const final
Default implementation of MultiDimContainer::set().
void setFirst()
Assign the first values to the tuple of the Instantiation.
virtual ~StructuredInference()
Destructor.
Size Idx
Type for indexes.
CData(const PRMClass< GUM_SCALAR > &c)
Default constructor.
NodeSet & inners()
Returns the set of inner nodes.
GSpan< GUM_SCALAR > & gspan()
Returns the instance of gspan used to search patterns.
virtual void _evidenceRemoved(const typename PRMInference< GUM_SCALAR >::Chain &chain)
See PRMInference::_evidenceRemoved().
PRMAttribute is a member of a Class in a PRM.
Bijection< NodeId, std::string > node2attr
A bijection to easily keep track between graph and attributes, its of the form instance_name DOT attr...
virtual void _evidenceAdded(const typename PRMInference< GUM_SCALAR >::Chain &chain)
See PRMInference::_evidenceAdded().
std::size_t Size
In aGrUM, hashed values are unsigned long int.
PRMClassElement< GUM_SCALAR > & lastElt()
Returns the last element of the slot chain, typically this is an gum::PRMAttribute or a gum::PRMAggre...
virtual const Sequence< const DiscreteVariable *> & variablesSequence() const final
Returns a const ref to the sequence of DiscreteVariable*.
iterator begin()
Returns an iterator at the begining of the list of gum::prm::PRMAttribute<GUM_SCALAR> in this PRMInst...
Set< Potential< GUM_SCALAR > *> pool
The pool of potentials matching the reduced graph.
Size size() const noexcept
Returns the number of elements in the set.
void setPatternMining(bool b)
Tells this algorithm to use pattern mining or not.
static INLINE bool isAggregate(const PRMClassElement< GUM_SCALAR > &elt)
Return true if obj is of type PRMAggregate.
virtual bool contains(const DiscreteVariable &var) const final
Returns true if var is in *this.
virtual TABLE< GUM_SCALAR > * combine(const Set< const TABLE< GUM_SCALAR > * > &set)
Creates and returns the result of the combination of the tables within set.
This contains all the information we want for a node in a DFSTree.
This is an abstract class used to tune search strategies in the gspan algorithm.
Size NodeId
Type for node ids.
NodeProperty< Size > mods
Mapping between NodeId and modalities.
void insert(const Key &k)
Inserts a new element into the set.
const Key & back() const
Returns the last element of the sequence.
const PRMClass< GUM_SCALAR > & c
The class about what this data is about.
#define GUM_ERROR(type, msg)
const Key & atPos(Idx i) const
Returns the object at the pos i.
Set< Potential< GUM_SCALAR > *> __trash
void __removeNode(typename StructuredInference::PData &data, NodeId id, Set< Potential< GUM_SCALAR > * > &pool)
bool end() const
Returns true if the Instantiation reached the end.
Potential< GUM_SCALAR > * multPotential(const Potential< GUM_SCALAR > &t1, const Potential< GUM_SCALAR > &t2)
void searchPatterns()
Search for patterns without doing any computations.
void insert(const Key &k)
Insert an element at the end of the sequence.