Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Type piracy in Hecke #1126

Open
fingolfin opened this issue Jun 16, 2023 · 9 comments
Open

Type piracy in Hecke #1126

fingolfin opened this issue Jun 16, 2023 · 9 comments

Comments

@fingolfin
Copy link
Contributor

fingolfin commented Jun 16, 2023

Enabling the type piracy report in test/Aqua.jl currently reports 721 (!) instances of type piracy (with Julia 1.9). That's really bad, and might explain partially of why loading Hecke is comparatively slow.

UPDATE 2024-05-08: we are down to 298 instances with Julia 1.10.3 and 1e5806b

UPDATE 2024-11-29: we are back up to 340 instances with Julia 1.11.1 and Hecke v0.34.8

I think many of these come from methods that really should be in Nemo, so perhaps we can start migrating some more. Perhaps @lgoettgens is interested in this?

Here is the list:

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.11.1 (2024-10-16)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using Aqua, Hecke ; Aqua.test_piracies(Hecke);
 _    _           _
| |  | |         | |         |  Software package for
| |__| | ___  ___| | _____   |  algorithmic algebraic number theory
|  __  |/ _ \/ __| |/ / _ \  |
| |  | |  __/ (__|   <  __/  |  Manual: https://thofma.github.io/Hecke.jl
|_|  |_|\___|\___|_|\_\___|  |  Version 0.34.8
Possible type-piracy detected:
[1] *(::ZZRing, x::Union{Integer, ZZRingElem}) @ Hecke.jl/src/NumField/QQ.jl:42
[2] *(::ZZRing, x::Union{QQFieldElem, Rational}) @ Hecke.jl/src/NumField/QQ.jl:62
[3] *(f::PolyRingElem{<:SeriesElem{QadicFieldElem}}, g::PolyRingElem{<:SeriesElem{QadicFieldElem}}) @ Hecke.jl/src/Misc/Series.jl:22
[4] *(R::Ring, x::Union{Integer, ZZRingElem}) @ Hecke.jl/src/Misc/PIDIdeal.jl:41
[5] *(x::Union{Integer, ZZRingElem}, R::Ring) @ Hecke.jl/src/Misc/PIDIdeal.jl:43
[6] *(x::Union{Integer, ZZRingElem}, ::ZZRing) @ Hecke.jl/src/NumField/QQ.jl:44
[7] *(x::Union{QQFieldElem, Rational}, ::ZZRing) @ Hecke.jl/src/NumField/QQ.jl:60
[8] (K::AbsSimpleNumField)(c::Vector{QQFieldElem}) @ Hecke.jl/src/NumField/Elem.jl:284
[9] (L::AbsSimpleNumField)(a::Vector) @ Hecke.jl/src/NumField/Elem.jl:297
[10] (f::ComposedFunction{typeof(log), ComposedFunction{typeof(abs), T}})(x::Union{NumFieldOrderElem, NumFieldElem, FacElem}) where T @ Hecke.jl/src/NumField/ComplexEmbeddings/Generic.jl:438
[11] (f::ComposedFunction{typeof(log), ComposedFunction{typeof(abs), T}})(x::Union{NumFieldOrderElem, NumFieldElem, FacElem}, prec::Int64) where T @ Hecke.jl/src/NumField/ComplexEmbeddings/Generic.jl:438
[12] (F::AbstractAlgebra.Generic.FunctionField{T})(p::PolyRingElem{<:AbstractAlgebra.Generic.RationalFunctionFieldElem{T}}) where T<:FieldElem @ Hecke.jl/src/GenOrd/Auxiliary.jl:98
[13] (F::AbstractAlgebra.Generic.FunctionField)(c::Vector{<:RingElem}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:107
[14] Int64(a::QQFieldElem) @ Hecke.jl/src/RCF/autos.jl:629
[15] (::QQField)(a::LocalizedEuclideanRingElem{ZZRingElem}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:152
[16] (Q::QadicField)(a::PadicFieldElem) @ Hecke.jl/src/LocalField/Ring.jl:156
[17] _hnf(x::MatElem{ZZRingElem}) @ Hecke.jl/src/Misc/Matrix.jl:163
[18] _hnf_with_transform(x::MatElem{ZZRingElem}) @ Hecke.jl/src/Misc/Matrix.jl:173
[19] _residue_field(f::PolyRingElem{<:NumFieldElem}) @ Hecke.jl/src/GenOrd/Ideal.jl:1050
[20] absolute_degree(::PadicField) @ Hecke.jl/src/LocalField/LocalField.jl:158
[21] absolute_degree(::QQField) @ Hecke.jl/src/NumField/Field.jl:83
[22] absolute_degree(K::QadicField) @ Hecke.jl/src/LocalField/LocalField.jl:162
[23] absolute_degree(K::NumField{QQFieldElem}) @ Hecke.jl/src/NumField/Field.jl:79
[24] absolute_degree(A::NumField) @ Hecke.jl/src/NumField/Field.jl:75
[25] absolute_degree(F::FinField) @ Hecke.jl/src/Misc/RelFiniteField.jl:74
[26] absolute_norm(a::QadicFieldElem) @ Hecke.jl/src/LocalField/Elem.jl:465
[27] absolute_norm(a::PadicFieldElem) @ Hecke.jl/src/LocalField/Elem.jl:461
[28] absolute_norm(a::QQFieldElem) @ Hecke.jl/src/NumField/Elem.jl:400
[29] absolute_norm(a::QQPolyRingElem) @ Hecke.jl/src/NumField/Elem.jl:430
[30] absolute_norm(a::T) where T<:NumFieldElem @ Hecke.jl/src/NumField/Elem.jl:394
[31] absolute_norm(f::PolyRingElem{AbsSimpleNumFieldElem}) @ Hecke.jl/src/NumField/Elem.jl:432
[32] absolute_norm(f::PolyRingElem{<:NumFieldElem}) @ Hecke.jl/src/NumField/Elem.jl:436
[33] absolute_norm(x::FinFieldElem) @ Hecke.jl/src/Misc/RelFiniteField.jl:401
[34] absolute_norm(a::T) where T<:Union{AbsNonSimpleNumFieldElem, AbsSimpleNumFieldElem} @ Hecke.jl/src/NumField/Elem.jl:398
[35] absolute_tr(a::AbsSimpleNumFieldElem) @ Hecke.jl/src/NumField/Elem.jl:383
[36] absolute_tr(a::QadicFieldElem) @ Hecke.jl/src/LocalField/Elem.jl:510
[37] absolute_tr(a::PadicFieldElem) @ Hecke.jl/src/LocalField/Elem.jl:506
[38] absolute_tr(x::QQFieldElem) @ Hecke.jl/src/NumField/Elem.jl:387
[39] absolute_tr(a::T) where T<:NumFieldElem @ Hecke.jl/src/NumField/Elem.jl:379
[40] absolute_tr(x::FinFieldElem) @ Hecke.jl/src/Misc/RelFiniteField.jl:409
[41] annihilator(a::ResElem{T}) where T<:Union{Integer, ZZRingElem} @ Hecke.jl/src/Misc/nmod_poly.jl:303
[42] any_root(f::PolyRingElem{T}) where T<:FinFieldElem @ Hecke.jl/src/Map/FiniteField.jl:149
[43] any_root(F::Union{FqField, fqPolyRepField, Hecke.RelFinField}, f::PolyRingElem) @ Hecke.jl/src/LocalField/neq.jl:28
[44] basis(F::AbstractAlgebra.Generic.FunctionField) @ Hecke.jl/src/GenOrd/Auxiliary.jl:83
[45] basis(K::FinField, k::FinField) @ Hecke.jl/src/LocalField/neq.jl:82
[46] basis(K::Union{QadicField, Hecke.LocalField}) @ Hecke.jl/src/LocalField/LocalField.jl:278
[47] characteristic(K::AbstractAlgebra.Generic.LaurentSeriesField{<:FinFieldElem}) @ Hecke.jl/src/LocalField/LaurentSeries.jl:1
[48] charpoly(a::AbstractAlgebra.Generic.FunctionFieldElem) @ Hecke.jl/src/GenOrd/Auxiliary.jl:113
[49] charpoly(f::AbstractAlgebra.Generic.Poly{T}, g::AbstractAlgebra.Generic.Poly{T}) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:727
[50] coefficients(a::SimpleNumFieldElem; copy) @ Hecke.jl/src/NumField/Elem.jl:271
[51] coefficients(f::AbstractAlgebra.Generic.FunctionFieldElem) @ Hecke.jl/src/GenOrd/Auxiliary.jl:10
[52] kwcall(::NamedTuple, ::typeof(coefficients), a::SimpleNumFieldElem) @ Hecke.jl/src/NumField/Elem.jl:271
[53] conj(a::AbsSimpleNumFieldElem) @ Hecke.jl/src/NumField/NfAbs/Conjugates.jl:551
[54] conjugates(x::QQFieldElem) @ Hecke.jl/src/NumField/NfAbs/Conjugates.jl:72
[55] conjugates(x::QQFieldElem, abs_tol::Int64) @ Hecke.jl/src/NumField/NfAbs/Conjugates.jl:72
[56] conjugates(K::AbsSimpleNumField, p::Int64) @ Hecke.jl/src/conjugates.jl:75
[57] conjugates(x::NumFieldElem, C::AcbField) @ Hecke.jl/src/NumField/NfAbs/Conjugates.jl:68
[58] conjugates(x::NumFieldElem, abs_tol::Int64, T) @ Hecke.jl/src/NumField/NfAbs/Conjugates.jl:48
[59] conjugates(x::NumFieldElem, abs_tol::Int64) @ Hecke.jl/src/NumField/NfAbs/Conjugates.jl:48
[60] conjugates(x::NumFieldElem) @ Hecke.jl/src/NumField/NfAbs/Conjugates.jl:48
[61] crt(r::Vector{T}, m::Vector{T}) where T @ Hecke.jl/src/Misc/CRT.jl:335
[62] crt(r1::PolyRingElem{T}, m1::PolyRingElem{T}, r2::PolyRingElem{T}, m2::PolyRingElem{T}) where T @ Hecke.jl/src/Misc/CRT.jl:276
[63] defining_polynomial(Q::QadicField) @ Hecke.jl/src/LocalField/qAdic.jl:86
[64] defining_polynomial(Q::QadicField, P::Ring) @ Hecke.jl/src/LocalField/qAdic.jl:86
[65] degree(L::FinField, k::FinField) @ Hecke.jl/src/LocalField/neq.jl:3
[66] denominator(a::QQFieldElem, R::LocalizedEuclideanRing{ZZRingElem}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:150
[67] denominator(a::AbstractAlgebra.Generic.RationalFunctionFieldElem{T}, S::PolyRing{T}) where T @ Hecke.jl/src/GenOrd/Auxiliary.jl:203
[68] denominator!(z::ZZRingElem, a::AbsSimpleNumFieldElem) @ Hecke.jl/src/NumField/Elem.jl:599
[69] dim(K::NumField) @ Hecke.jl/src/NumField/Field.jl:61
[70] discriminant(K::SimpleNumField) @ Hecke.jl/src/NumField/SimpleNumField/Field.jl:137
[71] discriminant(F::AbstractAlgebra.Generic.FunctionField) @ Hecke.jl/src/GenOrd/Auxiliary.jl:121
[72] divexact(f1::PolyRingElem{T}, g1::PolyRingElem{T}; check) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:465
[73] kwcall(::NamedTuple, ::typeof(divexact), f1::PolyRingElem{T}, g1::PolyRingElem{T}) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:465
[74] divisors(M::ZZMatrix, d::ZZRingElem) @ Hecke.jl/src/Misc/Matrix.jl:846
[75] divrem(n::T, m::T) where T<:Union{ZZModRingElem, zzModRingElem} @ Hecke.jl/src/AlgAssAbsOrd/Conjugacy/Lifting.jl:208
[76] embed(f::Map{<:NumField, <:NumField}) @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:1047
[77] embed_any(k::FinField, K::FinField) @ Hecke.jl/src/Map/FiniteField.jl:97
[78] enumerate(G::AbstractAlgebra.Generic.SymmetricGroup{T}) where T<:Integer @ Hecke.jl/src/AlgAss/AlgGrp.jl:317
[79] euler_phi(f::T) where T<:Union{FpPolyRingElem, fpPolyRingElem, fqPolyRepPolyRingElem} @ Hecke.jl/src/Misc/nmod_poly.jl:1270
[80] evaluate(x::QQFieldElem, ::PosInf, p::Int64) @ Hecke.jl/src/NumField/QQ.jl:295
[81] factor(R::ComplexField, f::Union{QQPolyRingElem, ZZPolyRingElem}) @ Hecke.jl/src/Misc/Poly.jl:750
[82] factor(R::ComplexField, f::Union{QQPolyRingElem, ZZPolyRingElem}, abs_tol::Int64, initial_prec::Int64...) @ Hecke.jl/src/Misc/Poly.jl:750
[83] factor(a::LocalizedEuclideanRingElem{ZZRingElem}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:154
[84] factor(::ZZRing, a::QQFieldElem) @ Hecke.jl/src/Misc/Integer.jl:724
[85] factor(a::AbstractAlgebra.Generic.MPoly{AbsSimpleNumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/MPolyFactor.jl:16
[86] factor(R::AcbField, f::Union{QQPolyRingElem, ZZPolyRingElem}) @ Hecke.jl/src/Misc/Poly.jl:738
[87] factor(R::AcbField, f::Union{QQPolyRingElem, ZZPolyRingElem}, abs_tol::Int64, initial_prec::Int64...) @ Hecke.jl/src/Misc/Poly.jl:738
[88] factor(C::AcbField, f::Union{QQMPolyRingElem, ZZMPolyRingElem}) @ Hecke.jl/src/NumField/NfAbs/MPolyAbsFact.jl:1521
[89] factor(R::ArbField, f::Union{QQMPolyRingElem, ZZMPolyRingElem}) @ Hecke.jl/src/NumField/NfAbs/MPolyAbsFact.jl:1545
[90] factor(K::AbsSimpleNumField, f::QQPolyRingElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:281
[91] factor(K::AbsSimpleNumField, f::ZZPolyRingElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:286
[92] factor(f::PolyRingElem{QQBarFieldElem}) @ Hecke.jl/src/Misc/QQBar.jl:53
[93] factor(f::PolyRingElem{<:NumFieldElem}) @ Hecke.jl/src/NumField/Elem.jl:446
[94] factor(f::PolyRingElem{AbsSimpleNumFieldElem}; algo) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:307
[95] factor(a::AbstractAlgebra.Generic.MPoly{<:NumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/MPolyFactor.jl:12
[96] factor(R::S, a::AbstractAlgebra.Generic.RationalFunctionFieldElem{T}) where {T, S<:PolyRing{T}} @ Hecke.jl/src/GenOrd/Auxiliary.jl:211
[97] factor(x::RingElement) @ Hecke.jl/src/Hecke.jl:283
[98] factor(R::Union{RealField, ArbField}, f::Union{QQPolyRingElem, ZZPolyRingElem}) @ Hecke.jl/src/Misc/Poly.jl:774
[99] factor(R::Union{RealField, ArbField}, f::Union{QQPolyRingElem, ZZPolyRingElem}, abs_tol::Int64, initial_prec::Int64...) @ Hecke.jl/src/Misc/Poly.jl:774
[100] kwcall(::NamedTuple, ::typeof(factor), f::PolyRingElem{AbsSimpleNumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:307
[101] factor_squarefree(a::AbstractAlgebra.Generic.MPoly{AbsSimpleNumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/MPolyFactor.jl:20
[102] factor_squarefree(a::AbstractAlgebra.Generic.MPoly{<:NumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/MPolyFactor.jl:24
[103] finite_field(f::T; ...) where T<:Union{FqPolyRepPolyRingElem, fqPolyRepPolyRingElem} @ Hecke.jl/src/Misc/RelFiniteField.jl:550
[104] finite_field(f::T, s::Union{Char, AbstractString, Symbol}; cached, check) where T<:Union{FqPolyRepPolyRingElem, fqPolyRepPolyRingElem} @ Hecke.jl/src/Misc/RelFiniteField.jl:550
[105] kwcall(::NamedTuple, ::typeof(Nemo.Native.finite_field), f::T) where T<:Union{FqPolyRepPolyRingElem, fqPolyRepPolyRingElem} @ Hecke.jl/src/Misc/RelFiniteField.jl:550
[106] kwcall(::NamedTuple, ::typeof(Nemo.Native.finite_field), f::T, s::Union{Char, AbstractString, Symbol}) where T<:Union{FqPolyRepPolyRingElem, fqPolyRepPolyRingElem} @ Hecke.jl/src/Misc/RelFiniteField.jl:550
[107] force_coerce(a::NumField{T}, b::NumFieldElem) where T @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:915
[108] force_coerce(a::NumField{T}, b::NumFieldElem, throw_error_val::Val{throw_error}) where {T, throw_error} @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:915
[109] force_op(op::Function, ::Val{throw_error}, a::NumFieldElem...) where throw_error @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:1157
[110] (R::fpPolyRing)(f::fqPolyRepPolyRingElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:478
[111] (A::fqPolyRepField)(x::zzModPolyRingElem) @ Hecke.jl/src/Misc/FiniteField.jl:22
[112] (A::fqPolyRepField)(x::fpPolyRingElem) @ Hecke.jl/src/Misc/FiniteField.jl:31
[113] function_field(f::PolyRingElem{<:AbstractAlgebra.Generic.RationalFunctionFieldElem}, s::Union{Char, AbstractString, Symbol}; check, cached) @ Hecke.jl/src/GenOrd/Auxiliary.jl:75
[114] function_field(f::PolyRingElem{<:AbstractAlgebra.Generic.RationalFunctionFieldElem}; ...) @ Hecke.jl/src/GenOrd/Auxiliary.jl:75
[115] kwcall(::NamedTuple, ::typeof(function_field), f::PolyRingElem{<:AbstractAlgebra.Generic.RationalFunctionFieldElem}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:75
[116] kwcall(::NamedTuple, ::typeof(function_field), f::PolyRingElem{<:AbstractAlgebra.Generic.RationalFunctionFieldElem}, s::Union{Char, AbstractString, Symbol}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:75
[117] gcd(a::AbstractAlgebra.Generic.Poly{AbsSimpleNumFieldElem}, b::AbstractAlgebra.Generic.Poly{AbsSimpleNumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/Poly.jl:62
[118] gcd(a::AbstractAlgebra.Generic.Poly{AbsSimpleNumFieldElem}, b::AbstractAlgebra.Generic.Poly{AbsSimpleNumFieldElem}, test_sqfr::Bool) @ Hecke.jl/src/NumField/NfAbs/Poly.jl:62
[119] gcd(f::AbstractAlgebra.Generic.MPoly{<:NumFieldElem}, g::AbstractAlgebra.Generic.MPoly{<:NumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/MPolyGcd.jl:1
[120] gcd(f::AbstractAlgebra.Generic.Poly{T}, g::AbstractAlgebra.Generic.Poly{T}) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:244
[121] gcdx(f::AbstractAlgebra.Generic.Poly{T}, g::AbstractAlgebra.Generic.Poly{T}) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:380
[122] generator_minimum_polynomial(mp::Nemo.FinFieldMorphism{FqPolyRepField, FqPolyRepField}) @ Hecke.jl/src/Map/FiniteField.jl:145
[123] gens(L::QadicField, K::PadicField) @ Hecke.jl/src/LocalField/automorphisms.jl:214
[124] gens(L::FinField, l::FinField) @ Hecke.jl/src/LocalField/neq.jl:735
[125] getindex(K::Ring, G::AbstractAlgebra.Group) @ Hecke.jl/src/AlgAss/AlgGrp.jl:107
[126] hlift_have_lcs(A::E, Auf::Vector{E}, lcs::Vector{E}, mainvar::Int64, minorvars::Vector{Int64}, alphas::Vector) where E<:MPoly{AbsSimpleNumFieldElem} @ Hecke.jl/src/NumField/NfAbs/MPolyFactor.jl:52
[127] hnf(x::T) where T<:MatElem @ Hecke.jl/src/GenOrd/Ideal.jl:235
[128] hnf(x::T, shape::Symbol) where T<:MatElem @ Hecke.jl/src/GenOrd/Ideal.jl:235
[129] hnf_modular(M::MatElem{T}, d::T) where T @ Hecke.jl/src/GenOrd/Auxiliary.jl:47
[130] hnf_modular(M::MatElem{T}, d::T, is_prime::Bool) where T @ Hecke.jl/src/GenOrd/Auxiliary.jl:47
[131] hom(K::PadicField, F::T; check) where T<:Union{PadicField, QadicField, LocalField} @ Hecke.jl/src/LocalField/automorphisms.jl:142
[132] hom(F::FinField, K::FinField, a::FinFieldElem; check) @ Hecke.jl/src/Map/FiniteField.jl:1
[133] hom(K::S, L::T, x...; inverse, check, compute_inverse) where {S<:Union{QQField, NumField}, T<:Ring} @ Hecke.jl/src/Map/NumField.jl:137
[134] hom(K::S, L::T, x...; inverse, check, compute_inverse) where {S<:Union{QadicField, LocalField}, T<:Union{QadicField, LocalField}} @ Hecke.jl/src/LocalField/map.jl:63
[135] kwcall(::NamedTuple, ::typeof(hom), K::PadicField, F::T) where T<:Union{PadicField, QadicField, LocalField} @ Hecke.jl/src/LocalField/automorphisms.jl:142
[136] kwcall(::NamedTuple, ::typeof(hom), F::FinField, K::FinField, a::FinFieldElem) @ Hecke.jl/src/Map/FiniteField.jl:1
[137] kwcall(::NamedTuple, ::typeof(hom), K::S, L::T, x...) where {S<:Union{QQField, NumField}, T<:Ring} @ Hecke.jl/src/Map/NumField.jl:137
[138] kwcall(::NamedTuple, ::typeof(hom), K::S, L::T, x...) where {S<:Union{QadicField, LocalField}, T<:Union{QadicField, LocalField}} @ Hecke.jl/src/LocalField/map.jl:63
[139] howell_form(A::AbstractAlgebra.Generic.Mat{ZZModRingElem}) @ Hecke.jl/src/LinearAlgebra/Howell.jl:12
[140] howell_form!(A::AbstractAlgebra.Generic.Mat{ZZModRingElem}) @ Hecke.jl/src/LinearAlgebra/Howell.jl:28
[141] ideal(::ZZRing, x::ZZRingElem) @ Hecke.jl/src/NumField/QQ.jl:46
[142] ideal(::ZZRing, x::Integer) @ Hecke.jl/src/NumField/QQ.jl:48
[143] ideal(::ZZRing, x::AbstractVector{ZZRingElem}) @ Hecke.jl/src/NumField/QQ.jl:50
[144] ideal(::ZZRing, x::AbstractVector{<:Integer}) @ Hecke.jl/src/NumField/QQ.jl:52
[145] ideal(R::Field, x...) @ Hecke.jl/src/Misc/PIDIdeal.jl:66
[146] ideal(R::Field, xs::AbstractVector{T}) where T<:RingElement @ Hecke.jl/src/Misc/PIDIdeal.jl:70
[147] ideal(R::PolyRing{<:FieldElem}, xs::AbstractVector{T}) where T<:RingElement @ Hecke.jl/src/Misc/PIDIdeal.jl:62
[148] ideal(R::PolyRing{<:FieldElem}, x...) @ Hecke.jl/src/Misc/PIDIdeal.jl:58
[149] integral(f::RelPowerSeriesRingElem{T}) where T @ Hecke.jl/src/Misc/Series.jl:6
[150] inv(f::Nemo.FinFieldMorphism) @ Hecke.jl/src/Misc/RelFiniteField.jl:577
[151] invmod(u::AbstractAlgebra.Generic.Poly{PadicFieldElem}, f::AbstractAlgebra.Generic.Poly{PadicFieldElem}) @ Hecke.jl/src/LocalField/Poly.jl:294
[152] invmod(M::ZZMatrix, d::ZZRingElem) @ Hecke.jl/src/Misc/Matrix.jl:967
[153] invmod(f::AbstractAlgebra.Generic.Poly{T}, M1::AbstractAlgebra.Generic.Poly{T}) where T<:Union{QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:335
[154] is_abelian(K::AbsSimpleNumField) @ Hecke.jl/src/RCF/conductor.jl:602
[155] is_abelian(::NumField) @ Hecke.jl/src/NumField/Field.jl:449
[156] is_absolute(::NumField) @ Hecke.jl/src/NumField/Field.jl:33
[157] is_absolute(::NumField{QQFieldElem}) @ Hecke.jl/src/NumField/Field.jl:35
[158] is_domain_type(::Type{LocalizedEuclideanRingElem{ZZRingElem}}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:170
[159] is_hnf(x::ZZMatrix, shape::Symbol) @ Hecke.jl/src/Misc/Matrix.jl:121
[160] is_irreducible(f::PolyRingElem{<:NumFieldElem}) @ Hecke.jl/src/NumField/Elem.jl:440
[161] is_irreducible(f::PolyRingElem{AbsSimpleNumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:413
[162] is_isomorphic(K::SimpleNumField, L::SimpleNumField) @ Hecke.jl/src/NumField/SimpleNumField/Field.jl:186
[163] is_power(a::AbsSimpleNumFieldElem, n::Int64; with_roots_unity, is_integral, trager) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:668
[164] kwcall(::NamedTuple, ::typeof(is_power), a::AbsSimpleNumFieldElem, n::Int64) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:668
[165] is_square(a::AbsSimpleNumFieldElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:755
[166] is_square_with_sqrt(a::NumFieldElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:757
[167] isreal(::PosInf) @ Hecke.jl/src/NumField/QQ.jl:186
[168] issubset(K::NumField, L::NumField) @ Hecke.jl/src/Hecke.jl:652
[169] lcm(a::Vector{<:RingElem}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:267
[170] length(a::AbsSimpleNumFieldElem) @ Hecke.jl/src/conjugates.jl:125
[171] length(a::AbsSimpleNumFieldElem, p::Int64) @ Hecke.jl/src/conjugates.jl:125
[172] lift(K::AbsSimpleNumField, f::FpPolyRingElem) @ Hecke.jl/src/NumFieldOrd/NfOrd/Ideal/Prime.jl:108
[173] lift(K::AbsSimpleNumField, f::T) where T<:Union{fpPolyRingElem, zzModPolyRingElem} @ Hecke.jl/src/NumFieldOrd/NfOrd/Ideal/Prime.jl:96
[174] lift(R::zzModPolyRing, a::fqPolyRepFieldElem) @ Hecke.jl/src/NumFieldOrd/NfOrd/Hensel.jl:39
[175] lift(a::FqFieldElem, K::PadicField) @ Hecke.jl/src/LocalField/Poly.jl:79
[176] lift(x::fqPolyRepFieldElem, Q::QadicField) @ Hecke.jl/src/LocalField/Poly.jl:104
[177] lift(x::fqPolyRepPolyRingElem, Kt) @ Hecke.jl/src/LocalField/Poly.jl:117
[178] lift(phi::Map, psi::Map) @ Hecke.jl/src/GrpAb/ChainComplex.jl:20
[179] lift(f::T, Kt::PolyRing) where T<:FinFieldElem @ Hecke.jl/src/LocalField/Poly.jl:95
[180] lift(a::T, K::PadicField) where T<:Union{EuclideanRingResidueRingElem{ZZRingElem}, ZZModRingElem, fpFieldElem, zzModRingElem} @ Hecke.jl/src/LocalField/Poly.jl:71
[181] lift!(A::ZZMatrix, B::FqMatrix) @ Hecke.jl/src/AlgAss/radical.jl:358
[182] lll(M::ArbMatrix; ctx) @ Hecke.jl/src/RieSrf/Theta.jl:255
[183] kwcall(::NamedTuple, ::typeof(lll), M::ArbMatrix) @ Hecke.jl/src/RieSrf/Theta.jl:255
[184] lll_with_transform(M::ArbMatrix; ctx) @ Hecke.jl/src/RieSrf/Theta.jl:259
[185] kwcall(::NamedTuple, ::typeof(lll_with_transform), M::ArbMatrix) @ Hecke.jl/src/RieSrf/Theta.jl:259
[186] localization(K::AbstractAlgebra.Generic.RationalFunctionField{T, U} where U<:Union{MPolyRingElem{T}, PolyRingElem{T}}, ::typeof(degree); cached) where T<:FieldElement @ Hecke.jl/src/FunField/DegreeLocalization.jl:489
[187] kwcall(::NamedTuple, ::typeof(localization), K::AbstractAlgebra.Generic.RationalFunctionField{T, U} where U<:Union{MPolyRingElem{T}, PolyRingElem{T}}, ::typeof(degree)) where T<:FieldElement @ Hecke.jl/src/FunField/DegreeLocalization.jl:489
[188] maketype(F::NumField{T}, ::Vector{<:NumFieldElem{T}}, ::AbstractUnitRange, ::Int64...) where T @ Hecke.jl/src/NumField/Elem.jl:171
[189] mfactor_choose_eval_points!(alphas::Vector, A::E, mainvar::Int64, minorvars::Vector{Int64}, size::Int64) where E<:MPoly{AbsSimpleNumFieldElem} @ Hecke.jl/src/NumField/NfAbs/MPolyFactor.jl:28
[190] minpoly(a::NumFieldElem, K::NumField) @ Hecke.jl/src/NumField/NfRel/relative_extension.jl:62
[191] minpoly(a::NumFieldElem, ::QQField) @ Hecke.jl/src/NumField/NfRel/relative_extension.jl:76
[192] minpoly(a::FinFieldElem, mp::Nemo.FinFieldMorphism) @ Hecke.jl/src/Map/FiniteField.jl:131
[193] minpoly(a::AbstractAlgebra.Generic.FunctionFieldElem) @ Hecke.jl/src/GenOrd/Auxiliary.jl:117
[194] minpoly(a::T) where T<:Union{QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Elem.jl:538
[195] minpoly(a::T, Kx::PolyRing) where T<:Union{QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Elem.jl:538
[196] mod(b::AbsSimpleNumFieldElem, p::ZZRingElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:875
[197] mod(x::AbsSimpleNumFieldElem, y::Integer) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:885
[198] norm(a::QQPolyRingElem) @ Hecke.jl/src/NumField/Elem.jl:428
[199] norm(a::FinFieldElem, mp::Nemo.FinFieldMorphism) @ Hecke.jl/src/Map/FiniteField.jl:117
[200] norm(a::NumFieldElem, k::NumField) @ Hecke.jl/src/NumField/Elem.jl:368
[201] norm(a::NumFieldElem, ::QQField) @ Hecke.jl/src/NumField/Elem.jl:372
[202] norm(f::PolyRingElem{fqPolyRepFieldElem}) @ Hecke.jl/src/Misc/RelFiniteField.jl:757
[203] norm(f::PolyRingElem{<:NumFieldElem}) @ Hecke.jl/src/NumField/Elem.jl:414
[204] norm(f::PolyRingElem{<:NumFieldElem}, k::NumField) @ Hecke.jl/src/NumField/Elem.jl:421
[205] norm(f::PolyRingElem{AbsSimpleNumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:246
[206] norm(f::PolyRingElem{T}) where T<:Union{QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:712
[207] norm(m::T, a::AbsSimpleNumFieldElem) where T<:(Map{AbsSimpleNumField, AbsSimpleNumField}) @ Hecke.jl/src/RCF/conductor.jl:1650
[208] number_field(f::Vector{ZZPolyRingElem}; ...) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:910
[209] number_field(f::Vector{ZZPolyRingElem}, s::Vector{<:Union{Char, AbstractString, Symbol}}; cached, check) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:915
[210] number_field(f::Vector{ZZPolyRingElem}, s::Union{Char, AbstractString, Symbol}; cached, check) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:910
[211] number_field(f::Vector{QQPolyRingElem}; ...) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:875
[212] number_field(f::Vector{QQPolyRingElem}, s::String; cached, check) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:875
[213] number_field(f::Vector{QQPolyRingElem}, S::Vector{Symbol}; cached, check) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:894
[214] number_field(f::Vector{QQPolyRingElem}, s::Vector{<:Union{Char, AbstractString, Symbol}}; cached, check) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:889
[215] number_field(f::Vector{QQPolyRingElem}, s::Union{Char, AbstractString, Symbol}; cached, check) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:885
[216] number_field(fields::Vector{AbsSimpleNumField}; cached, check) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:845
[217] number_field(::PosInf) @ Hecke.jl/src/NumField/QQ.jl:221
[218] number_field(S::EuclideanRingResidueRing{QQPolyRingElem}; cached, check) @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:32
[219] number_field(f::ZZPolyRingElem; cached, check) @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:44
[220] number_field(f::ZZPolyRingElem, s::Union{Char, AbstractString, Symbol}; cached, check) @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:39
[221] number_field(K1::AbsSimpleNumField, K2::AbsSimpleNumField; cached, check) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:836
[222] number_field(f::Array{AbstractAlgebra.Generic.Poly{T}, 1}, S::Vector{Symbol}; cached, check) where T @ Hecke.jl/src/NumField/NfRel/NfRelNS.jl:139
[223] number_field(f::Array{AbstractAlgebra.Generic.Poly{T}, 1}; ...) where T @ Hecke.jl/src/NumField/NfRel/NfRelNS.jl:152
[224] number_field(f::Array{AbstractAlgebra.Generic.Poly{T}, 1}, s::Union{Char, AbstractString, Symbol}; cached, check) where T @ Hecke.jl/src/NumField/NfRel/NfRelNS.jl:152
[225] number_field(f::PolyRingElem{T}; ...) where T<:NumFieldElem @ Hecke.jl/src/NumField/NfRel/NfRel.jl:157
[226] number_field(f::PolyRingElem{T}, S::Union{Char, AbstractString, Symbol}; cached, check) where T<:NumFieldElem @ Hecke.jl/src/NumField/NfRel/NfRel.jl:157
[227] kwcall(::NamedTuple, ::typeof(number_field), f::ZZPolyRingElem) @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:44
[228] kwcall(::NamedTuple, ::typeof(number_field), f::ZZPolyRingElem, s::Union{Char, AbstractString, Symbol}) @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:39
[229] kwcall(::NamedTuple, ::typeof(number_field), f::Vector{ZZPolyRingElem}) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:910
[230] kwcall(::NamedTuple, ::typeof(number_field), f::Vector{ZZPolyRingElem}, s::Union{Char, AbstractString, Symbol}) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:910
[231] kwcall(::NamedTuple, ::typeof(number_field), f::Vector{ZZPolyRingElem}, s::Vector{<:Union{Char, AbstractString, Symbol}}) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:915
[232] kwcall(::NamedTuple, ::typeof(number_field), f::Vector{QQPolyRingElem}, S::Vector{Symbol}) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:894
[233] kwcall(::NamedTuple, ::typeof(number_field), f::Vector{QQPolyRingElem}) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:875
[234] kwcall(::NamedTuple, ::typeof(number_field), f::Vector{QQPolyRingElem}, s::String) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:875
[235] kwcall(::NamedTuple, ::typeof(number_field), f::Vector{QQPolyRingElem}, s::Union{Char, AbstractString, Symbol}) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:885
[236] kwcall(::NamedTuple, ::typeof(number_field), f::Vector{QQPolyRingElem}, s::Vector{<:Union{Char, AbstractString, Symbol}}) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:889
[237] kwcall(::NamedTuple, ::typeof(number_field), fields::Vector{AbsSimpleNumField}) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:845
[238] kwcall(::NamedTuple, ::typeof(number_field), S::EuclideanRingResidueRing{QQPolyRingElem}) @ Hecke.jl/src/NumField/NfAbs/NfAbs.jl:32
[239] kwcall(::NamedTuple, ::typeof(number_field), K1::AbsSimpleNumField, K2::AbsSimpleNumField) @ Hecke.jl/src/NumField/NfAbs/NonSimple.jl:836
[240] kwcall(::NamedTuple, ::typeof(number_field), f::Array{AbstractAlgebra.Generic.Poly{T}, 1}, S::Vector{Symbol}) where T @ Hecke.jl/src/NumField/NfRel/NfRelNS.jl:139
[241] kwcall(::NamedTuple, ::typeof(number_field), f::Array{AbstractAlgebra.Generic.Poly{T}, 1}) where T @ Hecke.jl/src/NumField/NfRel/NfRelNS.jl:152
[242] kwcall(::NamedTuple, ::typeof(number_field), f::Array{AbstractAlgebra.Generic.Poly{T}, 1}, s::Union{Char, AbstractString, Symbol}) where T @ Hecke.jl/src/NumField/NfRel/NfRelNS.jl:152
[243] kwcall(::NamedTuple, ::typeof(number_field), f::PolyRingElem{T}) where T<:NumFieldElem @ Hecke.jl/src/NumField/NfRel/NfRel.jl:157
[244] kwcall(::NamedTuple, ::typeof(number_field), f::PolyRingElem{T}, S::Union{Char, AbstractString, Symbol}) where T<:NumFieldElem @ Hecke.jl/src/NumField/NfRel/NfRel.jl:157
[245] numerator(a::QQFieldElem, R::LocalizedEuclideanRing{ZZRingElem}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:151
[246] numerator(a::AbstractAlgebra.Generic.RationalFunctionFieldElem{T}, S::PolyRing{T}) where T @ Hecke.jl/src/GenOrd/Auxiliary.jl:199
[247] parent(t::Tuple) @ Hecke.jl/src/GrpAb/GrpAbFinGen.jl:923
[248] pow(x, op, n, id) @ Hecke.jl/src/GrpAb/GrpAbFinGen.jl:1858
[249] powermod(a::S, i::Union{Int64, ZZRingElem}, modu::Vector{S}) where {T<:RingElem, S<:MPolyRingElem{T}} @ Hecke.jl/src/NumField/NfRel/NfRelNSMor.jl:204
[250] powermod(f::Union{fpPolyRingElem, zzModPolyRingElem}, e::ZZRingElem, g::Union{fpPolyRingElem, zzModPolyRingElem}) @ Hecke.jl/src/ModAlgAss/MeatAxe.jl:1175
[251] precision(g::AbstractAlgebra.Generic.Poly{T}) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem, LocalFieldValuationRingElem} @ Hecke.jl/src/LocalField/Poly.jl:235
[252] prime_field(L::Union{QadicField, Hecke.LocalField}) @ Hecke deprecated.jl:103
[253] pseudo_inv(a::Map) @ Hecke.jl/src/Map/Map.jl:17
[254] quo(R::fqPolyRepPolyRing, f::fqPolyRepPolyRingElem) @ Hecke.jl/src/Misc/nmod_poly.jl:1208
[255] quo(::ZZRing, a::ZZRingElem) @ Hecke.jl/src/Misc/Integer.jl:578
[256] quo(::ZZRing, a::Integer) @ Hecke.jl/src/Misc/Integer.jl:583
[257] rand(A::MatSpace{AbsSimpleNumFieldElem}, U::AbstractArray) @ Hecke.jl/src/LinearAlgebra/Solve.jl:45
[258] rand(K::AbsSimpleNumField, U::AbstractArray) @ Hecke.jl/src/LinearAlgebra/Solve.jl:19
[259] rand(rng::Random.AbstractRNG, b::Vector{<:NumFieldElem}, r::AbstractUnitRange) @ Hecke.jl/src/NumField/Elem.jl:74
[260] rand(rng::Random.AbstractRNG, b::Vector{<:NumFieldElem}, r::AbstractUnitRange, terms::Int64) @ Hecke.jl/src/NumField/Elem.jl:100
[261] rand(rng::Random.AbstractRNG, sp::Random.SamplerTrivial{<:RandomExtensions.Make{var"#s967", Tuple{var"#s966", var"#s965", var"#s964"}} where {var"#s967"<:NumFieldElem{T}, var"#s966"<:NumField{T}, var"#s965"<:(Vector{<:NumFieldElem{T}}), var"#s964"<:AbstractUnitRange}}) where T @ Hecke.jl/src/NumField/Elem.jl:79
[262] rand(rng::Random.AbstractRNG, sp::Random.SamplerTrivial{<:RandomExtensions.Make{var"#s967", Tuple{var"#s966", var"#s965", var"#s964", Int64}} where {var"#s967"<:NumFieldElem{T}, var"#s966"<:NumField{T}, var"#s965"<:(Vector{<:NumFieldElem{T}}), var"#s964"<:AbstractUnitRange}}) where T @ Hecke.jl/src/NumField/Elem.jl:105
[263] rand(b::Vector{<:NumFieldElem}, r::AbstractUnitRange) @ Hecke.jl/src/NumField/Elem.jl:72
[264] rand(b::Vector{<:NumFieldElem}, r::AbstractUnitRange, terms::Int64) @ Hecke.jl/src/NumField/Elem.jl:96
[265] rand!(a::AbsSimpleNumFieldElem, U::AbstractArray) @ Hecke.jl/src/LinearAlgebra/Solve.jl:7
[266] rand!(c::T, b::Vector{T}, r::AbstractUnitRange, terms::Int64) where T<:NumFieldElem @ Hecke.jl/src/NumField/Elem.jl:124
[267] rand!(c::T, b::Vector{T}, r::AbstractUnitRange) where T<:NumFieldElem @ Hecke.jl/src/NumField/Elem.jl:163
[268] rand!(rng::Random.AbstractRNG, c::T, b::Vector{T}, r::AbstractUnitRange, terms::Int64) where T<:NumFieldElem @ Hecke.jl/src/NumField/Elem.jl:128
[269] rand!(rng::Random.AbstractRNG, c::NumFieldElem{T}, sp::Random.SamplerTrivial{<:RandomExtensions.Make{var"#s967", Tuple{var"#s966", var"#s965", var"#s964", Int64}} where {var"#s967"<:NumFieldElem{T}, var"#s966"<:NumField{T}, var"#s965"<:(Vector{<:NumFieldElem{T}}), var"#s964"<:AbstractUnitRange}}) where T @ Hecke.jl/src/NumField/Elem.jl:132
[270] rand!(rng::Random.AbstractRNG, c::T, b::Vector{T}, r::AbstractUnitRange) where T<:NumFieldElem @ Hecke.jl/src/NumField/Elem.jl:167
[271] rand!(rng::Random.AbstractRNG, c::NumFieldElem{T}, sp::Random.SamplerTrivial{<:RandomExtensions.Make{var"#s967", Tuple{var"#s966", var"#s965", var"#s964"}} where {var"#s967"<:NumFieldElem{T}, var"#s966"<:NumField{T}, var"#s965"<:(Vector{<:NumFieldElem{T}}), var"#s964"<:AbstractUnitRange}}) where T @ Hecke.jl/src/NumField/Elem.jl:173
[272] rand!(A::AbstractAlgebra.Generic.Mat{AbsSimpleNumFieldElem}, U::AbstractArray) @ Hecke.jl/src/LinearAlgebra/Solve.jl:31
[273] reduce(u::Vector{T}) where T @ Hecke.jl/src/NumFieldOrd/NfOrd/Unit/Reduction.jl:88
[274] reduce(u::Vector{T}, prec::Int64) where T @ Hecke.jl/src/NumFieldOrd/NfOrd/Unit/Reduction.jl:88
[275] rem(a::AbsSimpleNumFieldElem, b::ZZRingElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:888
[276] representation_matrix(a::AbstractAlgebra.Generic.FunctionFieldElem) @ Hecke.jl/src/GenOrd/Auxiliary.jl:24
[277] residue_field(Q::PadicField) @ Hecke.jl/src/LocalField/qAdic.jl:35
[278] residue_field(R::fpPolyRing, p::fpPolyRingElem) @ Hecke.jl/src/GenOrd/Ideal.jl:578
[279] residue_field(R::LocalizedEuclideanRing{ZZRingElem}, p::LocalizedEuclideanRingElem{ZZRingElem}) @ Hecke.jl/src/GenOrd/Auxiliary.jl:163
[280] residue_field(R::FqPolyRing, p::FqPolyRingElem) @ Hecke.jl/src/GenOrd/Ideal.jl:583
[281] residue_field(Q::QadicField) @ Hecke.jl/src/LocalField/qAdic.jl:3
[282] residue_field(S::SeriesRing{T}) where T<:RingElem @ Hecke.jl/src/Misc/Series.jl:225
[283] residue_field(K::AbstractAlgebra.Generic.LaurentSeriesField{T}) where T<:FinFieldElem @ Hecke.jl/src/LocalField/LaurentSeries.jl:11
[284] residue_field(R::PolyRing{T}, p::PolyRingElem{T}) where T<:NumFieldElem @ Hecke.jl/src/GenOrd/Auxiliary.jl:92
[285] resultant(f::AbstractAlgebra.Generic.Poly{T}, g::AbstractAlgebra.Generic.Poly{T}) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:537
[286] resultant(f::MPolyRingElem, g::MPolyRingElem, i::Int64) @ Hecke.jl/src/NumField/NfRel/NfRelNS.jl:580
[287] root(a::AbsSimpleNumFieldElem, n::Int64) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:761
[288] roots(::QQField, f::ZZPolyRingElem; max_roots) @ Hecke.jl/src/Misc/Poly.jl:670
[289] roots(f::ZZPolyRingElem; max_roots) @ Hecke.jl/src/Misc/Poly.jl:707
[290] roots(K::AbsSimpleNumField, f::ZZPolyRingElem; kw...) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:529
[291] roots(K::AbsSimpleNumField, f::QQPolyRingElem; kw...) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:540
[292] roots(f::QQPolyRingElem; max_roots) @ Hecke.jl/src/Misc/Poly.jl:712
[293] roots(x::RealPolyRingElem) @ Hecke.jl/src/Misc/Poly.jl:723
[294] roots(f::AbstractAlgebra.Generic.Poly{AbsSimpleNumFieldElem}; max_roots, ispure, is_squarefree, is_normal) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:563
[295] roots(a::AbsSimpleNumFieldElem, n::Int64) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:770
[296] roots(R::AcbField, f::Union{QQPolyRingElem, ZZPolyRingElem}) @ Hecke.jl/src/Misc/Poly.jl:718
[297] roots(R::AcbField, f::Union{QQPolyRingElem, ZZPolyRingElem}, abs_tol::Int64, initial_prec::Int64...) @ Hecke.jl/src/Misc/Poly.jl:718
[298] roots(Q::QadicField, f::ZZPolyRingElem; max_roots) @ Hecke.jl/src/LocalField/Conjugates.jl:74
[299] roots(R::ArbField, f::Union{QQPolyRingElem, ZZPolyRingElem}) @ Hecke.jl/src/Misc/Poly.jl:762
[300] roots(R::ArbField, f::Union{QQPolyRingElem, ZZPolyRingElem}, abs_tol::Int64, initial_prec::Int64...) @ Hecke.jl/src/Misc/Poly.jl:762
[301] roots(f::AbstractAlgebra.Generic.Poly{T}) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/automorphisms.jl:7
[302] roots(f::PolyRingElem{QQBarFieldElem}) @ Hecke.jl/src/Misc/QQBar.jl:63
[303] roots(f::PolyRingElem{<:NumFieldElem}) @ Hecke.jl/src/NumField/Elem.jl:457
[304] roots(F::Union{fqPolyRepField, Hecke.RelFinField}, f::Union{fpPolyRingElem, fqPolyRepPolyRingElem}) @ Hecke.jl/src/LocalField/neq.jl:33
[305] kwcall(::NamedTuple, ::typeof(roots), f::ZZPolyRingElem) @ Hecke.jl/src/Misc/Poly.jl:707
[306] kwcall(::NamedTuple, ::typeof(roots), f::AbstractAlgebra.Generic.Poly{AbsSimpleNumFieldElem}) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:563
[307] kwcall(::NamedTuple, ::typeof(roots), ::QQField, f::ZZPolyRingElem) @ Hecke.jl/src/Misc/Poly.jl:670
[308] kwcall(::NamedTuple, ::typeof(roots), f::QQPolyRingElem) @ Hecke.jl/src/Misc/Poly.jl:712
[309] kwcall(::NamedTuple, ::typeof(roots), Q::QadicField, f::ZZPolyRingElem) @ Hecke.jl/src/LocalField/Conjugates.jl:74
[310] kwcall(::NamedTuple, ::typeof(roots), K::AbsSimpleNumField, f::QQPolyRingElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:540
[311] kwcall(::NamedTuple, ::typeof(roots), K::AbsSimpleNumField, f::ZZPolyRingElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:529
[312] set!(z::fpPolyRingElem, x::fpPolyRingElem) @ Hecke.jl/src/NumFieldOrd/NfOrd/LinearAlgebra.jl:164
[313] set!(z::zzModPolyRingElem, x::zzModPolyRingElem) @ Hecke.jl/src/NumFieldOrd/NfOrd/LinearAlgebra.jl:160
[314] set!(z::AcbFieldElem, x::AcbFieldElem) @ Hecke.jl/src/Misc/acb_root_ctx.jl:268
[315] set!(z::ArbFieldElem, x::ArbFieldElem) @ Hecke.jl/src/Misc/acb_root_ctx.jl:255
[316] set!(a::fpMatrix, z::Vector{fpFieldElem}) @ Hecke.jl/src/QuadForm/LineOrbits.jl:410
[317] set!(a::FqPolyRepMatrix, z::Vector{FqPolyRepFieldElem}) @ Hecke.jl/src/QuadForm/LineOrbits.jl:647
[318] set!(a::FqMatrix, z::Vector{FqFieldElem}) @ Hecke.jl/src/QuadForm/LineOrbits.jl:783
[319] set!(a::fqPolyRepMatrix, z::Vector{fqPolyRepFieldElem}) @ Hecke.jl/src/QuadForm/LineOrbits.jl:525
[320] set!(a::MatElem, z::Vector{FpFieldElem}) @ Hecke.jl/src/QuadForm/LineOrbits.jl:468
[321] setcoeff!(c::AbstractAlgebra.Generic.Poly{T}, n::Int64, a::T) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem, LocalFieldValuationRingElem} @ Hecke.jl/src/LocalField/Poly.jl:42
[322] setprecision(f::Function, K::Union{PadicField, QadicField, Hecke.LocalField}, n::Int64) @ Hecke.jl/src/LocalField/LocalField.jl:389
[323] setprecision(a::AbstractAlgebra.Generic.LaurentSeriesFieldElem, k::Int64) @ Hecke.jl/src/LocalField/LaurentSeries.jl:30
[324] setprecision!(a::AbstractAlgebra.Generic.LaurentSeriesFieldElem, k::Int64) @ Hecke.jl/src/LocalField/LaurentSeries.jl:29
[325] sign(x::Union{QQFieldElem, ZZRingElem, FacElem{QQFieldElem}}, p::PosInf) @ Hecke.jl/src/NumField/QQ.jl:201
[326] signature(K::AbsSimpleNumField) @ Hecke.jl/src/Hecke.jl:396
[327] signature(K::NumField) @ Hecke.jl/src/NumField/Field.jl:391
[328] sqrt(a::AbsSimpleNumFieldElem) @ Hecke.jl/src/NumField/NfAbs/Elem.jl:759
[329] tr(a::FinFieldElem, mp::Nemo.FinFieldMorphism) @ Hecke.jl/src/Map/FiniteField.jl:104
[330] tr(a::NumFieldElem, k::NumField) @ Hecke.jl/src/NumField/Elem.jl:356
[331] tr(a::NumFieldElem, ::QQField) @ Hecke.jl/src/NumField/Elem.jl:360
[332] unramified_extension(f::AbstractAlgebra.Generic.Poly{S}; ...) where S @ Hecke.jl/src/LocalField/LocalField.jl:323
[333] unramified_extension(f::AbstractAlgebra.Generic.Poly{S}, s::Union{Char, AbstractString, Symbol}; check, cached) where S @ Hecke.jl/src/LocalField/LocalField.jl:323
[334] unramified_extension(L::Union{PadicField, QadicField, Hecke.LocalField}, n::Int64) @ Hecke.jl/src/LocalField/LocalField.jl:492
[335] kwcall(::NamedTuple, ::typeof(unramified_extension), f::AbstractAlgebra.Generic.Poly{S}) where S @ Hecke.jl/src/LocalField/LocalField.jl:323
[336] kwcall(::NamedTuple, ::typeof(unramified_extension), f::AbstractAlgebra.Generic.Poly{S}, s::Union{Char, AbstractString, Symbol}) where S @ Hecke.jl/src/LocalField/LocalField.jl:323
[337] use_karamul(a::PolyRingElem{T}, b::PolyRingElem{T}) where T<:Union{PadicFieldElem, QadicFieldElem, LocalFieldElem} @ Hecke.jl/src/LocalField/Poly.jl:55
[338] valuation(f::ZZPolyRingElem, p::Union{Int64, ZZRingElem}) @ Hecke.jl/src/NumFieldOrd/NfOrd/MaxOrd/Polygons.jl:274
[339] valuation(::NumFieldElem, p) @ Hecke.jl/src/NumField/Elem.jl:618
[340] (Rxy::zzModMPolyRing)(f::QQMPolyRingElem) @ Hecke.jl/src/NumField/NfRel/NfRelNSMor.jl:68
@lgoettgens
Copy link
Contributor

I will look into that next week.

What is the way to do such changes? The following or am I missing something important?

  1. Add f to Nemo
  2. minor Nemo release
  3. adjust Nemo compat in Hecke
  4. remove f from Hecke

If I am not mistaken, that should leave no combination of versions, where f is not available. There would be cases, where f is contained twice, but that should be ok, right? Alternatively, one could circumvent that by making a breaking Nemo release such that the Nemo compat in Hecke doesn't allow the new Nemo version.

@thofma
Copy link
Owner

thofma commented Jun 16, 2023

Since this is quite disruptive with little (no?) gain, I would suggest to put this on the back burner.

@fingolfin
Copy link
Contributor Author

One gain is reduced load time for Hecke and Oscar. Isn't that a major issue for us?

@thofma
Copy link
Owner

thofma commented Jun 16, 2023

It is roughly 1 second for me. Sure, 0.x (0.9? 0.6?) seconds would be great, but I believe the ratio of gain and work is quite low compared to some other open issues in Oscar land.

@lgoettgens
Copy link
Contributor

Another possible benefit I can see is that future changes (in particular bug fixes and interface changes) need fewer cross-project PRs. If everything (or most) functionality of a type is contained in a single package (here Nemo), there is less need for sibling PRs in Hecke and Nemo.

And I believe most of the work needed here is only simply copy-pasting the methods in the Aqua output.

@fieker
Copy link
Collaborator

fieker commented Jun 20, 2023 via email

@lgoettgens
Copy link
Contributor

It's more complicated as there are false positives...

I thought Aqua was very conservative with reporting type piracy. If there are indeed false positives, I would be very inclined to analyze them and report a fix to Aqua.

@thofma
Copy link
Owner

thofma commented Jun 20, 2023

I think the point is that it is not black and white what type piracy is. Is

*(x::Union{Integer, ZZRingElem}, ::ZZRing)

in Hecke type piracy? It might be the case that this cannot be implemented in Nemo alone. So why would this constitute any form of piracy? Also it is not invalidating any other method in Nemo.

@fingolfin
Copy link
Contributor Author

Just a small update, we are down from 721 to 316 cases, so that's great.

And yeah, we may not be able to resolve all of them for various reasons. But some maybe can...

Some things that could perhaps be moved to AA or Nemo, which would also remove some type piracy

  • PIDIdeal
  • ZZIdl and ZZFracIdl (most of it seems to be perfectly suitable for Nemo?)
  • spectrum, eigvals

Then there are still many small convenience functions that probably could be moved, e.g.:

[100] (R::fpPolyRing)(f::fqPolyRepPolyRingElem) @ Hecke ~/Projekte/OSCAR/Hecke.jl/src/NumField/NfAbs/Elem.jl:480
[101] (A::fqPolyRepField)(x::zzModPolyRingElem) @ Hecke ~/Projekte/OSCAR/Hecke.jl/src/Misc/FiniteField.jl:22
[102] (A::fqPolyRepField)(x::fpPolyRingElem) @ Hecke ~/Projekte/OSCAR/Hecke.jl/src/Misc/FiniteField.jl:31

or

#TODO: move elsewhere?
function Hecke.lcm(a::Vector{<:RingElem})
  if length(a) == 0
    error("don't know the ring")
  end
  return reduce(lcm, a)
end

etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants