Skip to content

Update deps for IntervalArithmetic v1.0 compatibility#221

Merged
dpsanders merged 9 commits into
masterfrom
update-deps-ia-v1
Apr 3, 2026
Merged

Update deps for IntervalArithmetic v1.0 compatibility#221
dpsanders merged 9 commits into
masterfrom
update-deps-ia-v1

Conversation

@dpsanders

Copy link
Copy Markdown
Member

Summary

  • Update compat bounds: IntervalArithmetic 1, IntervalBoxes 0.3, IntervalContractors 0.6, ReversePropagation 0.4, Symbolics 7
  • Replace @register_symbolic x ∈ y::Interval with decomposition (x >= inf(y)) & (x <= sup(y)) — IntervalArithmetic v1.0 (IEEE 1788) deliberately does not define Base.isequal/Base.hash for Interval, which broke SymbolicUtils hash-consing
  • Fix pre-existing bug in separator() using / (Base) instead of / (defined for AbstractSeparator)
  • Users can still write x^2 + y^2 ∈ interval(0, 1) — it decomposes into two comparison constraints

Test plan

  • All 4 test suites pass (Contractors, Separators, pave, Paving a 3D torus)
  • Verified syntax produces same results as <= syntax

🤖 Generated with Claude Code

David Sanders and others added 2 commits April 2, 2026 03:35
…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>

@schillic schillic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Amazing! This fixes the issues in #220.
You can cherry-pick my 4th commit over there to fix the CI problems.

Comment thread Project.toml Outdated
Comment on lines +14 to +19
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"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@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.

@schillic

schillic commented Apr 2, 2026

Copy link
Copy Markdown
Member

This also fixes #219!

dpsanders and others added 3 commits April 2, 2026 13:52
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>
Comment thread Project.toml Outdated
StaticArrays = "1"
Symbolics = "5, 6"
julia = "1"
Symbolics = "5 - 7"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

See #221 (comment).

Suggested change
Symbolics = "5 - 7"
Symbolics = "6 - 7"

@blegat

blegat commented Apr 3, 2026

Copy link
Copy Markdown

Seems to be failing on 32-bit

@dpsanders

Copy link
Copy Markdown
Member Author

32 bit is failing for the same reason as this. We should drop 32 bit tests.

@schillic schillic mentioned this pull request Apr 3, 2026
Comment thread .github/workflows/CI.yml Outdated
Co-authored-by: Christian Schilling <git@christianschilling.net>
@dpsanders dpsanders merged commit 90e313c into master Apr 3, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants