Skip to content

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 15 May 20:17
· 57 commits to main since this release
3753e32

ExaModels v0.10.0

Diff since v0.9.7

Release Notes

This is a feature-and-API release. The legacy variable / parameter /
objective / constraint / constraint! / subexpr API still works (now
routed through a deprecation wrapper) but is scheduled for removal in v0.11.

Breaking changes

  • New functional builder API. Each add_* call returns
    (new_core, handle) and the ExaCore is immutable:
    c, x = add_var(c, 10), c, _ = add_obj(c, x[i]^2 for i in 1:10).
    Macro forms (@add_var, @add_par, @add_obj, @add_con,
    @add_con!, @add_expr) rebind the local core for the same effect.
  • ExaCore() now returns a LegacyExaCore mutable wrapper and emits a
    deprecation warning. Use ExaCore(concrete = Val(true)) to obtain the
    immutable core required for the new API and for AOT compilation.
  • Naming change: ParData (e.g. ParSourceDataSource,
    ParIndexedDataIndexed).
  • Removed extensions: ExaModelsCUDA, ExaModelsAMDGPU,
    ExaModelsLinearAlgebra. CUDA / AMDGPU now run through
    ExaModelsKernelAbstractions + Adapt; load CUDA or AMDGPU in your
    own project as before.

See docs/src/upgrade.md for line-by-line migration recipes.

New features

  • Oracle subsystem for callback-defined nonlinear blocks:
    VectorNonlinearOracle, ScalarNonlinearOracle, OracleEvaluator,
    add_eval, and the high-level embed_oracle wrapper. Supports both
    explicit (jac! / hess!) and matrix-free (jvp! / vjp! / hvp!)
    derivatives, with adapt::Val routing for GPU- vs. CPU-only callbacks.
  • Two-stage optimization via TwoStageExaCore(ns) and the
    EachScenario() marker on add_var / add_par / add_con. All
    scenarios fuse into a single GPU-friendly model; per-scenario layout is
    exposed via get_nscen, get_var_scen, get_con_scen.
  • Apple Metal backend through the new ExaModelsMetal extension.
  • AOT compilation via juliac --trim=safe: ExaModel(core) is now
    type-stable and dispatches to ExaModel or ExaModelWithOracle
    depending on whether oracles are registered.
  • New constraint augmentation syntax: g[idx] += expr inside add_con!,
    plus multi-dim empty-constraint construction via add_con(core, dims...).
  • add_par now supports a dims API matching add_var.
  • Pretty-printing for AST node types and the model/core summary.

Tooling and infrastructure

  • Adapt.jl is now a direct dependency and powers cross-backend array
    conversion (replaces the per-backend extensions).
  • Benchmark workflow runs on PRs across CPU / CUDA / AMDGPU / oneAPI and
    posts a comparison table back to the PR.
  • New [compat] entries: Adapt = "4", Metal = "1.9".

Compat

julia ≥ 1.9. Other compat bounds unchanged from v0.9.7 except the
additions above and the removal of AMDGPU / CUDA weakdeps.

Merged pull requests:

Closed issues:

  • register variable issue (#209)
  • ExaModels AOT compilation (#245)
  • Extension packages (#246)
  • Better document constraint! (#247)
  • Linear algebra extension: issue on orbit transfer use case (#250)