Reduced permutations¶
Reduced permutations
A reduced (generalized) permutation is better suited to study strata of Abelian (or quadratic) holomorphic forms on Riemann surfaces. The Rauzy diagram is an invariant of such a component. Corentin Boissy proved the identification of Rauzy diagrams with connected components of stratas. But the geometry of the diagram and the relation with the strata is not yet totally understood.
AUTHORS:
Vincent Delecroix (2000-09-29): initial version
- surface_dynamics.interval_exchanges.reduced.FlippedReducedPermutation¶
alias of
ReducedPermutation
- class surface_dynamics.interval_exchanges.reduced.FlippedReducedPermutationIET(intervals=None, alphabet=None, reduced=False, flips=None)[source]¶
Bases:
ReducedPermutation
,FlippedPermutationIET
Flipped Reduced Permutation from iet
EXAMPLES:
sage: from surface_dynamics import * sage: p = iet.Permutation('a b c', 'c b a', flips=['a'], reduced=True) sage: p.rauzy_move(1) -a -b c -a c -b
- list(flips=False)[source]¶
Returns a list representation of self.
INPUT:
flips
- boolean (default: False) if True the output contains2-uple of (label, flip)
EXAMPLES:
sage: from surface_dynamics import iet sage: p = iet.Permutation('a b','b a',reduced=True,flips='b') sage: p.list(flips=True) [[('a', 1), ('b', -1)], [('b', -1), ('a', 1)]] sage: p.list(flips=False) [['a', 'b'], ['b', 'a']] sage: p.alphabet([0,1]) sage: p.list(flips=True) [[(0, 1), (1, -1)], [(1, -1), (0, 1)]] sage: p.list(flips=False) [[0, 1], [1, 0]]
One can recover the initial permutation from this list:
sage: p = iet.Permutation('a b','b a',reduced=True,flips='a') sage: iet.Permutation(p.list(), flips=p.flips(), reduced=True) == p True
- class surface_dynamics.interval_exchanges.reduced.FlippedReducedPermutationLI(intervals=None, alphabet=None, reduced=False, flips=None)[source]¶
Bases:
ReducedPermutation
,FlippedPermutationLI
Flipped Reduced Permutation from li
EXAMPLES:
sage: from surface_dynamics import *
Creation using the GeneralizedPermutation function:
sage: p = iet.GeneralizedPermutation('a a b', 'b c c', reduced=True, flips='a')
- list(flips=False)[source]¶
Returns a list representation of self.
INPUT:
flips
- boolean (default: False) return the list with flips
EXAMPLES:
sage: from surface_dynamics import *
sage: p = iet.GeneralizedPermutation('a a','b b',reduced=True,flips='a') sage: p.list(flips=True) [[('a', -1), ('a', -1)], [('b', 1), ('b', 1)]] sage: p.list(flips=False) [['a', 'a'], ['b', 'b']] sage: p = iet.GeneralizedPermutation('a a b','b c c',reduced=True,flips='abc') sage: p.list(flips=True) [[('a', -1), ('a', -1), ('b', -1)], [('b', -1), ('c', -1), ('c', -1)]] sage: p.list(flips=False) [['a', 'a', 'b'], ['b', 'c', 'c']]
One can rebuild the permutation from the list:
sage: p = iet.GeneralizedPermutation('a a b','b c c',flips='a',reduced=True) sage: iet.GeneralizedPermutation(p.list(),flips=p.flips(),reduced=True) == p True
- rauzy_diagram(**kargs)[source]¶
Returns the associated Rauzy diagram.
For more explanation and a list of arguments try help(iet.RauzyDiagram)
EXAMPLES:
sage: from surface_dynamics import * sage: p = iet.GeneralizedPermutation('a a b','c c b',reduced=True) sage: r = p.rauzy_diagram() sage: p in r True
- class surface_dynamics.interval_exchanges.reduced.FlippedReducedRauzyDiagram(p, right_induction=True, left_induction=False, left_right_inversion=False, top_bottom_inversion=False, symmetric=False)[source]¶
Bases:
FlippedRauzyDiagram
,ReducedRauzyDiagram
Rauzy diagram of flipped reduced permutations.
- class surface_dynamics.interval_exchanges.reduced.ReducedPermutation[source]¶
Bases:
SageObject
Template for reduced objects.
Warning
Internal class! Do not use directly!
- class surface_dynamics.interval_exchanges.reduced.ReducedPermutationIET(intervals=None, alphabet=None, reduced=False, flips=None)[source]¶
Bases:
ReducedPermutation
,OrientablePermutationIET
Reduced permutation from iet
Permutation from iet without numerotation of intervals. For initialization, you should use GeneralizedPermutation which is the class factory for all permutation types.
EXAMPLES:
sage: from surface_dynamics import *
Equality testing (no equality of letters but just of ordering):
sage: p = iet.Permutation('a b c', 'c b a', reduced = True) sage: q = iet.Permutation('p q r', 'r q p', reduced = True) sage: p == q True
Reducibility testing:
sage: p = iet.Permutation('a b c', 'c b a', reduced = True) sage: p.is_irreducible() True
sage: q = iet.Permutation('a b c d', 'b a d c', reduced = True) sage: q.is_irreducible() False
Rauzy movability and Rauzy move:
sage: p = iet.Permutation('a b c', 'c b a', reduced = True) sage: p.has_rauzy_move(1) True sage: p.rauzy_move(1) a b c b c a
Rauzy diagrams:
sage: p = iet.Permutation('a b c d', 'd a b c') sage: p_red = iet.Permutation('a b c d', 'd a b c', reduced = True) sage: d = p.rauzy_diagram() sage: d_red = p_red.rauzy_diagram() sage: p.rauzy_move(0) in d True sage: d.cardinality() 12 sage: d_red.cardinality() 6
- list()[source]¶
Returns a list of two list that represents the permutation.
EXAMPLES:
sage: from surface_dynamics import * sage: p = iet.GeneralizedPermutation('a b','b a',reduced=True) sage: p.list() == [['a', 'b'], ['b', 'a']] True sage: p = iet.GeneralizedPermutation('a a','b b',reduced=True) sage: p.list() == [['a', 'a'], ['b', 'b']] True
- rauzy_class_cardinality(extended=False)[source]¶
Cardinality of Rauzy diagram
As proved in [Del13], there exists a closed formula for the cardinality of Rauzy diagrams. This function uses the formula without any explicit computation of the rauzy class.
INPUT:
extended
- boolean (default: False) - return cardinality for extended Rauzy diagrams
EXAMPLES:
sage: from surface_dynamics import *
Examples for permutations such that the suspensions are tori:
sage: p=iet.Permutation('a b','b a',reduced=True) sage: p.stratum() H_1(0) sage: p.rauzy_diagram() Rauzy diagram with 1 permutation sage: p.rauzy_class_cardinality() 1 sage: p = iet.Permutation('a 1 b','b 1 a',reduced=True) sage: p.stratum() H_1(0^2) sage: p.rauzy_diagram() Rauzy diagram with 3 permutations sage: p.rauzy_class_cardinality() 3 sage: p = iet.Permutation('a 1 2 b','b 1 2 a',reduced=True) sage: p.stratum() H_1(0^3) sage: p.rauzy_diagram() Rauzy diagram with 6 permutations sage: p.rauzy_class_cardinality() 6 sage: p = iet.Permutation('a 1 2 3 b','b 1 2 3 a',reduced=True) sage: p.rauzy_class_cardinality() 10 sage: p = iet.Permutation('a 1 2 3 4 b','b 1 2 3 4 a',reduced=True) sage: p.rauzy_class_cardinality() 15
You should have recognize the sequence 1, 3, 6, 10, 15… which is the sequence with general term the binomial
n(n+1)/2
.An example of extended Rauzy diagram which is different from Rauzy diagram:
sage: p = iet.Permutation('a b c d e f g','g c b f e d a',reduced=True) sage: p.marked_profile() 2o4 [4, 2] sage: pp = p.left_right_inverse() sage: pp.marked_profile() 4o2 [4, 2] sage: p.rauzy_class_cardinality() 261 sage: pp.rauzy_class_cardinality() 509 sage: p.rauzy_class_cardinality(extended=True) 770 sage: 261 + 509 == 770 True
And one can check that this the algorithm for cardinality is True:
sage: p.rauzy_diagram() Rauzy diagram with 261 permutations sage: pp.rauzy_diagram() Rauzy diagram with 509 permutations sage: p.rauzy_diagram(extended=True) Rauzy diagram with 770 permutations
And we end by an example of Rauzy diagram associated to an hyperelliptic component:
sage: p = iet.Permutation('a b c d e 0 f','f e d c b 0 a',reduced=True) sage: p.rauzy_diagram() Rauzy diagram with 37 permutations sage: p.rauzy_class_cardinality() 37 sage: p.rauzy_diagram(extended=True) Rauzy diagram with 254 permutations sage: p.rauzy_class_cardinality(extended=True) 254
- rauzy_diagram(extended=False, **kwds)[source]¶
Returns a Rauzy diagram associated to this permutation
INPUT:
extended
- boolean (default: False) - if True return extended Rauzy diagram
OUTPUT:
A Rauzy diagram
EXAMPLES:
sage: from surface_dynamics import * sage: p = iet.Permutation('a b c d', 'd a b c',reduced=True) sage: d = p.rauzy_diagram() sage: p.rauzy_move(0) in d True sage: p.rauzy_move(1) in d True
For more information, try help RauzyDiagram
- rauzy_move_relabel(winner, side='right')[source]¶
Returns the relabelization obtained from this move.
EXAMPLES:
sage: from surface_dynamics import * sage: p = iet.Permutation('a b c d','d c b a') sage: q = p.reduced() sage: p_t = p.rauzy_move('t') sage: q_t = q.rauzy_move('t') sage: s_t = q.rauzy_move_relabel('t') sage: print(s_t) a->a, b->b, c->c, d->d sage: list(map(s_t, p_t[0])) == list(map(Word, q_t[0])) True sage: list(map(s_t, p_t[1])) == list(map(Word, q_t[1])) True sage: p_b = p.rauzy_move('b') sage: q_b = q.rauzy_move('b') sage: s_b = q.rauzy_move_relabel('b') sage: print(s_b) a->a, b->d, c->b, d->c sage: list(map(s_b, q_b[0])) == list(map(Word, p_b[0])) True sage: list(map(s_b, q_b[1])) == list(map(Word, p_b[1])) True
- class surface_dynamics.interval_exchanges.reduced.ReducedPermutationLI(intervals=None, alphabet=None, reduced=False, flips=None)[source]¶
Bases:
ReducedPermutation
,OrientablePermutationLI
Reduced quadratic (or generalized) permutation.
EXAMPLES:
sage: from surface_dynamics import *
Reducibility testing:
sage: p = iet.GeneralizedPermutation('a b b', 'c c a', reduced = True) sage: p.is_irreducible() True
sage: p = iet.GeneralizedPermutation('a b c a', 'b d d c', reduced = True) sage: p.is_irreducible() False sage: test, decomposition = p.is_irreducible(return_decomposition = True) sage: test False sage: decomposition (['a'], ['c', 'a'], [], ['c'])
Rauzy movavability and Rauzy move:
sage: p = iet.GeneralizedPermutation('a b b', 'c c a', reduced = True) sage: p.has_rauzy_move(0) True sage: p.rauzy_move(0) a a b b c c sage: p.rauzy_move(0).has_rauzy_move(0) False sage: p.rauzy_move(1) a b b c c a
Rauzy diagrams:
sage: p_red = iet.GeneralizedPermutation('a b b', 'c c a', reduced = True) sage: d_red = p_red.rauzy_diagram() sage: d_red.cardinality() 4
- list()[source]¶
The permutations as a list of two lists.
EXAMPLES:
sage: from surface_dynamics import * sage: p = iet.GeneralizedPermutation('a b b', 'c c a', reduced = True) sage: list(p) [['a', 'b', 'b'], ['c', 'c', 'a']]
- rauzy_diagram(**kargs)[source]¶
Returns the associated Rauzy diagram.
The Rauzy diagram of a permutation corresponds to all permutations that we could obtain from this one by Rauzy move. The set obtained is a labelled Graph. The label of vertices being 0 or 1 depending on the type.
OUTPUT:
Rauzy diagram – the graph of permutations obtained by rauzy induction
EXAMPLES:
sage: from surface_dynamics import * sage: p = iet.Permutation('a b c d', 'd a b c') sage: d = p.rauzy_diagram()
- surface_dynamics.interval_exchanges.reduced.ReducedPermutationsIET_iterator(nintervals=None, irreducible=True, alphabet=None)[source]¶
Returns an iterator over reduced permutations
INPUT:
nintervals
- integer or Noneirreducible
- booleanalphabet
- something that should be converted to an alphabet of at least nintervals letters
- class surface_dynamics.interval_exchanges.reduced.ReducedRauzyDiagram(p, right_induction=True, left_induction=False, left_right_inversion=False, top_bottom_inversion=False, symmetric=False)[source]¶
Bases:
RauzyDiagram
Rauzy diagram of reduced permutations