Files
ConformalLabpp/doc/roadmap/phases.md
Tarik Moussa 88a99d8bd1
All checks were successful
C++ Tests / test-fast (push) Successful in 1m59s
C++ Tests / test-cgal (push) Has been skipped
fix: correct 16 inconsistencies found by consistency audit
Math / code:
- layout.hpp: add explanatory comment for Möbius deck transformation
  (from_three with z1=w1, z2=w2 encodes T fixing cut-edge endpoints)
- layout.hpp: document spherical holonomy limitation — Vector2d stores
  only (x,y) of 3-D position diff; full SO(3) representation deferred

Gradient sign convention (CLAUDE.md was wrong):
- Euclidean and Spherical both use G_v = Θ_v − actual (target minus actual)
- HyperIdeal uses G_v = actual − Θ_v
- Hessian sign differs: Euclidean PSD, Spherical NSD → −H, HyperIdeal PSD

Test counts (were inconsistent across all files):
- Actual: 176 CGAL tests, 2 GTEST_SKIP (not 173/170/174, not 1 skip)
- The 2 skips are EuclideanFunctional + SphericalFunctional Hessian gradient
  checks (Java @Ignore ports) — not HyperIdeal Hessian as previously stated
- doc/api/tests.md: add missing SmokeEuclidean suite (3 tests),
  EuclideanLayout (2), SphericalLayout (1), fix GaussBonnet 8→12,
  MeshIO 9→6, Layout 8→6, EuclideanFunctional 11→12,
  HomologyGenerators no longer a GTEST_SKIP stub (live test on brezel2.obj)
- doc/roadmap/phases.md: Phase 7 cumulative 158→176 tests
- doc/roadmap/phases.md: Phase 3 clarified — HyperIdeal Hessian is FD
- CLAUDE.md: suite count 28→34, test ref 173+36→174+36
- scripts/try_it.sh: expected output 173/1 skipped → 174/2 skipped

CI table (CLAUDE.md):
- test-cgal now triggers on pull requests only (not main/dev pushes)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 23:24:44 +02:00

7.6 KiB
Raw Blame History

Development Roadmap

Legend: complete · 🔲 planned

Porting / research boundary:
Phases 17 are direct ports of the Java original and its dissertation.
From Phase 8 onwards the work goes beyond the scope of the Java library.
Phase 8 (CGAL package) is infrastructure. Phase 9 is porting of remaining Java features.
Phase 10+ is independent research with no direct Java reference implementation.


◼ Porting complete — Phases 17

Phase 1   Clausen / Lobachevsky / ImLi₂ special functions            ✅
Phase 2   Hyper-ideal geometry  (ζ, lᵢⱼ, αᵢⱼ, σᵢ, σᵢⱼ)             ✅
Phase 3   CGAL Surface_mesh infrastructure + all three functionals
          (Euclidean, Spherical, HyperIdeal)
          + analytical Hessians for Euclidean + Spherical
          (HyperIdeal Hessian: symmetric FD — analytic deferred to 9b) ✅
Phase 4   Newton solver (SimplicialLDLT + SparseQR fallback)
          + Mesh I/O (OFF/OBJ/PLY) + example programs                ✅   68 tests
Phase 5   Priority-BFS layout + CLI app + JSON/XML serialisation      ✅   95 tests
Phase 6   GaussBonnet check/enforce, tree-cotree cut graph (2g),
          exact hyperbolic trilateration, layout normalisation        ✅  121 tests
Phase 7   MobiusMap, halfedge_uv, Möbius holonomy (SU(1,1)),
          period matrix τ∈ℍ + SL(2,) reduction,
          fundamental domain parallelogram + tiling                  ✅  176 tests

◼ Infrastructure — Phase 8: CGAL Package

Goal: conformallab++ as a standalone CGAL package, submission-ready, fulfilling all CGAL package conventions with a traits-class design compatible with any CGAL-conforming mesh type.

8a   Traits class & concepts
       → include/CGAL/Conformal_map_traits.h
       Separates MeshType, KernelType, ScalarType from the algorithm.
       Enables use with any CGAL-compatible mesh, not just Surface_mesh.
       → Concept checks via static_assert / CGAL_concept_check

8b   Public CGAL header hierarchy
       → include/CGAL/Discrete_conformal_map.h     (user-facing entry header)
       → include/CGAL/Conformal_newton_solver.h
       → include/CGAL/Conformal_layout.h
       → include/CGAL/Conformal_cut_graph.h
       All existing include/conformallab/*.hpp remain as implementation details.

8c   CGAL-style documentation
       → doc/Conformal_map/PackageDescription.txt
       → doc/Conformal_map/fig/                    (pipeline diagrams)
       → Doxygen comments on all public concepts and functions
       → User_manual.md + Reference_manual.md

8d   CGAL test format
       → test/Conformal_map/CMakeLists.txt         (CGAL-style CMake)
       Existing GTest tests remain; CGAL-format tests are added alongside.

8e   Declarative YAML pipeline
       → Lightweight YAML format for reproducible experiments
         (specification in doc/api/cgal-package.md)
       → Validator: checks require/provide tokens before execution
       → CLI integration: conformallab_core --pipeline experiment.yml

◼ Remaining porting — Phase 9

Java features from de.varylab.discreteconformal not yet in C++:

9a   Inversive-distance functional (Luo 2004 / BowersStephenson)
       → inversive_distance_functional.hpp
       Follows the exact same pattern as the three existing functionals.
       → newton_inversive_distance()
       → New test suite: test_inversive_distance.cpp

9b   Analytic HyperIdeal Hessian
       → Replace FD Hessian in hyper_ideal_hessian.hpp
       Direct differentiation through the chain:
         (bᵢ, aₑ) → lᵢⱼ → ζ₁₃/ζ₁₄/ζ₁₅ → αᵢⱼ / βᵢ
       Relevant for meshes > 500 DOFs (current FD Hessian is slow there).

9c   4g-polygon boundary walk (genus g > 1)
       → Extend compute_fundamental_domain() beyond genus 1
       Algorithm outline already in fundamental_domain.hpp as TODO(Phase 9).
       Java reference: FundamentalDomainUtility.java

◼ Optional / Hypothetical — geometry-central Cross-Comparison

Status: keine geplante Phase — rein explorativ.
Diese Punkte sind keine Voraussetzung für Phase 810. Sie sind interessant, weil geometry-central (Keenan Crane, CMU) auf denselben mathematischen Grundlagen wie conformallab++ aufbaut — insbesondere auf Springborn 2020 und der direkten Weiterentwicklung durch Gillespie, Springborn & Crane (SIGGRAPH 2021).
Der entscheidende Unterschied: geometry-central löst dasselbe Problem (diskrete konforme Äquivalenz) mit intrinsischen Triangulierungen + Ptolemäischen Flips, während conformallab++ Newton auf der Original-Triangulierung anwendet.

GC-1  [optional, jetzt möglich]
      Mathematischer Output-Vergleich
        → gleiche Testnetze (cathead.obj, brezel.obj, torus_4x4.off) in
          beide Bibliotheken laden
        → UV-Koordinaten, u-Vektor, Residualnorm vergleichen
        → Normalisierungskonventionen abgleichen (u-Mittelwert, Skalierung)
      Ziel: unabhängige Kreuz-Validierung der Konvergenzpunkte.
      Aufwand: kleines Python/C++ Vergleichsskript, kein Bibliotheks-Umbau.

GC-2  [optional, sinnvoll nach Phase 8]
      Intrinsic Delaunay Pre-Conditioning
        → Vor dem Newton-Solver: geometry-central SignpostIntrinsicTriangulation
          auf die Eingabe anwenden
        → Ptolemäische Flips konditionieren die Hessian-Matrix vor
        → Hypothese: weniger Newton-Iterationen auf nicht-Delaunay-Eingaben
        → Implementierbar als optionaler cmake-Flag: -DWITH_GC_PRECOND=ON
      Abhängigkeit: geometry-central als optionale externe Abhängigkeit
      (header-only Teile genügen für den Flip-Algorithmus).

GC-3  [hypothetisch, Phase 10+ Forschung]
      Ptolemäische Flip-basierter Solver als alternativer Backend
        → Statt Newton: Ptolemäische Flips + penultimate-step Normalisierung
          (GillespieSpringbornCrane 2021 Algorithmus)
        → Vergleich: Konvergenzradius, Robustheit auf pathologischen Netzen,
          numerische Stabilität auf hohen Genus-Flächen
        → Für conformallab++ interessant, weil der Newton-Ansatz auf
          stark nicht-Delaunay Netzen (z.B. nach Remeshing) instabil
          werden kann.
      Keine Implementierung geplant — Konzeptnotiz für Phase 10-Forschung.

Verbindung zur Literatur:
Das Springborn 2020-Papier ("Ideal Hyperbolic Polyhedra and Discrete Uniformization") ist in conformallab++ als HyperIdeal-Geometriemodus bereits implementiert (Phase 2/3). Die GillespieSpringbornCrane 2021-Erweiterung — die geometry-central implementiert — ergänzt dies um intrinsische Triangulierungen und macht den Algorithmus robust gegen schlechte Eingangs-Triangulierungen. Beide teilen denselben mathematischen Kern (diskrete konforme Äquivalenz, GaussBonnet, Variationsprinzip von BobenkoSpringborn 2004).


◼ New research — Phase 10+

No direct Java reference implementation exists for these items.

Phase 10   Global uniformization for genus g ≥ 2

10a  Discrete holomorphic differentials
       Integrate basis 1-forms ωᵢ along b-cycles of the cut graph.
       Mathematical basis: BobenkoSpringborn (2004), §6.
       Java partial reference: DiscreteHolomorphicFormUtility.java

10b  Siegel period matrix Ω ∈ H_g  (g×g complex symmetric, Im(Ω) > 0)
       Ωᵢⱼ = ∫_{bⱼ} ωᵢ
       Reduction to Siegel fundamental domain via Sp(2g,).
       Requires: 10a

10c  Full uniformization for genus g ≥ 2
       Embedding as H²/Γ with Γ ⊂ PSL(2,) a Fuchsian group.
       Requires: 10a + 10b + stable cut graph for g ≥ 2 (Phase 9c)