@@ -163,7 +163,10 @@ for type in (:Adjoint, :PermutedDimsArray, :ReshapedArray, :SubArray, :Transpose
163163end
164164
165165using LinearAlgebra: LinearAlgebra, Diagonal
166- @interface :: AbstractArrayInterface storedvalues (D:: Diagonal ) = LinearAlgebra. diag (D)
166+
167+ DerivableInterfaces. interface (:: Diagonal ) = SparseArrayInterface {2} ()
168+
169+ @interface :: AbstractSparseArrayInterface storedvalues (D:: Diagonal ) = LinearAlgebra. diag (D)
167170
168171# compat with LTS:
169172@static if VERSION ≥ v " 1.11"
@@ -173,18 +176,33 @@ else
173176 return view (CartesianIndices (x), LinearAlgebra. diagind (x))
174177 end
175178end
176- @interface :: AbstractArrayInterface eachstoredindex (D:: Diagonal ) =
179+ @interface :: AbstractSparseArrayInterface eachstoredindex (D:: Diagonal ) =
177180 _diagind (D, IndexCartesian ())
178181
179- @interface :: AbstractArrayInterface isstored (D:: Diagonal , i:: Int , j:: Int ) =
180- i == j && Base. checkbounds (Bool, D, i, j)
181- @interface :: AbstractArrayInterface function getstoredindex (D:: Diagonal , i:: Int , j:: Int )
182- return D. diag[i]
183- end
184- @interface :: AbstractArrayInterface function getunstoredindex (D:: Diagonal , i:: Int , j:: Int )
185- return zero (eltype (D))
186- end
187- @interface :: AbstractArrayInterface function setstoredindex! (D:: Diagonal , v, i:: Int , j:: Int )
188- D. diag[i] = v
182+ @interface :: AbstractSparseArrayInterface function isstored (D:: Diagonal , i:: Int , j:: Int )
183+ @inline
184+ @boundscheck checkbounds (D, i, j)
185+ return i == j
186+ end
187+ @interface :: AbstractSparseArrayInterface function getstoredindex (
188+ D:: Diagonal , i:: Int , j:: Int
189+ )
190+ @inline
191+ @boundscheck checkbounds (D, i, j)
192+ return @inbounds D. diag[i]
193+ end
194+ # @interface ::AbstractSparseArrayInterface function getunstoredindex(
195+ # D::Diagonal, i::Int, j::Int
196+ # )
197+ # @inline
198+ # @boundscheck checkbounds(D, i, j)
199+ # return zero(eltype(D))
200+ # end
201+ @interface :: AbstractSparseArrayInterface function setstoredindex! (
202+ D:: Diagonal , v, i:: Int , j:: Int
203+ )
204+ @inline
205+ @boundscheck checkbounds (D, i, j)
206+ @inbounds D. diag[i] = v
189207 return D
190208end
0 commit comments