Skip to content

Commit 2c64dc4

Browse files
committed
Add similar(::QuantityArray, ::Type{<:UnionAbstractQuantity})
1 parent c4cfef2 commit 2c64dc4

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

src/arrays.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ end
196196

197197
Base.similar(A::QuantityArray) = QuantityArray(similar(ustrip(A)), dimension(A), quantity_type(A))
198198
Base.similar(A::QuantityArray, ::Type{S}) where {S} = QuantityArray(similar(ustrip(A), S), dimension(A), quantity_type(A))
199+
for (type, _, _) in ABSTRACT_QUANTITY_TYPES
200+
@eval Base.similar(A::QuantityArray, ::Type{S}) where {S<:$type} = QuantityArray(similar(ustrip(A), value_type(S)), dimension(A), S)
201+
end
199202

200203
# Unfortunately this mess of `similar` is required to avoid ambiguous methods.
201204
# c.f. base/abstractarray.jl

test/unittests.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,14 @@ end
983983
@test dimension(new_qa) == dimension(qa)
984984
@test isa(ustrip(new_qa), Array{Float32,2})
985985

986+
if Q !== GenericQuantity
987+
new_qa = similar(qa, typeof(GenericQuantity{Float16}(u"km/s")))
988+
@test eltype(new_qa) <: GenericQuantity{Float16}
989+
@test dim_type(new_qa) == dim_type(qa)
990+
@test dimension(new_qa) == dimension(qa)
991+
@test isa(ustrip(new_qa), Array{Float16,2})
992+
end
993+
986994
new_qa = similar(qa, axes(ones(6, 8)))
987995
@test size(new_qa) == (6, 8)
988996
@test eltype(new_qa) <: Q{Float64}

0 commit comments

Comments
 (0)