veech_group

The Veech group of a surface and related concepts.

EXAMPLES:

We write an element of the Veech group as an action on homology:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: M = matrix([[1, 2], [0, 1]])
sage: f = A.derivative().section()(M, check=False)

sage: from flatsurf import SimplicialHomology
sage: H = SimplicialHomology(S)
sage: H.hom(f)
Induced endomorphism of H₁(Translation Surface in H_1(0) built from a square)
  Defn: Induced by Affine endomorphism of Translation Surface in H_1(0) built from a square
          Defn: Lift of linear action given by
                [1 2]
                [0 1]
flatsurf.geometry.veech_group.AffineAutomorphismGroup(surface)[source]

Return the group of affine automorphisms of this surface, i.e., the group of homeomorphisms that can be locally expressed as affine transformations.

EXAMPLES:

sage: from flatsurf import dilation_surfaces, AffineAutomorphismGroup
sage: S = dilation_surfaces.genus_two_square(1/2, 1/3, 1/4, 1/5)
sage: AffineAutomorphismGroup(S)
AffineAutomorphismGroup(Genus 2 Positive Dilation Surface built from 2 right triangles and a hexagon)
class flatsurf.geometry.veech_group.AffineAutomorphismGroup_generic(surface)[source]

A generic implementation of the group of affine automorphisms of a surface.

You should not create such a group directly. Use AffineAutomorphismGroup() or flatsurf.geometry.categories.dilation_surfaces.DilationSurfaces.ParentMethods.affine_automorphism_group().

Note

Currently, this group is mostly empty and just a container to hold on to the derivative() method.

We do not provide a category parameter here because it makes serialization overly complicated. (And we do not think that anybody is going to use it.)

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
__annotations__ = {}
__init__(surface)[source]
__module__ = 'flatsurf.geometry.veech_group'
__reduce__()[source]

Return a serializable representation of this space.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: loads(dumps(A)) == A
True
__repr__()[source]

Return a printable repreentation of this group.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: A
AffineAutomorphismGroup(Translation Surface in H_1(0) built from a square)
derivative()[source]

Return the derivative of this group, i.e., the map to \(GL_2(\mathbb{R})\) whose image is the VeechGroup().

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: A.derivative()
Derivative morphism:
  From: AffineAutomorphismGroup(Translation Surface in H_1(0) built from a square)
  To:   General Linear Group of degree 2 over Rational Field
surface()[source]

The surface for which this is the affine automorphism group.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: S.affine_automorphism_group().surface() is S
True
class flatsurf.geometry.veech_group.AffineAutomorphism_matrix(parent, matrix)[source]

An affine automorphism of a surface that is an (arbitrary) lift of an element of \(GL_2(\mathbb{R})\).

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: f = A.derivative().section()(matrix([[1, 3], [0, 1]]), check=False)
sage: f
Affine endomorphism of Translation Surface in H_1(0) built from a square
  Defn: Lift of linear action given by
        [1 3]
        [0 1]
__annotations__ = {}
__eq__(other)[source]

Return whether this morphism is indistinguishable from other.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: f = A.derivative().section()(matrix([[1, 3], [0, 1]]), check=False)
sage: g = A.derivative().section()(matrix([[1, 3], [0, 1]]), check=False)
sage: f == g
True
__hash__()[source]

Return a hash value for this automorphism that is compatible with __eq__().

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: f = A.derivative().section()(matrix([[1, 3], [0, 1]]), check=False)
sage: g = A.derivative().section()(matrix([[1, 3], [0, 1]]), check=False)
sage: hash(f) == hash(g)
True
__init__(parent, matrix)[source]
__module__ = 'flatsurf.geometry.veech_group'
__reduce__()[source]

Return a serializable representation of this automorphism.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: f = A.derivative().section()(matrix([[1, 3], [0, 1]]), check=False)
sage: loads(dumps(f)) == f
True
class flatsurf.geometry.veech_group.DerivativeMap[source]

The derivative from the AffineAutomorphismGroup to \(GL_2(\mathbb{R})\).

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: d = A.derivative()
__dict__ = mappingproxy({'__module__': 'flatsurf.geometry.veech_group', '__doc__': '\n    The derivative from the :class:`AffineAutomorphismGroup` to\n    `GL_2(\\mathbb{R})`.\n\n    EXAMPLES::\n\n        sage: from flatsurf import translation_surfaces\n        sage: S = translation_surfaces.square_torus()\n        sage: A = S.affine_automorphism_group()\n        sage: d = A.derivative()\n\n    TESTS::\n\n        sage: from flatsurf.geometry.veech_group import DerivativeMap\n        sage: isinstance(d, DerivativeMap)\n        True\n\n        sage: TestSuite(d).run()\n\n    ', 'section': <function DerivativeMap.section>, '_repr_type': <function DerivativeMap._repr_type>, '__eq__': <function DerivativeMap.__eq__>, '__hash__': <function DerivativeMap.__hash__>, '__dict__': <attribute '__dict__' of 'DerivativeMap' objects>, '__annotations__': {}})
__eq__(other)[source]

Return whether this derivative is indistinguishable from other.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: A.derivative() == A.derivative()
True
__hash__()[source]

Return a hash value for this derivative that is compatible with __eq__().

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: hash(A.derivative()) == hash(A.derivative())
True
__module__ = 'flatsurf.geometry.veech_group'
section()[source]

Return a section of this map, i.e., a map that lifts a matrix in \(GL_2(\mathbb{R})\) to an affine automorphism.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: d = A.derivative()
sage: s = d.section()
class flatsurf.geometry.veech_group.SectionDerivativeMap(derivative)[source]

A section of a DerivativeMap.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: d = A.derivative()
sage: s = d.section()
__dict__ = mappingproxy({'__module__': 'flatsurf.geometry.veech_group', '__doc__': '\n    A section of a :class:`DerivativeMap`.\n\n    EXAMPLES::\n\n        sage: from flatsurf import translation_surfaces\n        sage: S = translation_surfaces.square_torus()\n        sage: A = S.affine_automorphism_group()\n        sage: d = A.derivative()\n        sage: s = d.section()\n\n    TESTS::\n\n        sage: from flatsurf.geometry.veech_group import SectionDerivativeMap\n        sage: isinstance(s, SectionDerivativeMap)\n        True\n\n        sage: TestSuite(s).run()\n\n    ', '__init__': <function SectionDerivativeMap.__init__>, 'section': <function SectionDerivativeMap.section>, '_repr_type': <function SectionDerivativeMap._repr_type>, '_call_': <function SectionDerivativeMap._call_>, '_call_with_args': <function SectionDerivativeMap._call_with_args>, '__eq__': <function SectionDerivativeMap.__eq__>, '__hash__': <function SectionDerivativeMap.__hash__>, '__dict__': <attribute '__dict__' of 'SectionDerivativeMap' objects>, '__annotations__': {}})
__eq__(other)[source]

Return whether this section is indistinguishable from other.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: A.derivative().section() == A.derivative().section()
True
__hash__()[source]

Return a hash value for this section that is compatible with __eq__().

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: hash(A.derivative().section()) == hash(A.derivative().section())
True
__init__(derivative)[source]
__module__ = 'flatsurf.geometry.veech_group'
section()[source]

Return a section of this section, i.e., the original map.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: A = S.affine_automorphism_group()
sage: d = A.derivative()
sage: s = d.section()

sage: s.section() is d
True
flatsurf.geometry.veech_group.VeechGroup(surface)[source]

Return the Veech group of surface, i.e., the group of matrices that fix its vertices.

EXAMPLES:

sage: from flatsurf import dilation_surfaces, VeechGroup
sage: S = dilation_surfaces.genus_two_square(1/2, 1/3, 1/4, 1/5)
sage: VeechGroup(S)
VeechGroup(Genus 2 Positive Dilation Surface built from 2 right triangles and a hexagon)
class flatsurf.geometry.veech_group.VeechGroup_generic(surface, category=None)[source]

A generic (currently essentially empty) implementation of the Veech group.

You should not create such a group directly. Use VeechGroup() or flatsurf.geometry.categories.dilation_surfaces.DilationSurfaces.ParentMethods.veech_group().

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: V = S.veech_group()
__contains__(x)[source]

Return whether x is contained in the Veech group.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: V = S.veech_group()
sage: m = matrix([[1, 0], [0, 1]])

sage: m in V
True
__eq__(other)[source]

Return whether this group is indistinguishable from other.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: S.veech_group() == S.veech_group()
True
__hash__()[source]

Return a hash value for this group that is compatible with __eq__().

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: hash(S.veech_group()) == hash(S.veech_group())
True
__init__(surface, category=None)[source]
__module__ = 'flatsurf.geometry.veech_group'
gens()[source]

Return generators of this group.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: V = S.veech_group()
sage: V.gens()
Traceback (most recent call last):
...
NotImplementedError: cannot compute generators of the Veech group yet
surface()[source]

The surface for which this is the Veech group.

EXAMPLES:

sage: from flatsurf import translation_surfaces
sage: S = translation_surfaces.square_torus()
sage: S.veech_group().surface() is S
True