[Dev] Split src into submodules (ct-conventions MOD1, MOD2), keeping the public exports
Mantenedores costumam responder em até 1 dia
@ocots já está trabalhando nisso.
Desde 7/11/2026.
Avaliação
Esta issue ainda não foi avaliada.
Descrição
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.
- Linguagem predominante
- Julia
- Estrelas
- 13
- Forks
- 1
- Merge médio
- 3h 9min
- PRs com merge (30d)
- 47
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de control-toolbox/OptimalControlProblems.jl
-
[Cron] cron-convergenceAbertacron-convergence
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 28/100
control-toolbox/OptimalControlProblems.jl#418 ·
Mantenedores costumam responder em até 1 dia
-
[Metadata] Reference solutions with how they were obtained: typed references and APITalvez já em andamento @ocots assumiu hoje. Abertafeature
control-toolbox/OptimalControlProblems.jl#409 · 2 comentários · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Tests] Remove the MadNLP barrier bypass once CTSolvers ≥ 0.7.1 is usedTalvez já em andamento @ocots assumiu hoje. Aberta
control-toolbox/OptimalControlProblems.jl#398 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Dev] One source of truth per problem, and the equality of the modelings checked by computationTalvez já em andamento @ocots assumiu há 1 dia. Aberta
control-toolbox/OptimalControlProblems.jl#391 · 1 comentário · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
Restore the full CI matrix (Julia 1.10, macOS, Windows) after the reorganisationTalvez já em andamento @ocots assumiu há 2 dias. Aberta
control-toolbox/OptimalControlProblems.jl#344 · 1 comentário · 1 responsável ·
Mantenedores costumam responder em até 1 dia
Todas as issues de control-toolbox/OptimalControlProblems.jl
Issues semelhantes
-
lux
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
JuliaGraphs/GraphNeuralNetworks.jl#732 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 1 dia
-
erfinv(::Float16) and erfcinv(::Float16) are wrong for abs(x) <= 0.75 (erfinv(Float16(0)) == 0.2201)Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
JuliaMath/SpecialFunctions.jl#571 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100