Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement systems for flavor, pointwise extensions, default bound and rounding mode #271

Closed
wants to merge 94 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
c8ff400
Implement flavors with abstract union supertype
Kolaru Mar 14, 2019
595af4d
Split special.jl between common and flavor dependant
Kolaru Mar 27, 2019
13068ab
Reviewed macros.jl
Kolaru Mar 27, 2019
2bfdc2a
Review rounding.jl
Kolaru Mar 27, 2019
e0a47c4
Review convert.jl (incomplete)
Kolaru Mar 28, 2019
97f5a03
Fix compilation errors
Kolaru Mar 28, 2019
39b86fa
Review precision.jl
Kolaru Apr 16, 2019
eabd93b
Review set_operations.jl
Kolaru Apr 16, 2019
86594e4
Work on comparisons
Kolaru Jun 21, 2019
2819ec8
Continue review of arithmetic operations
Kolaru Aug 15, 2019
c67a0f3
Create file for 9.2 numeric functions
Kolaru Aug 16, 2019
ebde437
Separate basic arithmetic functions (9.1)
Kolaru Aug 17, 2019
de2f573
Review trigonometric.jl
Kolaru Aug 19, 2019
c3eb5fb
Review hyperbolic.jl
Kolaru Aug 19, 2019
4609669
Split power functions into power.jl
Kolaru Aug 19, 2019
74686d4
Document generated functions
Kolaru Aug 19, 2019
4c2b6d2
Rename midrad and mid(a, alpha)
Kolaru Aug 19, 2019
4ae53b7
Review integer.jl
Kolaru Aug 19, 2019
8bcab47
Review absmax functions
Kolaru Aug 19, 2019
33c21b0
Review cancellative functions
Kolaru Aug 19, 2019
bf18a2f
Review set operations and booleans
Kolaru Aug 19, 2019
036a1d8
Rename entireinterval to RR
Kolaru Aug 19, 2019
12cfc39
Separate boolean and set operation
Kolaru Aug 19, 2019
53e4866
Fix typos in precision.jl
Kolaru Aug 19, 2019
ab8fd8b
Split constants in a separate file and document it
Kolaru Aug 20, 2019
89358e6
Document requirement for set-based flavor
Kolaru Aug 20, 2019
80bbaca
Add ref to set-based requirements
Kolaru Aug 22, 2019
7dfb3f5
Review what was left in arithmetic.jl
Kolaru Aug 22, 2019
474f026
Review power.jl
Kolaru Aug 22, 2019
933a89b
Change include statements
Kolaru Aug 22, 2019
cabfeb7
Fix loading bugs
Kolaru Aug 22, 2019
88491f3
Fix several bugs
Kolaru Aug 22, 2019
9c0ee5c
Remove global precision test from test suite
Kolaru Aug 22, 2019
31409c3
Adapt bare interval parsing
Kolaru Aug 23, 2019
9b48379
Fix some bugs erroring/failing construction tests
Kolaru Aug 23, 2019
f932c61
Temporary TODO and changelog files
Kolaru Aug 23, 2019
d6c1e08
Finish fixing "constructing interval" test suite
Kolaru Aug 24, 2019
fb76b31
Delete commented precision test and comment complex tests
Kolaru Aug 24, 2019
09632e8
Fix and complete .. tests
Kolaru Aug 24, 2019
584aba0
Fix "conversion to interval" test suite
Kolaru Aug 24, 2019
dce76b4
Finish replacing == by isidentical for intervals in concstruction tests
Kolaru Aug 24, 2019
cc5694f
Finish fixing test in construction.jl
Kolaru Aug 24, 2019
78980f0
Fix tests
Kolaru Dec 15, 2019
91b9250
Fix most problems in numeric.jl tests
Kolaru Dec 15, 2019
b3091de
Remove setprecision from tests
Kolaru Dec 15, 2019
34568d8
Fix tests for trig functions
Kolaru Dec 15, 2019
3eefa4d
Use scaled_mid in biscet
Kolaru Dec 15, 2019
4661780
Fix multidim tests
Kolaru Dec 15, 2019
63cb3b8
Ignore broken tests
Kolaru Dec 15, 2019
67a1fb2
Refix construction.jl test following rebase
Kolaru Dec 18, 2019
a75eabe
Small test fix
Kolaru Feb 12, 2020
18b3fe2
Fix first tests after rebase
Kolaru Jul 27, 2020
d1dde57
Reintroduce signbit
Kolaru Jul 27, 2020
2fcb8ca
Negative int power fix
Kolaru Jul 27, 2020
9b46da7
Finish fixing tests
Kolaru Jul 28, 2020
766749f
Rename isless to isweaklyless to avoid confusion
Kolaru Aug 4, 2020
1cbdc9b
Fix setrounding and associated tests
Kolaru Aug 9, 2020
8206d52
More consistent notation
Kolaru Aug 9, 2020
7cee9c9
Remove unused file
Kolaru Aug 9, 2020
7435671
Use stareq for more readable tests
Kolaru Aug 9, 2020
6a0dcba
Fix cosh
Kolaru Aug 9, 2020
9a65cb1
Fix more broken tests
Kolaru Aug 9, 2020
43571ba
Clean inline todos and docstrings
Kolaru Aug 12, 2020
bb65c89
Fix eltype according to #397
Kolaru Aug 12, 2020
87781c1
Misc
Kolaru Oct 24, 2020
25110b2
Use generic constructor [unfinished]
Kolaru Oct 25, 2020
9f44928
Fix weird notation in cot
Kolaru Dec 11, 2021
a8b7d5a
Clean up a bit
Kolaru Dec 11, 2021
ac3c35b
Overhaul and constructor simplification
Kolaru Dec 20, 2021
8f6e905
Massive rounding.jl cleanup
Kolaru Dec 24, 2021
0c26577
Make consistency tests pass
Kolaru Dec 25, 2021
f02282e
Power tests pass
Kolaru Dec 25, 2021
15c2c3c
trig.jl tests
Kolaru Dec 25, 2021
1765225
Fix all tests up to rounding.jl
Kolaru Dec 26, 2021
a6eb8ab
Finalize all none IEEE tests
Kolaru Dec 26, 2021
8554f66
Merge branch 'master' into interval_flavors
Kolaru Dec 26, 2021
fc69f93
Merge 2
Kolaru Dec 26, 2021
ef69cc3
New parser
Kolaru Dec 29, 2021
a08cae5
Update the todo file
Kolaru Dec 29, 2021
727aae8
Make all tests pass
Kolaru Dec 31, 2021
3cd5790
Hotfix test erroring on CI
Kolaru Dec 31, 2021
1c51825
Clean up a bit
Kolaru Jan 10, 2022
2fd86c2
Remove manifest
Kolaru Jan 11, 2022
96b090b
Clean up and remove conversion.jl
Kolaru Jan 13, 2022
a993ef8
Remove force_interval
Kolaru Jan 15, 2022
8709e1f
Fix arithmetic bug with irrational
Kolaru Jan 15, 2022
ebb2307
Remove @round_up and @round_down macro
Kolaru Jan 15, 2022
df715e2
Finalize pointwise politic
Kolaru Jan 16, 2022
83d76e9
Go through TODO
Kolaru Jan 16, 2022
2c718e4
Revert RR for entireinterval
Kolaru Jan 16, 2022
d58dfae
Go through inline TODOs
Kolaru Jan 16, 2022
c2b09f9
Update changelog
Kolaru Jan 16, 2022
a9d5acb
First pass on lbenet review
Kolaru Jan 22, 2022
d8e71bb
Merge branch 'master' into interval_flavors
lucaferranti Jan 22, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
docs/build/
Manifest.toml
Manifest.toml
2 changes: 1 addition & 1 deletion NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ the interval, e.g. `convert(Interval{Float64}, 0.1)`

- Improvements towards conformance with the [IEEE-1788](https://standards.ieee.org/findstds/standard/1788-2015.html) standard for Interval Arithmetic:

- New `special_intervals.jl` file, with definitions of `emptyinterval`, `entireinterval`, `nai` and related functions. Add new interval functions (`<=`, `radius`, `precedes`, `strictprecedes`, `≺`, etc).
- New `special_intervals.jl` file, with definitions of `emptyinterval`, `RR`, `nai` and related functions. Add new interval functions (`<=`, `radius`, `precedes`, `strictprecedes`, `≺`, etc).

- Control rounding tighter for arithmetic operations; `*`, `inv` and `/` have been rewritten; this includes changes in `make_interval` and `convert` to get consistent behavior. These functions pass the corresponding tests in the [ITF1788](https://github.com/oheim/ITF1788) test suite.
- Deprecate the use of `⊊` in favor of `isinterior` (`⪽`).
Expand Down
7 changes: 4 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
name = "IntervalArithmetic"
uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253"
repo = "https://github.com/JuliaIntervals/IntervalArithmetic.jl.git"
version = "0.20.3"
version = "0.21.0"

[deps]
CRlibm = "96374032-68de-5a5b-8d9e-752f78720389"
CombinedParsers = "5ae71ed2-6f8a-4ed1-b94f-e14e8158f19e"
FastRounding = "fa42c844-2597-5d31-933b-ebd51ab2693f"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
Expand All @@ -17,11 +18,11 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
[compat]
CRlibm = "0.7, 0.8, 1"
FastRounding = "0.2"
Polynomials = "0.7"
Polynomials = ">= 1.0"
RecipesBase = "1.0"
RoundingEmulator = "0.2"
SetRounding = "0.2"
StaticArrays = "0.8, 0.9, 0.10, 0.11, 0.12, 1.0"
StaticArrays = "1.0"
julia = "1.5"

[extras]
Expand Down
233 changes: 233 additions & 0 deletions TODO
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
Review intervals folder:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you please gitignore this and the changelog? It adds a lot of noise when browsing the PR from github.

General:
✔ Choose whether to use x == zero(T) or x == 0 across files @done(20-08-09 16:05)
✔ Use iszero everywhere @done(21-12-29 23:30)
✔ Check that default flavor always return safe result @done(21-12-29 23:30)
✔ {F <: Type} -> {F<:Type} (remove spaces) @done(20-08-09 16:05)
✔ Replace "IEEE standard" -> "IEEE Std 1788-2015" @done(19-08-22 16:13)
✔ "Corresponds to" -> "Implement" in doc @done(19-08-22 16:13)
✔ Investigate compile time warnings @done(21-12-29 23:30)
✔ Check if intervals of different flavor type can/should be equal in the sense of `isidentical` @done(19-12-08 01:12)
✔ Operation on different flavors of interval should always error. @done(21-12-29 23:29)
✔ Check if `signbit` is in the standard @done(22-01-16 17:24)
It is not.
✔ Distribute functions from `special.jl` and `misc.jl` somewhere more informative @done(22-01-10 02:12)
☐ Check the display of all docstrings
Discussion:
✔ Do we want to keep `@floatinterval` and `@biginteral` or use `@interval(F, expr1, expr2)` instead ? @done(22-01-10 00:55)
✔ It is fine actually @done(22-01-10 00:55)
✔ Decide if `inf` and `sup` should be used as default or rather `x.lo` and `x.hi` @done(21-12-29 23:29)
✔ `inf` and `sup` should be strict equivalent to `x.lo` and `x.hi` @done(21-12-29 23:29)
✘ Deprecate `interval` in favor of `checked_interval`? @cancelled(22-01-16 18:13)

Global precision:
✔ Get rid of it @done(19-08-20 16:49)
✔ Replace pi_interval(T) by Interval{T}(π) everywhere @done(19-12-18 22:59)
✔ Be sure it is done in compliance with #338 @done(19-12-18 22:59)

Flavors:
lbenet marked this conversation as resolved.
Show resolved Hide resolved
✔ Add documentations for flavors @done(22-01-16 17:58)
Implement set based flavor:
✔ Check all requested stuff 10.5. @done(22-01-16 18:00)
✔ Error on undefined @done(22-01-16 18:00)
✘ Implement cset flavor @cancelled(22-01-16 18:13)
✘ Make cset default ? @cancelled(22-01-16 18:13)
✔ Define the flavor dependent symbols like ==, <, <= @done(21-12-29 23:28)
✘ Deal with the fact flavor interact with pointwise politic for `isfinite` and `isinf` @cancelled(22-01-16 17:58)
Not a problem for set-based. Dealing with it for cset or other can be dealt with later.

intervals.jl:
✔ Split constructors from the includes @done(22-01-15 19:26)
✔ Put helper, utils function (e.g. `eltype`) somewhere else @done(22-01-15 19:26)

macros.jl:
✔ Review @done(19-08-23 01:57)
✔ Clean or open issue for cleaning of the file @done(22-01-15 21:25)

precision.jl:
✔ Review @done(19-08-19 01:49)

rounding.jl:
✔ Review @done(19-08-19 01:50)
✔ Decide how to define the setrounding function with multiple interval types @done(21-12-29 23:28)
✔ Use a global function `current_interval_rounding` @done(21-12-29 23:28)
✔ Check with latest discussion if everything is up to date @done(22-01-10 00:56)
✔ Remove default round method once it is not needed anymore @done(21-12-29 23:34)
✔ Test new mechanism @done(22-01-10 01:18)
✔ Remove `@round_up` and `@round_down` @done(22-01-16 04:51)

conversion.jl:
✔ Review @done(19-08-23 03:25)
✔ Fix ambiguity errors @done(21-12-29 23:27)
✔ Simplify `atomic` @done(22-01-10 00:56)
✔ Accept the fact we have two eps for floating points inputs @done(22-01-09 21:20)
✔ Test the new `atomic` @done(22-01-10 01:18)

complex.jl:
Should we even bother ?
✔ Drop support for now @done(22-01-10 00:57)
✔ Document the support drop @done(22-01-16 18:01)
See changelog

9.1. Arithmetic functions:
✔ Distribute everything from arithmetic.jl in other files @done(20-08-13 00:27)
basic.jl:
✔ Split @done(19-08-19 01:14)
✔ Verify all requested functions are there @done(19-08-19 02:01)
✔ Common @done(19-08-19 01:11)
✔ Adapt for the removal of promotion @done(21-12-29 23:27)
✘ Flavor dependent * @cancelled(22-01-16 18:01)
✘ Flavor dependent / @cancelled(22-01-16 18:01)
✘ Flavor dependent inv @cancelled(22-01-16 18:01)
✘ Flavor dependent fma @cancelled(22-01-16 18:01)
power.jl:
✔ Split @done(19-08-19 01:14)
✔ Verify all requested functions are there @done(19-08-19 04:29)
✔ Common @done(19-08-22 16:25)
✘ Flavor dependent power (for negative power) @cancelled(22-01-16 18:02)
✘ Flavor dependant log @cancelled(22-01-16 18:02)
✔ zero(T) or 0 ? @done(20-08-13 00:28)
trigonometric.jl:
✔ Split @done(19-08-19 02:00)
✔ Verify all requested functions are there @done(19-08-19 02:00)
✔ Clean constants @done(19-08-19 14:13)
✔ Common @done(19-08-19 15:19)
✔ zero(T) or 0 ? @done(20-08-13 00:28)
hyperbolic.jl:
✔ Split @done(19-08-19 15:23)
✔ Verify all requested functions are there @done(19-08-19 15:23)
✔ Common @done(19-08-19 15:31)
✔ Add docstring to generated funcs @done(19-08-19 16:45)
✘ Flavor dependent atanh @cancelled(22-01-16 18:02)
integer.jl:
✔ Split @done(19-08-19 17:31)
✔ Verify all requested functions are there @done(19-08-19 17:35)
✔ Common @done(19-08-19 17:43)
absmax.jl:
✔ Split @done(19-08-19 17:46)
✔ Verify all requested functions are there @done(19-08-19 17:46)
✔ Common @done(19-08-19 17:48)

9.2. Cancellative:
✔ Split @done(19-08-19 19:14)
✔ Verify all requested functions are there @done(19-08-19 19:14)
✔ Common @done(19-08-19 19:14)
✔ Check if cancelminus has flavor dependent edge cases @done(22-01-16 18:02)
Doesn't seem like it does.

9.3 Set operations:
✔ Split @done(19-08-19 19:31)
✔ Verify all requested functions are there @done(19-08-19 19:31)
✔ Common @done(19-08-19 19:31)

9.4. Numeric functions:
✔ Split @done(19-08-19 01:26)
✔ Common @done(19-08-19 01:11)
✔ Solve mid(a, 0.5) != mid(a) discrepency @done(20-08-09 15:42)
✘ Flavor dependent mid @cancelled(22-01-16 18:02)

9.5. Boolean functions:
These are in the set_operations.jl file
✔ Split @done(19-08-19 19:30)
✔ Verify all requested functions are there @done(19-08-19 19:31)
✔ Common @done(19-08-19 19:36)
✔ equal is not the same as == @done(19-08-19 19:36)
✔ Check `isweaklylessprime` @done(22-01-16 18:03)
✘ Flavor dependent issubset/isinterior ? @cancelled(22-01-16 18:02)
✔ Choose infix operator for `isidentical` ? e.g. ∼ \sim<TAB> (not currently parsed by julia) or ∽ \backsim<TAB> or ≛ \stareq<TAB> or whatever @done(21-12-29 23:31)
This is mainly used for tests and don't necessarily need to be exported

9.6. Operatons on/with decoration:
✘ Split @cancelled(22-01-16 18:16)
✘ Verify all requested functions are there @cancelled(22-01-16 18:16)
✘ Review @cancelled(22-01-16 18:16)

9.7. Literals:
✘ Review @cancelled(22-01-16 18:16)

9.8. Constructor:
✔ Review @done(22-01-16 18:14)
✔ Check correctness and tightness for Interval{T}(x) @done(22-01-16 18:14)
✔ Document constructors @done(22-01-16 18:14)
✔ Make `..` work correctly for all input types @done(21-12-29 23:31)
✔ Choose a mechanism for the default bound @done(21-12-29 23:31)
✔ Add Interval{T}(π) @done(19-08-19 01:58)
✔ Check performance @done(19-12-18 23:00)

10.5. Required operations in set-based flavor:
10.5.1. Literals:
✘ No idea, but do it @cancelled(22-01-16 18:16)
10.5.2. Constants:
✔ Add ref to doc @done(19-08-21 00:09)
✘ Move deprecation warning to a separated file ? @cancelled(22-01-16 18:16)
10.5.3. Forward mode elementary functions:
✔ Add ref to doc @done(19-08-21 00:20)
10.5.4. Reverse mode elementary functions:
✔ Open issue about their absence @done(19-08-20 03:16)
They are in IntervalConstraint.jl
10.5.5. Two output division:
✔ Add ref to doc @done(19-08-21 00:23)
✘ Flavor dependent edge case @cancelled(22-01-16 18:16)
✘ Recent GH issue @cancelled(22-01-16 18:16)
10.5.6. Cancellative:
✔ Add ref to doc @done(19-08-22 15:51)
✘ Check that the set-based follow the required behavior for undbounded intervals @cancelled(22-01-16 18:16)
10.5.7. Set opeations:
✔ Add ref to doc @done(19-08-22 15:55)
10.5.8. Constructors:
✔ Review I guess @done(22-01-16 18:15)
10.5.9. Numeric functions:
✔ Add ref to doc @done(19-08-22 15:55)
10.5.10. Boolean:
✔ Check everything required is present @done(19-08-22 16:07)
✔ Add ref to doc @done(19-08-22 16:07)
10.6. Recommended operations:
✘ Check all that stuff @cancelled(22-01-16 18:15)


Other:
bisect.jl:
✘ Review @cancelled(22-01-16 18:14)
display.jl:
✘ Review @cancelled(22-01-16 18:14)
InteralArithmetic.jl:
✔ Review @done(22-01-16 18:15)
✔ Make sure everything is exported correctly @done(22-01-16 18:15)
✔ Check renamed/new functions are exported @done(22-01-16 18:15)
parsing.jl:
✔ parsing of bare interval @done(21-12-29 23:27)
✔ parsing of decorated interval @done(21-12-31 02:05)
✔ Change `"3.16?1"` to be parsed as `"[3.15, 3.17]"` @done(21-12-31 02:16)
☐ Restore parsing of special forms e.g. `"entire"`, `[,]` (tests are marked as broken)
rand.jl:
✘ Review @cancelled(22-01-16 18:14)
symbols.jl:
✘ Make sure everything is here @cancelled(22-01-16 18:15)


Review other folders:
Check PR #271 for details
✘ Do it @cancelled(22-01-16 18:14)
multidim:
arithmetic.jl:
StaticArray.jl v1.0 wants to promote the array eltype to interval

Bugs:
✔ `Int` times `Interval` errors (e.g. `2*a`) @done(19-12-14 23:50)
✔ `(1..1) * pi` is not equal to `Interval(pi)` @done(22-01-15 20:49)
✘ Find why 5 of the hyperb tests are failing only when put within the same testset as the others @cancelled(22-01-16 18:14)

Documentation:
✘ Put docstrings inside `@eval` blocks @cancelled(22-01-10 01:00)
Not needed anymore since we don't use eval as much
✔ Document flavors @done(22-01-16 18:14)
☐ Document all the changes.

Tests:
✘ Uncomment complex tests in `construction.jl` @cancelled(22-01-10 01:00)
Dropped support for Complex for now
✔ Use `===` or `≛` instead of `==` @done(21-12-29 23:26)
✘ Test all flavors @cancelled(22-01-16 18:15)
☐ Test switching the default bound
☐ Test switching the interval rounding
✔ Test switchign the pointwise politic @done(22-01-16 04:51)
86 changes: 86 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Changelog

## Structure
Changed to match the IEEE standard, with corresponding docstring to every function when it is in the standard.

Overall restructuring of the files to try to be more organized.

Symbols that alias another function moved to `symbols.jl`

Only minimal changes to `multdim/`.

## Global precision
Removed. It was causing problems and was agreed upon at some point.

## Rounding
Removed `setrounding(Interval, mode)` and redefinition of function to change the rounding mode.

Instead the default rounding is given by the (not exported) function `IntervalArithmetic.rounding_mode()` and can be changed by redefining the function.

This allow to simplify the management of the rounding mode.

`@round` now take the interval type of the returned interval as first argument. The old fallback to the default bound still exists.

## Flavors
Only Cset flavor is available.

The mechanism for more flavor is however introduced, in a similar way to the new rounding mechanism. The current flavor is given by the (not exported) `IntervalArithmetic.current_flavor()` and can be overwritten to change flavor.

## Default bound
Introduced the same mechanism as rounding and flavor, with the default bound given and possible changed through the not exported `IntervalArithmetic.default_bound()`.

## Pointwise politic
Introduced the concept of pointwise politic, that is what to do with the pointwise extension of boolean function like `==` to intervals.

Uses the same mechanism as rounding, flavor and default bounds, using the function `IntervalArithmetic.pointwise_politic()` to define the current mode.

By default uses ternary logic, similar to what is done in `NumberIntervals.jl`.

Also implemented boolean intervals (always erroring in conditional) and the old behavior (often silently breaking `if .. else` clauses).

Identity of intervals now use the `\stareq` infix operator, `==` being reserved for pointwise equality test.

## Promotion and conversion
Removed all promotion and conversion involving intervals.

This makes the tracking of correctness easier as generic `Number` or `Real` methods now errors with intervals if they are not redefined in the package.

## Construction
The constructors definitions have been overall and, to an extend, redesigned.

Now only `@interval` is trying to be smart and widen decimal inputs to guarantee their inclusion, leading to 2 eps wide interval built from single decimal literals. Guaranteeing inclusion is still better done by using either the `I""` string macro or `parse(Interval, str)`.

All others constructors take floating point at face value.

Consequently, `atomic` has been massively simplified.

Introduced the alias `checked_interval` to be more specific than just lowercase `interval`. Both are now equivalent to `..`.

`Interval(::Irrational)` works with generated function and is tight and correct.

## Complex and Rational
Support drop as it caused problems. It could be restored.

## Parser
Rewritten using `CombinedParsers.jl`.

It is now much simpler and also slightly tighter.

Unfortunately the new dependency seems to error on nightly, which is what causes the CI to fail.

Some extension of parsing that are not in the standard still need to be restored.

## Docstrings
Added a ton of docstrings.

## Others
- Removed `widen` and `wideinterval`.
- Removed `interval_from_midpoint_radius`. It is implemented by `±`.
- Removed `force_interval`
- Removed `find_quadrants_tan` as it was a duplicate of `find_quadrants`
- `make_interval` renamed `wrap_literals`
- Removed `pi_interval(T)` in favor of `Interval{T}(π)`
- Renamed `multiply_by_positive_constant` to `scale`
- Renamed `mid(a, α)` -> `scaled_mid(a, α)` to avoid discrepancy with default parameter.
- Tests that seemed to have been tailored to the behavior of the old `@interval` have been modified or marked as `@test_broken` when the expected value can not be easily derived
- `@interval` changed to `Interval` in tests as much as possible.
Loading