@@ -32,32 +32,30 @@ Base.convert(::Type{T}, q::AbstractQuantity) where {T<:Real} =
32
32
return convert (T, q. value)
33
33
end
34
34
35
- Base. isfinite (q:: AbstractQuantity ) = isfinite (ustrip (q))
36
35
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))
40
36
Base. getindex (d:: AbstractDimensions , k:: Symbol ) = getfield (d, k)
41
37
42
38
# Compatibility with `.*`
43
39
Base. length (:: Union{AbstractQuantity,AbstractDimensions} ) = 1
44
40
Base. iterate (qd:: Union{AbstractQuantity,AbstractDimensions} ) = (qd, nothing )
45
41
Base. iterate (:: Union{AbstractQuantity,AbstractDimensions} , :: Nothing ) = nothing
46
42
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)
47
46
Base.:(== )(l:: AbstractDimensions , r:: AbstractDimensions ) = all_dimensions (== , l, r)
48
47
Base.:(== )(l:: AbstractQuantity , r:: AbstractQuantity ) = ustrip (l) == ustrip (r) && dimension (l) == dimension (r)
49
48
Base.:(== )(l, r:: AbstractQuantity ) = ustrip (l) == ustrip (r) && iszero (dimension (r))
50
49
Base.:(== )(l:: AbstractQuantity , r) = ustrip (l) == ustrip (r) && iszero (dimension (l))
51
50
Base. isless (l:: AbstractQuantity , r:: AbstractQuantity ) = dimension (l) == dimension (r) ? isless (ustrip (l), ustrip (r)) : throw (DimensionError (l, r))
52
51
Base. isless (l:: AbstractQuantity , r) = iszero (dimension (l)) ? isless (ustrip (l), r) : throw (DimensionError (l, r))
53
52
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)
61
59
62
60
# Multiplicative identities:
63
61
Base. one (:: Type{Q} ) where {T,R,Q<: AbstractQuantity{T,R} } = new_quantity (Q, one (T), R)
0 commit comments