@@ -4,7 +4,6 @@ export LinearMap
4
4
export ⊗ , kronsum, ⊕
5
5
6
6
using LinearAlgebra
7
- import LinearAlgebra: AdjointAbsVec, TransposeAbsVec
8
7
using SparseArrays
9
8
10
9
if VERSION < v " 1.2-"
@@ -20,8 +19,7 @@ const MapOrMatrix{T} = Union{LinearMap{T},AbstractMatrix{T}}
20
19
const RealOrComplex = Union{Real,Complex}
21
20
22
21
# valid types for left vector multiplication:
23
- const VecIn = Union{AdjointAbsVec, TransposeAbsVec}
24
- const VecOut = Union{AbstractVector, AdjointAbsVec, TransposeAbsVec}
22
+ const VecOut = AbstractVecOrMat # todo - temporary
25
23
26
24
Base. eltype (:: LinearMap{T} ) where {T} = T
27
25
@@ -52,24 +50,20 @@ Base.ndims(::LinearMap) = 2
52
50
Base. size (A:: LinearMap , n) = (n== 1 || n== 2 ? size (A)[n] : error (" LinearMap objects have only 2 dimensions" ))
53
51
Base. length (A:: LinearMap ) = size (A)[1 ] * size (A)[2 ]
54
52
55
- # check dimension consistency for y = A*x and Y = A*X
56
- function check_dim_mul (y :: VecOut , A:: LinearMap , x :: AbstractVector )
53
+ # check dimension consistency for right multiply: y = A*x and Y = A*X
54
+ function check_dim_mul (Y :: AbstractVecOrMat , A:: LinearMap , X :: AbstractVecOrMat )
57
55
# @info "checked vector dimensions" # uncomment for testing
58
56
m, n = size (A)
59
- (m == length (y) && n == length (x)) || throw (DimensionMismatch (" mul!" ))
60
- return nothing
61
- end
62
- function check_dim_mul (Y:: AbstractMatrix , A:: LinearMap , X:: AbstractMatrix )
63
- # @info "checked matrix dimensions" # uncomment for testing
64
- m, n = size (A)
65
- (m == size (Y, 1 ) && n == size (X, 1 ) && size (Y, 2 ) == size (X, 2 )) || throw (DimensionMismatch (" mul!" ))
57
+ (m == size (Y, 1 ) && n == size (X, 1 ) && size (Y, 2 ) == size (X, 2 )) ||
58
+ throw (DimensionMismatch (" mul! $(size (X)) $(size (Y)) $(size (A)) " ))
66
59
return nothing
67
60
end
68
61
69
- # check dimension consistency for left multiplication x = y'*A
70
- function check_dim_mul (x :: V , y :: V , A:: LinearMap ) where {V <: VecIn }
62
+ # check dimension consistency for left multiply: X = Y*A (e.g., Y=y')
63
+ function check_dim_mul (X :: AbstractVecOrMat , Y :: AbstractVecOrMat , A:: LinearMap )
71
64
m, n = size (A)
72
- ((1 ,m) == size (y) && (1 ,n) == size (x)) || throw (DimensionMismatch (" left mul!" ))
65
+ (n == size (X, 2 ) && m == size (Y, 2 ) && size (Y, 1 ) == size (X, 1 )) ||
66
+ throw (DimensionMismatch (" left mul!" ))
73
67
return nothing
74
68
end
75
69
0 commit comments