Skip to content

Rebase features into Rewrite#61

Draft
AlCap23 wants to merge 80 commits into
CJM-Layersfrom
main
Draft

Rebase features into Rewrite#61
AlCap23 wants to merge 80 commits into
CJM-Layersfrom
main

Conversation

@AlCap23

@AlCap23 AlCap23 commented May 8, 2026

Copy link
Copy Markdown
Collaborator

Checklist

  • Appropriate tests were added
  • Any code changes were done in a way that does not break public API
  • All documentation related to code changes were updated
  • The new code follows the
    contributor guidelines, in particular the SciML Style Guide and
    COLPRAC.
  • Any new documentation only uses public API

Additional context

Add any other context about the problem here.

rlampel and others added 30 commits March 9, 2026 16:25
Updating FIM from previous experiments
Added ModelingToolkit benchmark library
Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.18.0 to 1.45.2.
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](crate-ci/typos@v1.18.0...v1.45.2)

---
updated-dependencies:
- dependency-name: crate-ci/typos
  dependency-version: 1.45.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bump version from 0.0.2 to 0.0.3
…typos-1.45.2

Bump crate-ci/typos from 1.18.0 to 1.45.2
ChrisRackauckas and others added 27 commits June 4, 2026 12:01
…all groups

Keep the centralized SciML sublibrary-tests.yml@v1 form (SublibraryCI.yml is
untouched) and make every sublibrary group/version actually run.

The reusable workflow runs the ROOT test suite with GROUP set to a sublibrary's
CI group ("<pkg>" for the Core group, "<pkg>_<grp>" for a named group), but the
root test/runtests.jl had no GROUP dispatch, so sublibrary legs silently ran the
main-package suite instead of the sublibrary tests. Fix it by:

- Adding a GROUP dispatch to test/runtests.jl that, when GROUP names a lib/<sub>,
  activates that sublibrary's test env, develops its local [sources] path deps on
  Julia < 1.11, and runs Pkg.test(<sub>) forwarding GROUP. GROUP="All"/"Corleone"
  keep running the main Corleone suite.
- Adding lib/CorleoneOED/test/test_groups.toml ([Core] versions ["1.11","lts"])
  and lib/OptimalControlBenchmarks/test/test_groups.toml (same), encoding the
  groups/versions the old bespoke CI ran.
- Adding the GROUP-parsing shim to each sublibrary runtests.jl so GROUP="<pkg>"
  maps to Core and "<pkg>_<grp>" maps to <grp>, driving the existing dispatch;
  "All" still works for local runs.

Verified by running SciML/.github compute_affected_sublibraries.jl: a change to
lib/CorleoneOED/src emits CorleoneOED on 1.11 and lts; lib/OptimalControlBenchmarks
emits OptimalControlBenchmarks on 1.11 and lts. The root dispatch + shim then runs
the full CorleoneOED suite (1D, Lotka, Lotka SVD) under GROUP=CorleoneOED.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…test-groups

ci: add sublibrary test_groups.toml so centralized SublibraryCI runs all groups
Replace the bespoke per-sublibrary test_groups.toml (which only declared a
narrowed [Core] versions = ["1.11", "lts"] matrix and suppressed QA entirely)
with the SciML standard Core/QA groups.

Both CorleoneOED and OptimalControlBenchmarks are small suites with no GPU
tests and no isolated-env/timeout need, so deleting test_groups.toml lets the
reusable workflow's defaults apply: Core on [lts, 1.11, 1, pre] and QA on [1].

The sublibrary runtests.jl now dispatch on the parsed standard group:
- Core (+All): functional/correctness tests (folds the old Core).
- QA (+All): Aqua.test_all (Aqua was already a declared but unused test dep).

The GROUP prefix-strip shim is kept so the centralized sublibrary-tests.yml@v1
GROUP="<pkg>" -> Core and GROUP="<pkg>_QA" -> QA mapping drives dispatch, while
GROUP="All" (local Pkg.test default) still runs everything.

No GPU tests exist, so no [GPU] test_groups.toml is added. These sublibraries
never had macOS CI legs, so none were dropped.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…-sublibrary-test-groups

ci: standardize sublibrary test groups to Core/QA (fold custom groups)
Switch SublibraryCI from the GROUP-dispatch sublibrary-tests.yml@v1 (which
needs a root runtests.jl sublib dispatcher) to the project model: list lib/*
and run each as a tests.yml@v1 caller with project: lib/X. The reusable
workflow transitively git-develops the sublib's in-repo [sources] deps, so no
per-repo dispatcher is needed.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop coverage: false (cargo-culted from OrdinaryDiffEq, which disables it
only to avoid Codecov flooding at 56-sublibrary scale). For this repo the
sublib tests are the only thing covering the sublib's src, so collect it --
with coverage-directories pointed at the sublibrary (lib/X/src,ext) rather
than the repo-root default (src,ext).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Don't assume python3 is on the runner. jq is preinstalled on GitHub-hosted
ubuntu runners (where the list-sublibraries job runs) and builds the JSON
array directly.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jq isn't guaranteed on self-hosted runners any more than python3 is. lib/*
directory names have no JSON-special characters, so build the array with
plain shell quoting and depend on neither.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The list-lib/*-and-matrix logic moved into the reusable
sublibrary-project-tests.yml in SciML/.github, so this caller collapses to
just the branch triggers, concurrency, and a single `uses:`. No duplicated
detection logic per repo.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Part of bringing this repo onto the full centralized CI setup (SciML/.github
@v1): remove retired CompatHelper (Dependabot drives [compat]) and/or add the
centralized Documenter preview cleanup.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ect-model

ci: uniformize onto centralized CI (project-model SublibraryCI + cleanup)
Adds the missing SciML standard centralized caller workflows.

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The reusable SciML/.github downgrade workflows now always use
allow_reresolve: false and no longer accept an allow-reresolve input
(see SciML/.github#71). Remove the now-invalid input so this caller keeps
working once @v1 is retagged.

Co-authored-by: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- OrdinaryDiffEqBDF, OrdinaryDiffEqTsit5: "1" → "1, 2"
- SciMLBase: "2" → "2, 3" across all sub-packages
- Migrate DEProblem/DEAlgorithm → AbstractDEProblem/AbstractDEAlgorithm
- Migrate SciMLBase.DEAlgorithm → SciMLBase.AbstractDEAlgorithm

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
* ci: uniformize monorepo structure to OrdinaryDiffEq canonical style

Thread a repo-specific group-env-name (CORLEONE_TEST_GROUP) consistently
through the sublibrary CI callers and runtests, GROUP-dispatch the root CI,
and fix the root test harness so Pkg.test() on the root works.

- SublibraryCI.yml: pass group-env-name CORLEONE_TEST_GROUP + check-bounds auto.
- DowngradeSublibraries.yml: add group-env-name CORLEONE_TEST_GROUP / value Core.
- Sublib runtests (CorleoneOED, OptimalControlBenchmarks): read
  CORLEONE_TEST_GROUP (fall back to GROUP, then All).
- CI.yml: GROUP-dispatched matrix over the root's own Core/QA groups
  (no hardcoded sublibrary rows; sublibs covered by the project model).
- test/runtests.jl: _detect_sublibrary_group dispatcher sets
  CORLEONE_TEST_GROUP on sublib hand-off, transitive [sources] develop on
  Julia <1.11, Core/QA root groups; drop dead `using JET`.
- Project.toml: add Pkg to [extras]/[compat]/[targets].test (root runtests
  uses Pkg; matches the canonical root and keeps Aqua deps_compat green).

The leaf->root [sources] graph (sublibs depend on Corleone) is preserved;
no root->leaf edges are added since the root does not re-export the sublibs.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: remove self-import of OptimalControlBenchmarks in its own module

The module's source file did `using OptimalControlBenchmarks` inside the
`module OptimalControlBenchmarks ... end` block, importing itself. Remove it.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore: canonicalize LICENSE files to LICENSE.md

Rename root LICENSE -> LICENSE.md and lib/CorleoneOED/LICENSE -> LICENSE.md
(content preserved via git mv), and add lib/OptimalControlBenchmarks/LICENSE.md
so every component carries an MIT LICENSE.md, matching the OrdinaryDiffEq.jl
monorepo layout.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: canonical component READMEs for sublibraries

Rewrite lib/CorleoneOED/README.md (was pointing at the stale external
AlCap23/CorleoneOED.jl CI badge) and add lib/OptimalControlBenchmarks/README.md,
both using the canonical Corleone.jl monorepo component README template
(Zulip + Global Docs + ColPrac + SciML Code Style badges and the
'component of the Corleone.jl monorepo' wording), matching OrdinaryDiffEq.jl.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: add .typos.toml/.codecov.yml and canonical TagBot with subpackage matrix

- Add .typos.toml with [default.extend-words] (matches SpellCheck/typos workflow)
- Add .codecov.yml with comment: false
- Convert TagBot.yml to the canonical OrdinaryDiffEq.jl form: top-level
  permissions block, workflow_dispatch.inputs.lookback default '3', the root
  TagBot-Corleone job, and a TagBot-Subpackages matrix (fail-fast: false) that
  tags the registered sublibrary CorleoneOED via subdir lib/CorleoneOED.
  OptimalControlBenchmarks is not registered in General, so it is excluded.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Remove self-import of OptimalControlBenchmarks in run_benchmarks.jl

run_benchmarks.jl is include()d into module OptimalControlBenchmarks, so the
line `using OptimalControlBenchmarks` executed inside the module's own
namespace and hard-failed to load (ArgumentError: Package
OptimalControlBenchmarks not found). The symbols it would import are already in
scope inside the module, so the line is simply removed.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: isolate root + CorleoneOED QA into canonical test/qa sub-env

Move the Aqua code-quality checks for the root Corleone package and the
CorleoneOED sublibrary out of the main test target into dedicated test/qa
Pkg sub-environments, matching the canonical OrdinaryDiffEq structure
(lib/<Name>/test/qa).

Each package now has:
- test/qa/Project.toml: Aqua + the package (+ in-repo Corleone sibling) + Test,
  with relative [sources] and [compat] for every dep plus julia = "1.10".
- test/qa/qa.jl: the Aqua.test_all testset.
- runtests.jl: an activate_qa_env() helper that activates test/qa, develops the
  package (and sibling) by path so the PR branch code is tested on Julia < 1.11
  where [sources] is ignored, then instantiates. The QA branch calls it and then
  @safetestset includes qa/qa.jl.

Aqua (and the vestigial, unused JET entry in the root) are removed from each
main Project.toml's [compat]/[extras]/[targets].test so the QA tooling deps no
longer participate in the main test resolve. No QA coverage changed: each
package still runs exactly Aqua, with identical pass/fail behavior (verified the
CorleoneOED qa env resolves and Aqua.test_all produces the same 6-pass/5-fail
result as the pristine base, confirming the pre-existing Aqua failures are
unchanged by this restructure).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: isolate OptimalControlBenchmarks QA into canonical test/qa sub-env

Move the Aqua code-quality check for the OptimalControlBenchmarks sublibrary
out of the main test target into a dedicated test/qa Pkg sub-environment,
matching the canonical OrdinaryDiffEq structure (lib/<Name>/test/qa) and the
root + CorleoneOED migration in the preceding commit.

- test/qa/Project.toml: Aqua + OptimalControlBenchmarks + in-repo Corleone
  sibling + Test, with relative [sources] and [compat] for every dep plus
  julia = "1.10".
- test/qa/qa.jl: the Aqua.test_all testset.
- runtests.jl: activate_qa_env() activates test/qa, develops the package and
  the Corleone sibling by path (for Julia < 1.11 where [sources] is ignored),
  then instantiates; the QA branch calls it and @safetestset includes qa/qa.jl.

Aqua is removed from the main Project.toml's [compat]/[extras]/[targets].test
so the QA tooling deps no longer participate in the main test resolve. QA
coverage is unchanged: the package still runs exactly Aqua.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(CorleoneOED): add test_groups.toml pinning Core/QA version matrix

Make the centralized SublibraryCI (sublibrary-project-tests.yml@v1) discover
this sublibrary's groups explicitly instead of falling back to the default
shape. Core runs on [lts, 1, pre]; QA (Aqua) runs on [lts, 1]. Matches the
canonical OrdinaryDiffEq.jl per-sublibrary test/test_groups.toml convention.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(OptimalControlBenchmarks): add test_groups.toml pinning Core/QA matrix

Make the centralized SublibraryCI (sublibrary-project-tests.yml@v1) discover
this sublibrary's groups explicitly instead of the default shape. Core runs on
[lts, 1, pre]; QA (Aqua) runs on [lts, 1]. Matches the canonical
OrdinaryDiffEq.jl per-sublibrary test/test_groups.toml convention.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: align root CI version matrix with canonical group matrix

Core runs on [lts, 1, pre]; QA (Aqua) runs on [lts, 1] (drops the redundant
1.11 row and the pre/1.11/lts QA excludes, adding lts to QA). Mirrors the
test_groups.toml matrix used by the sublibraries.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: canonical group-folder layout for the root package

Make the root test suite conform to the OrdinaryDiffEq canonical
group-folder model: every test lives in exactly one test/<group>/ folder;
no-extra-dep groups run in the light main test env as part of GROUP=All,
while dep-adding groups carry their own isolated test/<group>/Project.toml
that runtests.jl activates and that the CI matrix runs explicitly.

- Move the loose root tests into test/core/ (Core group, light env).
- Promote the example scripts (test/examples/) into a dep-adding "Examples"
  group with test/examples/Project.toml carrying the heavy optimal-control
  stack (ModelingToolkit, Ipopt/OptimizationMOI, SciMLSensitivity,
  ForwardDiff, OrdinaryDiffEqBDF) + Corleone via [sources].
- runtests.jl: GROUP=All/Core run the light Core group; Examples and QA each
  activate their own test/<group> env.
- Make the main [extras]/[targets].test LIGHT: drop the heavy test-only deps
  (now provided by the Examples group env) and their stale [compat] entries.
- test/test_groups.toml pins the canonical version matrix: Core/Examples on
  [lts,1,pre], QA on [lts,1]; CI.yml matrix kept consistent (adds Examples).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Declare Pkg in test deps and group CorleoneOED core tests

CorleoneOED and OptimalControlBenchmarks test/runtests.jl both `using Pkg`
to activate the isolated QA env, but Pkg was not declared in [extras] or
[targets].test. Under Pkg.test the test environment doesn't get Pkg by
default, so `using Pkg` failed at load time and blocked the entire sublib
test suites before any test ran. Add Pkg to both [extras] and
[targets].test.

Also move CorleoneOED's Core test files (1d_oed.jl, lotka_oed.jl,
lotka_oed_svd.jl) into test/core/ and update the runtests.jl includes,
matching the uniform monorepo test layout.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: canonical TagBot thin caller + downgrade skip/version cleanup

- TagBot.yml: replace verbose JuliaRegistries/TagBot steps with the
  centralized SciML/.github tagbot.yml@v1 thin caller, plus a
  tagbot-subpackages matrix over registered lib sublibraries
  (only CorleoneOED; OptimalControlBenchmarks is not yet registered).
- Downgrade.yml: drop hand-listed stdlib skip (Pkg,TOML) now that the
  central workflow auto-populates skip; bump julia-version 1.10 -> lts.
- DowngradeSublibraries.yml: drop hand-listed skip (stdlibs + Corleone
  caller pkg) now auto-populated by the central workflow.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…oml) (#81)

Replace the hand-maintained group x version matrix in the root CI test job
with the thin grouped-tests.yml@v1 caller, which computes the matrix from
test/test_groups.toml. The non-default check-bounds: auto and
coverage-directories: src inputs are preserved; group-env-name stays the
default GROUP (which root test/runtests.jl reads).

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- Replace RNG with StableRNG
- Replace equality check with isapprox
Fix dimension error of F_init in edge case
Replace the hand-written GROUP dispatcher in test/runtests.jl with a single
SciMLTesting.run_tests call (explicit-args mode, the monorepo shape). The Core
body @safetestset-includes the existing test/core/ files; Examples and QA become
env-bearing group specs that activate test/examples and test/qa (the v1.2
activate_group_env replicates the old activate_examples_env/activate_qa_env). A
curated all = ["Core"] keeps GROUP="All" running only the light Core group, and
sublib_env = "CORLEONE_TEST_GROUP" + lib_dir keep sublibrary routing semantics.

The explicit sublibrary pre-step (detect_sublibrary_group + the Julia < 1.11
transitive [sources] develop walk + withenv("CORLEONE_TEST_GROUP") Pkg.test) is
preserved verbatim ahead of the run_tests call, so the sublibrary Pkg.test path
is byte-for-byte unchanged. The exact set of tests run under each GROUP value
(All, Core, Examples, QA, and sublibrary names) is unchanged.

Add SciMLTesting to the root test target (keep Pkg + SafeTestsets, since the
sublib pre-step still uses Pkg) and to the examples/qa sub-environments. Widen
SafeTestsets compat to "0.1, 1". test_groups.toml is unchanged.

Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@AlCap23

AlCap23 commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator Author

@copilot resolve the merge conflicts in this pull request

Copilot AI commented Jun 15, 2026

Copy link
Copy Markdown

@AlCap23 I can’t apply these changes because the pull request’s branch is the repository’s default branch, which I’m not allowed to push to directly.

You can ask me to create a new pull request with the requested changes instead and I'll open a separate PR on a new branch.

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.

7 participants