@@ -163,6 +163,30 @@ function block(b::BraidingTensor, s::Sector)
163163 return data
164164end
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# -------------------
168192has_shared_permute (t:: BraidingTensor , :: Index2Tuple ) = false
0 commit comments