-
Notifications
You must be signed in to change notification settings - Fork 0
Home
This project completes pgRouting's planar graph pipeline by implementing two missing Boost Graph Library algorithms: pgr_makeBiconnectedPlanar and pgr_makeMaximalPlanar.
Together with the existing pgr_makeConnected, these form a complete pipeline:
pgr_makeConnected → pgr_makeBiconnectedPlanar → pgr_makeMaximalPlanar
This pipeline unlocks downstream Boost layout algorithms (chrobak_payne_straight_line_drawing, planar_canonical_ordering) that are currently inaccessible to pgRouting users.
pgRouting already provides pgr_makeConnected, pgr_isPlanar / pgr_boyerMyrvold, and pgr_bipartite. Two concrete gaps remain: no function to eliminate articulation points while preserving planarity, and no triangulation of biconnected planar graphs — leaving chrobak_payne_drawing and straight_line_drawing completely inaccessible.
Proposed:
- Implementation of
pgr_makeBiconnectedPlanar() - Implementation of
pgr_makeMaximalPlanar() - Code with clear comments following pgRouting style guides
- User documentation (RST format) for each new function
- pgTap test cases for all functions
- Weekly wiki progress reports
- Detailed reports for midterm and final evaluations
Delivered: Link to PR or to Tag based on the final status
| Title | GitHub Handle | Name |
|---|---|---|
| 1st Mentor | @cvvergara | Vicky Vergara |
| 2nd Mentor | @robe2 | Regina Obe |
| Student Developer | @Mohit242-bit | Mohit Rawat |
Note: in reverse order: the most recent is first
week 12
Dates: (August 10 - August 16)
Proposed: Final polish - clean up all code, squash commits, format documentation, write final blog post / GSoC wiki summary, prepare final report.
Plan for the week:
- Clean up all code and squash commits
- Finalize all RST documentation
- Write final GSoC wiki summary
- Prepare and submit final evaluation report
Report:
- Code cleanup and commit squashing complete
- All documentation finalized
- Final wiki summary written
- Final report submitted
week 11
Dates: (August 3 - August 9)
Proposed: Additional integration testing and performance benchmarking on OSM datasets (>1M edges). Address any remaining mentor feedback from Phase 2.
Plan for the week:
- Run full pipeline integration tests on large OSM datasets
- Performance benchmarking on large real-world networks
- Address any remaining mentor feedback
- Begin drafting final report
Report:
- Integration tests on large OSM datasets complete
- Performance benchmarking done
- Mentor feedback addressed
- Final report draft started
week 10
Dates: (July 27 - August 2)
Proposed:
Pipeline Integration & Deliverable - fix any cross-function ID mapping issues. Deliverable: working pgr_makeMaximalPlanar with full tests and docs. Address mentor feedback from Phase 2 midterm review.
Plan for the week:
- Fix any cross-function ID mapping issues
- Confirm
pgr_makeMaximalPlanaris at merged quality - Full pipeline integration test:
makeConnected -> makeBiconnectedPlanar -> makeMaximalPlanar - Address mentor feedback from Phase 2 review
Report:
- Cross-function ID mapping issues fixed
-
pgr_makeMaximalPlanarat merged quality - Full pipeline end-to-end integration test passing
- Mentor feedback addressed
week 9
Dates: (July 20 - July 26)
Proposed:
Phase 2: Documentation & Idempotency - complete RST docs and docqueries for pgr_makeMaximalPlanar. Verify idempotency (re-run returns empty, pgr_isPlanar still true). Full pipeline integration test.
Plan for the week:
- Complete RST documentation for
pgr_makeMaximalPlanar - Write and verify docquery examples
- Verify idempotency: re-running on augmented graph returns 0 rows
- Verify
pgr_isPlanarreturns true after adding returned edges
Report:
- RST documentation for
pgr_makeMaximalPlanarcomplete - Docquery examples written and verified
- Idempotency verified (re-run returns 0 rows)
- Planarity preserved after augmentation confirmed
week 8
Dates: (July 13 - July 19)
Proposed:
Phase 2: Testing - write comprehensive pgTap tests for pgr_makeMaximalPlanar. Verify E = 3V-6 on all test graphs. Verify no parallel edges or self-loops introduced.
Plan for the week:
- Write pgTap
edge_cases.pg: K3 (already maximal), C4 square (adds 2 diagonals), wheel graph W5, K5 (non-planar -> error) - Write
inner_query.pg,no_crash_test.pg,types_check.pg - Verify E = 3V-6 post-augmentation on all test graphs
- Verify no parallel edges or self-loops introduced
Report:
- pgTap
edge_cases.pgcomplete - pgTap
inner_query.pgcomplete - pgTap
no_crash_test.pgcomplete - pgTap
types_check.pgcomplete - E = 3V-6 verified on all test graphs
week 7
Dates: (July 6 - July 12)
Proposed:
Phase 2: Core Logic & Edge Cases - handle all error conditions for pgr_makeMaximalPlanar. Handle already-maximal-planar case (empty return). Verify E = 3V-6.
Plan for the week:
- Handle error conditions: not-biconnected input, not-planar input, fewer than 3 vertices
- Handle already-maximal-planar case (all faces triangles -> empty return)
- Verify E = 3V-6 holds on all test graphs
Report:
- Error conditions handled: not-biconnected, not-planar, < 3 vertices
- Already-maximal-planar returns empty set correctly
- E = 3V-6 verified on all test graphs
week 6
Dates: (June 29 - July 5)
Proposed:
Phase 2: pgr_makeMaximalPlanar begins - implement triangulation_visitor with timestamp trick for O(1) neighbor marking. Connect to planar_face_traversal. Get basic triangulation working on C4 -> K4 (adds 2 diagonals).
Plan for the week:
- Implement
triangulation_visitorwith timestamp trick for O(1) neighbor marking - Connect to
planar_face_traversal - Get basic triangulation working on C4 -> K4 (adds 2 diagonals, E = 6)
- Midterm evaluation:
pgr_makeBiconnectedPlanarat merged quality;pgr_makeMaximalPlanarbasic triangulation passing
Report:
-
triangulation_visitorimplemented with timestamp trick - Connected to
planar_face_traversal - C4 -> K4 triangulation working (adds 2 diagonals)
- Midterm deliverables submitted
week 5
Dates: (June 22 - June 28)
Proposed:
Phase 1 -> Phase 2 Transition - address mentor feedback from Week 4. Create Phase 2 file scaffolding (src/planar/makeMaximalPlanar.*). Study triangulation_visitor source and end_face() phases 1-6 in detail.
Plan for the week:
- Address all mentor feedback from Week 4
- Create Phase 2 file scaffolding:
makeMaximalPlanar.hpp, driver files, SQL files - Study
triangulation_visitorandend_face()logic in detail - Update CMakeLists.txt for Phase 2 files
Report:
- All Phase 1 mentor feedback addressed
- Phase 2 file scaffolding created
-
triangulation_visitorandend_face()studied - CMakeLists.txt updated for Phase 2
week 4
Dates: (June 15 - June 21)
Proposed:
Phase 1: Documentation & Delivery - complete RST documentation, write docquery examples, verify idempotency. Deliverable: working pgr_makeBiconnectedPlanar with full tests and docs.
Plan for the week:
- Complete RST documentation for
pgr_makeBiconnectedPlanar - Write and verify docquery examples
- Verify idempotency: re-run returns 0 rows;
pgr_isPlanarreturns true after augmentation - Submit Phase 1 deliverable for mentor review
Report:
- RST documentation complete
- Docquery examples written and verified
- Idempotency verified
- Phase 1 deliverable submitted for mentor review
week 3
Dates: (June 8 - June 14)
Proposed: Phase 1: Edge Cases & Output Mapping - handle already-biconnected (empty return), not-connected error, not-planar error. Write comprehensive pgTap tests: path graphs P3/P4/P5, cycle graphs, tree graphs, disconnected input.
Plan for the week:
- Handle edge cases: already-biconnected (empty), not-connected (error), not-planar (error)
- Write pgTap
edge_cases.pg: path graphs P3/P4/P5, cycle graphs C4/C5, tree graphs, K5 (non-planar -> error) - Write
inner_query.pg,no_crash_test.pg,types_check.pg - Map Boost vertex descriptors -> pgRouting IDs correctly
Report:
- Edge cases handled: already-biconnected, not-connected, not-planar
- pgTap
edge_cases.pgcomplete - pgTap
inner_query.pgcomplete - pgTap
no_crash_test.pgcomplete - pgTap
types_check.pgcomplete
week 2
Dates: (June 1 - June 7)
Proposed:
Phase 1: Core Algorithm - connect EdgeIndexMap and embedding to boost::make_biconnected_planar. Implement pgr_collect_edges_visitor. Map Boost vertex descriptors back to pgRouting IDs. Get a working end-to-end function on the 7-vertex walkthrough graph.
Plan for the week:
- Connect
EdgeIndexMapand planar embedding toboost::make_biconnected_planar - Implement
pgr_collect_edges_visitor(records (u,v) pairs without mutating graph) - Map Boost vertex descriptors back to pgRouting IDs
- Get end-to-end working on 7-vertex walkthrough graph (adds edges (1,5) and (3,7))
Report:
-
EdgeIndexMapconnected toboost::make_biconnected_planar -
pgr_collect_edges_visitorimplemented - Vertex descriptor -> pgRouting ID mapping working
- End-to-end working on 7-vertex walkthrough graph
week 1
Dates: (May 25 - May 31)
Proposed:
Phase 1: pgr_makeBiconnectedPlanar begins - build and test EdgeIndexMap construction in isolation using BGL_FORALL_EDGES. Run boyer_myrvold_planarity_test with embedding storage enabled; verify embedding vector populates correctly on test graphs.
Plan for the week:
- Build and test
EdgeIndexMapconstruction usingBGL_FORALL_EDGESin isolation - Run
boyer_myrvold_planarity_testwith embedding storage enabled on test graphs - Verify embedding vector populates correctly on path, cycle, and tree graphs
- Create all 12 new files for Phase 1 file structure; update CMakeLists.txt
Report:
-
EdgeIndexMapconstruction built and tested in isolation -
boyer_myrvold_planarity_testwith embedding storage verified on test graphs - All Phase 1 file structure created
- CMakeLists.txt updated
Bonding period
Goal: arrive at Week 1 with pseudocode approved by mentors, test graphs designed, and a clear understanding of pgRouting architecture.
Proposed:
Pre-Coding Preparation - run standalone tests of boost::make_biconnected_planar on path/tree graphs and boost::make_maximal_planar on simple planar graphs (C4 -> K4). Share pseudocode of C++ wrapper classes with mentors for review. Design specific test graphs for docqueries.
Plan for the week:
- Run standalone tests of
boost::make_biconnected_planaron path/tree graphs - Run standalone tests of
boost::make_maximal_planaron simple planar graphs (C4 -> K4) - Write pseudocode for both C++ wrapper classes and share with mentors for review
- Design specific test graphs for docqueries and submit to mentors for approval
- Clarify with mentors: edge_index map construction, preferred error reporting, and embedding parameter approach
Report:
- Standalone tests of
boost::make_biconnected_planarrun - Standalone tests of
boost::make_maximal_planarrun - Pseudocode for both wrappers shared with mentors
- Test graphs designed and submitted for approval
- Mentor clarifications received
Proposed:
Deep Codebase Reading - read make_biconnected_planar.hpp and make_maximal_planar.hpp in full Boost source. Write a private walkthrough document for each file and share with mentors for feedback.
Plan for the week:
- Study
boyer_myrvold_planarity_testembedding generation - Experiment with Graphviz planar graph examples
- Research
planar_face_traversalvisitor workflow - Study pgRouting SQL -> C wrapper -> C++ driver -> Boost pipeline
- Revise implementation approach after architecture study
Report:
- Studied Graphviz planar examples
-
planar_face_traversalworkflow studied - pgRouting execution pipeline studied
- Researched implementation approach from scratch
Proposed: Environment and Community - introduce myself on pgrouting-dev and soc@osgeo mailing lists. Verify pgRouting builds from source with all planar tests passing. Set up wiki progress page.
Plan for the week:
- Introduce myself on pgrouting-dev and soc@osgeo mailing lists
- Verify pgRouting builds from source with all planar tests passing
- Set up wiki progress page at the pgRouting GSoC wiki
Report:
- Bonding period meeting
- Prepared Wiki (copied from proposal)
- Worked on edges problem (maximal planar and biconnected planar should return edges or not in the output)
Link to all the Pull Requests made in GSoC-pgRouting repository
| Pull Request | Description | Date | Status |
|---|---|---|---|
| TBD |
pgr_makeBiconnectedPlanar - Phase 1 implementation |
TBD | TBD |
| TBD |
pgr_makeMaximalPlanar - Phase 2 implementation |
TBD | TBD |
TBD
TBD
- Links:
(i) Code Documentation:
TBD
(ii) Tags:
TBD
(iii) Pull Requests:
TBD
(iv) Wiki Pages:
TBD
- Images:
TBD
- Media:
TBD