diff --git a/ext/MeasurementsSymbolicsExt.jl b/ext/MeasurementsSymbolicsExt.jl index 575ae0c0..690a4e2d 100644 --- a/ext/MeasurementsSymbolicsExt.jl +++ b/ext/MeasurementsSymbolicsExt.jl @@ -30,4 +30,6 @@ Measurements._is_symbolic(::Symbolics.Num) = true Measurements.measurement(val::Symbolics.Num) = Measurements._measurement(val) +Measurements.measurement(val::Symbolics.Num, err::Symbolics.Num) = Measurements._measurement(val, err) + end diff --git a/src/Measurements.jl b/src/Measurements.jl index 66953477..0a047d79 100644 --- a/src/Measurements.jl +++ b/src/Measurements.jl @@ -95,10 +95,7 @@ end measurement(val::AbstractFloat) = _measurement(val) measurement(val::Real) = measurement(float(val)) -function measurement(val::T, err::T) where {T<:Real} - if !(T<:AbstractFloat) && !_is_symbolic(val) - return measurement(promote(float(val), float(err))...) - end +function _measurement(val::T, err::T) where {T<:Real} newder = empty_der2(val) if iszero(err) Measurement{T}(val, err, UInt64(0), newder) @@ -107,8 +104,12 @@ function measurement(val::T, err::T) where {T<:Real} return Measurement{T}(val, err, tag, Derivatives(newder, (val, err, tag)=>one(T))) end end -measurement(val::Real, err::Real) = measurement(promote(val, err)...) +measurement(val::T, err::T) where {T<:AbstractFloat} = _measurement(val, err) +measurement(val::T, err::T) where {T<:Real} = measurement(promote(float(val), float(err))...) +measurement(val::V, err::E) where {V<:Real, E<:Real} = measurement(promote(val, err)...) + measurement(::Missing, ::Union{Real,Missing} = missing) = missing + const ± = measurement """