Skip to content

Commit f871498

Browse files
authored
Merge pull request #46 from SymbolicML/ext-measurements
Add extension for Measurements.jl
2 parents 57b1445 + bcfaf34 commit f871498

File tree

5 files changed

+54
-1
lines changed

5 files changed

+54
-1
lines changed

Project.toml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,20 @@ Tricks = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
1212

1313
[weakdeps]
1414
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
15+
Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7"
1516
ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81"
1617
ScientificTypesBase = "30f210dd-8aff-4c5f-94ba-8e64358c1161"
1718
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
1819

1920
[extensions]
2021
DynamicQuantitiesLinearAlgebraExt = "LinearAlgebra"
22+
DynamicQuantitiesMeasurementsExt = "Measurements"
2123
DynamicQuantitiesScientificTypesExt = ["ScientificTypes", "ScientificTypesBase"]
2224
DynamicQuantitiesUnitfulExt = "Unitful"
2325

2426
[compat]
2527
Compat = "^3.42, 4"
28+
Measurements = "2"
2629
PackageExtensionCompat = "1"
2730
ScientificTypes = "3"
2831
ScientificTypesBase = "3"
@@ -33,6 +36,7 @@ julia = "1.6"
3336
[extras]
3437
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
3538
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
39+
Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7"
3640
Ratios = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439"
3741
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
3842
SaferIntegers = "88634af6-177f-5301-88b8-7819386cfa38"
@@ -43,4 +47,16 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
4347
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
4448

4549
[targets]
46-
test = ["Test", "Aqua", "LinearAlgebra", "Ratios", "SaferIntegers", "SafeTestsets", "ScientificTypes", "ScientificTypesBase", "StaticArrays", "Unitful"]
50+
test = [
51+
"Aqua",
52+
"LinearAlgebra",
53+
"Measurements",
54+
"Ratios",
55+
"SaferIntegers",
56+
"SafeTestsets",
57+
"ScientificTypes",
58+
"ScientificTypesBase",
59+
"StaticArrays",
60+
"Test",
61+
"Unitful"
62+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module DynamicQuantitiesMeasurementsExt
2+
3+
using DynamicQuantities: AbstractQuantity, new_quantity, dimension, ustrip, DimensionError
4+
using Measurements: Measurements, measurement, value, uncertainty
5+
6+
function Measurements.measurement(a::Q, b::Q) where {Q<:AbstractQuantity}
7+
dimension(a) == dimension(b) || throw(DimensionError(a, b))
8+
raw_measurement = measurement(ustrip(a), ustrip(b))
9+
return new_quantity(Q, raw_measurement, dimension(a))
10+
end
11+
function Measurements.measurement(a::AbstractQuantity, b::AbstractQuantity)
12+
return measurement(promote(a, b)...)
13+
end
14+
15+
Measurements.value(q::Q) where {Q<:AbstractQuantity} = new_quantity(Q, value(ustrip(q)), dimension(q))
16+
Measurements.uncertainty(q::Q) where {Q<:AbstractQuantity} = new_quantity(Q, uncertainty(ustrip(q)), dimension(q))
17+
18+
end

src/utils.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ tryrationalize(::Type{R}, x) where {R} = isinteger(x) ? convert(R, round(Int, x)
176176

177177
Base.showerror(io::IO, e::DimensionError) = print(io, "DimensionError: ", e.q1, " and ", e.q2, " have incompatible dimensions")
178178

179+
# TODO: these are redundant with the constructors
179180
Base.convert(::Type{Q}, q::AbstractQuantity) where {Q<:AbstractQuantity} = q
180181
Base.convert(::Type{Q}, q::AbstractQuantity) where {T,Q<:AbstractQuantity{T}} = new_quantity(Q, convert(T, ustrip(q)), dimension(q))
181182
Base.convert(::Type{Q}, q::AbstractQuantity) where {T,D,Q<:AbstractQuantity{T,D}} = new_quantity(Q, convert(T, ustrip(q)), convert(D, dimension(q)))

test/runtests.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ else
1616
@safetestset "ScientificTypes.jl integration tests" begin
1717
include("test_scitypes.jl")
1818
end
19+
@safetestset "Measurements.jl integration tests" begin
20+
include("test_measurements.jl")
21+
end
1922
@safetestset "Unit tests" begin
2023
include("unittests.jl")
2124
end

test/test_measurements.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using DynamicQuantities
2+
using Measurements
3+
using Measurements: value, uncertainty
4+
5+
x = 1.0u"m/s" ± 0.1u"m/s"
6+
7+
@test ustrip(x^2) == ustrip(x)^2
8+
@test value(x) == 1.0u"m/s"
9+
@test uncertainty(x) == 0.1u"m/s"
10+
@test dimension(x)^2 == dimension(x^2)
11+
@test_throws DimensionError 0.5u"m" ± 0.1u"s"
12+
13+
# Mixed types:
14+
y = Quantity{Float16}(0.1u"m/s") ± Quantity{Float32}(0.1u"m/s")
15+
@test typeof(y) <: Quantity{Measurement{Float32}}

0 commit comments

Comments
 (0)