def representative(self, reduced=True, alphabet=None): """ Returns the Zorich representative of this connected component. Zorich constructs explicitely interval exchange transformations for each stratum in [Zor08]_. EXAMPLES: :: sage: a = AbelianStratum(6).connected_components()[1] sage: print a.representative(alphabet=range(8)) 0 1 2 3 4 5 6 7 3 2 5 4 7 6 1 0 :: sage: a = AbelianStratum(4,4).connected_components()[1] sage: print a.representative(alphabet=range(11)) 0 1 2 3 4 5 6 7 8 9 10 3 2 5 4 6 8 7 10 9 1 0 """ zeroes = [x//2 for x in self._parent._zeroes if x > 0] n = self._parent._zeroes.count(0) g = self._parent._genus l0 = range(3*g-2) l1 = [3, 2] for k in range(4, 3*g-4, 3): l1 += [k, k+2, k+1] l1 += [1, 0] k = 4 for d in zeroes: for i in range(d-1): del l0[l0.index(k)] del l1[l1.index(k)] k += 3 k += 3 # marked points if n != 0: interval = range(3*g-2, 3*g-2+n) if self._parent._zeroes[0] == 0: k = l0.index(3) l0[k:k] = interval l1[-1:-1] = interval else: l0[1:1] = interval l1.extend(interval) if self._parent._marked_separatrix == 'in': l0.reverse() l1.reverse() if reduced: from sage.dynamics.interval_exchanges.reduced import ReducedPermutationIET return ReducedPermutationIET([l0, l1], alphabet=alphabet) else: from sage.dynamics.interval_exchanges.labelled import LabelledPermutationIET return LabelledPermutationIET([l0, l1], alphabet=alphabet)
def representative(self, reduced=True, alphabet=None): r""" Returns the Zorich representative of this connected component. Zorich constructs explicitely interval exchange transformations for each stratum in [Zor08]_. INPUT: - ``reduced`` - boolean (defaut: ``True``): whether you obtain a reduced or labelled permutation - ``alphabet`` - alphabet or ``None`` (defaut: ``None``): whether you want to specify an alphabet for your representative EXAMPLES: :: sage: c = AbelianStratum(0).connected_components()[0] sage: c H_hyp(0) sage: p = c.representative(alphabet="01") sage: p 0 1 1 0 sage: p.connected_component() H_hyp(0) :: sage: c = AbelianStratum(0,0).connected_components()[0] sage: c H_hyp(0, 0) sage: p = c.representative(alphabet="abc") sage: p a b c c b a sage: p.connected_component() H_hyp(0, 0) :: sage: c = AbelianStratum(2).connected_components()[0] sage: c H_hyp(2) sage: p = c.representative(alphabet="ABCD") sage: p A B C D D C B A sage: p.connected_component() H_hyp(2) :: sage: c = AbelianStratum(1,1).connected_components()[0] sage: c H_hyp(1, 1) sage: p = c.representative(alphabet="01234") sage: p 0 1 2 3 4 4 3 2 1 0 sage: p.connected_component() H_hyp(1, 1) """ g = self._parent._genus n = self._parent._zeroes.count(0) m = len(self._parent._zeroes) - n if m == 0: # on the torus if n == 1: l0 = [0, 1] l1 = [1, 0] elif n == 2: l0 = [0, 1, 2] l1 = [2, 1, 0] else: l0 = range(1, n+2) l1 = [n+1] + range(1, n+1) elif m == 1: # H(2g-2,0^n) or H(0,2g-2,0^(n-1)) l0 = range(1, 2*g+1) l1 = range(2*g, 0, -1) interval = range(2*g+1, 2*g+n+1) if self._parent._zeroes[0] == 0: l0[-1:-1] = interval l1[-1:-1] = interval else: l0[1:1] = interval l1[1:1] = interval else: # H(g-1,g-1,0^n) or H(0,g-1,g-1,0^(n-1)) l0 = range(1, 2*g+2) l1 = range(2*g+1, 0, -1) interval = range(2*g+2, 2*g+n+2) if self._parent._zeroes[0] == 0: l0[-1:-1] = interval l1[-1:-1] = interval else: l0[1:1] = interval l1[1:1] = interval if self._parent._marked_separatrix == 'in': l0.reverse() l1.reverse() if reduced: from sage.dynamics.interval_exchanges.reduced import ReducedPermutationIET return ReducedPermutationIET([l0, l1], alphabet=alphabet) else: from sage.dynamics.interval_exchanges.labelled import LabelledPermutationIET return LabelledPermutationIET([l0, l1], alphabet=alphabet)
def representative(self, reduced=True, alphabet=None): r""" Returns the Zorich representative of this connected component. Zorich constructs explicitely interval exchange transformations for each stratum in [Zor08]_. EXAMPLES: :: sage: c = AbelianStratum(6).connected_components()[2] sage: c H_even(6) sage: p = c.representative(alphabet=range(8)) sage: p 0 1 2 3 4 5 6 7 5 4 3 2 7 6 1 0 sage: p.connected_component() H_even(6) :: sage: c = AbelianStratum(4,4).connected_components()[2] sage: c H_even(4, 4) sage: p = c.representative(alphabet=range(11)) sage: p 0 1 2 3 4 5 6 7 8 9 10 5 4 3 2 6 8 7 10 9 1 0 sage: p.connected_component() H_even(4, 4) """ zeroes = [x for x in self._parent._zeroes if x > 0] n = self._parent._zeroes.count(0) g = self._parent._genus l0 = range(3*g-2) l1 = [6, 5, 4, 3, 2, 7, 9, 8] for k in range(10, 3*g-4, 3): l1 += [k, k+2, k+1] l1 += [1, 0] k = 4 for d in zeroes: for i in range(d/2-1): del l0[l0.index(k)] del l1[l1.index(k)] k += 3 k += 3 # if there are marked points we transform 0 in [3g-2, 3g-3, ...] if n != 0: interval = range(3*g-2, 3*g - 2 + n) if self._parent._zeroes[0] == 0: k = l0.index(6) l0[k:k] = interval l1[-1:-1] = interval else: l0[1:1] = interval l1.extend(interval) if self._parent._marked_separatrix == 'in': l0.reverse() l1.reverse() if reduced: from sage.dynamics.interval_exchanges.reduced import ReducedPermutationIET return ReducedPermutationIET([l0, l1], alphabet=alphabet) else: from sage.dynamics.interval_exchanges.labelled import LabelledPermutationIET return LabelledPermutationIET([l0, l1], alphabet=alphabet)
def representative(self, reduced=True, alphabet=None): r""" Returns the Zorich representative of this connected component. Zorich constructs explicitely interval exchange transformations for each stratum in [Zor08]_. INPUT: - ``reduced`` - boolean (default: ``True``): whether you obtain a reduced or labelled permutation - ``alphabet`` - an alphabet or ``None``: whether you want to specify an alphabet for your permutation OUTPUT: permutation -- a permutation which lives in this component EXAMPLES: :: sage: c = AbelianStratum(1,1,1,1).connected_components()[0] sage: print c H_c(1, 1, 1, 1) sage: p = c.representative(alphabet=range(9)) sage: print p 0 1 2 3 4 5 6 7 8 4 3 2 5 8 7 6 1 0 sage: p.connected_component() H_c(1, 1, 1, 1) """ g = self._parent._genus zeroes = [x for x in self._parent._zeroes if x > 0] n = self._parent._zeroes.count(0) l0 = range(0, 4*g-3) l1 = [4, 3, 2] for k in range(5, 4*g-6, 4): l1 += [k, k+3, k+2, k+1] l1 += [1, 0] k = 3 for d in zeroes: for i in range(d-1): del l0[l0.index(k)] del l1[l1.index(k)] k += 2 k += 2 if n != 0: interval = range(4*g-3, 4*g-3+n) if self._parent._zeroes[0] == 0: k = l0.index(4) l0[k:k] = interval l1[-1:-1] = interval else: l0[1:1] = interval l1.extend(interval) if self._parent._marked_separatrix == 'in': l0.reverse() l1.reverse() if reduced: from sage.dynamics.interval_exchanges.reduced import ReducedPermutationIET return ReducedPermutationIET([l0, l1], alphabet=alphabet) else: from sage.dynamics.interval_exchanges.labelled import LabelledPermutationIET return LabelledPermutationIET([l0, l1], alphabet=alphabet)