Skip to content

[Parity] Complete remaining EEGLAB core gaps - #152

Merged
arnodelorme merged 50 commits into
developfrom
feature/eeglab-core-parity-completion
Jun 11, 2026
Merged

[Parity] Complete remaining EEGLAB core gaps#152
arnodelorme merged 50 commits into
developfrom
feature/eeglab-core-parity-completion

Conversation

@suraj-ranganath

@suraj-ranganath suraj-ranganath commented Jun 6, 2026

Copy link
Copy Markdown
Member

Complete the audit-driven EEGLAB core parity epic for long-tail helpers, file/channel-location workflows, statistics, time-frequency internals, user-facing options, STUDY depth, follow-up parity gaps, and closeout evidence. This keeps EEGPrep standalone while preserving EEGLAB-facing APIs, GUI layout, command history, sample-data behavior, and console/GUI synchronization.

Fixes #131
Closes #133
Closes #134
Closes #135
Closes #136
Closes #137
Closes #138
Closes #146
Closes #147
Closes #148
Closes #149

Constituent phase PRs

Phase Issue PR Summary
Phase 1 #132 #140 Added the machine-readable EEGLAB core parity matrix, validator tooling, stale-skip policy, standalone runtime contract, and development docs.
Phase 2 #133 #142 Added standalone channel-location and long-tail file helpers: readlocs, writelocs, convertlocs, chancenter, floatread, floatwrite, SnapMaster/BCI support, and matching pop_* wrappers.
Phase 3 #134 #141 Added the statistics package: statcond, teststat, FDR, surrogate p-values/CIs, t-test/ANOVA/correlation cell helpers, and concatdata.
Phase 4 #135 #143 Added time-frequency internals and legacy entry points: timefreq, timef, crossf, bootstat, correct_mc, DFT filters, baseline helpers, pop_timef, pop_crossf, and expanded pop_newtimef/pop_newcrossf.
Phase 5 #136 #145 Closed user-facing option gaps in pop_export, pop_epoch, pop_editset, pop_comperp, pop_erpimage, headplot setup previews, pop_runica, and clean_rawdata/ASR options.
Phase 6 #137 #144 Added deeper STUDY/group-level helpers: design metadata, variable imports, design matrices, independent-variable persistence, measure readers/writers, clustering, consistency checks, and standalone LIMO limitations.
Phase 7 #138 #150 Added long-tail wrappers/helpers that survived triage: ICA/component/rejection aliases, pop_averef, pop_compareerps, pop_findmatchingcomps, pop_fusechanrej, pop_icathresh, pop_rejchanspec, and help/tests.
Phase 8 #139 #151 Closed the epic with no unclassified matrix rows, packaged help/docs, final QA evidence, sample console smoke checks, visual parity tests, and follow-up issue creation.

Follow-up PRs merged before final review

Follow-up Issue PR Summary
PAC classification #148 #153 Classified PAC helpers as explicit standalone limitations and documented std_readpac cache behavior.
Random-symbol fitting #147 #154 Ported correct_mc random-symbol distribution fitting and clarified EEGLAB rsadjust sign parity.
Time-warped newtimef #146 #155 Added time-warped newtimef marker/cycle GUI workflows, timewarp/angtimewarp, tf_cycle_calc, and parity tests.
STUDY long-tail helpers #149 #156 Added STUDY plotting/precompute/selection long-tail helpers, including subject-scoped ICA grouping and trial selection helpers.

Final review fixes included

  • Fixed timefreq(..., frames=...) so single-channel row/column matrices shaped like flattened trials are split into trials instead of treated as one long trial.
  • Fixed statcond(..., surrog=..., stats=..., alpha=...) so supplied surrogate statistics return confidence intervals and significance masks.
  • Fixed pop_writelocs(..., return_com=True) so the common pop_* keyword is accepted but not forwarded into file-format options or history.
  • Fixed binary pop_editset ICA matrix loading so non-square icaweights/icasphere .fdt files use EEGLAB matrix orientation rather than EEG .fdt channel-major orientation.
  • Stabilized merged follow-up reviews around timestretch duplicate snapping, MATLAB timefreq(..., 'timestretch', ...) parity coverage, rsfit near-zero skew parity, STUDY trial-factor pairing semantics, std_selectdataset variable shadowing, and parity matrix closeout tests.

GUI evidence

Side-by-side GUI evidence is attached in the PR comment titled Core parity GUI side-by-side evidence. It covers pop_chanedit, pop_comperp, pop_editset, pop_eegfilt, pop_envtopo, pop_epoch, pop_erpimage, pop_newcrossf, pop_newtimef, and pop_runica dialogs/contact sheet after the final visual parity pass.

Local verification

  • uv run --no-sync python -m tools.eeglab_parity_matrix: 608 rows cover 608 in-scope EEGLAB functions.
  • uv run --no-sync ruff check .: passed.
  • uv run --no-sync ruff format --check .: passed.
  • uv run --no-sync ty check: passed.
  • ./pre-commit.py --changed-from origin/develop: passed.
  • Focused final review regression set: tests/test_phase4_timefreq_statistics.py tests/test_statistics_package.py tests/test_pop_editset.py tests/test_phase2_file_channel_location.py: 89 passed.
  • EEGPREP_SKIP_MATLAB=1 uv run --no-sync pytest -m "not slow": 1807 passed, 207 skipped, 11 deselected.

…pers

[PAC] Classify PAC time-frequency helpers
…ymbol-fitting' into feature/eeglab-core-parity-completion

# Conflicts:
#	src/eegprep/__init__.py
#	src/eegprep/functions/timefreqfunc/__init__.py
…-marker-cycle-gui' into feature/eeglab-core-parity-completion

# Conflicts:
#	.notes/implementation-notes.html
#	docs/source/api/index.rst
#	src/eegprep/__init__.py
#	src/eegprep/functions/timefreqfunc/__init__.py
#	tests/test_phase4_timefreq_statistics.py
…pers' into feature/eeglab-core-parity-completion

# Conflicts:
#	.notes/implementation-notes.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment