Skip to content

Commit 7347bfc

Browse files
committed
Add setfield frule
1 parent ba52ec8 commit 7347bfc

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ SuiteSparse = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
2020

2121
[compat]
2222
Adapt = "3.4.0"
23-
ChainRulesCore = "1.15.3"
23+
ChainRulesCore = "1.17"
2424
ChainRulesTestUtils = "1.5"
2525
Compat = "3.46, 4.2"
2626
FiniteDifferences = "0.12.20"

src/rulesets/Base/base.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77
@scalar_rule zero(x) ZeroTangent()
88
@scalar_rule transpose(x) true
99

10+
11+
function ChainRulesCore.frule((_, ȯbj, _, ẋ), ::typeof(setfield!), obj, field, x)
12+
ȯbj::MutableTangent
13+
y = setfield!(obj, field, x)
14+
= setproperty!(ȯbj, field, ẋ)
15+
return y, ẏ
16+
end
17+
1018
# `adjoint`
1119

1220
frule((_, Δz), ::typeof(adjoint), z::Number) = (z', Δz')

test/rulesets/Base/base.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@
88
end
99
end
1010
end
11+
12+
@testset "setfield!" begin
13+
mutable struct MDemo
14+
x::Float64
15+
end
16+
17+
test_frule(setfield!, MDemo(3.5)MutableTangent{MDemo}(x=2.0), :x, 5.0)
18+
test_frule(setfield!, MDemo(3.5)MutableTangent{MDemo}(x=2.0), 1, 5.0)
19+
end
1120

1221
@testset "Trig" begin
1322
@testset "Basics" for x = (Float64(π)-0.01, Complex(π, π/2))

0 commit comments

Comments
 (0)