Hecke algebras
Chevie.HeckeAlgebrasChevie.Chars.CharTableChevie.HeckeAlgebras.FactSchurChevie.HeckeAlgebras.HeckeCosetChevie.Chars.representationChevie.Chars.representationChevie.Chars.representationsChevie.Garside.αChevie.HeckeAlgebras.TbasisChevie.HeckeAlgebras.altChevie.HeckeAlgebras.central_monomialsChevie.HeckeAlgebras.char_valuesChevie.HeckeAlgebras.class_polynomialsChevie.HeckeAlgebras.factorized_schur_elementChevie.HeckeAlgebras.factorized_schur_elementsChevie.HeckeAlgebras.heckeChevie.HeckeAlgebras.heckeChevie.HeckeAlgebras.heckeChevie.HeckeAlgebras.isrepresentationChevie.HeckeAlgebras.schur_elementsChevie.PermRoot.reflection_representation
Chevie.HeckeAlgebras — ModuleThis   module  implements  Hecke  algebras  associated  to  finite  complex reflection  groups and arbitrary Coxeter  groups (these algebras are called Iwahori-Hecke  algebras  in  this  last  case),  and  also  implements  the character  tables, Schur elements and representations of Hecke algebras for finite  groups. For Iwahori-Hecke algebras  and G(d,1,1) this module also implements  the standard T basis;  see the module KLfor Kazhdan-Lusztig bases.
Let  (W,S) be  a Coxeter  system and  let mₛₜ  be the order of st for s,t∈ S. Let R be a commutative ring with 1 and for s∈ S let uₛ₀,uₛ₁∈ R be elements which depend only on the conjugacy class of s in W (this is  the  same  as  requiring  that  uₛᵢ=uₜᵢ  whenever  mₛₜ is odd). The Iwahori-Hecke   algebra  of  W  over  R  with  parameters  uₛᵢ  is  a deformation  of the group algebra of W over R defined as follows: it is the  unitary  associative  R-algebra  generated  by  elements  Tₛ, s∈ S subject to the relations:
$(Tₛ-uₛ₀)(Tₛ-uₛ₁)=0$ for all s∈ S (the quadratic relations)
$TₛTₜTₛ…= TₜTₛTₜ…$ with mₛₜ factors on each side (the braid relations)
If  uₛ₀=1 and  uₛ₁=-1 for  all s  then the quadratic relations become Tₛ²=1 and the deformation of the group algebra is trivial.
Since  the generators Tₛ  satisfy the braid  relations, H is  in fact a quotient  of the group algebra of the  braid group associated with W. The braid relations also imply that for any reduced expression s_1⋯ s_m of w ∈  W the product Tₛ_₁⋯ Tₛ_ₘ has the same value, that we denote T_w. We have  T₁=1; if one of the uₛᵢ is invertible, the {T_w}_{w∈ W} form an R-basis  of the Iwahori-Hecke algebra  which specializes to the canonical basis of the group algebra R[W] for uₛ₀↦1 and uₛ₁↦-1.
When  one  of  the  uₛᵢ  is  invertible,  the  structure  constants  (the decomposion  of  a  product  T_vT_w)  in  the T_w basis are obtained as follows.  Choose a reduced expression for v,  say v=s_1 ⋯ s_k and apply inductively the formula:
$T_sT_w=T_{sw}$               if l(sw)=l(w)+1
$T_sT_w=-uₛ₀uₛ₁T_{sw}+(uₛ₀+uₛ₁)T_w$ if l(sw)=l(w)-1.
If  one of uₛ₀ or uₛ₁ is invertible  in R, for example uₛ₁, then by changing  the generators  to T′ₛ=-Tₛ/uₛ₁,  and setting qₛ=-uₛ₀/uₛ₁, the braid  relations do no change  (since when mₛₜ is  odd we have uₛᵢ=uₜᵢ) but  the quadratic relations become (T′ₛ-qₛ)(T′ₛ+1)=0. This normalisation is  the most common form considered  in the literature. Another common form in  the context of  Kazhdan-Lusztig theory, is  uₛ₀=√qₛ and uₛ₁=-√qₛ⁻¹. The  form provided, with two parameters per generator, is often useful, for instance  when constructing  the Jones  polynomial. If  for all s we have uₛ₀=q,   uₛ₁=-1   then   we   call   the   corresponding   algebra  the "one-parameter" or "Spetsial" Iwahori-Hecke algebra associated with W.
For  some  Iwahori-Hecke  algebras  the  character  table,  and  in general Kazhdan-Lusztig  bases, require  a square  root of  -uₛ₀uₛ₁. These square roots  can be specified  with the keyword  rootpara when constructing the algebra;  after  this  H.rootpara  will  return  the chosen roots. If not specified, we try to extract roots automatically when needed; rootpara(H) informs on the choices made. Note that some mathematical results require an explicit  choice  of  one  of  the  two  possible  roots  which  cannot  be automatically made thus require a keyword initialisation.
There  is a universal choice  for R and uₛᵢ:  Let uₛᵢ:s∈ S,i∈[0,1] be indeterminates   such  that  uₛᵢ=uₜᵢ  whenever  mₛₜ  is  odd,  and  let A=ℤ[uₛᵢ] be the corresponding polynomial ring. Then the Hecke algebra H of  W over A with parameters uₛᵢ is called the generic Iwahori-Hecke algebra  of  W.  Any  Hecke  algebra  H₁  with parameters vₛᵢ can be obtained  by  specialization  from  H,  since  there  is  a  unique  ring homomorphism  f:A → R such that f(uₛᵢ)=vₛᵢ for all i. Then via f we can identify H₁ to $R⊗ _A H$.
Certain invariants of the irreducible characters of the one-parameter Hecke algebra  play a special role in the representation theory of the underlying finite  Coxeter  groups,  namely  the  a-  and  A-invariants. For basic properties   of  Iwahori-Hecke   algebras  and   their  relevance   to  the representation theory of finite groups of Lie type, see for example Curtis and Reiner 1987 Sections~67 and 68.
In  the  following  example,  we  compute  the multiplication table for the 0-Iwahori–Hecke algebra associated with the Coxeter group of type A_2.
julia> W=coxgroup(:A,2)
A₂
julia> H=hecke(W,0)            # One-parameter algebra with `q=0`
hecke(A₂,0)
julia> T=Tbasis(H);            # Create the `T` basis
julia> b=T.(elements(W))       # the basis
6-element Vector{HeckeTElt{HeckeAlgebra{Int64, Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}, Int64, Perm{Int16}}}:
 T.
 T₁
 T₂
 T₁₂
 T₂₁
 T₁₂₁
julia> b*permutedims(b)       # multiplication table
6×6 Matrix{HeckeTElt{HeckeAlgebra{Int64, Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}, Int64, Perm{Int16}}}:
 T.    T₁     T₂     T₁₂    T₂₁    T₁₂₁
 T₁    -T₁    T₁₂    -T₁₂   T₁₂₁   -T₁₂₁
 T₂    T₂₁    -T₂    T₁₂₁   -T₂₁   -T₁₂₁
 T₁₂   T₁₂₁   -T₁₂   -T₁₂₁  -T₁₂₁  T₁₂₁
 T₂₁   -T₂₁   T₁₂₁   -T₁₂₁  -T₁₂₁  T₁₂₁
 T₁₂₁  -T₁₂₁  -T₁₂₁  T₁₂₁   T₁₂₁   -T₁₂₁Thus, we work with algebras with arbitrary parameters. We will see that this also works on the level of characters and representations.
For general complex reflection groups, the picture is similar. The Hecke algebras are deformations of the group algebras, generalizing those for real reflection groups.
The  definition is  as a  quotient of  the algebra  of the  braid group. We assume  now that W is  a finite reflection group  in the complex vector space  V. The braid group associated  is the fundamental group Π₁ of the  space  $(V-\bigcup_{H\in\mathcal H}  H)/W$, where $\mathcal H$ is  the set of  reflecting hyperplanes of  W. This group  is generated by braid reflections, elements which by the natural map from the braid group to  the reflection  group project  to distinguished  reflections. The braid reflections   which  project  to  a  given  W-orbit  of  reflections  are conjugate.  Let 𝐬 be a representative of  such a conjugacy class of braid reflections,  let e  be the  order of  the image  of 𝐬  in W, and let $u_{𝐬,0},…,u_{𝐬,e-1}$ be indeterminates. The generic Hecke algebra of W is  the  $ℤ[u_{𝐬,i}^{±  1}]_{𝐬,i}$-algebra  quotient  of  the braid group algebra  by the relations $(𝐬-u_{𝐬,0})…(𝐬-u_{𝐬,e-1})=0$, and an arbitrary Hecke  algebra for W is an algebra  obtained from this generic algebra by specializing some of the parameters.
The  generic Hecke algebras are explicitely  described by a presentation of the  braid group. The braid group can be presented by homogeneous relations in   the  braid   reflections,  called   braid  relations,  described  in Broué-Malle-Rouquier     1998     and    Bessis-Michel 2003  (some  of  which  were  obtained  using the VKCURVE GAP3-package,  also ported to Julia).  Furthermore, these presentations are such  that the  reflection group  is presented  by the same relations, plus relations  describing the order  of the generating  reflections, called the order  relations. Thus  the Hecke  algebra has  a presentation similar to that of W, with the same braid relations but the order relations replaced by a deformed version.
If  S⊂ W  is the  set of  distinguished reflections  of W which lift to generating  braid reflections in the braid  group, for each conjugacy class of  an  s  of  order  e  we take indeterminates uₛ₀,…,uₛₑ₋₁. Then the generic  Hecke algebra is the $ℤ[uₛᵢ^{±1}]ₛᵢ$-algebra H with generators T_s  for each s∈  S presented by  the braid relations  and the deformed order relations $(T_s-u_{s,0})…(T_s-u_{s,e-1})=0$.
Ariki and Koike have described models of representations for these algebras corresponding  to imprimitive complex  reflection groups, and Halverson-Ram and  some other  authors have  computed the  character tables in this case. Malle has given representation models and the character table for the other 2-dimensional  reflection  groups,  see Broué-Malle 1993 and   Malle   1996;   our   data   has  models  of  all representations,  and  character  tables,  for  real  reflection groups; it contains  the  same  for  imprimitive  groups  and  for primitive groups of dimension  2  and  3  (these  last  representations  have  been computed in Malle-Michel   2010)   and   contains   also  models  of representations  and  character  tables  computed  by  Michel for G₂₉ and G₃₃;  it  contains  also  partial  lists  of  representations and partial character  tables for the remaining groups G₃₁,G₃₂ and G₃₄, computed by Malle and Michel for G₃₂ and by Michel for the other two algebras.
The quotient of the Hecke algebra obtained by the specialisation $u_{𝐬,i}↦ ζₑⁱ$  is isomorphic to the group algebra of W. It was conjectured for 20 years  that over a splitting ring the Hecke algebra is itself isomorphic to the  group algebra of W over the  same ring. This was called the freeness conjecture since the main problem is to show that the Hecke algebra is free of dimension |W|. This has finally been proved in 2019 thanks to the work of  many  people  including  Marin,  Pfeiffer,  Chavli  and  Tsuchioka  for exceptional  groups. Along the way  it has been proven  that there exists a set  {b_w}_{w∈ W} of  elements of the  Braid group such  that b_1=1 and b_w maps to w by the natural quotient map, such that their images T_w form a basis of the Hecke algebra.
It  is  conjectured  that  such  a  basis  T_w  can  be  chosen such that additionnaly  the  linear  form  t  defined  by  t(T_w)=0 if w≠ 1 and t(1)=1 is a symmetrizing form for the symmetric algebra H. This is well known  for all real reflection groups  and has been proved in Malle-Mathas 1998   for   imprimitive   reflection   groups   and   in Malle-Michel 2010 for some primitive groups of dimension 2  and  3.  Chlouveraki  and  Chavli  have handled some other 2-dimensional cases.  For  each  irreducible  character  φ  of H we define the Schur element  Sᵩ associated to φ by the  condition that for any element T of  H we have t(T)=∑ᵩ φ(T)/Sᵩ. It  can be shown that the Schur elements are  Laurent polynomials, and they  do not depend on  the choice of a basis having  the  above  property.  Malle  has  computed  these  Schur elements, assuming the above conjecture; they are in the Chevie data.
See the function hecke for various ways of specifying the parameters of a Hecke   algebra.  Look  also  at   the  docstrings  of  central_monomials, char_values,     class_polynomials,    schur_elements,    isrepresentation, factorized_schur_elements,  and  at  the  methods  for  Hecke  algebras of CharTable, representations, reflrep.
Taking  apart  Hecke  elements  is  done  with  the  functions  getindex, setindex!, keys, values, iterate.
julia> H=hecke(W,Pol(:q))
hecke(A₂,q)
julia> T=Tbasis(H);
julia> h=T(1,2)^2
qT₂₁+(q-1)T₁₂₁
julia> length(h) # h has 2 terms
2
julia> h[W(2,1)] # coefficient of W(2,1)
Pol{Int64}: q
julia> collect(h) # pairs perm=>coeff
2-element Vector{Any}:
  (1,2,6)(3,4,5) => q
 (1,5)(2,4)(3,6) => q-1
julia> collect(values(h)) # the coefficients
2-element Vector{Pol{Int64}}:
 q
 q-1
julia> collect(keys(h)) # the corresponding Perms
2-element Vector{Perm{Int16}}:
 (1,2,6)(3,4,5)
 (1,5)(2,4)(3,6)
julia> h[W(2,1)]=Pol(3)
Pol{Int64}: 3
julia> h
3T₂₁+(q-1)T₁₂₁finally, benchmarks on julia 1.8
julia> function test_w0(n)
         W=coxgroup(:A,n)
         Tbasis(hecke(W,Pol(:q)))(longest(W))^2
       end
test_w0 (generic function with 1 method)
julia> @btime test_w0(7);
   97.210 ms (1776476 allocations: 127.52 MiB)in GAP3 the analogous function takes 920ms
test_w0:=function(n)local W,T,H;
  W:=CoxeterGroup("A",n);H:=Hecke(W,X(Rationals));T:=Basis(H,"T");
  return T(LongestCoxeterWord(W))^2;
end;Chevie.HeckeAlgebras.hecke — Methodhecke( W [, parameter];rootpara=missing)
Hecke  algebra for the complex reflection group or Coxeter group W. If no parameter is given, 1 is assumed which gives the group algebra of W.
The  following forms are accepted for  parameter: if parameter is not a vector or a tuple, it is replaced by the vector fill(parameter,ngens(W)). If it is a vector with one entry, it is replaced with fill(parameter[1],ngens(W)).  If parameter  is a  vector with more than one  entry, it should  have length ngens(W),  each entry representing the parameters   for   the   corresponding   generator   of  W,  and  entries corresponding  to  the  same  W-orbit  of generators should be identical. Finally, if parameter is a Tuple, the tuple should have as many entries as  there are hyperplane  orbits in W  and each entry  will represent the parameters for the corresponding conjugacy class of braid reflections.
An  entry in  parameter for  a reflection  of order  e can  be either a single scalar value or a Vector of length 'e'. If it is a Vector, it is interpreted as the list [u₀,…,uₑ₋₁] of parameters for that reflection. If it  is  not  a  vector,  let  q  be  its value; it is then interpreted as specifying  the  list  of  parameters  for  the Spetsial algebra, which are [q,ζₑ,…,ζₑᵉ⁻¹]  (thus the list [q,-1]  of the one-parameter algebra for Coxeter groups).
When printing an Hecke algebra the parameter list is abbreviated using the same conventions.
Computing characters or representations of Hecke algebra needs sometimes to extract  roots of the  parameters. These roots  are extracted automatically (when  possible). To control the roots, which is needed for example to have composable  specializations  or  make  sure  the  same  root  is  used  for subgroups,  for Coxeter  groups it  is possible  to give  explicit roots by giving  a keyword argument rootpara: if it  is a vector it should contain at  the i-th position a square root of -parameter[i][1]*parameter[i][2] (that  is, a square root of q  if parameter[i]==[q,-1]); if a scalar it is  replaced by fill(rootpara,ngens(W)). If  not specified the entries in rootpara  start  as  missing.  The  function  rootpara(H) tries to fill automatically  missing entries in H.rootpara  and returns the result. The same  mechanism  has  been  extended  to  some  complex  reflection  groups generated  by 2-reflections and needing only square roots of the parameters to split the Hecke algebra, that is to G₂₄, G₂₉, G₃₁, G₃₃ and G₄,₂,ᵣ.
Example
julia> W=coxgroup(:B,2)
B₂
julia> @Pol q
Pol{Int64}: q
julia> H=hecke(W,q)
hecke(B₂,q)
julia> H.para
2-element Vector{Vector{Pol{Int64}}}:
 [q, -1]
 [q, -1]
julia> H=hecke(W,q^2,rootpara=-q)
hecke(B₂,q²,rootpara=-q)
julia> H=hecke(W,q^2)
hecke(B₂,q²)
julia> rootpara(H) # automatically computed
2-element Vector{Pol{Int64}}:
 q
 q
julia> H
hecke(B₂,q²,rootpara=q)
julia> H=hecke(W,[q^2,q^4],rootpara=[q,q^2])
hecke(B₂,Pol{Int64}[q², q⁴],rootpara=Pol{Int64}[q, q²])
julia> H.para,H.rootpara
(Vector{Pol{Int64}}[[q², -1], [q⁴, -1]], Pol{Int64}[q, q²])
julia> H=hecke(W,9,rootpara=3)
hecke(B₂,9,rootpara=3)
julia> H.para,H.rootpara
([[9, -1], [9, -1]], [3, 3])
julia> @Mvp x,y,z,t
julia> H=hecke(W,[[x,y]])
hecke(B₂,Vector{Mvp{Int64, Int64}}[[x, y]])
julia> rootpara(H);H
hecke(B₂,Vector{Mvp{Int64, Int64}}[[x, y]],rootpara=ζ₄x½y½)
julia> H=hecke(W,[[x,y],[z,t]])
hecke(B₂,Vector{Mvp{Int64, Int64}}[[x, y], [z, t]])
julia> rootpara(H);H
hecke(B₂,Vector{Mvp{Int64, Int64}}[[x, y], [z, t]],rootpara=Mvp{Cyc{Int64}, Rational{Int64}}[ζ₄x½y½, ζ₄t½z½])
julia> hecke(coxgroup(:F,4),(q,q^2)).para
4-element Vector{Vector{Pol{Int64}}}:
 [q, -1]
 [q, -1]
 [q², -1]
 [q², -1]
julia> hecke(complex_reflection_group(3,1,2),q).para # spetsial parameters
2-element Vector{Vector{Pol{Cyc{Int64}}}}:
 [q, ζ₃, ζ₃²]
 [q, -1]Chevie.HeckeAlgebras.Tbasis — MethodTbasis(H::HeckeAlgebra) The  T basis of  H. It is  defined currently for Iwahori-Hecke algebras and  for Hecke algebras of cyclic  complex reflection groups G(d,1,1). It returns  a function, say T,  which can take an  argument of the following forms
T(i::Integer): the generatorT_swheres=H.W(i).T(i₁,…,iᵣ): the productT(i₁)…T(iᵣ)T([i₁,…,iᵣ]): same asT(i₁,…,iᵣ)T(w)wherew∈ H.W: returnsT_w
julia> H=hecke(coxgroup(:A,2),Pol(:q))
hecke(A₂,q)
julia> T=Tbasis(H);T(longest(H.W))^2
q³T.+(q³-2q²+q)T₂₁+(q³-q²)T₂+(q³-q²)T₁+(q³-2q²+2q-1)T₁₂₁+(q³-2q²+q)T₁₂
julia> W=crg(3,1,1)
G₃‚₁‚₁
julia> H=hecke(crg(3,1,1),Pol(:q))
hecke(G₃‚₁‚₁,q)
julia> T=Tbasis(H);T(1)^3
(q-1)T.+(q-1)T₁+qT₁₁Chevie.HeckeAlgebras.alt — Functionalt(a::HeckeTElt)
a should be an element of an Iwahori-Hecke algebra H. the involution on H   defined  by  x↦  bar(x)   on  coefficients  and  Tₛ↦  uₛ,₀uₛ,₁Tₛ. Essentially it corresponds to tensoring with the sign representation.
julia> W=coxgroup(:G,2);H=hecke(W,Pol(:q))
hecke(G₂,q)
julia> T=Tbasis(H);h=T(1,2)*T(2,1)
q²T.+(q²-q)T₁+(q-1)T₁₂₁
julia> alt(h)
q⁻²T.+(q⁻²-q⁻³)T₁+(q⁻³-q⁻⁴)T₁₂₁Chevie.Garside.α — Methodα(a::HeckeTElt)
the anti-involution on the Hecke algebra defined by $T_w↦ T_{inv(w)}$.
Chevie.Chars.CharTable — MethodCharTable(H::HeckeAlgebra or HeckeCoset)
returns the CharTable of the Hecke algebra H. For the primitive complex reflection group G₃₄ there are missing entries. If W=H.W, the columns of  the  CharTable  are  labelled  by  classnames(W); the i-th column contains   the  character  values   for  the  lift   to  H  of  the  word classinfo(W).classreps[i]   for   the   element   classreps(W)[i]  (see char_valuesfor more information).
julia> H=hecke(crg(4),Pol())
hecke(G₄,q)
julia> CharTable(H)
CharTable(hecke(G₄,q))
┌────┬──────────────────────────────────────┐
│    │.    z 212   12    z12     1        1z│
├────┼──────────────────────────────────────┤
│φ₁‚₀│1   q⁶  q³   q²     q⁸     q        q⁷│
│φ₁‚₄│1    1   1  ζ₃²    ζ₃²    ζ₃        ζ₃│
│φ₁‚₈│1    1   1   ζ₃     ζ₃   ζ₃²       ζ₃²│
│φ₂‚₅│2   -2   .    1     -1    -1         1│
│φ₂‚₃│2 -2q³   . ζ₃²q -ζ₃²q⁴ q+ζ₃² -q⁴-ζ₃²q³│
│φ₂‚₁│2 -2q³   .  ζ₃q  -ζ₃q⁴  q+ζ₃  -q⁴-ζ₃q³│
│φ₃‚₂│3  3q²  -q    .      .   q-1     q³-q²│
└────┴──────────────────────────────────────┘Chevie.HeckeAlgebras.central_monomials — Functioncentral_monomials(H)
Let  H  be  an  Hecke  algebra  for  the finite reflection group W. The function  returns the scalars by which the image  in H of π acts on the irreducible representations of H.
When  W is irreducible,  π is the  generator of the  center of the pure braid  group.  In  general,  it  is  the  product of such elements for each irreducible  component. When  W is  a Coxeter  group, the  image of  π in H is $T_{w_0}^2$.
julia> H=hecke(coxgroup(:H,3),Pol(:q))
hecke(H₃,q)
julia> central_monomials(H)
10-element Vector{Pol{Cyc{Int64}}}:
 1
 q³⁰
 q¹²
 q¹⁸
 q¹⁰
 q¹⁰
 q²⁰
 q²⁰
 q¹⁵
 q¹⁵Chevie.HeckeAlgebras.class_polynomials — Functionclass_polynomials(h::HeckeElt)
returns  the  class  polynomials  of  the  element h of the Iwahori-Hecke algebra or coset given by h.H with respect to the T basis for a set R of  representatives  of  minimal  length  in  the  conjugacy classes of the Coxeter group or coset H.W. Such minimal length representatives are given by  classreps(H.W). The vector p of  these polynomials has the property that  if X is the  matrix of the values  of the irreducible characters of H  on T_w (for w∈ R), then the product X*p is the list of values of the irreducible characters on h.
julia> W=coxsym(4)
𝔖 ₄
julia> H=hecke(W,Pol(:q))
hecke(𝔖 ₄,q)
julia> h=Tbasis(H,longest(W))
T₁₂₁₃₂₁
julia> p=class_polynomials(h)
5-element Vector{Pol{Int64}}:
 0
 0
 q²
 q³-2q²+q
 q³-q²+q-1The class polynomials were introduced in Geck-Pfeiffer1993.
Chevie.HeckeAlgebras.char_values — Functionchar_values(h::HeckeTElt)
h is an element of an Iwahori-Hecke algebra H. The function returns the values  of the irreducible characters of H  on h (the method used is to convert to the T basis, and then use class_polynomials).
julia> W=coxgroup(:B,2)
B₂
julia> H=hecke(W,q^2;rootpara=q)
hecke(B₂,q²,rootpara=q)
julia> char_values(Cpbasis(H)(1,2,1))
5-element Vector{Pol{Int64}}:
 -q-q⁻¹
 q+q⁻¹
 0
 q³+2q+2q⁻¹+q⁻³
 0char_values(H::HeckeAlgebra,v::Vector{<:Integer})
For an Iwahori-Hecke algebra this computes the character values of H on Tbasis(H)(v).
For  H the Hecke algebra  of a complex reflection  group W this routine computes  character values on a  lift of the element  of W defined by the word v in gens(W).
For  complex reflection  groups the  character table  of the  generic Hecke algebra of W has been computed (excepted for G₃₄) in the sense that, if s₁,…,sₙ are generators of the braid group lifting the Broué-Malle-Rouquier-Bessis-Michel generators of W, there is at least one element  v  in  each  conjugacy  class  of  W and one expression in the generators  for it such that the character  values of the image Tᵥ in the Hecke  algebra of the lift to the braid group are known. Such an expression in the generators will be called a known word (the list of known words is obtained  by word.(conjugacy_classes(W))  or classinfo(W).classtext. If the  word v is known, the computation is quick using the character table. If  not,  the  function  computes  the  trace  of  Tᵥ in each irreducible representation.   The   values   returned   are   missing   for   missing representations  (see representation;  there are  missing representations for G₃₁, G₃₂ and G₃₄).
julia> W=crg(4)
G₄
julia> H=hecke(W,Pol(:q))
hecke(G₄,q)
julia> char_values(H,[2,1,2])
7-element Vector{Pol{Cyc{Int64}}}:
 q³
 1
 1
 0
 0
 0
 -qChevie.HeckeAlgebras.schur_elements — Functionschur_elements(H)
returns the list of Schur elements for the Hecke algebra H
julia> H=hecke(complex_reflection_group(4),Pol(:q))
hecke(G₄,q)
julia> s=schur_elements(H)
7-element Vector{Pol{Cyc{Int64}}}:
 q⁸+2q⁷+3q⁶+4q⁵+4q⁴+4q³+3q²+2q+1
 2√-3+(6+4√-3)q⁻¹+12q⁻²+(6-4√-3)q⁻³-2√-3q⁻⁴
 -2√-3+(6-4√-3)q⁻¹+12q⁻²+(6+4√-3)q⁻³+2√-3q⁻⁴
 2+2q⁻¹+4q⁻²+2q⁻³+2q⁻⁴
 ζ₃²√-3q³+(3-√-3)q²+3q+3+√-3-ζ₃√-3q⁻¹
 -ζ₃√-3q³+(3+√-3)q²+3q+3-√-3+ζ₃²√-3q⁻¹
 q²+2q+2+2q⁻¹+q⁻²
julia> CycPol.(s)
7-element Vector{CycPol{Cyc{Int64}}}:
 Φ₂²Φ₃Φ₄Φ₆
 2√-3q⁻⁴Φ₂²Φ′₃Φ′₆
 -2√-3q⁻⁴Φ₂²Φ″₃Φ″₆
 2q⁻⁴Φ₃Φ₄
 ζ₃²√-3q⁻¹Φ₂²Φ′₃Φ″₆
 -ζ₃√-3q⁻¹Φ₂²Φ″₃Φ′₆
 q⁻²Φ₂²Φ₄Chevie.HeckeAlgebras.factorized_schur_element — Functionfactorized_schur_element(H,phi)
returns  the factorized schur_element  (see factorized_schur_elements) of the  Hecke algebra  H for  the irreducible  character of H of parameter phi (see charinfo(W).charparams)
julia> W=complex_reflection_group(4)
G₄
julia> @Mvp x,y; H=hecke(W,[[1,x,y]])
hecke(G₄,Vector{Mvp{Int64, Int64}}[[1, x, y]])
julia> factorized_schur_element(H,[[2,5]])
-x⁻¹y(xy+1)(x-1)Φ₆(xy⁻¹)(y-1)Chevie.HeckeAlgebras.factorized_schur_elements — Functionfactorized_schur_elements(H)
Let  H be  a Hecke  algebra for  the complex  reflection group W, whose parameters are all (Laurent) monomials in some variables x₁,…,xₙ, and let K  be the field of definition of W. Then Maria Chlouveraki has shown that the  Schur elements of H take the  particular form M ∏ᵩ φ(Mᵩ) where φ runs  over  a  list  of  K-cyclotomic  polynomials,  and  M  and Mᵩ are (Laurent)  monomials (in possibly some  fractional powers) of the variables xᵢ.  The  function  factorized_schur_elements  returns a data structure (see HeckeAlgebras.FactSchur) which shows this factorization.
julia> W=complex_reflection_group(4)
G₄
julia> @Mvp x,y; H=hecke(W,[[1,x,y]])
hecke(G₄,Vector{Mvp{Int64, Int64}}[[1, x, y]])
julia> factorized_schur_elements(H)
7-element Vector{Chevie.HeckeAlgebras.FactSchur}:
 x⁻⁴y⁻⁴(xy+1)Φ₁Φ₆(x)Φ₁Φ₆(y)
 (x²y⁻¹+1)Φ₁Φ₆(x)Φ₁Φ₆(xy⁻¹)
 -x⁻⁴y⁵Φ₁Φ₆(xy⁻¹)(xy⁻²+1)Φ₁Φ₆(y)
 -x⁻¹y(xy+1)(x-1)Φ₆(xy⁻¹)(y-1)
 -x⁻⁴y(x²y⁻¹+1)(x-1)(xy⁻¹-1)Φ₆(y)
 x⁻¹y⁻¹Φ₆(x)(xy⁻¹-1)(xy⁻²+1)(y-1)
 x⁻²y(x²y⁻¹+1)(xy+1)(xy⁻²+1)Chevie.HeckeAlgebras.FactSchur — TypeA  FactSchur representing  a Schur  element of  the form  M∏ᵩφ(Mᵩ) (see factorized_schur_element)  is  a  struct  with a field factor which  holds the  monomial M,  and a  field vcyc  which holds a list of NamedTuples  describing each  factor Mᵩ  in the  product. An element of vcyc  representing a  term φ(Mᵩ)  is itself  a NamedTuple with fields monomial holding Mᵩ (as an Mvp with a single term), and a field pol holding a CycPol (see CycPol) representing φ.
A  few operations are implemented for  FactSchur, like *, lcm. They can be  evaluated  partially  or  completely  keeping  as  much as possible the factored form.
julia> @Mvp x,y; W=crg(4); H=hecke(W,[[1,x,y]])
hecke(G₄,Vector{Mvp{Int64, Int64}}[[1, x, y]])
julia> p=factorized_schur_element(H,[[2,5]])
-x⁻¹y(xy+1)(x-1)Φ₆(xy⁻¹)(y-1)
julia> q=p(;x=E(3)) # partial evaluation
ζ₃²√-3y⁻¹Φ₁Φ₂Φ′₆²(y)
julia> q(;y=2//1)
-9√-3/2In contrast, the next operation expands p to an Mvp:
julia> HeckeAlgebras.expand(p)
Mvp{Cyc{Rational{Int64}},Rational{Int64}}: -x³y+x³+x²y²-2x²+x²y⁻¹-xy³+2xy-xy⁻¹+y³-2y²+1+x⁻¹y²-x⁻¹yChevie.Chars.representation — Methodrepresentation(H::HeckeAlgebra or HeckeCoset,i)
returns,  for the i-th irreducible representation of the Hecke algebra or Hecke  coset H, a list  of matrices images of  the generators of H in a model of the representation (for Hecke cosets, the result is a NamedTuple with fields gens, a representation of hecke(H), and F, the matrix for the automorphism of H in the representation).
This  function  is  based  on  the  classification,  and  is  not yet fully implemented for the Hecke algebras of the groups G₃₁, G₃₂ and G₃₄: we have 50 representations out of 59 for type G₃₁, 30 representations out of 102  for  type  G₃₂  and  38  representations  out of 169 for type G₃₄; nothing is returned for a missing representation.
julia> W=crg(24)
G₂₄
julia> H=hecke(W,Pol(:q))
hecke(G₂₄,q)
julia> representation(H,3)
3-element Vector{Matrix{Pol{Cyc{Int64}}}}:
 [q 0 0; -q -1 0; -q 0 -1]
 [-1 0 -1; 0 -1 ((1-√-7)/2)q; 0 0 q]
 [-1 -1 0; 0 q 0; 0 (1+√-7)/2 -1]The  models  implemented  for  imprimitive  types G(de,e,n) for n>2 and de>1 (this includes Coxeter type Dₙ), excepted for G(2,2,4), G(3,3,3), G(3,3,4), G(3,3,5) and G(4,4,3), involve rational fractions.
julia> H=hecke(coxgroup(:D,5),Pol())
hecke(D₅,q)
julia> representation(H,7)
5-element Vector{Matrix{Frac{Pol{Int64}}}}:
 [q 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 -1]
 [q 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 -1]
 [1/(-q-1) q/(q+1) 0 0; (q²+q+1)/(q+1) q²/(q+1) 0 0; 0 0 -1 0; 0 0 0 -1]
 [-1 0 0 0; 0 1/(-q²-q-1) (-q²-q)/(-q²-q-1) 0; 0 (q³+q²+q+1)/(q²+q+1) q³/(q²+q+1) 0; 0 0 0 -1]
 [-1 0 0 0; 0 -1 0 0; 0 0 1/(-q³-q²-q-1) (-q³-q²-q)/(-q³-q²-q-1); 0 0 (q⁴+q³+q²+q+1)/(q³+q²+q+1) q⁴/(q³+q²+q+1)]Chevie.Chars.representation — Methodrepresentation(h::HeckeElt,r)
r  should be a representation  of h.H, or an  integer, in which case it means  representation(h.H,r). The value of that representation applied to h is returned. Here h.H can be an Hecke algebra or an Hecke coset.
julia> H=hecke(coxsym(4),Pol(:x));T=Tbasis(H);
julia> representation(T(1,2)^2,2)
3×3 Matrix{Pol{Rational{Int64}}}:
 -x²  -x²   0
 x²   0     0
 -x   -x+1  1Chevie.Chars.representations — Methodrepresentations(H)
returns  the list  of representations  of the  Hecke algebra or Hecke coset H (see representation).
julia> WF=rootdatum("2B2")
²B₂
julia> H=hecke(WF,Pol(:x)^2;rootpara=Pol())
hecke(²B₂,x²,rootpara=x)
julia> representations(H)
3-element Vector{NamedTuple{(:gens, :F)}}:
 (gens = Matrix{Pol{Int64}}[[x²;;], [x²;;]], F = [1;;])
 (gens = Matrix{Pol{Int64}}[[-1;;], [-1;;]], F = [1;;])
 (gens = Matrix{Pol{Cyc{Int64}}}[[-1 0; √2x x²], [x² √2x; 0 -1]], F = [0 -1; -1 0])Chevie.HeckeAlgebras.isrepresentation — Functionisrepresentation(H::HeckeAlgebra,r;details=false) or
isrepresentation(W::ComplexReflectionGroup,r;details=false)
returns true or false, according to whether a given set r of elements in bijection with gens(H.W) defines a representation of the Hecke algebra H or not; isrepresentation(W,r) is equivalent to isrepresentation(hecke(W)),r).  If  details=true  the  functions  gives details of the cause of a failure.
julia> H=hecke(coxgroup(:F,4))
hecke(F₄,1)
julia> isrepresentation(H,reflrep(H))
true
julia> isrepresentation(H,Tbasis(H).(1:4))
trueisrepresentation(H::HeckeCoset,r;details=false) or
isrepresentation(W::Spets,r;details=false)
returns true or false, according to whether NamedTuple r defines a representation of H or not. ```
Chevie.PermRoot.reflection_representation — Methodreflection_representation(H::HeckeAlgebra) or reflrep(H)
returns  a  list  of  matrices  for  the  generators  of H which give the reflection representation of the Iwahori-Hecke algebra H.
julia> W=coxgroup(:B,2);H=hecke(W,Pol(:q))
hecke(B₂,q)
julia> reflrep(H)
2-element Vector{Matrix{Pol{Int64}}}:
 [-1 0; -q q]
 [q -2; 0 -1]
julia> H=hecke(coxgroup(:H,3))
hecke(H₃,1)
julia> reflrep(H)
3-element Vector{Matrix{Cyc{Int64}}}:
 [-1 0 0; -1 1 0; 0 0 1]
 [1 (-3-√5)/2 0; 0 -1 0; 0 -1 1]
 [1 0 0; 0 1 -1; 0 0 -1]Chevie.HeckeAlgebras.HeckeCoset — TypeHeckeCosets  are  Hϕ  where  H  is  an  Iwahori-Hecke algebra of some Coxeter  group W on which the automorphism ϕ of some Spets Wϕ acts by ϕ(T_w)=T_{ϕ(w)}.  For Weyl groups, this corresponds  to the action of the Frobenius  automorphism  on  the  commuting  algebra  of the induced of the trivial  representation from the  rational points of  some F-stable Borel subgroup to 𝐆 ^F.
julia> WF=rootdatum(:u,3)
u₃
julia> HF=hecke(WF,Pol(:v)^2;rootpara=Pol())
hecke(u₃,v²,rootpara=v)
julia> CharTable(HF)
CharTable(hecke(u₃,v²,rootpara=v))
┌───┬──────────┐
│   │ 111 21  3│
├───┼──────────┤
│111│  -1  1 -1│
│21 │-2v³  .  v│
│3  │  v⁶  1 v²│
└───┴──────────┘Thanks to the work of Xuhua He and Sian Nie, 'class_polynomials' also make sense for these cosets. This is used to compute such character tables.
Chevie.HeckeAlgebras.hecke — Methodhecke(HF::HeckeCoset) returns the underlying Hecke algebra
Chevie.HeckeAlgebras.hecke — Methodhecke(WF::Spets, H)
hecke(WF::Spets, params)
Construct  a HeckeCoset  from a  Coxeter coset  WF and an Hecke algebra associated to Group(WF). The second form is equivalent to Hecke(WF,Hecke(Group(WF),params)). See the doc for HeckeCoset.