Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
337 commits
Select commit Hold shift + click to select a range
93046d9
Default zlabel to empty in surface mode
Maxwell-Rosen Jun 25, 2026
aac99a8
Move some of the utilities that are shared between the different plot…
Maxwell-Rosen Jun 25, 2026
0678d40
feat: Redesign Postgkyl API for fluent scripting and unified verb layer
Maxwell-Rosen Jun 26, 2026
d37beba
feat: Refactor Plotly plotting functions to improve axis handling and…
Maxwell-Rosen Jun 26, 2026
d546f10
feat: Add package data configuration for output files in pyproject.toml
Maxwell-Rosen Jun 26, 2026
46cde17
Add comprehensive tests for postgkyl library functionality
Maxwell-Rosen Jun 28, 2026
ce205b5
Enhance plotting function and GData info method with additional param…
Maxwell-Rosen Jun 28, 2026
9ac04f2
Add option to specify which axis the subplot is featured on. Pipe ful…
Maxwell-Rosen Jun 29, 2026
c5fb92b
Update default ylabel handling for 1D plots and refine save condition…
Maxwell-Rosen Jun 29, 2026
98d987f
All documentation work is complete and verified. Here's the summary.
Maxwell-Rosen Jun 29, 2026
315327f
Merge branch 'plot3d' into python-scripting
Maxwell-Rosen Jun 29, 2026
4ebf61e
Resolve some merge conflicts with main
Maxwell-Rosen Jun 29, 2026
81e179d
Implement animate and subscripting
Maxwell-Rosen Jun 29, 2026
e1f0e7f
Put gk_distf into the loader
Maxwell-Rosen Jun 29, 2026
3a9c482
Refactor CLI commands to use Typer instead of Click
Maxwell-Rosen Jun 29, 2026
d787e03
Refactor: finish the ops/ migration and layer the package
Maxwell-Rosen Jun 29, 2026
cda8e93
Add map verb: coordinate mapping as a grid op independent of load
Maxwell-Rosen Jun 29, 2026
ab2f947
Refactor: update command-line interface flags from click_mode to cli_…
Maxwell-Rosen Jun 29, 2026
ae90164
Done. All three named command files are now thin shells over shared l…
Maxwell-Rosen Jun 29, 2026
d797e88
Update readme
Maxwell-Rosen Jun 29, 2026
41737d7
Refactor: reorganize loaders and commands, moving functionality to ne…
Maxwell-Rosen Jun 29, 2026
7a04eee
Refactor map outside of load.
Maxwell-Rosen Jun 29, 2026
7717432
# Modernizing the pgkyl CLI for Typer
Maxwell-Rosen Jun 29, 2026
ff36909
Save a backup of the refactored postgkeyll. Small example directory s…
Maxwell-Rosen Jul 1, 2026
18726df
Add git submodule for the gkeyll repo, only building core at pip inst…
Maxwell-Rosen Jul 3, 2026
acc5d7c
First version of refactoring pgkyl to use the gkeyll cffi for operati…
Maxwell-Rosen Jul 3, 2026
cacba52
Add test-data to tests
Maxwell-Rosen Jul 4, 2026
a53845b
Refactor representation handling in GData and GDataState
Maxwell-Rosen Jul 4, 2026
8894a61
Refactor public API surface in __init__.py and improve docstring in g…
Maxwell-Rosen Jul 5, 2026
e6e7bdb
Add Gkeyll FFI integration for modal and nodal representations
Maxwell-Rosen Jul 6, 2026
a7b9817
Update branch to lapack_lite_shim. Fix build
Maxwell-Rosen Jul 6, 2026
1cf7c37
Ensure pytest works on this branch
Maxwell-Rosen Jul 6, 2026
9799d26
Merge a few changes with main
Maxwell-Rosen Jul 8, 2026
0d8c957
Implement phase 0 of the refactor. Add support for the hybrid basis f…
Maxwell-Rosen Jul 9, 2026
d5e2e8b
Add mul_conf_phase into the ffi
Maxwell-Rosen Jul 9, 2026
f9e890a
Refactor numerics: add grid_is_prefix function and enhance arithmetic…
Maxwell-Rosen Jul 9, 2026
bb7cdd8
Improve unit testing to 100% code coverage
Maxwell-Rosen Jul 9, 2026
fc8ce96
migrate 02-numerics: port pure-math tools/utils into numerics/ leaf l…
Maxwell-Rosen Jul 9, 2026
eca03dc
Supress the skipped and warnings on unit tests which were intentional
Maxwell-Rosen Jul 9, 2026
ee919e7
migrate 03-dg: relocate rep.py from ffi/ to dg/, add dg/map.py per MA…
Maxwell-Rosen Jul 9, 2026
1ece639
migrate 04-io: port adios/h5/flash readers, restore c2p_grid, add vtk…
Maxwell-Rosen Jul 9, 2026
87da43b
Push to 100% code coverage
Maxwell-Rosen Jul 9, 2026
4e216e1
Add metadata to written .gkyl files
Maxwell-Rosen Jul 9, 2026
3e417df
migrate 05-core: port DatasetGroup as verb-less container
Maxwell-Rosen Jul 9, 2026
b0ec434
Add unit tests for various models in postgkyl
Maxwell-Rosen Jul 9, 2026
ce9d0af
Fix a bug in frame.py. Increase unit testing coverage to 100%
Maxwell-Rosen Jul 9, 2026
cff3eb9
migrate 07-ops-field: port field-domain verbs onto the new verb contract
Maxwell-Rosen Jul 10, 2026
d4c801c
migrate 08-ops-physics: port physics verbs + map onto the new verb co…
Maxwell-Rosen Jul 10, 2026
0fc9867
migrate 09-render: port matplotlib/animate/plotly/pyvista backends on…
Maxwell-Rosen Jul 10, 2026
7e5786d
Commit the agent to the repo
Maxwell-Rosen Jul 10, 2026
f52fd7d
migrate 10-diagnostics: fold models/ and ops physics verbs into diagn…
Maxwell-Rosen Jul 10, 2026
468248d
refactor: update pytest configuration and enhance plotly tests
Maxwell-Rosen Jul 11, 2026
b52bada
migrate 11-api: give every ops verb a fluent GData method, add fluent…
Maxwell-Rosen Jul 11, 2026
1fe7086
Add comprehensive tests for diagnostics and gyrokinetic loaders
Maxwell-Rosen Jul 11, 2026
b704725
Collect diagnostics loaders report and resolve review feedback
Maxwell-Rosen Jul 11, 2026
40ac353
Add unit tests for diagnostics modules: enstrophy, ke_dke, nodes, par…
Maxwell-Rosen Jul 12, 2026
c66ff4e
Refactor energy balance, particle balance, and nodes diagnostics
Maxwell-Rosen Jul 12, 2026
263d4d0
Fix calculation of array size in _write_gkyl function
Maxwell-Rosen Jul 12, 2026
2913718
Rename ffi and pg0 to gpython. Rename copy->clone, rename write->save
Maxwell-Rosen Jul 12, 2026
899154e
Update .gitignore and pyproject.toml for gpython extension
Maxwell-Rosen Jul 12, 2026
b5c810e
Incorporate growth into fit
Maxwell-Rosen Jul 12, 2026
d0b5a07
Rename write to save
Maxwell-Rosen Jul 12, 2026
559fc08
Rename write command to save in CLI commands
Maxwell-Rosen Jul 12, 2026
d923ec8
rename write to save
Maxwell-Rosen Jul 12, 2026
ae09b68
Refactor save_rotating_plotly_figure to use Kaleido for multi-frame r…
Maxwell-Rosen Jul 12, 2026
38f27b3
Add new CLI commands and refactor existing ones
Maxwell-Rosen Jul 12, 2026
9d99d97
migrate 14-cli: close review C1-C4 fixes
Maxwell-Rosen Jul 12, 2026
f7f4413
migrate 15-facade: close docs, facade audit, final report
Maxwell-Rosen Jul 12, 2026
dbefcda
migrate 15-facade: close review fixes, reorganize CLI help sections
Maxwell-Rosen Jul 12, 2026
c45cfe5
Remove old source folder
Maxwell-Rosen Jul 12, 2026
dcfda46
Rename ev to evaluate. Update matplotlib as a faithful reproduction o…
Maxwell-Rosen Jul 12, 2026
6abdfc6
Add integrate_axis functionality and update evaluate command help text
Maxwell-Rosen Jul 12, 2026
957f096
Update CLI tests to include --min-n flag for fit and growth commands
Maxwell-Rosen Jul 12, 2026
c6fb17d
Add available_evaluate_operators function and update imports in evalu…
Maxwell-Rosen Jul 12, 2026
6443af6
fix the .png unnamed file bug for the 3rd time
Maxwell-Rosen Jul 12, 2026
d14f5aa
Rename interp to interpolate
Maxwell-Rosen Jul 12, 2026
4166b7a
Rename sel abreviation to select
Maxwell-Rosen Jul 12, 2026
ad7cacb
dg_average is implemented end-to-end. Summary of what changed:
Maxwell-Rosen Jul 12, 2026
5cd2f02
All ported and verified. Summary of what changed:
Maxwell-Rosen Jul 12, 2026
c4bfe7d
Add dg_local_polly as well as some examples
Maxwell-Rosen Jul 12, 2026
b957944
Add documentation for the examples folder
Maxwell-Rosen Jul 12, 2026
02ecab6
Add a gyrokinetics example
Maxwell-Rosen Jul 12, 2026
ac561c9
Simplify example scripts
Maxwell-Rosen Jul 12, 2026
b5aa098
Add a script to insert `# end` comments. Script ran on all files in s…
Maxwell-Rosen Jul 13, 2026
82953ce
I don't want to get into squabbles about authorship, but I definitely…
Maxwell-Rosen Jul 13, 2026
25b49b2
The authors said alphabetically, but they weren't. Now they are
Maxwell-Rosen Jul 13, 2026
360a38b
Rename ops to operations
Maxwell-Rosen Jul 13, 2026
29ba320
Add ValueError to exception handling in GkylAdiosReader.is_compatible
Maxwell-Rosen Jul 13, 2026
32aa55b
Add tests for velocity, current, and diagnostics functionality
Maxwell-Rosen Jul 13, 2026
d038003
Fix warnings in unit tests
Maxwell-Rosen Jul 13, 2026
7cfa7c5
Port upstream PR #225: wire --transpose into the render engine
Maxwell-Rosen Jul 14, 2026
79cc06e
Merge branch 'main' into refactor-diagnostics
Maxwell-Rosen Jul 14, 2026
7c9a642
Remove claude md files from the branch
Maxwell-Rosen Jul 14, 2026
8d92cef
Add claude.md
Maxwell-Rosen Jul 14, 2026
74a9d77
Update gitignore
Maxwell-Rosen Jul 14, 2026
95674a8
Remove design documents
Maxwell-Rosen Jul 14, 2026
cdba217
Remove settings.json from vs code
Maxwell-Rosen Jul 14, 2026
2685f7c
Clarify readme dependencies
Maxwell-Rosen Jul 14, 2026
f764203
Remove .claude folder
Maxwell-Rosen Jul 14, 2026
94ff13a
Ignore .coverage
Maxwell-Rosen Jul 14, 2026
debc97d
Merge branch 'main' into refactor-diagnostics
Maxwell-Rosen Jul 14, 2026
b9099db
Rename api to gdata
Maxwell-Rosen Jul 15, 2026
d8aec73
Rename api ->gdata and core/data to gdata/gdata and have gdatagroup. …
Maxwell-Rosen Jul 15, 2026
ed32a39
Update folder names
Maxwell-Rosen Jul 15, 2026
cc5abdd
Update commit of gkeyll
Maxwell-Rosen Jul 16, 2026
3dfaa3a
fix pyvista headless display CI crash
Maxwell-Rosen Jul 17, 2026
d72212a
Fix the ffmpeg installation issues by using sudo apt install
Maxwell-Rosen Jul 17, 2026
3bb761f
Track the setup.py
Maxwell-Rosen Jul 17, 2026
43a174d
Add errno handling for pg0_dynvec_write to prevent stale error reads
Maxwell-Rosen Jul 17, 2026
94b005b
Data generation scripts were stored in the old test backup and not co…
Maxwell-Rosen Jul 17, 2026
f84e765
Alphebetize the commands
Maxwell-Rosen Jul 17, 2026
1da5160
Refactor map command to use argument for mapping file instead of option
Maxwell-Rosen Jul 17, 2026
bc84d4f
Add an overwrite and passable parameter for the representation of the…
Maxwell-Rosen Jul 18, 2026
5739959
Restore info to its former glory
Maxwell-Rosen Jul 18, 2026
335dcd3
Incorporate modal algebra to the evaluate command
Maxwell-Rosen Jul 18, 2026
d5343e5
Add label option to commands and enhance loading functionality
Maxwell-Rosen Jul 18, 2026
6d841a9
Add evaluate command alias and enhance select function for gkyl-nativ…
Maxwell-Rosen Jul 18, 2026
880e524
Summary
Maxwell-Rosen Jul 18, 2026
58d3f70
update gk_distf to use the new api
Maxwell-Rosen Jul 18, 2026
85b83b5
Refactor load functions to support basis type and polynomial order ov…
Maxwell-Rosen Jul 18, 2026
a5fb8f7
Fix the issues with the non-uniform velocity mappings
Maxwell-Rosen Jul 18, 2026
769ffd3
Add warnings for missing metadata in GDataState initialization
Maxwell-Rosen Jul 18, 2026
657930e
Get select working in curvilinear coordinates
Maxwell-Rosen Jul 19, 2026
224866c
Add example of subtracting two datasets
Maxwell-Rosen Jul 19, 2026
5438773
axis is the argument to integrate
Maxwell-Rosen Jul 19, 2026
e459598
Add context updates for Gkyl backend selection in `select` function
Maxwell-Rosen Jul 19, 2026
530d481
Add all options back into the pyvista command
Maxwell-Rosen Jul 20, 2026
e36401f
Add Plotly support for rendering and animating datasets
Maxwell-Rosen Jul 20, 2026
4df924c
Full suite passes (1627 passed, 6 skipped). Summary of changes:
Maxwell-Rosen Jul 20, 2026
828b4e1
Add tests for animate command with parallel processing and frame grou…
Maxwell-Rosen Jul 20, 2026
31ca683
Enhance tests for animation functionality: improve frame grouping log…
Maxwell-Rosen Jul 20, 2026
eb2670a
Refactor representation terminology to value_form in operations and t…
Maxwell-Rosen Jul 20, 2026
f04d8bf
All warnings are now resolved. Summary of what I changed:
Maxwell-Rosen Jul 20, 2026
32f5530
Clarify dataset loading behavior: add warning for missing basis_type,…
Maxwell-Rosen Jul 20, 2026
894c066
Add additional warnings to filter for sqrt and fork safety checks
Maxwell-Rosen Jul 21, 2026
a6aa621
Summary
Maxwell-Rosen Jul 21, 2026
2ddae69
Refactor CLI options to use show_option for consistent handling of pl…
Maxwell-Rosen Jul 21, 2026
7dd03cb
Added a sort verb that natural/numeric-sorts datasets by their source…
Maxwell-Rosen Jul 21, 2026
630ea7b
Refactor Gkeyll integration: replace submodule with a clone and updat…
Maxwell-Rosen Jul 22, 2026
e5ddf52
Bump version to 2.0.0
Maxwell-Rosen Jul 22, 2026
4fdf3bc
Remove all Claude's em-dashes
Maxwell-Rosen Jul 22, 2026
ee63aa4
There were some neuances in building on my mac, which is Darwin
Maxwell-Rosen Jul 22, 2026
0b6db40
Default to nodal serendipity p0 when no basis is specified. In other …
Maxwell-Rosen Jul 22, 2026
9304537
Enhance documentation for Gkeyll integration and clarify scalar opera…
Maxwell-Rosen Jul 22, 2026
dc3df67
rename gkylzero to gkeyll
Maxwell-Rosen Jul 22, 2026
0f9b3ed
Add Chrome availability check for Kaleido and update tests to require it
Maxwell-Rosen Jul 23, 2026
5b85379
Fix encoding issues in file reading for test cases in postgkyl
Maxwell-Rosen Jul 23, 2026
5b820f5
Add missing import for os in test_render_pyvista.py
Maxwell-Rosen Jul 23, 2026
c115b04
Use the default cc compiler
Maxwell-Rosen Jul 23, 2026
55eeece
Update README to change default compiler to 'cc' and add OpenGL conte…
Maxwell-Rosen Jul 23, 2026
ecc1151
Update tests to explicitly use --show option for plotly and handle he…
Maxwell-Rosen Jul 23, 2026
f418fc7
Add version reporting and build metadata for postgkyl and Gkeyll
Maxwell-Rosen Jul 23, 2026
3920972
Refactor build scripts to improve configuration handling and portabil…
Maxwell-Rosen Jul 23, 2026
57325b1
Rename all pg0 to gpython
Maxwell-Rosen Jul 30, 2026
0496cd0
Remove sympy from environment.yml
Maxwell-Rosen Aug 3, 2026
ae6ddf8
Refactor Gkyl ADIOS reader and remove legacy support
Maxwell-Rosen Aug 3, 2026
7b68183
Port PR #227: surface plots, 1D colormap coloring, xkcd isolation
Maxwell-Rosen Aug 3, 2026
f0bb4b3
Ported PR #228's functionality into refactor-diagnostics, adapted to …
Maxwell-Rosen Aug 3, 2026
25f0dda
Update installation instructions and build scripts to ensure NumPy co…
Maxwell-Rosen Aug 3, 2026
4cf6944
Shift from using a system-wide ffmpeg installation to a python-based …
Maxwell-Rosen Aug 3, 2026
323cd7a
Add macos to the CI checks
Maxwell-Rosen Aug 3, 2026
e59fadb
Merge branch 'main' into refactor-diagnostics
Maxwell-Rosen Aug 3, 2026
6de3d7e
Update installation instructions and build scripts to enforce NumPy c…
Maxwell-Rosen Aug 3, 2026
3fb2eda
Update environment.yml
Maxwell-Rosen Aug 3, 2026
3e684cf
Upgrade NumPy and setuptools installation to ensure compatibility and…
Maxwell-Rosen Aug 3, 2026
970a2c7
Skip macOS animate saveframes tests due to intermittent SIGABRT in ma…
Maxwell-Rosen Aug 4, 2026
4145e90
Skip macOS tests for kaleido's Chrome subprocess due to intermittent …
Maxwell-Rosen Aug 4, 2026
272a26b
The simulated hard-exit behaves correctly: it flushes output, exits w…
Maxwell-Rosen Aug 4, 2026
8e258a9
Skip macOS tests for intermittent SIGABRT in matplotlib's mathtext ra…
Maxwell-Rosen Aug 4, 2026
8012fb1
Fix build_gkeyll function to set PYTHON environment variable for cons…
Maxwell-Rosen Aug 4, 2026
aa683db
Pin NumPy version to 2.2.6 for consistent testing across Python versions
Maxwell-Rosen Aug 4, 2026
afbf826
Enhance macOS CI testing: use pytest-forked for isolated test executi…
Maxwell-Rosen Aug 4, 2026
6975324
add the gk_energy_balance cli command
Maxwell-Rosen Aug 5, 2026
8fe4c1c
Add gk_particle_balance
Maxwell-Rosen Aug 5, 2026
3f343ea
Skip this test on Macos because it crashes CI
Maxwell-Rosen Aug 5, 2026
524727e
Ported the two flat CLI commands (src/postgkyl/main/postgkyl/src/post…
Maxwell-Rosen Aug 7, 2026
bf748ae
What I changed
Maxwell-Rosen Aug 7, 2026
a9220b4
merge main
Maxwell-Rosen Aug 7, 2026
01db94e
Update AUTHORS.md to add myself as a main contributor to the design a…
Maxwell-Rosen Aug 15, 2026
66988ff
Map f to every active dataset
Maxwell-Rosen Aug 20, 2026
464c3fd
Merge remote-tracking branch 'refs/remotes/origin/refactor-diagnostic…
Maxwell-Rosen Aug 20, 2026
99bb020
Add specifying which axes that the legends go on in pg.plot
Maxwell-Rosen Aug 21, 2026
c622cfc
Add log-linear split for 1D plots
Maxwell-Rosen Aug 21, 2026
a755c01
Add support for color sequences in 1D plots and enhance color validation
Maxwell-Rosen Aug 22, 2026
150fa35
Enhance color handling in plot function to support dataset-specific c…
Maxwell-Rosen Aug 22, 2026
716e9b7
Refactor plotting functions to enhance save functionality and support…
Maxwell-Rosen Aug 22, 2026
fb71f77
Update indexing
Maxwell-Rosen Aug 22, 2026
d95062d
Enhance GData ufunc handling and add linestyles support for 1D plots
Maxwell-Rosen Aug 25, 2026
b0f7385
Refactor plot function to use line_kwargs for cleaner code and add te…
Maxwell-Rosen Sep 1, 2026
d7d03a5
Merge branch 'refactor-diagnostics' into refactor-diagnostics-multib
Maxwell-Rosen Sep 1, 2026
4532d5d
Refactor `pg.load` to support glob patterns for loading multiple file…
Maxwell-Rosen Sep 1, 2026
639ba00
Add `sort` method to GDataGroup for natural filename sorting and upda…
Maxwell-Rosen Sep 1, 2026
f8f3df3
Refactor tests to validate instance and group verb availability in GD…
Maxwell-Rosen Sep 1, 2026
1587011
Animate default to show
Maxwell-Rosen Sep 1, 2026
686f4a4
Implement load methods for GData and GDataGroup to handle file loadin…
Maxwell-Rosen Sep 1, 2026
22e18fa
Add quotes to pip install
Maxwell-Rosen Sep 1, 2026
c14e163
[4:08 PM]============================ warnings summary ==============…
Maxwell-Rosen Sep 1, 2026
8f61b46
Add initial documentation for Coding Doctrine in AGENTS.md
Maxwell-Rosen Sep 1, 2026
b0153b9
# GK R-Z refactor plan
Maxwell-Rosen Sep 1, 2026
57054dd
# API-driven CLI generator
Maxwell-Rosen Sep 1, 2026
40204c7
last commit update
Maxwell-Rosen Sep 1, 2026
bf4a676
Merge branch 'refactor-diagnostics' into refactor-diagnostics-multib
Maxwell-Rosen Sep 1, 2026
bbf7cf2
Merge refactor in
Maxwell-Rosen Sep 1, 2026
fd56008
/goal Refine the documentation of this repository. The docstrings sho…
Maxwell-Rosen Sep 2, 2026
2727de9
_______________ ERROR collecting tests/test_operations_gk_rz.py _____…
Maxwell-Rosen Sep 2, 2026
43cecc5
Plugged in the CI failure messages
Maxwell-Rosen Sep 2, 2026
3a198f7
This error still remains after 3 attempts to resolve it. It's only on…
Maxwell-Rosen Sep 2, 2026
a6b70e3
Why is there both a plot in commands and a plot in render? Can
Maxwell-Rosen Sep 2, 2026
4f5d29d
Leftovers
Maxwell-Rosen Sep 2, 2026
ed3a03b
Why is there both a plot in commands and a plot in render? Can
Maxwell-Rosen Sep 2, 2026
1652a7c
append to last commit
Maxwell-Rosen Sep 2, 2026
46bc19b
Update
Maxwell-Rosen Sep 2, 2026
fa74aae
In '/home/maxwell-rosen/postgkyl/examples/scripts/05_gk_rz.py', how c…
Maxwell-Rosen Sep 2, 2026
89b4b02
Add alpha convergence example and update test data generation
Maxwell-Rosen Sep 2, 2026
adb9fad
Refactor diagnostics example and update related functions for mirror …
Maxwell-Rosen Sep 2, 2026
22e6b89
Something is saving a pgkyl.gif file in the root directory. Either do…
Maxwell-Rosen Sep 2, 2026
75e6969
I'm seeing this warning in the unit testing. Please close all figures…
Maxwell-Rosen Sep 2, 2026
617f144
Explain why the file '/home/maxwell-rosen/postgkyl/src/postgkyl/cli/…
Maxwell-Rosen Sep 2, 2026
e8de8f7
For the CLI generator, I'd like to have shorthand - single dash opti…
Maxwell-Rosen Sep 2, 2026
160f0d1
Group the diagnostics into their appropriate gkeyll folder names of g…
Maxwell-Rosen Sep 2, 2026
71d4e82
› Similarly, animate should be in the render side, not having a dupli…
Maxwell-Rosen Sep 2, 2026
0b389fc
› Similarly, plotly_animate should be in the render side, not having …
Maxwell-Rosen Sep 2, 2026
44e6659
Why is command_spec a seperate directory? Shouldn't it be inside the …
Maxwell-Rosen Sep 2, 2026
42cbb72
So these two options have manditory arguments, but they need a --axis…
Maxwell-Rosen Sep 3, 2026
dd1169d
Can we merge integrate and integrate-axis into one "integrate" comman…
Maxwell-Rosen Sep 3, 2026
a70d478
Add the ability for gyrokinetics-load-distf to load multiple frames, …
Maxwell-Rosen Sep 4, 2026
e9e841b
Add an option to matplotlib plot to put the grid as indicies rather t…
Maxwell-Rosen Sep 4, 2026
3600a48
› Change the diagnostics folders to be gk, vm, mom, pkpm in src/postg…
Maxwell-Rosen Sep 4, 2026
0d2d426
Currently, the CLI changes all the underscores to dashes. I do not li…
Maxwell-Rosen Sep 4, 2026
61604e1
In the CLI shorthand options (e.g. -c, -d, -g), previously I had give…
Maxwell-Rosen Sep 4, 2026
f7a1359
Most implementation is complete:
Maxwell-Rosen Sep 4, 2026
ff28501
In the CLI, I'd like the options which are booleans to simply trigger…
Maxwell-Rosen Sep 4, 2026
3004db2
Fix CI formatting
Maxwell-Rosen Sep 4, 2026
c9c91a4
Refactor CI workflow for improved formatting and testing
Maxwell-Rosen Sep 4, 2026
df71161
The repository does not mainly need more test volume—it already has 1…
Maxwell-Rosen Sep 4, 2026
3115a5a
/goal Improve the unit testing coverage of the codebase. You may want…
Maxwell-Rosen Sep 4, 2026
ca6692e
Increase coverage threshold to 99% and update CLI test annotation
Maxwell-Rosen Sep 4, 2026
00dc6a4
The formatter found 11 tracked Python test files in the same failing …
Maxwell-Rosen Sep 4, 2026
bdf9a69
Fix pre-commit
Maxwell-Rosen Sep 4, 2026
4b58bdf
The macos native bridge CI test is failing. Please diagnose and fix.
Maxwell-Rosen Sep 4, 2026
a4da29b
In README.md:
Maxwell-Rosen Sep 8, 2026
de9dec9
Added print_coeffs=False to src/postgkyl/operations/fit.py. Enable it…
Maxwell-Rosen Sep 9, 2026
6ce3131
Updated -p to show the equation, parameter meanings, and named values…
Maxwell-Rosen Sep 9, 2026
bc24a0c
• The report now includes the fit statistics and coefficient uncertai…
Maxwell-Rosen Sep 9, 2026
9355e56
I would like a print command in the command line, similar to what we …
Maxwell-Rosen Sep 10, 2026
a46f0ff
# Postgkyl documentation integration plan
Maxwell-Rosen Sep 10, 2026
fedf736
Fix pytest failures in the mp3 compilation and in the gpython file re…
Maxwell-Rosen Sep 10, 2026
39be8f6
Refactor skill files and agents.md
Maxwell-Rosen Sep 10, 2026
5e5078b
Group examples under one big examples tree
Maxwell-Rosen Sep 10, 2026
dbfb3d3
Refactor public_functions to include module path in yielded results
Maxwell-Rosen Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .agents/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
*.md
!CLAUDE.md

# Shared, versioned repository skills.
!skills/
!skills/**/
!skills/**/SKILL.md
39 changes: 39 additions & 0 deletions .agents/skills/postgkyl-api-cli/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
name: postgkyl-api-cli
description: Add or change public Postgkyl verbs, signatures, fluent aliases, or generated CLI behavior while preserving API/CLI parity.
---

# Keep one executable public API

Core operations use `op(data: GDataState, *, ..., inplace=False, tag=None,
label=None) -> GDataState`; funnel mutation/new-result decisions through `_result`.

- Alias exact fluent verbs in the GData class body to canonical operations; no
wrappers, runtime setattr, or lazy imports. GDataGroup broadcasts member verbs.
Multi-dataset verbs share the aliases in `gdata/verbs.py`.
- Rendering lives in `render/`. Facade, operations, fluent methods, and generated
CLI refer to the same canonical callables.
- Every public boolean defaults to `False`. For enabled default behavior, name
its inverse (`no_show`, `volume`, `nodal`) and implement it under the false
branch. CLI bare boolean options mean True; explicit True/False remain accepted.
- Expose basis/order/value_form overrides only at load time, never downstream.

The CLI discovers the public API, constructs CommandSpec records, and lowers them
through one generic compiler. Keep scientific command knowledge in API signatures,
annotations, docstrings, and command metadata. Do not add handwritten subcommands
or a `cli/commands/` package.

Preserve underscores exactly (`local_poly`, `--num_moms`). Assign a short option
to the first parameter with each initial in signature order; reserve `-h` for
help. Aliases/abbreviations change spelling only. Bare filenames expand to
`load --file_name`; they do not define different loading semantics.

Use native Click chaining and callback-before-dispatch. Help groups the flat
inventory into Verbs, Diagnostics, Render, and Utility. The console entry point
is `postgkyl.cli.app:cli`. Version reporting is owned by `_version.py`, exported
through the facade, and receives the version string explicitly to avoid an import
ordering dependency; preserve its build/dependency diagnostics.

Verify signature changes with `tests/test_cli_generator.py`,
`tests/test_cli_commands.py`, and relevant diagnostic CLI tests; check canonical
callable identities in `tests/test_postgkyl.py` when changing aliases.
39 changes: 39 additions & 0 deletions .agents/skills/postgkyl-architecture/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
name: postgkyl-architecture
description: Place modules and enforce import boundaries when adding or refactoring Postgkyl operations, diagnostics, rendering, or public surfaces.
---

# Preserve layer ownership

`tests/test_postgkyl.py::_ALLOWED` and its AST checks are the authority for
allowed imports and acyclicity. Consult that mapping for exact edges; when
adding a top-level module or allowed edge, update the contract and this guidance
in the same change if ownership changes. Do not maintain a second import matrix.

| Layer | Owns |
| --- | --- |
| `__init__.py`, `cli/`, `gui/` | Public surfaces; the facade only re-exports, with no function/class definitions |
| `diagnostics/` | Equation-specific physical conclusions and compositions |
| `gdata/` | Fluent GData/GDataGroup API and load entry point |
| `operations/` | Data transformations; flat equation-blind verbs |
| `render/` | Canonical plotting and animation callables |
| `gdatastate/` | State, clone, `_result`, shared guards and point-value materialization; no verbs |
| `dg/`, `io/` | Kernel orchestration and file I/O respectively |
| `numerics/`, `cli_spec.py` | Pure math and frozen command metadata; no internal imports |
| `gpython/` | Sole foreign-library boundary |

Imports point downward along allowed edges, never back to a higher surface.
Operations accept GDataState; `_result` constructs `type(self)` so fluent results
remain GData without importing gdata. Reuse `gdatastate/guards.py` and
`materialize.py` instead of duplicating capability checks or native bridges.
Readers return `(grid, values)` and fill plain metadata; they never import state.

Diagnostics are free functions under model families `gk`, `vm`, `pkpm`, or `mom`,
not GData methods. Model-specific loading belongs beside its physics. Resolve
output stems/frames through `diagnostics/discovery.py`; keep quantity vocabulary
in the equation module's `VARIABLES` table. Use public functions from lower
layers and return a state via `_result`, or a Figure for program diagnostics.
for the current major version.

Run the import, foreign-floor, facade, and canonical-callable contracts in
`tests/test_postgkyl.py` after structural changes.
43 changes: 43 additions & 0 deletions .agents/skills/postgkyl-data/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
name: postgkyl-data
description: Preserve DG representation and backend semantics when changing loading, arithmetic, conversions, integration, or terminal data consumers.
---

# Preserve data meaning

Storage (`backend`: `gkyl` or `numpy`) and representation
(`ctx["value_form"]`: `modal`, `nodal`, or `quad`) are separate facts. Do not
add an `is_modal` flag or infer point-value capabilities from storage alone.

- Modal coefficients use Gkeyll DG operations: weak multiply/divide, coefficient
linear combinations, scalar scaling/mean shifts, repeated weak multiplication
for integer powers, and native integration. Ufuncs, array conversion, selection,
and plotting must not treat coefficients as field values.
- Nodal and quadrature values are fields at points. Pointwise NumPy operations
are allowed; native results wrap back into native storage in the same value_form.
Plot true point locations; non-tensor node sets use explicit `.to_quad()`.
- Reject mixed backends or mixed value_forms when combining datasets.
- `.interpolate()` is the one-way bridge to a new, by-value NumPy field array.
Interpolation matrices come from Gkeyll basis functions, applied per cell;
nodal input first uses the exact nodal-to-modal transform.
- Only explicit `.to_modal()`, `.to_nodal()`, and `.to_quad()` perform representation
conversions. `.apply(fn, num_quad=...)` spells modal → quad → fn → projection,
equivalent to `fn(d.to_quad()).to_modal()`. Respect quadrature exactness limits.
- Full modal integration is terminal and native; partial integration uses native
averaging with physical-volume scaling and returns lower-dimensional modal data.
`.average()` and `.eval_at_coord_proj()` likewise stay modal/native and compose.
`.local_poly()` builds a discontinuity-preserving plotting mesh.

Resolve `basis_type`, `poly_order`, and `value_form` once from file metadata or
explicit load options. Downstream verbs read ctx and raise if required metadata
is missing; never add basis/order override parameters to them.

For spatial data with unresolved basis metadata, loading warns and defaults to
serendipity p0 nodal data. When value_form is defaulted, express the grid as cell
centers, matching one point per cell. Dynvectors have no spatial DG basis and
are exempt. The readers' narrower case—known basis but no value_form tag—assumes
modal silently; keep these two defaults distinct.

Route results through `_result` and terminal native point-value consumers through
`gdatastate.materialize_point_values`. Preserve native ownership and read-only
coefficient views; use the existing representation tests to verify semantics.
82 changes: 82 additions & 0 deletions .agents/skills/postgkyl-design/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
---
name: postgkyl-design
description: Apply Postgkyl coding doctrine when designing, implementing, or reviewing Python changes.
---

# Coding Doctrine

**0. Locality of reasoning.** Every principle below is a projection of
one axiom: a reader must be able to understand a fragment without the
whole program. Whatever keeps a local conclusion sound — a frozen
record, an honest signature, a stated law — is doctrine. Whatever
forces a global search — ambient state, a leaky layer, a second copy
of a fact — is the enemy.

*Data — what it does, and what it may say*

**I. Data is inert. Functions transform.** No objects that know
things and do things. Data is a frozen record. Behavior is a function
that takes data in and returns data out. If you're reaching for
inheritance, you've taken a wrong turn.

**II. Make illegal states unrepresentable.** The shape of a datum is
its strongest invariant. Constructors refuse invalid states; a checked
fact becomes a type; downstream never re-proves what upstream
established. Parse, don't validate.

*Functions — one idea, honestly declared*

**III. A function is one idea.** It takes exactly what it needs and
returns exactly what it computes. If the signature has two concepts in
it, you have two functions.

**IV. The signature tells the whole truth.** Inward: if something
needs a value, it receives it as a parameter — no spooky action at a
distance, no stringly-typed interfaces, no implicit state. Outward:
same inputs, same outputs; effects and failure appear in the type, not
in the fine print. Pure core, effects at the edges.

*Knowledge — one home per fact*

**V. Every fact has one home.** One authoritative representation of
each decision and each piece of knowledge; everything else inherits or
is derived mechanically — never maintained by hand in parallel.
Configuration is decided once, at the highest level, and threaded
down; no module ever decides its own context. If the design and the
implementation can disagree, you have two sources of truth and zero.

*Layers — what above, how below*

**VI. Separate what from how.** Logic and machinery are different
concerns with a hard boundary. The layer that says *what* to compute
should be readable by someone who has never seen the machinery
underneath. The layer that says *how* lives below, stays below, and
nothing leaks up from it.

**VII. Notation is execution; lowering is transliteration.** Looking
up: the spec layer reads like the math or logic it implements — when
notation *is* the executable object, not a comment beside it, bugs
have nowhere to hide. Looking down: the layer that executes the spec
reproduces it exactly — nothing added, nothing dropped, nothing
reinterpreted; no opinions, no defaults, no helpful conversions. If
the lowering changes anything, the spec is a lie.

*Abstraction — earned, and binding*

**VIII. Earn your abstractions.** No abstraction before the second
use. Three similar lines is better than a premature helper. The right
amount of complexity is the minimum the current task demands — not the
current task plus three hypothetical future ones.

**IX. An abstraction is a contract.** It is defined by what it
guarantees, not what it hides. If you can't state what is always true
of it — properties a client may rely on without reading the
implementation — it isn't an abstraction, it's indirection. Two
implementations that honor the contract must be interchangeable; and
its outputs stay in its vocabulary, so uses compose.

*Verification — formal first*

**X. Trust the most formal thing first.** Types over tests, tests
over docs, docs over comments. Invest in whichever layer catches the
bug earliest with the least ongoing maintenance cost.
48 changes: 48 additions & 0 deletions .agents/skills/postgkyl-development/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
name: postgkyl-development
description: Set up Postgkyl development, choose verification commands, or maintain shared agent configuration and Entire hooks.
---

# Develop and verify

Install NumPy before the extension so it builds against the runtime ABI:

```bash
pip install --upgrade numpy setuptools wheel
pip install --no-build-isolation -e '.[test]'
```

Run focused tests for the change, then the required broader checks:

```bash
pytest tests/
# Without an editable install:
PYTHONPATH=src python -m pytest tests/
```

Useful API/CLI smoke checks (replace data filenames with suitable fixtures):

```bash
pgkyl --help
pgkyl --version
pgkyl file.gkyl info
pgkyl file.gkyl interpolate select --z0 0 plot
pgkyl euler_5m_0.gkyl interpolate five_moment_pressure --num_moms 5 plot
pgkyl a.gkyl b.gkyl evaluate "f0 f1 +" interpolate plot
```

Shared agent configuration lives in `.agents/`; `.claude` and `.codex` are
relative symlinks to it. Root `CLAUDE.md` links to `AGENTS.md`. Put focused skills
in `.agents/skills/<name>/SKILL.md` with name and description frontmatter. Keep
root instructions short and route only to skills relevant to the task.

Preserve Entire's Claude hooks in `settings.json` and Codex hooks in `hooks.json`
inside the shared directory, including matchers, commands, and timeouts. Their
original `.claude/settings.json` and `.codex/hooks.json` paths must still resolve.
Leave `.entire/` and Entire's Git hooks intact. Retain existing agent definitions
and historical plans when reorganizing folders; historical markdown remains
ignored, while new skill entry points must be visible to Git.

For instruction/configuration-only changes, validate skill frontmatter, relative
links, Git visibility, and hook preservation; running scientific tests is not
necessary unless application behavior changes.
35 changes: 35 additions & 0 deletions .agents/skills/postgkyl-native/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
name: postgkyl-native
description: Change or troubleshoot the Gkeyll native bridge, basis matrices, readers, memory ownership, or native builds in Postgkyl.
---

# Keep the foreign boundary compiled

`gpython/` is the only doorway to Gkeyll. No ctypes declarations, native struct
layouts, or foreign signatures in Python or other layers. `gpython.available()`
is the single capability switch.

The shim lives in `gkeyll/core/zero/{gkyl_gpython.h,gpython.c}` and builds into
Gkeyll's `libg0core.so`. Struct access, by-value basis conventions, and function
pointer dispatch belong there, checked against that tree's headers.
`gpython/csrc/_gpythonmodule.c` wraps only the shim's opaque handles, scalars,
and buffers. `_lib.py` imports the extension and checks `GPYTHON_API_VERSION`.

Build against the pinned clone using `scripts/build_gkeyll.sh` and
`scripts/build_gpython.sh`. Bundle libg0core beside the extension and retain
relative `$ORIGIN`/`@loader_path` linking. Preserve generated build provenance;
Gkeyll is a build-time clone and need not exist at runtime.

GkylArray capsules own and release arrays. Zero-copy construction pins its NumPy
buffer; view base chains pin the capsule so views outlive their dataset. Never
return unowned C memory. Build interpolation and representation matrices by
evaluating Gkeyll's own basis through the shim, not duplicated basis formulas.

`dg/` orchestrates kernels; `io/` dispatches readers. Prefer GkylCReader for native
field reads; retain the Python reader fallback for unavailable native libraries,
partial loads, and dynvectors. Keep NumPy installed before building so the
extension uses the runtime ABI; use `pip install --no-build-isolation -e '.[test]'`.

Verify handshake, memory lifetime, basis/interpolation, and modal algebra using
the relevant existing tests. Report native test skips explicitly when no compiled
library is available; skips do not establish native correctness.
12 changes: 12 additions & 0 deletions .agents/skills/postgkyl-testing/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
name: postgkyl-testing
description: Design and best practices for testing Postgkyl code, including unit tests and examples.
---

# Testing

Unit tests aim for 100% code coverage where possible. Every change must have an associated unit test. Every bug fix must have a test. Every feature must be tested. Run `pytest` to check that all tests pass.

Data for testing must be generated automatically by `tests/generate_test_data.py`. This keeps the repository light. DO NOT COMMIT LARGE DATA FILES TO GIT.

Examples are real-world use cases of postgkyl. They read data and make plots. Examples are displayed in the documentation.
21 changes: 21 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
Language: Cpp
BasedOnStyle: LLVM

ColumnLimit: 80

IndentWidth: 2
ContinuationIndentWidth: 4
TabWidth: 2
UseTab: Never

AlwaysBreakAfterReturnType: AllDefinitions
BreakBeforeBraces: WebKit
AllowShortFunctionsOnASingleLine: None

DerivePointerAlignment: false
PointerAlignment: Right

IncludeBlocks: Preserve
SortIncludes: CaseSensitive
...
1 change: 1 addition & 0 deletions .claude
1 change: 1 addition & 0 deletions .codex
22 changes: 22 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
version: 2

updates:
- package-ecosystem: pip
directory: /
schedule:
interval: weekly
groups:
python-dependencies:
patterns:
- "*"
open-pull-requests-limit: 5

- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
groups:
actions:
patterns:
- "*"
open-pull-requests-limit: 5
Loading
Loading