SnapPy
What is SnapPy?
SnapPy is a program for studying the topology and geometry of 3-manifolds, with a focus on hyperbolic structures. It runs on Mac OS X, Linux, and Windows, and combines a link editor and 3D-graphics for Dirichlet domains and cusp neighborhoods with a powerful command-line interface based on the Python programming language. You can see it in action, learn how to install it, and watch the tutorial.
News
Version 3.3 (January 2026):
Linknow supports band moves and can search for ribbon disks and ribbon concordances. Seeribbon_concordant_linksandadd_band. From [DG].New census
RibbonLinks. From [DG].Additional slice obstructions added to
slice_obstruction_HKL. From [DG].The Fox-Milnor slice obstruction is now available as
fox_milnor_test. From [DG].The census
OrientableCuspedCensushas been extended to 10 ideal tetrahedra by [Li], adding 150,000 new manifolds.Margulis number can now be computed with
margulis.The upper bounds on the bridge number of a link from [BKVV2020] and [BKP2025] are available as
bridge_upper_bound.triangulation_isosignow preserves the orientation of the core curve rather than the Dehn-filling curve - thus, preserving the (unoriented) spun-triangulation structure. This only changes the result whenignore_curves=True(andignore_orientationandignore_filling_orientationshave their default values).Fixing a bug in
length_spectrum_altandlength_spectrum_alt_gen. The estimate for the upper bound of the global spine radius was not correct in all cases. Note that we expect this bug to be very hard to hit and do not have a single example where the result of these methods was wrong.length_spectrum_altcan be givencountandmax_lenat the same time. In that case, it stops when enough geodesics have been listed to ensure that they include thecountshortest geodesics or that they include all geodesics shorter thanmax_len.Acceleration to
length_spectrum_altwhen the next geodesic has large gap to the last geodesic in the result. It uses the newinclude_intermediates=Trueflag oflength_spectrum_alt_gen.Computing maximal cusp areas in an unbiased way uses a simpler algorithm which also returns tighter intervals for verified computations. This affects
cusp_areasand related methods.Support for Python 3.14 and SageMath 10.8.
Version 3.2 (January 2025):
An alternative implementation of the length spectrum. It supports verified computations and is significantly faster in some cases. See
length_spectrum_altandlength_spectrum_alt_gen.isometry_signaturenow also works for closed manifolds.A paper plane or eye ball in the
inside_viewshowing the position and bearing of the user in the hyperbolic manifold. By default, we now show the paper plane instead of the edges of the triangulation so that the view is intrinsic to the manifold. The geodesics window now also features a button to put the camera onto a geodesic. Here are some examples:
A faster and more robust algorithm to the compute maximal cusp area matrix. The new algorithm is now the default for
cusp_area_matrix(),cusp_areas(),short_slopes()andcusp_translations().New options
ignore_curvesandignore_filling_orientationsfortriangulation_isosig(). Also fixing a subtle bug where the filling coefficients returned bytriangulation_isosigwere not canonical whenignore_curve_orientations = True.canonical_retriangulation()andisometry_signature()fail with exceptions rather than silently returningNone. In particular, it now safe to compare isometry signatures (without further checks) to determine whether M and N are isometric hyperbolic manifolds:>>> M.isometry_signature(verified=True) == N.isometry_signature(verified=True)
Bug fix to
slice_obstruction_HKL: earlier versions incorrectly allowed looking at mod 2 homology of the branched cover, where the theory does not directly apply.New self-contained SnapPy application for Linux.
Support for Python 3.13 and SageMath 10.5.
Documentation
- Installing SnapPy
- Screenshots: SnapPy in action
- Tutorial
- The snappy module and its classes
- Using SnapPy’s link editor
- Links: planar diagrams and invariants
- Number theory of hyperbolic 3-manifolds
- Verified computations
- Other components
- News
- Credits
- Reporting bugs and other problems
- To Do List
- Development Basics
Credits
Written by Marc Culler, Nathan Dunfield, and Matthias Goerner using the SnapPea kernel written by Jeff Weeks, with contributions from many others. If you use SnapPy in your work, please cite it as described here. If you encounter problems with SnapPy, please report them.
Released under the terms of the GNU General Public License, version 2 or later.
The development of SnapPy was partially supported by grants from the National Science Foundation, including DMS-0707136, DMS-0906155, DMS-1105476, DMS-1510204, DMS-1811156, and DMS-2303572, and the Institute for Computational and Experimental Research in Mathematics. Any opinions, findings, and conclusions or recommendations expressed on this site are those of the authors and do not necessarily reflect the views of the National Science Foundation.