unlisted
ubuntu2004class kSignature:1"""2A signature of a stratum of k-differentials.34Attributes:5sig (tuple): signature tuple6g (int): genus7n (int): total number of points8p (int): number of poles9z (int): number of zeroes10poles (tuple): tuple of pole orders11zeroes (tuple): tuple of zero orders12pole_ind (tuple): tuple of indices of poles13zero_ind (tuple): tuple of indices of zeroes1415EXAMPLES::1617sage: from admcycles.diffstrata.sig import kSignature18sage: sig=kSignature((2,1,-1,0), k=1)19sage: sig.g20221sage: sig.n22423sage: sig.poles24(-1,)25sage: sig.zeroes26(2, 1)27sage: sig.pole_ind28(2,)29sage: sig.zero_ind30(0, 1)31sage: sig.p32133sage: sig.z34235"""3637def __init__(self, sig, k):38"""39Initialise signature4041Args:42sig (tuple): signature tuple of integers adding up to k*(2g-2)43k (int): order of the differential.44"""45self.sig = tuple(sig)46sum_sig = sum(sig)47if sum_sig % (2 * k) != 0:48raise ValueError("Error! Illegal signature: Genus not an integer")49self.g = int(sum_sig / (2 * k)) + 150self.n = len(sig)51self.k = k52self.poles = tuple(p for p in sig if p < 0)53self.zeroes = tuple(z for z in sig if z > 0)54self.marked_points = tuple(k for k in sig if k == 0)55self.p = len(self.poles)56self.z = len(self.zeroes)57self.pole_ind = tuple(i for i, p in enumerate(sig) if p < 0)58self.zero_ind = tuple(i for i, z in enumerate(sig) if z > 0)5960def __repr__(self):61if self.k == 1:62return "Signature(%r)" % (self.sig,)63else:64return "Signature(%r, k=%r)" % (self.sig, self.k)6566def __hash__(self):67return hash((self.sig, self.k))6869def __eq__(self, other):70try:71return self.sig == other.sig72except AttributeError:73return False747576class Signature(kSignature):77"""78A signature of an abelian stratum.7980Attributes:81sig (tuple): signature tuple82g (int): genus83n (int): total number of points84p (int): number of poles85z (int): number of zeroes86poles (tuple): tuple of pole orders87zeroes (tuple): tuple of zero orders88pole_ind (tuple): tuple of indices of poles89zero_ind (tuple): tuple of indices of zeroes9091EXAMPLES::9293sage: from admcycles.diffstrata.sig import Signature94sage: sig=Signature((2,1,-1,0))95sage: sig.g96297sage: sig.n98499sage: sig.poles100(-1,)101sage: sig.zeroes102(2, 1)103sage: sig.pole_ind104(2,)105sage: sig.zero_ind106(0, 1)107sage: sig.p1081109sage: sig.z1102111"""112113def __init__(self, sig):114super().__init__(sig, k=1)115116117class QuadraticSignature(kSignature):118"""119A signature of an quadratic stratum.120121Attributes:122sig (tuple): signature tuple123difftype (string): either "p" for primitive or "gs" of global square124g (int): genus125n (int): total number of points126p (int): number of poles127z (int): number of zeroes128poles (tuple): tuple of pole orders129zeroes (tuple): tuple of zero orders130pole_ind (tuple): tuple of indices of poles131zero_ind (tuple): tuple of indices of zeroes132133EXAMPLES::134135sage: from admcycles.diffstrata.sig import QuadraticSignature136sage: sig=QuadraticSignature((4,1,-1,0), "p")137sage: sig.difftype138'p'139sage: sig.g1402141sage: sig.n1424143sage: sig.poles144(-1,)145sage: sig.zeroes146(4, 1)147sage: sig.pole_ind148(2,)149sage: sig.zero_ind150(0, 1)151sage: sig.p1521153sage: sig.z1542155"""156157def __init__(self, sig, difftype):158super().__init__(sig, k=2)159assert difftype in ["p", "gs"]160if difftype == "gs" and any(a % 2 != 0 for a in sig):161raise ValueError(162"Quadratic differentials with odd-order points can't be global squares.")163self.difftype = difftype164165def __repr__(self):166return "QuadraticSignature(%r, %r)" % (self.sig, self.difftype)167168def __hash__(self):169return hash((self.sig, self.k, self.difftype))170171172