strata
#
Strata of differential on Riemann surfaces
This file gather common code used in
abelian_strata
and
quadratic_strata
.
- class surface_dynamics.flat_surfaces.strata.Strata#
Strata of Abelian or Quadratic differentials.
- class surface_dynamics.flat_surfaces.strata.Stratum(signature, k=1)#
Stratum of holomorphic or meromorphic k-differentials on smooth connected Riemann surfaces.
INPUT:
signature
– a list ofn
integers (determine the angles of conical singularities)k
– optional integer (default1
) the order of the differential
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum((2,), k=1) H_2(2)
TESTS:
sage: S = Stratum((2,), k=1) sage: loads(dumps(S)) == S True sage: S = Stratum((2, 2, 2), k=3) sage: loads(dumps(S)) == S True
Test unique representation:
sage: assert Stratum([1, 2, 1], k=1) is Stratum((2, 1, 1), k=1) sage: assert Stratum([1, 2, 1], k=2) is Stratum((2, 1, 1), k=2) sage: assert Stratum([2, 4, 2], k=4) is Stratum((4, 2, 2), k=4)
- components()#
Lists the connected components of the Stratum.
OUTPUT:
list – a list of connected components of stratum
EXAMPLES:
sage: from surface_dynamics import Stratum
Some abelian strata:
sage: Stratum([0], k=1).components() (H_1(0)^hyp,) sage: Stratum([2], k=1).components() (H_2(2)^hyp,) sage: Stratum([4], k=1).components() (H_3(4)^hyp, H_3(4)^odd) sage: Stratum([2,2], k=1).components() (H_3(2^2)^hyp, H_3(2^2)^odd) sage: Stratum([1,1,1,1], k=1).components() (H_3(1^4)^c,)
Some quadratic strata:
sage: Stratum([12], k=2).components() (Q_4(12)^reg, Q_4(12)^irr) sage: Stratum([6,-1,-1], k=2).components() (Q_2(6, -1^2)^hyp, Q_2(6, -1^2)^nonhyp)
- connected_components()#
Return the connected components of this stratum of differentials.
Abelian holomorphic differentials [KonZor03]
Quadratic differentials with at most simple poles [Lan08]
- dimension()#
Return the complex dimension of this stratum.
The dimension is 2g-2+s+1 where g is the genus of surfaces in the stratum, s the number of singularities. The complex dimension of a stratum is also the number of intervals of any interval exchange transformations associated to the strata.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum((0,), k=1).dimension() 2 sage: Stratum((0,0), k=1).dimension() 3 sage: Stratum((2,), k=1).dimension() 4 sage: Stratum((1,1), k=1).dimension() 5 sage: Stratum({-1:4}, k=2).dimension() 2 sage: Stratum((1, -1), k=1).dimension() 2 sage: Stratum((-1, -1, -2), k=2).dimension() 1 sage: Stratum((-2, -2, -2), k=3).dimension() 1
sage: a = Stratum((4,3,2,1,0), k=1) sage: p = a.permutation_representative() sage: len(p) == a.dimension() True
- genus()#
- is_connected()#
Test if the strata is connected.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([2], k=1).is_connected() True sage: Stratum([2,2], k=1).is_connected() False sage: Stratum([-1,-1,-1,-1], k=2).is_connected() True sage: Stratum([12], k=2).is_connected() False
- is_empty()#
Return True if the stratum is empty
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([2], k=1).is_empty() False sage: Stratum([1,-1], k=2).is_empty() True
- masur_veech_volume(rational=False, method=None)#
Return the Masur-Veech volume of this stratum.
INPUT:
rational
(optional, boolean) - ifFalse
(default) return the Masur-Veech volume and ifTrue
return the Masur-Veech volume divided by zeta(2g).method
(optional string) - the method to use to compute the volume either, seemasur_veech_volume()
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([2], k=1).masur_veech_volume() 1/120*pi^4 sage: Stratum([1,1,1,1], k=1).masur_veech_volume() 1/4860*pi^6 sage: Stratum([20], k=1).masur_veech_volume() 1604064377302075061983/792184445986404135075840000000000*pi^22
- nb_fake_zeros()#
Return the number of fake zeros.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([0], k=1).nb_fake_zeros() doctest:warning ... UserWarning: nb_fake_zeros() has been deprecated and will be removed in a future version of surface-dynamics; use signature() 1 sage: Stratum([1,1,0,0], k=1).nb_fake_zeros() 2 sage: Stratum([0,4,2,2], k=2).nb_fake_zeros() 1
- nb_poles()#
Return the number of poles of this quadratic stratum.
- nb_zeros(fake_zeros=True, poles=True)#
Returns the number of zeros of self.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([0], k=1).nb_zeros() doctest:warning ... UserWarning: nb_zero() has been deprecated and will be removed in a future version of surface-dynamics; use signature() 1 sage: Stratum({2:4,3:2}, k=1).nb_zeros() 6 sage: Stratum({-1:4}, k=2).nb_zeros() 4 sage: Stratum({-1:4,1:4}, k=2).nb_zeros() 8
- number_of_components()#
Returns the number of connected components of self
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([2], k=1).number_of_components() 1 sage: Stratum([4], k=1).number_of_components() 2 sage: Stratum([3,3], k=1).number_of_components() 2
- one_component()#
Returns a connected component of this stratum.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([2], k=1).one_component() H_2(2)^hyp
- permutation_representative(*args, **kwds)#
Return a permutation of interval exchanges associated to this stratum.
This method only makes sense for Abelian and quadratic differentials.
EXAMPLES:
sage: from surface_dynamics import Stratum
Examples from Abelian differentials:
sage: a = Stratum([3,2,1,0,0], k=1) sage: p = a.permutation_representative() sage: p.stratum() H_4(3, 2, 1, 0^2) sage: a = Stratum([2, 2, 2], k=1) sage: p = a.permutation_representative() sage: p.stratum() H_4(2^3)
Examples from quadratic differentials:
sage: a = Stratum([6,-1,-1], k=2) sage: p = a.permutation_representative() sage: p.stratum() Q_2(6, -1^2) sage: a = Stratum([-1,-1,-1,-1,0,0], k=2) sage: p = a.permutation_representative() sage: p.stratum() Q_0(0^2, -1^4)
- random_component()#
Returns a random connected component of this stratum.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Q = Stratum([6,6], k=2) sage: Q.random_component() # random Q_4(6^2)^hyp sage: Q.random_component() # random Q_4(6^2)^reg
- rank()#
Return the rank of this GL(2,R)-invariant manifold (half dimension of the absolute part of the tangent space).
EXAMPLES:
sage: from surface_dynamics import Stratum, QuadraticStrata sage: Stratum((0,0), k=1).rank() 1 sage: Stratum((2,), k=1).rank() 2 sage: Stratum((2,0,0), k=1).rank() 2 sage: Stratum({-1: 4}, k=2).rank() 1 sage: Stratum({-1:4, 0:5}, k=2).rank() 1
Complete list of rank 2 quadratic strata listed by dimension:
sage: for dim in range(4, 9): ....: quad = [Q for Q in QuadraticStrata(dimension=dim) if Q.rank() == 2] ....: print("%d: %s" % (dim, ", ".join(map(str, quad)))) 4: Q_2(5, -1), Q_1(1^2, -1^2), Q_1(3, -1^3), Q_0(1, -1^5) 5: Q_3(8), Q_2(2, 1^2), Q_2(4, 1, -1), Q_2(3, 2, -1), Q_2(6, -1^2), Q_1(2, 1, -1^3), Q_1(4, -1^4), Q_0(2, -1^6) 6: Q_3(6, 2), Q_3(4^2), Q_2(2^2, 1, -1), Q_2(4, 2, -1^2), Q_1(2^2, -1^4) 7: Q_3(4, 2^2), Q_2(2^3, -1^2) 8: Q_3(2^4)
- signature()#
Return the order of zeros with multiplicities.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([1, 2, 3], k=1).signature() (3, 2, 1) sage: Stratum({2: 4}, k=1).signature() (2, 2, 2, 2) sage: Stratum([-1, 1], k=1).signature() (1, -1) sage: Stratum({-1: 4}, k=2).signature() (-1, -1, -1, -1) sage: Stratum({1: 8}, k=2).signature() (1, 1, 1, 1, 1, 1, 1, 1) sage: Stratum({-2: 2, 0: 1}, k=2).signature() (0, -2, -2)
- surface_differential_order()#
Return the order of differentials in this stratum.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([1]*6, 3).surface_differential_order() 3
- surface_genus()#
Return the genus of the surfaces in this stratum.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum((0,), k=1).surface_genus() 1 sage: Stratum((1,1), k=1).surface_genus() 2 sage: Stratum((3,2,1), k=1).surface_genus() 4 sage: Stratum((-1,-1,-1,-1), k=2).surface_genus() 0
- surface_has_finite_area()#
Return whether the k-differentials in this moduli space have finite or infinite area.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum((3, 2, 1), k=1).surface_has_finite_area() True sage: Stratum((1, 0, -1), k=1).surface_has_finite_area() False sage: Stratum([-1]*6, k=3).surface_has_finite_area() True sage: Stratum([-2]*3, k=3).surface_has_finite_area() True sage: Stratum([-3]*2, k=3).surface_has_finite_area() False
- unique_component()#
Returns the unique component of self or raise a ValueError.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: a = Stratum([1,1], k=1) sage: a H_2(1^2) sage: a.unique_component() H_2(1^2)^hyp sage: a = Stratum([3,2,1], k=1) sage: a H_4(3, 2, 1) sage: a.unique_component() H_4(3, 2, 1)^c sage: Stratum({1:1, -1:5}, k=2).unique_component() Q_0(1, -1^5)^c sage: Stratum([3,2,-1], k=2).unique_component() Q_2(3, 2, -1)^nonhyp sage: Stratum([12], k=2).unique_component() Traceback (most recent call last): ... ValueError: several components for this stratum
- zeros(fake_zeros=True, poles=True)#
- class surface_dynamics.flat_surfaces.strata.StratumComponent(stratum)#
Generic class for connected component of a stratum of flat surfaces.
Assumes there are implemented
a method .permutation_representative()
There may be
an attribute ._name
an attribute ._latex_name
- dimension()#
Return the (complex) dimension of this GL(2,R)-invariant orbifold.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([4], k=1).odd_component().dimension() 6 sage: Stratum([12], k=2).regular_component().dimension() 7
- genus()#
- masur_veech_volume(rational=False, method=None)#
Return the Masur-Veech volume of this stratum component.
INPUT:
rational
(optional, boolean) - ifFalse
(default) return the Masur-Veech volume and ifTrue
return the Masur-Veech volume divided by zeta(2g).method
(optional string) - the method to use to compute the volume either, seemasur_veech_volume()
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([4], k=1).hyperelliptic_component().masur_veech_volume() 1/6720*pi^6 sage: Stratum([6], k=1).even_component().masur_veech_volume() 32/1913625*pi^8
- rank()#
Return the rank of this GL(2,R)-invariant orbifold.
EXAMPLES:
sage: from surface_dynamics import Stratum sage: Stratum([4], k=1).odd_component().rank() 3 sage: Stratum([12], k=2).regular_component().rank() 3
- stratum()#
Return the stratum associated to self
EXAMPLES:
sage: from surface_dynamics import Stratum sage: a = Stratum([4,4], k=1) sage: all([c.stratum() == a for c in a.components()]) True
- surface_differential_order()#
- surface_genus()#
Return genus of the corresponding stratum
EXAMPLES:
sage: from surface_dynamics import Stratum sage: a = Stratum([4,4], k=1) sage: a.one_component().surface_genus() 5
- surface_has_finite_area()#
- surface_dynamics.flat_surfaces.strata.list_to_exp_list(l)#
Convert list into exponential notation.
EXAMPLES:
sage: from surface_dynamics import * sage: from surface_dynamics.flat_surfaces.strata import list_to_exp_list sage: l = [0,0,2,2,3,2,0,0,0] sage: list_to_exp_list(l) [(0, 2), (2, 2), (3, 1), (2, 1), (0, 3)]