Skip to content

Fix all examples for PR #29#35

Merged
EstevaoMGomes merged 4 commits into
uwplasma:eg/analysisfrom
Tejas7007:eg/analysis
Jun 20, 2026
Merged

Fix all examples for PR #29#35
EstevaoMGomes merged 4 commits into
uwplasma:eg/analysisfrom
Tejas7007:eg/analysis

Conversation

@Tejas7007

Copy link
Copy Markdown

Got all 44 examples in PR #29 running end-to-end (was 3/44).

Verified locally: Fig 3 (gc_vs_fo), Fig 5 (poincare_plots), and the autodiff figure (gradients) all reproduce correctly.

Source-level changes (all additive / backward-compatible):

  • essos/coils.py: override setters for Curves gamma / gamma_dash / gamma_dashdash (unblocks coil perturbation with the immutable Curves model)

  • essos/surfaces.py: SurfaceRZFourier.init accepts filename string or Vmec object as first arg (existing explicit-arg calls unchanged)

  • essos/dynamics.py: optional solver= kwarg in Tracing (defaults preserve Dopri8); energy() now handles FullOrbit_Boris

  • essos/objective_functions.py: restored loss_coil_curvature_new, loss_coil_length_new, loss_particle_r_cross_max_constraint as flat-vector wrappers; loss_BdotN accepts surface= alternative to vmec=; fixed shape mismatch in loss_optimize_coils_for_particle_confinement

  • essos/augmented_lagrangian.py: 16 jax.jax.tree_util -> jax.tree_util typo fixes

  • essos/coil_perturbation.py: jnp.clip(eigvals, a_min=0) -> min=0 (NumPy 2.x API)

Example fixes:

  • Path bugs (10+ files): name -> file typos, "../examples/input_files" -> "../input_files", missing "../" when running from subdirs

  • API renames: Coils_from_json -> Coils.from_json (7 files), Coils_from_simsopt -> Coils.from_simsopt (2 files)

  • Tracing API alignment in poincare_plots.py (timesteps=count -> timestep=dt, tol_step_size -> atol/rtol)

  • gradients.py: hardcoded 8 processors -> 1 (was failing on shape mismatch)

  • Rewrote paper/fo_integrators.py and paper/gc_integrators.py for current keyword API + new solver= kwarg (Fig 4 unblocked)

  • .energy attribute -> .energy() method form

  • _new aliasing in adam / augmented-lagrangian examples

Optional deps the examples need: simsopt, h5py, plotly, booz_xform (latter needs libnetcdf-dev + gfortran on the system). Happy to add these as extras to pyproject.toml in a follow-up if useful.

Caveats: every example now starts and runs without crashing. End-to-end completion verified for the 3 paper figures above. The longer-running optimizers (LBFGS, augmented Lagrangian) should be confirmed on full runs.

…loss wrappers, solver kwarg in Tracing, override setters for Curves gamma

@rogeriojorge rogeriojorge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done with review of this PR.

Comment thread examples/paper/gc_integrators.py
Comment thread examples/paper/fo_integrators.py
Comment thread examples/paper/gc_integrators.py
Comment thread essos/dynamics.py
Comment thread essos/dynamics.py
Comment thread essos/surfaces.py Outdated
Comment thread examples/paper/gc_integrators.py
Comment thread examples/paper/gc_integrators.py
Comment thread examples/paper/gc_integrators.py
Comment thread examples/optimize_surface_quasisymmetry.py
@rogeriojorge

Copy link
Copy Markdown
Member

Hi @EstevaoMGomes, @eduardolneto, please review this today or tomorrow. If it looks good (check the new examples locally), then please approve the review or add your comments.

@EstevaoMGomes EstevaoMGomes left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are some changes needed. I'm not sure if in this or another PR, but I can help with understanding PyTrees and tracers. Nevertheless, the changes are appreciated! Thanks for fixing the examples :)

I'll try to join the next meeting to give you some input on losses.py and how we actually should differentiate over PyTrees. When I started coding ESSOS, I also did not know exactly how this worked, so the repo may still be confusing when mixing the 2 approaches.

Comment thread essos/coils.py
Comment thread essos/coils.py
Comment thread essos/coils.py
Comment thread essos/dynamics.py
Comment thread essos/objective_functions.py
Comment thread essos/objective_functions.py
Comment thread essos/surfaces.py Outdated
Comment thread essos/surfaces.py Outdated
Comment thread essos/surfaces.py Outdated
@eduardolneto

Copy link
Copy Markdown
Contributor

There was an open pull request here #30 that has conflicts with some parts of this pull request. I think the changes in that pull request should be merged before as they were already fixing a lot of these issues including coil_perturbation, coils, surfaces and augmented_lagragian/losses iteraction. The exampels were also working . @EstevaoMGomes can you recheck that one first please.

@eduardolneto eduardolneto left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left my comments, I am finsihed with the review of the PR.

@EstevaoMGomes
EstevaoMGomes merged commit 456168d into uwplasma:eg/analysis Jun 20, 2026
@EstevaoMGomes EstevaoMGomes added the examples Update example files label Jul 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

examples Update example files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants