Skip to content

refactor: weak-dependency policy for NLPModels, ADNLPModels, ExaModels, KernelAbstractions#156

Merged
ocots merged 1 commit into
mainfrom
refactor/nlp-weak-deps
Jun 27, 2026
Merged

refactor: weak-dependency policy for NLPModels, ADNLPModels, ExaModels, KernelAbstractions#156
ocots merged 1 commit into
mainfrom
refactor/nlp-weak-deps

Conversation

@ocots

@ocots ocots commented Jun 27, 2026

Copy link
Copy Markdown
Member

Summary

Demotes NLPModels, ADNLPModels, ExaModels, and KernelAbstractions from hard dependencies to weak dependencies. SolverCore remains a hard dependency.

This is Part B of the CTSolvers prep-for-integrators roadmap.


New extensions

Extension Trigger(s) Provides
CTSolversADNLPModels ADNLPModels Strategies.metadata(ADNLP{P}), build_adnlp_modeler, __is_adbackend_type/instance overrides
CTSolversExaModels ExaModels + KernelAbstractions Strategies.metadata(Exa{P}), build_exa_modeler

Existing solver extensions (CTSolversIpopt, CTSolversKnitro, CTSolversMadNLP, CTSolversMadNCL, CTSolversUno) now co-trigger on NLPModels since they dispatch on NLPModels.AbstractNLPModel in their solve methods.


Core changes

Tag-dispatch stub pattern (same as Ipopt)

  • adnlp.jl: build_adnlp_modeler stub + __get_adnlp_available_backends(::Type{<:AbstractTag}) stub; Strategies.metadata stub throws ExtensionError when ADNLPModels is not loaded.
  • exa.jl: ExaTag added; build_exa_modeler stub; Strategies.metadata stub.
  • validation.jl: validate_backend_override rewritten using __is_adbackend_type / __is_adbackend_instance tag-dispatch helpers, removing the direct ADNLPModels.ADBackend reference from core. Both helpers are overridden to true by CTSolversADNLPModels.

Removed direct imports

  • src/DOCP/DOCP.jl, src/Optimization/Optimization.jl, src/Solvers/Solvers.jl: removed using NLPModels
  • src/Modelers/Modelers.jl: removed ADNLPModels, ExaModels, KernelAbstractions
  • src/Solvers/common_solve_api.jl: mid-level solve stub is now untyped on the nlp argument
  • src/DOCP/building.jl: removed ::NLPModels.AbstractNLPModel return annotation from nlp_model

Tests

Three modeler test files (test_coverage_modelers.jl, test_enhanced_options.jl, test_exa_gpu.jl) previously relied on ExaModels being loaded transitively by another test in the same session. Explicit using ExaModels (and KernelAbstractions) imports added to make them self-contained.

All 2445 tests pass.

…s, KernelAbstractions

Move NLPModels, ADNLPModels, ExaModels, and KernelAbstractions from hard
dependencies ([deps]) to weak dependencies ([weakdeps]). SolverCore remains
a hard dependency.

## New extensions

- ext/CTSolversADNLPModels.jl  triggered by ADNLPModels
  - real Strategies.metadata(ADNLP{P}), build_adnlp_modeler, and
    __is_adbackend_type / __is_adbackend_instance helpers
- ext/CTSolversExaModels.jl    triggered by ExaModels + KernelAbstractions
  - real Strategies.metadata(Exa{P}), build_exa_modeler

## Project.toml

- NLPModels, ADNLPModels, ExaModels, KernelAbstractions moved to [weakdeps]
- CTSolversIpopt, CTSolversKnitro, CTSolversMadNLP, CTSolversMadNCL,
  CTSolversUno now co-trigger on NLPModels (they dispatch on
  NLPModels.AbstractNLPModel in their solve methods)
- CTSolversExaModels triggers on [ExaModels, KernelAbstractions]

## Core stubs (tag-dispatch pattern, same as Ipopt)

- adnlp.jl: build_adnlp_modeler stub + __get_adnlp_available_backends(tag)
  stub; metadata stub throws ExtensionError when ADNLPModels not loaded
- exa.jl: ExaTag added; build_exa_modeler stub; metadata stub
- validation.jl: validate_backend_override rewritten using
  __is_adbackend_type / __is_adbackend_instance tag-dispatch helpers
  (removes direct ADNLPModels.ADBackend reference from core)

## Removed direct imports from core

- src/DOCP/DOCP.jl, src/Optimization/Optimization.jl,
  src/Solvers/Solvers.jl: removed using NLPModels
- src/Modelers/Modelers.jl: removed ADNLPModels, ExaModels, KernelAbstractions
- src/Solvers/common_solve_api.jl: solve stub now untyped on nlp argument
- src/DOCP/building.jl: removed NLPModels.AbstractNLPModel return annotation

## Tests

- test_coverage_modelers.jl, test_enhanced_options.jl, test_exa_gpu.jl:
  add explicit ExaModels (+ KernelAbstractions) imports so tests are
  self-contained after weak-dep promotion (2445 tests pass)
@ocots
ocots merged commit 7ed349b into main Jun 27, 2026
7 checks passed
@ocots
ocots deleted the refactor/nlp-weak-deps branch June 27, 2026 12:04
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