@@ -171,9 +171,8 @@ Base.similar(::Array, S::Type{Interval{T}}, dims::Dims) where {T<:NumTy
171
171
Base. similar (:: Array , S:: Type{Complex{Interval{T}}} , dims:: Dims ) where {T<: NumTypes } = zeros (S, dims)
172
172
#
173
173
174
- function LinearAlgebra. mul! (C:: AbstractVecOrMat{<:RealOrComplexI} , A:: AbstractMatrix{<:RealOrComplexI} , B:: AbstractVecOrMat{<:RealOrComplexI} )
175
- return LinearAlgebra. mul! (C, A, B, interval (true ), interval (false ))
176
- end
174
+ LinearAlgebra. mul! (C:: AbstractVecOrMat{<:RealOrComplexI} , A:: AbstractMatrix{<:RealOrComplexI} , B:: AbstractVecOrMat{<:RealOrComplexI} ) =
175
+ LinearAlgebra. mul! (C, A, B, interval (true ), interval (false ))
177
176
178
177
for T ∈ (:AbstractVector , :AbstractMatrix ) # needed to resolve method ambiguities
179
178
@eval begin
251
250
# fast matrix multiplication
252
251
# Note: Rump's algorithm
253
252
254
- _mul! (:: MatMulMode{:fast} , C, A:: AbstractMatrix{<:Interval{<:Rational}} , B:: AbstractVecOrMat{<:Interval{<:Rational}} , α, β) =
255
- LinearAlgebra. _mul! (C, A, B, α, β)
256
- _mul! (:: MatMulMode{:fast} , C, A:: AbstractMatrix{<:Interval{<:Rational}} , B:: AbstractVecOrMat , α, β) =
257
- LinearAlgebra. _mul! (C, A, B, α, β)
258
- _mul! (:: MatMulMode{:fast} , C, A:: AbstractMatrix , B:: AbstractVecOrMat{<:Interval{<:Rational}} , α, β) =
259
- LinearAlgebra. _mul! (C, A, B, α, β)
260
-
261
- _mul! (:: MatMulMode{:fast} , C, A:: AbstractMatrix{<:Complex{<:Interval{<:Rational}}} , B:: AbstractVecOrMat{<:Complex{<:Interval{<:Rational}}} , α, β) =
262
- LinearAlgebra. _mul! (C, A, B, α, β)
263
- _mul! (:: MatMulMode{:fast} , C, A:: AbstractMatrix{<:Complex{<:Interval{<:Rational}}} , B:: AbstractVecOrMat{<:Interval{<:Rational}} , α, β) =
264
- LinearAlgebra. _mul! (C, A, B, α, β)
265
- _mul! (:: MatMulMode{:fast} , C, A:: AbstractMatrix{<:Interval{<:Rational}} , B:: AbstractVecOrMat{<:Complex{<:Interval{<:Rational}}} , α, β) =
266
- LinearAlgebra. _mul! (C, A, B, α, β)
267
-
268
253
function _mul! (:: MatMulMode{:fast} , C, A, B, α, β)
269
254
Int != Int32 && return _fastmul! (C, A, B, α, β)
270
255
@info " Fast multiplication is not supported on 32-bit systems, using the slow version"
@@ -432,7 +417,7 @@ for (T, S) ∈ ((:(Complex{<:Interval}), :Interval), (:(Complex{<:Interval}), :A
432
417
end
433
418
434
419
function __mul (A:: AbstractMatrix{T} , B:: AbstractVecOrMat{S} ) where {T,S}
435
- NewType = promote_numtype (T, S)
420
+ NewType = float ( promote_numtype (T, S) )
436
421
return __mul (interval .(NewType, A), interval .(NewType, B))
437
422
end
438
423
@@ -507,13 +492,13 @@ else
507
492
_getrounding () = ccall (:fegetround , Cint, ())
508
493
end
509
494
510
- _2mat (A:: LinearAlgebra.Diagonal ) = Matrix (A)
511
-
512
- _2mat (A ) = A
495
+ _2stride (A:: StridedArray ) = A
496
+ _2stride (A :: AbstractVector ) = Vector (A)
497
+ _2stride (A :: AbstractMatrix ) = Matrix (A)
513
498
514
499
function _call_gem_openblas_upward! (C, A_:: AbstractMatrix{Float64} , B_:: AbstractMatrix{Float64} )
515
- A = _2mat (A_)
516
- B = _2mat (B_)
500
+ A = _2stride (A_)
501
+ B = _2stride (B_)
517
502
518
503
m, k = size (A)
519
504
n = size (B, 2 )
@@ -544,8 +529,8 @@ function _call_gem_openblas_upward!(C, A_::AbstractMatrix{Float64}, B_::Abstract
544
529
end
545
530
546
531
function _call_gem_openblas_upward! (C, A_:: AbstractMatrix{Float64} , B_:: AbstractVector{Float64} )
547
- A = _2mat (A_)
548
- B = _2mat (B_)
532
+ A = _2stride (A_)
533
+ B = _2stride (B_)
549
534
550
535
m, k = size (A)
551
536
0 commit comments