flatsurf / sage-flatsurf

Flat surfaces in Sage
https://flatsurf.github.io/sage-flatsurf/
GNU General Public License v2.0
10 stars 10 forks source link

Apply veech group elements to homology #225

Closed saraedum closed 3 days ago

saraedum commented 1 year ago

We would like to make this interface work (bringing together #211, #163, https://github.com/flatsurf/flatsurf/pull/308, #213 for the homology bits)

S = ...
M = matrix([[1, 2], [0, 1]])
H = SimplicialHomology(S)
automorphism = S.apply_automorphism(M)
# shortcut for:
# deformation = S.apply_matrix(M)
# undeformation = deformation.codomain().isomorphism(S) # what if this is not unique? Just pick one (with a keyword argument to return all or fail)
# return automorphism = undeformation * deformation

M = H.matrix(automorphism)
# shortcut for:
# for γ in H.gens():
#    γγ = automorphism(γ)
#    and decompose into a matrix

One application could be something like this:

MatrixGroup([SimplicialHomology(S).matrix(S.automorphism(g))
             for g in S.veech_group().gens()]).change_ring(GF(3)).order()
saraedum commented 1 year ago

cc @sfreedman67

videlec commented 1 year ago

Elements of the Veech group (aka matrices) are not maps between surfaces. As a user interface, I would rather propose something like

S = ...
A = S.affine_automorphism_group()
M = matrix([[1, 2], [0, 1]])
f = A.derivative().section()(M)
H = SimplicialHomology(S)
Mhom = H.hom(f).matrix()

Here

saraedum commented 1 year ago

@videlec that makes sense. I'll make sure to change that once #211 is in.