Refined Index Calculator
Download v1.1.4
Stable release · choose your platform
Latest · Stable
v1.1.4 for macOS
Universal (Intel + Apple Silicon) · macOS 11+
Download .zip (334 MB)
Extract the zip, move ManifoldIndex.app to Applications, then run:
Only required the first time (clears the quarantine flag).
xattr -cr /Applications/ManifoldIndex.appOnly required the first time (clears the quarantine flag).
Latest · Stable
v1.1.4 for Windows
Windows 10+ · x64 standalone exe
Download .exe (350 MB)
No installation needed — just double-click the downloaded ManifoldIndex.exe. If Windows SmartScreen warns, click More info → Run anyway.
v1.0.9
v1.0.9 for macOS
Universal (Intel + Apple Silicon) · macOS 11+
Download (334 MB)
Ad-hoc signed. Clear quarantine with:
xattr -cr ~/Downloads/ManifoldIndex.app
v1.0.9
v1.0.9 for Windows
Windows 10+ · x64 standalone exe
Download .exe
No installation needed. Download and run directly. Windows Defender may warn — click "More info" → "Run anyway".
v0.5.15
v0.5.15 for macOS
Universal (Intel + Apple Silicon) · macOS 11+
Download (296 MB)
Ad-hoc signed. Clear quarantine with:
xattr -cr ~/Downloads/ManifoldIndex.app
v0.5.15
v0.5.15 for Windows
Windows 10+ · x64 standalone exe
Download .exe
No installation needed. Download and run directly. Windows Defender may warn—click "More info" → "Run anyway".
v0.4.2
v0.4.2 for macOS
Apple Silicon (arm64) · macOS 11+
Download (288 MB)
Ad-hoc signed. Clear quarantine with:
xattr -cr ~/Downloads/ManifoldIndex.app
v0.4.2
v0.4.2 for Windows
Windows 10+ · x64 standalone .exe
No Windows build was published for v0.4.x — Windows support starts at v0.5. Use the latest release above.
Installation
macOS
- Download
ManifoldIndex.zipfrom the download section above. - Open the zip — macOS expands it to
ManifoldIndex.app. Drag the app into/Applications(or any folder you prefer). - Because the app is not notarised, Gatekeeper will block the first launch. Clear the quarantine flag with:
xattr -cr /Applications/ManifoldIndex.appThen double-click the app as normal. This step is only required once.
- If you skipped step 3 and already saw the "cannot be opened" dialog, open System Settings → Privacy & Security and click Open Anyway next to the ManifoldIndex entry.
The app bundles its own Python runtime and SnapPy — you do not need to install anything else.
Windows
- Download
ManifoldIndex.exefrom the download section above (it's a single self-contained executable — no installer, no zip). - Move it anywhere you like (Desktop, Documents, a new folder — it's fine). Double-click to run.
- On first launch, Windows SmartScreen may show a blue pop-up saying "Windows protected your PC" because the binary isn't signed by a recognised publisher. Click More info, then Run anyway. You will only see this once per download.
- If Microsoft Defender or a third-party antivirus quarantines the file, add an exclusion for the folder you put
ManifoldIndex.exein. The installer-less format occasionally trips heuristic scanners.
Startup takes ~5–10 seconds on first launch while the embedded Python unpacks into %LOCALAPPDATA%\Temp. Subsequent launches are faster.
From Source
Requires Python 3.10 or newer. After cloning the repo:
pip install -e ".[dev]"
manifold-index # Launch GUI
pytest tests/ # Run test suite
manifold-index # Launch GUI
pytest tests/ # Run test suite
Changelog
v1.1.4 — hard-edge basis info moves to the fill-info panel
- "opt K→K′" badge moved out of the NC cycle table. The Weyl-vectors-per-edge table in the Compute Filling info panel is the right home for it: $a_j$ / $b_j$ are attached to the hard-edge basis $W_j$, so the basis itself belongs immediately above that table. v1.1.4 adds a dedicated Hard-edge basis section that lists each $W_j$ as the per-tetrahedron triplet $(z_i, z'_i, z''_i)$, and carries the optimisation badge (refinement gain + $G$ matrix on hover) when the basis is non-default.
v1.1.3 — basis optimiser actually runs in the GUI
- Hard-edge basis optimisation now activates in the
GUI. In v1.1.0 / v1.1.1 / v1.1.2 the per-NC-cycle
worker thread silently swallowed an exception when it tried to
reload the manifold via SnaPy — SnaPy's SQLite session is
thread-bound and refuses cross-thread access, so the optimiser
never ran. Symptom: 6_2 with NC=(1,0) and Dehn-filling slope
(5,1) reported refinement = 1 instead of the expected 2. The
fix stashes a thread-safe
ManifoldData(raw=None) on the session at load time and uses that everywhere instead of re-loading via SnaPy from worker threads. Optimiser failures are now also printed to stderr instead of being silently swallowed.
v1.1.2 — fill workers honour the optimised basis; fresh dist-info
- Fill workers now use the optimised hard-edge basis.
v1.1.0 / v1.1.1 optimised the basis for the per-NC-cycle Weyl
check (and showed the green opt K→K′ badge) but the
actual
FillWorker/UnrefinedKernelFillWorkercontinued to compute on the defaultnz_data, so the η-indices didn't line up with the optimisedincompat_edgesand the filled-index series came out with the default refinement count. The launchers now rebuildnz_datafrom theoptimised_easy_resultemitted byNcCompatWorker, so the fill genuinely runs in the optimised basis. - Stale dist-info on v1.1.0 / v1.1.1 macOS builds.
importlib.metadatareturned 1.0.8 in the bundled app because the build machine's editable install hadn't been refreshed since v1.0.8.release.shnow reinstalls the package immediately before invoking PyInstaller, so future binaries always carry the correct version.
v1.1.1 — multi-cusp basis optimisation, downloads page cleanup
- Multi-cusp hard-edge basis optimisation. ``MultiCuspNcCompatWorker`` now silently runs the optimiser before the joint adjoint check, mirroring the single-cusp behaviour from v1.1.0. Refinement is the count of edges j for which every per-cusp Weyl column has ``a_I[j] ∈ ℤ ∧ 2·b_I[j] ∈ ℤ``, and verification uses the multi-cusp adjoint formula.
- Downloads page cleanup. v1.1 is the latest stable series; v1.0 (final: v1.0.9) is now in Older Releases. The internal version-grouping IDs and JS were renamed accordingly.
v1.1.0 — hard-edge basis optimisation
- Auto-optimise hard-edge basis per NC cycle. The per-cycle Weyl/adjoint check in Card ③ now searches integer-unimodular changes-of-basis on the hard subspace and silently swaps in a basis that yields a strictly larger refinement count subject to the adjoint q¹ projection passing with an integer value. For 6_2 NC=(1,0) this lifts the displayed refinement from 1 to 2 with adj_val = −1 (was −2 / refinement 1) — at < 2 s extra cost per cycle. Manifolds whose default basis is already optimal (m060, …) return immediately with no overhead.
- Bug fix: νinternal in
build_neumann_zagierno longer hard-codes RHS = 2. The RHS is now tracked per row viaEasyEdgeResult, so any non-raw integer combination of edges produces the correct affine shift. The default flow (raw + Stage-1 easy edges, all RHS = 2 by construction) is unchanged. - UI: a green opt 1→2 pill appears next to the γᵢ slope in the NC table when an optimised basis was used; hovering reveals the G-matrix and the refinement gain.
v1.0.9 — 6_2 (1, 0) undercounting fix, batched F_x2
- Fixed 6_2 (1, 0) regression introduced by v1.0.8 where the unrefined fill produced a spurious
{0: −1}term and was incorrectly classified non-NC. Root cause: the v1.0.8 floor padding raisedR[j]to ≥40, but the resulting initial box exceeded the 1M isotropic cap → R was clamped back to ~15 per axis → adaptive shell growth was skipped entirely, dropping ~192 valid sublevel points per kernel context. Fix: removed the early-exit on clamp, removed the inner_MAX_BOX_SIZEcheck inside shell growth, raised_MAX_SHELL_STEPS32→80 with a 3-empty-shell convergence stop. 6_2 (1, 0) is now correctly stably zero at q_half ∈ {4, 6, 8, 10}; the v1.0.8 m060 (1, 1) refined fix is preserved. - Batched
F_x2in_proj_min_fixed: the projection minimiser now evaluates ray-scan trial points in 32-point NumPy chunks instead of single calls, and the innerF_x2always uses the vectorised path. ~2× speedup on the projection step; reduces totalF_x2overhead from ~180 s to ~40 s on m111 (1, 0). - Known regression: m111 (1, 0) at q_half = 4 unrefined fill is ~1.5× slower (102 s → ~150 s) because shell growth now correctly walks out the genuinely large sublevel set instead of stopping at the isotropic cap. The result is unchanged. A principled fix that replaces
_proj_min_fixedwith an exact projection minimiser is planned for v1.1.0.
v1.0.8 — refined filling basis-independence, responsive Stop
- Refined Dehn-filling basis-dependence fix: the filled index via any NC cycle now agrees at η → 1 with the classical unrefined filling (previously m060 (1, 1) through NC = (−1, 0) or (0, 1) could give a different answer from NC = (1, 0)). Root cause was the per-axis bounding box in
_exact_e0_candidatessilently dropping valid lattice points; replaced with clip-to-floor + per-axis adaptive shell growth. - Stop button in NC search is now responsive — aborts within a few seconds even on slow manifolds (was an
AttributeErrorcrash or an indefinite wait for the current slope to finish). _MAX_BOX_SIZEdefault lowered from 50M to 1M (env-overridable via_IREF_MAX_BOX_SIZE) — keeps per-slope runtime tractable on manifolds with highly-elongated sublevel sets (m111 etc.). Trade-off is silent correctness loss on those manifolds; raise the env var to re-validate.
v1.0.7 — first stable release
- Data Hub: 3-tab workflow (Download · Generate · Export & Share) with sequential multi-pack downloads, pause/resume/cancel generate queue, and a publish flow that infers category from file types.
- Offline KaTeX rendering: math views no longer require network access.
- Weyl compatibility diagnostic with collapsed-edge support, plus multi-cusp adjoint projection checks in the filling service.
- v0.4-style α/β notation throughout the UI, with γᵢ/δᵢ display for NC cycles.
- Cross-platform builds: macOS
.appand Windows.exefrom a unifiedrelease.sh, with GitHub Actions handling the Windows build. - Repository layout flattened — src/, tests/, assets/, and build scripts now live at the repo root.
v0.5.15
- Display Improvements: Better fill result layout with combined metadata and improved LaTeX notation
- Windows Support: Added build_app.bat script for standalone .exe building on Windows
- New Widget: math_label.py for enhanced mathematical notation display
- Code Quality: Simplified UI labels and reduced complexity in display components
- Improved multi-cusp filling display with per-cusp slope formatting
v0.5.2
- Critical Fix: Resolved SnapPy SQLite thread-binding error on manifold loading
- Threading: Manifold loaded in main thread to avoid cross-thread database access
- All manifolds from SnapPy census can now be loaded reliably
v0.5.1
- UI Redesign: Complete v0.4-style formatters with mathematical notation (α, β, γ, δ)
- KaTeX Rendering: Inline LaTeX throughout — table headers, parameters, results
- Per-Cycle Weyl: Independent Weyl compatibility checks for each NC cycle basis choice
- Enhanced Tables: NC cycle display with per-cycle Weyl vectors as tuples, professional appearance
- Improved Display: Better fill result layout, transparent backgrounds, proper mathematical notation
v0.5.0
- Performance: Yield CPU and release GIL in progress callbacks for macOS responsiveness
- Stability: Comprehensive error analysis in data handling and worker management
- Robustness: Enhanced session state handling with stale signal guards
- 76+ tests passing
v0.4.2
- Critical: Fixed half-integer e summation in Dehn filling
- Multi-cusp Weyl symmetry corrections for accurate manifold analysis
- Corrected Weyl convention: f(m,e) = f(−m,−e)
- Stale data pack removal for data integrity
v0.4.0
- Complete computation core rewrite with cleaner architecture
- Full (½)ℤ² lattice support for IS chains
- Pre-computed kernels-qq50 data pack fully recomputed
Contributors
The Refined Index Calculator was built alongside a forthcoming article that motivates its computations. The app exists so that the constructions in the article can be reproduced and extended without re-implementing them from scratch.
Author
Dongmin Gang
Co-author of the accompanying article (in preparation).
Author
Kibok Jeong
Co-author of the accompanying article (in preparation).
Author · App developer
Soochang Lee
Co-author of the accompanying article, and developer of this app — computation core, GUI, packaging, and release engineering.
Get involved
- Found a bug or have a feature request? Open an issue.
- Have a computed data pack you want to share? Use the Export & Share tab in the Data Hub to package it, then open a PR adding the release URL to the registry.
- Citations and academic use: please cite the project URL and the specific version you used. A BibTeX snippet will be added once the accompanying paper is posted to arXiv.