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
|
#ifdef GTSAM_SUPPORT_NESTED_DISSECTION
|
||||||
gttic(Ordering_METIS);
|
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> xadj = met.xadj();
|
||||||
vector<idx_t> adj = met.adj();
|
vector<idx_t> adj = met.adj();
|
||||||
vector<idx_t> perm, iperm;
|
vector<idx_t> perm, iperm;
|
||||||
|
|
||||||
idx_t size = met.nValues();
|
|
||||||
for (idx_t i = 0; i < size; i++) {
|
for (idx_t i = 0; i < size; i++) {
|
||||||
perm.push_back(0);
|
perm.push_back(0);
|
||||||
iperm.push_back(0);
|
iperm.push_back(0);
|
||||||
|
|
|
@ -191,7 +191,10 @@ public:
|
||||||
|
|
||||||
template<class FACTOR_GRAPH>
|
template<class FACTOR_GRAPH>
|
||||||
static Ordering Metis(const FACTOR_GRAPH& 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
|
#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) {
|
TEST(Ordering, Create) {
|
||||||
|
|
||||||
// create chain graph
|
// create chain graph
|
||||||
|
|
Loading…
Reference in New Issue