From 1bf011b645015b2a9c27a62cf290f4ebebfdd4d7 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 8 Sep 2026 19:00:42 -0400 Subject: [PATCH 1/7] Compare ExtendedJumpArray jump_u eltype to Int, not Int64. Broadcast of UnitRange indices yields native Int on each word size. Co-authored-by: Cursor --- test/extended_jump_array.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/extended_jump_array.jl b/test/extended_jump_array.jl index 13f55bfff..bfde4a371 100644 --- a/test/extended_jump_array.jl +++ b/test/extended_jump_array.jl @@ -63,10 +63,10 @@ bc_mismatch = ExtendedJumpArray(rand(rng, 8), rand(rng, 4)) bc_dtype_1 = ExtendedJumpArray(rand(rng, 10), rand(rng, 1:10, 2)) bc_dtype_2 = ExtendedJumpArray(rand(rng, 10), rand(rng, 1:10, 2)) result = bc_dtype_1 + bc_dtype_2 * 2 -@test eltype(result.jump_u) == Int64 +@test eltype(result.jump_u) == Int out_result = ExtendedJumpArray(zeros(10), zeros(2)) out_result .= bc_dtype_1 .+ bc_dtype_2 .* 2 -@test eltype(result.jump_u) == Int64 +@test eltype(result.jump_u) == Int @test out_result ≈ result # Test that fast broadcasting also gives the correct results From bf8941403ef17a63c95a4ea566d14714315ae041 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 8 Sep 2026 19:39:47 -0400 Subject: [PATCH 2/7] Pass native-UInt salt to hash in _derive_jump_seed on 32-bit. hash(::UInt64, ::UInt64) is not defined on i686; salt with % UInt. Co-authored-by: Cursor --- src/solve.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/solve.jl b/src/solve.jl index 7562d0a1a..8b17d80ac 100644 --- a/src/solve.jl +++ b/src/solve.jl @@ -69,7 +69,8 @@ end # jump aggregator's RNG. We cannot assume the JumpProblem's stored RNG is any particular # type, so we pass the seed through `hash` (to decorrelate from the input) and then through # a Xoshiro draw (to ensure strong mixing regardless of the target RNG's seeding quality). -const _JUMP_SEED_SALT = 0x4a756d7050726f63 # "JumPProc" in ASCII +# Truncate salt to native UInt so hash(::UInt64, ::UInt) matches on 32-bit Julia. +const _JUMP_SEED_SALT = 0x4a756d7050726f63 % UInt # "JumPProc" in ASCII _derive_jump_seed(seed) = rand(Random.Xoshiro(hash(seed, _JUMP_SEED_SALT)), UInt64) function resetted_jump_problem(_jump_prob, seed) From 8c47e5de325a4d0728efb77418b77c6d28d5c474 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 8 Sep 2026 20:17:31 -0400 Subject: [PATCH 3/7] Use native Int in PriorityTimeTable construction on 32-bit. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit floor(Int64, …) made F=Int64 while pidtogroup/kwargs used Int (Int32 on i686), so PriorityTimeTable construction MethodError'd. Co-authored-by: Cursor --- src/aggregators/ccnrm.jl | 2 +- src/aggregators/prioritytable.jl | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/aggregators/ccnrm.jl b/src/aggregators/ccnrm.jl index 998ccf4c5..cdf7d5900 100644 --- a/src/aggregators/ccnrm.jl +++ b/src/aggregators/ccnrm.jl @@ -52,7 +52,7 @@ function CCNRMJumpAggregation(nj::Int, njt::T, et::T, crs::Vector{T}, sr::T, rng, dg, ptt) end -+############################# Required Functions ############################## +############################# Required Functions ############################## # creating the JumpAggregation structure (function wrapper-based constant jumps) function aggregate(aggregator::CCNRM, u, p, t, end_time, constant_jumps, ma_jumps, save_positions, rng; kwargs...) diff --git a/src/aggregators/prioritytable.jl b/src/aggregators/prioritytable.jl index 11ddf171b..b7af359ff 100644 --- a/src/aggregators/prioritytable.jl +++ b/src/aggregators/prioritytable.jl @@ -350,13 +350,14 @@ end function PriorityTimeTable( times::AbstractVector, mintime, timestep; binwidthconst = 16, numbinsconst = 20) binwidth = binwidthconst * timestep - numbins = floor(Int64, numbinsconst * sqrt(length(times))) + # Use native Int so F matches Tuple{Int,Int} / Int kwargs on 32-bit. + numbins = floor(Int, numbinsconst * sqrt(length(times))) maxtime = mintime + numbins * binwidth pidtype = typeof(numbins) ptype = eltype(times) groups = Vector{PriorityGroup{ptype, Vector{pidtype}}}() - pidtogroup = Vector{Tuple{Int, Int}}(undef, length(times)) + pidtogroup = Vector{Tuple{pidtype, pidtype}}(undef, length(times)) ttgdata = TimeGrouper{ptype}(mintime, binwidth) # Create the groups, [t_min, t_min + τ), [t_min + τ, t_min + 2τ)... @@ -366,7 +367,7 @@ function PriorityTimeTable( ptt = PriorityTimeTable( groups, pidtogroup, times, ttgdata, zero(pidtype), - zero(pidtype), maxtime, binwidthconst, numbinsconst) + zero(pidtype), maxtime, pidtype(binwidthconst), pidtype(numbinsconst)) # Insert priority ids into the groups for (pid, time) in enumerate(times) if time > maxtime From cd9490412fd582f4c732c0aace448f6d0ec3ff1e Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Tue, 8 Sep 2026 20:20:07 -0400 Subject: [PATCH 4/7] chore: retest PriorityTimeTable Int fix on x86 Co-authored-by: Cursor From a49a52baa060bd2d8e94e66da13662458177bf60 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Wed, 9 Sep 2026 05:56:52 -0400 Subject: [PATCH 5/7] Temporarily source DiffEqBase from 32-bit interp_points fix for CI. Co-authored-by: Cursor --- Project.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Project.toml b/Project.toml index 8e6567604..186d4727b 100644 --- a/Project.toml +++ b/Project.toml @@ -33,6 +33,9 @@ JumpProcessesForwardDiffExt = "ForwardDiff" JumpProcessesKernelAbstractionsExt = ["Adapt", "KernelAbstractions"] JumpProcessesOrdinaryDiffEqCoreExt = "OrdinaryDiffEqCore" +[sources] +DiffEqBase = {url = "https://github.com/ChrisRackauckas-Claude/OrdinaryDiffEq.jl.git", rev = "fix-32bit-interp-points-range", subdir = "lib/DiffEqBase"} + [compat] ADTypes = "1.22.0" Adapt = "4.6.0" From b69c078db1e100aa1e4d975e7b69cb6db7eaa622 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Wed, 9 Sep 2026 06:24:24 -0400 Subject: [PATCH 6/7] Drop temporary DiffEqBase [sources] pin (breaks LTS develop). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Julia 1.10 Pkg.develop rejects rev; SciML/.github#136 switches URL sources to Pkg.add. Until that lands (and v1 is updated), keep Jump-local Int fixes without the DiffEqBase monorepo pin — VR callback x86 still needs ODE#4487. Co-authored-by: Cursor --- Project.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/Project.toml b/Project.toml index 186d4727b..8e6567604 100644 --- a/Project.toml +++ b/Project.toml @@ -33,9 +33,6 @@ JumpProcessesForwardDiffExt = "ForwardDiff" JumpProcessesKernelAbstractionsExt = ["Adapt", "KernelAbstractions"] JumpProcessesOrdinaryDiffEqCoreExt = "OrdinaryDiffEqCore" -[sources] -DiffEqBase = {url = "https://github.com/ChrisRackauckas-Claude/OrdinaryDiffEq.jl.git", rev = "fix-32bit-interp-points-range", subdir = "lib/DiffEqBase"} - [compat] ADTypes = "1.22.0" Adapt = "4.6.0" From 7170cfd721e609115a764ee6a63cbd66d8fcc611 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Wed, 9 Sep 2026 15:58:54 -0400 Subject: [PATCH 7/7] Retest x86 after DiffEqBase 7.21.0 registration. Co-authored-by: Cursor