1
0
mirror of https://github.com/kalmarek/SmallHyperbolic synced 2024-11-12 20:55:29 +01:00
SmallHyperbolic/PSL.jl

94 lines
2.2 KiB
Julia
Raw Normal View History

using Nemo
using DelimitedFiles
include("src/nemo_utils.jl")
2020-05-13 15:19:09 +02:00
const PRECISION = 256
2020-05-13 15:18:46 +02:00
function parse_eval(arg, expr_str, var)
ex = Meta.parse(expr_str)
2020-05-13 15:18:46 +02:00
svar = :($var)
return @eval begin
2020-05-13 15:18:46 +02:00
let $svar = $arg
$ex
end
end
end
2020-05-13 15:19:09 +02:00
function load_discrete_repr(i, q = 109; CC = AcbField(PRECISION))
2020-05-13 15:18:46 +02:00
ζ = root_of_unity(CC, (q - 1) ÷ 2)
degree = q - 1
2020-05-13 15:18:46 +02:00
ra = readdlm(
"data/Discrete reps PSL(2, $q)/discrete_rep_$(i)_a.txt",
',',
String,
)
a = matrix(CC, [CC(parse_eval(ζ, s, :Z)) for s in ra[1:degree, 1:degree]])
2020-05-13 15:18:46 +02:00
rb = readdlm(
"data/Discrete reps PSL(2, $q)/discrete_rep_$(i)_b.txt",
',',
String,
)
b = matrix(CC, [CC(parse_eval(ζ, s, :Z)) for s in rb[1:degree, 1:degree]])
2020-05-13 15:18:46 +02:00
return a, b
end
2020-05-13 15:19:09 +02:00
function load_principal_repr(i, q = 109; CC = AcbField(PRECISION))
2020-05-13 15:18:46 +02:00
ζ = root_of_unity(CC, (q - 1) ÷ 2)
degree = q + 1
2020-05-13 15:18:46 +02:00
ra = readdlm(
"data/Principal reps PSL(2, $q)/principal_rep_$(i)_a.txt",
',',
String,
)
a = matrix(CC, [CC(parse_eval(ζ, s, :zz)) for s in ra[1:degree, 1:degree]])
2020-05-13 15:18:46 +02:00
rb = readdlm(
"data/Principal reps PSL(2, $q)/principal_rep_$(i)_b.txt",
',',
String,
)
b = matrix(CC, [CC(parse_eval(ζ, s, :zz)) for s in rb[1:degree, 1:degree]])
2020-05-13 15:18:46 +02:00
return a, b
end
2020-05-13 15:18:46 +02:00
2020-05-13 02:27:20 +02:00
function safe_eigvals(m::acb_mat)
2020-05-13 15:18:46 +02:00
CC = base_ring(m)
X = matrix(CC, rand(CC, size(m)))
return eigvals(X * m * inv(X))
2020-05-13 02:27:20 +02:00
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
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)
ev = sort(real.(first.(evc)), lt=<, rev=true)
2020-05-13 02:27:20 +02:00
@info "Discrete Series Representation $i" ev[1:2]
catch ex
@error "Discrete Series Representation $i : failed"
ex isa InterruptException && rethrow(ex)
end
end