feat(euclidean): edge-DOF (cyclic) Hessian — block-FD + full analytic + Java cross-validation #29
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/java-ignore-crossvalidation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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_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. Reuseseuclidean_cot_weights. Satisfies novelty-statement §3.2 ("analytic Hessians, not finite difference").newton_solver.hpp:newton_euclideancyclic path uses the analytic Hessian; vertex-only path unchanged.Tests (all GREEN — 244/244 cgal)
CyclicCircularEdge_CatHead_JavaXVal— full JavaEuclideanCyclicConvergenceTestoracle: φ=π−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.mdFull
@Ignoreanalysis + effort-tiering + golden values. Tier-2 (Wente) finding:wente_torus02.objis 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.🤖 Generated with Claude Code
docs(reviewer): cross-validation analysis of Java @Ignore teststo Java @Ignore cross-validation: analysis + Tier-1 circular-edge test (+ edge-DOF Hessian finding)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>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)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>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