1
0
mirror of https://github.com/kalmarek/SmallHyperbolic synced 2024-07-27 21:10:31 +02:00

update script to use Arblib

This commit is contained in:
kalmarek 2020-11-14 20:38:04 +01:00
parent ae027329be
commit 89c8009083
No known key found for this signature in database
GPG Key ID: 8BF1A3855328FC15

View File

@ -60,11 +60,18 @@ function SL2p_gens(p::Integer)
return a,b
end
function adjacency(ϱ, CC, a, b)
A = matrix(CC, ϱ(a))
B = matrix(CC, ϱ(b))
function adjacency(ϱ, a, b; prec=256)
order_a = findfirst(i-> isone(a^i), 1:100)
order_b = findfirst(i-> isone(b^i), 1:100)
@assert !isnothing(order_a) && order_a > 1
@assert !isnothing(order_b) && order_b > 1
return sum(A^i for i = 1:4) + sum(B^i for i = 1:4)
k = order_a-1 + order_b-1
A = AcbMatrix(ϱ(a), prec=prec)
B = AcbMatrix(ϱ(b), prec=prec)
res = sum(A^i for i = 1:order_a-1) + sum(B^i for i = 1:order_b-1)
return Arblib.scalar_div!(res, res, k)
end
function parse_our_args()
@ -111,7 +118,6 @@ const LOGFILE = "SL(2,$p)_eigvals_$(now()).log"
open(joinpath("log", LOGFILE), "w") do io
with_logger(SimpleLogger(io)) do
CC = AcbField(128)
a,b = SL2p_gens(p)
a = SL₂{p}(get(parsed_args, "a", a))
@ -125,24 +131,24 @@ open(joinpath("log", LOGFILE), "w") do io
RamanujanGraphs.CosetDecomposition(SL2p, Borel(SL₂{p}))
end
all_large_evs = []
all_large_evs = Arb[]
let α = RamanujanGraphs.generator(RamanujanGraphs.GF{p}(0))
for j = 0:(p-1)÷4
h = PrincipalRepr(
α => root_of_unity(CC, (p - 1) ÷ 2, j),
α => unit_root((p - 1) ÷ 2, j, prec=PRECISION),
Borel_cosets,
)
@time adj = adjacency(h, CC, a, b)
@time adj = adjacency(h, a, b, prec=PRECISION)
try
@time ev = let evs = safe_eigvals(adj)
_count_multiplicites(evs)
@time evs = let evs = safe_eigvals(adj)
count_multiplicites(evs)
end
all_large_evs = vcat(all_large_evs, [Float64(real(x[1])) for x in ev[1:2]])
append!(all_large_evs, [real(first(x)) for x in evs[1:2]])
@info "Principal Series Representation $j" ev[1:2] ev[end]
@info "Principal Series Representation $j" evs[1:2] evs[end]
catch ex
@error "Principal Series Representation $j failed" ex
ex isa InterruptException && rethrow(ex)
@ -155,28 +161,28 @@ open(joinpath("log", LOGFILE), "w") do io
if p % 4 == 1
ub = (p - 1) ÷ 4
ζ = root_of_unity(CC, (p + 1) ÷ 2, 1)
ζ = unit_root((p + 1) ÷ 2, 1, prec=PRECISION)
else # p % 4 == 3
ub = (p + 1) ÷ 4
ζ = root_of_unity(CC, (p + 1), 1)
ζ = unit_root((p + 1), 1, prec=PRECISION)
end
for k = 1:ub
h = DiscreteRepr(
RamanujanGraphs.GF{p}(1) => root_of_unity(CC, p),
RamanujanGraphs.GF{p}(1) => unit_root(p, prec=PRECISION),
β => ζ^k,
)
@time adj = adjacency(h, CC, a, b)
@time adj = adjacency(h, a, b, prec=PRECISION)
try
@time ev = let evs = safe_eigvals(adj)
_count_multiplicites(evs)
@time evs = let evs = safe_eigvals(adj)
count_multiplicites(evs)
end
all_large_evs = vcat(all_large_evs, [Float64(real(x[1])) for x in ev[1:2]])
append!(all_large_evs, [real(first(x)) for x in evs[1:2]])
@info "Discrete Series Representation $k" ev[1:2] ev[end]
@info "Discrete Series Representation $k" evs[1:2] evs[end]
catch ex
@error "Discrete Series Representation $k : failed" ex
ex isa InterruptException && rethrow(ex)