Update deps for IntervalArithmetic v1.0 compatibility#221
Conversation
…ompatibility Update compat bounds: IntervalArithmetic 1, IntervalBoxes 0.3, IntervalContractors 0.6, ReversePropagation 0.4, Symbolics 7. IntervalArithmetic v1.0 follows IEEE 1788 and deliberately does not define Base.isequal/Base.hash for Interval. This broke @register_symbolic x ∈ y::Interval since SymbolicUtils needs isequal/hash for hash-consing. Instead of type-pirating those methods, decompose x ∈ interval(a,b) into (x >= a) & (x <= b) at the symbolic level. Also fix pre-existing bug in separator() where & and | used Base.intersect/union instead of ⊓/⊔ (defined for AbstractSeparator in set_operations.jl). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| IntervalArithmetic = "0.22.12" | ||
| IntervalBoxes = "0.2" | ||
| IntervalContractors = "0.5" | ||
| ReversePropagation = "0.3" | ||
| IntervalArithmetic = "1" | ||
| IntervalBoxes = "0.3" | ||
| IntervalContractors = "0.6" | ||
| ReversePropagation = "0.4" | ||
| StaticArrays = "1" | ||
| Symbolics = "5, 6" | ||
| Symbolics = "7" |
There was a problem hiding this comment.
I personally do not like these big dependency jumps where many packages must use a new version at once. This makes integrating in other libraries harder because then they (and all their dependencies) must also support these versions. As a user, it is much easier if one can make incremental changes and update the code for one external package at a time. Say, if I cannot use Symbolics v7, I also cannot use this new version.
I think the old package versions are still compatible with the changes here, so here they could simply still be allowed. I am willing to test this once this PR has converged if you want.
There was a problem hiding this comment.
I tried out with the old package versions. I found that I made a mistake in the update to ReversePropagation: it is not compatible with Symbolics v5 anymore. I created JuliaIntervals/ReversePropagation.jl#78.
Unfortunately, now that the version is public, the package manager cannot figure this out alone. So I suggest to semi-fix this by requiring Symbolics v6 here.
When using Symbolics v6, the oldest versions allowed by the package bounds still work (in the sense that all tests pass).
There was a problem hiding this comment.
@dpsanders since you narrowed ReversePropagation to v0.4.1, you may also narrow
IntervalArithmetic = "1"
IntervalBoxes = "0.3"
IntervalContractors = "0.6"again because only these versions are compatible. I am fine with that.
|
This also fixes #219! |
Cherry-pick infrastructure changes from PR #220: - Update GitHub Actions versions (checkout v6, setup-julia v2, cache v3, codecov v6) - Test on Julia 1.11 instead of 1.10 - Set julia compat to 1.11 - Remove obsolete REQUIRE file (Pkg.jl era) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| StaticArrays = "1" | ||
| Symbolics = "5, 6" | ||
| julia = "1" | ||
| Symbolics = "5 - 7" |
There was a problem hiding this comment.
See #221 (comment).
| Symbolics = "5 - 7" | |
| Symbolics = "6 - 7" |
|
Seems to be failing on 32-bit |
|
32 bit is failing for the same reason as this. We should drop 32 bit tests. |
Co-authored-by: Christian Schilling <git@christianschilling.net>
Summary
@register_symbolic x ∈ y::Intervalwith decomposition(x >= inf(y)) & (x <= sup(y))— IntervalArithmetic v1.0 (IEEE 1788) deliberately does not defineBase.isequal/Base.hashforInterval, which broke SymbolicUtils hash-consingseparator()using∩/∪(Base) instead of⊓/⊔(defined for AbstractSeparator)x^2 + y^2 ∈ interval(0, 1)— it decomposes into two comparison constraintsTest plan
∈syntax produces same results as<=syntax🤖 Generated with Claude Code