refactor: weak-dependency policy for NLPModels, ADNLPModels, ExaModels, KernelAbstractions#156
Merged
Merged
Conversation
…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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Demotes
NLPModels,ADNLPModels,ExaModels, andKernelAbstractionsfrom hard dependencies to weak dependencies.SolverCoreremains a hard dependency.This is Part B of the CTSolvers prep-for-integrators roadmap.
New extensions
CTSolversADNLPModelsADNLPModelsStrategies.metadata(ADNLP{P}),build_adnlp_modeler,__is_adbackend_type/instanceoverridesCTSolversExaModelsExaModels+KernelAbstractionsStrategies.metadata(Exa{P}),build_exa_modelerExisting solver extensions (
CTSolversIpopt,CTSolversKnitro,CTSolversMadNLP,CTSolversMadNCL,CTSolversUno) now co-trigger onNLPModelssince they dispatch onNLPModels.AbstractNLPModelin theirsolvemethods.Core changes
Tag-dispatch stub pattern (same as Ipopt)
adnlp.jl:build_adnlp_modelerstub +__get_adnlp_available_backends(::Type{<:AbstractTag})stub;Strategies.metadatastub throwsExtensionErrorwhenADNLPModelsis not loaded.exa.jl:ExaTagadded;build_exa_modelerstub;Strategies.metadatastub.validation.jl:validate_backend_overriderewritten using__is_adbackend_type/__is_adbackend_instancetag-dispatch helpers, removing the directADNLPModels.ADBackendreference from core. Both helpers are overridden totruebyCTSolversADNLPModels.Removed direct imports
src/DOCP/DOCP.jl,src/Optimization/Optimization.jl,src/Solvers/Solvers.jl: removedusing NLPModelssrc/Modelers/Modelers.jl: removedADNLPModels,ExaModels,KernelAbstractionssrc/Solvers/common_solve_api.jl: mid-levelsolvestub is now untyped on thenlpargumentsrc/DOCP/building.jl: removed::NLPModels.AbstractNLPModelreturn annotation fromnlp_modelTests
Three modeler test files (
test_coverage_modelers.jl,test_enhanced_options.jl,test_exa_gpu.jl) previously relied onExaModelsbeing loaded transitively by another test in the same session. Explicitusing ExaModels(andKernelAbstractions) imports added to make them self-contained.All 2445 tests pass.