HybridValues.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 
18 #pragma once
19 
23 #include <gtsam/inference/Key.h>
25 #include <gtsam/nonlinear/Values.h>
26 
27 #include <map>
28 #include <string>
29 #include <vector>
30 
31 namespace gtsam {
32 
38 class GTSAM_EXPORT HybridValues {
39  private:
42 
45 
48 
49  public:
52 
54  HybridValues() = default;
55 
58  : continuous_(cv), discrete_(dv){}
59 
62  const Values& v)
63  : continuous_(cv), discrete_(dv), nonlinear_(v){}
64 
68 
70  void print(const std::string& s = "HybridValues",
71  const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {
72  std::cout << s << ": \n";
73  continuous_.print(" Continuous",
74  keyFormatter); // print continuous components
75  discrete_.print(" Discrete", keyFormatter); // print discrete components
76  }
77 
79  bool equals(const HybridValues& other, double tol = 1e-9) const {
80  return continuous_.equals(other.continuous_, tol) &&
81  discrete_.equals(other.discrete_, tol);
82  }
83 
87 
89  const VectorValues& continuous() const { return continuous_; }
90 
92  const DiscreteValues& discrete() const { return discrete_; }
93 
95  const Values& nonlinear() const { return nonlinear_; }
96 
98  bool existsVector(Key j) { return continuous_.exists(j); }
99 
101  bool existsDiscrete(Key j) { return (discrete_.find(j) != discrete_.end()); }
102 
105  return nonlinear_.exists(j);
106  }
107 
109  bool exists(Key j) {
110  return existsVector(j) || existsDiscrete(j) || existsNonlinear(j);
111  }
112 
117  void insert(Key j, const Vector& value) { continuous_.insert(j, value); }
118 
123  void insert(Key j, size_t value) { discrete_[j] = value; }
124 
127  continuous_.insert_or_assign(j, value);
128  }
129 
131  void insert_or_assign(Key j, size_t value) {
132  discrete_[j] = value;
133  }
134 
138  continuous_.insert(values);
139  return *this;
140  }
141 
145  discrete_.insert(values);
146  return *this;
147  }
148 
152  nonlinear_.insert(values);
153  return *this;
154  }
155 
159  continuous_.insert(values.continuous());
160  discrete_.insert(values.discrete());
161  nonlinear_.insert(values.nonlinear());
162  return *this;
163  }
164 
169  Vector& at(Key j) { return continuous_.at(j); }
170 
175  size_t& atDiscrete(Key j) { return discrete_.at(j); }
176 
182  continuous_.update(values);
183  return *this;
184  }
185 
191  discrete_.update(values);
192  return *this;
193  }
194 
200  continuous_.update(values.continuous());
201  discrete_.update(values.discrete());
202  return *this;
203  }
204 
207  VectorValues measurements;
208  for (const auto& key : keys) {
209  measurements.insert(key, continuous_.at(key));
210  }
211  return measurements;
212  }
213 
217 
224  std::string html(
225  const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {
226  std::stringstream ss;
227  ss << this->continuous_.html(keyFormatter);
228  ss << this->discrete_.html(keyFormatter);
229  return ss.str();
230  }
231 
233 };
234 
235 // traits
236 template <>
237 struct traits<HybridValues> : public Testable<HybridValues> {};
238 
239 } // namespace gtsam
gtsam::VectorValues::print
void print(const std::string &str="VectorValues", const KeyFormatter &formatter=DefaultKeyFormatter) const
Definition: VectorValues.cpp:151
gtsam::DiscreteValues::print
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print required by Testable.
Definition: DiscreteValues.cpp:30
gtsam::Values::exists
bool exists(Key j) const
Definition: Values.cpp:93
gtsam::HybridValues
Definition: HybridValues.h:38
s
RealScalar s
Definition: level1_cplx_impl.h:126
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
gtsam::HybridValues::insert
HybridValues & insert(const DiscreteValues &values)
Definition: HybridValues.h:144
gtsam::HybridValues::insert
HybridValues & insert(const VectorValues &values)
Definition: HybridValues.h:137
keys
const KeyVector keys
Definition: testRegularImplicitSchurFactor.cpp:40
gtsam::VectorValues::insert
iterator insert(const std::pair< Key, Vector > &key_value)
Definition: VectorValues.cpp:88
gtsam::HybridValues::continuous
const VectorValues & continuous() const
Return the multi-dimensional vector values.
Definition: HybridValues.h:89
gtsam::VectorValues::html
std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Output as a html table.
Definition: VectorValues.cpp:388
gtsam::VectorValues::at
Vector & at(Key j)
Definition: VectorValues.h:142
gtsam::HybridValues::atDiscrete
size_t & atDiscrete(Key j)
Definition: HybridValues.h:175
gtsam::HybridValues::update
HybridValues & update(const VectorValues &values)
Definition: HybridValues.h:181
gtsam::DiscreteValues::html
std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter, const Names &names={}) const
Output as a html table.
Definition: DiscreteValues.cpp:105
gtsam::Vector
Eigen::VectorXd Vector
Definition: Vector.h:38
gtsam::KeyVector
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:92
gtsam::HybridValues::HybridValues
HybridValues(const VectorValues &cv, const DiscreteValues &dv, const Values &v)
Construct from all values types.
Definition: HybridValues.h:61
gtsam::DefaultKeyFormatter
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition: Key.cpp:30
ss
static std::stringstream ss
Definition: testBTree.cpp:31
Key.h
gtsam::HybridValues::exists
bool exists(Key j)
Check whether a variable with key j exists.
Definition: HybridValues.h:109
gtsam::HybridValues::existsDiscrete
bool existsDiscrete(Key j)
Check whether a variable with key j exists in DiscreteValues.
Definition: HybridValues.h:101
gtsam::HybridValues::existsVector
bool existsVector(Key j)
Check whether a variable with key j exists in VectorValues.
Definition: HybridValues.h:98
gtsam::VectorValues
Definition: VectorValues.h:74
j
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2
gtsam::KeyFormatter
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
gtsam::VectorValues::update
VectorValues & update(const VectorValues &values)
Definition: VectorValues.cpp:98
gtsam::DiscreteValues::update
DiscreteValues & update(const DiscreteValues &values)
Definition: DiscreteValues.cpp:64
gtsam::HybridValues::continuousSubset
VectorValues continuousSubset(const KeyVector &keys) const
Extract continuous values with given keys.
Definition: HybridValues.h:206
Assignment.h
An assignment from labels to a discrete value index (size_t)
gtsam::HybridValues::nonlinear_
Values nonlinear_
Definition: HybridValues.h:47
VectorValues.h
Factor Graph Values.
DiscreteKey.h
specialized key for discrete variables
key
const gtsam::Symbol key('X', 0)
gtsam::HybridValues::continuous_
VectorValues continuous_
Definition: HybridValues.h:41
gtsam::HybridValues::discrete
const DiscreteValues & discrete() const
Return the discrete values.
Definition: HybridValues.h:92
gtsam::HybridValues::insert
void insert(Key j, const Vector &value)
Definition: HybridValues.h:117
gtsam::DiscreteValues::equals
bool equals(const DiscreteValues &x, double tol=1e-9) const
equals required by Testable for unit testing.
Definition: DiscreteValues.cpp:39
gtsam::VectorValues::equals
bool equals(const VectorValues &x, double tol=1e-9) const
Definition: VectorValues.cpp:159
gtsam
traits
Definition: chartTesting.h:28
gtsam::Testable
Definition: Testable.h:152
DiscreteValues.h
gtsam::traits
Definition: Group.h:36
gtsam::DiscreteValues
Definition: DiscreteValues.h:34
leaf::values
leaf::MyValues values
gtsam::Values
Definition: Values.h:65
gtsam::VectorValues::insert_or_assign
void insert_or_assign(Key j, const Vector &value)
Definition: VectorValues.h:222
gtsam::HybridValues::insert_or_assign
void insert_or_assign(Key j, const Vector &value)
insert_or_assign() , similar to Values.h
Definition: HybridValues.h:126
gtsam::HybridValues::at
Vector & at(Key j)
Definition: HybridValues.h:169
gtsam::DiscreteValues::insert
std::pair< iterator, bool > insert(const value_type &value)
Definition: DiscreteValues.h:68
gtsam::Values::insert
void insert(Key j, const Value &val)
Definition: Values.cpp:155
gtsam::VectorValues::exists
bool exists(Key j) const
Definition: VectorValues.h:136
v
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
gtsam::HybridValues::HybridValues
HybridValues(const VectorValues &cv, const DiscreteValues &dv)
Construct from DiscreteValues and VectorValues.
Definition: HybridValues.h:57
gtsam::HybridValues::existsNonlinear
bool existsNonlinear(Key j)
Check whether a variable with key j exists in values.
Definition: HybridValues.h:104
gtsam::tol
const G double tol
Definition: Group.h:79
gtsam::HybridValues::insert
HybridValues & insert(const HybridValues &values)
Definition: HybridValues.h:158
gtsam::HybridValues::insert
HybridValues & insert(const Values &values)
Definition: HybridValues.h:151
gtsam::HybridValues::html
std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Output as a html table.
Definition: HybridValues.h:224
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
gtsam::HybridValues::insert
void insert(Key j, size_t value)
Definition: HybridValues.h:123
gtsam::HybridValues::update
HybridValues & update(const DiscreteValues &values)
Definition: HybridValues.h:190
gtsam::HybridValues::equals
bool equals(const HybridValues &other, double tol=1e-9) const
equals required by Testable for unit testing
Definition: HybridValues.h:79
test_callbacks.value
value
Definition: test_callbacks.py:158
pybind_wrapper_test_script.other
other
Definition: pybind_wrapper_test_script.py:42
gtsam::HybridValues::discrete_
DiscreteValues discrete_
Definition: HybridValues.h:44
Values.h
A non-templated config holding any types of Manifold-group elements.
gtsam::HybridValues::print
void print(const std::string &s="HybridValues", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print required by Testable for unit testing
Definition: HybridValues.h:70
gtsam::HybridValues::update
HybridValues & update(const HybridValues &values)
Definition: HybridValues.h:199
gtsam::HybridValues::insert_or_assign
void insert_or_assign(Key j, size_t value)
insert_or_assign() , similar to Values.h
Definition: HybridValues.h:131
gtsam::HybridValues::nonlinear
const Values & nonlinear() const
Return the nonlinear values.
Definition: HybridValues.h:95


gtsam
Author(s):
autogenerated on Thu Jun 13 2024 03:02:34