feat(euclidean): edge-DOF (cyclic) Hessian — block-FD + full analytic + Java cross-validation #29

Merged
user2595 merged 7 commits from docs/java-ignore-crossvalidation into main 2026-05-30 15:33:37 +00:00
Owner

Summary

External-reviewer analysis of the Java @Ignored tests → build-verified Tier-1 attempt surfaced a missing feature → implemented (block-FD then full analytic).

Implementation — edge-DOF (cyclic) Euclidean Hessian

  • euclidean_hessian_block_fd / _sym — per-face 6×6 block FD (locality lemma; mirrors hyper-ideal).
  • euclidean_hessian_analyticclosed-form cyclic Hessian:
    ∂α_i/∂s_i = ℓ_i²/4A, ∂α_i/∂s_j = ½cot α_i − ℓ_j²/4A (Σ_j=0), chained to (u,λ_e), sign-mapped to gradient outputs. Reuses euclidean_cot_weights. Satisfies novelty-statement §3.2 ("analytic Hessians, not finite difference").
  • newton_solver.hpp: newton_euclidean cyclic path uses the analytic Hessian; vertex-only path unchanged.

Tests (all GREEN — 244/244 cgal)

  • CyclicCircularEdge_CatHead_JavaXVal — full Java EuclideanCyclicConvergenceTest oracle: φ=π−0.1 on one circular edge → cyclic Newton → realised α_opp+α_opp = π−0.1 @1e-9.
  • CyclicCircularEdge_PhiEntersGradient_CatHead — solver-free φ-wiring (ΔG_e=−Δφ_e @1e-12).
  • CyclicHessian_BlockFD_MatchesGradientFD_Tetrahedron.
  • CyclicHessian_Analytic_MatchesBlockFD_Tetrahedron — analytic == block-FD (1e-6) == gradient-FD (1e-5), symmetric (1e-9).

Doc — doc/reviewer/java-ignore-crossvalidation.md

Full @Ignore analysis + effort-tiering + golden values. Tier-2 (Wente) finding: wente_torus02.obj is a QUAD mesh (cyclic-net uniformization); the C++ period-matrix pipeline is triangle-based → faithful bit-vs-Java τ needs a quad/cyclic pipeline (Phase 9f). Deferred; golden τ = ½+i√3/2 (hexagonal) recorded.

DOF note: only the single circular edge gets an edge DOF (Java's one circularHoleEdge); all-edge DOFs make λ_e redundant with u_i+u_j and stall Newton.

🤖 Generated with Claude Code

## Summary External-reviewer analysis of the Java `@Ignore`d tests → build-verified Tier-1 attempt surfaced a missing feature → **implemented** (block-FD then full analytic). ## Implementation — edge-DOF (cyclic) Euclidean Hessian - `euclidean_hessian_block_fd` / `_sym` — per-face 6×6 block FD (locality lemma; mirrors hyper-ideal). - `euclidean_hessian_analytic` — **closed-form** cyclic Hessian: `∂α_i/∂s_i = ℓ_i²/4A`, `∂α_i/∂s_j = ½cot α_i − ℓ_j²/4A` (Σ_j=0), chained to (u,λ_e), sign-mapped to gradient outputs. Reuses `euclidean_cot_weights`. Satisfies novelty-statement §3.2 ("analytic Hessians, not finite difference"). - `newton_solver.hpp`: `newton_euclidean` cyclic path uses the **analytic** Hessian; vertex-only path unchanged. ## Tests (all GREEN — 244/244 cgal) - ✅ `CyclicCircularEdge_CatHead_JavaXVal` — full Java `EuclideanCyclicConvergenceTest` oracle: φ=π−0.1 on one circular edge → cyclic Newton → realised `α_opp+α_opp = π−0.1` @1e-9. - ✅ `CyclicCircularEdge_PhiEntersGradient_CatHead` — solver-free φ-wiring (`ΔG_e=−Δφ_e` @1e-12). - ✅ `CyclicHessian_BlockFD_MatchesGradientFD_Tetrahedron`. - ✅ `CyclicHessian_Analytic_MatchesBlockFD_Tetrahedron` — analytic == block-FD (1e-6) == gradient-FD (1e-5), symmetric (1e-9). ## Doc — `doc/reviewer/java-ignore-crossvalidation.md` Full `@Ignore` analysis + effort-tiering + golden values. **Tier-2 (Wente) finding:** `wente_torus02.obj` is a QUAD mesh (cyclic-net uniformization); the C++ period-matrix pipeline is triangle-based → faithful bit-vs-Java τ needs a quad/cyclic pipeline (**Phase 9f**). Deferred; golden τ = ½+i√3/2 (hexagonal) recorded. > DOF note: only the single circular edge gets an edge DOF (Java's one `circularHoleEdge`); all-edge DOFs make λ_e redundant with u_i+u_j and stall Newton. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
user2595 added 1 commit 2026-05-29 21:38:56 +00:00
docs(reviewer): cross-validation analysis of Java @Ignore tests
All checks were successful
C++ Tests / test-fast (pull_request) Successful in 1m58s
API Docs / doc-build (pull_request) Successful in 57s
Markdown link check / check (pull_request) Successful in 51s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Successful in 2m25s
42638bef3e
Classifies the 22 Java @Ignore'd test files by root cause (ARM64 PETSc
native lib vs logic/known-issue) and by cross-validation value for the
C++ port.

- Notes what PR #27 already locks (math cores + functional-eval oracles)
  to avoid duplication.
- Priority ranking: HIGH (HyperIdeal Lawson convergence golden vector —
  records the exact u*), MEDIUM (genus-1 Wente uniformization, branch-point
  variant), LATER (genus-2/hyperelliptic/Mobius/quasi-isothermic/Schottky),
  NON-ORACLE (Java gaps: testHessian, testDoLayout; ARM64-flaky known issues).
- Documents why the Lawson mesh needs a low-level half-edge generator
  (4 vertices / 12 edges => multi-edges; CGAL add_face cannot build it).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
user2595 added 1 commit 2026-05-29 21:55:20 +00:00
test(euclidean): Tier-1 circular-edge φ cross-validation + cyclic-solve blocker
All checks were successful
C++ Tests / test-fast (pull_request) Successful in 1m59s
API Docs / doc-build (pull_request) Successful in 1m2s
Markdown link check / check (pull_request) Successful in 53s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Successful in 2m7s
27ac590f00
Build-verified attempt to port the Java EuclideanCyclicConvergenceTest
(cathead, "circular hole edge" φ = π−0.1).

-  GREEN `CyclicCircularEdge_PhiEntersGradient_CatHead`: solver-free
  cross-validation that the circular-edge φ target enters the cyclic edge
  gradient exactly (ΔG_e = −Δφ_e at 1e-12; no other component moves).
- ⏸️ DISABLED `CyclicCircularEdge_CatHead_JavaXVal`: the full Java convergence
  assertion (α_opp+α_opp = π−0.1), kept with golden semantics. Auto-activates
  once the edge-DOF Hessian lands.

Build-verification finding: `newton_euclidean` -> `euclidean_hessian` throws
"edge DOFs are not supported" — the cyclic full solve is blocked by a missing
edge-DOF Euclidean Hessian (gradient supports edge DOFs, analytic Hessian does
not). Spherical convergence (Tier-1 #2) is already covered by test_newton_solver.
Documented in doc/reviewer/java-ignore-crossvalidation.md.

All 13 EuclideanFunctional tests pass (1 disabled).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
user2595 changed title from docs(reviewer): cross-validation analysis of Java @Ignore tests to Java @Ignore cross-validation: analysis + Tier-1 circular-edge test (+ edge-DOF Hessian finding) 2026-05-29 21:55:36 +00:00
user2595 added 1 commit 2026-05-29 22:09:42 +00:00
feat(euclidean): block-FD edge-DOF Hessian → cyclic Newton + Java convergence oracle
All checks were successful
C++ Tests / test-fast (pull_request) Successful in 1m57s
API Docs / doc-build (pull_request) Successful in 1m1s
Markdown link check / check (pull_request) Successful in 1m3s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Successful in 2m13s
d47a16748b
Implements the edge-DOF (cyclic) Euclidean Hessian, unblocking the full cyclic
Newton solve, and enables the Java EuclideanCyclicConvergenceTest cross-validation.

- euclidean_hessian.hpp: `euclidean_hessian_block_fd` / `_sym` — per-face 6×6
  block FD over (u1,u2,u3,λ12,λ23,λ31), mirroring hyper_ideal_hessian_block_fd.
  Per-face outputs carry the gradient signs (−α vertex, +α_opp edge), so the
  result equals ∂G/∂x by construction (locality lemma). Analytic vertex-only
  cotangent Hessian unchanged (still used for vertex-only layouts).
- newton_solver.hpp: newton_euclidean routes cyclic layouts (edge DOFs present)
  through the block-FD Hessian; vertex-only path unchanged.
- tests:
  * CyclicCircularEdge_CatHead_JavaXVal (now GREEN) — prescribe φ=π−0.1 on one
    interior edge, solve, assert realised α_opp+α_opp = π−0.1 @1e-9.
  * CyclicCircularEdge_PhiEntersGradient_CatHead — solver-free φ-wiring check.
  * CyclicHessian_BlockFD_MatchesGradientFD_Tetrahedron — Hessian correctness.

243/243 cgal tests pass; vertex-only Euclidean Newton unaffected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
user2595 changed title from Java @Ignore cross-validation: analysis + Tier-1 circular-edge test (+ edge-DOF Hessian finding) to feat(euclidean): edge-DOF (cyclic) Hessian + Java cross-validation (analysis & Tier-1 oracle GREEN) 2026-05-29 22:09:57 +00:00
user2595 added 1 commit 2026-05-29 22:18:45 +00:00
feat(euclidean): full analytic edge-DOF (cyclic) Hessian; Tier-2 Wente finding
All checks were successful
C++ Tests / test-fast (pull_request) Successful in 1m59s
API Docs / doc-build (pull_request) Successful in 55s
Markdown link check / check (pull_request) Successful in 1m0s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Successful in 2m25s
95fedd6133
Upgrades the cyclic Euclidean Hessian from block-FD to closed-form, satisfying
the novelty-statement §3.2 "analytic Hessians, not finite difference" claim for
the Euclidean path.

- euclidean_hessian.hpp: `euclidean_hessian_analytic` — closed-form cyclic
  Hessian from the law-of-cosines angle derivatives
    ∂α_i/∂s_i = ℓ_i²/4A,  ∂α_i/∂s_j = ½cot α_i − ℓ_j²/4A   (Σ_j = 0),
  chained to (u, λ_e) and sign-mapped to the gradient outputs (−α vertex,
  +α_opp edge). Reuses euclidean_cot_weights. Block-FD kept as cross-check.
- newton_solver.hpp: newton_euclidean cyclic path now uses the analytic Hessian.
- tests: CyclicHessian_Analytic_MatchesBlockFD_Tetrahedron — analytic == block-FD
  (1e-6), == gradient FD (1e-5), symmetric (1e-9). Existing cyclic convergence
  oracle still GREEN with the analytic Hessian routed in.

Tier-2 (Wente) finding: wente_torus02.obj is a QUAD mesh (1240 quads) and the
Java golden comes from cyclic (quad-net) uniformization; the C++ period-matrix
pipeline is triangle-based, so a faithful bit-vs-Java τ comparison needs a
quad/cyclic pipeline (Phase 9f). Deferred and documented; golden τ = ½+i√3/2.

244/244 cgal tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
user2595 changed title from feat(euclidean): edge-DOF (cyclic) Hessian + Java cross-validation (analysis & Tier-1 oracle GREEN) to feat(euclidean): edge-DOF (cyclic) Hessian — block-FD + full analytic + Java cross-validation 2026-05-29 22:19:00 +00:00
user2595 added 1 commit 2026-05-29 22:57:13 +00:00
docs(reviewer): Tier-2 exhausted (genus≥2 → Phase 13); Tier-3 Lawson scoped as mini-project
All checks were successful
C++ Tests / test-fast (pull_request) Successful in 1m59s
API Docs / doc-build (pull_request) Successful in 54s
Markdown link check / check (pull_request) Successful in 47s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Successful in 4m25s
c2d03de181
- regular_uniformization.xml / LetterB01_canonical_group.xml are genus≥2
  hyperbolic Fuchsian-group uniformizations (12-edge fundamental polygon), not
  genus-1 → Phase 13, not Tier 2.
- Tier-2 is therefore exhausted (only Wente, deferred to Phase 9f quad/cyclic).
- Tier-3 Lawson HyperIdeal golden vectors require a low-level halfedge genus-2
  multi-edge generator (4 verts/12 edges) + jtem Triangulator replication;
  scoped as a dedicated follow-up.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
user2595 added 1 commit 2026-05-30 07:37:03 +00:00
docs(reviewer): mark Tier-3 done (PR #30); fix duplicated tier table
All checks were successful
C++ Tests / test-fast (pull_request) Successful in 1m57s
API Docs / doc-build (pull_request) Successful in 52s
Markdown link check / check (pull_request) Successful in 47s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Successful in 2m13s
9d8aa6a7a6
- Tier-3 (Lawson HyperIdeal) plain + branch-points marked DONE (PR #30,
  test_lawson_hyperideal.cpp); status, §3 HIGH/MED rows, §3b table and §4
  recommended-order updated accordingly.
- Hyperelliptic variant documented as deferred (option c): needs an XML-format
  reader for lawson_curve_source.xml + a port of HyperIdealHyperellipticUtility
  (jReality geometry θ); golden vector is non-symmetric.
- Removed a pre-existing duplicated/stale copy of the tier-table rows.
- Added a status summary (Tier 1  PR #29 · Tier 2 → Phase 9f/13 · Tier 3  PR #30).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
user2595 added 1 commit 2026-05-30 07:40:43 +00:00
docs(reviewer): refresh §4 to mark Tier-1/3 done (stale TODO removed)
All checks were successful
C++ Tests / test-fast (pull_request) Successful in 2m21s
API Docs / doc-build (pull_request) Successful in 52s
Markdown link check / check (pull_request) Successful in 53s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Successful in 1m33s
98a0889fb7
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
user2595 added 2 commits 2026-05-30 15:33:13 +00:00
docs(reviewer): refresh §4 to mark Tier-1/3 done (stale TODO removed)
All checks were successful
C++ Tests / test-fast (pull_request) Successful in 2m21s
API Docs / doc-build (pull_request) Successful in 52s
Markdown link check / check (pull_request) Successful in 53s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Successful in 1m33s
98a0889fb7
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(reviewer): refresh §4 to mark Tier-1/3 done (stale TODO removed)
Some checks failed
C++ Tests / test-fast (pull_request) Successful in 2m1s
API Docs / doc-build (pull_request) Successful in 53s
Markdown link check / check (pull_request) Successful in 58s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Failing after 2m14s
c472748e46
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
user2595 merged commit aec7f489e5 into main 2026-05-30 15:33:37 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: conformallab/ConformalLabpp#29
No description provided.