Skip to content

Add reverse-mode constraint-propagation functions#756

Open
dpsanders wants to merge 4 commits into
masterfrom
reverse-refactor
Open

Add reverse-mode constraint-propagation functions#756
dpsanders wants to merge 4 commits into
masterfrom
reverse-refactor

Conversation

@dpsanders
Copy link
Copy Markdown
Member

Summary

Adds reverse-mode elementary functions for interval constraint propagation, previously living in IntervalContractors.jl, into the core package. This is the IA half of the planned move; a companion IntervalContractors.jl deprecation PR will follow.

Three commits, building cleanly on top of master:

  1. IEEE 1788-2015 §10.5.4 reverses (sqr_rev, abs_rev, pown_rev, sin_rev, cos_rev, tan_rev, cosh_rev, mul_rev) plus the standard additional reverses from the constraint-propagation literature (add_rev, sub_rev1/2, div_rev1/2, sqrt_rev, cbrt_rev, the exp{,2,10}/expm1 family, the log{,2,10}/log1p family, sinh/tanh/asinh/atanh, and asin/acos/atan). Includes the libieeep1788_rev.itl and libieeep1788_mul_rev.itl ITF1788 test corpora.
  2. §10.5.5 / extra single-output reverses: mul_rev_to_pair, inv_rev, sign_rev, pow_rev1, pow_rev2. mul_rev_to_pair follows §11.7.1 decoration (trv on a true split, propagated standard-division decoration otherwise).
  3. Tuple-rewriting reverses matching the IntervalContractors API: plus_rev(a, b, c), minus_rev (3-arg + unary), times_rev, div_rev, power_rev (Integer + Interval forms), max_rev, min_rev. These return (a, b', c') with a passed through and b'/c' decorated trv per §11.7.1. Note: the IntervalContractors name mul_rev is renamed to times_rev here to avoid colliding with the IEEE 1788 single-output mul_rev(b, c, x) already added in commit (1).

API design:

  • All single-output Interval methods accept an optional dec = :default kwarg and force trv per §11.7.1.
  • Tuple-rewrite Interval methods use a _rev_dispatch_tuple helper that propagates NaI across the whole tuple and decorates only the derived outputs as trv (input passthroughs keep their original decoration).
  • power_rev reuses IA's existing rootn (which already handles even-n clipping and negative n via inv(rootn(·, |n|))).

Test plan

  • test/interval_tests/reverse.jl: 127/127 unit tests covering NaI propagation, decoration, empty/entire edge cases, and the §10.5.5 split behaviour for mul_rev_to_pair.
  • test/ITF1788_tests/libieeep1788_rev.jl + libieeep1788_mul_rev.jl: 1123/1127 (4 known-loose @test_broken).
  • CI run on the PR.
  • Smoke-check downstream: ReversePropagation.jl and IntervalConstraintProgramming.jl already call IA's IEEE 1788 reverses; this PR is what unblocks them.

🤖 Generated with Claude Code

dpsanders and others added 3 commits May 7, 2026 20:02
Move reverse-mode elementary functions, previously in IntervalContractors.jl,
into the core package as `src/intervals/interval_operations/reverse.jl`:

- §10.5.4 reverses: `sqr_rev`, `abs_rev`, `pown_rev`, `sin_rev`, `cos_rev`,
  `tan_rev`, `cosh_rev`, `mul_rev`
- Additional reverses: `add_rev`, `sub_rev{1,2}`, `div_rev{1,2}`,
  `sqrt_rev`, `cbrt_rev`, `exp{,2,10}_rev`, `expm1_rev`,
  `log{,2,10}_rev`, `log1p_rev`, `sinh_rev`, `tanh_rev`,
  `asin_rev`, `acos_rev`, `atan_rev`, `asinh_rev`, `acosh_rev`, `atanh_rev`

Decorated `Interval` outputs are forced to `trv` per §11.7.1; NaI inputs
propagate to NaI.

Includes the libieeep1788 ITF1788 reverse test corpus and a `reverse.jl`
unit-test file. Test generator extended with reverse-function dispatch
entries and a `_mul_rev_to_pair` helper for the `mulRevToPair` cases.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Port the additional reverse-mode functions previously living in
IntervalContractors.jl that are not collisions with existing IA APIs:

- `mul_rev_to_pair` — IEEE 1788-2015 §10.5.5 two-output reverse
  multiplication, returning the disjoint half-rays when `0 ∈ b`.
  Decoration follows §11.7.1: `trv` on a true split, otherwise the
  standard division decoration on the first output.
- `inv_rev`        — reverse of `inv`; inv is its own inverse.
- `sign_rev`       — reverse of `sign`; preimage assembled from which of
  `{-1, 0, 1}` lies in the constraint.
- `pow_rev1(b, c)` — reverse of `^` in the base, `c^(1/b) ∩ x`.
- `pow_rev2(a, c)` — reverse of `^` in the exponent,
  `(log(c) / log(a)) ∩ x`.

All five functions follow the existing `BareInterval` impl + `Interval`
dispatch via `_rev_dispatch` pattern, with §11.7.1 `trv` decoration on
single-output Interval results. New unit tests in
`test/interval_tests/reverse.jl` cover NaI propagation, decoration,
empty/entire edge cases, and the §10.5.5 split behaviour for
`mul_rev_to_pair`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…, power_rev, max_rev, min_rev)

Port the constraint-propagation-style tuple-rewriting reverses from
IntervalContractors.jl. Given a binary forward `a = f(b, c)`, each
function returns the triplet `(a, b', c')` where `b' ⊆ b`, `c' ⊆ c` are
the tightenings induced by the constraint and `a` is unchanged.

Names and arities preserved from IntervalContractors except `mul_rev`,
which is renamed `times_rev` because IA already exports a same-arity
`mul_rev(b, c, x)` with the IEEE 1788 §10.5.4 single-output semantics.

Methods added:

- `plus_rev(a, b, c)`               — `a = b + c`
- `minus_rev(a, b, c)`              — `a = b - c`
- `minus_rev(a, b)`                 — `a = -b`
- `times_rev(a, b, c)`              — `a = b * c` (was `mul_rev` in IC)
- `div_rev(a, b, c)`                — `a = b / c`
- `power_rev(a, b, n::Integer)`     — `a = b^n`, integer exponent
- `power_rev(a, n::Integer)`        — defaults `b = entireinterval()`
- `power_rev(a, b, c)`              — `a = b^c`, interval exponent
- `max_rev(a, b, c)`, `min_rev`     — `a = max(b, c)` / `min(b, c)`

Implementation notes:

- Adds a `_rev_dispatch_tuple` helper bridging `BareInterval` impls to
  the `Interval` API: NaI propagation across the whole tuple, `trv`
  decoration on derived outputs (per §11.7.1) while passing through
  unchanged inputs with their original decorations.
- `power_rev` uses IA's existing `rootn`, which already handles negative
  exponents (`inv(rootn(·, |n|))`) and even-`n` clipping to `[0, ∞)`.
- `times_rev` uses `extended_div` + hull when `0 ∈ b` or `0 ∈ c` to
  deliver a single-interval enclosure of each output.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 8, 2026

Benchmark Results (Julia v1)

Time benchmarks
master a50db83... master / a50db83...
BigFloat MPFI/basics/* 24.7 ± 3.6 μs 25.4 ± 3.5 μs 0.974 ± 0.2
BigFloat MPFI/basics/+ 12.9 ± 3.4 μs 12.5 ± 3.5 μs 1.03 ± 0.4
BigFloat MPFI/basics/- 17 ± 3.6 μs 18.2 ± 3.4 μs 0.93 ± 0.26
BigFloat MPFI/basics// 19.2 ± 3.4 μs 19 ± 3.5 μs 1.01 ± 0.26
BigFloat MPFI/basics/abs 10.6 ± 3.3 μs 10.4 ± 3.3 μs 1.02 ± 0.46
BigFloat MPFI/basics/acos 0.676 ± 0.0097 ms 0.68 ± 0.0096 ms 0.994 ± 0.02
BigFloat MPFI/basics/asin 0.658 ± 0.0097 ms 0.659 ± 0.01 ms 0.998 ± 0.022
BigFloat MPFI/basics/atan 2.1 ± 0.008 ms 2.1 ± 0.0088 ms 0.997 ± 0.0056
BigFloat MPFI/basics/cos 0.36 ± 0.01 ms 0.36 ± 0.01 ms 1 ± 0.04
BigFloat MPFI/basics/cosh 0.43 ± 0.012 ms 0.432 ± 0.012 ms 0.994 ± 0.04
BigFloat MPFI/basics/exp 0.503 ± 0.01 ms 0.504 ± 0.01 ms 0.997 ± 0.029
BigFloat MPFI/basics/inv 19.4 ± 3.4 μs 19.2 ± 3.4 μs 1.01 ± 0.25
BigFloat MPFI/basics/log 0.471 ± 0.0099 ms 0.471 ± 0.0099 ms 1 ± 0.03
BigFloat MPFI/basics/sin 0.465 ± 0.011 ms 0.466 ± 0.012 ms 0.998 ± 0.034
BigFloat MPFI/basics/sinh 0.57 ± 0.011 ms 0.572 ± 0.011 ms 0.998 ± 0.026
BigFloat MPFI/basics/sqrt 27.5 ± 6.7 μs 27.4 ± 6.7 μs 1 ± 0.35
BigFloat MPFI/basics/tan 0.385 ± 0.01 ms 0.385 ± 0.011 ms 0.999 ± 0.039
BigFloat MPFI/basics/tanh 0.583 ± 0.0099 ms 0.584 ± 0.01 ms 0.998 ± 0.025
BigFloat bareinterval/basics/* 0.0407 ± 0.0023 ms 0.0419 ± 0.0025 ms 0.971 ± 0.081
BigFloat bareinterval/basics/+ 22.1 ± 3.3 μs 21.8 ± 3.3 μs 1.02 ± 0.21
BigFloat bareinterval/basics/- 22.2 ± 3.4 μs 22.6 ± 3.4 μs 0.982 ± 0.21
BigFloat bareinterval/basics// 20.6 ± 5 μs 20.1 ± 5.1 μs 1.02 ± 0.36
BigFloat bareinterval/basics/abs 15.6 ± 3.2 μs 15.5 ± 3.1 μs 1.01 ± 0.29
BigFloat bareinterval/basics/acos 0.715 ± 0.025 ms 0.714 ± 0.025 ms 1 ± 0.049
BigFloat bareinterval/basics/asin 0.699 ± 0.024 ms 0.697 ± 0.024 ms 1 ± 0.048
BigFloat bareinterval/basics/atan 2.11 ± 0.0095 ms 2.12 ± 0.0077 ms 0.999 ± 0.0058
BigFloat bareinterval/basics/cos 0.344 ± 0.089 ms 0.347 ± 0.088 ms 0.99 ± 0.36
BigFloat bareinterval/basics/cosh 0.474 ± 0.024 ms 0.476 ± 0.023 ms 0.995 ± 0.071
BigFloat bareinterval/basics/exp 0.513 ± 0.01 ms 0.514 ± 0.011 ms 0.998 ± 0.029
BigFloat bareinterval/basics/inv 26.7 ± 3.2 μs 26.6 ± 3.3 μs 1 ± 0.17
BigFloat bareinterval/basics/log 0.522 ± 0.015 ms 0.52 ± 0.015 ms 1 ± 0.04
BigFloat bareinterval/basics/sin 0.482 ± 0.098 ms 0.486 ± 0.097 ms 0.992 ± 0.28
BigFloat bareinterval/basics/sinh 0.581 ± 0.012 ms 0.581 ± 0.011 ms 1 ± 0.028
BigFloat bareinterval/basics/sqrt 0.0365 ± 0.003 ms 0.0357 ± 0.0029 ms 1.02 ± 0.12
BigFloat bareinterval/basics/tan 0.292 ± 0.058 ms 0.293 ± 0.056 ms 0.998 ± 0.27
BigFloat bareinterval/basics/tanh 0.594 ± 0.011 ms 0.595 ± 0.01 ms 0.998 ± 0.026
BigFloat interval/basics/* 0.0448 ± 0.0021 ms 0.0455 ± 0.0018 ms 0.986 ± 0.06
BigFloat interval/basics/+ 25.9 ± 8.2 μs 24.7 ± 8.3 μs 1.05 ± 0.48
BigFloat interval/basics/- 25.2 ± 8.3 μs 25.1 ± 8.2 μs 1 ± 0.47
BigFloat interval/basics// 24.8 ± 4.9 μs 25.3 ± 4.9 μs 0.981 ± 0.27
BigFloat interval/basics/abs 14.9 ± 7.7 μs 14.8 ± 7.7 μs 1.01 ± 0.74
BigFloat interval/basics/acos 0.709 ± 0.04 ms 0.709 ± 0.041 ms 1 ± 0.081
BigFloat interval/basics/asin 0.692 ± 0.035 ms 0.691 ± 0.033 ms 1 ± 0.069
BigFloat interval/basics/atan 2.12 ± 0.0081 ms 2.13 ± 0.01 ms 0.997 ± 0.0061
BigFloat interval/basics/cos 0.338 ± 0.014 ms 0.343 ± 0.015 ms 0.985 ± 0.058
BigFloat interval/basics/cosh 0.467 ± 0.024 ms 0.473 ± 0.021 ms 0.989 ± 0.067
BigFloat interval/basics/exp 0.524 ± 0.01 ms 0.524 ± 0.01 ms 1 ± 0.028
BigFloat interval/basics/inv 31.5 ± 5.6 μs 31 ± 8 μs 1.02 ± 0.32
BigFloat interval/basics/log 0.515 ± 0.045 ms 0.513 ± 0.045 ms 1 ± 0.12
BigFloat interval/basics/sin 0.49 ± 0.017 ms 0.491 ± 0.017 ms 0.999 ± 0.049
BigFloat interval/basics/sinh 0.59 ± 0.01 ms 0.589 ± 0.011 ms 1 ± 0.025
BigFloat interval/basics/sqrt 0.0433 ± 0.031 ms 0.0435 ± 0.03 ms 0.995 ± 0.99
BigFloat interval/basics/tan 0.283 ± 0.014 ms 0.284 ± 0.014 ms 0.997 ± 0.069
BigFloat interval/basics/tanh 0.607 ± 0.011 ms 0.603 ± 0.011 ms 1.01 ± 0.025
bareinterval/basics/* 1.97 ± 0.031 μs 1.91 ± 0.05 μs 1.03 ± 0.031
bareinterval/basics/+ 0.521 ± 0.01 μs 0.531 ± 0.01 μs 0.981 ± 0.026
bareinterval/basics/- 0.541 ± 0.01 μs 0.541 ± 0.01 μs 1 ± 0.026
bareinterval/basics// 1.2 ± 0.031 μs 1.19 ± 0.04 μs 1.01 ± 0.043
bareinterval/basics/abs 0.22 ± 0.011 μs 0.23 ± 0.041 μs 0.957 ± 0.18
bareinterval/basics/acos 2.93 ± 0.031 μs 2.9 ± 0.039 μs 1.01 ± 0.017
bareinterval/basics/asin 3.14 ± 0.02 μs 3.18 ± 0.04 μs 0.987 ± 0.014
bareinterval/basics/atan 13 ± 0.21 μs 13 ± 0.21 μs 1 ± 0.023
bareinterval/basics/cos 0.0501 ± 0.00059 ms 0.0507 ± 0.0006 ms 0.987 ± 0.017
bareinterval/basics/cosh 7.26 ± 0.039 μs 7.25 ± 0.031 μs 1 ± 0.0069
bareinterval/basics/exp 4.29 ± 0.05 μs 4.29 ± 0.05 μs 1 ± 0.016
bareinterval/basics/inv 1.06 ± 0.04 μs 1.07 ± 0.02 μs 0.99 ± 0.042
bareinterval/basics/log 2.1 ± 0.03 μs 6.47 ± 0.02 μs 0.325 ± 0.0047
bareinterval/basics/sin 0.0492 ± 0.018 ms 0.0497 ± 0.018 ms 0.99 ± 0.51
bareinterval/basics/sinh 10 ± 0.05 μs 9.99 ± 0.05 μs 1 ± 0.0071
bareinterval/basics/sqrt 1.18 ± 0.021 μs 1.2 ± 0.021 μs 0.983 ± 0.025
bareinterval/basics/tan 28.8 ± 0.28 μs 28.8 ± 0.25 μs 0.999 ± 0.013
bareinterval/basics/tanh 0.296 ± 0.0096 ms 0.295 ± 0.0095 ms 1 ± 0.046
interval/basics/* 3.32 ± 0.05 μs 3.15 ± 0.05 μs 1.05 ± 0.023
interval/basics/+ 1.56 ± 0.041 μs 1.4 ± 0.05 μs 1.11 ± 0.049
interval/basics/- 1.58 ± 0.03 μs 1.42 ± 0.04 μs 1.11 ± 0.038
interval/basics// 2.54 ± 0.04 μs 2.35 ± 0.04 μs 1.08 ± 0.025
interval/basics/abs 0.782 ± 0.06 μs 0.812 ± 0.039 μs 0.963 ± 0.087
interval/basics/acos 5.1 ± 0.05 μs 4.93 ± 0.04 μs 1.03 ± 0.013
interval/basics/asin 5.2 ± 0.049 μs 5.09 ± 0.04 μs 1.02 ± 0.013
interval/basics/atan 14.6 ± 0.18 μs 14.9 ± 0.23 μs 0.982 ± 0.019
interval/basics/cos 0.0687 ± 0.0033 ms 0.0691 ± 0.0035 ms 0.993 ± 0.069
interval/basics/cosh 10.2 ± 0.061 μs 10.2 ± 0.061 μs 1 ± 0.0085
interval/basics/exp 6.73 ± 0.1 μs 6.54 ± 0.079 μs 1.03 ± 0.02
interval/basics/inv 1.94 ± 0.04 μs 1.94 ± 0.04 μs 0.999 ± 0.029
interval/basics/log 8.81 ± 0.069 μs 4.85 ± 0.051 μs 1.82 ± 0.024
interval/basics/sin 0.0682 ± 0.0034 ms 0.0682 ± 0.0036 ms 1 ± 0.073
interval/basics/sinh 13.2 ± 0.07 μs 13.1 ± 0.061 μs 1.01 ± 0.0071
interval/basics/sqrt 2.03 ± 0.04 μs 2.04 ± 0.029 μs 0.995 ± 0.024
interval/basics/tan 0.0393 ± 0.0018 ms 0.0393 ± 0.0018 ms 1 ± 0.066
interval/basics/tanh 0.308 ± 0.0065 ms 0.308 ± 0.0066 ms 0.998 ± 0.03
time_to_load 0.107 ± 0.00095 s 0.107 ± 0.00063 s 0.998 ± 0.011
Memory benchmarks
master a50db83... master / a50db83...
BigFloat MPFI/basics/* 0.424 k allocs: 21.3 kB 0.424 k allocs: 21.3 kB 1
BigFloat MPFI/basics/+ 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/- 0.402 k allocs: 20.4 kB 0.402 k allocs: 20.4 kB 1
BigFloat MPFI/basics// 0.345 k allocs: 18.2 kB 0.345 k allocs: 18.2 kB 1
BigFloat MPFI/basics/abs 0.324 k allocs: 17.4 kB 0.324 k allocs: 17.4 kB 1
BigFloat MPFI/basics/acos 1.24 k allocs: 0.0445 MB 1.24 k allocs: 0.0445 MB 1
BigFloat MPFI/basics/asin 1.08 k allocs: 0.0355 MB 1.08 k allocs: 0.0355 MB 1
BigFloat MPFI/basics/atan 2.14 k allocs: 0.0543 MB 2.14 k allocs: 0.0543 MB 1
BigFloat MPFI/basics/cos 2.9 k allocs: 0.0975 MB 2.9 k allocs: 0.0975 MB 1
BigFloat MPFI/basics/cosh 0.781 k allocs: 0.0322 MB 0.781 k allocs: 0.0322 MB 1
BigFloat MPFI/basics/exp 0.902 k allocs: 0.036 MB 0.902 k allocs: 0.036 MB 1
BigFloat MPFI/basics/inv 0.351 k allocs: 18.4 kB 0.351 k allocs: 18.4 kB 1
BigFloat MPFI/basics/log 0.407 k allocs: 20.6 kB 0.407 k allocs: 20.6 kB 1
BigFloat MPFI/basics/sin 3.18 k allocs: 0.106 MB 3.18 k allocs: 0.106 MB 1
BigFloat MPFI/basics/sinh 0.915 k allocs: 0.0369 MB 0.915 k allocs: 0.0369 MB 1
BigFloat MPFI/basics/sqrt 0.302 k allocs: 16.5 kB 0.302 k allocs: 16.5 kB 1
BigFloat MPFI/basics/tan 2.8 k allocs: 0.098 MB 2.8 k allocs: 0.098 MB 1
BigFloat MPFI/basics/tanh 0.908 k allocs: 0.0362 MB 0.908 k allocs: 0.0362 MB 1
BigFloat bareinterval/basics/* 0.262 k allocs: 26 kB 0.262 k allocs: 26 kB 1
BigFloat bareinterval/basics/+ 0.202 k allocs: 20.4 kB 0.202 k allocs: 20.4 kB 1
BigFloat bareinterval/basics/- 0.202 k allocs: 20.4 kB 0.202 k allocs: 20.4 kB 1
BigFloat bareinterval/basics// 0.1 k allocs: 10.8 kB 0.1 k allocs: 10.8 kB 1
BigFloat bareinterval/basics/abs 0.199 k allocs: 20.1 kB 0.199 k allocs: 20.1 kB 1
BigFloat bareinterval/basics/acos 1.33 k allocs: 0.0741 MB 1.33 k allocs: 0.0741 MB 1
BigFloat bareinterval/basics/asin 1.23 k allocs: 0.0647 MB 1.23 k allocs: 0.0647 MB 1
BigFloat bareinterval/basics/atan 2.04 k allocs: 0.08 MB 2.04 k allocs: 0.08 MB 1
BigFloat bareinterval/basics/cos 2.45 k allocs: 0.185 MB 2.45 k allocs: 0.185 MB 1
BigFloat bareinterval/basics/cosh 1.01 k allocs: 0.0671 MB 1.01 k allocs: 0.0671 MB 1
BigFloat bareinterval/basics/exp 0.802 k allocs: 0.0397 MB 0.802 k allocs: 0.0397 MB 1
BigFloat bareinterval/basics/inv 0.198 k allocs: 20 kB 0.198 k allocs: 20 kB 1
BigFloat bareinterval/basics/log 0.804 k allocs: 0.0694 MB 0.804 k allocs: 0.0694 MB 1
BigFloat bareinterval/basics/sin 2.9 k allocs: 0.197 MB 2.9 k allocs: 0.197 MB 1
BigFloat bareinterval/basics/sinh 0.815 k allocs: 0.0407 MB 0.815 k allocs: 0.0407 MB 1
BigFloat bareinterval/basics/sqrt 0.304 k allocs: 29.9 kB 0.304 k allocs: 29.9 kB 1
BigFloat bareinterval/basics/tan 1.67 k allocs: 0.124 MB 1.67 k allocs: 0.124 MB 1
BigFloat bareinterval/basics/tanh 0.808 k allocs: 0.0399 MB 0.808 k allocs: 0.0399 MB 1
BigFloat interval/basics/* 0.263 k allocs: 26.8 kB 0.263 k allocs: 26.8 kB 1
BigFloat interval/basics/+ 0.203 k allocs: 21.2 kB 0.203 k allocs: 21.2 kB 1
BigFloat interval/basics/- 0.203 k allocs: 21.2 kB 0.203 k allocs: 21.2 kB 1
BigFloat interval/basics// 0.101 k allocs: 11.6 kB 0.101 k allocs: 11.6 kB 1
BigFloat interval/basics/abs 0.2 k allocs: 20.9 kB 0.2 k allocs: 20.9 kB 1
BigFloat interval/basics/acos 1.77 k allocs: 0.115 MB 1.77 k allocs: 0.115 MB 1
BigFloat interval/basics/asin 1.53 k allocs: 0.093 MB 1.53 k allocs: 0.0929 MB 1
BigFloat interval/basics/atan 2.04 k allocs: 0.081 MB 2.04 k allocs: 0.0814 MB 0.996
BigFloat interval/basics/cos 2.45 k allocs: 0.186 MB 2.45 k allocs: 0.186 MB 1
BigFloat interval/basics/cosh 1.01 k allocs: 0.0681 MB 1.01 k allocs: 0.0682 MB 0.998
BigFloat interval/basics/exp 0.803 k allocs: 0.0409 MB 0.803 k allocs: 0.0409 MB 0.998
BigFloat interval/basics/inv 0.199 k allocs: 20.8 kB 0.199 k allocs: 20.8 kB 1
BigFloat interval/basics/log 1.1 k allocs: 0.0977 MB 1.1 k allocs: 0.0977 MB 1
BigFloat interval/basics/sin 2.9 k allocs: 0.198 MB 2.9 k allocs: 0.198 MB 1
BigFloat interval/basics/sinh 0.816 k allocs: 0.0418 MB 0.816 k allocs: 0.042 MB 0.996
BigFloat interval/basics/sqrt 0.758 k allocs: 0.0715 MB 0.758 k allocs: 0.0715 MB 1
BigFloat interval/basics/tan 1.67 k allocs: 0.125 MB 1.67 k allocs: 0.125 MB 1
BigFloat interval/basics/tanh 0.809 k allocs: 0.0411 MB 0.809 k allocs: 0.041 MB 1
bareinterval/basics/* 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/+ 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/- 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics// 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/abs 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/acos 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/asin 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/atan 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/cos 0.56 k allocs: 0.0423 MB 0.56 k allocs: 0.0423 MB 1
bareinterval/basics/cosh 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/exp 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/inv 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/log 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/sin 0.56 k allocs: 0.0423 MB 0.56 k allocs: 0.0423 MB 1
bareinterval/basics/sinh 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/sqrt 2 allocs: 1.62 kB 2 allocs: 1.62 kB 1
bareinterval/basics/tan 0.29 k allocs: 23 kB 0.29 k allocs: 23 kB 1
bareinterval/basics/tanh 1.03 k allocs: 0.0359 MB 1.03 k allocs: 0.0359 MB 1
interval/basics/* 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/+ 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/- 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics// 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/abs 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/acos 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/asin 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/atan 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/cos 0.561 k allocs: 0.0431 MB 0.561 k allocs: 0.0431 MB 1
interval/basics/cosh 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/exp 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/inv 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/log 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/sin 0.561 k allocs: 0.0431 MB 0.561 k allocs: 0.0431 MB 1
interval/basics/sinh 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/sqrt 3 allocs: 2.45 kB 3 allocs: 2.45 kB 1
interval/basics/tan 0.291 k allocs: 24.4 kB 0.291 k allocs: 24.4 kB 1
interval/basics/tanh 1.03 k allocs: 0.0367 MB 1.03 k allocs: 0.0367 MB 1
time_to_load 0.154 k allocs: 11.4 kB 0.154 k allocs: 11.4 kB 1

Reflects the new reverse-mode constraint-propagation API added in this
branch. `IntervalContractors.jl`'s deprecation PR pins
`IntervalArithmetic = "1.1"` to ensure callers see the new exports.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

1 participant