| Download
Project: admcycles
Views: 724Visibility: Unlisted (only visible to those who know the link)
Image: ubuntu2004from sage.rings.integer_ring import ZZ # pylint: disable=import-error123class Signature(object):4"""5A signature of a stratum.67Attributes:8sig (tuple): signature tuple9g (int): genus10n (int): total number of points11p (int): number of poles12z (int): number of zeroes13poles (tuple): tuple of pole orders14zeroes (tuple): tuple of zero orders15pole_ind (tuple): tuple of indices of poles16zero_ind (tuple): tuple of indices of zeroes1718EXAMPLES::1920sage: from admcycles.diffstrata.sig import Signature21sage: sig = Signature((2,1,-1,0)); sig22Signature((2, 1, -1, 0))23sage: sig.g24225sage: sig.n26427sage: sig.poles28(-1,)29sage: sig.zeroes30(2, 1)31sage: sig.pole_ind32(2,)33sage: sig.zero_ind34(0, 1)35sage: sig.p36137sage: sig.z38239"""40def __init__(self, sig):41"""42Initialise signature4344Args:45sig (tuple): signature tuple of integers adding up to 2g-246"""47self.sig = sig48sum_sig = sum(sig)49if sum_sig % 2:50raise ValueError("Error! Illegal signature: Genus not an integer")51self.g = int(sum_sig // 2) + 152self.n = len(sig)53self.poles = tuple(p for p in sig if p < 0)54self.zeroes = tuple(z for z in sig if z > 0)55self.marked_points = tuple(k for k in sig if k == 0)56self.p = len(self.poles)57self.z = len(self.zeroes)58self.pole_ind = tuple(i for i, p in enumerate(sig) if p < 0)59self.zero_ind = tuple(i for i, z in enumerate(sig) if z > 0)6061def __repr__(self):62return "Signature(%r)" % (self.sig,)6364def __hash__(self):65return hash(self.sig)6667def __eq__(self, other):68try:69return self.sig == other.sig70except AttributeError:71return False727374