Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
title: "conformal-toolkit: Symbolic and Discrete Conformal Geometry for SageMath and PyTorch"
abstract: >-
A Python toolkit for computing conformal invariants both symbolically
(exact formulas via SageMath/SageManifolds) and discretely (per-vertex mesh
features via PyTorch): tractor calculus, GJMS operators, Q-curvature, the
conformal fundamental forms and Willmore densities of Blitz-Gover-Waldron,
Carroll geometry, and Fefferman-Graham holographic data. The hypersurface
module implements the conformal hypersurface invariant theory of Samuel Blitz,
A. Rod Gover, and Andrew Waldron.
type: software
authors:
- family-names: Rihm
given-names: Eric
email: admin@strata-networks.com
repository-code: "https://github.com/ericrihm/conformal-toolkit"
url: "https://github.com/ericrihm/conformal-toolkit"
license: MIT
version: 0.1.1
date-released: "2026-05-31"
keywords:
- conformal geometry
- differential geometry
- tractor calculus
- Q-curvature
- GJMS operators
- Willmore energy
- geometric deep learning
- SageMath
- PyTorch
55 changes: 55 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Contributing

Thanks for your interest — corrections and contributions are genuinely welcome.
This project values being *correctable*: if you find an error in the math, the
code, the docs, or in [`ERRATA.md`](ERRATA.md) itself, that's the system working.

## Reporting a math/correctness error (errata)

This is the highest-value contribution. Follow the same method the project's own
audit used (see [`ERRATA.md` → "How we caught them"](ERRATA.md)):

1. Open an issue titled `Errata: <one-line claim>`.
2. Give the counter-evidence as concretely as possible:
- a **specific geometry** (a sphere radius, a flat patch, an explicit metric)
on which the claim returns the wrong number; or
- a **conformal-weight argument** showing the terms can't match.
A failing check on a named anchor metric is the gold standard.
3. Propose the corrected formula, **stating your normalization convention**
(Branson vs. analyst signs differ — many conformal-geometry "errors" are
convention clashes), with a reference if you have one.
4. If you can, add a regression test pinning the right value on the anchor —
*verified-on-an-anchor beats argued-in-prose.*

Open mathematical problems where help is explicitly wanted are listed at the end
of [`ERRATA.md`](ERRATA.md) (e.g. the complete weight-4 hypersurface invariant
basis, the Fialkow/Weyl terms in `L₂`, the full extrinsic `Q₄`).

## Development & tests

The suite runs on two independent tracks (see the README section
*"How it's tested"*):

```bash
# Track B — discrete (PyTorch only, no SageMath needed):
pip install -e ".[dev,ml]"
pytest tests/test_discrete/ tests/test_features/ -v

# Track A — symbolic (needs SageMath 10.x):
./sage-run.sh test # auto-detects native micromamba or the Sage Docker image
# or target specific modules:
./sage-run.sh pytest tests/test_core/ -v
```

Both tracks run automatically on every push and pull request via GitHub Actions
([`.github/workflows/test.yml`](.github/workflows/test.yml)) — please make sure
they're green. If you add or correct a formula, add a regression anchor (a known
closed-form value on a concrete geometry) alongside it; see
`tests/test_discrete/test_errata_anchors.py` for the pattern.

## Conventions

- Match the surrounding code style; keep changes focused.
- Tag any in-code note about a known limitation or correction with a stable
`# ERRATA <ID>` reference so it stays traceable to the errata log.
- By contributing you agree your contributions are licensed under the MIT License.
8 changes: 6 additions & 2 deletions ERRATA.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,12 @@ below.
- **Claimed:** `count_invariants(4, ambient_dim=5) = 4` with basis
`{|L₂|², tr(L₁⁴), W·L₁, |W|²}`, presented as the complete independent set.
- **Why it's wrong:** the algebraic quartic `(|L₁|²)²` is **independent** of
`tr(L₁⁴)` for `n≥4` (their eigenvalue difference is `4abc(a+b+c) ≠ 0`) yet is
entirely absent. A complete *pointwise* weight-4 classification also needs the
`tr(L₁⁴)`: in eigenvalues `λᵢ` of `L₁`, their difference is
`(Σλᵢ²)² − Σλᵢ⁴ = 2·Σ_{i<j} λᵢ²λⱼ²`, which is strictly positive whenever `L₁`
has two or more nonzero principal curvatures — e.g. trace-free eigenvalues
`(1, 2, −3)` give `(|L₁|²)² = 196` versus `tr(L₁⁴) = 98`. (The two are *not*
proportional, so neither can be dropped.) Yet `(|L₁|²)²` is entirely absent
from the catalogue. A complete *pointwise* weight-4 classification also needs the
tangential-derivative invariants (`|∇̄L₁|²` / `L₁·Δ̄L₁`, `|div L₁|²`) and the
curvature coupling `J̄|L₁|²`. The true count therefore **exceeds 4**.
- **Status:** `count_invariants` is now documented as a **lower bound**, and the
Expand Down
2 changes: 1 addition & 1 deletion conformal_features/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""Discrete conformal invariants for geometric deep learning."""

__version__ = "0.1.0"
__version__ = "0.1.1"

from conformal_features.features.pipeline import mesh_conformal_features
from conformal_features.discrete.spectral import (
Expand Down
2 changes: 1 addition & 1 deletion conformal_toolkit/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""Symbolic conformal geometry toolkit built on SageManifolds."""
__version__ = "0.1.0"
__version__ = "0.1.1"

from conformal_toolkit.core import ConformalStructure

Expand Down
6 changes: 4 additions & 2 deletions conformal_toolkit/hypersurface/invariant_enumeration.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
KNOWN INCOMPLETENESS at weight 4 (see ERRATA M5). The weight-4 catalogue
below is a PARTIAL (purely algebraic, leading) basis. It under-counts:
* it omits the independent algebraic quartic (|L_1|^2)^2, which is
distinct from tr(L_1^4) for n >= 4 (their difference is 4abc(a+b+c)
in eigenvalues, generically nonzero); and
distinct from tr(L_1^4): in eigenvalues their difference is
(sum lam_i^2)^2 - sum lam_i^4 = 2 * sum_{i<j} lam_i^2 lam_j^2 > 0
whenever L_1 has >= 2 nonzero principal curvatures (e.g. trace-free
eigenvalues (1,2,-3) give 196 vs 98); and
* it omits the tangential-derivative invariants (e.g. |nabla_bar L_1|^2 /
L_1 . Delta_bar L_1, |div L_1|^2) and the curvature coupling
J_bar |L_1|^2 that a complete pointwise weight-4 classification carries.
Expand Down
2 changes: 1 addition & 1 deletion docs/outreach/blitz-email-draft.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ I'm Eric Rihm, a software engineer working at the intersection of differential g
2. **Research paper** -- Extend the classification computationally to higher-order L_k and use the toolkit to discover new identities or verify conjectured ones. The software can search spaces that are infeasible by hand.
3. **ML/applications paper** -- I've also built a pipeline that uses conformal invariants as features for graph neural networks, applied to shape analysis. This is a novel bridge between conformal geometry and geometric deep learning -- could be a good fit for an ICML or NeurIPS workshop.

The repo is public with 125 tests and 6 example notebooks:
The repo is public with 160 tests and 6 example notebooks:
https://github.com/ericrihm/conformal-toolkit

Notebook 02 directly demonstrates your classification and would be the best place to start.
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "conformal-toolkit"
version = "0.1.0"
version = "0.1.1"
description = "Computational conformal geometry and conformal invariants for geometric deep learning"
readme = "README.md"
license = "MIT"
Expand Down
Loading