JuliaLang / JuliaLang/PrecompileTools.jl
Precompile workload works on 1.2.1, fails with method error on 1.3.1
- Dominant language
- Julia
- Stars
- 249
- Forks
- 18
- PR merge metrics
- No merged PRs in 30d
Description
this is my precompile workload:
```julia
import PrecompileTools
PrecompileTools.@setup_workload begin
struct Word{T}
alphabet::Vector{T}
letters::Vector{Int}
function Word(
a::AbstractVector{T},
l::AbstractVector{<:Integer},
) where {T}
all(i -> 1 <= i <= length(a), l) ||
throw(ArgumentError("Invalid word over alphabet $a: $l"))
return new{T}(a, l)
end
end
Base.show(io::IO, w::Word) = join(io, w.alphabet[w.letters], "·")
function Base.:(==)(w::Word, v::Word)
return w.alphabet == v.alphabet && w.letters == v.letters
end
function Base.hash(w::Word, h::UInt = UInt(0))
return hash(w.alphabet, hash(w.letters, hash(Word, h)))
end
struct OnLetters <: ByPermutations end
function action(::OnLetters, p::AP.AbstractPermutation, w::Word)
return Word(w.alphabet, [w.letters[i]^p for i in eachindex(w.letters)])
end
function allwords(A, radius)
words = [Word(A, [i]) for i in 1:length(A)]
for r in 2:radius
append!(
words,
[
Word(A, collect(w)) for
w in Iterators.product(fill(1:3, r)...)
],
)
end
return words
end
words = allwords([:a, :b, :c], 4)
act = OnLetters()
PrecompileTools.@compile_workload begin
G = PG.PermGroup(PG.perm"(1,2,3)", PG.perm"(1,2)")
wd = WedderburnDecomposition(Rational{Int}, G, act, words, words)
wdfl = WedderburnDecomposition(Float64, G, act, words, words)
end
end
```
With `PercompileTools` 1.2.1 things work as expected, on 1.3.3 (as well as on 1.3.1) I get method error:
```julia
Info Given SymbolicWedderburn was explicitly requested, output will be shown live
ERROR: LoadError: MethodError: no method matching action(::SymbolicWedderburn.OnLetters, ::PermutationGroups.Permutation{PermutationGroups.Perm{UInt16}, PermutationGroups.PermGroup{PermutationGroups.Perm{UInt16}, PermutationGroups.Transversal{UInt16, PermutationGroups.Perm{UInt16}}}}, ::SymbolicWedderburn.Word{Symbol})
The function `action` exists, but no method is defined for this combination of argument types.
Closest candidates are:
action(::SymbolicWedderburn.ByPermutations, ::AbstractPermutations.AbstractPermutation, ::AbstractVector)
@ SymbolicWedderburn ~/.julia/dev/SymbolicWedderburn/src/actions.jl:16
action(::SymbolicWedderburn.InducedActionHomomorphism{<:SymbolicWedderburn.ByLinearTransformation}, ::GroupsCore.GroupElement, ::AbstractVector)
@ SymbolicWedderburn ~/.julia/dev/SymbolicWedderburn/src/actions.jl:62
action(::SymbolicWedderburn.InducedActionHomomorphism{<:SymbolicWedderburn.ByPermutations}, ::GroupsCore.GroupElement, ::AbstractVector)
@ SymbolicWedderburn ~/.julia/dev/SymbolicWedderburn/src/actions.jl:31
...
```
Here for some reason `action(::OnLetters, p::AP.AbstractPermutation, w::Word)` is not added to the methods of `action`.
The rest of the stack follows:
```
Stacktrace:
[1] induce(::SymbolicWedderburn.OnLetters, hom::SymbolicWedderburn.ExtensionHomomorphism{SymbolicWedderburn.OnLetters, SymbolicWedderburn.Word{Symbol}, StarAlgebras.Basis{SymbolicWedderburn.Word{Symbol}, UInt32, StarAlgebras.Basis{SymbolicWedderburn.Word{Symbol}, UInt32, Vector{SymbolicWedderburn.Word{Symbol}}}}}, g::PermutationGroups.Permutation{PermutationGroups.Perm{UInt16}, PermutationGroups.PermGroup{PermutationGroups.Perm{UInt16}, PermutationGroups.Transversal{UInt16, PermutationGroups.Perm{UInt16}}}})
@ SymbolicWedderburn ~/.julia/dev/SymbolicWedderburn/src/actions.jl:43
[2] induce
@ ~/.julia/dev/SymbolicWedderburn/src/ext_homomorphisms.jl:30 [inlined]
[3] SymbolicWedderburn.CachedExtensionHomomorphism(::Type{UInt32}, G::PermutationGroups.PermGroup{PermutationGroups.Perm{UInt16}, PermutationGroups.Transversal{UInt16, PermutationGroups.Perm{UInt16}}}, action::SymbolicWedderburn.OnLetters, basis::StarAlgebras.Basis{SymbolicWedderburn.Word{Symbol}, UInt32, Vector{SymbolicWedderburn.Word{Symbol}}}; precompute::Bool)
@ SymbolicWedderburn ~/.julia/dev/SymbolicWedderburn/src/ext_homomorphisms.jl:91
[4] CachedExtensionHomomorphism
@ ~/.julia/dev/SymbolicWedderburn/src/ext_homomorphisms.jl:83 [inlined]
[5] #CachedExtensionHomomorphism#5
@ ~/.julia/dev/SymbolicWedderburn/src/ext_homomorphisms.jl:109 [inlined]
[6] CachedExtensionHomomorphism
@ ~/.julia/dev/SymbolicWedderburn/src/ext_homomorphisms.jl:103 [inlined]
[7] SymbolicWedderburn.WedderburnDecomposition(T::Type, G::PermutationGroups.PermGroup{PermutationGroups.Perm{UInt16}, PermutationGroups.Transversal{UInt16, PermutationGroups.Perm{UInt16}}}, action::SymbolicWedderburn.OnLetters, basis_full::StarAlgebras.Basis{SymbolicWedderburn.Word{Symbol}, UInt32, Vector{SymbolicWedderburn.Word{Symbol}}}, basis_half::StarAlgebras.Basis{SymbolicWedderburn.Word{Symbol}, UInt32, Vector{SymbolicWedderburn.Word{Symbol}}}, S::Type; semisimple::Bool)
@ SymbolicWedderburn ~/.julia/dev/SymbolicWedderburn/src/wedderburn_decomposition.jl:65
[8] WedderburnDecomposition
@ ~/.julia/dev/SymbolicWedderburn/src/wedderburn_decomposition.jl:53 [inlined]
[9] SymbolicWedderburn.WedderburnDecomposition(T::Type, G::PermutationGroups.PermGroup{PermutationGroups.Perm{UInt16}, PermutationGroups.Transversal{UInt16, PermutationGroups.Perm{UInt16}}}, action::SymbolicWedderburn.OnLetters, basis_full::Vector{SymbolicWedderburn.Word{Symbol}}, basis_half::Vector{SymbolicWedderburn.Word{Symbol}}, S::Type; semisimple::Bool)
@ SymbolicWedderburn ~/.julia/dev/SymbolicWedderburn/src/wedderburn_decomposition.jl:42
[10] WedderburnDecomposition
@ ~/.julia/dev/SymbolicWedderburn/src/wedderburn_decomposition.jl:33 [inlined]
[11] SymbolicWedderburn.WedderburnDecomposition(T::Type, G::PermutationGroups.PermGroup{PermutationGroups.Perm{UInt16}, PermutationGroups.Transversal{UInt16, PermutationGroups.Perm{UInt16}}}, action::SymbolicWedderburn.OnLetters, basis_full::Vector{SymbolicWedderburn.Word{Symbol}}, basis_half::Vector{SymbolicWedderburn.Word{Symbol}})
@ SymbolicWedderburn ~/.julia/dev/SymbolicWedderburn/src/wedderburn_decomposition.jl:33
[12] macro expansion
@ ~/.julia/dev/SymbolicWedderburn/src/precompile.jl:50 [inlined]
[13] macro expansion
@ ~/.julia/packages/PrecompileTools/gn08A/src/workloads.jl:73 [inlined]
[14] macro expansion
@ ~/.julia/dev/SymbolicWedderburn/src/precompile.jl:48 [inlined]
[15] macro expansion
@ ~/.julia/packages/PrecompileTools/gn08A/src/workloads.jl:121 [inlined]
[16] top-level scope
@ ~/.julia/dev/SymbolicWedderburn/src/precompile.jl:118
[17] include(mapexpr::Function, mod::Module, _path::String)
@ Base ./Base.jl:306
[18] top-level scope
@ ~/.julia/dev/SymbolicWedderburn/src/SymbolicWedderburn.jl:46
[19] include(mod::Module, _path::String)
@ Base ./Base.jl:305
[20] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
@ Base ./loading.jl:2997
[21] top-level scope
@ stdin:5
[22] eval(m::Module, e::Any)
@ Core ./boot.jl:489
[23] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
@ Base ./loading.jl:2843
[24] include_string
@ ./loading.jl:2853 [inlined]
[25] exec_options(opts::Base.JLOptions)
@ Base ./client.jl:319
[26] _start()
@ Base ./client.jl:554
in expression starting at /home/kalmar/.julia/dev/SymbolicWedderburn/src/precompile.jl:3
in expression starting at /home/kalmar/.julia/dev/SymbolicWedderburn/src/SymbolicWedderburn.jl:1
in expression starting at stdin:5
✗ SymbolicWedderburn
```
For leading issue see: https://github.com/kalmarek/SymbolicWedderburn.jl/issues/94
Contributor guide
No contributing guide indexed for this repository
Research direction
The reproducer is in the issue body; start by running it with PrecompileTools 1.2.1 and 1.3.1, then inspect src/precompile.jl around the workload macros and the stack-trace entry points. Compare the behavior with leading issue #94; done means the workload completes without the reported action method error on the affected versions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- developer-experience, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100