Skip to content

Commit bffe323

Browse files
authored
Upgrade to FunctionImplementations.jl v0.4 (#89)
1 parent d88ee46 commit bffe323

9 files changed

Lines changed: 59 additions & 55 deletions

File tree

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "SparseArraysBase"
22
uuid = "0d5efcca-f356-4864-8770-e1ed8d78f208"
33
authors = ["ITensor developers <support@itensor.org> and contributors"]
4-
version = "0.8.4"
4+
version = "0.9.0"
55

66
[deps]
77
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
@@ -31,7 +31,7 @@ Adapt = "4.3"
3131
ArrayLayouts = "1.11"
3232
Dictionaries = "0.4.3"
3333
FillArrays = "1.13"
34-
FunctionImplementations = "0.3.1"
34+
FunctionImplementations = "0.4"
3535
GPUArraysCore = "0.2"
3636
LinearAlgebra = "1.10"
3737
MapBroadcast = "0.1.5"

docs/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ SparseArraysBase = {path = ".."}
1111
Dictionaries = "0.4.4"
1212
Documenter = "1.8.1"
1313
Literate = "2.20.1"
14-
SparseArraysBase = "0.8"
14+
SparseArraysBase = "0.9"

examples/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ SparseArraysBase = {path = ".."}
88

99
[compat]
1010
Dictionaries = "0.4.4"
11-
SparseArraysBase = "0.8"
11+
SparseArraysBase = "0.9"
1212
Test = "<0.0.1, 1"

src/abstractsparsearray.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ const AnyAbstractSparseVecOrMat{T} = Union{
2424
Base.convert(T::Type{<:AbstractSparseArray}, a::AbstractArray) = a isa T ? a : T(a)
2525

2626
using FunctionImplementations: FunctionImplementations
27-
FunctionImplementations.Style(::Type{<:AnyAbstractSparseArray}) = SparseArrayStyle()
27+
FunctionImplementations.ImplementationStyle(::Type{<:AnyAbstractSparseArray}) =
28+
SparseArrayImplementationStyle()
2829

2930
function Base.copy(a::AnyAbstractSparseArray)
3031
return copyto!(similar(a), a)
@@ -102,7 +103,7 @@ function LinearAlgebra.mul!(
102103
end
103104

104105
function Base.Broadcast.BroadcastStyle(type::Type{<:AnyAbstractSparseArray})
105-
return Broadcast.SparseArrayStyle{ndims(type)}()
106+
return SparseArrayStyle{ndims(type)}()
106107
end
107108

108109
using ArrayLayouts: ArrayLayouts

src/abstractsparsearraystyle.jl

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,30 @@ function dense(a::AbstractArray)
5151
return @allowscalar convert(densetype(a), a)
5252
end
5353

54-
# Minimal interface for `SparseArrayStyle`.
54+
# Minimal interface for `SparseArrayImplementationStyle`.
5555
# Fallbacks for dense/non-sparse arrays.
5656

57-
using FunctionImplementations: AbstractArrayStyle
58-
abstract type AbstractSparseArrayStyle <: AbstractArrayStyle end
57+
using FunctionImplementations: AbstractArrayImplementationStyle
58+
abstract type AbstractSparseArrayImplementationStyle <: AbstractArrayImplementationStyle end
5959

60-
function FunctionImplementations.Style(
61-
style1::AbstractSparseArrayStyle, style2::AbstractSparseArrayStyle
60+
function FunctionImplementations.ImplementationStyle(
61+
style1::AbstractSparseArrayImplementationStyle,
62+
style2::AbstractSparseArrayImplementationStyle,
6263
)
63-
return SparseArrayStyle()
64+
return SparseArrayImplementationStyle()
6465
end
65-
function FunctionImplementations.Style(
66-
style1::AbstractSparseArrayStyle, style2::AbstractArrayStyle
66+
function FunctionImplementations.ImplementationStyle(
67+
style1::AbstractSparseArrayImplementationStyle,
68+
style2::AbstractArrayImplementationStyle,
6769
)
6870
return style1
6971
end
70-
# Fix ambiguity error with `Style(::AbstractSparseArrayStyle, ::AbstractArrayStyle)`.
71-
using FunctionImplementations: DefaultArrayStyle
72-
function FunctionImplementations.Style(
73-
style1::AbstractSparseArrayStyle, style2::DefaultArrayStyle
72+
# Fix ambiguity error with
73+
# `ImplementationStyle(::AbstractSparseArrayImplementationStyle, ::AbstractArrayImplementationStyle)`.
74+
using FunctionImplementations: DefaultArrayImplementationStyle
75+
function FunctionImplementations.ImplementationStyle(
76+
style1::AbstractSparseArrayImplementationStyle,
77+
style2::DefaultArrayImplementationStyle,
7478
)
7579
return style1
7680
end

src/sparsearraystyle.jl

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
using FunctionImplementations: FunctionImplementations
22

3-
struct SparseArrayStyle <: AbstractSparseArrayStyle end
3+
struct SparseArrayImplementationStyle <: AbstractSparseArrayImplementationStyle end
44

55
# Convenient shorthand to refer to the sparse style.
66
# Can turn a function into a sparse function with the syntax `sparse_style(f)`,
77
# i.e. `sparse_style(map)(x -> 2x, randn(2, 2))` while use the sparse
88
# version of `map`.
9-
const sparse_style = SparseArrayStyle()
9+
const sparse_style = SparseArrayImplementationStyle()
1010

1111
const fill!_sparse = sparse_style(fill!)
1212
function fill!_sparse(a::AbstractArray, value)
@@ -78,27 +78,23 @@ function mapreduce_sparse(
7878
return output
7979
end
8080

81-
# Namespace for Broadcast styles to avoid clashing with FunctionImplementations
82-
# styles.
83-
module Broadcast
84-
abstract type AbstractSparseArrayStyle{N} <: Base.Broadcast.AbstractArrayStyle{N} end
85-
struct SparseArrayStyle{N} <: AbstractSparseArrayStyle{N} end
86-
SparseArrayStyle{M}(::Val{N}) where {M, N} = SparseArrayStyle{N}()
87-
end
81+
abstract type AbstractSparseArrayStyle{N} <: Base.Broadcast.AbstractArrayStyle{N} end
82+
struct SparseArrayStyle{N} <: AbstractSparseArrayStyle{N} end
83+
SparseArrayStyle{M}(::Val{N}) where {M, N} = SparseArrayStyle{N}()
8884

8985
using MapBroadcast: Mapped
9086
# TODO: Look into `SparseArrays.capturescalars`:
9187
# https://github.com/JuliaSparse/SparseArrays.jl/blob/1beb0e4a4618b0399907b0000c43d9f66d34accc/src/higherorderfns.jl#L1092-L1102
9288
function Base.copyto!(
93-
a_dest::AbstractArray, bc::Base.Broadcast.Broadcasted{<:Broadcast.SparseArrayStyle}
89+
a_dest::AbstractArray, bc::Base.Broadcast.Broadcasted{<:SparseArrayStyle}
9490
)
9591
m = Mapped(bc)
9692
map!(m.f, a_dest, m.args...)
9793
return a_dest
9894
end
9995

10096
function Base.similar(
101-
bc::Base.Broadcast.Broadcasted{<:Broadcast.SparseArrayStyle}, elt::Type, ax
97+
bc::Base.Broadcast.Broadcasted{<:SparseArrayStyle}, elt::Type, ax
10298
)
10399
return similar(SparseArrayDOK{elt}, ax)
104100
end

src/wrappers.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,9 @@ for type in (:Adjoint, :PermutedDimsArray, :ReshapedArray, :SubArray, :Transpose
190190
end
191191
end
192192

193-
using FunctionImplementations: Style
193+
using FunctionImplementations: ImplementationStyle
194194
using LinearAlgebra: LinearAlgebra, Diagonal
195-
const diag_style = Style(Diagonal)
195+
const diag_style = ImplementationStyle(Diagonal)
196196
const storedvalues_diag = diag_style(storedvalues)
197197
storedvalues_diag(D::AbstractMatrix) = LinearAlgebra.diag(D)
198198

test/Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ Aqua = "0.8.11"
2626
ArrayLayouts = "1.11.1"
2727
Dictionaries = "0.4.4"
2828
FillArrays = "1.13.0"
29-
FunctionImplementations = "0.3"
29+
FunctionImplementations = "0.4"
3030
JLArrays = "0.2.0, 0.3"
3131
LinearAlgebra = "<0.0.1, 1"
3232
NamedDimsArrays = "0.13"
3333
Random = "<0.0.1, 1"
3434
SafeTestsets = "0.1.0"
3535
SparseArrays = "1.10"
36-
SparseArraysBase = "0.8"
36+
SparseArraysBase = "0.9"
3737
StableRNGs = "1.0.2"
3838
Suppressor = "0.2.8"
3939
TensorAlgebra = "0.6"

test/test_sparse_style.jl

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,37 @@
1-
using FunctionImplementations: DefaultArrayStyle, Style, style
2-
using SparseArraysBase: AbstractSparseArrayStyle, SparseArrayStyle, sparse_style,
3-
sparsezeros
1+
using FunctionImplementations: DefaultArrayImplementationStyle, ImplementationStyle, style
2+
using SparseArraysBase: AbstractSparseArrayImplementationStyle,
3+
SparseArrayImplementationStyle, sparse_style, sparsezeros
44
using Test: @test, @testset
55

6-
module TestSparseStyleUtils
7-
using SparseArraysBase: AbstractSparseArray, AbstractSparseArrayStyle
6+
module TestSparseImplementationStyleUtils
7+
using SparseArraysBase: AbstractSparseArray, AbstractSparseArrayImplementationStyle
88
using FunctionImplementations: FunctionImplementations
9-
struct MySparseArrayStyle <: AbstractSparseArrayStyle end
9+
struct MySparseArrayImplementationStyle <: AbstractSparseArrayImplementationStyle end
1010
struct MySparseArray{T, N} <: AbstractSparseArray{T, N}
1111
size::NTuple{N, Int}
1212
end
13-
FunctionImplementations.Style(::Type{<:MySparseArray}) = MySparseArrayStyle()
13+
FunctionImplementations.ImplementationStyle(::Type{<:MySparseArray}) =
14+
MySparseArrayImplementationStyle()
1415
end
1516

1617
@testset "Combine Sparse Styles" begin
17-
@test sparse_style SparseArrayStyle()
18-
@test Style(SparseArrayStyle(), SparseArrayStyle()) SparseArrayStyle()
19-
@test Style(TestSparseStyleUtils.MySparseArrayStyle(), SparseArrayStyle())
20-
SparseArrayStyle()
21-
@test Style(SparseArrayStyle(), TestSparseStyleUtils.MySparseArrayStyle())
22-
SparseArrayStyle()
23-
@test style(TestSparseStyleUtils.MySparseArray{Float64, 2}((2, 2)))
24-
TestSparseStyleUtils.MySparseArrayStyle()
25-
@test style(sparsezeros(2, 2), TestSparseStyleUtils.MySparseArray{Float64, 2}((2, 2)))
26-
SparseArrayStyle()
27-
18+
@test sparse_style SparseArrayImplementationStyle()
19+
@test ImplementationStyle(SparseArrayImplementationStyle(), SparseArrayImplementationStyle()) SparseArrayImplementationStyle()
20+
@test ImplementationStyle(TestSparseImplementationStyleUtils.MySparseArrayImplementationStyle(), SparseArrayImplementationStyle())
21+
SparseArrayImplementationStyle()
22+
@test ImplementationStyle(SparseArrayImplementationStyle(), TestSparseImplementationStyleUtils.MySparseArrayImplementationStyle())
23+
SparseArrayImplementationStyle()
24+
@test style(TestSparseImplementationStyleUtils.MySparseArray{Float64, 2}((2, 2)))
25+
TestSparseImplementationStyleUtils.MySparseArrayImplementationStyle()
26+
@test style(sparsezeros(2, 2), TestSparseImplementationStyleUtils.MySparseArray{Float64, 2}((2, 2)))
27+
SparseArrayImplementationStyle()
2828
# Regression tests for ambiguity caused by combining AbstractSparseArrayStyle with
2929
# DefaultArrayStyle.
30-
@test Style(TestSparseStyleUtils.MySparseArrayStyle(), DefaultArrayStyle())
31-
TestSparseStyleUtils.MySparseArrayStyle()
32-
@test style(TestSparseStyleUtils.MySparseArray{Float64, 2}((2, 2)), randn(2, 2))
33-
TestSparseStyleUtils.MySparseArrayStyle()
30+
@test ImplementationStyle(
31+
TestSparseImplementationStyleUtils.MySparseArrayImplementationStyle(),
32+
DefaultArrayImplementationStyle(),
33+
)
34+
TestSparseImplementationStyleUtils.MySparseArrayImplementationStyle()
35+
@test style(TestSparseImplementationStyleUtils.MySparseArray{Float64, 2}((2, 2)), randn(2, 2))
36+
TestSparseImplementationStyleUtils.MySparseArrayImplementationStyle()
3437
end

0 commit comments

Comments
 (0)