From 97655a9ce6fcf066940627707916061a2812f6dc Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 12 Apr 2026 16:40:07 -0400 Subject: [PATCH] Replace DataStructures.jl with BinaryHeaps.jl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Swaps the `DataStructures` dependency for the lightweight [BinaryHeaps.jl](https://github.com/SciML/BinaryHeaps.jl) package, which contains the same `BinaryHeap` / `BinaryMinHeap` / `FasterForward` code extracted from DataStructures.jl (same upstream source). DataStructures.jl causes 6 method invalidation trees (from unrelated OrderedCollections, Accumulators, and SortedContainers code). BinaryHeaps.jl causes zero invalidations. Changes: - OrdinaryDiffEqCore: `using DataStructures: BinaryHeap, FasterForward` → `using BinaryHeaps: BinaryHeap, FasterForward`; drop `DataStructures.FasterForward()` qualifier. - DelayDiffEq: `using DataStructures: BinaryMinHeap` → `using BinaryHeaps: BinaryMinHeap`. - StochasticDiffEqCore: removed unused `DataStructures` import. - Project.tomls updated accordingly; top-level `OrdinaryDiffEq/Project.toml` drops the unused `DataStructures` entry. Requires BinaryHeaps.jl v1.0.0 to be registered. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.6 (1M context) --- Project.toml | 2 -- lib/DelayDiffEq/Project.toml | 4 ++-- lib/DelayDiffEq/src/DelayDiffEq.jl | 2 +- lib/OrdinaryDiffEqCore/Project.toml | 4 ++-- lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl | 3 +-- lib/OrdinaryDiffEqCore/src/solve.jl | 6 +++--- lib/StochasticDiffEqCore/Project.toml | 2 -- lib/StochasticDiffEqCore/src/StochasticDiffEqCore.jl | 2 +- 8 files changed, 10 insertions(+), 15 deletions(-) diff --git a/Project.toml b/Project.toml index 038219eff54..352f62db9c8 100644 --- a/Project.toml +++ b/Project.toml @@ -8,7 +8,6 @@ ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" CommonSolve = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" EnumX = "4e289a0a-7415-4d19-859d-a7e5c4648b56" @@ -112,7 +111,6 @@ ADTypes = "1.16" Adapt = "4.3" ArrayInterface = "7.19" CommonSolve = "0.2.4" -DataStructures = "0.18.22, 0.19" DiffEqBase = "6.209" DiffEqDevTools = "2.44.4" DocStringExtensions = "0.9.5" diff --git a/lib/DelayDiffEq/Project.toml b/lib/DelayDiffEq/Project.toml index 11a4231ec20..d2e910c6775 100644 --- a/lib/DelayDiffEq/Project.toml +++ b/lib/DelayDiffEq/Project.toml @@ -5,7 +5,7 @@ version = "5.73.0" [deps] ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +BinaryHeaps = "b2a6c25c-c996-4615-94ab-6e519ffb8690" DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" @@ -60,7 +60,7 @@ ADTypes = "1.16" Aqua = "0.8.11" ArrayInterface = "7" DDEProblemLibrary = "0.1" -DataStructures = "0.18, 0.19" +BinaryHeaps = "1" DiffEqBase = "6.209" DiffEqCallbacks = "4" DiffEqDevTools = "2.44.4" diff --git a/lib/DelayDiffEq/src/DelayDiffEq.jl b/lib/DelayDiffEq/src/DelayDiffEq.jl index 5599517f6ee..df465783551 100644 --- a/lib/DelayDiffEq/src/DelayDiffEq.jl +++ b/lib/DelayDiffEq/src/DelayDiffEq.jl @@ -7,7 +7,7 @@ import OrdinaryDiffEqCore, OrdinaryDiffEqNonlinearSolve, OrdinaryDiffEqDifferent import OrdinaryDiffEqDefault: OrdinaryDiffEqDefault import OrdinaryDiffEqFunctionMap: OrdinaryDiffEqFunctionMap -using DataStructures: BinaryMinHeap +using BinaryHeaps: BinaryMinHeap using LinearAlgebra: opnorm, I using Logging: @logmsg using RecursiveArrayTools: copyat_or_push!, recursivecopy, recursivecopy!, diff --git a/lib/OrdinaryDiffEqCore/Project.toml b/lib/OrdinaryDiffEqCore/Project.toml index c399845c8ec..463f4e66780 100644 --- a/lib/OrdinaryDiffEqCore/Project.toml +++ b/lib/OrdinaryDiffEqCore/Project.toml @@ -21,7 +21,7 @@ LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" TruncatedStacktraces = "781d530d-4396-4725-bb49-402e4bee1e77" SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462" FastClosures = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a" -DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +BinaryHeaps = "b2a6c25c-c996-4615-94ab-6e519ffb8690" Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" @@ -73,7 +73,7 @@ TruncatedStacktraces = "1.4" SciMLBase = "2.146" SciMLLogging = "1.7.1" FastClosures = "0.3" -DataStructures = "0.19" +BinaryHeaps = "1" SparseArrays = "1" Static = "1.2" Aqua = "0.8.11" diff --git a/lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl b/lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl index 204f60dd6e9..889ea756d46 100644 --- a/lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl +++ b/lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl @@ -46,8 +46,7 @@ import Random import RecursiveArrayTools: chain, recursivecopy!, recursivecopy, recursive_bottom_eltype, recursive_unitless_bottom_eltype, recursive_unitless_eltype, copyat_or_push!, DiffEqArray, recursivefill! import RecursiveArrayTools -using DataStructures: BinaryHeap, FasterForward -import DataStructures +using BinaryHeaps: BinaryHeap, FasterForward using ArrayInterface: ArrayInterface, issingular import TruncatedStacktraces: @truncate_stacktrace, VERBOSE_MSG diff --git a/lib/OrdinaryDiffEqCore/src/solve.jl b/lib/OrdinaryDiffEqCore/src/solve.jl index 6b70e875280..2204cc8bd98 100644 --- a/lib/OrdinaryDiffEqCore/src/solve.jl +++ b/lib/OrdinaryDiffEqCore/src/solve.jl @@ -926,7 +926,7 @@ end # time stops @inline function initialize_tstops(::Type{T}, tstops, d_discontinuities, tspan) where {T} - tstops_internal = BinaryHeap{T}(DataStructures.FasterForward()) + tstops_internal = BinaryHeap{T}(FasterForward()) t0, tf = tspan tdir = sign(tf - t0) @@ -978,7 +978,7 @@ end # saving time points function initialize_saveat(::Type{T}, saveat, tspan) where {T} - saveat_internal = BinaryHeap{T}(DataStructures.FasterForward()) + saveat_internal = BinaryHeap{T}(FasterForward()) t0, tf = tspan tdir = sign(tf - t0) @@ -1023,7 +1023,7 @@ end # discontinuities function initialize_d_discontinuities(::Type{T}, d_discontinuities, tspan) where {T} - d_discontinuities_internal = BinaryHeap{T}(DataStructures.FasterForward()) + d_discontinuities_internal = BinaryHeap{T}(FasterForward()) sizehint!(d_discontinuities_internal, length(d_discontinuities)) t0, tf = tspan diff --git a/lib/StochasticDiffEqCore/Project.toml b/lib/StochasticDiffEqCore/Project.toml index dd57d93f930..83d22eb657a 100644 --- a/lib/StochasticDiffEqCore/Project.toml +++ b/lib/StochasticDiffEqCore/Project.toml @@ -7,7 +7,6 @@ version = "1.1.0" ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" DiffEqNoiseProcess = "77a26b50-5914-5dd7-bc55-306e6241c503" FastPower = "a4df4552-cc26-4903-aec0-212e50a0e84b" @@ -41,7 +40,6 @@ DiffEqBase = {path = "../DiffEqBase"} ADTypes = "1" Adapt = "3, 4" ArrayInterface = "6, 7" -DataStructures = "0.18, 0.19" DiffEqBase = "6.187" DiffEqNoiseProcess = "5.13" FastPower = "1" diff --git a/lib/StochasticDiffEqCore/src/StochasticDiffEqCore.jl b/lib/StochasticDiffEqCore/src/StochasticDiffEqCore.jl index d7bb7f952f0..61667b57112 100644 --- a/lib/StochasticDiffEqCore/src/StochasticDiffEqCore.jl +++ b/lib/StochasticDiffEqCore/src/StochasticDiffEqCore.jl @@ -42,7 +42,7 @@ import OrdinaryDiffEqCore: handle_callbacks!, handle_tstop!, initialize_callbacks!, current_extrapolant, current_extrapolant! -using RecursiveArrayTools, DataStructures +using RecursiveArrayTools using DiffEqNoiseProcess, Random, ArrayInterface using SimpleNonlinearSolve, ForwardDiff, StaticArrays, MuladdMacro, FiniteDiff, Base.Threads using Adapt