Cannot install OrdinaryDiffEq in Julia 1.10.11

Hi, I was trying to install a new Julia (well, old) version to find a bug.

So, I have used juliaup add 1.10 which results in the installation of the version 1.10.11. I have started that version with julia +1.10 --project=julia-1.10-env to recreate a required environment by hand. Then in the package manager I have typed add OrdinaryDiffEq, which resulted in this lovely message:

Precompiling packages finished.
  0 dependencies successfully precompiled in 36 seconds. 191 already precompiled.
  5 dependencies errored.
  For a report of the errors see `julia> err`. To retry use `pkg> precompile`

Well, zero success is also a success, I guess :slight_smile:

After doing julia>err, I get this:

PkgPrecompileError: The following 1 direct dependency failed to precompile:

OrdinaryDiffEq

Failed to precompile OrdinaryDiffEq [1dea7af3-3e70-54e6-95c3-0bf5283fa5ed] to "/home/dima/.julia/compiled/v1.10/OrdinaryDiffEq/jl_29PgOF".
ERROR: LoadError: MethodError: no method matching (FunctionWrappersWrappers.FunctionWrappersWrapper{Tuple{FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{Float64}, Vector{Float64}, SciMLBase.NullParameters, Float64}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, SciMLBase.NullParameters, Float64}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{Float64}, SciMLBase.NullParameters, ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, SciMLBase.NullParameters, ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}}}, false})(::Tuple{FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{Float64}, Vector{Float64}, SciMLBase.NullParameters, Float64}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, SciMLBase.NullParameters, Float64}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{Float64}, SciMLBase.NullParameters, ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, SciMLBase.NullParameters, ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}}})
Stacktrace:
  [1] wrapfun_iip(ff::Function, inputs::Tuple{Vector{Float64}, Vector{Float64}, SciMLBase.NullParameters, Float64}, ::Val{1})
    @ DiffEqBaseForwardDiffExt ~/.julia/packages/DiffEqBase/vTdBp/ext/DiffEqBaseForwardDiffExt.jl:121
  [2] promote_f(f::SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, typeof(OrdinaryDiffEqCore.lorenz), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, ::Val{SciMLBase.AutoSpecialize}, u0::Vector{Float64}, p::SciMLBase.NullParameters, t::Float64, ::Val{true}, ::Val{1})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/vTdBp/src/solve.jl:844
  [3] get_concrete_problem(prob::SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, typeof(OrdinaryDiffEqCore.lorenz), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, @Kwargs{}, SciMLBase.StandardODEProblem}, isadapt::Bool; alg::OrdinaryDiffEqSDIRK.TRBDF2{0, ADTypes.AutoForwardDiff{nothing, Nothing}, Nothing, OrdinaryDiffEqNonlinearSolve.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Nothing}, typeof(OrdinaryDiffEqCore.DEFAULT_PRECS), Val{:forward}(), true, nothing, typeof(OrdinaryDiffEqCore.trivial_limiter!)}, kwargs::@Kwargs{u0::Vector{Float64}, p::SciMLBase.NullParameters})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/vTdBp/src/solve.jl:676
  [4] solve_up(prob::SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, typeof(OrdinaryDiffEqCore.lorenz), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, @Kwargs{}, SciMLBase.StandardODEProblem}, sensealg::Nothing, u0::Vector{Float64}, p::SciMLBase.NullParameters, args::OrdinaryDiffEqSDIRK.TRBDF2{0, ADTypes.AutoForwardDiff{nothing, Nothing}, Nothing, OrdinaryDiffEqNonlinearSolve.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Nothing}, typeof(OrdinaryDiffEqCore.DEFAULT_PRECS), Val{:forward}(), true, nothing, typeof(OrdinaryDiffEqCore.trivial_limiter!)}; originator::SciMLBase.ChainRulesOriginator, kwargs::@Kwargs{})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/vTdBp/src/solve.jl:624
  [5] solve(prob::SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, typeof(OrdinaryDiffEqCore.lorenz), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, @Kwargs{}, SciMLBase.StandardODEProblem}, args::OrdinaryDiffEqSDIRK.TRBDF2{0, ADTypes.AutoForwardDiff{nothing, Nothing}, Nothing, OrdinaryDiffEqNonlinearSolve.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Nothing}, typeof(OrdinaryDiffEqCore.DEFAULT_PRECS), Val{:forward}(), true, nothing, typeof(OrdinaryDiffEqCore.trivial_limiter!)}; sensealg::Nothing, u0::Nothing, p::Nothing, wrap::Val{true}, kwargs::@Kwargs{})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/vTdBp/src/solve.jl:587
  [6] solve(prob::SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, typeof(OrdinaryDiffEqCore.lorenz), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, @Kwargs{}, SciMLBase.StandardODEProblem}, args::OrdinaryDiffEqSDIRK.TRBDF2{0, ADTypes.AutoForwardDiff{nothing, Nothing}, Nothing, OrdinaryDiffEqNonlinearSolve.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Nothing}, typeof(OrdinaryDiffEqCore.DEFAULT_PRECS), Val{:forward}(), true, nothing, typeof(OrdinaryDiffEqCore.trivial_limiter!)})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/vTdBp/src/solve.jl:575
  [7] macro expansion
    @ ~/.julia/packages/OrdinaryDiffEqSDIRK/1f1PI/src/OrdinaryDiffEqSDIRK.jl:111 [inlined]
  [8] macro expansion
    @ ~/.julia/packages/PrecompileTools/L8A3n/src/workloads.jl:78 [inlined]
  [9] top-level scope
    @ ~/.julia/packages/OrdinaryDiffEqSDIRK/1f1PI/src/OrdinaryDiffEqSDIRK.jl:50
 [10] include
    @ ./Base.jl:495 [inlined]
 [11] 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::String)
    @ Base ./loading.jl:2306
 [12] top-level scope
    @ stdin:5
in expression starting at /home/dima/.julia/packages/OrdinaryDiffEqSDIRK/1f1PI/src/OrdinaryDiffEqSDIRK.jl:1
in expression starting at stdin:5
ERROR: LoadError: Failed to precompile OrdinaryDiffEqSDIRK [2d112036-d095-4a1e-ab9a-08536f3ecdbf] to "/home/dima/.julia/compiled/v1.10/OrdinaryDiffEqSDIRK/jl_qoJ2jV".
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool; loadable_exts::Nothing)
    @ Base ./loading.jl:2547
  [3] compilecache
    @ ./loading.jl:2414 [inlined]
  [4] (::Base.var"#973#974"{Base.PkgId})()
    @ Base ./loading.jl:2058
  [5] mkpidlock(f::Base.var"#973#974"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool})
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.11+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:93
  [6] #mkpidlock#6
    @ ~/.julia/juliaup/julia-1.10.11+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:88 [inlined]
  [7] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64})
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.11+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:111
  [8] #invokelatest#2
    @ ./essentials.jl:894 [inlined]
  [9] invokelatest
    @ ./essentials.jl:889 [inlined]
 [10] maybe_cachefile_lock(f::Base.var"#973#974"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64)
    @ Base ./loading.jl:3062
 [11] maybe_cachefile_lock
    @ ./loading.jl:3059 [inlined]
 [12] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:2044
 [13] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1886
 [14] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [15] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [16] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1877
 [17] macro expansion
    @ ./loading.jl:1864 [inlined]
 [18] macro expansion
    @ ./lock.jl:270 [inlined]
 [19] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1827
 [20] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [21] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [22] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1820
 [23] include
    @ ./Base.jl:495 [inlined]
 [24] 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:2306
 [25] top-level scope
    @ stdin:5
in expression starting at /home/dima/.julia/packages/OrdinaryDiffEq/l3jV2/src/OrdinaryDiffEq.jl:1
in expression starting at stdin:

Could somebody help me with this? Thank you!

I tested on Ubuntu 24.04, and I can confirm the problem:

Do you really need to use Julia 1.10? I dropped the support for 1.10 a month ago because too many things start to fail.

I’ll start with a yank.

I have a multi-language project and wanted to test different combinations of Python and Julia: for Julia, there are two officially supported versions right now (1.10 and 1.12).

Hmm, it seems that the problem is not exactly with the older version of Julia, as I have installed 1.12, and it seems that OrdinaryDiffEq are not precompilable again:

dinaryDiffEqRosenbrock
  âś— OrdinaryDiffEqSDIRK
  âś— OrdinaryDiffEqBDF
  âś— OrdinaryDiffEqDefault
  âś— OrdinaryDiffEq
Precompiling packages finished.
  0 dependencies successfully precompiled in 38 seconds. 220 already precompiled.
  5 dependencies errored.
  For a report of the errors see `julia> err`. To retry use `pkg> precompile`

and julia>err:

Failed to precompile OrdinaryDiffEq [1dea7af3-3e70-54e6-95c3-0bf5283fa5ed] to "/home/dima/.julia/compiled/v1.12/OrdinaryDiffEq/jl_2dTy2v".
ERROR: LoadError: MethodError: no method matching (FunctionWrappersWrappers.FunctionWrappersWrapper{Tuple{FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{Float64}, Vector{Float64}, SciMLBase.NullParameters,
 Float64}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.Ordinary
DiffEqTag, Float64}, Float64, 1}}, SciMLBase.NullParameters, Float64}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}},
 Vector{Float64}, SciMLBase.NullParameters, ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDi
ff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, SciMLBase.NullParameters, ForwardDiff.Dual{ForwardDiff.Tag
{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}}}, false})(::Tuple{FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{Float64}, Vector{Float64}, SciMLBase.NullParameters, Float64}}, FunctionWrappers.Func
tionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}
, SciMLBase.NullParameters, Float64}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, Vector{Float64}, SciMLBase.NullP
arameters, ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}}, FunctionWrappers.FunctionWrapper{Nothing, Tuple{Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqT
ag, Float64}, Float64, 1}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Float64}, Float64, 1}}, SciMLBase.NullParameters, ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag, Fl
oat64}, Float64, 1}}}})

I don’t know really understand what it means, sorry.

If you have a working project, freeze the version numbers of key packages (or the manifest).

I need a project working reliably with at least several combinations of versions of Julia and Python, as I am developing software for the public.

DiffEqBase v1.24.0 is being yanked and v1.24.1 is a hotfix patch that should handle this. Sorry, the FunctionWrappersWrappers.jl compat bump was a bit of a “it’s a dependency everywhere” thing making it hard to test, and so it was tested everywhere it could, but then when downstream libraries also did the bump (AD libraries in particular), it “unleashed the Kraken”, bumping FWW in cases where it was previously blocked, and unveiled that there was an AD path that wasn’t using the backwards compatible syntax. That’s handled in the hotfix.

But then you should fix the OrdinaryDiffEq version to a known-good one… I don’t know how you (or your users) instantiate this project, but I always use a custom install script that:

  • copies Manifest-v1.xx.toml.default to Manifest-v1.xx.toml, where xx is the currently used, minor Julia version
  • calls Pkg.resolve() and Pkg.instantiate()
  • might also execute using statements to force pre-compilation

I try this:

(julia-1.12-env) pkg> add DiffEqBase@1.24.1
   Resolving package versions...
ERROR: Unsatisfiable requirements detected for package DiffEqBase [2b5f629d]:
 DiffEqBase [2b5f629d] log:
 ├─possible versions are: 3.13.2 - 6.214.0 or uninstalled
 └─restricted to versions 1.24.1 by an explicit requirement — no versions left

I have a Manifest.toml commited to Git, but now I intentionally start the environment (the --project= argument) in an empty directory, to do things by hand, because my current Manifest.toml is for Julia 1.11.

Put multiple default manifests into git, one for each major Julia version. Like Manfest-v1.11.toml.default, Manifest-v1.12.toml.default etc, and let the install script copy the default version for the currently active Julia version.

Example: KiteModels.jl/bin/install at main · OpenSourceAWE/KiteModels.jl · GitHub

You were 3 minutes too early. The hotfix is now released. Give it a try.

1 Like

Ok, cool, I did not know it is possible.

Thank you for the idea with Manifest.toml: I was able to install for Julia 1.12 OrdinaryDiffEq@6.102.1 from my current Manifest.toml for Julia 1.11 :slight_smile:

No, it gives the same message for me.

Isn’t line “possible versions are: 3.13.2 - 6.214.0 or uninstalled” saying that 1.24.1 does not exist?

This line might help:

export JULIA_PKG_SERVER_REGISTRY_PREFERENCE=eager
1 Like

Dear @ufechner7 and @ChrisRackauckas, thank you very much for your help! I have OrdinaryDiffEq.jl installed and can test it for compatibility.

1 Like