@@ -18,21 +18,21 @@ function eachstoredparentindex(a::SubArray)
1818 return all (d -> I[d] ∈ parentindices (a)[d], 1 : ndims (parent (a)))
1919 end
2020end
21- function storedvalues (a:: SubArray )
21+ @interface :: AbstractSparseArrayInterface function storedvalues (a:: SubArray )
2222 # We use `StoredValues` rather than `@view`/`SubArray` so that
2323 # it gets interpreted as a dense array.
2424 return StoredValues (parent (a), collect (eachstoredparentindex (a)))
2525end
26- function isstored (a:: SubArray , I:: Int... )
26+ @interface :: AbstractSparseArrayInterface function isstored (a:: SubArray , I:: Int... )
2727 return isstored (parent (a), Base. reindex (parentindices (a), I)... )
2828end
29- function getstoredindex (a:: SubArray , I:: Int... )
29+ @interface :: AbstractSparseArrayInterface function getstoredindex (a:: SubArray , I:: Int... )
3030 return getstoredindex (parent (a), Base. reindex (parentindices (a), I)... )
3131end
32- function getunstoredindex (a:: SubArray , I:: Int... )
32+ @interface :: AbstractSparseArrayInterface function getunstoredindex (a:: SubArray , I:: Int... )
3333 return getunstoredindex (parent (a), Base. reindex (parentindices (a), I)... )
3434end
35- function eachstoredindex (a:: SubArray )
35+ @interface :: AbstractSparseArrayInterface function eachstoredindex (a:: SubArray )
3636 nonscalardims = filter (tuple_oneto (ndims (parent (a)))) do d
3737 return ! (parentindices (a)[d] isa Real)
3838 end
4848perm (:: PermutedDimsArray{<:Any,<:Any,p} ) where {p} = p
4949iperm (:: PermutedDimsArray{<:Any,<:Any,<:Any,ip} ) where {ip} = ip
5050
51- storedvalues (a:: PermutedDimsArray ) = storedvalues (parent (a))
52- function isstored (a:: PermutedDimsArray , I:: Int... )
51+ @interface :: AbstractSparseArrayInterface storedvalues (a:: PermutedDimsArray ) =
52+ storedvalues (parent (a))
53+ @interface :: AbstractSparseArrayInterface function isstored (a:: PermutedDimsArray , I:: Int... )
5354 return isstored (parent (a), genperm (I, iperm (a))... )
5455end
55- function getstoredindex (a:: PermutedDimsArray , I:: Int... )
56+ @interface :: AbstractSparseArrayInterface function getstoredindex (
57+ a:: PermutedDimsArray , I:: Int...
58+ )
5659 return getstoredindex (parent (a), genperm (I, iperm (a))... )
5760end
58- function getunstoredindex (a:: PermutedDimsArray , I:: Int... )
61+ @interface :: AbstractSparseArrayInterface function getunstoredindex (
62+ a:: PermutedDimsArray , I:: Int...
63+ )
5964 return getunstoredindex (parent (a), genperm (I, iperm (a))... )
6065end
61- function setstoredindex! (a:: PermutedDimsArray , value, I:: Int... )
66+ @interface :: AbstractSparseArrayInterface function setstoredindex! (
67+ a:: PermutedDimsArray , value, I:: Int...
68+ )
6269 # TODO : Should this be `iperm(a)`?
6370 setstoredindex! (parent (a), value, genperm (I, perm (a))... )
6471 return a
6572end
66- function setunstoredindex! (a:: PermutedDimsArray , value, I:: Int... )
73+ @interface :: AbstractSparseArrayInterface function setunstoredindex! (
74+ a:: PermutedDimsArray , value, I:: Int...
75+ )
6776 # TODO : Should this be `iperm(a)`?
6877 setunstoredindex! (parent (a), value, genperm (I, perm (a))... )
6978 return a
7079end
71- function eachstoredindex (a:: PermutedDimsArray )
80+ @interface :: AbstractSparseArrayInterface function eachstoredindex (a:: PermutedDimsArray )
7281 # TODO : Make lazy with `Iterators.map`.
7382 return map (collect (eachstoredindex (parent (a)))) do I
7483 return CartesianIndex (genperm (I, perm (a)))
7887for (type, func) in ((:Adjoint , :adjoint ), (:Transpose , :transpose ))
7988 @eval begin
8089 using LinearAlgebra: $ type
81- storedvalues (a:: $type ) = storedvalues (parent (a))
82- function isstored (a:: $type , i:: Int , j:: Int )
90+ @interface :: AbstractSparseArrayInterface storedvalues (a:: $type ) =
91+ storedvalues (parent (a))
92+ @interface :: AbstractSparseArrayInterface function isstored (a:: $type , i:: Int , j:: Int )
8393 return isstored (parent (a), j, i)
8494 end
85- function eachstoredindex (a:: $type )
95+ @interface :: AbstractSparseArrayInterface function eachstoredindex (a:: $type )
8696 # TODO : Make lazy with `Iterators.map`.
8797 return map (cartesianindex_reverse, collect (eachstoredindex (parent (a))))
8898 end
89- function getstoredindex (a:: $type , i:: Int , j:: Int )
99+ @interface :: AbstractSparseArrayInterface function getstoredindex (
100+ a:: $type , i:: Int , j:: Int
101+ )
90102 return $ func (getstoredindex (parent (a), j, i))
91103 end
92- function getunstoredindex (a:: $type , i:: Int , j:: Int )
104+ @interface :: AbstractSparseArrayInterface function getunstoredindex (
105+ a:: $type , i:: Int , j:: Int
106+ )
93107 return $ func (getunstoredindex (parent (a), j, i))
94108 end
95- function setstoredindex! (a:: $type , value, i:: Int , j:: Int )
109+ @interface :: AbstractSparseArrayInterface function setstoredindex! (
110+ a:: $type , value, i:: Int , j:: Int
111+ )
96112 setstoredindex! (parent (a), $ func (value), j, i)
97113 return a
98114 end
99- function setunstoredindex! (a:: $type , value, i:: Int , j:: Int )
115+ @interface :: AbstractSparseArrayInterface function setunstoredindex! (
116+ a:: $type , value, i:: Int , j:: Int
117+ )
100118 setunstoredindex! (parent (a), $ func (value), j, i)
101119 return a
102120 end
0 commit comments