Skip to content

Gemseo support - #88

Merged
chrislupp merged 16 commits into
MDO-Standards:developfrom
FrancoisGallard:gemseo
Sep 19, 2026
Merged

chrislupp merged 16 commits into
MDO-Standards:developfrom
FrancoisGallard:gemseo

Conversation

@FrancoisGallard

Copy link
Copy Markdown

Consume Philote client API as GEMSEO discipline
Expose GEMSEO disciplines (including MDAs, processes like Chains) as Philote Disciplines
Examples of OpenMDAO interoperability
Some documentation (which I did not manage to compile as npm install fails on my machine, Debian WSL)

cc @jgiret @chrislupp

@codecov

codecov Bot commented Sep 15, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@FrancoisGallard

Copy link
Copy Markdown
Author

@chrislupp : can you please give some info on how to compile the doc ? I just did npm install under Debian but it fails to install dependencies

`removed 116 packages, changed 62 packages, and audited 1306 packages in 34s

434 packages are looking for funding
run npm fund for details

43 vulnerabilities (3 low, 27 moderate, 11 high, 2 critical)

To address issues that do not require attention, run:
npm audit fix

To address all issues (including breaking changes), run:
npm audit fix --force

Run npm audit for details.`

npm audit fix --force
failed too

@chrislupp chrislupp added the enhancement New feature or request label Sep 15, 2026
@chrislupp

Copy link
Copy Markdown
Collaborator

hmm, interesting. I usually do npm install or bun install (more recently I prefer bun). I can try to take a look at it tonight after work. I think this repo might actually need an update to the docs dependencies (security). I'll check that as well.

@FrancoisGallard

Copy link
Copy Markdown
Author

Thanks, bun install works, what command should I type then to generate and serve the doc?
Yes it seems that npm audit finds a lot of vulnerabilities

@chrislupp

Copy link
Copy Markdown
Collaborator

I believe it would be "bun run dev"

@FrancoisGallard

Copy link
Copy Markdown
Author

Thanks, bun run start works, bun run dev does not.

@FrancoisGallard

Copy link
Copy Markdown
Author

@AntoineD You may want to have a look & make comments

@chrislupp
chrislupp self-requested a review September 15, 2026 19:09
@chrislupp

Copy link
Copy Markdown
Collaborator

as a heads up, we are going to have to change the base branch from main to develop. I did start the review last night, but I suspect that there will have to be at least a deconflict after the branch change. Let me know if you want help with it or want me to change the base branch for you.

@FrancoisGallard

Copy link
Copy Markdown
Author

as a heads up, we are going to have to change the base branch from main to develop. I did start the review last night, but I suspect that there will have to be at least a deconflict after the branch change. Let me know if you want help with it or want me to change the base branch for you.

Sure, sorry for that. I can do it.

FrancoisGallard and others added 5 commits September 17, 2026 15:27
Add philote_mdo.gemseo, providing PhiloteDiscipline (a GEMSEO
Discipline that calls a remote Philote-MDO server) and
GEMSEOtoPhiloteDiscipline (the opposite direction, serving a GEMSEO
discipline over gRPC). Add matching examples (Paraboloid,
OpenAeroStruct, and the Sellar problem driven from OpenMDAO) and
integration tests under tests/, adapted to the current
OpenMdaoSubProblem() + add_group() construction pattern. Also add the
gemseo extra to pyproject.toml, add gemseo to the CI test dependencies,
and fix proto compilation on Windows.
Add a "Working with GEMSEO" section with two tutorials, ported from
the retired Jupyter Book docs: using PhiloteDiscipline to optimize a
remote Paraboloid discipline, and coupling OpenAeroStruct with GEMSEO
through an OpenMDAO sub-problem. Enable @docusaurus/theme-mermaid so
the flowchart diagrams on these pages render.

Note: docs/package-lock.json was not regenerated (no Node/npm
available in this environment) -- run `npm install` in docs/ before
the next `npm ci` build.
Covers the ValueError on a missing channel, sending discipline options
to the server, the ndarray-sized default_output_data branch in
GEMSEOtoPhiloteDiscipline.setup(), and the defensive skip of Jacobian
entries for outputs outside a wrapped discipline's own output grammar.
Also marks the TYPE_CHECKING-only imports as pragma: no cover, since
they can never execute at runtime.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@FrancoisGallard
FrancoisGallard changed the base branch from main to develop September 17, 2026 13:38
…nder

The GEMSEO tutorials use ```mermaid fences, but the theme was never
actually wired in: package.json didn't list the dependency and
docusaurus.config.ts had no markdown.mermaid / themes entry, so the
diagrams were not compiled and rendered as plain code blocks instead.

Verified by building the site and loading both tutorial pages in a
browser: the flowcharts now render as SVG diagrams.

Note: docs/package-lock.json still needs to be regenerated with real
npm (this environment only has bun) before `npm ci` in CI will pick up
the new dependency.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@FrancoisGallard

Copy link
Copy Markdown
Author

@chrislupp I think I have rebased and set the target branch to develop. Is it fine for you?

@chrislupp

Copy link
Copy Markdown
Collaborator

thanks for the rebase. I did take a look at it 2 days ago and it looked good across the board. I'll take another look at it tonight (don't have time to at work). I expect that anything remaining changes would be small/minor.

The 0.8.0 versioned docs describe the released package, which has no
philote_mdo.gemseo module. The GEMSEO pages stay under docs/docs/ (the
Next version) and will be snapshotted by the release workflow with the
first release that ships them.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
@chrislupp

Copy link
Copy Markdown
Collaborator

I'm in the process of reviewing and one bigger thing showed up, so I decided to fix it and push. I removed the GEMSEO pages from the 0.8.0 versioned snapshot. The way our CI/CD works, the release workflow creates a new docs snapshot on every stable release (the merge to main), so users can navigate between versions. The 0.8.0 snapshot documents the released package, which has no GEMSEO module, so it shouldn't change. New pages only go in docs/docs/. GEMSEO will show up in the sidebar under "Next" once this is merged into develop, and under the new version number with the next release. I figured it was easier to fix it and have you double-check than to describe the change request in a comment.

package.json gained @docusaurus/theme-mermaid without a matching lock
update, so the documentation workflow's npm ci refused to install.
Regenerated with npm 10 (the version CI's Node 20 ships) in
lockfile-only mode: this adds mermaid and its dependencies, and bumps
katex from 0.16.45 to 0.16.47 because mermaid requires ^0.16.47.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
@chrislupp

Copy link
Copy Markdown
Collaborator

I'm still not done reviewing. I'm off work tomorrow and hope to finish then.

@FrancoisGallard

Copy link
Copy Markdown
Author

Thanks for the review @chrislupp . Sorry for the misunderstanding on the 0.8.0 snapshot.
Do you plan to make a release after the merge? It would be helpful for us to release a gemseo-philote plugin based on it.

philote-examples 0.5.1 is the first release whose OasAerostructDiscipline
declares the CD and CL partials with respect to alpha. With earlier
versions the SLSQP scenario fails on its first gradient request.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
PhiloteDiscipline is built on ExplicitClient, so it connects to explicit
Philote-MDO servers only; against an implicit server it fails at execute
with "Method not found". The intro also named RemoteExplicitComponent,
the OpenMDAO client, as the way to serve an OpenMDAO model; serving is
done with OpenMdaoSubProblem.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
The GEMSEO tests import gemseo at module level, so without it installed
they fail to import. List it next to OpenMDAO in the README and the
installation page.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
Fix the misspelled GEMSEOtoPhiloteDiscipline attribute and constructor
argument before they are released as public API.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
The constructor documented that an empty name would use the remote
discipline's name, but passed it straight to GEMSEO, so every remote
discipline was named PhiloteDiscipline. Query GetInfo and use the
server-reported name when none is given; GEMSEO still falls back to the
class name when the server reports none (the default).

Dynamic-shape and discrete server variables were not handled. Dynamic
shapes were never sent, so the first execute failed with an error asking
for SetVariableShapes, which a GEMSEO user cannot call. Discrete
variables were left out of the grammars and silently kept their
server-side defaults. Reject both at construction with a
NotImplementedError naming the variables, until they are supported.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
test_sellar_mda_compute only asserted that obj and con1 were present, so
any values passed. Evaluate at the canonical Sellar starting point
(x = 1, z = [5, 2]) and compare against the canonical result there.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
Python 3.9 reached end of life in October 2025, and GEMSEO 6.3 requires
3.10, so the 3.9 CI job resolved GEMSEO 6.2 while every other job tested
6.3. Require Python >=3.10, remove 3.9 from the CI matrix and the
classifiers, and update the agent guidelines and the landing page.

Signed-off-by: Christopher Lupp <christopherlupp@gmail.com>
@chrislupp

Copy link
Copy Markdown
Collaborator

I finished the review and pushed the remaining changes straight to your branch (8 commits); that was easier than writing them all up as change requests. Please review the changes and let me know if this is ok with you.

OpenAeroStruct example. OasAerostructDiscipline in philote-examples didn't declare any partial derivatives, so the SLSQP scenario failed on its first gradient request. The tutorial assumed CD and CL with respect to alpha were declared. I fixed that upstream and released philote-examples 0.5.1. The example and tutorial now require philote-examples>=0.5.1, and nothing else in them changed.

PhiloteDiscipline

  • If no name is given, it now uses the name the server reports, and falls back to the class name when the server reports none.
  • Servers with dynamic-shape or discrete variables are now rejected at construction with a NotImplementedError that names the variables. Before, dynamic shapes failed at the first execute, and discrete variables were silently left out of the grammars and kept their server-side defaults. Proper support can come in a follow-up PR.
  • Renamed GEMSEOtoPhiloteDiscipline.gemseo_discipine to gemseo_discipline (the attribute and the constructor argument) before it becomes public API.

Tests. test_sellar_mda_compute now checks obj and con1 against the canonical Sellar result, instead of only checking that the outputs exist. New tests cover the name fallback and both unsupported-variable errors.

Docs

  • The GEMSEO intro now says PhiloteDiscipline connects to explicit servers (I believe implicit servers would fail on execution). It also now says OpenMDAO groups are served with OpenMdaoSubProblem; RemoteExplicitComponent is the OpenMDAO client.
  • The README and the installation page list GEMSEO as a test dependency.
  • The quickstart lists GEMSEO among the clients and links to the tutorial.

Python 3.9 dropped. Python 3.9 is end of life, and GEMSEO 6.3 requires 3.10, so the 3.9 CI job was the only one testing GEMSEO 6.2. requires-python is now >=3.10, and all CI jobs now test gemseo 6.3.3.

CI is green on Python 3.10 through 3.12.

Like I said, it seemed easier to propose these changes and have you review them. Obviously, this is only a proposal, so let me know if you want to do things differently.

@chrislupp chrislupp added this to the Version 0.9.0 milestone Sep 19, 2026
@chrislupp

Copy link
Copy Markdown
Collaborator

@FrancoisGallard, regarding your release question: I was either going to immediately release the next version after the PR or after the other pending PR if it appeared like we were reasonably close to wrapping up. Right now I think just releasing the next version after this PR is probably preferable. That would be version 0.9.0.

@FrancoisGallard

Copy link
Copy Markdown
Author

Its all ok for me, thanks a lot for the improvements.
I will add support for implict Disciplines and discrete variables in a future PR.
Ok for your proposals about the release.

Comment thread .github/workflows/tests.yaml
@chrislupp
chrislupp merged commit 51b30fd into MDO-Standards:develop Sep 19, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants