Skip to content

Commit 2368ba6

Browse files
committed
Add more numeric flags
1 parent c288e39 commit 2368ba6

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

src/utils.jl

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,32 +32,30 @@ Base.convert(::Type{T}, q::AbstractQuantity) where {T<:Real} =
3232
return convert(T, q.value)
3333
end
3434

35-
Base.isfinite(q::AbstractQuantity) = isfinite(ustrip(q))
3635
Base.keys(d::AbstractDimensions) = static_fieldnames(typeof(d))
37-
# TODO: Make this more generic.
38-
Base.iszero(d::AbstractDimensions) = all_dimensions(iszero, d)
39-
Base.iszero(q::AbstractQuantity) = iszero(ustrip(q))
4036
Base.getindex(d::AbstractDimensions, k::Symbol) = getfield(d, k)
4137

4238
# Compatibility with `.*`
4339
Base.length(::Union{AbstractQuantity,AbstractDimensions}) = 1
4440
Base.iterate(qd::Union{AbstractQuantity,AbstractDimensions}) = (qd, nothing)
4541
Base.iterate(::Union{AbstractQuantity,AbstractDimensions}, ::Nothing) = nothing
4642

43+
# Numeric checks
44+
Base.isapprox(l::AbstractQuantity, r::AbstractQuantity; kws...) = isapprox(ustrip(l), ustrip(r); kws...) && dimension(l) == dimension(r)
45+
Base.iszero(d::AbstractDimensions) = all_dimensions(iszero, d)
4746
Base.:(==)(l::AbstractDimensions, r::AbstractDimensions) = all_dimensions(==, l, r)
4847
Base.:(==)(l::AbstractQuantity, r::AbstractQuantity) = ustrip(l) == ustrip(r) && dimension(l) == dimension(r)
4948
Base.:(==)(l, r::AbstractQuantity) = ustrip(l) == ustrip(r) && iszero(dimension(r))
5049
Base.:(==)(l::AbstractQuantity, r) = ustrip(l) == ustrip(r) && iszero(dimension(l))
5150
Base.isless(l::AbstractQuantity, r::AbstractQuantity) = dimension(l) == dimension(r) ? isless(ustrip(l), ustrip(r)) : throw(DimensionError(l, r))
5251
Base.isless(l::AbstractQuantity, r) = iszero(dimension(l)) ? isless(ustrip(l), r) : throw(DimensionError(l, r))
5352
Base.isless(l, r::AbstractQuantity) = iszero(dimension(r)) ? isless(l, ustrip(r)) : throw(DimensionError(l, r))
54-
Base.isapprox(l::AbstractQuantity, r::AbstractQuantity; kws...) = isapprox(ustrip(l), ustrip(r); kws...) && dimension(l) == dimension(r)
55-
Base.length(::AbstractDimensions) = 1
56-
Base.length(::AbstractQuantity) = 1
57-
Base.iterate(d::AbstractDimensions) = (d, nothing)
58-
Base.iterate(::AbstractDimensions, ::Nothing) = nothing
59-
Base.iterate(q::AbstractQuantity) = (q, nothing)
60-
Base.iterate(::AbstractQuantity, ::Nothing) = nothing
53+
54+
# Simple operations which return a number by itself:
55+
for f in (:iszero, :isfinite, :isinf, :isnan, :isreal, :sign, :signbit, :eps)
56+
@eval Base.$f(q::AbstractQuantity) = $f(ustrip(q))
57+
end
58+
Base.eps(::Type{Q}) where {T,Q<:AbstractQuantity{T}} = eps(T)
6159

6260
# Multiplicative identities:
6361
Base.one(::Type{Q}) where {T,R,Q<:AbstractQuantity{T,R}} = new_quantity(Q, one(T), R)

0 commit comments

Comments
 (0)