From a3e76b1eb0573dcde5e77c5dad8bed6e4d2dcb13 Mon Sep 17 00:00:00 2001 From: Nick Robinson Date: Thu, 15 Oct 2020 12:46:46 +0100 Subject: [PATCH] Make `getproperty` on `Composite` unthunk (#121) * Make `getproperty` on `Composite` unthunk * Bump patch version --- Project.toml | 4 ++-- src/differentials/composite.jl | 5 +++-- test/differentials/composite.jl | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index 0533cbb9e..c70258691 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "ChainRulesCore" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "0.9.15" +version = "0.9.16" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" @@ -11,7 +11,7 @@ BenchmarkTools = "0.5" FiniteDifferences = "0.10" MuladdMacro = "0.2.1" StaticArrays = "0.11, 0.12" -julia = "^1.0" +julia = "1" [extras] BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" diff --git a/src/differentials/composite.jl b/src/differentials/composite.jl index ee01b2414..98a56e259 100644 --- a/src/differentials/composite.jl +++ b/src/differentials/composite.jl @@ -68,14 +68,15 @@ Base.convert(::Type{<:Tuple}, comp::Composite{<:Any, <:Tuple}) = backing(comp) Base.convert(::Type{<:Dict}, comp::Composite{<:Dict, <:Dict}) = backing(comp) Base.getindex(comp::Composite, idx) = getindex(backing(comp), idx) -Base.getproperty(comp::Composite, idx::Int) = getproperty(backing(comp), idx) # for Tuple +# for Tuple +Base.getproperty(comp::Composite, idx::Int) = unthunk(getproperty(backing(comp), idx)) function Base.getproperty( comp::Composite{P, <:NamedTuple{L}}, idx::Symbol ) where {P, L} # Need to check L directly, or else this does not constant-fold idx ∈ L || return Zero() - return getproperty(backing(comp), idx) + return unthunk(getproperty(backing(comp), idx)) end Base.keys(comp::Composite) = keys(backing(comp)) diff --git a/test/differentials/composite.jl b/test/differentials/composite.jl index 0884b1345..cb872e9a3 100644 --- a/test/differentials/composite.jl +++ b/test/differentials/composite.jl @@ -53,6 +53,8 @@ end @test keys(Composite{Tuple{Float64,}}(2.0)) == Base.OneTo(1) @test propertynames(Composite{Tuple{Float64,}}(2.0)) == (1,) @test getproperty(Composite{Tuple{Float64,}}(2.0), 1) == 2.0 + @test getproperty(Composite{Tuple{Float64,}}(@thunk 2.0^2), 1) == 4.0 + @test getproperty(Composite{Tuple{Float64,}}(a=(@thunk 2.0^2),), :a) == 4.0 @test length(Composite{Foo}(x=2.5)) == 1 @test length(Composite{Tuple{Float64,}}(2.0)) == 1