@@ -21,6 +21,9 @@ __precompile__()
21
21
22
22
module Measurements
23
23
24
+ # We want to special-case symbolic variables, which requires detecting them.
25
+ using SymbolicsBase
26
+
24
27
# Calculus is used to calculate numerical derivatives in "@uncertain" macro.
25
28
using Calculus
26
29
using Statistics
@@ -91,9 +94,16 @@ function __init__()
91
94
end
92
95
93
96
measurement (x:: Measurement ) = x
94
- measurement (val:: T ) where {T<: AbstractFloat } = Measurement (val, zero (T), UInt64 (0 ), empty_der2 (val)) # FIXME
95
- measurement (val:: Real ) = measurement (float (val)) # FIXME
96
- function measurement (val:: T , err:: T ) where {T<: AbstractFloat } # FIXME
97
+ function measurement (val:: T ) where {T<: Real }
98
+ if ! (T<: AbstractFloat ) && ! SymbolicsBase. issymbollike (val)
99
+ return measurement (float (val))
100
+ end
101
+ return Measurement (val, zero (T), UInt64 (0 ), empty_der2 (val))
102
+ end
103
+ function measurement (val:: T , err:: T ) where {T<: Real }
104
+ if ! (T<: AbstractFloat ) && ! SymbolicsBase. issymbollike (val)
105
+ return measurement (promote (float (val), float (err))... )
106
+ end
97
107
newder = empty_der2 (val)
98
108
if iszero (err)
99
109
Measurement {T} (val, err, UInt64 (0 ), newder)
@@ -102,7 +112,7 @@ function measurement(val::T, err::T) where {T<:AbstractFloat} # FIXME
102
112
return Measurement {T} (val, err, tag, Derivatives (newder, (val, err, tag)=> one (T)))
103
113
end
104
114
end
105
- measurement (val:: Real , err:: Real ) = measurement (promote (float ( val), float ( err)) ... ) # FIXME
115
+ measurement (val:: Real , err:: Real ) = measurement (promote (val, err)... )
106
116
measurement (:: Missing , :: Union{Real,Missing} = missing ) = missing
107
117
const ± = measurement
108
118
0 commit comments