Skip to content

Commit cc1ed9c

Browse files
authored
Complex multiplication with SHermitianCompact (#1264)
* fix complex scalar times SHermitianCompact * add tests * implement suggestion * bump v1.9.6
1 parent 609aa34 commit cc1ed9c

File tree

3 files changed

+38
-17
lines changed

3 files changed

+38
-17
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "StaticArrays"
22
uuid = "90137ffa-7385-5640-81b9-e52037218182"
3-
version = "1.9.5"
3+
version = "1.9.6"
44

55
[deps]
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/SHermitianCompact.jl

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,25 @@ LinearAlgebra.issymmetric(a::SHermitianCompact) = true
151151
end
152152
end
153153

154-
@inline Base.:*(a::Number, b::SHermitianCompact) = SHermitianCompact(a * b.lowertriangle)
155-
@inline Base.:*(a::SHermitianCompact, b::Number) = SHermitianCompact(a.lowertriangle * b)
156-
157-
@inline Base.:/(a::SHermitianCompact, b::Number) = SHermitianCompact(a.lowertriangle / b)
158-
@inline Base.:\(a::Number, b::SHermitianCompact) = SHermitianCompact(a \ b.lowertriangle)
154+
@inline Base.:*(a::Real, b::SHermitianCompact) = SHermitianCompact(a * b.lowertriangle)
155+
@inline Base.:*(a::SHermitianCompact, b::Real) = SHermitianCompact(a.lowertriangle * b)
156+
@inline Base.:*(a::Number, b::SHermitianCompact) = a * SMatrix(b)
157+
@inline Base.:*(a::SHermitianCompact, b::Number) = SMatrix(a) * b
158+
159+
@inline Base.:/(a::SHermitianCompact, b::Real) = SHermitianCompact(a.lowertriangle / b)
160+
@inline Base.:\(a::Real, b::SHermitianCompact) = SHermitianCompact(a \ b.lowertriangle)
161+
@inline Base.:/(a::SHermitianCompact, b::Number) = SMatrix(a) / b
162+
@inline Base.:\(a::Number, b::SHermitianCompact) = a \ SMatrix(b)
163+
164+
@inline Base.muladd(scalar::Number, a::SHermitianCompact, b::StaticArray) = muladd(scalar, SMatrix(a), b)
165+
@inline Base.muladd(a::SHermitianCompact, scalar::Number, b::StaticArray) = muladd(SMatrix(a), scalar, b)
166+
@inline Base.muladd(scalar::Real, a::SHermitianCompact, b::StaticArray) = map((ai, bi) -> muladd(scalar, ai, bi), a, b)
167+
@inline Base.muladd(a::SHermitianCompact, scalar::Real, b::StaticArray) = map((ai, bi) -> muladd(ai, scalar, bi), a, b)
168+
169+
@inline Base.FastMath.mul_fast(a::Number, b::SHermitianCompact) = Base.FastMath.mul_fast(a, SMatrix(b))
170+
@inline Base.FastMath.mul_fast(a::SHermitianCompact, b::Number) = Base.FastMath.mul_fast(SMatrix(a), b)
171+
@inline Base.FastMath.mul_fast(a::Real, b::SHermitianCompact) = map(c -> Base.FastMath.mul_fast(a, c), b)
172+
@inline Base.FastMath.mul_fast(a::SHermitianCompact, b::Real) = map(c -> Base.FastMath.mul_fast(c, b), a)
159173

160174
@generated function _plus_uniform(::Size{S}, a::SHermitianCompact{N, T, L}, λ) where {S, N, T, L}
161175
@assert S[1] == N

test/SHermitianCompact.jl

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -185,21 +185,28 @@ fill3(x) = fill(3, x)
185185

186186
@testset "Scalar-array" begin
187187
x = SHermitianCompact(SVector{6, Int}(1 : 6))
188-
y = -5
189-
for op in (:*, :/, :\)
190-
if op != :\
191-
@eval begin
192-
@test $op($x, $y) == $op(SMatrix($x), $y)
193-
@test_noalloc $op($x, $y)
188+
for y = (-5, 1.1+4.3im)
189+
for op in (:*, :/, :\, :(Base.FastMath.mul_fast))
190+
if op != :\
191+
@eval begin
192+
@test $op($x, $y) == $op(SMatrix($x), $y)
193+
@test_noalloc $op($x, $y)
194+
end
194195
end
195-
end
196196

197-
if op != :/
198-
@eval begin
199-
@test $op($y, $x) == $op($y, SMatrix($x))
200-
@test_noalloc $op($y, $x)
197+
if op != :/
198+
@eval begin
199+
@test $op($y, $x) == $op($y, SMatrix($x))
200+
@test_noalloc $op($y, $x)
201+
end
201202
end
202203
end
204+
@eval begin
205+
@test muladd($y, $x, $x) == muladd($y, SMatrix($x), $x)
206+
@test_noalloc muladd($y, $x, $x)
207+
@test muladd($x, $y, $x) == muladd(SMatrix($x), $y, $x)
208+
@test_noalloc muladd($x, $y, $x)
209+
end
203210
end
204211
end
205212

0 commit comments

Comments
 (0)