11struct FillMap{T} <: LinearMap{T}
22 λ:: T
33 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" ))
76 return new {T} (λ, dims)
87 end
98end
1211Base. size (A:: FillMap ) = A. size
1312MulStyle (A:: FillMap ) = FiveArg ()
1413LinearAlgebra. 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 ]
1615LinearAlgebra. isposdef (A:: FillMap ) = (size (A, 1 ) == size (A, 2 ) == 1 && isposdef (A. λ))
1716Base.:(== )(A:: FillMap , B:: FillMap ) = A. λ == B. λ && A. size == B. size
1817
3130function _unsafe_mul! (y:: AbstractVecOrMat , A:: FillMap , x:: AbstractVector , α:: Number , β:: Number )
3231 if iszero (α)
3332 ! isone (β) && rmul! (y, β)
34- return y
3533 else
3634 temp = A. λ * sum (x) * α
3735 if iszero (β)
@@ -53,8 +51,6 @@ Base.:(*)(λ::RealOrComplex, A::FillMap) = FillMap(λ * A.λ, size(A))
5351Base.:(* )(A:: FillMap , λ:: RealOrComplex ) = FillMap (A. λ * λ, size (A))
5452
5553function 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 )))
6056end
0 commit comments