Skip to content

Commit

Permalink
Initial expressify test (#248)
Browse files Browse the repository at this point in the history
  • Loading branch information
SoongNoonien authored Jan 31, 2025
1 parent a714e1d commit fbcef30
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 70 deletions.
10 changes: 5 additions & 5 deletions docs/src/book.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ linear combinations over $\mathbb{Q}(q)$ of symbolic “roots of unity”
depending on the parameters listed above.
```jldoctest book
julia> T[4,4]
(q + 1)*exp(2π𝑖((a*n)//(q - 1))) + exp(2π𝑖((-2*a*n)//(q - 1)))
(q + 1)*exp(2π𝑖*(a*n)//(q - 1)) + exp(-2π𝑖*(2*a*n)//(q - 1))
```

Denoting row 4 of the table by $\chi_4$, we note that is not a single
Expand All @@ -44,10 +44,10 @@ Generic character of SL3.n1
q^2 + q + 1
q + 1
1
(q + 1)*exp(2π𝑖((a*n)//(q - 1))) + exp(2π𝑖((-2*a*n)//(q - 1)))
exp(2π𝑖((a*n)//(q - 1))) + exp(2π𝑖((-2*a*n)//(q - 1)))
exp(2π𝑖((a*n)//(q - 1))) + exp(2π𝑖((b*n)//(q - 1))) + exp(2π𝑖((-a*n - b*n)//(q - 1)))
exp(2π𝑖((a*n)//(q - 1)))
(q + 1)*exp(2π𝑖*(a*n)//(q - 1)) + exp(-2π𝑖*(2*a*n)//(q - 1))
exp(2π𝑖*(a*n)//(q - 1)) + exp(-2π𝑖*(2*a*n)//(q - 1))
exp(2π𝑖*(a*n)//(q - 1)) + exp(2π𝑖*(b*n)//(q - 1)) + exp(2π𝑖*(-a*n - b*n)//(q - 1))
exp(2π𝑖*(a*n)//(q - 1))
0
```

Expand Down
12 changes: 6 additions & 6 deletions docs/src/characters.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@ Generic character of GL2
k ∈ {1,…, q - 1}, l ∈ {1,…, q - 1} except -l + k ∈ (q - 1)ℤ
of degree q + 1
with values
(q + 1)*exp(2π𝑖((i*l + i*k)//(q - 1)))
exp(2π𝑖((i*l + i*k)//(q - 1)))
exp(2π𝑖((i*l + j*k)//(q - 1))) + exp(2π𝑖((i*k + j*l)//(q - 1)))
(q + 1)*exp(2π𝑖*(i*l + i*k)//(q - 1))
exp(2π𝑖*(i*l + i*k)//(q - 1))
exp(2π𝑖*(i*l + j*k)//(q - 1)) + exp(2π𝑖*(i*k + j*l)//(q - 1))
0
julia> collect(ct)
4-element Vector{GenericCharacterTables.GenericCyclo}:
(q + 1)*exp(2π𝑖((i*l + i*k)//(q - 1)))
exp(2π𝑖((i*l + i*k)//(q - 1)))
exp(2π𝑖((i*l + j*k)//(q - 1))) + exp(2π𝑖((i*k + j*l)//(q - 1)))
(q + 1)*exp(2π𝑖*(i*l + i*k)//(q - 1))
exp(2π𝑖*(i*l + i*k)//(q - 1))
exp(2π𝑖*(i*l + j*k)//(q - 1)) + exp(2π𝑖*(i*k + j*l)//(q - 1))
0
```

Expand Down
44 changes: 22 additions & 22 deletions src/GenericCharacter.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ Generic character of GL2
kt1 ∈ {1,…, q - 1}, kt2 ∈ {1,…, q - 1}
of degree q
with values
q*exp(2π𝑖((2*i*kt1 + 2*i*kt2)//(q - 1)))
q*exp(2π𝑖*(2*i*kt1 + 2*i*kt2)//(q - 1))
0
exp(2π𝑖((i*kt1 + i*kt2 + j*kt1 + j*kt2)//(q - 1)))
(-1)*exp(2π𝑖((i*kt1 + i*kt2)//(q - 1)))
exp(2π𝑖*(i*kt1 + i*kt2 + j*kt1 + j*kt2)//(q - 1))
-exp(2π𝑖*(i*kt1 + i*kt2)//(q - 1))
```
"""
function tensor_product(char1::GenericCharacter, char2::GenericCharacter)
Expand Down Expand Up @@ -111,10 +111,10 @@ Generic character of GL2
k ∈ {1,…, q - 1}
of degree 1
with values
exp(2π𝑖((2*i*k)//(q - 1)))
(q^2 - 1)*exp(2π𝑖((2*i*k)//(q - 1)))
(q^2 + q)*exp(2π𝑖((i*k + j*k)//(q - 1)))
(q^2 - q)*exp(2π𝑖((i*k)//(q - 1)))
exp(2π𝑖*(2*i*k)//(q - 1))
(q^2 - 1)*exp(2π𝑖*(2*i*k)//(q - 1))
(q^2 + q)*exp(2π𝑖*(i*k + j*k)//(q - 1))
(q^2 - q)*exp(2π𝑖*(i*k)//(q - 1))
```
"""
Expand Down Expand Up @@ -183,10 +183,10 @@ Generic character of GL2
kl1 ∈ {1,…, q - 1}, kl2 ∈ {1,…, q - 1}
of degree q + 5
with values
(5)*exp(2π𝑖((2*i*kl1)//(q - 1))) + q*exp(2π𝑖((2*i*kl2)//(q - 1)))
(5)*exp(2π𝑖((2*i*kl1)//(q - 1)))
exp(2π𝑖((i*kl2 + j*kl2)//(q - 1))) + (5)*exp(2π𝑖((i*kl1 + j*kl1)//(q - 1)))
(-1)*exp(2π𝑖((i*kl2)//(q - 1))) + (5)*exp(2π𝑖((i*kl1)//(q - 1)))
5*exp(2π𝑖*(2*i*kl1)//(q - 1)) + q*exp(2π𝑖*(2*i*kl2)//(q - 1))
5*exp(2π𝑖*(2*i*kl1)//(q - 1))
exp(2π𝑖*(i*kl2 + j*kl2)//(q - 1)) + 5*exp(2π𝑖*(i*kl1 + j*kl1)//(q - 1))
-exp(2π𝑖*(i*kl2)//(q - 1)) + 5*exp(2π𝑖*(i*kl1)//(q - 1))
```
"""
function linear_combination(coeffs::Vector{<:RingElement}, chars::Vector{<:GenericCharacter})
Expand Down Expand Up @@ -405,10 +405,10 @@ Generic character of GL2
k ∈ {1,…, q - 1}
of degree 1
with values
exp(2π𝑖((2*i*k)//(q - 1)))
exp(2π𝑖((2*i*k)//(q - 1)))
exp(2π𝑖((i*k + j*k)//(q - 1)))
exp(2π𝑖((i*k)//(q - 1)))
exp(2π𝑖*(2*i*k)//(q - 1))
exp(2π𝑖*(2*i*k)//(q - 1))
exp(2π𝑖*(i*k + j*k)//(q - 1))
exp(2π𝑖*(i*k)//(q - 1))
julia> q,(i,j,l,k) = parameters(g);
Expand All @@ -418,10 +418,10 @@ Generic character of GL2
k ∈ {1,…, q - 1}, substitutions: i = q
of degree 1
with values
exp(2π𝑖((2*k)//(q - 1)))
exp(2π𝑖((2*k)//(q - 1)))
exp(2π𝑖((j*k + k)//(q - 1)))
exp(2π𝑖(k//(q - 1)))
exp(2π𝑖*(2*k)//(q - 1))
exp(2π𝑖*(2*k)//(q - 1))
exp(2π𝑖*(j*k + k)//(q - 1))
exp(2π𝑖*k//(q - 1))
```
"""
Expand Down Expand Up @@ -556,9 +556,9 @@ Generic character of GL2
k ∈ {1,…, q - 1}, l ∈ {1,…, q - 1} except -l + k ∈ (q - 1)ℤ
of degree q + 1
with values
(q + 1)*exp(2π𝑖((i*l + i*k)//(q - 1)))
exp(2π𝑖((i*l + i*k)//(q - 1)))
exp(2π𝑖((i*l + j*k)//(q - 1))) + exp(2π𝑖((i*k + j*l)//(q - 1)))
(q + 1)*exp(2π𝑖*(i*l + i*k)//(q - 1))
exp(2π𝑖*(i*l + i*k)//(q - 1))
exp(2π𝑖*(i*l + j*k)//(q - 1)) + exp(2π𝑖*(i*k + j*l)//(q - 1))
0
julia> [g[3]]
Expand Down
22 changes: 11 additions & 11 deletions src/GenericConjugacyClasses.jl
Original file line number Diff line number Diff line change
Expand Up @@ -360,10 +360,10 @@ Generic conjugacy class of GL2
i ∈ {1,…, q - 1}
of order 1
with values
exp(2π𝑖((2*i*k)//(q - 1)))
q*exp(2π𝑖((2*i*k)//(q - 1)))
(q + 1)*exp(2π𝑖((i*l + i*k)//(q - 1)))
(q - 1)*exp(2π𝑖((i*k)//(q - 1)))
exp(2π𝑖*(2*i*k)//(q - 1))
q*exp(2π𝑖*(2*i*k)//(q - 1))
(q + 1)*exp(2π𝑖*(i*l + i*k)//(q - 1))
(q - 1)*exp(2π𝑖*(i*k)//(q - 1))
julia> q,(i,j,l,k) = parameters(g);
Expand All @@ -373,10 +373,10 @@ Generic conjugacy class of GL2
i ∈ {1,…, q - 1}, substitutions: i = q
of order 1
with values
exp(2π𝑖((2*k)//(q - 1)))
q*exp(2π𝑖((2*k)//(q - 1)))
(q + 1)*exp(2π𝑖((l + k)//(q - 1)))
(q - 1)*exp(2π𝑖(k//(q - 1)))
exp(2π𝑖*(2*k)//(q - 1))
q*exp(2π𝑖*(2*k)//(q - 1))
(q + 1)*exp(2π𝑖*(l + k)//(q - 1))
(q - 1)*exp(2π𝑖*k//(q - 1))
```
"""
function specialize(class::GenericConjugacyClass, var::UPoly, expr::RingElement)
Expand Down Expand Up @@ -512,9 +512,9 @@ Generic conjugacy class of GL2
i ∈ {1,…, q - 1}, j ∈ {1,…, q - 1} except i - j ∈ (q - 1)ℤ
of order q^2 + q
with values
exp(2π𝑖((i*k + j*k)//(q - 1)))
exp(2π𝑖((i*k + j*k)//(q - 1)))
exp(2π𝑖((i*l + j*k)//(q - 1))) + exp(2π𝑖((i*k + j*l)//(q - 1)))
exp(2π𝑖*(i*k + j*k)//(q - 1))
exp(2π𝑖*(i*k + j*k)//(q - 1))
exp(2π𝑖*(i*l + j*k)//(q - 1)) + exp(2π𝑖*(i*k + j*l)//(q - 1))
0
julia> [conjugacy_class_type(g, 3)]
Expand Down
27 changes: 12 additions & 15 deletions src/GenericCyclotomics.jl
Original file line number Diff line number Diff line change
Expand Up @@ -211,27 +211,24 @@ function show(io::IO, R::GenericCycloRing)
end
end

function show(io::IO, x::GenericCyclo) # TODO Use OSCAR's expressify system here.
if iszero(x)
print(io, "0")
return nothing
end
for (i, (argument, modulus)) in enumerate(x.f)
function expressify(x::GenericCyclo; context = nothing)
sum = Expr(:call, :+)
for (argument, modulus) in x.f
modulus_expr = expressify(modulus; context)
if iszero(argument)
print(io, modulus)
elseif isone(modulus)
print(io, "exp(2π𝑖($(argument)))")
elseif is_monomial(modulus)
print(io, "$(modulus)*exp(2π𝑖($(argument)))")
tmp = modulus_expr
else
print(io, "($(modulus))*exp(2π𝑖($(argument)))")
end
if i < length(x.f)
print(io, " + ")
argument_expr = expressify(argument; context)
exp_expr = Expr(:call, Symbol("exp"), Expr(:call, :*, Symbol("2π𝑖"), argument_expr))
tmp = Expr(:call, :*, modulus_expr, exp_expr)
end
push!(sum.args, tmp)
end
return sum
end

@enable_all_show_via_expressify GenericCyclo

# Unary operations

function -(x::GenericCyclo)
Expand Down
6 changes: 3 additions & 3 deletions src/SumProc.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ julia> S = generic_cyclotomic_ring(R);
julia> i, j, k, l = gens(R, ["i", "j", "k", "l"]);
julia> a = S(Dict(2//(q-1)*i*j+1//q*k^2+1//2*i*l => R(1)))
exp(2π𝑖((1//2*q^2*i*l + 2*q*i*j - 1//2*q*i*l + q*k^2 - k^2)//(q^2 - q)))
exp(2π𝑖*(1//2*q^2*i*l + 2*q*i*j - 1//2*q*i*l + q*k^2 - k^2)//(q^2 - q))
julia> evaluate(a,[i,k],[j,3*i])
exp(2π𝑖((1//2*q^2*j*l + 9*q*i^2 + 2*q*j^2 - 1//2*q*j*l - 9*i^2)//(q^2 - q)))
exp(2π𝑖*(1//2*q^2*j*l + 9*q*i^2 + 2*q*j^2 - 1//2*q*j*l - 9*i^2)//(q^2 - q))
```
"""
Expand All @@ -44,7 +44,7 @@ julia> S = generic_cyclotomic_ring(R);
julia> i, = gens(R, ["i"]);
julia> a = S(Dict(1//(q-1)*i => R(1)))
exp(2π𝑖(i//(q - 1)))
exp(2π𝑖*i//(q - 1))
julia> GenericCharacterTables.nesum(a, i, 1, q-1)
0
Expand Down
16 changes: 8 additions & 8 deletions src/Types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ julia> q = gen(R, "q");
julia> S = generic_cyclotomic_ring(R);
julia> S(q; exponent=1//(q-1))
q*exp(2π𝑖(1//(q - 1)))
q*exp(2π𝑖*1//(q - 1))
```
"""
mutable struct GenericCyclo <: RingElem
Expand Down Expand Up @@ -94,13 +94,13 @@ julia> q = gen(R, "q");
julia> S = generic_cyclotomic_ring(R);
julia> a = S(q; exponent=1//(q-1))
q*exp(2π𝑖(1//(q - 1)))
q*exp(2π𝑖*1//(q - 1))
julia> b = S(q^2; exponent=1//(q^2-1))
q^2*exp(2π𝑖(1//(q^2 - 1)))
q^2*exp(2π𝑖*1//(q^2 - 1))
julia> a//b
q*exp(2π𝑖(1//(q - 1)))//(q^2*exp(2π𝑖(1//(q^2 - 1))))
q*exp(2π𝑖*1//(q - 1))//(q^2*exp(2π𝑖*1//(q^2 - 1)))
```
"""
struct GenericCycloFrac
Expand Down Expand Up @@ -234,10 +234,10 @@ Generic character of GL2
k ∈ {1,…, q - 1}
of degree 1
with values
exp(2π𝑖((2*i*k)//(q - 1)))
exp(2π𝑖((2*i*k)//(q - 1)))
exp(2π𝑖((i*k + j*k)//(q - 1)))
exp(2π𝑖((i*k)//(q - 1)))
exp(2π𝑖*(2*i*k)//(q - 1))
exp(2π𝑖*(2*i*k)//(q - 1))
exp(2π𝑖*(i*k + j*k)//(q - 1))
exp(2π𝑖*(i*k)//(q - 1))
```
"""
struct GenericCharacter <: AbstractGenericCharacter
Expand Down

0 comments on commit fbcef30

Please sign in to comment.