@@ -38,7 +38,8 @@ function KroneckerArray(a::AbstractArray, b::AbstractArray)
38
38
ArgumentError (" Kronecker product requires arrays of the same number of dimensions." )
39
39
)
40
40
end
41
- return KroneckerArray (Base. promote_eltype (a, b)... )
41
+ elt = promote_type (eltype (a), eltype (b))
42
+ return KroneckerArray (convert (AbstractArray{elt}, a), convert (AbstractArray{elt}, b))
42
43
end
43
44
const KroneckerMatrix{T,A<: AbstractMatrix{T} ,B<: AbstractMatrix{T} } = KroneckerArray{T,2 ,A,B}
44
45
const KroneckerVector{T,A<: AbstractVector{T} ,B<: AbstractVector{T} } = KroneckerArray{T,1 ,A,B}
122
123
function Base.:(== )(a:: KroneckerArray , b:: KroneckerArray )
123
124
return a. a == b. a && a. b == b. b
124
125
end
126
+ function Base. isapprox (a:: KroneckerArray , b:: KroneckerArray ; kwargs... )
127
+ return isapprox (a. a, b. a; kwargs... ) && isapprox (a. b, b. b; kwargs... )
128
+ end
125
129
function Base. iszero (a:: KroneckerArray )
126
130
return iszero (a. a) || iszero (a. b)
127
131
end
@@ -162,10 +166,8 @@ function diagonal(a::KroneckerArray)
162
166
return Diagonal (a. a) ⊗ Diagonal (a. b)
163
167
end
164
168
165
- # TODO : Overload `similar` instead?
166
- function LinearAlgebra. matprod_dest (a:: KroneckerArray , b:: KroneckerArray , elt)
167
- return LinearAlgebra. matprod_dest (a. a, b. a, elt) ⊗
168
- LinearAlgebra. matprod_dest (a. b, b. b, elt)
169
+ function Base.:* (a:: KroneckerArray , b:: KroneckerArray )
170
+ return (a. a * b. a) ⊗ (a. b * b. b)
169
171
end
170
172
function LinearAlgebra. mul! (c:: KroneckerArray , a:: KroneckerArray , b:: KroneckerArray )
171
173
mul! (c. a, a. a, b. a)
0 commit comments