@@ -38,6 +38,10 @@ function Base.copyto!(dest::KroneckerArray, src::KroneckerArray)
38
38
return dest
39
39
end
40
40
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
+
41
45
# Like `similar` but allows some custom behavior, such as for `FillArrays.Eye`.
42
46
function _similar (a:: AbstractArray , elt:: Type , axs:: Tuple{Vararg{AbstractUnitRange}} )
43
47
return similar (a, elt, axs)
@@ -189,7 +193,14 @@ Base.getindex(a::KroneckerArray{<:Any,0}) = arg1(a)[] * arg2(a)[]
189
193
190
194
# Allow customizing for `FillArrays.Eye`.
191
195
_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}
193
204
return _view (arg1 (a), arg1 .(I)... ) ⊗ _view (arg2 (a), arg2 .(I)... )
194
205
end
195
206
function 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
272
283
return KroneckerStyle {N} (style_a, style_b)
273
284
end
274
285
function 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))
279
288
a = similar (bc_a, elt)
280
289
b = similar (bc_b, elt)
281
290
return a ⊗ b
0 commit comments