Skip to content

Commit 6f15d27

Browse files
committed
accept int index
1 parent 9c2e90f commit 6f15d27

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/tangent_types/structural_tangent.jl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,9 +424,20 @@ mutable struct MutableTangent{P} <: StructuralTangent{P}
424424
end
425425

426426
MutableTangent{P}(;kwargs...) where P = MutableTangent{P}(NamedTuple(kwargs))
427+
427428
Base.getproperty(tangent::MutableTangent, idx::Symbol) = getfield(backing(tangent), idx)
429+
Base.getproperty(tangent::MutableTangent, idx::Int) = getfield(backing(tangent), idx) # break ambig
430+
428431
function Base.setproperty!(tangent::MutableTangent, name::Symbol, x)
429432
new_backing = Base.setindex(backing(tangent), x, name)
430433
setfield!(tangent, :backing, new_backing)
431434
return x
432-
end
435+
end
436+
437+
function Base.setproperty!(tangent::MutableTangent, idx::Int, x)
438+
# needed due to https://github.com/JuliaLang/julia/issues/43155
439+
name = idx2sym(backing(tangent), idx)
440+
return setproperty!(tangent, name, x)
441+
end
442+
443+
idx2sym(::NamedTuple{names}, idx) where names = names[idx]

test/tangent_types/structural_tangent.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,11 @@ end
439439
obj = MDemo(99.0)
440440
∂obj = MutableTangent{MDemo}(;x=1.5)
441441
frule((NoTangent(), ∂obj, NoTangent(), 10.0), setfield!, obj, :x, 95.0)
442-
443442
@test ∂obj.x == 10.0
444443
@test obj.x == 95.0
444+
445+
frule((NoTangent(), ∂obj, NoTangent(), 20.0), setfield!, obj, 1, 96.0)
446+
@test ∂obj.x == 20.0
447+
@test getproperty(∂obj, 1) == 20.0
448+
@test obj.x == 96.0
445449
end

0 commit comments

Comments
 (0)