From ccf1408420035fefa86f6fdea9dbfec61fc287c3 Mon Sep 17 00:00:00 2001 From: Frames White Date: Tue, 20 Feb 2024 12:03:20 +0800 Subject: [PATCH] add scaling division --- src/tangent_types/abstract_tangent.jl | 3 +++ test/tangent_types/structural_tangent.jl | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/tangent_types/abstract_tangent.jl b/src/tangent_types/abstract_tangent.jl index 2f5d0a492..db346e8b8 100644 --- a/src/tangent_types/abstract_tangent.jl +++ b/src/tangent_types/abstract_tangent.jl @@ -38,3 +38,6 @@ abstract type AbstractTangent end Base.:+(x::AbstractTangent) = x @inline Base.conj(x::AbstractTangent) = x + +Base.:/(x::AbstractTangent, y) = x * inv(y) +Base.:\(x, y::AbstractTangent) = inv(x) * y \ No newline at end of file diff --git a/test/tangent_types/structural_tangent.jl b/test/tangent_types/structural_tangent.jl index d93487703..145c937b3 100644 --- a/test/tangent_types/structural_tangent.jl +++ b/test/tangent_types/structural_tangent.jl @@ -396,6 +396,19 @@ end @test_throws MethodError Tangent{Foo}(; y=1.5, x=2.5) * @thunk [1 2; 3 4] end + @testset "scaling division" end + a = Tangent{Foo}(; x=2.0, y=-2.0) + @test a / 2.0 == Tangent{Foo}(; x=1.0, y=-1.0) == 2.0 \ a + @test ( + Tangent{Tuple{Float64,Float64}}(2.0, 4.0) / 2.0 == + Tangent{Tuple{Float64,Float64}}(1.0, 2.0) == + 2.0 \ Tangent{Tuple{Float64,Float64}}(2.0, 4.0) + ) + + + end + + @testset "iszero" begin @test iszero(Tangent{Foo}()) @test iszero(Tangent{Tuple{}}())