[Dev] Split src into submodules (ct-conventions MOD1, MOD2), keeping the public exports
Les mainteneurs répondent en général sous 1 jour
@ocots y travaille déjà.
Depuis le 7/11/2026.
Évaluation
Cette issue n'a pas encore été évaluée.
Description
Agents: read the guide for agents in #310 first (order, difficulty, how to claim an issue, working method).
Goal
Split src/OptimalControlProblems.jl (683 lines: modelings, discovery of the problems, metadata schema and loading, references, parameters, initial guesses, aliases of CTModels) into submodules, one per responsibility, following ct-conventions (MOD1, MOD2), so that the package file only declares. Submodules also hide what users do not need: internals stay reachable as OptimalControlProblems.<Submodule>.f and no longer appear at the top level.
Decisions (maintainer, 2026-11-07)
- The package keeps its exports.
MOD8(no top-level export) is written for the internalCT*packages; OptimalControlProblems is user-facing, like OptimalControl.jl.using OptimalControlProblems; beam(OptimalControlBackend())keeps working. No breaking change of the public API. - Problems and public functions live in submodules that export them, and the package re-exports them. The public API is the union of the submodule exports re-exported by the package; what a submodule does not export stays qualified (
OptimalControlProblems.Metadata._references…). The extensions keep defining methods on the same functions (OptimalControlProblems.beamis the same function asOptimalControlProblems.<Submodule>.beam). - Wait for #408 (documentation rewrite): its API reference is generated per module (
docs/api_reference.jl). Start only once #408 is merged.
Proposed split (to confirm when taking the issue)
| Submodule | What moves there |
|---|---|
Modelings/ |
AbstractModelBackend, JuMPBackend, OptimalControlBackend, OptimalControlScalarizedBackend, MODELING_SPECS and what derives from it |
Catalogue/ |
discovery of the problems (make_list_of_problems, PROBLEM_NAMES), the problem functions (beam…), problems, status, the draft warning |
Metadata/ |
schema, loading of ext/MetaData/, problem_metadata, grid_size_data, parameters_data, initial_guess_data, merge |
References/ |
SAME_SOLUTION, loading of ext/MetaData/references/, reference_objective, solution_kind, the analytic solutions (solutions.jl); later the typed references of #409 |
Problems/ |
Problem (problem.jl), model, initial_guess, metadata, solution, the aliases of CTModels (state, control, objective…) |
Order of the submodules follows their dependencies (MOD7, one-way). The precompilation dependencies (Base.include_dependency on ext/ and the reference files) move with the code that reads them.
Order
- After #408 is merged.
- Before part 2 of #409, which adds
AbstractReferenceand its types: they go directly intoReferences/. Part 1 of #409 (#412) only touchestest/and is independent.
Done when
-
src/OptimalControlProblems.jlonly declares: imports, includes ofsrc/<Name>/<Name>.jl,using .<Name>, re-exports. - Each submodule follows
MOD1/MOD2, exports its public part. -
names(OptimalControlProblems)is unchanged (a test compares it with the list before the move, generated, not hand-written), and every internal used by the tests, tools, extensions and docs is reached through its submodule. - Extensions,
tools/,test/anddocs/updated; full test suite and documentation build green. - A README in
src/saying what each submodule holds (developer documentation lives next to the code, #307).
Related: #409 (typed references), #408 (documentation), #310.
- Langage dominant
- Julia
- Étoiles
- 13
- Forks
- 1
- Merge moyen
- 3 h 9 min
- PR mergées (30 j)
- 47
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de control-toolbox/OptimalControlProblems.jl
-
[Cron] cron-convergenceOuvertecron-convergence
Difficulté 4/5 3-5 jours Accessibilité débutants 28/100
control-toolbox/OptimalControlProblems.jl#418 ·
Les mainteneurs répondent en général sous 1 jour
-
[Metadata] Reference solutions with how they were obtained: typed references and APIPeut-être pris @ocots l’a pris aujourd’hui. Ouvertefeature
control-toolbox/OptimalControlProblems.jl#409 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
[Tests] Remove the MadNLP barrier bypass once CTSolvers ≥ 0.7.1 is usedPeut-être pris @ocots l’a pris aujourd’hui. Ouverte
control-toolbox/OptimalControlProblems.jl#398 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
[Dev] One source of truth per problem, and the equality of the modelings checked by computationPeut-être pris @ocots l’a pris il y a 1 jour. Ouverte
control-toolbox/OptimalControlProblems.jl#391 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Restore the full CI matrix (Julia 1.10, macOS, Windows) after the reorganisationPeut-être pris @ocots l’a pris il y a 2 jours. Ouverte
control-toolbox/OptimalControlProblems.jl#344 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de control-toolbox/OptimalControlProblems.jl
Issues similaires
-
lux
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
JuliaGraphs/GraphNeuralNetworks.jl#732 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
erfinv(::Float16) and erfcinv(::Float16) are wrong for abs(x) <= 0.75 (erfinv(Float16(0)) == 0.2201)Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
JuliaMath/SpecialFunctions.jl#571 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100