@@ -38,6 +38,10 @@ function Base.copyto!(dest::KroneckerArray, src::KroneckerArray)
3838 return dest
3939end
4040
41+ function Base. convert (:: Type{KroneckerArray{T,N,A,B}} , a:: KroneckerArray ) where {T,N,A,B}
42+ return KroneckerArray (convert (A, arg1 (a)), convert (B, arg2 (a)))
43+ end
44+
4145# Like `similar` but allows some custom behavior, such as for `FillArrays.Eye`.
4246function _similar (a:: AbstractArray , elt:: Type , axs:: Tuple{Vararg{AbstractUnitRange}} )
4347 return similar (a, elt, axs)
@@ -189,7 +193,14 @@ Base.getindex(a::KroneckerArray{<:Any,0}) = arg1(a)[] * arg2(a)[]
189193
190194# Allow customizing for `FillArrays.Eye`.
191195_view (a:: AbstractArray , I... ) = view (a, I... )
192- function Base. view (a:: KroneckerArray{<:Any,N} , I:: Vararg{CartesianProduct,N} ) where {N}
196+ arg1 (:: Colon ) = (:)
197+ arg2 (:: Colon ) = (:)
198+ arg1 (:: Base.Slice ) = (:)
199+ arg2 (:: Base.Slice ) = (:)
200+ function Base. view (
201+ a:: KroneckerArray{<:Any,N} ,
202+ I:: Vararg{Union{CartesianProduct,CartesianProductUnitRange,Base.Slice,Colon},N} ,
203+ ) where {N}
193204 return _view (arg1 (a), arg1 .(I)... ) ⊗ _view (arg2 (a), arg2 .(I)... )
194205end
195206function Base. view (a:: KroneckerArray{<:Any,N} , I:: Vararg{CartesianPair,N} ) where {N}
@@ -272,10 +283,8 @@ function Base.BroadcastStyle(style1::KroneckerStyle{N}, style2::KroneckerStyle{N
272283 return KroneckerStyle {N} (style_a, style_b)
273284end
274285function Base. similar (bc:: Broadcasted{<:KroneckerStyle{N,A,B}} , elt:: Type , ax) where {N,A,B}
275- ax_a = arg1 .(ax)
276- ax_b = arg2 .(ax)
277- bc_a = Broadcasted (A, nothing , (), ax_a)
278- bc_b = Broadcasted (B, nothing , (), ax_b)
286+ bc_a = Broadcasted (A, bc. f, arg1 .(bc. args), arg1 .(ax))
287+ bc_b = Broadcasted (B, bc. f, arg2 .(bc. args), arg2 .(ax))
279288 a = similar (bc_a, elt)
280289 b = similar (bc_b, elt)
281290 return a ⊗ b
0 commit comments