Sage flat surfaces wiki

Flat surfaces in Sage

What is a flat surface ? What are we doing here ?

A flat surface can be seen either

This page is an organization wiki for the implementation of various algorithms related to flat surfaces and more generally geometry/combinatorics/dynamics of surfaces (mapping class group, train tracks, pseudo-Anosov dynamics, ...). If you have a special request do not hesitate to edit wishes.

The main work is now happening in the flatsurf package: flatsurf homepage and github repository.

Problems for student or anybody interested

The Bucky ball problem (William Veech, Barak Weiss)

Let S be the translation surface obtained from the (finite cover) of the bucky ball. Is it a Veech surface ?

Connection points

Does the middle point of the regular heptagon a connection point ? Is there any connection point on the heptagon ?

Global organization


We need to review the architecture of flat surfaces repository to fit with the general framework for dynamics. In is now as follows and should be quickly changed

What should be a Sage flat surface ?

We aim to allow different implementation for flat surfaces and full compatibility between them. Here is a draft of what we expect.

Different representations/implementations for flat surfaces

Needed generic methods

Roadmap / Concrete tasks

We need to rebase some of the code and create new one. Here is what do we want to be done.


Write here what you need for your research work (no precision on implementations is needed).

Interval exchange transformations

Mathematical prerequisite

Interval exchange transformations can be seen from different point of vue


The following are yet implemented in Sage

To do

Fast permutations in C : interfacing GAP ?

We really need fast permutation objects and other group theoretical stuff based on permutations (computation of centralizers, iteration of elements in conjugacy classes, ...). The most convenient would be to use GAP (Groups, Algorithms, Programming) which is completely written in C and has a lot of efficient algorithms for permutations and group theory. Moreover, the implementation of permutation in GAP is as we expect: a bijection of \{0, \ldots, n-1\}. Here is a part of the preambule of permutat.c in GAP sources

**  Mathematically a permutation is a bijective mapping  of a finite set onto
**  itself.  In \GAP\ this subset must always be of the form [ 1, 2, .., N ],
**  where N is at most $2^16$.
**  Internally a permutation  is viewed as a mapping  of [ 0,  1,  .., N-1 ],
**  because in C indexing of  arrays is done with the origin  0 instead of 1.
**  A permutation is represented by a bag of type 'T_PERM' of the form
**      +-------+-------+-------+-------+- - - -+-------+-------+
**      | image | image | image | image |       | image | image |
**      | of  0 | of  1 | of  2 | of  3 |       | of N-2| of N-1|
**      +-------+-------+-------+-------+- - - -+-------+-------+
**  The entries of the bag are of type  'UInt2'  (defined in 'system.h' as an
**  at least 16 bit   wide unsigned integer  type).   The first entry is  the
**  image of 0, the second is the image of 1, and so  on.  Thus, the entry at
**  C index <i> is the image of <i>, if we view the permutation as mapping of
**  [ 0, 1, 2, .., N-1 ] as described above.


Separatrix diagrams / Cylinder diagrams and other markings in relative homolgy

Mathematical prerequisite

Different contexts

We want to provide a uniform framework for dealing with markings of H_1(S, \mathbb{Z}) in relation with the flat structure. In each case, this marking is a Ribbon graph in which we specify an order on outgoing separatrices as well as an angle between separatrices. In the case of cylinder diagrams, there is also a supplementary data of the association bottom of cylinder - top of cylinder.

To do

Origami and coverings

Mathematical prerequisite

An origami is a cover of an elliptic curve ramified at the origin.


To do

Surface groups and mapping class group

They are needed from two points of view: the group of the surface itself and the flat surface's stabilizer under the action of SL(2,R) or PSL(2,R). There must be some software for dealing with surface groups. We need to look at

Surface group and covers

To deal with coverings we need some stuff about constellations (of genus g and degree d) which are (ordered) tuples of permutations (\alpha_i, \beta_i)_{i \in \{1, ldots, g\}} and (\delta_i)_{i \in \{1, \ldots, k\}} in the symmetric group S_d such that

A constellation has to be thought "up to conjugacy". For any tuple of permutations, one can compute a normal form for it in polynomial time. Most of the time, one would like to choose the conjugacy classes of the \delta_i and fix the degree of the cover. There exists explicit formula for counting involving Frobenius formula but is there any fast generation method ?

Mapping class group

Is there any library somewhere to work with the mapping class group?

Hyperbolic geometry

This part is roughly implemented in trac #9439

The Experimental geometry lab (University of Maryland) published a lot of Mathematica packages/worksheets to deal with Kleinian and Fuchsian groups, hyperbolic tessellations, etc.

Port of other programs

dynamics/FlatSurfaces (last edited 2016-05-29 20:20:43 by chapoton)