@@ -325,40 +325,19 @@ function mul_indices(I1::CartesianIndex{2}, I2::CartesianIndex{2})
325
325
return CartesianIndex (I1[1 ], I2[2 ])
326
326
end
327
327
328
- using LinearAlgebra: mul!
329
- function default_mul!! (
330
- a_dest:: AbstractMatrix ,
331
- a1:: AbstractMatrix ,
332
- a2:: AbstractMatrix ,
333
- α:: Number = true ,
334
- β:: Number = false ,
335
- )
336
- mul! (a_dest, a1, a2, α, β)
337
- return a_dest
338
- end
339
-
340
- function default_mul!! (
341
- a_dest:: Number , a1:: Number , a2:: Number , α:: Number = true , β:: Number = false
342
- )
343
- return a1 * a2 * α + a_dest * β
344
- end
328
+ using LinearAlgebra: LinearAlgebra, mul!
345
329
346
330
# a1 * a2 * α + a_dest * β
347
- function sparse_mul! (
348
- a_dest:: AbstractArray ,
349
- a1:: AbstractArray ,
350
- a2:: AbstractArray ,
351
- α:: Number = true ,
352
- β:: Number = false ;
353
- (mul!!)= (default_mul!!),
331
+ @interface :: AbstractSparseArrayInterface function LinearAlgebra. mul! (
332
+ C:: AbstractArray , A:: AbstractArray , B:: AbstractArray , α:: Number , β:: Number
354
333
)
355
334
a_dest .*= β
356
335
β′ = one (Bool)
357
336
for I1 in eachstoredindex (a1)
358
337
for I2 in eachstoredindex (a2)
359
338
I_dest = mul_indices (I1, I2)
360
339
if ! isnothing (I_dest)
361
- a_dest[I_dest] = mul!! (a_dest[I_dest], a1[I1], a2[I2], α, β′)
340
+ a_dest[I_dest] = mul! (a_dest[I_dest], a1[I1], a2[I2], α, β′)
362
341
end
363
342
end
364
343
end
368
347
function ArrayLayouts. materialize! (
369
348
m:: MatMulMatAdd{<:AbstractSparseLayout,<:AbstractSparseLayout,<:AbstractSparseLayout}
370
349
)
371
- sparse_mul ! (m. C, m. A, m. B, m. α, m. β)
350
+ @interface SparseArrayInterface () mul ! (m. C, m. A, m. B, m. α, m. β)
372
351
return m. C
373
352
end
374
353
0 commit comments