diff --git a/Project.toml b/Project.toml index 9f22f8637..58dec7256 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "ChainRulesCore" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.12.1" +version = "1.12.2" [deps] Compat = "34da2185-b29b-5c13-b0c7-acf172513d20" diff --git a/src/projection.jl b/src/projection.jl index 8eba26353..c99ce0c4d 100644 --- a/src/projection.jl +++ b/src/projection.jl @@ -380,11 +380,14 @@ end using LinearAlgebra: AdjointAbsVec, TransposeAbsVec, AdjOrTransAbsVec -# UniformScaling can represent its own cotangent -ProjectTo(x::UniformScaling) = ProjectTo{UniformScaling}(; λ=ProjectTo(x.λ)) -ProjectTo(x::UniformScaling{Bool}) = ProjectTo(false) -(pr::ProjectTo{UniformScaling})(dx::UniformScaling) = UniformScaling(pr.λ(dx.λ)) -(pr::ProjectTo{UniformScaling})(dx::Tangent{<:UniformScaling}) = UniformScaling(pr.λ(dx.λ)) +if VERSION >= v"1.6" + # UniformScaling can represent its own cotangent + # but shouldn't on Julia 1.0, as rules in CR.jl were added only after mioving to 1.6 + ProjectTo(x::UniformScaling) = ProjectTo{UniformScaling}(; λ=ProjectTo(x.λ)) + ProjectTo(x::UniformScaling{Bool}) = ProjectTo(false) + (pr::ProjectTo{UniformScaling})(dx::UniformScaling) = UniformScaling(pr.λ(dx.λ)) + (pr::ProjectTo{UniformScaling})(dx::Tangent{<:UniformScaling}) = UniformScaling(pr.λ(dx.λ)) +end # Row vectors ProjectTo(x::AdjointAbsVec) = ProjectTo{Adjoint}(; parent=ProjectTo(parent(x))) diff --git a/test/projection.jl b/test/projection.jl index 3e70772ac..badbbc3cb 100644 --- a/test/projection.jl +++ b/test/projection.jl @@ -208,7 +208,7 @@ struct NoSuperType end ##### `LinearAlgebra` ##### - @testset "UniformScaling" begin + VERSION >= v"1.6" && @testset "UniformScaling" begin @test ProjectTo(I)(123) === NoTangent() @test ProjectTo(2 * I)(I * 3im) === 0.0 * I @test ProjectTo((4 + 5im) * I)(Tangent{typeof(im * I)}(; λ = 6)) === (6.0 + 0.0im) * I