Skip to content

Commit dd013fd

Browse files
committed
specialize mul! for BraidingTensor
1 parent 2e43793 commit dd013fd

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

src/tensors/braidingtensor.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,30 @@ function block(b::BraidingTensor, s::Sector)
163163
return data
164164
end
165165

166+
# Linear Algebra
167+
# --------------
168+
function LinearAlgebra.mul!(C::AbstractTensorMap, A::AbstractTensorMap, B::BraidingTensor,
169+
α::Number, β::Number)
170+
compose(space(A), space(B)) == space(C) ||
171+
throw(SpaceMismatch(lazy"$(space(C)) ≠ $(space(A)) * $(space(B))"))
172+
levels = B.adjoint ? (1, 2, 3, 4) : (1, 2, 4, 3)
173+
return add_braid!(C, A, ((1, 2), (4, 3)), levels, α, β)
174+
end
175+
function LinearAlgebra.mul!(C::AbstractTensorMap, A::BraidingTensor, B::AbstractTensorMap,
176+
α::Number, β::Number)
177+
compose(space(A), space(B)) == space(C) ||
178+
throw(SpaceMismatch(lazy"$(space(C)) ≠ $(space(A)) * $(space(B))"))
179+
levels = A.adjoint ? (2, 1, 3, 4) : (1, 2, 3, 4)
180+
return add_transpose!(C, B, ((2, 1), (3, 4)), levels, α, β)
181+
end
182+
# TODO: implement this?
183+
function LinearAlgebra.mul!(C::AbstractTensorMap, A::BraidingTensor, B::BraidingTensor,
184+
α::Number, β::Number)
185+
compose(space(A), space(B)) == space(C) ||
186+
throw(SpaceMismatch(lazy"$(space(C)) ≠ $(space(A)) * $(space(B))"))
187+
return mul!(C, TensorMap(A), B, α, β)
188+
end
189+
166190
# Index manipulations
167191
# -------------------
168192
has_shared_permute(t::BraidingTensor, ::Index2Tuple) = false

0 commit comments

Comments
 (0)