28 #include <boost/assign/list_inserter.hpp> 54 template<
typename KEYS>
56 Base(keys.begin(), keys.
end()) {
60 template<
typename ITERATOR>
62 Base(firstKey, lastKey) {
67 boost::assign::list_inserter<boost::assign_detail::call_push_back<This> >
operator+=(
69 return boost::assign::make_list_inserter(
70 boost::assign_detail::call_push_back<This>(*
this))(
key);
81 template<
class FACTOR_GRAPH>
100 template<
class FACTOR_GRAPH>
102 const KeyVector& constrainLast,
bool forceOrder =
false) {
117 bool forceOrder =
false);
127 template<
class FACTOR_GRAPH>
129 const KeyVector& constrainFirst,
bool forceOrder =
false) {
145 const KeyVector& constrainFirst,
bool forceOrder =
false);
156 template<
class FACTOR_GRAPH>
176 template<
class FACTOR_GRAPH>
180 std::stable_sort(
keys.begin(),
keys.end());
185 template<
class FACTOR_GRAPH>
187 std::vector<int>& adj,
const FACTOR_GRAPH&
graph);
192 template<
class FACTOR_GRAPH>
204 template<
class FACTOR_GRAPH>
206 const FACTOR_GRAPH& graph) {
210 switch (orderingType) {
218 throw std::runtime_error(
219 "Ordering::Create error: called with CUSTOM ordering type.");
221 throw std::runtime_error(
222 "Ordering::Create error: called with unknown ordering type.");
242 const VariableIndex& variableIndex, std::vector<int>& cmember);
246 template<
class ARCHIVE>
248 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)
Compute an ordering determined by METIS from a VariableIndex.
static Ordering Create(OrderingType orderingType, const FACTOR_GRAPH &graph)
boost::assign::list_inserter< boost::assign_detail::call_push_back< This > > operator+=(Key key)
GTSAM_EXPORT bool equals(const Ordering &other, double tol=1e-9) const
Ordering(ITERATOR firstKey, ITERATOR lastKey)
Create an ordering using iterators over keys.
Ordering(const KEYS &keys)
Create from a container.
NonlinearFactorGraph graph
static GTSAM_EXPORT void CSRFormat(std::vector< int > &xadj, std::vector< int > &adj, const FACTOR_GRAPH &graph)
METIS Formatting function.
static const KeyFormatter DefaultKeyFormatter
GTSAM_EXPORT Ordering()
Create an empty ordering.
static Ordering Colamd(const FACTOR_GRAPH &graph)
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
void serialize(ARCHIVE &ar, const unsigned int version)
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Array< double, 1, 3 > e(1./3., 0.5, 2.)
static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const KeyVector &constrainFirst, bool forceOrder=false)
OrderingType
Type of ordering to use.
static Ordering ColamdConstrained(const FACTOR_GRAPH &graph, const FastMap< Key, int > &groups)
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
static Ordering Metis(const FACTOR_GRAPH &graph)
FastMap< Key, size_t > invert() const
Invert (not reverse) the ordering - returns a map from key to order position.
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)
A thin wrapper around std::set that uses boost's fast_pool_allocator.
static Ordering Natural(const FACTOR_GRAPH &fg)
Return a natural Ordering. Typically used by iterative solvers.
std::uint64_t Key
Integer nonlinear key type.
friend class boost::serialization::access
Ordering This
Typedef to this class.
GTSAM_EXPORT void print(const std::string &str="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const