From 20410ad18231cd57903cb32fae578edb176a5d0b Mon Sep 17 00:00:00 2001 From: Miha Zgubic Date: Thu, 25 Mar 2021 13:46:56 +0000 Subject: [PATCH 1/7] add tests --- test/differentials/composite.jl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/differentials/composite.jl b/test/differentials/composite.jl index 599c50b22..a792a4889 100644 --- a/test/differentials/composite.jl +++ b/test/differentials/composite.jl @@ -153,6 +153,11 @@ end @test canonicalize(CFoo(y=10)) == CFoo(x=Zero(), y=10) @test_throws ArgumentError canonicalize(CFoo(q=99.0, x=2.5)) + + @testset "abstract primal type" begin + c = Composite{Any}(;a=1, b=2) + @test c == canonicalize(c) + end end @testset "+ with other composites" begin From f26a6312a2e624ca14b6c58b594b550ce00123a4 Mon Sep 17 00:00:00 2001 From: Miha Zgubic Date: Thu, 25 Mar 2021 13:51:41 +0000 Subject: [PATCH 2/7] add implementation --- src/differentials/composite.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/differentials/composite.jl b/src/differentials/composite.jl index 36d21853e..96489137c 100644 --- a/src/differentials/composite.jl +++ b/src/differentials/composite.jl @@ -180,6 +180,10 @@ canonicalize(comp::Composite{<:Tuple, <:Tuple}) = comp # Dict composite are always in their canonical form. canonicalize(comp::Composite{<:Any, <:AbstractDict}) = comp +# Composites of abstract primal types +canonicalize(comp::Composite{Any, <:NamedTuple{L}}) where {L} = comp +canonicalize(comp::Composite{Any, <:Tuple{L}}) where {L} = comp + """ _zeroed_backing(P) From 9b4e450fb5b2b5c3ec1f66cbebf522f91ecc5162 Mon Sep 17 00:00:00 2001 From: Miha Zgubic Date: Thu, 25 Mar 2021 13:51:55 +0000 Subject: [PATCH 3/7] bump aptch --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index cf77d40c2..f951234a4 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "ChainRulesCore" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "0.9.29" +version = "0.9.30" [deps] Compat = "34da2185-b29b-5c13-b0c7-acf172513d20" From 132264fdb37614c3966725a507f918258d80e7a9 Mon Sep 17 00:00:00 2001 From: Miha Zgubic Date: Thu, 25 Mar 2021 13:54:14 +0000 Subject: [PATCH 4/7] Update src/differentials/composite.jl --- src/differentials/composite.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/differentials/composite.jl b/src/differentials/composite.jl index 96489137c..d784bfc75 100644 --- a/src/differentials/composite.jl +++ b/src/differentials/composite.jl @@ -180,7 +180,7 @@ canonicalize(comp::Composite{<:Tuple, <:Tuple}) = comp # Dict composite are always in their canonical form. canonicalize(comp::Composite{<:Any, <:AbstractDict}) = comp -# Composites of abstract primal types +# Composites of unspecified primal types canonicalize(comp::Composite{Any, <:NamedTuple{L}}) where {L} = comp canonicalize(comp::Composite{Any, <:Tuple{L}}) where {L} = comp From 3be58124dd31fded374599a77523cfd876836ff2 Mon Sep 17 00:00:00 2001 From: Miha Zgubic Date: Thu, 25 Mar 2021 13:54:57 +0000 Subject: [PATCH 5/7] Update test/differentials/composite.jl --- test/differentials/composite.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/differentials/composite.jl b/test/differentials/composite.jl index a792a4889..bc633b77a 100644 --- a/test/differentials/composite.jl +++ b/test/differentials/composite.jl @@ -154,7 +154,7 @@ end @test_throws ArgumentError canonicalize(CFoo(q=99.0, x=2.5)) - @testset "abstract primal type" begin + @testset "unspecified primal type" begin c = Composite{Any}(;a=1, b=2) @test c == canonicalize(c) end From 58ea459d6b50f361be6d6262b108e5c3b405746f Mon Sep 17 00:00:00 2001 From: Miha Zgubic Date: Thu, 25 Mar 2021 14:03:24 +0000 Subject: [PATCH 6/7] all the backings --- src/differentials/composite.jl | 3 ++- test/differentials/composite.jl | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/differentials/composite.jl b/src/differentials/composite.jl index d784bfc75..809bf1703 100644 --- a/src/differentials/composite.jl +++ b/src/differentials/composite.jl @@ -182,7 +182,8 @@ canonicalize(comp::Composite{<:Any, <:AbstractDict}) = comp # Composites of unspecified primal types canonicalize(comp::Composite{Any, <:NamedTuple{L}}) where {L} = comp -canonicalize(comp::Composite{Any, <:Tuple{L}}) where {L} = comp +canonicalize(comp::Composite{Any, <:Tuple}) where {L} = comp +canonicalize(comp::Composite{Any, <:AbstractDict}) where {L} = comp """ _zeroed_backing(P) diff --git a/test/differentials/composite.jl b/test/differentials/composite.jl index bc633b77a..50dfddc0f 100644 --- a/test/differentials/composite.jl +++ b/test/differentials/composite.jl @@ -155,8 +155,13 @@ end @test_throws ArgumentError canonicalize(CFoo(q=99.0, x=2.5)) @testset "unspecified primal type" begin - c = Composite{Any}(;a=1, b=2) - @test c == canonicalize(c) + c1 = Composite{Any}(;a=1, b=2) + c2 = Composite{Any}(1, 2) + c3 = Composite{Any}(Dict(4 => 3)) + + @test c1 == canonicalize(c1) + @test c2 == canonicalize(c2) + @test c3 == canonicalize(c3) end end From e09329b75a0f34e4e062d7d4cf726b7410e5985f Mon Sep 17 00:00:00 2001 From: Miha Zgubic Date: Thu, 25 Mar 2021 14:51:16 +0000 Subject: [PATCH 7/7] Update src/differentials/composite.jl Co-authored-by: Lyndon White --- src/differentials/composite.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/differentials/composite.jl b/src/differentials/composite.jl index 809bf1703..10eb50730 100644 --- a/src/differentials/composite.jl +++ b/src/differentials/composite.jl @@ -180,7 +180,8 @@ canonicalize(comp::Composite{<:Tuple, <:Tuple}) = comp # Dict composite are always in their canonical form. canonicalize(comp::Composite{<:Any, <:AbstractDict}) = comp -# Composites of unspecified primal types +# Composites of unspecified primal types (indicated by specifying exactly `Any`) +# all combinations of type-params are specified here to avoid ambiguities canonicalize(comp::Composite{Any, <:NamedTuple{L}}) where {L} = comp canonicalize(comp::Composite{Any, <:Tuple}) where {L} = comp canonicalize(comp::Composite{Any, <:AbstractDict}) where {L} = comp