@@ -59,25 +59,29 @@ function tr(K::Kron{<:Any, 2})
59
59
end
60
60
61
61
62
- getindex (K:: Kron{T,1,<:Tuple{<:AbstractVector}} , k:: Int ) where T =
63
- first (K. args)[k]
64
-
65
- function getindex (K:: Kron{T,1,<:Tuple{<:AbstractVector,<:AbstractVector}} , k:: Int ) where T
66
- A,B = K. args
62
+ kron_getindex ((A,):: Tuple{AbstractVector} , k:: Integer ) = A[k]
63
+ function kron_getindex ((A,B):: NTuple{2,AbstractVector} , k:: Integer )
67
64
K,κ = divrem (k- 1 , length (B))
68
65
A[K+ 1 ]* B[κ+ 1 ]
69
66
end
70
-
71
- getindex (K:: Kron{T,2,<:Tuple{<:AbstractMatrix}} , k:: Int , j:: Int ) where T =
72
- first (K. args)[k,j]
73
-
74
- function getindex (K:: Kron{T,2,<:Tuple{<:AbstractArray,<:AbstractArray}} , k:: Int , j:: Int ) where T
75
- A,B = K. args
67
+ kron_getindex ((A,):: Tuple{AbstractMatrix} , k:: Integer , j:: Integer ) = A[k,j]
68
+ function kron_getindex ((A,B):: NTuple{2,AbstractArray} , k:: Integer , j:: Integer )
76
69
K,κ = divrem (k- 1 , size (B,1 ))
77
70
J,ξ = divrem (j- 1 , size (B,2 ))
78
71
A[K+ 1 ,J+ 1 ]* B[κ+ 1 ,ξ+ 1 ]
79
72
end
80
73
74
+ kron_getindex (args:: Tuple , k:: Integer , j:: Integer ) = kron_getindex (tuple (Kron (args[1 : 2 ]. .. ), args[3 : end ]. .. ), k, j)
75
+ kron_getindex (args:: Tuple , k:: Integer ) = kron_getindex (tuple (Kron (args[1 : 2 ]. .. ), args[3 : end ]. .. ), k)
76
+
77
+ getindex (K:: Kron{<:Any,1} , k:: Integer ) = kron_getindex (K. args, k)
78
+ getindex (K:: Kron{<:Any,2} , k:: Integer , j:: Integer ) = kron_getindex (K. args, k, j)
79
+ getindex (K:: Applied{DefaultArrayApplyStyle,typeof(kron)} , k:: Integer ) = kron_getindex (K. args, k)
80
+ getindex (K:: Applied{DefaultArrayApplyStyle,typeof(kron)} , k:: Integer , j:: Integer ) = kron_getindex (K. args, k, j)
81
+
82
+
83
+
84
+
81
85
# # Adapted from julia/stdlib/LinearAlgebra/src/dense.jl kron definition
82
86
function _kron2! (R, K)
83
87
size (R) == size (K) || throw (DimensionMismatch (" Matrices have wrong dimensions" ))
0 commit comments