|
13 | 13 | #
|
14 | 14 | # This file defines the methods to represent `Measurement` objects in various places.
|
15 | 15 | #
|
16 |
| -# FIXME: should special-handle non-AbstractFloat T's. |
17 |
| -# |
18 | 16 | ### Code:
|
19 | 17 |
|
20 | 18 | import Printf
|
21 | 19 |
|
22 |
| -function truncated_print(io::IO, m::Measurement, error_digits::Int; |
| 20 | +full_print(io::IO, val, err; atbeg = "", atend = "", pm = "±") = |
| 21 | + print(io, atbeg, val, get(io, :compact, false) ? pm : " $pm ", err, atend) |
| 22 | + |
| 23 | +function truncated_print(io::IO, m::Measurement; |
23 | 24 | atbeg = "", atend = "", pm = "±")
|
24 |
| - val = if iszero(m.err) || !isfinite(m.err) |
25 |
| - m.val |
26 |
| - else |
27 |
| - err_digits = -Base.hidigit(m.err, 10) + error_digits |
28 |
| - digits = if isfinite(m.val) |
29 |
| - max(-Base.hidigit(m.val, 10) + 2, err_digits) |
| 25 | + error_digits::Int = get(io, :error_digits, 2) |
| 26 | + |
| 27 | + val = m.val |
| 28 | + err = m.err |
| 29 | + |
| 30 | + if error_digits < 0 |
| 31 | + error("`error_digits` must be non-negative") |
| 32 | + elseif error_digits > 0 && !SymbolicsBase.issymbollike(val) |
| 33 | + val = if iszero(err) || !isfinite(err) |
| 34 | + val |
30 | 35 | else
|
31 |
| - err_digits |
| 36 | + err_digits = -Base.hidigit(err, 10) + error_digits |
| 37 | + digits = if isfinite(val) |
| 38 | + max(-Base.hidigit(val, 10) + 2, err_digits) |
| 39 | + else |
| 40 | + err_digits |
| 41 | + end |
| 42 | + round(val, digits = digits) |
32 | 43 | end
|
33 |
| - round(m.val, digits = digits) |
34 |
| - end |
35 |
| - print(io, atbeg, val, |
36 |
| - get(io, :compact, false) ? pm : " $pm ", |
37 |
| - round(m.err, sigdigits=error_digits), atend) |
| 44 | + err = round(err, sigdigits=error_digits) |
| 45 | + end # if |
| 46 | + full_print(io, val, err, atbeg = atbeg, atend = atend, pm = pm) |
38 | 47 | end
|
39 | 48 |
|
40 |
| -full_print(io::IO, measure::Measurement) = |
41 |
| - print(io, measure.val, get(io, :compact, false) ? "±" : " ± ", measure.err) |
42 |
| - |
43 | 49 | function Base.show(io::IO, m::Measurement)
|
44 |
| - error_digits = get(io, :error_digits, 2) |
45 |
| - if error_digits > 0 |
46 |
| - truncated_print(io, m, error_digits) |
47 |
| - elseif error_digits == 0 |
48 |
| - full_print(io, m) |
49 |
| - else |
50 |
| - error("`error_digits` must be non-negative") |
51 |
| - end # if |
| 50 | + truncated_print(io, m) |
52 | 51 | end
|
53 | 52 |
|
54 | 53 | function Base.show(io::IO, ::MIME"text/latex", measure::Measurement)
|
55 |
| - error_digits = get(io, :error_digits, 2) |
56 |
| - truncated_print(io, measure, error_digits, atbeg = "\$", atend = "\$", pm = "\\pm") |
| 54 | + truncated_print(io, measure, atbeg = "\$", atend = "\$", pm = "\\pm") |
57 | 55 | end
|
58 | 56 |
|
59 | 57 | for mime in (MIME"text/x-tex", MIME"text/x-latex")
|
60 | 58 | function Base.show(io::IO, ::mime, measure::Measurement)
|
61 |
| - error_digits = get(io, :error_digits, 2) |
62 |
| - truncated_print(io, measure, error_digits, pm = "\\pm") |
| 59 | + truncated_print(io, measure, pm = "\\pm") |
63 | 60 | end
|
64 | 61 | end
|
65 | 62 |
|
66 | 63 | # Representation of complex measurements. Print something that is easy to
|
67 | 64 | # understand and that can be meaningfully copy-pasted into the REPL, at least
|
68 | 65 | # for standard numeric types.
|
| 66 | +# FIXME: does this handle complex symbolic Measurements correctly? |
69 | 67 | for mime in (MIME"text/plain", MIME"text/x-tex", MIME"text/x-latex")
|
70 | 68 | function Base.show(io::IO, mtype::mime, measure::Complex{<:Measurement})
|
71 | 69 | r, i = reim(measure)
|
|
0 commit comments