diff --git a/gtsam_unstable/partition/FindSeparator-inl.h b/gtsam_unstable/partition/FindSeparator-inl.h index 6eb39cfaa..dacbebc76 100644 --- a/gtsam_unstable/partition/FindSeparator-inl.h +++ b/gtsam_unstable/partition/FindSeparator-inl.h @@ -24,8 +24,6 @@ extern "C" { #include "FindSeparator.h" -using namespace std; - namespace gtsam { namespace partition { typedef boost::shared_array sharedInts; @@ -37,7 +35,7 @@ namespace gtsam { namespace partition { * whether node j is in the left part of the graph, the right part, or the * separator, respectively */ - pair separatorMetis(idx_t n, const sharedInts& xadj, + std::pair separatorMetis(idx_t n, const sharedInts& xadj, const sharedInts& adjncy, const sharedInts& adjwgt, bool verbose) { // control parameters @@ -72,7 +70,7 @@ namespace gtsam { namespace partition { printf("**********************************************************************\n"); } - return make_pair(sepsize, part_); + return std::make_pair(sepsize, part_); } /* ************************************************************************* */ @@ -112,7 +110,7 @@ namespace gtsam { namespace partition { // *edgecut = graph->mincut; // *sepsize = graph.pwgts[2]; icopy(*nvtxs, graph->where, part); - cout << "Finished bisection:" << *edgecut << endl; + std::cout << "Finished bisection:" << *edgecut << std::endl; FreeGraph(&graph); FreeCtrl(&ctrl); @@ -124,7 +122,7 @@ namespace gtsam { namespace partition { * Part [j] is 0 or 1, depending on * whether node j is in the left part of the graph or the right part respectively */ - pair edgeMetis(idx_t n, const sharedInts& xadj, const sharedInts& adjncy, + std::pair edgeMetis(idx_t n, const sharedInts& xadj, const sharedInts& adjncy, const sharedInts& adjwgt, bool verbose) { // control parameters @@ -163,7 +161,7 @@ namespace gtsam { namespace partition { printf("**********************************************************************\n"); } - return make_pair(edgecut, part_); + return std::make_pair(edgecut, part_); } /* ************************************************************************* */ @@ -173,13 +171,13 @@ namespace gtsam { namespace partition { * adjncy always has the size equal to two times of the no. of the edges in the Metis graph */ template - void prepareMetisGraph(const GenericGraph& graph, const vector& keys, WorkSpace& workspace, + void prepareMetisGraph(const GenericGraph& graph, const std::vector& keys, WorkSpace& workspace, sharedInts* ptr_xadj, sharedInts* ptr_adjncy, sharedInts* ptr_adjwgt) { typedef int Weight; - typedef vector Weights; - typedef vector Neighbors; - typedef pair NeighborsInfo; + typedef std::vector Weights; + typedef std::vector Neighbors; + typedef std::pair NeighborsInfo; // set up dictionary std::vector& dictionary = workspace.dictionary; @@ -188,27 +186,27 @@ namespace gtsam { namespace partition { // prepare for {adjacencyMap}, a pair of neighbor indices and the correponding edge weights int numNodes = keys.size(); int numEdges = 0; - vector adjacencyMap; + std::vector adjacencyMap; adjacencyMap.resize(numNodes); - cout << "Number of nodes: " << adjacencyMap.size() << endl; + std::cout << "Number of nodes: " << adjacencyMap.size() << std::endl; int index1, index2; BOOST_FOREACH(const typename GenericGraph::value_type& factor, graph){ index1 = dictionary[factor->key1.index]; index2 = dictionary[factor->key2.index]; - cout << "index1: " << index1 << endl; - cout << "index2: " << index2 << endl; + std::cout << "index1: " << index1 << std::endl; + std::cout << "index2: " << index2 << std::endl; // if both nodes are in the current graph, i.e. not a joint factor between frontal and separator if (index1 >= 0 && index2 >= 0) { - pair& adjacencyMap1 = adjacencyMap[index1]; - pair& adjacencyMap2 = adjacencyMap[index2]; + std::pair& adjacencyMap1 = adjacencyMap[index1]; + std::pair& adjacencyMap2 = adjacencyMap[index2]; try{ adjacencyMap1.first.push_back(index2); adjacencyMap1.second.push_back(factor->weight); adjacencyMap2.first.push_back(index1); adjacencyMap2.second.push_back(factor->weight); }catch(std::exception& e){ - cout << e.what() << endl; + std::cout << e.what() << std::endl; } numEdges++; } @@ -237,11 +235,11 @@ namespace gtsam { namespace partition { /* ************************************************************************* */ template boost::optional separatorPartitionByMetis(const GenericGraph& graph, - const vector& keys, WorkSpace& workspace, bool verbose) { + const std::vector& keys, WorkSpace& workspace, bool verbose) { // create a metis graph size_t numKeys = keys.size(); if (verbose) - cout << graph.size() << " factors,\t" << numKeys << " nodes;\t" << endl; + std::cout << graph.size() << " factors,\t" << numKeys << " nodes;\t" << std::endl; sharedInts xadj, adjncy, adjwgt; @@ -260,29 +258,29 @@ namespace gtsam { namespace partition { result.A.reserve(numKeys - sepsize); result.B.reserve(numKeys - sepsize); int* ptr_part = part.get(); - vector::const_iterator itKey = keys.begin(); - vector::const_iterator itKeyLast = keys.end(); + std::vector::const_iterator itKey = keys.begin(); + std::vector::const_iterator itKeyLast = keys.end(); while(itKey != itKeyLast) { switch(*(ptr_part++)) { case 0: result.A.push_back(*(itKey++)); break; case 1: result.B.push_back(*(itKey++)); break; case 2: result.C.push_back(*(itKey++)); break; - default: throw runtime_error("separatorPartitionByMetis: invalid results from Metis ND!"); + default: throw std::runtime_error("separatorPartitionByMetis: invalid results from Metis ND!"); } } if (verbose) { - cout << "total key: " << keys.size() + std::cout << "total key: " << keys.size() << " result(A,B,C) = " << result.A.size() << ", " << result.B.size() << ", " - << result.C.size() << "; sepsize from Metis = " << sepsize << endl; + << result.C.size() << "; sepsize from Metis = " << sepsize << std::endl; //throw runtime_error("separatorPartitionByMetis:stop for debug"); } if(result.C.size() != sepsize) { - cout << "total key: " << keys.size() + std::cout << "total key: " << keys.size() << " result(A,B,C) = " << result.A.size() << ", " << result.B.size() << ", " << result.C.size() - << "; sepsize from Metis = " << sepsize << endl; - throw runtime_error("separatorPartitionByMetis: invalid sepsize from Metis ND!"); + << "; sepsize from Metis = " << sepsize << std::endl; + throw std::runtime_error("separatorPartitionByMetis: invalid sepsize from Metis ND!"); } return boost::make_optional(result); @@ -291,7 +289,7 @@ namespace gtsam { namespace partition { /* *************************************************************************/ template boost::optional edgePartitionByMetis(const GenericGraph& graph, - const vector& keys, WorkSpace& workspace, bool verbose) { + const std::vector& keys, WorkSpace& workspace, bool verbose) { // a small hack for handling the camera1-camera2 case used in the unit tests if (graph.size() == 1 && keys.size() == 2) { @@ -303,7 +301,7 @@ namespace gtsam { namespace partition { // create a metis graph size_t numKeys = keys.size(); - if (verbose) cout << graph.size() << " factors,\t" << numKeys << " nodes;\t" << endl; + if (verbose) std::cout << graph.size() << " factors,\t" << numKeys << " nodes;\t" << std::endl; sharedInts xadj, adjncy, adjwgt; prepareMetisGraph(graph, keys, workspace, &xadj, &adjncy, &adjwgt); @@ -317,35 +315,35 @@ namespace gtsam { namespace partition { result.A.reserve(numKeys); result.B.reserve(numKeys); int* ptr_part = part.get(); - vector::const_iterator itKey = keys.begin(); - vector::const_iterator itKeyLast = keys.end(); + std::vector::const_iterator itKey = keys.begin(); + std::vector::const_iterator itKeyLast = keys.end(); while(itKey != itKeyLast) { if (*ptr_part != 0 && *ptr_part != 1) - cout << *ptr_part << "!!!" << endl; + std::cout << *ptr_part << "!!!" << std::endl; switch(*(ptr_part++)) { case 0: result.A.push_back(*(itKey++)); break; case 1: result.B.push_back(*(itKey++)); break; - default: throw runtime_error("edgePartitionByMetis: invalid results from Metis ND!"); + default: throw std::runtime_error("edgePartitionByMetis: invalid results from Metis ND!"); } } if (verbose) { - cout << "the size of two submaps in the reduced graph: " << result.A.size() - << " " << result.B.size() << endl; + std::cout << "the size of two submaps in the reduced graph: " << result.A.size() + << " " << result.B.size() << std::endl; int edgeCut = 0; BOOST_FOREACH(const typename GenericGraph::value_type& factor, graph){ int key1 = factor->key1.index; int key2 = factor->key2.index; // print keys and their subgraph assignment - cout << key1; - if (std::find(result.A.begin(), result.A.end(), key1) != result.A.end()) cout <<"A "; - if (std::find(result.B.begin(), result.B.end(), key1) != result.B.end()) cout <<"B "; + std::cout << key1; + if (std::find(result.A.begin(), result.A.end(), key1) != result.A.end()) std::cout <<"A "; + if (std::find(result.B.begin(), result.B.end(), key1) != result.B.end()) std::cout <<"B "; - cout << key2; - if (std::find(result.A.begin(), result.A.end(), key2) != result.A.end()) cout <<"A "; - if (std::find(result.B.begin(), result.B.end(), key2) != result.B.end()) cout <<"B "; - cout << "weight " << factor->weight;; + std::cout << key2; + if (std::find(result.A.begin(), result.A.end(), key2) != result.A.end()) std::cout <<"A "; + if (std::find(result.B.begin(), result.B.end(), key2) != result.B.end()) std::cout <<"B "; + std::cout << "weight " << factor->weight;; // find vertices that were assigned to sets A & B. Their edge will be cut if ((std::find(result.A.begin(), result.A.end(), key1) != result.A.end() && @@ -353,48 +351,48 @@ namespace gtsam { namespace partition { (std::find(result.B.begin(), result.B.end(), key1) != result.B.end() && std::find(result.A.begin(), result.A.end(), key2) != result.A.end())){ edgeCut ++; - cout << " CUT "; + std::cout << " CUT "; } - cout << endl; + std::cout << std::endl; } - cout << "edgeCut: " << edgeCut << endl; + std::cout << "edgeCut: " << edgeCut << std::endl; } return boost::make_optional(result); } /* ************************************************************************* */ - bool isLargerIsland(const vector& island1, const vector& island2) { + bool isLargerIsland(const std::vector& island1, const std::vector& island2) { return island1.size() > island2.size(); } /* ************************************************************************* */ // debug functions - void printIsland(const vector& island) { - cout << "island: "; + void printIsland(const std::vector& island) { + std::cout << "island: "; BOOST_FOREACH(const size_t key, island) - cout << key << " "; - cout << endl; + std::cout << key << " "; + std::cout << std::endl; } - void printIslands(const list >& islands) { - BOOST_FOREACH(const vector& island, islands) + void printIslands(const std::list >& islands) { + BOOST_FOREACH(const std::vector& island, islands) printIsland(island); } - void printNumCamerasLandmarks(const vector& keys, const vector& int2symbol) { + void printNumCamerasLandmarks(const std::vector& keys, const std::vector& int2symbol) { int numCamera = 0, numLandmark = 0; BOOST_FOREACH(const size_t key, keys) if (int2symbol[key].chr() == 'x') numCamera++; else numLandmark++; - cout << "numCamera: " << numCamera << " numLandmark: " << numLandmark << endl; + std::cout << "numCamera: " << numCamera << " numLandmark: " << numLandmark << std::endl; } /* ************************************************************************* */ template - void addLandmarkToPartitionResult(const GenericGraph& graph, const vector& landmarkKeys, + void addLandmarkToPartitionResult(const GenericGraph& graph, const std::vector& landmarkKeys, MetisResult& partitionResult, WorkSpace& workspace) { // set up cameras in the dictionary @@ -408,7 +406,7 @@ namespace gtsam { namespace partition { BOOST_FOREACH(const size_t b, B) dictionary[b] = 2; if (!C.empty()) - throw runtime_error("addLandmarkToPartitionResult: C is not empty"); + throw std::runtime_error("addLandmarkToPartitionResult: C is not empty"); // set up landmarks size_t i,j; @@ -424,7 +422,7 @@ namespace gtsam { namespace partition { dictionary[j] = 0; } // if (j == 67980) -// cout << "dictionary[67980]" << dictionary[j] << endl; +// std::cout << "dictionary[67980]" << dictionary[j] << std::endl; } BOOST_FOREACH(const size_t j, landmarkKeys) { @@ -432,8 +430,8 @@ namespace gtsam { namespace partition { case 0: C.push_back(j); break; case 1: A.push_back(j); break; case 2: B.push_back(j); break; - default: cout << j << ": " << dictionary[j] << endl; - throw runtime_error("addLandmarkToPartitionResult: wrong status for landmark"); + default: std::cout << j << ": " << dictionary[j] << std::endl; + throw std::runtime_error("addLandmarkToPartitionResult: wrong status for landmark"); } } } @@ -442,13 +440,13 @@ namespace gtsam { namespace partition { /* ************************************************************************* */ template - boost::optional findPartitoning(const GenericGraph& graph, const vector& keys, + boost::optional findPartitoning(const GenericGraph& graph, const std::vector& keys, WorkSpace& workspace, bool verbose, - const boost::optional >& int2symbol, const bool reduceGraph) { + const boost::optional >& int2symbol, const bool reduceGraph) { boost::optional result; GenericGraph reducedGraph; - vector keyToPartition; - vector cameraKeys, landmarkKeys; + std::vector keyToPartition; + std::vector cameraKeys, landmarkKeys; if (reduceGraph) { if (!int2symbol.is_initialized()) throw std::invalid_argument("findSeparator: int2symbol must be valid!"); @@ -467,20 +465,20 @@ namespace gtsam { namespace partition { workspace.prepareDictionary(keyToPartition); const std::vector& dictionary = workspace.dictionary; reduceGenericGraph(graph, cameraKeys, landmarkKeys, dictionary, reducedGraph); - cout << "original graph: V" << keys.size() << ", E" << graph.size() - << " --> reduced graph: V" << cameraKeys.size() << ", E" << reducedGraph.size() << endl; + std::cout << "original graph: V" << keys.size() << ", E" << graph.size() + << " --> reduced graph: V" << cameraKeys.size() << ", E" << reducedGraph.size() << std::endl; result = edgePartitionByMetis(reducedGraph, keyToPartition, workspace, verbose); } else // call Metis to partition the graph to A, B, C result = separatorPartitionByMetis(graph, keys, workspace, verbose); if (!result.is_initialized()) { - cout << "metis failed!" << endl; + std::cout << "metis failed!" << std::endl; return 0; } if (reduceGraph) { addLandmarkToPartitionResult(graph, landmarkKeys, *result, workspace); - cout << "the separator size: " << result->C.size() << " landmarks" << endl; + std::cout << "the separator size: " << result->C.size() << " landmarks" << std::endl; } return result; @@ -488,22 +486,22 @@ namespace gtsam { namespace partition { /* ************************************************************************* */ template - int findSeparator(const GenericGraph& graph, const vector& keys, + int findSeparator(const GenericGraph& graph, const std::vector& keys, const int minNodesPerMap, WorkSpace& workspace, bool verbose, - const boost::optional >& int2symbol, const bool reduceGraph, + const boost::optional >& int2symbol, const bool reduceGraph, const int minNrConstraintsPerCamera, const int minNrConstraintsPerLandmark) { boost::optional result = findPartitoning(graph, keys, workspace, verbose, int2symbol, reduceGraph); // find the island in A and B, and make them separated submaps - typedef vector Island; - list islands; + typedef std::vector Island; + std::list islands; - list islands_in_A = findIslands(graph, result->A, workspace, + std::list islands_in_A = findIslands(graph, result->A, workspace, minNrConstraintsPerCamera, minNrConstraintsPerLandmark); - list islands_in_B = findIslands(graph, result->B, workspace, + std::list islands_in_B = findIslands(graph, result->B, workspace, minNrConstraintsPerCamera, minNrConstraintsPerLandmark); islands.insert(islands.end(), islands_in_A.begin(), islands_in_A.end()); @@ -514,13 +512,13 @@ namespace gtsam { namespace partition { #ifdef NDEBUG // verbose = true; // if (!int2symbol) throw std::invalid_argument("findSeparator: int2symbol is not set!"); -// cout << "sep size: " << result->C.size() << "; "; +// std::cout << "sep size: " << result->C.size() << "; "; // printNumCamerasLandmarks(result->C, *int2symbol); -// cout << "no. of island: " << islands.size() << "; "; -// cout << "island size: "; +// std::cout << "no. of island: " << islands.size() << "; "; +// std::cout << "island size: "; // BOOST_FOREACH(const Island& island, islands) -// cout << island.size() << " "; -// cout << endl; +// std::cout << island.size() << " "; +// std::cout << std::endl; // BOOST_FOREACH(const Island& island, islands) { // printNumCamerasLandmarks(island, int2symbol); @@ -531,20 +529,20 @@ namespace gtsam { namespace partition { size_t oldSize = islands.size(); while(true) { if (islands.size() < 2) { - cout << "numIsland: " << numIsland0 << endl; - throw runtime_error("findSeparator: found fewer than 2 submaps!"); + std::cout << "numIsland: " << numIsland0 << std::endl; + throw std::runtime_error("findSeparator: found fewer than 2 submaps!"); } - list::reference island = islands.back(); + std::list::reference island = islands.back(); if ((int)island.size() >= minNodesPerMap) break; result->C.insert(result->C.end(), island.begin(), island.end()); islands.pop_back(); } if (islands.size() != oldSize){ - if (verbose) cout << oldSize << "-" << oldSize - islands.size() << " submap(s);\t" << endl; + if (verbose) std::cout << oldSize << "-" << oldSize - islands.size() << " submap(s);\t" << std::endl; } else{ - if (verbose) cout << oldSize << " submap(s);\t" << endl; + if (verbose) std::cout << oldSize << " submap(s);\t" << std::endl; } // generate the node map diff --git a/gtsam_unstable/partition/NestedDissection-inl.h b/gtsam_unstable/partition/NestedDissection-inl.h index e8f3fa34a..d6dafce49 100644 --- a/gtsam_unstable/partition/NestedDissection-inl.h +++ b/gtsam_unstable/partition/NestedDissection-inl.h @@ -14,8 +14,6 @@ #include "OrderedSymbols.h" #include "NestedDissection.h" -using namespace std; - namespace gtsam { namespace partition { /* ************************************************************************* */