# Flat surfaces

## Interval exchange transformations / Linear involutions

Permutations of interval exchange transformations and generalized permutations of linear involutions are created using

```sage: iet.Permutation('a b c d','d c b a')
a b c d
d c b a
sage: iet.GeneralizedPermutation('a a b','b c c')
a a b
b c c```

We can build Rauzy diagrams from permutations

```sage: p = iet.Permutation('a b c d','d c b a')
sage: p.connected_component()
H_hyp(2)
sage: r = p.rauzy_diagram()
sage: print r
Rauzy diagram with 7 permutations```

Other Rauzy diagrams (with induction on the left, inversion, ...) are accessible via options

```sage: p.rauzy_diagram(left_induction=True)
Rauzy diagram with 84 permutations```

Build a path in the Rauzy diagram (the letter 't' means top induction and the letter 'b' means bottom induction)

```sage: path = r.path(p,'t','t','b','t','b','b','t','b')
sage: path.is_full()   # all intervals are seen as winner during Rauzy induction
True
sage: path.is_loop()   # startpoint and endpoint are identic
True```

Build an interval exchange map associated to this path

```sage: m = path.matrix()
sage: l,v,n = m.eigenvectors_right()[3] # l is the eigenvalue, v the vector and m the multiplicity
sage: n == 1
True
sage: t = iet.IntervalExchangeTransformation(p,v[0])
sage: print t
Interval exchange transformation of [0, 4.390256884515514?[ with permutation
a b c d
d c b a```

And we now check that the interval exchange map is self-similar under as many iterations as the length of the path

```sage: tt = t.rauzy_move(iterations=8)
sage: print tt
Interval exchange transformation of [0, 1[ with permutation
a b c d
d c b a
sage: tt.normalize(l) == t
True```

## Square-tiled surfaces

Let us build the genus 2 origami with three squares

```sage: o = Origami('(1,2)', '(1,3)')
sage: print o
(1, 2)
(1, 3)```

We now access to its Veech group and look at the associated invariants

```sage: G = o.veech_group()
sage: G.index()   # index in SL(2,Z)
3
sage: G.nu2()     # elliptic points of order 2
1
sage: G.nu3()     # elliptic points of order 3
1
sage: G.ncusps()  # number of cusps
2```

The Veech group of an origami is in fact attached to its Teichmüller curve. In the following we build the Teichmüller curve of o and compute other invariants

```sage: t = o.teichmueller_curve()
sage: t.sum_of_lyapunov_exponents()
4/3```

One can access to detailed data of a cusp using the cylinder diagram decomposition of an origami

```sage: o = Origami('(1,2)(3,4)','(1,3)')
sage: o.stratum()
H(1, 1)
sage: t = o.teichmueller_curve()
sage: for c,width in t.cusp_representative():
...     print c
...     print "width: %d" %width
...     print c.cylinder_diagram().dual_graph(), "\n"
(1,2)(3,4)
(1)(2,3)(4)
width: 2
Looped multi-graph on 1 vertex

(1,2)(3)(4)
(1,3)(2,4)
width: 2
Looped multi-graph on 2 vertices

(1,2,3,4)
(1)(2,4)(3)
width: 2
Looped multi-graph on 1 vertex```

dynamics/examples (last edited 2010-11-07 21:07:37 by VDelecroix)