From 9ed83402d3fae142f268ff3ddcd1fe3bac19f760 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Jan 2025 20:19:51 +0000 Subject: [PATCH] + and - for DiagTrav (#142) * + and - for DiagTrav * overload /, \ and - for DiagTrav --- Project.toml | 2 +- src/blockkron.jl | 13 +++++++++++++ test/test_blockkron.jl | 14 ++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 9ec09bd..115061c 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "LazyBandedMatrices" uuid = "d7e5e226-e90b-4449-9968-0f923699bf6f" authors = ["Sheehan Olver "] -version = "0.11.2" +version = "0.11.3" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" diff --git a/src/blockkron.jl b/src/blockkron.jl index 4c511d3..6f85db0 100644 --- a/src/blockkron.jl +++ b/src/blockkron.jl @@ -212,6 +212,19 @@ end invdiagtrav(a) = InvDiagTrav(a) invdiagtrav(a::DiagTrav) = a.array +-(A::DiagTrav) = DiagTrav(-A.array) + +for op in (:+, :-) + @eval $op(A::DiagTrav, B::DiagTrav) = DiagTrav($op(A.array, B.array)) +end + +for op in (:*, :/) + @eval $op(A::DiagTrav, k::Number) = DiagTrav($op(A.array, k)) +end + +for op in (:*, :\) + @eval $op(k::Number, A::DiagTrav) = DiagTrav($op(k, A.array)) +end """ KronTrav(A,B,C...) diff --git a/test/test_blockkron.jl b/test/test_blockkron.jl index 3e589ea..9bbd321 100644 --- a/test/test_blockkron.jl +++ b/test/test_blockkron.jl @@ -34,6 +34,20 @@ LinearAlgebra.factorize(A::MyLazyArray) = factorize(A.data) A = [1 2; 3 4; 5 6] @test DiagTrav(A) == [1, 3, 2, 5, 4] + @test DiagTrav(A) + DiagTrav(A) isa DiagTrav + @test DiagTrav(A) - DiagTrav(A) isa DiagTrav + @test 2DiagTrav(A) isa DiagTrav + @test 2\DiagTrav(A) isa DiagTrav + @test DiagTrav(A)*2 isa DiagTrav + @test DiagTrav(A)/2 isa DiagTrav + @test -DiagTrav(A) isa DiagTrav + + + @test DiagTrav(A) + DiagTrav(A) == 2DiagTrav(A) == DiagTrav(A)*2 == 2Vector(DiagTrav(A)) + @test DiagTrav(A) - DiagTrav(A) == 0DiagTrav(A) == 0Vector(DiagTrav(A)) + @test 2\DiagTrav(A) == DiagTrav(A)/2 == Vector(DiagTrav(A))/2 + @test -DiagTrav(A) == -Vector(DiagTrav(A)) + @test resize!(DiagTrav(A), Block(2)) == [1, 3,2] A = DiagTrav(randn(3,3,3))