From 3e10177ac99e1dd3467c1f3a3c070c3c8bc4a384 Mon Sep 17 00:00:00 2001 From: Tommy Hofmann Date: Fri, 19 Jun 2020 16:37:30 +0200 Subject: [PATCH] Work around compiler bug --- src/Polymake/NmbThy.jl | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Polymake/NmbThy.jl b/src/Polymake/NmbThy.jl index 798f82a75505..9fd6193f0755 100644 --- a/src/Polymake/NmbThy.jl +++ b/src/Polymake/NmbThy.jl @@ -3,19 +3,19 @@ export norm_equation_fac_elem, norm_equation, irreducibles, factorisations function norm_equation_fac_elem(R::NfAbsOrd, k::fmpz; abs::Bool = false) @assert Hecke.ismaximal(R) lp = factor(k) - S = [] + S = Tuple{Vector{Tuple{Hecke.ideal_type(R), Int}}, Vector{fmpz_mat}}[] for (p, k) = lp.fac P = prime_decomposition(R, p) s = solve_non_negative(matrix(FlintZZ, 1, length(P), [degree(x[1]) for x = P]), matrix(FlintZZ, 1, 1, [k])) - push!(S, (P, [view(s, i:i, 1:ncols(s)) for i=1:nrows(s)])) + push!(S, (P, fmpz_mat[view(s, i:i, 1:ncols(s)) for i=1:nrows(s)])) end - sol = [] + sol = FacElem{nf_elem, AnticNumberField}[] for x in Base.Iterators.ProductIterator(Tuple(t[2] for t = S)) I = ideal(R, 1) for i = 1:length(S) - I *= prod(S[i][1][j][1]^Int(x[i][j]) for j=1:length(S[i][1])) + I *= prod(Hecke.ideal_type(R)[S[i][1][j][1]^Int(x[i][j]) for j=1:length(S[i][1])]) end - fl, g = Hecke.isprincipal_fac_elem(I) + fl, g = Hecke.isprincipal_fac_elem(I::Hecke.ideal_type(R)) if fl push!(sol, g) end @@ -23,12 +23,12 @@ function norm_equation_fac_elem(R::NfAbsOrd, k::fmpz; abs::Bool = false) if !abs u, mu = unit_group_fac_elem(R) i = findfirst(x -> norm(mu(x)) == -1, gens(u)) - ns = [norm(x) for x = sol] + ns = fmpq[norm(x) for x = sol] if i === nothing return [sol[i] for i in 1:length(sol) if ns[i] == k] end U = mu(u[i]) - return [ ns[i] == k ? sol[i] : sol[i] * U for i = 1:length(sol)] + return FacElem{nf_elem, AnticNumberField}[ ns[i] == k ? sol[i] : sol[i] * U for i = 1:length(sol)] end return sol end @@ -38,7 +38,7 @@ norm_equation_fac_elem(R::NfAbsOrd, k::Base.Integer; abs::Bool = false) = function norm_equation(R::NfAbsOrd, k::fmpz; abs::Bool = false) s = norm_equation_fac_elem(R, k, abs = abs) - return [R(evaluate(x)) for x = s] + return elem_type(R)[R(evaluate(x)) for x = s] end norm_equation(R::NfAbsOrd, k::Base.Integer; abs::Bool = false) = norm_equation(R, fmpz(k), abs = abs)