Compute polygonal affine spheres corresponding to complex polynomials
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


For any complex polynomial P, this package allows one to compute the Blaschke metric and affine frame field of the complete hyperbolic affine sphere in R^3 with Pick differential P(z)dz^3.

The projectivization of this affine sphere is the interior of a convex polygon in RP^2 (see our paper). The main program in this package,, uses the affine frame field to compute the vertices of this polygon.

The Blaschke metric is computed by applying the forward Euler method to the discretization of Wang's equation on a rectangular grid.

The frame field is then computed by integrating the affine structure equations using an ODE solver from scipy.integrate.


  • Python 2.7+
  • Scipy
  • Numpy

Usage examples

The main program is which takes a polynomial as input and writes a list of vertices as output.

  • Compute the vertices of the polygon corresponding to z^2 dz^3:

      python --vertices 1 0 1

    By default the polynomial is specified by listing its coefficients starting with the constant term, hence z^2 corresponds to (0, 0, 1).

    The vertices are written to stdout, one per line. The result should be projectively equivalent to the regular pentagon.

  • As above, but also compute the interior points of the polygon that correspond to the points 1+j and 1-j in the complex plane (where "j" is the imaginary unit, in python notation):

      python --vertices 1 0 1 --images 1+1j 1-1j

    Note that "--images" can be followed by a list of any number of points.

  • Compute the vertices and developed images of the Pick zeros for a monic polynomial with zeros at 1+j, 1-j, and -j:

      python --vertices --root-images --roots -- 1+1j 1-1j -1j  

    The "--roots" option signals that the complex numbers given are the roots rather than the coefficients.

    (Numbers starting with "-" confuse the option parser, so a double hyphen is used to signal that there are no further options on the command line.)


The code is still under active development and is of alpha quality. Comments, questions, suggestions, and bug reports are welcomed.

Applications: Moduli spaces and the fence conjecture

This package was created to explore the mapping between polynomial and polygon moduli spaces that is the subject of this preprint.

Early numerical experiments with this package led to the formulation of the "fence conjecture" for the Pick zeros of a convex polygon in the projective plane.


This material is based upon work supported by the National Science Foundation. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author and do not necessarily reflect the views of the National Science Foundation.


David Dumas and Michael Wolf