From 2d72e6a4491e7cc5541d4936a1fdd68c5bb5fce5 Mon Sep 17 00:00:00 2001 From: Chris Rackauckas Date: Thu, 15 Oct 2026 23:06:06 +0000 Subject: [PATCH] Make getindex type-stable for heterogeneous tuple nodes Julia 1.13.2 infers getindex through heterogeneous tuple nodes, which turned the @test_broken @inferred checks into errors. Recursing over the tuple makes inference succeed on all supported versions, so the tests assert @inferred. Co-Authored-By: Chris Rackauckas Co-Authored-By: Devin Agent-Harness: Devin CLI 3000.11.92 Agent-Model: fusion-claude-opus-5-5-high-sidekick-swe-2-medium Agent-Session: local headless Devin run (fleet master green lane; no session URL) --- src/indexing.jl | 2 ++ test/tuple_nodes.jl | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/indexing.jl b/src/indexing.jl index a0ee12b..95956ea 100644 --- a/src/indexing.jl +++ b/src/indexing.jl @@ -1,4 +1,6 @@ nodeselect(ns, i, I...) = ns[i][I...] +nodeselect(ns::Tuple, i, I...) = i == 1 ? first(ns)[I...] : nodeselect(Base.tail(ns), i - 1, I...) +nodeselect(ns::Tuple{}, i, I...) = throw(BoundsError(ns, i)) nodechild(ns, i, j) = ns[i].nodes[j] function bisect_search(a, i) diff --git a/test/tuple_nodes.jl b/test/tuple_nodes.jl index 6b345d0..a23d788 100644 --- a/test/tuple_nodes.jl +++ b/test/tuple_nodes.jl @@ -48,8 +48,8 @@ scenario = construct(Scenario, (deepcopy(community),)) @inferred getindex(organ1, 1) @inferred getindex(plant1, 3) -@test_broken @inferred getindex(community, 4) -@test_broken @inferred getindex(scenario, 8) +@inferred getindex(community, 4) +@inferred getindex(scenario, 8) @test scenario[1] == 1.1 @test scenario[2] == 2.1