-
Notifications
You must be signed in to change notification settings - Fork 71
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
Merge 1.0-dev into master #567
Changes from all commits
c8ff400
595af4d
13068ab
2bfdc2a
e0a47c4
97f5a03
39b86fa
eabd93b
86594e4
2819ec8
c67a0f3
ebde437
de2f573
c3eb5fb
4609669
74686d4
4c2b6d2
4ae53b7
8bcab47
33c21b0
bf18a2f
036a1d8
12cfc39
53e4866
ab8fd8b
89358e6
80bbaca
7dfb3f5
474f026
933a89b
cabfeb7
88491f3
9c0ee5c
31409c3
9b48379
f932c61
d6c1e08
fb76b31
09632e8
584aba0
dce76b4
cc5694f
78980f0
91b9250
b3091de
34568d8
3eefa4d
4661780
63cb3b8
67a1fb2
a75eabe
18b3fe2
d1dde57
2fcb8ca
9b46da7
766749f
1cbdc9b
8206d52
7cee9c9
7435671
6a0dcba
9a65cb1
43571ba
bb65c89
87781c1
25110b2
9f44928
a8b7d5a
ac3c35b
8f6e905
0c26577
f02282e
15c2c3c
1765225
a6eb8ab
8554f66
fc69f93
ef69cc3
a08cae5
727aae8
3cd5790
1c51825
2fd86c2
96b090b
a993ef8
8709e1f
ebb2307
df715e2
83d76e9
2c718e4
d58dfae
c2b09f9
a9d5acb
b915efd
ea59b18
f52f4d0
0478ba8
28998d7
cddfa5d
e2bf145
7002e4b
6d309f7
a7ddf4f
9ac2d11
4b64d7a
73a3d18
2a45fc2
bb4d665
bc5a387
cd41195
707178f
ce1c6d9
d31a9c0
abf8289
5199b50
7fdc4c8
4e918e0
f44518a
f385b7f
1b84a19
ffda697
fb1ce2d
49f4806
cafc327
ffc1832
1d2e6e4
e04314b
da450d1
24ee178
7892c35
63a14a3
16e4756
466606b
5cbf7a8
35f98a5
9fd3784
2c646c0
024e444
df225b9
2a2fa98
c6270bf
09ac4da
a87fb27
a1a9fd2
911499d
4d6bd15
e381c3f
358848b
d473f78
99c27c0
5149835
44764fa
3e2e99e
98687e4
724b5cc
81cc683
d6bf67e
5fb804e
8b9f4fd
add89bd
2f16df2
91a66fa
7bfad94
c529e0d
38d0c8e
73e0c41
25ad9fc
7643df6
7e5b2a0
dc6ca95
2c16e6f
939d25b
27a535e
91dede5
6c48505
aa25188
50340e8
a6d8e7d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,8 +11,7 @@ jobs: | |
fail-fast: false | ||
matrix: | ||
version: | ||
- '1.6' | ||
- '1' | ||
- '1.8' | ||
- 'nightly' | ||
os: | ||
- ubuntu-latest | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
docs/build/ | ||
Manifest.toml | ||
Manifest.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.10" | ||
version = "0.21.0" | ||
|
||
[deps] | ||
CRlibm = "96374032-68de-5a5b-8d9e-752f78720389" | ||
EnumX = "4e289a0a-7415-4d19-859d-a7e5c4648b56" | ||
FastRounding = "fa42c844-2597-5d31-933b-ebd51ab2693f" | ||
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" | ||
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a" | ||
|
@@ -16,20 +17,10 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" | |
|
||
[compat] | ||
CRlibm = "0.7, 0.8, 1" | ||
IntervalContractors = "0.4" | ||
EnumX = "1" | ||
FastRounding = "0.2, 0.3" | ||
Polynomials = "0.7, 1, 2, 3" | ||
RecipesBase = "1.0" | ||
RoundingEmulator = "0.2" | ||
SetRounding = "0.2" | ||
StaticArrays = "0.8, 0.9, 0.10, 0.11, 0.12, 1.0" | ||
julia = "1.5" | ||
|
||
[extras] | ||
IntervalContractors = "15111844-de3b-5229-b4ba-526f2f385dc9" | ||
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" | ||
Polynomials = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" | ||
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" | ||
|
||
[targets] | ||
test = ["IntervalContractors", "LinearAlgebra", "Test", "Polynomials"] | ||
StaticArrays = "1.0" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this constrains to versions of the form 1.0.x... Current version of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for the clarification 👍 |
||
julia = "1.8" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,233 @@ | ||
Review intervals folder: | ||
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: | ||
✔ 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) |
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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suggest to have back this (erased) line, so we can test also Julia 1.9 as well. (I may have been who removed it...)