Skip to content

feat(con): use readcon#307

Open
HaoZeke wants to merge 3 commits intoTheochemUI:mainfrom
HaoZeke:feat-readcon
Open

feat(con): use readcon#307
HaoZeke wants to merge 3 commits intoTheochemUI:mainfrom
HaoZeke:feat-readcon

Conversation

@HaoZeke
Copy link
Collaborator

@HaoZeke HaoZeke commented Feb 18, 2026

Because why not.

@github-actions
Copy link

github-actions bot commented Feb 18, 2026

eOn Documentation Preview

Download: documentation.zip

Unzip and open index.html to view.

@HaoZeke HaoZeke force-pushed the feat-readcon branch 3 times, most recently from 2852714 to 076c7bb Compare February 24, 2026 18:35
@github-actions
Copy link

github-actions bot commented Feb 24, 2026

Benchmark Results

Warning

1 benchmark(s) regressed

Count
🔴 Regressed 1
⚪ Unchanged 7

Regressions

Benchmark Before After Ratio
🔴 bench_eonclient.TimePointMorsePt.time_point_evaluation 7.54±0ms 8.63±0ms 1.15x
7 unchanged benchmark(s)
Benchmark Before After Ratio
bench_eonclient.TimeMinimizationLJCluster.peakmem_minimization_lbfgs 27.1M 24.9M ~0.92x
bench_eonclient.TimeMinimizationLJCluster.time_minimization_lbfgs 37.2±0ms 38.8±0ms ~1.04x
bench_eonclient.TimeNEBMorsePt.peakmem_neb 27.1M 24.9M ~0.92x
bench_eonclient.TimeNEBMorsePt.time_neb 512±0ms 525±0ms ~1.02x
bench_eonclient.TimePointMorsePt.peakmem_point_evaluation 27.1M 24.9M ~0.92x
bench_eonclient.TimeSaddleSearchMorseDimer.peakmem_saddle_search_dimer 27.1M 24.9M ~0.92x
bench_eonclient.TimeSaddleSearchMorseDimer.time_saddle_search_dimer 61.3±0ms 63.2±0ms ~1.03x
Details
  • Base: d7b3a604
  • Head: 5531731f
  • Runner: ubuntu-22.04
Raw asv-spyglass output
All benchmarks:

| Change   | Before   | After    |   Ratio | Benchmark (Parameter)                                                             |
|----------|----------|----------|---------|-----------------------------------------------------------------------------------|
|          | 27.1M    | 24.9M    |    0.92 | bench_eonclient.TimeMinimizationLJCluster.peakmem_minimization_lbfgs              |
|          | 37.2±0ms | 38.8±0ms |    1.04 | bench_eonclient.TimeMinimizationLJCluster.time_minimization_lbfgs                 |
|          | 27.1M    | 24.9M    |    0.92 | bench_eonclient.TimeNEBMorsePt.peakmem_neb                                        |
|          | 512±0ms  | 525±0ms  |    1.02 | bench_eonclient.TimeNEBMorsePt.time_neb                                           |
|          | 27.1M    | 24.9M    |    0.92 | bench_eonclient.TimePointMorsePt.peakmem_point_evaluation                         |
| +        | 7.54±0ms | 8.63±0ms |    1.15 | bench_eonclient.TimePointMorsePt.time_point_evaluation                            |
|          | 27.1M    | 24.9M    |    0.92 | bench_eonclient.TimeSaddleSearchMorseDimer.peakmem_saddle_search_dimer            |
|          | 61.3±0ms | 63.2±0ms |    1.03 | bench_eonclient.TimeSaddleSearchMorseDimer.time_saddle_search_dimer               |
|          | 27.1M    | 24.9M    |    0.92 | benchmarks.bench_eonclient.TimeMinimizationLJCluster.peakmem_minimization_lbfgs   |
|          | 37.7±0ms | 38.2±0ms |    1.01 | benchmarks.bench_eonclient.TimeMinimizationLJCluster.time_minimization_lbfgs      |
|          | 27.1M    | 24.9M    |    0.92 | benchmarks.bench_eonclient.TimeNEBMorsePt.peakmem_neb                             |
|          | 515±0ms  | 515±0ms  |    1    | benchmarks.bench_eonclient.TimeNEBMorsePt.time_neb                                |
|          | 27.1M    | 24.9M    |    0.92 | benchmarks.bench_eonclient.TimePointMorsePt.peakmem_point_evaluation              |
|          | 7.25±0ms | 7.89±0ms |    1.09 | benchmarks.bench_eonclient.TimePointMorsePt.time_point_evaluation                 |
|          | 27.1M    | 24.9M    |    0.92 | benchmarks.bench_eonclient.TimeSaddleSearchMorseDimer.peakmem_saddle_search_dimer |
|          | 60.9±0ms | 61.5±0ms |    1.01 | benchmarks.bench_eonclient.TimeSaddleSearchMorseDimer.time_saddle_search_dimer    |

HaoZeke added 3 commits March 26, 2026 22:53
Replace hand-written FILE*-based .con/.convel parsers and writers in
Matter.cpp with the readcon-core Rust FFI library (mmap-based reader,
ConFrameBuilder/ConFrameWriter for output).

- con2matter: readcon::read_first_frame() + populate from ConFrame
- matter2con: ConFrameBuilder + ConFrameWriter with 17-digit precision
- matter2convel: ConFrameBuilder::add_atom_with_velocity()
- convel2matter: read_first_frame() + velocity extraction
- cell_to_lengths_angles(): new helper using safe_acos/safe_div

Remove all FILE* overloads from Matter and all call sites:
- NudgedElasticBandJob, GPSurrogateJob: multi-image writes use
  matter2con(filename, append=true) loop
- ProcessSearchJob, SaddleSearchJob, SafeHyperJob, TADJob,
  BasinHoppingJob, DynamicsJob: fopen/fclose replaced with
  string-based matter2con(filename)
- NudgedElasticBand: iteration path writes converted
- HelperFunctions::saveMode: FILE* -> std::ofstream + std::format
- MinModeSaddleSearch: checkpoint mode write updated

Build: add readcon-core as Meson subproject (static, Rust FFI via
cbindgen), bump meson_version to >= 1.8.0.
readcon-core is a Rust FFI library that requires rustc >= 1.88 and
cbindgen to generate C++ headers during the Meson build.
Python:
- eon/fileio.py: replace hand-written con parser with readcon package
- pyproject.toml: add readcon>=0.4.3 dependency
- pixi.toml: add readcon PyPI dep

CI:
- All build workflows: bump setup-pixi v0.8.10 -> v0.9.4
- All build workflows: add cbindgen install step for readcon-core
- ci_docs.yml: bump pixi action

Docs:
- New design doc: docs/source/devdocs/design/client/confile.md
- Towncrier fragments for readcon client, fileio, and C++ changes
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.

1 participant