Path: blob/master/src/sage/dynamics/flat_surfaces/quadratic_strata.py
8817 views
r"""1Strata of quadratic differentials on Riemann surfaces2"""3from sage.structure.sage_object import SageObject4from sage.rings.integer import Integer5from sage.rings.rational import Rational67class QuadraticStratum(SageObject):8r"""9Stratum of quadratic differentials.10"""11def __init__(self, *l):12"""13TESTS::1415sage: a = QuadraticStratum(-1,-1,-1,-1)16sage: loads(dumps(a)) == a17True18sage: QuadraticStratum([])19Traceback (most recent call last):20...21ValueError: the list must be non empty !22"""23if isinstance(l[0], list) or isinstance(l[0], tuple):24if not l[0]:25raise ValueError("the list must be non empty !")26self._zeroes = []27for (i, j) in l.iteritems():28i = Integer(i)29j = Integer(j)30self._zeroes += [i]*j31else:32for i in l:33i = Integer(i)34self._zeroes = sorted(list(l), reverse=True)353637self._genus = sum(l)/4 + 138self._genus = Integer(self._genus)3940def __repr__(self):41r"""42TESTS::4344sage: a = QuadraticStratum(-1,-1,-1,-1)45sage: print a46Q(-1, -1, -1, -1)47"""48return "Q(" + str(self._zeroes)[1:-1] + ")"4950def __str__(self):51r"""52TESTS::5354sage: a = QuadraticStratum(-1,-1,-1,-1)55sage: print a56Q(-1, -1, -1, -1)57"""58return "Q(" + str(self._zeroes)[1:-1] + ")"5960def __eq__(self, other):61r"""62TESTS::6364sage: QuadraticStratum(0) == QuadraticStratum(0)65True66sage: QuadraticStratum(4) == QuadraticStratum(0)67False68"""69return type(self) == type(other) and self._zeroes == other._zeroes7071def __ne__(self, other):72r"""73TESTS::7475sage: QuadraticStratum(0) != QuadraticStratum(0)76False77sage: QuadraticStratum(4) != QuadraticStratum(0)78True79"""80return type(self) != type(other) or self._zeroes != other._zeroes8182def genus(self):83r"""84Returns the genus.8586EXAMPLES:8788::8990sage: QuadraticStratum(-1,-1,-1,-1).genus()91092"""93return self._genus949596