2020-05-13 01:18:35 +02:00
|
|
|
using Nemo
|
|
|
|
using DelimitedFiles
|
|
|
|
|
|
|
|
include("src/nemo_utils.jl")
|
|
|
|
|
|
|
|
function parse_evalZ(arg, expr_str)
|
|
|
|
ex = Meta.parse(expr_str)
|
|
|
|
return @eval begin
|
|
|
|
let Z=$arg
|
|
|
|
$ex
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function parse_evalzz(arg, expr_str)
|
|
|
|
ex = Meta.parse(expr_str)
|
|
|
|
return @eval begin
|
|
|
|
let zz=$arg
|
|
|
|
$ex
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-05-13 01:45:19 +02:00
|
|
|
function load_discrete_repr(i, q=109; CC=AcbField(512))
|
|
|
|
ζ = root_of_unity(CC, (q-1)÷2)
|
2020-05-13 01:18:35 +02:00
|
|
|
degree = q-1
|
|
|
|
|
|
|
|
ra = readdlm("data/Discrete reps PSL(2, $q)/discrete_rep_$(i)_a.txt", ',', String)
|
|
|
|
a = matrix(CC, [CC(parse_evalZ(ζ, s)) for s in ra[1:degree, 1:degree]])
|
|
|
|
|
|
|
|
rb = readdlm("data/Discrete reps PSL(2, $q)/discrete_rep_$(i)_b.txt", ',', String)
|
|
|
|
b = matrix(CC, [CC(parse_evalZ(ζ, s)) for s in rb[1:degree, 1:degree]])
|
|
|
|
|
|
|
|
return a,b
|
|
|
|
end
|
|
|
|
|
2020-05-13 01:45:19 +02:00
|
|
|
function load_principal_repr(i, q=109; CC=AcbField(512))
|
|
|
|
ζ = root_of_unity(CC, (q-1)÷2)
|
2020-05-13 01:18:35 +02:00
|
|
|
degree = q+1
|
|
|
|
|
|
|
|
ra = readdlm("data/Principal reps PSL(2, $q)/principal_rep_$(i)_a.txt", ',', String)
|
|
|
|
a = matrix(CC, [CC(parse_evalzz(ζ, s)) for s in ra[1:degree, 1:degree]])
|
|
|
|
|
|
|
|
rb = readdlm("data/Principal reps PSL(2, $q)/principal_rep_$(i)_b.txt", ',', String)
|
|
|
|
b = matrix(CC, [CC(parse_evalzz(ζ, s)) for s in rb[1:degree, 1:degree]])
|
|
|
|
|
|
|
|
return a,b
|
|
|
|
end
|
|
|
|
|
2020-05-13 02:27:20 +02:00
|
|
|
function safe_eigvals(m::acb_mat)
|
|
|
|
CC = base_ring(m)
|
|
|
|
X = matrix(CC, rand(CC, size(m)))
|
|
|
|
return eigvals(X*m*inv(X))
|
|
|
|
end
|
|
|
|
|
2020-05-13 01:45:19 +02:00
|
|
|
for i in 0:27
|
|
|
|
try
|
|
|
|
a,b = load_principal_repr(i)
|
|
|
|
adjacency = sum([[a^i for i in 1:4]; [b^i for i in 1:4]])
|
2020-05-13 02:27:20 +02:00
|
|
|
@time evc = safe_eigvals(adjacency)
|
2020-05-13 01:45:19 +02:00
|
|
|
ev = sort(real.(first.(evc)), lt=<, rev=true)
|
2020-05-13 02:27:20 +02:00
|
|
|
@info "Principal Series Representation $i" ev[1:2]
|
2020-05-13 01:45:19 +02:00
|
|
|
catch ex
|
|
|
|
@error "Principal Series Representation $i failed"
|
|
|
|
ex isa InterruptException && throw(ex)
|
|
|
|
end
|
|
|
|
end
|
2020-05-13 01:18:35 +02:00
|
|
|
|
|
|
|
for i in 1:27
|
|
|
|
try
|
|
|
|
a,b = load_discrete_repr(i)
|
|
|
|
adjacency = sum([[a^i for i in 1:4]; [b^i for i in 1:4]])
|
2020-05-13 02:27:20 +02:00
|
|
|
@time evc = safe_eigvals(adjacency)
|
2020-05-13 01:18:35 +02:00
|
|
|
ev = sort(real.(first.(evc)), lt=<, rev=true)
|
2020-05-13 02:27:20 +02:00
|
|
|
@info "Discrete Series Representation $i" ev[1:2]
|
2020-05-13 01:18:35 +02:00
|
|
|
catch ex
|
|
|
|
@error "Discrete Series Representation $i : failed"
|
|
|
|
ex isa InterruptException && rethrow(ex)
|
|
|
|
end
|
|
|
|
end
|