1
1
struct FillMap{T} <: LinearMap{T}
2
2
λ:: T
3
3
size:: Dims{2}
4
- function FillMap (λ:: T , dims) where {T}
5
- all (d -> d >= 0 , dims) || throw (ArgumentError (" dims of FillMap must be non-negative" ))
6
- promote_type (T, typeof (λ)) == T || throw (InexactError ())
4
+ function FillMap (λ:: T , dims:: Dims{2} ) where {T}
5
+ all (>= (0 ), dims) || throw (ArgumentError (" dims of FillMap must be non-negative" ))
7
6
return new {T} (λ, dims)
8
7
end
9
8
end
12
11
Base. size (A:: FillMap ) = A. size
13
12
MulStyle (A:: FillMap ) = FiveArg ()
14
13
LinearAlgebra. issymmetric (A:: FillMap ) = A. size[1 ] == A. size[2 ]
15
- LinearAlgebra. ishermitian (A:: FillMap ) = isreal (A) && A. size[1 ] == A. size[2 ]
14
+ LinearAlgebra. ishermitian (A:: FillMap ) = isreal (A. λ ) && A. size[1 ] == A. size[2 ]
16
15
LinearAlgebra. isposdef (A:: FillMap ) = (size (A, 1 ) == size (A, 2 ) == 1 && isposdef (A. λ))
17
16
Base.:(== )(A:: FillMap , B:: FillMap ) = A. λ == B. λ && A. size == B. size
18
17
31
30
function _unsafe_mul! (y:: AbstractVecOrMat , A:: FillMap , x:: AbstractVector , α:: Number , β:: Number )
32
31
if iszero (α)
33
32
! isone (β) && rmul! (y, β)
34
- return y
35
33
else
36
34
temp = A. λ * sum (x) * α
37
35
if iszero (β)
@@ -53,8 +51,6 @@ Base.:(*)(λ::RealOrComplex, A::FillMap) = FillMap(λ * A.λ, size(A))
53
51
Base.:(* )(A:: FillMap , λ:: RealOrComplex ) = FillMap (A. λ * λ, size (A))
54
52
55
53
function Base.:(* )(A:: FillMap , B:: FillMap )
56
- mA, nA = size (A)
57
- mB, nB = size (B)
58
- nA != mB && throw (DimensionMismatch ())
59
- return FillMap (A. λ* B. λ* nA, (mA, nB))
54
+ check_dim_mul (A, B)
55
+ return FillMap (A. λ* B. λ* nA, (size (A, 1 ), size (B, 2 )))
60
56
end
0 commit comments