The ptolemy module

The ptolemy module is part of the popular 3-manifold software SnapPy and can be used to find boundary-unipotent representations of a 3-manifold into PGL(N,C) and compute invariants such as volume and Chern-Simons invariant. The math is explained in: The Ptolemy varities can be computed using Magma or Sage or retrieved automatically from our precomputed database. See the examples below.

Please report bugs to enischte at gmail dot com.

Data for SnapPy manifolds


Browsable database

Individual magma files

Tar archives

Our data contains the primary decompositions of the Ptolemy varieties as well as the volume of each representation (see notes and caveats for more). The manifolds for which we have complete data include:
  • PGL(2,C)
    • OrientableCuspedCensus: all manifolds up to 8 simplices
    • LinkExteriors: all manifolds up to 16 simplices
    • HTLinkExteriors: all manifolds up to 13 simplices but L14n31302
  • PGL(3,C)
    • OrientableCuspedCensus: all manifolds up to 3 simplices and selected manifolds with 4
  • PGL(4,C)
    • m004


Please upgrade before trying the examples. The following examples work in SnapPy 2.0.3 and Sage with SnapPy 2.0.3 installed (see installation instructions).
  • Presentation at ICERM and Talk at ICERM

  • Example to compute the complex volumes of all boundary-unipotent PGL(3,C)-representations of m003:

    >>> from snappy import Manifold # not needed in SnapPy
    >>> cvols=Manifold("m003").ptolemy_variety(3,'all').retrieve_solutions(numerical=True).complex_volume_numerical()
    >>> cvols
      NonZeroDimensionalComponent(dimension = 1),
      NonZeroDimensionalComponent(dimension = 1),
        8.11953285127723 + 1.47963265635756 E-15*I,
       -8.11953285127723 + 1.47963265635756 E-15*I

    This command loads the manifold, generates the Ptolemy variety for all obstruction classes, retrieves the solutions from the database, and computes all complex volumes. The result is a nested list. The first level is the obstruction class, the second level the components of the primary decomposition, and the third level is the set of points (if zero dimensional; volumes of higher dimensional components not yet supported). This nested structure is common for commands of the Ptolemy module. You can disregard the nesting with the flatten command. For example, if you are only interested in the set of volumes, you can type:

    >>> cvols.flatten(depth=2)
     -8.11953285127723 + 1.47971912500822 E-15*I,
     2.59538759368674 - 0.102052492416651*I

    All commands and classes are documented. The documentation for a command or class can be found using help in python or ? in SnapPy:

    >>> M=Manifold("m004")
    >>> help(M) # help on the Manifold class
    >>> M? # short-cut to the help in SnapPy, sage and ipython
    >>> M. # hitting the tab-key in SnapPy will list methods
    >>> help(M.ptolemy_variety) # help on the Ptolemy variety
    >>> p = M.ptolemy_variety(2,'all') # list of Ptolemy varieties
    >>> p1 = p[1] # a single Ptolemy variety
    >>> help(p1) # now we can list help for Ptolemy variety
    >>> sols = p1.retrieve_solutions() # Exact solutions, requires Internet access
    >>> s0 = sols[0] # Get one exact solutions
    >>> help(s0) # So we can get help on it
    >>> s0.cross_ratios()
    >>> p.retrieve_solutions() # A lot of methods can also be applied to list of objects
    >>> sols.cross_ratios()
    >>> p.retrieve_solutions().cross_ratios() # And can be combined and used for nested structures

Video tutorials

Note that the ptolemy module has evolved since the video tutorials were made and there are now more convenient methods to accompolish, e.g., computing all complex volumes as illustrated above. With the generalized obstruction class, M.ptolemy_variety(3,'all') will now find all PGL(3,C)-representations, not just the ones lifting to SL(3,C).