Skip to content

Commit 1b9b29f

Browse files
dpsanderslbenet
authored andcommitted
Fix @Format and format display (#218)
* Fix significant figure issue with @Format true * Add show for DisplayParameters and return it from setformat * Refactor setformat and update docs * Update docs
1 parent de1cc11 commit 1b9b29f

File tree

3 files changed

+85
-24
lines changed

3 files changed

+85
-24
lines changed

docs/src/construction.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ Note that a valid interval `[a, b]` must have `a ≤ b`.
1515
julia> using IntervalArithmetic
1616
1717
julia> @format full # print out literal interval values in full
18+
Display parameters:
19+
- format: full
20+
- decorations: false
21+
- significant figures: 6
1822
1923
julia> interval(0.1)
2024
Interval(0.1, 0.1)

docs/src/usage.md

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -374,35 +374,53 @@ julia> a = @interval(1.1, pi)
374374
[1.09999, 3.1416]
375375
376376
julia> setformat(sigfigs=10)
377-
10
377+
Display parameters:
378+
- format: standard
379+
- decorations: false
380+
- significant figures: 10
378381
379382
julia> a
380383
[1.099999999, 3.141592654]
381384
382385
julia> setformat(:full)
383-
10
386+
Display parameters:
387+
- format: full
388+
- decorations: false
389+
- significant figures: 10
384390
385391
julia> a
386392
Interval(1.0999999999999999, 3.1415926535897936)
387393
388394
julia> setformat(:midpoint)
389-
10
395+
Display parameters:
396+
- format: midpoint
397+
- decorations: false
398+
- significant figures: 10
390399
391400
julia> a
392401
2.120796327 ± 1.020796327
393402
394403
julia> setformat(:midpoint, sigfigs=4)
395-
4
404+
Display parameters:
405+
- format: midpoint
406+
- decorations: false
407+
- significant figures: 4
396408
397409
julia> a
398410
2.121 ± 1.021
399411
400412
julia> setformat(:standard)
401-
4
413+
Display parameters:
414+
- format: standard
415+
- decorations: false
416+
- significant figures: 4
402417
403418
julia> a
404419
[1.099, 3.142]
405420
406-
julia> setformat(:standard, sigfigs=6)
407-
6
421+
julia> setformat(:standard, sigfigs=6) # default values
422+
Display parameters:
423+
- format: standard
424+
- decorations: false
425+
- significant figures: 6
408426
```

src/display.jl

Lines changed: 56 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,25 @@ mutable struct DisplayParameters
44
sigfigs::Int
55
end
66

7+
function Base.show(io::IO, params::DisplayParameters)
8+
println(io, "Display parameters:")
9+
println(io, "- format: $(params.format)")
10+
println(io, "- decorations: $(params.decorations)")
11+
print(io, "- significant figures: $(params.sigfigs)")
12+
end
13+
714
const display_params = DisplayParameters(:standard, false, 6)
815

16+
const display_options = (:standard, :full, :midpoint)
917

1018
"""
11-
setformat(;kw)
19+
setformat(format=none; decorations=none, sigfigs=none)
20+
21+
`setformat` changes how intervals are displayed.
22+
It returns the new `DisplayParameters` object.
23+
24+
Note that The `@format` macro is more user-friendly.
1225
13-
`setformat` changes how intervals are displayed using keyword arguments.
1426
The following options are available:
1527
1628
- `format`: interval output format
@@ -26,34 +38,52 @@ The following options are available:
2638
Example:
2739
```
2840
julia> setformat(:full, decorations=true)
41+
Display parameters:
42+
- format: full
43+
- decorations: true
44+
- significant figures: 6
2945
```
3046
"""
31-
function setformat(format = display_params.format;
32-
decorations = display_params.decorations, sigfigs::Integer = display_params.sigfigs)
47+
function setformat(format = nothing;
48+
decorations = nothing,
49+
sigfigs = nothing)
50+
3351

34-
if format (:standard, :full, :midpoint)
35-
throw(ArgumentError("Allowed format option is one of $display_options."))
52+
if format != nothing
53+
if format display_options
54+
throw(ArgumentError("Allowed format option is one of $display_options."))
55+
else
56+
display_params.format = format
57+
end
3658
end
3759

38-
if decorations (true, false)
39-
throw(ArgumentError("`decorations` must be `true` or `false`"))
60+
if decorations != nothing
61+
if decorations (true, false)
62+
throw(ArgumentError("`decorations` must be `true` or `false`"))
63+
end
64+
65+
display_params.decorations = decorations
66+
4067
end
4168

42-
if sigfigs < 1
43-
throw(ArgumentError("`sigfigs` must be `>= 1`"))
69+
if sigfigs != nothing
70+
if sigfigs < 1
71+
throw(ArgumentError("`sigfigs` must be `>= 1`"))
72+
end
73+
74+
display_params.sigfigs = sigfigs
75+
4476
end
4577

46-
# update values in display_params:
47-
display_params.format = format
48-
display_params.decorations = decorations
49-
display_params.sigfigs = sigfigs
78+
return display_params
5079
end
5180

5281
"""
5382
@format [style::Symbol] [decorations::Bool] [sigfigs::Integer]
5483
5584
The `@format` macro provides a simple interface to control the output format
5685
for intervals. These options are passed to the `setformat` function.
86+
It returns the new `DisplayParameters` object.
5787
5888
The arguments may be in any order and of type:
5989
@@ -67,11 +97,19 @@ julia> x = 0.1..0.3
6797
@[0.0999999, 0.300001]
6898
6999
julia> @format full
100+
Display parameters:
101+
- format: full
102+
- decorations: false
103+
- significant figures: 6
70104
71105
julia> x
72106
Interval(0.09999999999999999, 0.30000000000000004)
73107
74108
julia> @format standard 3
109+
Display parameters:
110+
- format: standard
111+
- decorations: false
112+
- significant figures: 3
75113
76114
julia> x
77115
[0.0999, 0.301]
@@ -88,12 +126,13 @@ macro format(expr...)
88126
if isa(ex, Symbol)
89127
format = Meta.quot(ex)
90128

91-
elseif isa(ex, Integer)
92-
sigfigs = ex
93-
94129
elseif isa(ex, Bool)
95130
decorations = ex
131+
132+
elseif isa(ex, Integer)
133+
sigfigs = ex
96134
end
135+
97136
end
98137

99138
format_code = :(setformat($format, decorations=$decorations, sigfigs=$sigfigs))

0 commit comments

Comments
 (0)