gtsam
Loading...
Searching...
No Matches
VariableIndex.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4 * Atlanta, Georgia 30332-0415
5 * All Rights Reserved
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7
8 * See LICENSE for the license information
9
10 * -------------------------------------------------------------------------- */
11
17
18#pragma once
19
21#include <gtsam/inference/Key.h>
22#include <gtsam/base/FastMap.h>
24#include <gtsam/dllexport.h>
25
26#include <cassert>
27#include <stdexcept>
28#include <optional>
29
30namespace gtsam {
31
41class GTSAM_EXPORT VariableIndex {
42 public:
43 typedef std::shared_ptr<VariableIndex> shared_ptr;
44 typedef FactorIndices::iterator Factor_iterator;
45 typedef FactorIndices::const_iterator Factor_const_iterator;
46
47 protected:
48 typedef FastMap<Key, FactorIndices> KeyMap;
49 KeyMap index_;
50 size_t nFactors_; // Number of factors in the original factor graph.
51 size_t nEntries_; // Sum of involved variable counts of each factor.
52
53 public:
54 typedef KeyMap::const_iterator const_iterator;
55 typedef KeyMap::const_iterator iterator;
56 typedef KeyMap::value_type value_type;
57
60
62 VariableIndex() : nFactors_(0), nEntries_(0) {}
63
68 template <class FG>
69 explicit VariableIndex(const FG& factorGraph) : nFactors_(0), nEntries_(0) {
70 augment(factorGraph);
71 }
72
76
78 size_t size() const { return index_.size(); }
79
81 size_t nFactors() const { return nFactors_; }
82
84 size_t nEntries() const { return nEntries_; }
85
87 const FactorIndices& operator[](Key variable) const;
89 const FactorIndices& at(Key variable) const;
90
92 bool empty(Key variable) const;
93
97
99 bool equals(const VariableIndex& other, double tol=0.0) const;
100
102 void print(const std::string& str = "VariableIndex: ",
103 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
104
109 void outputMetisFormat(std::ostream& os) const;
110
111
115
120 template<class FG>
121 void augment(const FG& factors, const FactorIndices* newFactorIndices = nullptr);
122
127 template<class FG>
128 void augment(const FG& factor, const FactorIndices& newFactorIndices) {
129 augment(factor, &newFactorIndices);
130 }
131
137 void augmentExistingFactor(const FactorIndex factorIndex, const KeySet & newKeys);
138
149 template<typename ITERATOR, class FG>
150 void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG& factors);
151
153 template<typename ITERATOR>
154 void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey);
155
157 const_iterator begin() const { return index_.begin(); }
158
160 const_iterator end() const { return index_.end(); }
161
163 const_iterator find(Key key) const { return index_.find(key); }
164
165protected:
166 Factor_iterator factorsBegin(Key variable) { return internalAt(variable).begin(); }
167 Factor_iterator factorsEnd(Key variable) { return internalAt(variable).end(); }
168
169 Factor_const_iterator factorsBegin(Key variable) const { return internalAt(variable).begin(); }
170 Factor_const_iterator factorsEnd(Key variable) const { return internalAt(variable).end(); }
171
173 const FactorIndices& internalAt(Key variable) const {
174 const KeyMap::const_iterator item = index_.find(variable);
175 assert(item != index_.end());
176 return item->second;
177 }
178
181 const KeyMap::iterator item = index_.find(variable);
182 assert(item != index_.end());
183 return item->second;
184 }
185
186private:
187#if GTSAM_ENABLE_BOOST_SERIALIZATION
189 friend class boost::serialization::access;
190 template<class ARCHIVE>
191 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
192 ar & BOOST_SERIALIZATION_NVP(index_);
193 ar & BOOST_SERIALIZATION_NVP(nFactors_);
194 ar & BOOST_SERIALIZATION_NVP(nEntries_);
195 }
196#endif
197
199};
200
202template<>
203struct traits<VariableIndex> : public Testable<VariableIndex> {
204};
205
206} //\ namespace gtsam
207
A thin wrapper around std::vector that uses a custom allocator.
A thin wrapper around std::map that uses boost's fast_pool_allocator.
The base class for all factors.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
std::uint64_t FactorIndex
Integer nonlinear factor index type.
Definition types.h:46
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:37
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:40
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
Template to create a binary predicate.
Definition Testable.h:112
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:41
const FactorIndices & internalAt(Key variable) const
Internal version of 'at' that asserts existence.
Definition VariableIndex.h:173
size_t nEntries() const
The number of nonzero blocks, i.e. the number of variable-factor entries.
Definition VariableIndex.h:84
const_iterator begin() const
Iterator to the first variable entry.
Definition VariableIndex.h:157
const_iterator find(Key key) const
Find the iterator for the requested variable entry.
Definition VariableIndex.h:163
VariableIndex(const FG &factorGraph)
Create a VariableIndex that computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:69
size_t size() const
The number of variable entries. This is equal to the number of unique variable Keys.
Definition VariableIndex.h:78
FactorIndices & internalAt(Key variable)
Internal version of 'at' that asserts existence.
Definition VariableIndex.h:180
const_iterator end() const
Iterator to the first variable entry.
Definition VariableIndex.h:160
void augment(const FG &factor, const FactorIndices &newFactorIndices)
An overload of augment() that takes a single factor.
Definition VariableIndex.h:128
void augment(const FG &factors, const FactorIndices *newFactorIndices=nullptr)
Augment the variable index with new factors.
Definition VariableIndex-inl.h:27
VariableIndex()
Default constructor, creates an empty VariableIndex.
Definition VariableIndex.h:62
size_t nFactors() const
The number of factors in the original factor graph.
Definition VariableIndex.h:81