Skip to content

Commit c95b95b

Browse files
authored
Define similartype for BitArray (#36)
1 parent 66c238d commit c95b95b

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "TypeParameterAccessors"
22
uuid = "7e5a90cf-f82e-492e-a09b-e3e26432c138"
33
authors = ["ITensor developers <[email protected]> and contributors"]
4-
version = "0.3.3"
4+
version = "0.3.4"
55

66
[deps]
77
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/base/similartype.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ end
2828
return set_eltype(arraytype, eltype)
2929
end
3030

31+
function similartype(arraytype::Type{<:BitArray}, elt::Type)
32+
if is_parameter_specified(arraytype, ndims)
33+
return Array{elt,ndims(arraytype)}
34+
end
35+
return Array{elt}
36+
end
37+
3138
@traitfn function similartype(
3239
arraytype::Type{ArrayT}, dims::Tuple
3340
) where {ArrayT; !IsWrappedArray{ArrayT}}

test/test_similartype.jl

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
using Test: @test, @test_broken, @testset
21
using LinearAlgebra: Adjoint, Diagonal
2+
using Test: @test, @test_broken, @testset
3+
using TestExtras: @constinferred
34
using TypeParameterAccessors: NDims, similartype
45

56
@testset "TypeParameterAccessors similartype" begin
@@ -10,10 +11,14 @@ using TypeParameterAccessors: NDims, similartype
1011
@test similartype(Array, NDims(2)) == Matrix
1112
@test similartype(Array, Float64, (2, 2)) == Matrix{Float64}
1213
@test similartype(Array, Float64, NDims(2)) == Matrix{Float64}
14+
15+
# Adjoint
1316
@test similartype(Adjoint{Float32,Matrix{Float32}}, Float64, (2, 2, 2)) ==
1417
Array{Float64,3}
1518
@test similartype(Adjoint{Float32,Matrix{Float32}}, Float64, NDims(3)) == Array{Float64,3}
1619
@test similartype(Adjoint{Float32,Matrix{Float32}}, Float64) == Matrix{Float64}
20+
21+
# Diagonal
1722
@test similartype(Diagonal{Float32,Vector{Float32}}) == Matrix{Float32}
1823
@test similartype(Diagonal{Float32,Vector{Float32}}, Float64) == Matrix{Float64}
1924
@test similartype(Diagonal{Float32,Vector{Float32}}, (2, 2, 2)) == Array{Float32,3}
@@ -22,4 +27,18 @@ using TypeParameterAccessors: NDims, similartype
2227
Array{Float64,3}
2328
@test similartype(Diagonal{Float32,Vector{Float32}}, Float64, NDims(3)) ==
2429
Array{Float64,3}
30+
31+
# BitArray
32+
@test @constinferred(similartype(BitArray)) == BitArray
33+
@test @constinferred(similartype(BitVector)) == BitVector
34+
@test @constinferred(similartype(BitArray, (2, 2, 2))) == BitArray{3}
35+
@test @constinferred(similartype(BitVector, (2, 2, 2))) == BitArray{3}
36+
@test @constinferred(similartype(BitArray, NDims(3))) == BitArray{3}
37+
@test @constinferred(similartype(BitVector, NDims(3))) == BitArray{3}
38+
@test @constinferred(similartype(BitArray, Float32)) == Array{Float32}
39+
@test @constinferred(similartype(BitVector, Float32)) == Vector{Float32}
40+
@test @constinferred(similartype(BitArray, Float32, (2, 2, 2))) == Array{Float32,3}
41+
@test @constinferred(similartype(BitVector, Float32, (2, 2, 2))) == Array{Float32,3}
42+
@test @constinferred(similartype(BitArray, Float32, NDims(3))) == Array{Float32,3}
43+
@test @constinferred(similartype(BitVector, Float32, NDims(3))) == Array{Float32,3}
2544
end

0 commit comments

Comments
 (0)