Merge pull request #140 from borglab/fix/metis-empty-graph
Fix Metis ordering for empty graph and single noderelease/4.3a0
commit
7c7e3687ef
|
@ -213,11 +213,21 @@ Ordering Ordering::Metis(const MetisIndex& met) {
|
|||
#ifdef GTSAM_SUPPORT_NESTED_DISSECTION
|
||||
gttic(Ordering_METIS);
|
||||
|
||||
idx_t size = met.nValues();
|
||||
if (size == 0)
|
||||
{
|
||||
return Ordering();
|
||||
}
|
||||
|
||||
if (size == 1)
|
||||
{
|
||||
return Ordering(KeyVector(1, met.intToKey(0)));
|
||||
}
|
||||
|
||||
vector<idx_t> xadj = met.xadj();
|
||||
vector<idx_t> adj = met.adj();
|
||||
vector<idx_t> perm, iperm;
|
||||
|
||||
idx_t size = met.nValues();
|
||||
for (idx_t i = 0; i < size; i++) {
|
||||
perm.push_back(0);
|
||||
iperm.push_back(0);
|
||||
|
|
|
@ -191,7 +191,10 @@ public:
|
|||
|
||||
template<class FACTOR_GRAPH>
|
||||
static Ordering Metis(const FACTOR_GRAPH& graph) {
|
||||
return Metis(MetisIndex(graph));
|
||||
if (graph.empty())
|
||||
return Ordering();
|
||||
else
|
||||
return Metis(MetisIndex(graph));
|
||||
}
|
||||
|
||||
/// @}
|
||||
|
|
|
@ -294,6 +294,28 @@ TEST(Ordering, MetisLoop) {
|
|||
}
|
||||
#endif
|
||||
/* ************************************************************************* */
|
||||
#ifdef GTSAM_SUPPORT_NESTED_DISSECTION
|
||||
TEST(Ordering, MetisEmptyGraph) {
|
||||
SymbolicFactorGraph symbolicGraph;
|
||||
|
||||
Ordering actual = Ordering::Create(Ordering::METIS, symbolicGraph);
|
||||
Ordering expected;
|
||||
EXPECT(assert_equal(expected, actual));
|
||||
}
|
||||
#endif
|
||||
/* ************************************************************************* */
|
||||
#ifdef GTSAM_SUPPORT_NESTED_DISSECTION
|
||||
TEST(Ordering, MetisSingleNode) {
|
||||
// create graph with a single node
|
||||
SymbolicFactorGraph symbolicGraph;
|
||||
symbolicGraph.push_factor(7);
|
||||
|
||||
Ordering actual = Ordering::Create(Ordering::METIS, symbolicGraph);
|
||||
Ordering expected = Ordering(list_of(7));
|
||||
EXPECT(assert_equal(expected, actual));
|
||||
}
|
||||
#endif
|
||||
/* ************************************************************************* */
|
||||
TEST(Ordering, Create) {
|
||||
|
||||
// create chain graph
|
||||
|
|
Loading…
Reference in New Issue