Skip to content

Commit 473d6ca

Browse files
committed
Sink measurement(val::Symbolics.Num, err::Symbolics.Num) overload into the Symbolics extension
The idea is that we first coerce `val` and `err` into same type, then they are either `AbstractFloat` and are accepted, or are `Num` and are accepted, or they are then re-promoted to `float` and hopefully accepted as `AbstractFloat` (or we get stuck in an infinite recursion...)
1 parent 3537e25 commit 473d6ca

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

ext/MeasurementsSymbolicsExt.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ Measurements._is_symbolic(::Symbolics.Num) = true
3030

3131
Measurements.measurement(val::Symbolics.Num) = Measurements._measurement(val)
3232

33+
Measurements.measurement(val::Symbolics.Num, err::Symbolics.Num) = Measurements._measurement(val, err)
34+
3335
end

src/Measurements.jl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,7 @@ end
9595
measurement(val::AbstractFloat) = _measurement(val)
9696
measurement(val::Real) = measurement(float(val))
9797

98-
function measurement(val::T, err::T) where {T<:Real}
99-
if !(T<:AbstractFloat) && !_is_symbolic(val)
100-
return measurement(promote(float(val), float(err))...)
101-
end
98+
function _measurement(val::T, err::T) where {T<:Real}
10299
newder = empty_der2(val)
103100
if iszero(err)
104101
Measurement{T}(val, err, UInt64(0), newder)
@@ -107,8 +104,12 @@ function measurement(val::T, err::T) where {T<:Real}
107104
return Measurement{T}(val, err, tag, Derivatives(newder, (val, err, tag)=>one(T)))
108105
end
109106
end
110-
measurement(val::Real, err::Real) = measurement(promote(val, err)...)
107+
measurement(val::T, err::T) where {T<:AbstractFloat} = _measurement(val, err)
108+
measurement(val::T, err::T) where {T<:Real} = measurement(promote(float(val), float(err))...)
109+
measurement(val::V, err::E) where {V<:Real, E<:Real} = measurement(promote(val, err)...)
110+
111111
measurement(::Missing, ::Union{Real,Missing} = missing) = missing
112+
112113
const ± = measurement
113114

114115
"""

0 commit comments

Comments
 (0)