Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
181 views
unlisted
ubuntu2004
1
class kSignature:
2
"""
3
A signature of a stratum of k-differentials.
4
5
Attributes:
6
sig (tuple): signature tuple
7
g (int): genus
8
n (int): total number of points
9
p (int): number of poles
10
z (int): number of zeroes
11
poles (tuple): tuple of pole orders
12
zeroes (tuple): tuple of zero orders
13
pole_ind (tuple): tuple of indices of poles
14
zero_ind (tuple): tuple of indices of zeroes
15
16
EXAMPLES::
17
18
sage: from admcycles.diffstrata.sig import kSignature
19
sage: sig=kSignature((2,1,-1,0), k=1)
20
sage: sig.g
21
2
22
sage: sig.n
23
4
24
sage: sig.poles
25
(-1,)
26
sage: sig.zeroes
27
(2, 1)
28
sage: sig.pole_ind
29
(2,)
30
sage: sig.zero_ind
31
(0, 1)
32
sage: sig.p
33
1
34
sage: sig.z
35
2
36
"""
37
38
def __init__(self, sig, k):
39
"""
40
Initialise signature
41
42
Args:
43
sig (tuple): signature tuple of integers adding up to k*(2g-2)
44
k (int): order of the differential.
45
"""
46
self.sig = tuple(sig)
47
sum_sig = sum(sig)
48
if sum_sig % (2 * k) != 0:
49
raise ValueError("Error! Illegal signature: Genus not an integer")
50
self.g = int(sum_sig / (2 * k)) + 1
51
self.n = len(sig)
52
self.k = k
53
self.poles = tuple(p for p in sig if p < 0)
54
self.zeroes = tuple(z for z in sig if z > 0)
55
self.marked_points = tuple(k for k in sig if k == 0)
56
self.p = len(self.poles)
57
self.z = len(self.zeroes)
58
self.pole_ind = tuple(i for i, p in enumerate(sig) if p < 0)
59
self.zero_ind = tuple(i for i, z in enumerate(sig) if z > 0)
60
61
def __repr__(self):
62
if self.k == 1:
63
return "Signature(%r)" % (self.sig,)
64
else:
65
return "Signature(%r, k=%r)" % (self.sig, self.k)
66
67
def __hash__(self):
68
return hash((self.sig, self.k))
69
70
def __eq__(self, other):
71
try:
72
return self.sig == other.sig
73
except AttributeError:
74
return False
75
76
77
class Signature(kSignature):
78
"""
79
A signature of an abelian stratum.
80
81
Attributes:
82
sig (tuple): signature tuple
83
g (int): genus
84
n (int): total number of points
85
p (int): number of poles
86
z (int): number of zeroes
87
poles (tuple): tuple of pole orders
88
zeroes (tuple): tuple of zero orders
89
pole_ind (tuple): tuple of indices of poles
90
zero_ind (tuple): tuple of indices of zeroes
91
92
EXAMPLES::
93
94
sage: from admcycles.diffstrata.sig import Signature
95
sage: sig=Signature((2,1,-1,0))
96
sage: sig.g
97
2
98
sage: sig.n
99
4
100
sage: sig.poles
101
(-1,)
102
sage: sig.zeroes
103
(2, 1)
104
sage: sig.pole_ind
105
(2,)
106
sage: sig.zero_ind
107
(0, 1)
108
sage: sig.p
109
1
110
sage: sig.z
111
2
112
"""
113
114
def __init__(self, sig):
115
super().__init__(sig, k=1)
116
117
118
class QuadraticSignature(kSignature):
119
"""
120
A signature of an quadratic stratum.
121
122
Attributes:
123
sig (tuple): signature tuple
124
difftype (string): either "p" for primitive or "gs" of global square
125
g (int): genus
126
n (int): total number of points
127
p (int): number of poles
128
z (int): number of zeroes
129
poles (tuple): tuple of pole orders
130
zeroes (tuple): tuple of zero orders
131
pole_ind (tuple): tuple of indices of poles
132
zero_ind (tuple): tuple of indices of zeroes
133
134
EXAMPLES::
135
136
sage: from admcycles.diffstrata.sig import QuadraticSignature
137
sage: sig=QuadraticSignature((4,1,-1,0), "p")
138
sage: sig.difftype
139
'p'
140
sage: sig.g
141
2
142
sage: sig.n
143
4
144
sage: sig.poles
145
(-1,)
146
sage: sig.zeroes
147
(4, 1)
148
sage: sig.pole_ind
149
(2,)
150
sage: sig.zero_ind
151
(0, 1)
152
sage: sig.p
153
1
154
sage: sig.z
155
2
156
"""
157
158
def __init__(self, sig, difftype):
159
super().__init__(sig, k=2)
160
assert difftype in ["p", "gs"]
161
if difftype == "gs" and any(a % 2 != 0 for a in sig):
162
raise ValueError(
163
"Quadratic differentials with odd-order points can't be global squares.")
164
self.difftype = difftype
165
166
def __repr__(self):
167
return "QuadraticSignature(%r, %r)" % (self.sig, self.difftype)
168
169
def __hash__(self):
170
return hash((self.sig, self.k, self.difftype))
171
172