origami
#
Origami
An origami is:
a couple of permutations
a covering of the torus ramified over one point
gluing of squares
Abelian differential on Riemann surface with rational periods
EXAMPLES:
sage: from surface_dynamics import *
sage: E = origamis.EierlegendeWollmilchsau()
sage: E.r()
(1,2,3,4)(5,6,7,8)
sage: E.u()
(1,5,3,7)(2,8,4,6)
sage: E.stratum_component()
H_3(1^4)^c
sage: E.lyapunov_exponents_approx() # abs tol 1e-3
[0.0000485630931783940, 0.0000452662733371477]
sage: o = Origami('(1,2,3,4,5,6)','(1,7)')
sage: V = o.veech_group()
sage: V
Arithmetic subgroup of index 54
sage: G = V.coset_graph()
sage: G.diameter()
16
- class surface_dynamics.flat_surfaces.origamis.origami.ActionOnOrigamiObjects(objects)#
Generic action of the automorphism group of an origami.
- surface_dynamics.flat_surfaces.origamis.origami.Origami(r, u, sparse=False, check=True, as_tuple=False, positions=None, name=None)#
Constructor for origami
INPUT:
r
,u
- two permutationssparse
- boolean (default: False)check
- boolean (default: True) - whether or not check the inputas_tuple
- boolean (default: False) - if True, assume thatr
andu
are tuples on [0,…,N-1] (time efficient)positions
- list of 2-tuples (default: None) - position of the squares for drawingsname
- an optional name to the origami
TESTS:
sage: from surface_dynamics import Origami sage: Origami('(0)(1,3)(2)', '(0,3,2,1)', as_tuple=True) (1)(2,4)(3) (1,4,3,2) sage: Origami('(0)(1,3)(2)', '(0,3,2,1)', as_tuple=True) (1)(2,4)(3) (1,4,3,2) sage: Origami((0,3,2,1), [3,0,1,2], as_tuple=True) (1)(2,4)(3) (1,4,3,2) sage: Origami([0,3,2,1], "(0,3,2,1)", as_tuple=True) (1)(2,4)(3) (1,4,3,2)
- class surface_dynamics.flat_surfaces.origamis.origami.OrigamiChainComplex(origami)#
Chain complex for reduced homology of the origami
- border_space(degree)#
Returns the space of borders of degree i
Bi = im(der: C_{i+1} -> Ci)
- chain_space(degree)#
Chain space.
INPUT:
degree
– either
- cycle_space(degree)#
Returns the space of cycles of degree i
Zi = ker(der: C_i -> C_{i-1})
- origami()#
Return the underlying origami.
- class surface_dynamics.flat_surfaces.origamis.origami.OrigamiEdges(origami)#
- basis_of_simple_closed_curves()#
- cardinality()#
- derivative()#
- end(i)#
- intersection(c1, c2)#
Returns the intersection of c1 and c2 assuming that they are simple closed curves
- is_simple_closed_curve(c)#
Test if c is a simple closed curve
- origami()#
- simple_closed_curve_to_vertex_in_out(c)#
From a curve c (as a vector) returns two dictionaries associated to input/output view from each visited vertices
- start(i)#
- winding(c)#
Return the winding of the curve c
- class surface_dynamics.flat_surfaces.origamis.origami.OrigamiFaces(origami)#
- cardinality()#
- derivative()#
- class surface_dynamics.flat_surfaces.origamis.origami.OrigamiObjects#
- border_space()#
The border space.
- chain_space()#
- cycle_space()#
The space of cycles.
- class surface_dynamics.flat_surfaces.origamis.origami.OrigamiVertex(parent, ur, dl)#
- adjacent_edge_indices()#
Returns a 2-tuple (incoming,outgoing)
- degree()#
- down_left_tuple()#
- edge_positions()#
The position of the edges.
- incoming_edge_indices()#
- incoming_edge_position(i)#
- index()#
- outgoing_edge_indices()#
- outgoing_edge_positions(i)#
- up_right_tuple()#
- class surface_dynamics.flat_surfaces.origamis.origami.OrigamiVertices(origami, register_automorphism_action=False)#
The set of vertices of an origami.
It is in bijection with the biclasses H G C where H is the stabilizer of 1 and C is the subgroup generated by the commutator
r u r**-1 u **-1
.- cardinality()#
The number of vertices.
EXAMPLES:
sage: from surface_dynamics import * sage: o = Origami('(1,2,3,4)','(1,5)') sage: V = o._vertices() sage: V.cardinality() 3
- chain_space()#
Return the space of chain on this finite set of vertices.
EXAMPLES:
sage: from surface_dynamics import * sage: o = Origami('(1,2,3,4)', '(1,5)') sage: V = o._vertices() sage: V.chain_space() Vector space of dimension 3 over Rational Field
- derivative()#
Return the derivative matrix.
That is a matrix from the chain space to QQ.
EXAMPLES:
sage: from surface_dynamics import * sage: o = Origami('(1,2,3,4)', '(1,5)') sage: V = o._vertices() sage: V.derivative() [1 1 1]
- down_left_vertex(i)#
Return the vertex that is in the down left corner of the
i
-th square.EXAMPLES:
sage: from surface_dynamics import * sage: o = Origami('(1,2,3,4)', '(1,5)') sage: V = o._vertices() sage: V.down_left_vertex(2) vertex (1, 5, 4)
- origami()#
Return the underlying origami.
EXAMPLES:
sage: from surface_dynamics import * sage: o = Origami('(1,2,3,4)','(1,5)') sage: V = o._vertices() sage: V.origami() (1,2,3,4)(5) (1,5)(2)(3)(4) sage: V.origami() is o True
- up_right_vertex(i)#
Return the vertex that is in the up right corner of the
i
-th square.EXAMPLES:
sage: from surface_dynamics import * sage: o = Origami('(1,2,3,4)', '(1,5)') sage: V = o._vertices() sage: V.up_right_vertex(2) vertex (2,)
- vertex(i)#
Return the vertex that is in the up right corner of the
i
-th square.EXAMPLES:
sage: from surface_dynamics import * sage: o = Origami('(1,2,3,4)', '(1,5)') sage: V = o._vertices() sage: V.up_right_vertex(2) vertex (2,)
- vertex_index(v)#
Return the index of the vertex
v
.EXAMPLES:
sage: from surface_dynamics import * sage: o = Origami('(1,2,3,4)', '(1,5)') sage: V = o._vertices() sage: v0 = V.up_right_vertex(2) sage: v0 vertex (2,) sage: V.vertex_index(v0) 1 sage: V[1] == v0 True sage: v1 = V.up_right_vertex(5) sage: v1 vertex (1, 5, 4) sage: V.vertex_index(v1) 0 sage: V[0] == v1 True
- surface_dynamics.flat_surfaces.origamis.origami.flatten_word(w)#
EXAMPLES:
sage: from surface_dynamics.flat_surfaces.origamis.origami import flatten_word sage: flatten_word([('l', 4), ('r', 6)]) 'llllrrrrrr'
- surface_dynamics.flat_surfaces.origamis.origami.permutation_simplicial_action(r, u, n, w)#
From a word in ‘l’,’r’ return the simplicial action on homology as well as the obtained origami.
INPUT:
r
andu
- permutationsn
- the degree of the permutationsw
- a string in ‘l’ and ‘r’ or a list of 2-tuples which are made of the letter ‘l’ or ‘r’ and a positive integer