Extended Affine Weyl Groups¶
AUTHORS:
- Daniel Bump (2012): initial version 
- Daniel Orr (2012): initial version 
- Anne Schilling (2012): initial version 
- Mark Shimozono (2012): initial version 
- Nicolas M. Thiery (2012): initial version 
- Mark Shimozono (2013): twisted affine root systems, multiple realizations, GL_n 
- sage.combinat.root_system.extended_affine_weyl_group.ExtendedAffineWeylGroup(cartan_type, general_linear=None, **print_options)[source]¶
- The extended affine Weyl group. - INPUT: - cartan_type– an affine or finite Cartan type (a finite Cartan type is an abbreviation for its untwisted affinization)
- general_linear– (default:- None) if- Trueand- cartan_typeindicates untwisted type A, returns the universal central extension
- print_options– special instructions for printing elements (see below)
 - Mnemonics - “P” – subgroup of translations 
- “Pv” – subgroup of translations in a dual form 
- “W0” – classical Weyl group 
- “W” – affine Weyl group 
- “F” – fundamental group of length zero elements 
 - There are currently six realizations: “PW0”, “W0P, “WF”, “FW”, “PvW0”, and “W0Pv”. - “PW0” means the semidirect product of “P” with “W0” acting from the right. “W0P” is similar but with “W0” acting from the left. “WF” is the semidirect product of “W” with “F” acting from the right, etc. - Recognized arguments for - print_optionsare:- print_tuple– boolean (default:- False); if- True, elements are printed \((a,b)\), otherwise as \(a * b\)
- affine– prefix for simple reflections in the affine Weyl group
- classical– prefix for simple reflections in the classical Weyl group
- translation– prefix for the translation elements
- fundamental– prefix for the elements of the fundamental group
 - These options are not mutable. - The extended affine Weyl group was introduced in the following references. - REFERENCES: [Iwahori]- Iwahori, Generalized Tits system (Bruhat decomposition) on p-adic semisimple groups. 1966 Algebraic Groups and Discontinuous Subgroups (AMS Proc. Symp. Pure Math.., 1965) pp. 71-83 Amer. Math. Soc., Providence, R.I. [Bour]- Bourbaki, Lie Groups and Lie Algebras IV.2 - Notation - \(R\) – an irreducible affine root system 
- \(I\) – set of nodes of the Dynkin diagram of \(R\) 
- \(R_0\) – the classical subsystem of \(R\) 
- \(I_0\) – set of nodes of the Dynkin diagram of \(R_0\) 
- \(E\) – extended affine Weyl group of type \(R\) 
- \(W\) – affine Weyl group of type \(R\) 
- \(W_0\) – finite (classical) Weyl group (of type \(R_0\)) 
- \(M\) – translation lattice for \(W\) 
- \(L\) – translation lattice for \(E\) 
- \(F\) – fundamental subgroup of \(E\) (the length zero elements) 
- \(P\) – finite weight lattice 
- \(Q\) – finite root lattice 
- \(P^\vee\) – finite coweight lattice 
- \(Q^\vee\) – finite coroot lattice 
 - Translation lattices - The styles “PW0” and “W0P” use the following lattices: - Untwisted affine: \(L = P^\vee\), \(M = Q^\vee\) 
- Dual of untwisted affine: \(L = P\), \(M = Q\) 
- \(BC_n\) (\(A_{2n}^{(2)}\)): \(L = M = P\) 
- Dual of \(BC_n\) (\(A_{2n}^{(2)\dagger}\)): \(L = M = P^\vee\) 
 - The styles “PvW0” and “W0Pv” use the following lattices: - Untwisted affine: The weight lattice of the dual finite Cartan type. 
- Dual untwisted affine: The same as for “PW0” and “W0P”. 
 - For mixed affine type (\(A_{2n}^{(2)}\), aka \(\tilde{BC}_n\), and their affine duals) the styles “PvW0” and “W0Pv” are not implemented. - Finite and affine Weyl groups \(W_0\) and \(W\) - The finite Weyl group \(W_0\) is generated by the simple reflections \(s_i\) for \(i \in I_0\) where \(s_i\) is the reflection across a suitable hyperplane \(H_i\) through the origin in the real span \(V\) of the lattice \(M\). - \(R\) specifies another (affine) hyperplane \(H_0\). The affine Weyl group \(W\) is generated by \(W_0\) and the reflection \(S_0\) across \(H_0\). - Extended affine Weyl group \(E\) - The complement in \(V\) of the set \(H\) of hyperplanes obtained from the \(H_i\) by the action of \(W\), has connected components called alcoves. \(W\) acts freely and transitively on the set of alcoves. After the choice of a certain alcove (the fundamental alcove), there is an induced bijection from \(W\) to the set of alcoves under which the identity in \(W\) maps to the fundamental alcove. - Then \(L\) is the largest sublattice of \(V\), whose translations stabilize the set of alcoves. - There are isomorphisms \[\begin{split}\begin{aligned} W &\cong M \rtimes W_0 \cong W_0 \ltimes M \\ E &\cong L \rtimes W_0 \cong W_0 \ltimes L \end{aligned}\end{split}\]- Fundamental group of affine Dynkin automorphisms - Since \(L\) acts on the set of alcoves, the group \(F = L/M\) may be viewed as a subgroup of the symmetries of the fundamental alcove or equivalently the symmetries of the affine Dynkin diagram. \(F\) acts on the set of alcoves and hence on \(W\). Conjugation by an element of \(F\) acts on \(W\) by permuting the indices of simple reflections. - There are isomorphisms \[E \cong F \ltimes W \cong W \rtimes F\]- An affine Dynkin node is special if it is conjugate to the zero node under some affine Dynkin automorphism. - There is a bijection \(i\) \(\mapsto\) \(\pi_i\) from the set of special nodes to the group \(F\), where \(\pi_i\) is the unique element of \(F\) that sends \(0\) to \(i\). When \(L=P\) (resp. \(L=P^\vee\)) the element \(\pi_i\) is induced (under the isomorphism \(F \cong L/M\)) by addition of the coset of the \(i\)-th fundamental weight (resp. coweight). - The length function of the Coxeter group \(W\) may be extended to \(E\) by \(\ell(w \pi) = \ell(w)\) where \(w \in W\) and \(\pi\in F\). This is the number of hyperplanes in \(H\) separating the fundamental alcove from its image by \(w \pi\) (or equivalently \(w\)). - It is known that if \(G\) is the compact Lie group of adjoint type with root system \(R_0\) then \(F\) is isomorphic to the fundamental group of \(G\), or to the center of its simply-connected covering group. That is why we call \(F\) the fundamental group. - In the future we may want to build an element of the group from an appropriate linear map f on some of the root lattice realizations for this Cartan type: W.from_endomorphism(f). - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(["A",2,1]); E Extended affine Weyl group of type ['A', 2, 1] sage: type(E) <class 'sage.combinat.root_system.extended_affine_weyl_group.ExtendedAffineWeylGroup_Class_with_category'> sage: PW0 = E.PW0(); PW0 Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Coweight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) sage: W0P = E.W0P(); W0P Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) acting on Multiplicative form of Coweight lattice of the Root system of type ['A', 2] sage: PvW0 = E.PvW0(); PvW0 Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Weight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) sage: W0Pv = E.W0Pv(); W0Pv Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) acting on Multiplicative form of Weight lattice of the Root system of type ['A', 2] sage: WF = E.WF(); WF Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) acted upon by Fundamental group of type ['A', 2, 1] sage: FW = E.FW(); FW Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Fundamental group of type ['A', 2, 1] acting on Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(["A",Integer(2),Integer(1)]); E Extended affine Weyl group of type ['A', 2, 1] >>> type(E) <class 'sage.combinat.root_system.extended_affine_weyl_group.ExtendedAffineWeylGroup_Class_with_category'> >>> PW0 = E.PW0(); PW0 Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Coweight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) >>> W0P = E.W0P(); W0P Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) acting on Multiplicative form of Coweight lattice of the Root system of type ['A', 2] >>> PvW0 = E.PvW0(); PvW0 Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Weight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) >>> W0Pv = E.W0Pv(); W0Pv Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) acting on Multiplicative form of Weight lattice of the Root system of type ['A', 2] >>> WF = E.WF(); WF Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) acted upon by Fundamental group of type ['A', 2, 1] >>> FW = E.FW(); FW Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Fundamental group of type ['A', 2, 1] acting on Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) - When the realizations are constructed from each other as above, there are built-in coercions between them. - sage: F = E.fundamental_group() sage: x = WF.from_reduced_word([0,1,2]) * WF(F(2)); x S0*S1*S2 * pi[2] sage: FW(x) pi[2] * S1*S2*S0 sage: W0P(x) s1*s2*s1 * t[-2*Lambdacheck[1] - Lambdacheck[2]] sage: PW0(x) t[Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2*s1 sage: PvW0(x) t[Lambda[1] + 2*Lambda[2]] * s1*s2*s1 - >>> from sage.all import * >>> F = E.fundamental_group() >>> x = WF.from_reduced_word([Integer(0),Integer(1),Integer(2)]) * WF(F(Integer(2))); x S0*S1*S2 * pi[2] >>> FW(x) pi[2] * S1*S2*S0 >>> W0P(x) s1*s2*s1 * t[-2*Lambdacheck[1] - Lambdacheck[2]] >>> PW0(x) t[Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2*s1 >>> PvW0(x) t[Lambda[1] + 2*Lambda[2]] * s1*s2*s1 - The translation lattice and its distinguished basis are obtained from - E:- sage: L = E.lattice(); L Coweight lattice of the Root system of type ['A', 2] sage: b = E.lattice_basis(); b Finite family {1: Lambdacheck[1], 2: Lambdacheck[2]} - >>> from sage.all import * >>> L = E.lattice(); L Coweight lattice of the Root system of type ['A', 2] >>> b = E.lattice_basis(); b Finite family {1: Lambdacheck[1], 2: Lambdacheck[2]} - Translation lattice elements can be coerced into any realization: - sage: PW0(b[1]-b[2]) t[Lambdacheck[1] - Lambdacheck[2]] sage: FW(b[1]-b[2]) pi[2] * S0*S1 - >>> from sage.all import * >>> PW0(b[Integer(1)]-b[Integer(2)]) t[Lambdacheck[1] - Lambdacheck[2]] >>> FW(b[Integer(1)]-b[Integer(2)]) pi[2] * S0*S1 - The dual form of the translation lattice and its basis are similarly obtained: - sage: Lv = E.dual_lattice(); Lv Weight lattice of the Root system of type ['A', 2] sage: bv = E.dual_lattice_basis(); bv Finite family {1: Lambda[1], 2: Lambda[2]} sage: FW(bv[1]-bv[2]) pi[2] * S0*S1 - >>> from sage.all import * >>> Lv = E.dual_lattice(); Lv Weight lattice of the Root system of type ['A', 2] >>> bv = E.dual_lattice_basis(); bv Finite family {1: Lambda[1], 2: Lambda[2]} >>> FW(bv[Integer(1)]-bv[Integer(2)]) pi[2] * S0*S1 - The abstract fundamental group is accessed from - E:- sage: F = E.fundamental_group(); F Fundamental group of type ['A', 2, 1] - >>> from sage.all import * >>> F = E.fundamental_group(); F Fundamental group of type ['A', 2, 1] - Its elements are indexed by the set of special nodes of the affine Dynkin diagram: - sage: E.cartan_type().special_nodes() (0, 1, 2) sage: F.special_nodes() (0, 1, 2) sage: [F(i) for i in F.special_nodes()] [pi[0], pi[1], pi[2]] - >>> from sage.all import * >>> E.cartan_type().special_nodes() (0, 1, 2) >>> F.special_nodes() (0, 1, 2) >>> [F(i) for i in F.special_nodes()] [pi[0], pi[1], pi[2]] - There is a coercion from the fundamental group into each realization: - sage: F(2) pi[2] sage: WF(F(2)) pi[2] sage: W0P(F(2)) s2*s1 * t[-Lambdacheck[1]] sage: W0Pv(F(2)) s2*s1 * t[-Lambda[1]] - >>> from sage.all import * >>> F(Integer(2)) pi[2] >>> WF(F(Integer(2))) pi[2] >>> W0P(F(Integer(2))) s2*s1 * t[-Lambdacheck[1]] >>> W0Pv(F(Integer(2))) s2*s1 * t[-Lambda[1]] - Using - Eone may access the classical and affine Weyl groups and their morphisms into each realization:- sage: W0 = E.classical_weyl(); W0 Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) sage: v = W0.from_reduced_word([1,2,1]); v s1*s2*s1 sage: PW0(v) s1*s2*s1 sage: WF(v) S1*S2*S1 sage: W = E.affine_weyl(); W Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) sage: w = W.from_reduced_word([2,1,0]); w S2*S1*S0 sage: WF(w) S2*S1*S0 sage: PW0(w) t[Lambdacheck[1] - 2*Lambdacheck[2]] * s1 - >>> from sage.all import * >>> W0 = E.classical_weyl(); W0 Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) >>> v = W0.from_reduced_word([Integer(1),Integer(2),Integer(1)]); v s1*s2*s1 >>> PW0(v) s1*s2*s1 >>> WF(v) S1*S2*S1 >>> W = E.affine_weyl(); W Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) >>> w = W.from_reduced_word([Integer(2),Integer(1),Integer(0)]); w S2*S1*S0 >>> WF(w) S2*S1*S0 >>> PW0(w) t[Lambdacheck[1] - 2*Lambdacheck[2]] * s1 - Note that for untwisted affine type, the dual form of the classical Weyl group is isomorphic to the usual one, but acts on a different lattice and is therefore different to sage: - sage: W0v = E.dual_classical_weyl(); W0v Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) sage: v = W0v.from_reduced_word([1,2]) sage: x = PvW0(v); x s1*s2 sage: y = PW0(v); y s1*s2 sage: x.parent() == y.parent() False - >>> from sage.all import * >>> W0v = E.dual_classical_weyl(); W0v Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) >>> v = W0v.from_reduced_word([Integer(1),Integer(2)]) >>> x = PvW0(v); x s1*s2 >>> y = PW0(v); y s1*s2 >>> x.parent() == y.parent() False - However, because there is a coercion from - PvW0to- PW0, the elements- xand- ycompare as equal:- sage: x == y True - >>> from sage.all import * >>> x == y True - An element can be created directly from a reduced word: - sage: PW0.from_reduced_word([2,1,0]) t[Lambdacheck[1] - 2*Lambdacheck[2]] * s1 - >>> from sage.all import * >>> PW0.from_reduced_word([Integer(2),Integer(1),Integer(0)]) t[Lambdacheck[1] - 2*Lambdacheck[2]] * s1 - Here is a demonstration of the printing options: - sage: E = ExtendedAffineWeylGroup(["A",2,1], affine='sx', classical='Sx', ....: translation='x', fundamental='pix') sage: PW0 = E.PW0() sage: y = PW0(E.lattice_basis()[1]); y x[Lambdacheck[1]] sage: FW = E.FW() sage: FW(y) pix[1] * sx2*sx1 sage: PW0.an_element() x[2*Lambdacheck[1] + 2*Lambdacheck[2]] * Sx1*Sx2 - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(["A",Integer(2),Integer(1)], affine='sx', classical='Sx', ... translation='x', fundamental='pix') >>> PW0 = E.PW0() >>> y = PW0(E.lattice_basis()[Integer(1)]); y x[Lambdacheck[1]] >>> FW = E.FW() >>> FW(y) pix[1] * sx2*sx1 >>> PW0.an_element() x[2*Lambdacheck[1] + 2*Lambdacheck[2]] * Sx1*Sx2 - Todo - Implement a “slow” action of \(E\) on any affine root or weight lattice realization. 
- Implement the level \(m\) actions of \(E\) and \(W\) on the lattices of finite type. 
- Implement the relevant methods from the usual affine Weyl group 
- Implementation by matrices: style “M”. 
- Use case: implement the Hecke algebra on top of this 
 - The semidirect product construction in sage currently only admits multiplicative groups. Therefore for the styles involving “P” and “Pv”, one must convert the additive group of translations \(L\) into a multiplicative group by applying the - sage.groups.group_exp.GroupExpfunctor.- The general linear case - The general linear group is not semisimple. Sage can build its extended affine Weyl group: - sage: E = ExtendedAffineWeylGroup(['A',2,1], general_linear=True); E Extended affine Weyl group of GL(3) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], general_linear=True); E Extended affine Weyl group of GL(3) - If the Cartan type is - ['A', n-1, 1]and the parameter- general_linearis not True, the extended affine Weyl group that is built will be for \(SL_n\), not \(GL_n\). But if- general_linearis True, let \(W_a\) and \(W_e\) be the affine and extended affine Weyl groups. We make the following nonstandard definition: the extended affine Weyl group \(W_e(GL_n)\) is defined by\[W_e(GL_n) = P(GL_n) \rtimes W\]- where \(W\) is the finite Weyl group (the symmetric group \(S_n\)) and \(P(GL_n)\) is the weight lattice of \(GL_n\), which is usually identified with the lattice \(\ZZ^n\) of \(n\)-tuples of integers: - sage: PW0 = E.PW0(); PW0 Extended affine Weyl group of GL(3) realized by Semidirect product of Multiplicative form of Ambient space of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the ambient space) sage: PW0.an_element() t[(2, 2, 3)] * s1*s2 - >>> from sage.all import * >>> PW0 = E.PW0(); PW0 Extended affine Weyl group of GL(3) realized by Semidirect product of Multiplicative form of Ambient space of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the ambient space) >>> PW0.an_element() t[(2, 2, 3)] * s1*s2 - There is an isomorphism \[W_e(GL_n) = \ZZ \ltimes W_a\]- where the group of integers \(\ZZ\) (with generator \(\pi\)) acts on \(W_a\) by \[\pi\, s_i\, \pi^{-1} = s_{i+1}\]- and the indices of the simple reflections are taken modulo \(n\): - sage: FW = E.FW(); FW Extended affine Weyl group of GL(3) realized by Semidirect product of Fundamental group of GL(3) acting on Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) sage: FW.an_element() pi[5] * S0*S1*S2 - >>> from sage.all import * >>> FW = E.FW(); FW Extended affine Weyl group of GL(3) realized by Semidirect product of Fundamental group of GL(3) acting on Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) >>> FW.an_element() pi[5] * S0*S1*S2 - We regard \(\ZZ\) as the fundamental group of affine type \(GL_n\): - sage: F = E.fundamental_group(); F Fundamental group of GL(3) sage: F.special_nodes() Integer Ring sage: x = FW.from_fundamental(F(10)); x pi[10] sage: x*x pi[20] sage: E.PvW0()(x*x) t[(7, 7, 6)] * s2*s1 - >>> from sage.all import * >>> F = E.fundamental_group(); F Fundamental group of GL(3) >>> F.special_nodes() Integer Ring >>> x = FW.from_fundamental(F(Integer(10))); x pi[10] >>> x*x pi[20] >>> E.PvW0()(x*x) t[(7, 7, 6)] * s2*s1 
- class sage.combinat.root_system.extended_affine_weyl_group.ExtendedAffineWeylGroup_Class(cartan_type, general_linear, **print_options)[source]¶
- Bases: - UniqueRepresentation,- Parent- The parent-with-realization class of an extended affine Weyl group. - class ExtendedAffineWeylGroupFW(E)[source]¶
- Bases: - GroupSemidirectProduct,- BindableClass- Extended affine Weyl group, realized as the semidirect product of the affine Weyl group by the fundamental group. - INPUT: - E– a parent with realization in- ExtendedAffineWeylGroup_Class
 - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).FW() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Fundamental group of type ['A', 2, 1] acting on Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).FW() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Fundamental group of type ['A', 2, 1] acting on Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) - Element[source]¶
- alias of - ExtendedAffineWeylGroupFWElement
 - from_affine_weyl(w)[source]¶
- Return the image of \(w\) under the map of the affine Weyl group into the right (affine Weyl group) factor in the “FW” style. - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], print_tuple=True) sage: E.FW().from_affine_weyl(E.affine_weyl().from_reduced_word([0,2,1])) (pi[0], S0*S2*S1) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], print_tuple=True) >>> E.FW().from_affine_weyl(E.affine_weyl().from_reduced_word([Integer(0),Integer(2),Integer(1)])) (pi[0], S0*S2*S1) 
 - from_fundamental(f)[source]¶
- Return the image of the fundamental group element \(f\) into - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], print_tuple=True) sage: E.FW().from_fundamental(E.fundamental_group()(2)) (pi[2], 1) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], print_tuple=True) >>> E.FW().from_fundamental(E.fundamental_group()(Integer(2))) (pi[2], 1) 
 - simple_reflections()[source]¶
- Return the family of simple reflections of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1],print_tuple=True).FW().simple_reflections() Finite family {0: (pi[0], S0), 1: (pi[0], S1), 2: (pi[0], S2)} - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)],print_tuple=True).FW().simple_reflections() Finite family {0: (pi[0], S0), 1: (pi[0], S1), 2: (pi[0], S2)} 
 
 - class ExtendedAffineWeylGroupFWElement[source]¶
- Bases: - GroupSemidirectProductElement- The element class for the “FW” realization. - action_on_affine_roots(beta)[source]¶
- Act by - selfon the affine root lattice element- beta.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], affine='s') sage: x = E.FW().an_element(); x pi[2] * s0*s1*s2 sage: v = RootSystem(['A',2,1]).root_lattice().an_element(); v 2*alpha[0] + 2*alpha[1] + 3*alpha[2] sage: x.action_on_affine_roots(v) alpha[0] + alpha[1] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], affine='s') >>> x = E.FW().an_element(); x pi[2] * s0*s1*s2 >>> v = RootSystem(['A',Integer(2),Integer(1)]).root_lattice().an_element(); v 2*alpha[0] + 2*alpha[1] + 3*alpha[2] >>> x.action_on_affine_roots(v) alpha[0] + alpha[1] 
 - has_descent(i, side='right', positive=False)[source]¶
- Return whether - selfhas descent at \(i\).- INPUT: - i– an affine Dynkin index
 - OPTIONAL: - side–- 'left'or- 'right'(default:- 'right')
- positive– boolean (default:- False)
 - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: x = E.FW().an_element(); x pi[2] * S0*S1*S2 sage: [(i, x.has_descent(i)) for i in E.cartan_type().index_set()] [(0, False), (1, False), (2, True)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> x = E.FW().an_element(); x pi[2] * S0*S1*S2 >>> [(i, x.has_descent(i)) for i in E.cartan_type().index_set()] [(0, False), (1, False), (2, True)] 
 - to_affine_weyl_right()[source]¶
- Project - selfto the right (affine Weyl group) factor in the “FW” style.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: x = E.FW().from_translation(E.lattice_basis()[1]); x pi[1] * S2*S1 sage: x.to_affine_weyl_right() S2*S1 - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> x = E.FW().from_translation(E.lattice_basis()[Integer(1)]); x pi[1] * S2*S1 >>> x.to_affine_weyl_right() S2*S1 
 - to_fundamental_group()[source]¶
- Return the projection of - selfto the fundamental group in the “FW” style.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: x = E.FW().from_translation(E.lattice_basis()[2]); x pi[2] * S1*S2 sage: x.to_fundamental_group() pi[2] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> x = E.FW().from_translation(E.lattice_basis()[Integer(2)]); x pi[2] * S1*S2 >>> x.to_fundamental_group() pi[2] 
 
 - class ExtendedAffineWeylGroupPW0(E)[source]¶
- Bases: - GroupSemidirectProduct,- BindableClass- Extended affine Weyl group, realized as the semidirect product of the translation lattice by the finite Weyl group. - INPUT: - E– a parent with realization in- ExtendedAffineWeylGroup_Class
 - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).PW0() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Coweight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PW0() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Coweight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) - Element[source]¶
- alias of - ExtendedAffineWeylGroupPW0Element
 - S0()[source]¶
- Return the affine simple reflection. - EXAMPLES: - sage: ExtendedAffineWeylGroup(['B',2]).PW0().S0() t[Lambdacheck[2]] * s2*s1*s2 - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['B',Integer(2)]).PW0().S0() t[Lambdacheck[2]] * s2*s1*s2 
 - from_classical_weyl(w)[source]¶
- Return the image of \(w\) under the homomorphism of the classical Weyl group into - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup("A3",print_tuple=True) sage: E.PW0().from_classical_weyl(E.classical_weyl().from_reduced_word([1,2])) (t[0], s1*s2) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup("A3",print_tuple=True) >>> E.PW0().from_classical_weyl(E.classical_weyl().from_reduced_word([Integer(1),Integer(2)])) (t[0], s1*s2) 
 - from_translation(la)[source]¶
- Map the translation lattice element - lainto- self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], translation='tau', ....: print_tuple=True) sage: la = E.lattice().an_element(); la 2*Lambdacheck[1] + 2*Lambdacheck[2] sage: E.PW0().from_translation(la) (tau[2*Lambdacheck[1] + 2*Lambdacheck[2]], 1) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], translation='tau', ... print_tuple=True) >>> la = E.lattice().an_element(); la 2*Lambdacheck[1] + 2*Lambdacheck[2] >>> E.PW0().from_translation(la) (tau[2*Lambdacheck[1] + 2*Lambdacheck[2]], 1) 
 - simple_reflection(i)[source]¶
- Return the \(i\)-th simple reflection in - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup("G2") sage: [(i, E.PW0().simple_reflection(i)) for i in E.cartan_type().index_set()] [(0, t[Lambdacheck[2]] * s2*s1*s2*s1*s2), (1, s1), (2, s2)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup("G2") >>> [(i, E.PW0().simple_reflection(i)) for i in E.cartan_type().index_set()] [(0, t[Lambdacheck[2]] * s2*s1*s2*s1*s2), (1, s1), (2, s2)] 
 - simple_reflections()[source]¶
- Return a family for the simple reflections of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup("A3").PW0().simple_reflections() Finite family {0: t[Lambdacheck[1] + Lambdacheck[3]] * s1*s2*s3*s2*s1, 1: s1, 2: s2, 3: s3} - >>> from sage.all import * >>> ExtendedAffineWeylGroup("A3").PW0().simple_reflections() Finite family {0: t[Lambdacheck[1] + Lambdacheck[3]] * s1*s2*s3*s2*s1, 1: s1, 2: s2, 3: s3} 
 
 - class ExtendedAffineWeylGroupPW0Element[source]¶
- Bases: - GroupSemidirectProductElement- The element class for the “PW0” realization. - action(la)[source]¶
- Return the action of - selfon an element- laof the translation lattice.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]); PW0 = E.PW0() sage: x = PW0.an_element(); x t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2 sage: la = E.lattice().an_element(); la 2*Lambdacheck[1] + 2*Lambdacheck[2] sage: x.action(la) -2*Lambdacheck[1] + 4*Lambdacheck[2] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]); PW0 = E.PW0() >>> x = PW0.an_element(); x t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2 >>> la = E.lattice().an_element(); la 2*Lambdacheck[1] + 2*Lambdacheck[2] >>> x.action(la) -2*Lambdacheck[1] + 4*Lambdacheck[2] 
 - has_descent(i, side='right', positive=False)[source]¶
- Return whether - selfhas \(i\) as a descent.- INPUT: - i– an affine Dynkin node
 - OPTIONAL: - side–- 'left'or- 'right'(default:- 'right')
- positive– boolean (default:- False)
 - EXAMPLES: - sage: w = ExtendedAffineWeylGroup(['A',4,2]).PW0().from_reduced_word([0,1]); w t[Lambda[1]] * s1*s2 sage: w.has_descent(0, side='left') True - >>> from sage.all import * >>> w = ExtendedAffineWeylGroup(['A',Integer(4),Integer(2)]).PW0().from_reduced_word([Integer(0),Integer(1)]); w t[Lambda[1]] * s1*s2 >>> w.has_descent(Integer(0), side='left') True 
 - to_classical_weyl()[source]¶
- Return the image of - selfunder the homomorphism that projects to the classical Weyl group factor after rewriting it in either style “PW0” or “W0P”.- EXAMPLES: - sage: s = ExtendedAffineWeylGroup(['A',2,1]).PW0().S0(); s t[Lambdacheck[1] + Lambdacheck[2]] * s1*s2*s1 sage: s.to_classical_weyl() s1*s2*s1 - >>> from sage.all import * >>> s = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PW0().S0(); s t[Lambdacheck[1] + Lambdacheck[2]] * s1*s2*s1 >>> s.to_classical_weyl() s1*s2*s1 
 - to_translation_left()[source]¶
- The image of - selfunder the map that projects to the translation lattice factor after factoring it to the left as in style “PW0”.- EXAMPLES: - sage: s = ExtendedAffineWeylGroup(['A',2,1]).PW0().S0(); s t[Lambdacheck[1] + Lambdacheck[2]] * s1*s2*s1 sage: s.to_translation_left() Lambdacheck[1] + Lambdacheck[2] - >>> from sage.all import * >>> s = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PW0().S0(); s t[Lambdacheck[1] + Lambdacheck[2]] * s1*s2*s1 >>> s.to_translation_left() Lambdacheck[1] + Lambdacheck[2] 
 
 - class ExtendedAffineWeylGroupPvW0(E)[source]¶
- Bases: - GroupSemidirectProduct,- BindableClass- Extended affine Weyl group, realized as the semidirect product of the dual form of the translation lattice by the finite Weyl group. - INPUT: - E– a parent with realization in- ExtendedAffineWeylGroup_Class
 - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).PvW0() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Weight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PvW0() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Weight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) - Element[source]¶
- alias of - ExtendedAffineWeylGroupPvW0Element
 - from_dual_classical_weyl(w)[source]¶
- Return the image of \(w\) under the homomorphism of the dual form of the classical Weyl group into - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1], print_tuple=True) sage: E.PvW0().from_dual_classical_weyl( ....: E.dual_classical_weyl().from_reduced_word([1,2])) (t[0], s1*s2) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)], print_tuple=True) >>> E.PvW0().from_dual_classical_weyl( ... E.dual_classical_weyl().from_reduced_word([Integer(1),Integer(2)])) (t[0], s1*s2) 
 - from_dual_translation(la)[source]¶
- Map the dual translation lattice element - lainto- self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], translation='tau', ....: print_tuple=True) sage: la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] sage: E.PvW0().from_dual_translation(la) (tau[2*Lambda[1] + 2*Lambda[2]], 1) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], translation='tau', ... print_tuple=True) >>> la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] >>> E.PvW0().from_dual_translation(la) (tau[2*Lambda[1] + 2*Lambda[2]], 1) 
 - simple_reflections()[source]¶
- Return a family for the simple reflections of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).PvW0().simple_reflections() Finite family {0: t[Lambda[1] + Lambda[3]] * s1*s2*s3*s2*s1, 1: s1, 2: s2, 3: s3} - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).PvW0().simple_reflections() Finite family {0: t[Lambda[1] + Lambda[3]] * s1*s2*s3*s2*s1, 1: s1, 2: s2, 3: s3} 
 
 - class ExtendedAffineWeylGroupPvW0Element[source]¶
- Bases: - GroupSemidirectProductElement- The element class for the “PvW0” realization. - dual_action(la)[source]¶
- Return the action of - selfon an element- laof the dual version of the translation lattice.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: x = E.PvW0().an_element(); x t[2*Lambda[1] + 2*Lambda[2]] * s1*s2 sage: la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] sage: x.dual_action(la) -2*Lambda[1] + 4*Lambda[2] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> x = E.PvW0().an_element(); x t[2*Lambda[1] + 2*Lambda[2]] * s1*s2 >>> la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] >>> x.dual_action(la) -2*Lambda[1] + 4*Lambda[2] 
 - has_descent(i, side='right', positive=False)[source]¶
- Return whether - selfhas \(i\) as a descent.- INPUT: - i– an affine Dynkin index
 - OPTIONAL: - side–- 'left'or- 'right'(default:- 'right')
- positive– boolean (default:- False)
 - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',4,2]) sage: w = E.PvW0().from_reduced_word([0,1]); w t[Lambda[1]] * s1*s2 sage: [(i, w.has_descent(i, side='left')) for i in E.cartan_type().index_set()] [(0, True), (1, False), (2, False)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(4),Integer(2)]) >>> w = E.PvW0().from_reduced_word([Integer(0),Integer(1)]); w t[Lambda[1]] * s1*s2 >>> [(i, w.has_descent(i, side='left')) for i in E.cartan_type().index_set()] [(0, True), (1, False), (2, False)] 
 - to_dual_classical_weyl()[source]¶
- Return the image of - selfunder the homomorphism that projects to the dual classical Weyl group factor after rewriting it in either style “PvW0” or “W0Pv”.- EXAMPLES: - sage: s = ExtendedAffineWeylGroup(['A',2,1]).PvW0().simple_reflection(0); s t[Lambda[1] + Lambda[2]] * s1*s2*s1 sage: s.to_dual_classical_weyl() s1*s2*s1 - >>> from sage.all import * >>> s = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PvW0().simple_reflection(Integer(0)); s t[Lambda[1] + Lambda[2]] * s1*s2*s1 >>> s.to_dual_classical_weyl() s1*s2*s1 
 - to_dual_translation_left()[source]¶
- The image of - selfunder the map that projects to the dual translation lattice factor after factoring it to the left as in style “PvW0”.- EXAMPLES: - sage: s = ExtendedAffineWeylGroup(['A',2,1]).PvW0().simple_reflection(0); s t[Lambda[1] + Lambda[2]] * s1*s2*s1 sage: s.to_dual_translation_left() Lambda[1] + Lambda[2] - >>> from sage.all import * >>> s = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PvW0().simple_reflection(Integer(0)); s t[Lambda[1] + Lambda[2]] * s1*s2*s1 >>> s.to_dual_translation_left() Lambda[1] + Lambda[2] 
 
 - class ExtendedAffineWeylGroupW0P(E)[source]¶
- Bases: - GroupSemidirectProduct,- BindableClass- Extended affine Weyl group, realized as the semidirect product of the finite Weyl group by the translation lattice. - INPUT: - E– a parent with realization in- ExtendedAffineWeylGroup_Class
 - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).W0P() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) acting on Multiplicative form of Coweight lattice of the Root system of type ['A', 2] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).W0P() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) acting on Multiplicative form of Coweight lattice of the Root system of type ['A', 2] - Element[source]¶
- alias of - ExtendedAffineWeylGroupW0PElement
 - S0()[source]¶
- Return the zero-th simple reflection in style “W0P”. - EXAMPLES: - sage: ExtendedAffineWeylGroup(["A",3,1]).W0P().S0() s1*s2*s3*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[3]] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(["A",Integer(3),Integer(1)]).W0P().S0() s1*s2*s3*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[3]] 
 - from_classical_weyl(w)[source]¶
- Return the image of the classical Weyl group element \(w\) in - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1],print_tuple=True) sage: E.W0P().from_classical_weyl(E.classical_weyl().from_reduced_word([2,1])) (s2*s1, t[0]) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)],print_tuple=True) >>> E.W0P().from_classical_weyl(E.classical_weyl().from_reduced_word([Integer(2),Integer(1)])) (s2*s1, t[0]) 
 - from_translation(la)[source]¶
- Return the image of the lattice element - lain- self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1],print_tuple=True) sage: E.W0P().from_translation(E.lattice().an_element()) (1, t[2*Lambdacheck[1] + 2*Lambdacheck[2]]) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)],print_tuple=True) >>> E.W0P().from_translation(E.lattice().an_element()) (1, t[2*Lambdacheck[1] + 2*Lambdacheck[2]]) 
 - simple_reflection(i)[source]¶
- Return the \(i\)-th simple reflection in - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); W0P = E.W0P() sage: [(i, W0P.simple_reflection(i)) for i in E.cartan_type().index_set()] [(0, s1*s2*s3*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[3]]), (1, s1), (2, s2), (3, s3)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); W0P = E.W0P() >>> [(i, W0P.simple_reflection(i)) for i in E.cartan_type().index_set()] [(0, s1*s2*s3*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[3]]), (1, s1), (2, s2), (3, s3)] 
 - simple_reflections()[source]¶
- Return the family of simple reflections. - EXAMPLES: - sage: ExtendedAffineWeylGroup(["A",3,1]).W0P().simple_reflections() Finite family {0: s1*s2*s3*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[3]], 1: s1, 2: s2, 3: s3} - >>> from sage.all import * >>> ExtendedAffineWeylGroup(["A",Integer(3),Integer(1)]).W0P().simple_reflections() Finite family {0: s1*s2*s3*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[3]], 1: s1, 2: s2, 3: s3} 
 
 - class ExtendedAffineWeylGroupW0PElement[source]¶
- Bases: - GroupSemidirectProductElement- The element class for the W0P realization. - has_descent(i, side='right', positive=False)[source]¶
- Return whether - selfhas \(i\) as a descent.- INPUT: - i– an index
 - OPTIONAL: - side–- 'left'or- 'right'(default:- 'right')
- positive– boolean (default:- False)
 - EXAMPLES: - sage: W0P = ExtendedAffineWeylGroup(['A',4,2]).W0P() sage: w = W0P.from_reduced_word([0,1]); w s1*s2 * t[Lambda[1] - Lambda[2]] sage: w.has_descent(0, side='left') True - >>> from sage.all import * >>> W0P = ExtendedAffineWeylGroup(['A',Integer(4),Integer(2)]).W0P() >>> w = W0P.from_reduced_word([Integer(0),Integer(1)]); w s1*s2 * t[Lambda[1] - Lambda[2]] >>> w.has_descent(Integer(0), side='left') True 
 - to_classical_weyl()[source]¶
- Project - selfinto the classical Weyl group.- EXAMPLES: - sage: x = ExtendedAffineWeylGroup(['A',2,1]).W0P().simple_reflection(0); x s1*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[2]] sage: x.to_classical_weyl() s1*s2*s1 - >>> from sage.all import * >>> x = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).W0P().simple_reflection(Integer(0)); x s1*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[2]] >>> x.to_classical_weyl() s1*s2*s1 
 - to_translation_right()[source]¶
- Project onto the right (translation) factor in the “W0P” style. - EXAMPLES: - sage: x = ExtendedAffineWeylGroup(['A',2,1]).W0P().simple_reflection(0); x s1*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[2]] sage: x.to_translation_right() -Lambdacheck[1] - Lambdacheck[2] - >>> from sage.all import * >>> x = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).W0P().simple_reflection(Integer(0)); x s1*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[2]] >>> x.to_translation_right() -Lambdacheck[1] - Lambdacheck[2] 
 
 - class ExtendedAffineWeylGroupW0Pv(E)[source]¶
- Bases: - GroupSemidirectProduct,- BindableClass- Extended affine Weyl group, realized as the semidirect product of the finite Weyl group, acting on the dual form of the translation lattice. - INPUT: - E– a parent with realization in- ExtendedAffineWeylGroup_Class
 - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).W0Pv() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) acting on Multiplicative form of Weight lattice of the Root system of type ['A', 2] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).W0Pv() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) acting on Multiplicative form of Weight lattice of the Root system of type ['A', 2] - Element[source]¶
- alias of - ExtendedAffineWeylGroupW0PvElement
 - from_dual_classical_weyl(w)[source]¶
- Return the image of \(w\) under the homomorphism of the dual form of the classical Weyl group into - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1],print_tuple=True) sage: E.W0Pv().from_dual_classical_weyl(E.dual_classical_weyl().from_reduced_word([1,2])) (s1*s2, t[0]) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)],print_tuple=True) >>> E.W0Pv().from_dual_classical_weyl(E.dual_classical_weyl().from_reduced_word([Integer(1),Integer(2)])) (s1*s2, t[0]) 
 - from_dual_translation(la)[source]¶
- Map the dual translation lattice element - lainto- self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], translation='tau', ....: print_tuple=True) sage: la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] sage: E.W0Pv().from_dual_translation(la) (1, tau[2*Lambda[1] + 2*Lambda[2]]) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], translation='tau', ... print_tuple=True) >>> la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] >>> E.W0Pv().from_dual_translation(la) (1, tau[2*Lambda[1] + 2*Lambda[2]]) 
 - simple_reflections()[source]¶
- Return a family for the simple reflections of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).W0Pv().simple_reflections() Finite family {0: s1*s2*s3*s2*s1 * t[-Lambda[1] - Lambda[3]], 1: s1, 2: s2, 3: s3} - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).W0Pv().simple_reflections() Finite family {0: s1*s2*s3*s2*s1 * t[-Lambda[1] - Lambda[3]], 1: s1, 2: s2, 3: s3} 
 
 - class ExtendedAffineWeylGroupW0PvElement[source]¶
- Bases: - GroupSemidirectProductElement- The element class for the “W0Pv” realization. - dual_action(la)[source]¶
- Return the action of - selfon an element- laof the dual version of the translation lattice.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: x = E.W0Pv().an_element(); x s1*s2 * t[2*Lambda[1] + 2*Lambda[2]] sage: la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] sage: x.dual_action(la) -8*Lambda[1] + 4*Lambda[2] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> x = E.W0Pv().an_element(); x s1*s2 * t[2*Lambda[1] + 2*Lambda[2]] >>> la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] >>> x.dual_action(la) -8*Lambda[1] + 4*Lambda[2] 
 - has_descent(i, side='right', positive=False)[source]¶
- Return whether - selfhas \(i\) as a descent.- INPUT: - i– an affine Dynkin index
 - OPTIONAL: - side–- 'left'or- 'right'(default:- 'right')
- positive– boolean (default:- False)
 - EXAMPLES: - sage: w = ExtendedAffineWeylGroup(['A',4,2]).W0Pv().from_reduced_word([0,1]); w s1*s2 * t[Lambda[1] - Lambda[2]] sage: w.has_descent(0, side='left') True - >>> from sage.all import * >>> w = ExtendedAffineWeylGroup(['A',Integer(4),Integer(2)]).W0Pv().from_reduced_word([Integer(0),Integer(1)]); w s1*s2 * t[Lambda[1] - Lambda[2]] >>> w.has_descent(Integer(0), side='left') True 
 - to_dual_classical_weyl()[source]¶
- Return the image of - selfunder the homomorphism that projects to the dual classical Weyl group factor after rewriting it in either style “PvW0” or “W0Pv”.- EXAMPLES: - sage: s = ExtendedAffineWeylGroup(['A',2,1]).W0Pv().simple_reflection(0); s s1*s2*s1 * t[-Lambda[1] - Lambda[2]] sage: s.to_dual_classical_weyl() s1*s2*s1 - >>> from sage.all import * >>> s = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).W0Pv().simple_reflection(Integer(0)); s s1*s2*s1 * t[-Lambda[1] - Lambda[2]] >>> s.to_dual_classical_weyl() s1*s2*s1 
 - to_dual_translation_right()[source]¶
- The image of - selfunder the map that projects to the dual translation lattice factor after factoring it to the right as in style “W0Pv”.- EXAMPLES: - sage: s = ExtendedAffineWeylGroup(['A',2,1]).W0Pv().simple_reflection(0); s s1*s2*s1 * t[-Lambda[1] - Lambda[2]] sage: s.to_dual_translation_right() -Lambda[1] - Lambda[2] - >>> from sage.all import * >>> s = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).W0Pv().simple_reflection(Integer(0)); s s1*s2*s1 * t[-Lambda[1] - Lambda[2]] >>> s.to_dual_translation_right() -Lambda[1] - Lambda[2] 
 
 - class ExtendedAffineWeylGroupWF(E)[source]¶
- Bases: - GroupSemidirectProduct,- BindableClass- Extended affine Weyl group, realized as the semidirect product of the affine Weyl group by the fundamental group. - INPUT: - E– a parent with realization in- ExtendedAffineWeylGroup_Class
 - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).WF() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) acted upon by Fundamental group of type ['A', 2, 1] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).WF() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) acted upon by Fundamental group of type ['A', 2, 1] - Element[source]¶
- alias of - ExtendedAffineWeylGroupWFElement
 - from_affine_weyl(w)[source]¶
- Return the image of the affine Weyl group element \(w\) in - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['C',2,1], print_tuple=True) sage: E.WF().from_affine_weyl(E.affine_weyl().from_reduced_word([1,2,1,0])) (S1*S2*S1*S0, pi[0]) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['C',Integer(2),Integer(1)], print_tuple=True) >>> E.WF().from_affine_weyl(E.affine_weyl().from_reduced_word([Integer(1),Integer(2),Integer(1),Integer(0)])) (S1*S2*S1*S0, pi[0]) 
 - from_fundamental(f)[source]¶
- Return the image of \(f\) under the homomorphism from the fundamental group into the right (fundamental group) factor in “WF” style. - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['E',6,1], print_tuple=True); WF = E.WF() sage: F = E.fundamental_group() sage: [(x, WF.from_fundamental(x)) for x in F] [(pi[0], (1, pi[0])), (pi[1], (1, pi[1])), (pi[6], (1, pi[6]))] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['E',Integer(6),Integer(1)], print_tuple=True); WF = E.WF() >>> F = E.fundamental_group() >>> [(x, WF.from_fundamental(x)) for x in F] [(pi[0], (1, pi[0])), (pi[1], (1, pi[1])), (pi[6], (1, pi[6]))] 
 - simple_reflections()[source]¶
- Return the family of simple reflections. - EXAMPLES: - sage: ExtendedAffineWeylGroup(["A",3,1], affine='r').WF().simple_reflections() Finite family {0: r0, 1: r1, 2: r2, 3: r3} - >>> from sage.all import * >>> ExtendedAffineWeylGroup(["A",Integer(3),Integer(1)], affine='r').WF().simple_reflections() Finite family {0: r0, 1: r1, 2: r2, 3: r3} 
 
 - class ExtendedAffineWeylGroupWFElement[source]¶
- Bases: - GroupSemidirectProductElement- Element class for the “WF” realization. - bruhat_le(x)[source]¶
- Return whether - selfis less than or equal to \(x\) in the Bruhat order.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], affine='s', ....: print_tuple=True); WF = E.WF() sage: r = E.affine_weyl().from_reduced_word sage: v = r([1,0]) sage: w = r([1,2,0]) sage: v.bruhat_le(w) True sage: vv = WF.from_affine_weyl(v); vv (s1*s0, pi[0]) sage: ww = WF.from_affine_weyl(w); ww (s1*s2*s0, pi[0]) sage: vv.bruhat_le(ww) True sage: f = E.fundamental_group()(2); f pi[2] sage: ff = WF.from_fundamental(f); ff (1, pi[2]) sage: vv.bruhat_le(ww*ff) False sage: (vv*ff).bruhat_le(ww*ff) True - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], affine='s', ... print_tuple=True); WF = E.WF() >>> r = E.affine_weyl().from_reduced_word >>> v = r([Integer(1),Integer(0)]) >>> w = r([Integer(1),Integer(2),Integer(0)]) >>> v.bruhat_le(w) True >>> vv = WF.from_affine_weyl(v); vv (s1*s0, pi[0]) >>> ww = WF.from_affine_weyl(w); ww (s1*s2*s0, pi[0]) >>> vv.bruhat_le(ww) True >>> f = E.fundamental_group()(Integer(2)); f pi[2] >>> ff = WF.from_fundamental(f); ff (1, pi[2]) >>> vv.bruhat_le(ww*ff) False >>> (vv*ff).bruhat_le(ww*ff) True 
 - has_descent(i, side='right', positive=False)[source]¶
- Return whether - selfhas \(i\) as a descent.- INPUT: - i– an affine Dynkin index
 - OPTIONAL: - side–- 'left'or- 'right'(default:- 'right')
- positive– boolean (default:- False)
 - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: x = E.WF().an_element(); x S0*S1*S2 * pi[2] sage: [(i, x.has_descent(i)) for i in E.cartan_type().index_set()] [(0, True), (1, False), (2, False)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> x = E.WF().an_element(); x S0*S1*S2 * pi[2] >>> [(i, x.has_descent(i)) for i in E.cartan_type().index_set()] [(0, True), (1, False), (2, False)] 
 - to_affine_weyl_left()[source]¶
- Project - selfto the left (affine Weyl group) factor in the “WF” style.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: x = E.WF().from_translation(E.lattice_basis()[1]); x S0*S2 * pi[1] sage: x.to_affine_weyl_left() S0*S2 - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> x = E.WF().from_translation(E.lattice_basis()[Integer(1)]); x S0*S2 * pi[1] >>> x.to_affine_weyl_left() S0*S2 
 - to_fundamental_group()[source]¶
- Project - selfto the right (fundamental group) factor in the “WF” style.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: x = E.WF().from_translation(E.lattice_basis()[1]); x S0*S2 * pi[1] sage: x.to_fundamental_group() pi[1] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> x = E.WF().from_translation(E.lattice_basis()[Integer(1)]); x S0*S2 * pi[1] >>> x.to_fundamental_group() pi[1] 
 
 - FW()[source]¶
- Realizes - selfin “FW”-style.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).FW() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Fundamental group of type ['A', 2, 1] acting on Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).FW() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Fundamental group of type ['A', 2, 1] acting on Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) 
 - PW0()[source]¶
- Realizes - selfin “PW0”-style.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).PW0() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Coweight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PW0() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Coweight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) 
 - PW0_to_WF_func(x)[source]¶
- Implement coercion from style “PW0” to “WF”. - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(["A", 2, 1]) sage: x = E.PW0().an_element(); x t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2 sage: E.PW0_to_WF_func(x) S0*S1*S2*S0*S1*S0 - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(["A", Integer(2), Integer(1)]) >>> x = E.PW0().an_element(); x t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2 >>> E.PW0_to_WF_func(x) S0*S1*S2*S0*S1*S0 - Warning - This function cannot use coercion, because it is used to define the coercion maps. 
 - PvW0()[source]¶
- Realizes - selfin “PvW0”-style.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).PvW0() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Weight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PvW0() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Weight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) 
 - class Realizations(parent_with_realization)[source]¶
- Bases: - Category_realization_of_parent- The category of the realizations of an extended affine Weyl group - class ElementMethods[source]¶
- Bases: - object- action(la)[source]¶
- Action of - selfon a lattice element- la.- INPUT: - self– an element of the extended affine Weyl group
- la– an element of the translation lattice of the extended affine Weyl group, the lattice denoted by the mnemonic “P” in the documentation for- ExtendedAffineWeylGroup().
 - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], affine='s') sage: x = E.FW().an_element(); x pi[2] * s0*s1*s2 sage: la = E.lattice().an_element(); la 2*Lambdacheck[1] + 2*Lambdacheck[2] sage: x.action(la) 5*Lambdacheck[1] - 3*Lambdacheck[2] sage: E = ExtendedAffineWeylGroup(['C',2,1], affine='s') sage: x = E.PW0().from_translation(E.lattice_basis()[1]) sage: x.action(E.lattice_basis()[2]) Lambdacheck[1] + Lambdacheck[2] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], affine='s') >>> x = E.FW().an_element(); x pi[2] * s0*s1*s2 >>> la = E.lattice().an_element(); la 2*Lambdacheck[1] + 2*Lambdacheck[2] >>> x.action(la) 5*Lambdacheck[1] - 3*Lambdacheck[2] >>> E = ExtendedAffineWeylGroup(['C',Integer(2),Integer(1)], affine='s') >>> x = E.PW0().from_translation(E.lattice_basis()[Integer(1)]) >>> x.action(E.lattice_basis()[Integer(2)]) Lambdacheck[1] + Lambdacheck[2] - Warning - Must be implemented by style “PW0”. 
 - action_on_affine_roots(beta)[source]¶
- Act by - selfon the affine root lattice element- beta.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: beta = E.cartan_type().root_system().root_lattice().an_element(); beta 2*alpha[0] + 2*alpha[1] + 3*alpha[2] sage: x = E.FW().an_element(); x pi[2] * S0*S1*S2 sage: x.action_on_affine_roots(beta) alpha[0] + alpha[1] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> beta = E.cartan_type().root_system().root_lattice().an_element(); beta 2*alpha[0] + 2*alpha[1] + 3*alpha[2] >>> x = E.FW().an_element(); x pi[2] * S0*S1*S2 >>> x.action_on_affine_roots(beta) alpha[0] + alpha[1] - Warning - Must be implemented by style “FW”. 
 - alcove_walk_signs()[source]¶
- Return a signed alcove walk for - self.- INPUT: - An element - selfof the extended affine Weyl group.
 - OUTPUT: - A 3-tuple (\(g\), - rw,- signs).
 - ALGORITHM: - The element - selfcan be uniquely written- self= \(g\) * \(w\) where \(g\) has length zero and \(w\) is an element of the nonextended affine Weyl group. Let \(w\) have reduced word- rw. Starting with \(g\) and applying simple reflections from- rw, one obtains a sequence of extended affine Weyl group elements (that is, alcoves) and simple roots. The signs give the sequence of sides on which the alcoves lie, relative to the face indicated by the simple roots.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); FW=E.FW() sage: w = FW.from_reduced_word([0,2,1,3,0])*FW.from_fundamental(1); w pi[1] * S3*S1*S2*S0*S3 sage: w.alcove_walk_signs() (pi[1], [3, 1, 2, 0, 3], [-1, 1, -1, -1, 1]) - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); FW=E.FW() >>> w = FW.from_reduced_word([Integer(0),Integer(2),Integer(1),Integer(3),Integer(0)])*FW.from_fundamental(Integer(1)); w pi[1] * S3*S1*S2*S0*S3 >>> w.alcove_walk_signs() (pi[1], [3, 1, 2, 0, 3], [-1, 1, -1, -1, 1]) 
 - apply_simple_projection(i, side='right', length_increasing=True)[source]¶
- Return the product of - selfby the simple reflection \(s_i\) if that product is of greater length than- selfand otherwise return- self.- INPUT: - self– an element of the extended affine Weyl group
- i– a Dynkin node (index of a simple reflection \(s_i\))
- side–- 'right'or- 'left'(default:- 'right') according to which side of- selfthe reflection \(s_i\) should be multiplied
- length_increasing– boolean (default:- True); if- False, do the above with the word “greater” replaced by “less”
 - EXAMPLES: - sage: x = ExtendedAffineWeylGroup(['A',3,1]).WF().an_element(); x S0*S1*S2*S3 * pi[3] sage: x.apply_simple_projection(1) S0*S1*S2*S3*S0 * pi[3] sage: x.apply_simple_projection(1, length_increasing=False) S0*S1*S2*S3 * pi[3] - >>> from sage.all import * >>> x = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).WF().an_element(); x S0*S1*S2*S3 * pi[3] >>> x.apply_simple_projection(Integer(1)) S0*S1*S2*S3*S0 * pi[3] >>> x.apply_simple_projection(Integer(1), length_increasing=False) S0*S1*S2*S3 * pi[3] 
 - apply_simple_reflection(i, side='right')[source]¶
- Apply the \(i\)-th simple reflection to - self.- EXAMPLES: - sage: x = ExtendedAffineWeylGroup(['A',3,1]).WF().an_element(); x S0*S1*S2*S3 * pi[3] sage: x.apply_simple_reflection(1) S0*S1*S2*S3*S0 * pi[3] sage: x.apply_simple_reflection(0, side='left') S1*S2*S3 * pi[3] - >>> from sage.all import * >>> x = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).WF().an_element(); x S0*S1*S2*S3 * pi[3] >>> x.apply_simple_reflection(Integer(1)) S0*S1*S2*S3*S0 * pi[3] >>> x.apply_simple_reflection(Integer(0), side='left') S1*S2*S3 * pi[3] 
 - bruhat_le(x)[source]¶
- Return whether - self<= \(x\) in Bruhat order.- INPUT: - self– an element of the extended affine Weyl group
- x– another element with the same parent as- self
 - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], print_tuple=True); WF = E.WF() sage: W = E.affine_weyl() sage: v = W.from_reduced_word([2,1,0]) sage: w = W.from_reduced_word([2,0,1,0]) sage: v.bruhat_le(w) True sage: vx = WF.from_affine_weyl(v); vx (S2*S1*S0, pi[0]) sage: wx = WF.from_affine_weyl(w); wx (S2*S0*S1*S0, pi[0]) sage: vx.bruhat_le(wx) True sage: F = E.fundamental_group() sage: f = WF.from_fundamental(F(2)) sage: vx.bruhat_le(wx*f) False sage: (vx*f).bruhat_le(wx*f) True - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], print_tuple=True); WF = E.WF() >>> W = E.affine_weyl() >>> v = W.from_reduced_word([Integer(2),Integer(1),Integer(0)]) >>> w = W.from_reduced_word([Integer(2),Integer(0),Integer(1),Integer(0)]) >>> v.bruhat_le(w) True >>> vx = WF.from_affine_weyl(v); vx (S2*S1*S0, pi[0]) >>> wx = WF.from_affine_weyl(w); wx (S2*S0*S1*S0, pi[0]) >>> vx.bruhat_le(wx) True >>> F = E.fundamental_group() >>> f = WF.from_fundamental(F(Integer(2))) >>> vx.bruhat_le(wx*f) False >>> (vx*f).bruhat_le(wx*f) True - Warning - Must be implemented by “WF”. 
 - coset_representative(index_set, side='right')[source]¶
- Return the minimum length representative in the coset of - selfwith respect to the subgroup generated by the reflections given by- index_set.- INPUT: - self– an element of the extended affine Weyl group
- index_set– a subset of the set of Dynkin nodes
- side–- 'right'or- 'left'(default:- 'right') the side on which the subgroup acts
 - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); WF = E.WF() sage: b = E.lattice_basis() sage: I0 = E.cartan_type().classical().index_set() sage: [WF.from_translation(x).coset_representative(index_set=I0) for x in b] [pi[1], pi[2], pi[3]] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); WF = E.WF() >>> b = E.lattice_basis() >>> I0 = E.cartan_type().classical().index_set() >>> [WF.from_translation(x).coset_representative(index_set=I0) for x in b] [pi[1], pi[2], pi[3]] 
 - dual_action(la)[source]¶
- Action of - selfon a dual lattice element- la.- INPUT: - self– an element of the extended affine Weyl group
- la– an element of the dual translation lattice of the extended affine Weyl group, the lattice denoted by the mnemonic “Pv” in the documentation for- ExtendedAffineWeylGroup().
 - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1], affine='s') sage: x = E.FW().an_element(); x pi[2] * s0*s1*s2 sage: la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] sage: x.dual_action(la) 5*Lambda[1] - 3*Lambda[2] sage: E = ExtendedAffineWeylGroup(['C',2,1], affine='s') sage: x = E.PvW0().from_dual_translation(E.dual_lattice_basis()[1]) sage: x.dual_action(E.dual_lattice_basis()[2]) Lambda[1] + Lambda[2] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)], affine='s') >>> x = E.FW().an_element(); x pi[2] * s0*s1*s2 >>> la = E.dual_lattice().an_element(); la 2*Lambda[1] + 2*Lambda[2] >>> x.dual_action(la) 5*Lambda[1] - 3*Lambda[2] >>> E = ExtendedAffineWeylGroup(['C',Integer(2),Integer(1)], affine='s') >>> x = E.PvW0().from_dual_translation(E.dual_lattice_basis()[Integer(1)]) >>> x.dual_action(E.dual_lattice_basis()[Integer(2)]) Lambda[1] + Lambda[2] - Warning - Must be implemented by style “PvW0”. 
 - face_data(i)[source]¶
- Return a description of one of the bounding hyperplanes of the alcove of an extended affine Weyl group element. - INPUT: - self– an element of the extended affine Weyl group
- i– an affine Dynkin node
 - OUTPUT: - A 2-tuple \((m,\beta)\) defined as follows. 
 - ALGORITHM: - Each element of the extended affine Weyl group corresponds to an alcove, and each alcove has a face for each affine Dynkin node. Given the data of - selfand \(i\), let the extended affine Weyl group element- selfact on the affine simple root \(\alpha_i\), yielding a real affine root, which can be expressed uniquely as\[``self`` \cdot \alpha_i = m \delta + \beta\]- where \(m\) is an integer (the height of the \(i\)-th bounding hyperplane of the alcove of - self) and \(\beta\) is a classical root (the normal vector for the hyperplane which points towards the alcove).- EXAMPLES: - sage: x = ExtendedAffineWeylGroup(['A',2,1]).PW0().an_element(); x t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2 sage: x.face_data(0) (-1, alpha[1]) - >>> from sage.all import * >>> x = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PW0().an_element(); x t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2 >>> x.face_data(Integer(0)) (-1, alpha[1]) 
 - first_descent(side='right', positive=False, index_set=None)[source]¶
- Return the first descent of - self.- INPUT: - side–- 'left'or- 'right'(default:- 'right')
- positive– boolean (default:- False)
- index_set– an optional subset of Dynkin nodes
 - If - index_setis not- None, then the descent must be in the- index_set.- EXAMPLES: - sage: x = ExtendedAffineWeylGroup(['A',3,1]).WF().an_element(); x S0*S1*S2*S3 * pi[3] sage: x.first_descent() 0 sage: x.first_descent(side='left') 0 sage: x.first_descent(positive=True) 1 sage: x.first_descent(side='left',positive=True) 1 - >>> from sage.all import * >>> x = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).WF().an_element(); x S0*S1*S2*S3 * pi[3] >>> x.first_descent() 0 >>> x.first_descent(side='left') 0 >>> x.first_descent(positive=True) 1 >>> x.first_descent(side='left',positive=True) 1 
 - has_descent(i, side='right', positive=False)[source]¶
- Return whether - self* \(s_i\) <- selfwhere \(s_i\) is the \(i\)-th simple reflection in the realized group.- INPUT: - i– an affine Dynkin index
 - OPTIONAL: - side–- 'right'or- 'left'(default:- 'right')
- positive– boolean (default:- False)
 - If - side='left', then the reflection acts on the left. If- positive=True, then the inequality is reversed.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); WF = E.WF() sage: F = E.fundamental_group() sage: x = WF.an_element(); x S0*S1*S2*S3 * pi[3] sage: I = E.cartan_type().index_set() sage: [(i, x.has_descent(i)) for i in I] [(0, True), (1, False), (2, False), (3, False)] sage: [(i, x.has_descent(i,side='left')) for i in I] [(0, True), (1, False), (2, False), (3, False)] sage: [(i, x.has_descent(i,positive=True)) for i in I] [(0, False), (1, True), (2, True), (3, True)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); WF = E.WF() >>> F = E.fundamental_group() >>> x = WF.an_element(); x S0*S1*S2*S3 * pi[3] >>> I = E.cartan_type().index_set() >>> [(i, x.has_descent(i)) for i in I] [(0, True), (1, False), (2, False), (3, False)] >>> [(i, x.has_descent(i,side='left')) for i in I] [(0, True), (1, False), (2, False), (3, False)] >>> [(i, x.has_descent(i,positive=True)) for i in I] [(0, False), (1, True), (2, True), (3, True)] - Warning - This method is abstract because it is used in the recursive coercions between “PW0” and “WF” and other methods use this coercion. 
 - is_affine_grassmannian()[source]¶
- Return whether - selfis affine Grassmannian.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]); PW0 = E.PW0() sage: F = E.fundamental_group() sage: [(x,PW0.from_fundamental(x).is_affine_grassmannian()) for x in F] [(pi[0], True), (pi[1], True), (pi[2], True)] sage: b = E.lattice_basis() sage: [(-x,PW0.from_translation(-x).is_affine_grassmannian()) for x in b] [(-Lambdacheck[1], True), (-Lambdacheck[2], True)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]); PW0 = E.PW0() >>> F = E.fundamental_group() >>> [(x,PW0.from_fundamental(x).is_affine_grassmannian()) for x in F] [(pi[0], True), (pi[1], True), (pi[2], True)] >>> b = E.lattice_basis() >>> [(-x,PW0.from_translation(-x).is_affine_grassmannian()) for x in b] [(-Lambdacheck[1], True), (-Lambdacheck[2], True)] 
 - is_grassmannian(index_set, side='right')[source]¶
- Return whether - selfis of minimum length in its coset with respect to the subgroup generated by the reflections of- index_set.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); PW0 = E.PW0() sage: x = PW0.from_translation(E.lattice_basis()[1]); x t[Lambdacheck[1]] sage: I = E.cartan_type().index_set() sage: [(i, x.is_grassmannian(index_set=[i])) for i in I] [(0, True), (1, False), (2, True), (3, True)] sage: [(i, x.is_grassmannian(index_set=[i], side='left')) for i in I] [(0, False), (1, True), (2, True), (3, True)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); PW0 = E.PW0() >>> x = PW0.from_translation(E.lattice_basis()[Integer(1)]); x t[Lambdacheck[1]] >>> I = E.cartan_type().index_set() >>> [(i, x.is_grassmannian(index_set=[i])) for i in I] [(0, True), (1, False), (2, True), (3, True)] >>> [(i, x.is_grassmannian(index_set=[i], side='left')) for i in I] [(0, False), (1, True), (2, True), (3, True)] 
 - is_translation()[source]¶
- Return whether - selfis a translation element or not.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]); FW = E.FW() sage: F = E.fundamental_group() sage: FW.from_affine_weyl(E.affine_weyl().from_reduced_word([1,2,1,0])).is_translation() True sage: FW.from_translation(E.lattice_basis()[1]).is_translation() True sage: FW.simple_reflection(0).is_translation() False - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]); FW = E.FW() >>> F = E.fundamental_group() >>> FW.from_affine_weyl(E.affine_weyl().from_reduced_word([Integer(1),Integer(2),Integer(1),Integer(0)])).is_translation() True >>> FW.from_translation(E.lattice_basis()[Integer(1)]).is_translation() True >>> FW.simple_reflection(Integer(0)).is_translation() False 
 - length()[source]¶
- Return the length of - selfin the Coxeter group sense.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); PW0 = E.PW0() sage: I0 = E.cartan_type().classical().index_set() sage: [PW0.from_translation(E.lattice_basis()[i]).length() for i in I0] [3, 4, 3] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); PW0 = E.PW0() >>> I0 = E.cartan_type().classical().index_set() >>> [PW0.from_translation(E.lattice_basis()[i]).length() for i in I0] [3, 4, 3] 
 - to_affine_grassmannian()[source]¶
- Return the unique affine Grassmannian element in the same coset of - selfwith respect to the finite Weyl group acting on the right.- EXAMPLES: - sage: elts = ExtendedAffineWeylGroup(['A',2,1]).PW0().some_elements() sage: [(x, x.to_affine_grassmannian()) for x in elts] [(t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2, t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2*s1)] - >>> from sage.all import * >>> elts = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PW0().some_elements() >>> [(x, x.to_affine_grassmannian()) for x in elts] [(t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2, t[2*Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2*s1)] 
 - to_affine_weyl_left()[source]¶
- Return the projection of - selfto the affine Weyl group on the left, after factorizing using the style “WF”.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); PW0 = E.PW0() sage: b = E.lattice_basis() sage: [(x, PW0.from_translation(x).to_affine_weyl_left()) for x in b] [(Lambdacheck[1], S0*S3*S2), (Lambdacheck[2], S0*S3*S1*S0), (Lambdacheck[3], S0*S1*S2)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); PW0 = E.PW0() >>> b = E.lattice_basis() >>> [(x, PW0.from_translation(x).to_affine_weyl_left()) for x in b] [(Lambdacheck[1], S0*S3*S2), (Lambdacheck[2], S0*S3*S1*S0), (Lambdacheck[3], S0*S1*S2)] - Warning - Must be implemented in style “WF”. 
 - to_affine_weyl_right()[source]¶
- Return the projection of - selfto the affine Weyl group on the right, after factorizing using the style “FW”.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); PW0 = E.PW0() sage: b = E.lattice_basis() sage: [(x, PW0.from_translation(x).to_affine_weyl_right()) for x in b] [(Lambdacheck[1], S3*S2*S1), (Lambdacheck[2], S2*S3*S1*S2), (Lambdacheck[3], S1*S2*S3)] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); PW0 = E.PW0() >>> b = E.lattice_basis() >>> [(x, PW0.from_translation(x).to_affine_weyl_right()) for x in b] [(Lambdacheck[1], S3*S2*S1), (Lambdacheck[2], S2*S3*S1*S2), (Lambdacheck[3], S1*S2*S3)] - Warning - Must be implemented in style “FW”. 
 - to_classical_weyl()[source]¶
- Return the image of - selfunder the homomorphism to the classical Weyl group.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).WF().simple_reflection(0).to_classical_weyl() s1*s2*s3*s2*s1 - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).WF().simple_reflection(Integer(0)).to_classical_weyl() s1*s2*s3*s2*s1 - Warning - Must be implemented in style “PW0”. 
 - to_dual_classical_weyl()[source]¶
- Return the image of - selfunder the homomorphism to the dual form of the classical Weyl group.- EXAMPLES: - sage: x = ExtendedAffineWeylGroup(['A',3,1]).WF().simple_reflection(0).to_dual_classical_weyl(); x s1*s2*s3*s2*s1 sage: x.parent() Weyl Group of type ['A', 3] (as a matrix group acting on the weight lattice) - >>> from sage.all import * >>> x = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).WF().simple_reflection(Integer(0)).to_dual_classical_weyl(); x s1*s2*s3*s2*s1 >>> x.parent() Weyl Group of type ['A', 3] (as a matrix group acting on the weight lattice) - Warning - Must be implemented in style “PvW0”. 
 - to_dual_translation_left()[source]¶
- Return the projection of - selfto the dual translation lattice after factorizing it to the left using the style “PvW0”.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).PvW0().simple_reflection(0).to_dual_translation_left() Lambda[1] + Lambda[3] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).PvW0().simple_reflection(Integer(0)).to_dual_translation_left() Lambda[1] + Lambda[3] - Warning - Must be implemented in style “PvW0”. 
 - to_dual_translation_right()[source]¶
- Return the projection of - selfto the dual translation lattice after factorizing it to the right using the style “W0Pv”.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).PW0().simple_reflection(0).to_dual_translation_right() -Lambda[1] - Lambda[3] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).PW0().simple_reflection(Integer(0)).to_dual_translation_right() -Lambda[1] - Lambda[3] - Warning - Must be implemented in style “W0Pv”. 
 - to_fundamental_group()[source]¶
- Return the image of - selfunder the homomorphism to the fundamental group.- EXAMPLES: - sage: PW0 = ExtendedAffineWeylGroup(['A',3,1]).PW0() sage: b = PW0.realization_of().lattice_basis() sage: [(x, PW0.from_translation(x).to_fundamental_group()) for x in b] [(Lambdacheck[1], pi[1]), (Lambdacheck[2], pi[2]), (Lambdacheck[3], pi[3])] - >>> from sage.all import * >>> PW0 = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).PW0() >>> b = PW0.realization_of().lattice_basis() >>> [(x, PW0.from_translation(x).to_fundamental_group()) for x in b] [(Lambdacheck[1], pi[1]), (Lambdacheck[2], pi[2]), (Lambdacheck[3], pi[3])] - Warning - Must be implemented in style “WF”. 
 - to_translation_left()[source]¶
- Return the projection of - selfto the translation lattice after factorizing it to the left using the style “PW0”.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).PW0().simple_reflection(0).to_translation_left() Lambdacheck[1] + Lambdacheck[3] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).PW0().simple_reflection(Integer(0)).to_translation_left() Lambdacheck[1] + Lambdacheck[3] - Warning - Must be implemented in style “PW0”. 
 - to_translation_right()[source]¶
- Return the projection of - selfto the translation lattice after factorizing it to the right using the style “W0P”.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).PW0().simple_reflection(0).to_translation_right() -Lambdacheck[1] - Lambdacheck[3] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).PW0().simple_reflection(Integer(0)).to_translation_right() -Lambdacheck[1] - Lambdacheck[3] - Warning - Must be implemented in style “W0P”. 
 
 - class ParentMethods[source]¶
- Bases: - object- from_affine_weyl(w)[source]¶
- Return the image of \(w\) under the homomorphism from the affine Weyl group into - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); PW0 = E.PW0() sage: W = E.affine_weyl() sage: w = W.from_reduced_word([2,1,3,0]) sage: x = PW0.from_affine_weyl(w); x t[Lambdacheck[1] - 2*Lambdacheck[2] + Lambdacheck[3]] * s3*s1 sage: FW = E.FW() sage: y = FW.from_affine_weyl(w); y S2*S3*S1*S0 sage: FW(x) == y True - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); PW0 = E.PW0() >>> W = E.affine_weyl() >>> w = W.from_reduced_word([Integer(2),Integer(1),Integer(3),Integer(0)]) >>> x = PW0.from_affine_weyl(w); x t[Lambdacheck[1] - 2*Lambdacheck[2] + Lambdacheck[3]] * s3*s1 >>> FW = E.FW() >>> y = FW.from_affine_weyl(w); y S2*S3*S1*S0 >>> FW(x) == y True - Warning - Must be implemented in style “WF” and “FW”. 
 - from_classical_weyl(w)[source]¶
- Return the image of \(w\) from the finite Weyl group into - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); PW0=E.PW0() sage: W0 = E.classical_weyl() sage: w = W0.from_reduced_word([2,1,3]) sage: y = PW0.from_classical_weyl(w); y s2*s3*s1 sage: y.parent() == PW0 True sage: y.to_classical_weyl() == w True sage: W0P = E.W0P() sage: z = W0P.from_classical_weyl(w); z s2*s3*s1 sage: z.parent() == W0P True sage: W0P(y) == z True sage: FW = E.FW() sage: x = FW.from_classical_weyl(w); x S2*S3*S1 sage: x.parent() == FW True sage: FW(y) == x True sage: FW(z) == x True - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); PW0=E.PW0() >>> W0 = E.classical_weyl() >>> w = W0.from_reduced_word([Integer(2),Integer(1),Integer(3)]) >>> y = PW0.from_classical_weyl(w); y s2*s3*s1 >>> y.parent() == PW0 True >>> y.to_classical_weyl() == w True >>> W0P = E.W0P() >>> z = W0P.from_classical_weyl(w); z s2*s3*s1 >>> z.parent() == W0P True >>> W0P(y) == z True >>> FW = E.FW() >>> x = FW.from_classical_weyl(w); x S2*S3*S1 >>> x.parent() == FW True >>> FW(y) == x True >>> FW(z) == x True - Warning - Must be implemented in style “PW0” and “W0P”. 
 - from_dual_classical_weyl(w)[source]¶
- Return the image of \(w\) from the finite Weyl group of dual form into - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]); PvW0 = E.PvW0() sage: W0v = E.dual_classical_weyl() sage: w = W0v.from_reduced_word([2,1,3]) sage: y = PvW0.from_dual_classical_weyl(w); y s2*s3*s1 sage: y.parent() == PvW0 True sage: y.to_dual_classical_weyl() == w True sage: x = E.FW().from_dual_classical_weyl(w); x S2*S3*S1 sage: PvW0(x) == y True - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]); PvW0 = E.PvW0() >>> W0v = E.dual_classical_weyl() >>> w = W0v.from_reduced_word([Integer(2),Integer(1),Integer(3)]) >>> y = PvW0.from_dual_classical_weyl(w); y s2*s3*s1 >>> y.parent() == PvW0 True >>> y.to_dual_classical_weyl() == w True >>> x = E.FW().from_dual_classical_weyl(w); x S2*S3*S1 >>> PvW0(x) == y True - Warning - Must be implemented in style “PvW0” and “W0Pv”. 
 - from_dual_translation(la)[source]¶
- Return the image of - launder the homomorphism of the dual version of the translation lattice into- self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]); PvW0 = E.PvW0() sage: bv = E.dual_lattice_basis(); bv Finite family {1: Lambda[1], 2: Lambda[2]} sage: x = PvW0.from_dual_translation(2*bv[1] - bv[2]); x t[2*Lambda[1] - Lambda[2]] sage: FW = E.FW() sage: y = FW.from_dual_translation(2*bv[1] - bv[2]); y S0*S2*S0*S1 sage: FW(x) == y True - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]); PvW0 = E.PvW0() >>> bv = E.dual_lattice_basis(); bv Finite family {1: Lambda[1], 2: Lambda[2]} >>> x = PvW0.from_dual_translation(Integer(2)*bv[Integer(1)] - bv[Integer(2)]); x t[2*Lambda[1] - Lambda[2]] >>> FW = E.FW() >>> y = FW.from_dual_translation(Integer(2)*bv[Integer(1)] - bv[Integer(2)]); y S0*S2*S0*S1 >>> FW(x) == y True 
 - from_fundamental(x)[source]¶
- Return the image of \(x\) under the homomorphism from the fundamental group into - self.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',3,1]) sage: PW0=E.PW0() sage: F = E.fundamental_group() sage: Is = F.special_nodes() sage: [(i, PW0.from_fundamental(F(i))) for i in Is] [(0, 1), (1, t[Lambdacheck[1]] * s1*s2*s3), (2, t[Lambdacheck[2]] * s2*s3*s1*s2), (3, t[Lambdacheck[3]] * s3*s2*s1)] sage: [(i, E.W0P().from_fundamental((F(i)))) for i in Is] [(0, 1), (1, s1*s2*s3 * t[-Lambdacheck[3]]), (2, s2*s3*s1*s2 * t[-Lambdacheck[2]]), (3, s3*s2*s1 * t[-Lambdacheck[1]])] sage: [(i, E.WF().from_fundamental(F(i))) for i in Is] [(0, 1), (1, pi[1]), (2, pi[2]), (3, pi[3])] - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]) >>> PW0=E.PW0() >>> F = E.fundamental_group() >>> Is = F.special_nodes() >>> [(i, PW0.from_fundamental(F(i))) for i in Is] [(0, 1), (1, t[Lambdacheck[1]] * s1*s2*s3), (2, t[Lambdacheck[2]] * s2*s3*s1*s2), (3, t[Lambdacheck[3]] * s3*s2*s1)] >>> [(i, E.W0P().from_fundamental((F(i)))) for i in Is] [(0, 1), (1, s1*s2*s3 * t[-Lambdacheck[3]]), (2, s2*s3*s1*s2 * t[-Lambdacheck[2]]), (3, s3*s2*s1 * t[-Lambdacheck[1]])] >>> [(i, E.WF().from_fundamental(F(i))) for i in Is] [(0, 1), (1, pi[1]), (2, pi[2]), (3, pi[3])] - Warning - This method must be implemented by the “WF” and “FW” realizations. 
 - from_reduced_word(word)[source]¶
- Convert an affine or finite reduced word into a group element. - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).PW0().from_reduced_word([1,0,1,2]) t[-Lambdacheck[1] + 2*Lambdacheck[2]] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).PW0().from_reduced_word([Integer(1),Integer(0),Integer(1),Integer(2)]) t[-Lambdacheck[1] + 2*Lambdacheck[2]] 
 - from_translation(la)[source]¶
- Return the element of translation by - lain- self.- INPUT: - self– a realization of the extended affine Weyl group
- la– an element of the translation lattice
 - In the notation of the documentation for - ExtendedAffineWeylGroup(),- lamust be an element of “P”.- EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]); PW0 = E.PW0() sage: b = E.lattice_basis(); b Finite family {1: Lambdacheck[1], 2: Lambdacheck[2]} sage: x = PW0.from_translation(2*b[1] - b[2]); x t[2*Lambdacheck[1] - Lambdacheck[2]] sage: FW = E.FW() sage: y = FW.from_translation(2*b[1] - b[2]); y S0*S2*S0*S1 sage: FW(x) == y True - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]); PW0 = E.PW0() >>> b = E.lattice_basis(); b Finite family {1: Lambdacheck[1], 2: Lambdacheck[2]} >>> x = PW0.from_translation(Integer(2)*b[Integer(1)] - b[Integer(2)]); x t[2*Lambdacheck[1] - Lambdacheck[2]] >>> FW = E.FW() >>> y = FW.from_translation(Integer(2)*b[Integer(1)] - b[Integer(2)]); y S0*S2*S0*S1 >>> FW(x) == y True - Since the implementation as a semidirect product requires wrapping the lattice group to make it multiplicative, we cannot declare that this map is a morphism for sage - Groups().- Warning - This method must be implemented by the “PW0” and “W0P” realizations. 
 - simple_reflection(i)[source]¶
- Return the \(i\)-th simple reflection in - self.- INPUT: - self– a realization of the extended affine Weyl group
- i– an affine Dynkin node
 - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).PW0().simple_reflection(0) t[Lambdacheck[1] + Lambdacheck[3]] * s1*s2*s3*s2*s1 sage: ExtendedAffineWeylGroup(['C',2,1]).WF().simple_reflection(0) S0 sage: ExtendedAffineWeylGroup(['D',3,2]).PvW0().simple_reflection(1) s1 - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).PW0().simple_reflection(Integer(0)) t[Lambdacheck[1] + Lambdacheck[3]] * s1*s2*s3*s2*s1 >>> ExtendedAffineWeylGroup(['C',Integer(2),Integer(1)]).WF().simple_reflection(Integer(0)) S0 >>> ExtendedAffineWeylGroup(['D',Integer(3),Integer(2)]).PvW0().simple_reflection(Integer(1)) s1 
 - simple_reflections()[source]¶
- Return a family from the set of affine Dynkin nodes to the simple reflections in the realization of the extended affine Weyl group. - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',3,1]).W0P().simple_reflections() Finite family {0: s1*s2*s3*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[3]], 1: s1, 2: s2, 3: s3} sage: ExtendedAffineWeylGroup(['A',3,1]).WF().simple_reflections() Finite family {0: S0, 1: S1, 2: S2, 3: S3} sage: ExtendedAffineWeylGroup(['A',3,1], ....: print_tuple=True).FW().simple_reflections() Finite family {0: (pi[0], S0), 1: (pi[0], S1), 2: (pi[0], S2), 3: (pi[0], S3)} sage: ExtendedAffineWeylGroup(['A',3,1], ....: fundamental='f', ....: print_tuple=True).FW().simple_reflections() Finite family {0: (f[0], S0), 1: (f[0], S1), 2: (f[0], S2), 3: (f[0], S3)} sage: ExtendedAffineWeylGroup(['A',3,1]).PvW0().simple_reflections() Finite family {0: t[Lambda[1] + Lambda[3]] * s1*s2*s3*s2*s1, 1: s1, 2: s2, 3: s3} - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).W0P().simple_reflections() Finite family {0: s1*s2*s3*s2*s1 * t[-Lambdacheck[1] - Lambdacheck[3]], 1: s1, 2: s2, 3: s3} >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).WF().simple_reflections() Finite family {0: S0, 1: S1, 2: S2, 3: S3} >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)], ... print_tuple=True).FW().simple_reflections() Finite family {0: (pi[0], S0), 1: (pi[0], S1), 2: (pi[0], S2), 3: (pi[0], S3)} >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)], ... fundamental='f', ... print_tuple=True).FW().simple_reflections() Finite family {0: (f[0], S0), 1: (f[0], S1), 2: (f[0], S2), 3: (f[0], S3)} >>> ExtendedAffineWeylGroup(['A',Integer(3),Integer(1)]).PvW0().simple_reflections() Finite family {0: t[Lambda[1] + Lambda[3]] * s1*s2*s3*s2*s1, 1: s1, 2: s2, 3: s3} 
 
 - super_categories()[source]¶
- EXAMPLES: - sage: R = ExtendedAffineWeylGroup(['A',2,1]).Realizations(); R Category of realizations of Extended affine Weyl group of type ['A', 2, 1] sage: R.super_categories() [Category of associative inverse realizations of unital magmas] - >>> from sage.all import * >>> R = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).Realizations(); R Category of realizations of Extended affine Weyl group of type ['A', 2, 1] >>> R.super_categories() [Category of associative inverse realizations of unital magmas] 
 
 - W0P()[source]¶
- Realizes - selfin “W0P”-style.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).W0P() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) acting on Multiplicative form of Coweight lattice of the Root system of type ['A', 2] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).W0P() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) acting on Multiplicative form of Coweight lattice of the Root system of type ['A', 2] 
 - W0Pv()[source]¶
- Realizes - selfin “W0Pv”-style.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).W0Pv() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) acting on Multiplicative form of Weight lattice of the Root system of type ['A', 2] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).W0Pv() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) acting on Multiplicative form of Weight lattice of the Root system of type ['A', 2] 
 - WF()[source]¶
- Realizes - selfin “WF”-style.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).WF() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) acted upon by Fundamental group of type ['A', 2, 1] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).WF() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) acted upon by Fundamental group of type ['A', 2, 1] 
 - WF_to_PW0_func(x)[source]¶
- Coercion from style “WF” to “PW0”. - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(["A", 2, 1]) sage: x = E.WF().an_element(); x S0*S1*S2 * pi[2] sage: E.WF_to_PW0_func(x) t[Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2*s1 - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(["A", Integer(2), Integer(1)]) >>> x = E.WF().an_element(); x S0*S1*S2 * pi[2] >>> E.WF_to_PW0_func(x) t[Lambdacheck[1] + 2*Lambdacheck[2]] * s1*s2*s1 - Warning - Since this is used to define some coercion maps it cannot itself use coercion. 
 - a_realization()[source]¶
- Return the default realization of an extended affine Weyl group. - EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).a_realization() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Coweight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).a_realization() Extended affine Weyl group of type ['A', 2, 1] realized by Semidirect product of Multiplicative form of Coweight lattice of the Root system of type ['A', 2] acted upon by Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) 
 - affine_weyl()[source]¶
- Return the affine Weyl group of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).affine_weyl() Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) sage: ExtendedAffineWeylGroup(['A',5,2]).affine_weyl() Weyl Group of type ['B', 3, 1]^* (as a matrix group acting on the root lattice) sage: ExtendedAffineWeylGroup(['A',4,2]).affine_weyl() Weyl Group of type ['BC', 2, 2] (as a matrix group acting on the root lattice) sage: ExtendedAffineWeylGroup(CartanType(['A',4,2]).dual()).affine_weyl() Weyl Group of type ['BC', 2, 2]^* (as a matrix group acting on the root lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).affine_weyl() Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root lattice) >>> ExtendedAffineWeylGroup(['A',Integer(5),Integer(2)]).affine_weyl() Weyl Group of type ['B', 3, 1]^* (as a matrix group acting on the root lattice) >>> ExtendedAffineWeylGroup(['A',Integer(4),Integer(2)]).affine_weyl() Weyl Group of type ['BC', 2, 2] (as a matrix group acting on the root lattice) >>> ExtendedAffineWeylGroup(CartanType(['A',Integer(4),Integer(2)]).dual()).affine_weyl() Weyl Group of type ['BC', 2, 2]^* (as a matrix group acting on the root lattice) 
 - cartan_type()[source]¶
- The Cartan type of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(["D",3,2]).cartan_type() ['C', 2, 1]^* - >>> from sage.all import * >>> ExtendedAffineWeylGroup(["D",Integer(3),Integer(2)]).cartan_type() ['C', 2, 1]^* 
 - classical_weyl()[source]¶
- Return the classical Weyl group of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).classical_weyl() Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) sage: ExtendedAffineWeylGroup(['A',5,2]).classical_weyl() Weyl Group of type ['C', 3] (as a matrix group acting on the weight lattice) sage: ExtendedAffineWeylGroup(['A',4,2]).classical_weyl() Weyl Group of type ['C', 2] (as a matrix group acting on the weight lattice) sage: ExtendedAffineWeylGroup(CartanType(['A',4,2]).dual()).classical_weyl() Weyl Group of type ['C', 2] (as a matrix group acting on the coweight lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).classical_weyl() Weyl Group of type ['A', 2] (as a matrix group acting on the coweight lattice) >>> ExtendedAffineWeylGroup(['A',Integer(5),Integer(2)]).classical_weyl() Weyl Group of type ['C', 3] (as a matrix group acting on the weight lattice) >>> ExtendedAffineWeylGroup(['A',Integer(4),Integer(2)]).classical_weyl() Weyl Group of type ['C', 2] (as a matrix group acting on the weight lattice) >>> ExtendedAffineWeylGroup(CartanType(['A',Integer(4),Integer(2)]).dual()).classical_weyl() Weyl Group of type ['C', 2] (as a matrix group acting on the coweight lattice) 
 - classical_weyl_to_affine(w)[source]¶
- The image of \(w\) under the homomorphism from the classical Weyl group into the affine Weyl group. - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: W0 = E.classical_weyl() sage: w = W0.from_reduced_word([1,2]); w s1*s2 sage: v = E.classical_weyl_to_affine(w); v S1*S2 - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> W0 = E.classical_weyl() >>> w = W0.from_reduced_word([Integer(1),Integer(2)]); w s1*s2 >>> v = E.classical_weyl_to_affine(w); v S1*S2 
 - dual_classical_weyl()[source]¶
- Return the dual version of the classical Weyl group of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).dual_classical_weyl() Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) sage: ExtendedAffineWeylGroup(['A',5,2]).dual_classical_weyl() Weyl Group of type ['C', 3] (as a matrix group acting on the weight lattice) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).dual_classical_weyl() Weyl Group of type ['A', 2] (as a matrix group acting on the weight lattice) >>> ExtendedAffineWeylGroup(['A',Integer(5),Integer(2)]).dual_classical_weyl() Weyl Group of type ['C', 3] (as a matrix group acting on the weight lattice) 
 - dual_classical_weyl_to_affine(w)[source]¶
- The image of \(w\) under the homomorphism from the dual version of the classical Weyl group into the affine Weyl group. - EXAMPLES: - sage: E = ExtendedAffineWeylGroup(['A',2,1]) sage: W0v = E.dual_classical_weyl() sage: w = W0v.from_reduced_word([1,2]); w s1*s2 sage: v = E.dual_classical_weyl_to_affine(w); v S1*S2 - >>> from sage.all import * >>> E = ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]) >>> W0v = E.dual_classical_weyl() >>> w = W0v.from_reduced_word([Integer(1),Integer(2)]); w s1*s2 >>> v = E.dual_classical_weyl_to_affine(w); v S1*S2 
 - dual_lattice()[source]¶
- Return the dual version of the translation lattice for - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).dual_lattice() Weight lattice of the Root system of type ['A', 2] sage: ExtendedAffineWeylGroup(['A',5,2]).dual_lattice() Weight lattice of the Root system of type ['C', 3] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).dual_lattice() Weight lattice of the Root system of type ['A', 2] >>> ExtendedAffineWeylGroup(['A',Integer(5),Integer(2)]).dual_lattice() Weight lattice of the Root system of type ['C', 3] 
 - dual_lattice_basis()[source]¶
- Return the distinguished basis of the dual version of the translation lattice for - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).dual_lattice_basis() Finite family {1: Lambda[1], 2: Lambda[2]} sage: ExtendedAffineWeylGroup(['A',5,2]).dual_lattice_basis() Finite family {1: Lambda[1], 2: Lambda[2], 3: Lambda[3]} - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).dual_lattice_basis() Finite family {1: Lambda[1], 2: Lambda[2]} >>> ExtendedAffineWeylGroup(['A',Integer(5),Integer(2)]).dual_lattice_basis() Finite family {1: Lambda[1], 2: Lambda[2], 3: Lambda[3]} 
 - exp_dual_lattice()[source]¶
- Return the multiplicative version of the dual version of the translation lattice for - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).exp_dual_lattice() Multiplicative form of Weight lattice of the Root system of type ['A', 2] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).exp_dual_lattice() Multiplicative form of Weight lattice of the Root system of type ['A', 2] 
 - exp_lattice()[source]¶
- Return the multiplicative version of the translation lattice for - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).exp_lattice() Multiplicative form of Coweight lattice of the Root system of type ['A', 2] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).exp_lattice() Multiplicative form of Coweight lattice of the Root system of type ['A', 2] 
 - fundamental_group()[source]¶
- Return the abstract fundamental group. - EXAMPLES: - sage: F = ExtendedAffineWeylGroup(['D',5,1]).fundamental_group(); F Fundamental group of type ['D', 5, 1] sage: [a for a in F] [pi[0], pi[1], pi[4], pi[5]] - >>> from sage.all import * >>> F = ExtendedAffineWeylGroup(['D',Integer(5),Integer(1)]).fundamental_group(); F Fundamental group of type ['D', 5, 1] >>> [a for a in F] [pi[0], pi[1], pi[4], pi[5]] 
 - group_generators()[source]¶
- Return a set of generators for the default realization of - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).group_generators() (t[Lambdacheck[1]], t[Lambdacheck[2]], s1, s2) - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).group_generators() (t[Lambdacheck[1]], t[Lambdacheck[2]], s1, s2) 
 - lattice()[source]¶
- Return the translation lattice for - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).lattice() Coweight lattice of the Root system of type ['A', 2] sage: ExtendedAffineWeylGroup(['A',5,2]).lattice() Weight lattice of the Root system of type ['C', 3] sage: ExtendedAffineWeylGroup(['A',4,2]).lattice() Weight lattice of the Root system of type ['C', 2] sage: ExtendedAffineWeylGroup(CartanType(['A',4,2]).dual()).lattice() Coweight lattice of the Root system of type ['B', 2] sage: ExtendedAffineWeylGroup(CartanType(['A',2,1]), ....: general_linear=True).lattice() Ambient space of the Root system of type ['A', 2] - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).lattice() Coweight lattice of the Root system of type ['A', 2] >>> ExtendedAffineWeylGroup(['A',Integer(5),Integer(2)]).lattice() Weight lattice of the Root system of type ['C', 3] >>> ExtendedAffineWeylGroup(['A',Integer(4),Integer(2)]).lattice() Weight lattice of the Root system of type ['C', 2] >>> ExtendedAffineWeylGroup(CartanType(['A',Integer(4),Integer(2)]).dual()).lattice() Coweight lattice of the Root system of type ['B', 2] >>> ExtendedAffineWeylGroup(CartanType(['A',Integer(2),Integer(1)]), ... general_linear=True).lattice() Ambient space of the Root system of type ['A', 2] 
 - lattice_basis()[source]¶
- Return the distinguished basis of the translation lattice for - self.- EXAMPLES: - sage: ExtendedAffineWeylGroup(['A',2,1]).lattice_basis() Finite family {1: Lambdacheck[1], 2: Lambdacheck[2]} sage: ExtendedAffineWeylGroup(['A',5,2]).lattice_basis() Finite family {1: Lambda[1], 2: Lambda[2], 3: Lambda[3]} sage: ExtendedAffineWeylGroup(['A',4,2]).lattice_basis() Finite family {1: Lambda[1], 2: Lambda[2]} sage: ExtendedAffineWeylGroup(CartanType(['A',4,2]).dual()).lattice_basis() Finite family {1: Lambdacheck[1], 2: Lambdacheck[2]} - >>> from sage.all import * >>> ExtendedAffineWeylGroup(['A',Integer(2),Integer(1)]).lattice_basis() Finite family {1: Lambdacheck[1], 2: Lambdacheck[2]} >>> ExtendedAffineWeylGroup(['A',Integer(5),Integer(2)]).lattice_basis() Finite family {1: Lambda[1], 2: Lambda[2], 3: Lambda[3]} >>> ExtendedAffineWeylGroup(['A',Integer(4),Integer(2)]).lattice_basis() Finite family {1: Lambda[1], 2: Lambda[2]} >>> ExtendedAffineWeylGroup(CartanType(['A',Integer(4),Integer(2)]).dual()).lattice_basis() Finite family {1: Lambdacheck[1], 2: Lambdacheck[2]}