Changelog
Changelog
All notable changes to natMEEG (formerly pyEEG) are documented here.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[2.2.0] — 2025-08-28
Added
pyeeg.statsmodule: nonparametric statistical inference for TRF analysis (Issue #14). Implements:permutation_test_trf: circular-shift surrogate test with FWE via max-statistic (plus-one p-values). Stats:zscore(default, internal pre-lag z-scoring + refit, clean for any solver),t(OLS only),coef,perm_norm(permutation-null normalized).cluster_based_permutation_test: Maris & Oostenveld (2007) cluster correction. Positive/negative clusters formed separately; adjacency (lag 1-D, explicit dense/sparse, none); threshold semantics by stat type.bootstrap_ci_trf: paired circular block bootstrap with boundary drop, auto block-size estimation, percentile CIs, SE as byproduct.jackknife_se_trf: leave-one-epoch-out SE/CI estimator (any solver: OLS, ridge, banded ridge, robust).cross_subject_consistency: descriptive pairwise/LOO reliability (Pearson or cosine, no inferential test).group_level_test: sign-flip group inference (H0: population mean = 0).Spectral edge fade (
fade_edges=True) for autocorrelated stimuli, estimated from -3dB bandwidth of the stimulus spectrum.No MNE dependency in stats module (spatial adjacency user-supplied).
451 tests passing (107 new stats tests + 4 copy regression tests).
TRFEstimator.copy()now preserves all constructor kwargs (was dropping solver, loss, robust settings, intercept, cache config).
Unreleased
Added
Whitener,WaveletTransform,MultichanWienerFilter,mCCA,connectivity,simulate(neural-mass models),featurespackage, andvizudocumented in the README features overview.Sphinx API pages for
connectivity,mcca,solvers, andfeaturesmodules;simulate.rstfixed (was broken) and populated with all neural-mass classes and simulation functions.install.rstnow documents the[features]extra (torch,transformers).usage.rstexamples for CCA, mCCA, connectivity, simulation, and whitening.intersphinxmapping to Python, NumPy, SciPy, Matplotlib, and pandas.
Changed
Comprehensive docstring pass across
features/*,simulate.py,solvers.py,preprocess.py(Whitener),connectivity.py,cca.py,models/trf.py,io.py,mcca.py,vizu.py,ratemap.py,utils.py, andmodels/var.py.pyeeg.features.llm_featuresImportErrormessage typo fixed (Instal→Install); the[features]extra it references is now defined inpyproject.toml.
Fixed
Removed a duplicate
CTRNN.read_outmethod definition insimulate.py.models/var.pyfit_varreturn-shape docstring corrected to(nchans, nlags, nchans).connectivity.py: broken reST reference patterns inphase_transfer_entropy,wPLI, andplmreplaced with plain prose (fixes Sphinx build errors).conf.py:release = version + 'a'bug (unconditional'a'suffix) →release = version.
2.1.3 - 2026-08-26
Added
Per-channel IRLS with optional parallelism (
n_jobs) for robust TRF fitting.
2.1.2 - 2026-08-26
Changed
Auto-use XtX SVD + block conjugate gradient for multichannel solves (significant performance improvement).
2.1.1 - 2026-08-25
Added
Batched IRLS multichannel solve for faster robust fitting.
Fixed
Conjugate-gradient multi-epoch scaling bug.
2.1.0 - 2026-08-25
Added
Truncated SVD option for
SVDSolver(alphainterpreted as retained variance fraction).
2.0.2 - 2026-08-25
Changed
Sigstore signing action upgraded to v3.1.0.
2.0.1 - 2026-08-25
Changed
Unified logging system (
pyeeg._loggingwithset_log_level/get_logger), replacing scatteredprintandwarningscalls.
2.0.0 - 2026-08-25
Added
Solver Pattern abstraction (issue #12): abstract
Solverbase class with five concrete subclasses —SVDSolver(SVD-based ridge),LSTSQSolver(ordinary least squares),ConjugateGradientSolver(CG on normal equations, 10–50× faster than SVD with identical results),IRLSSolver(robust Cauchy-loss IRLS), andScipyRobustSolver(SciPy nonlinear Cauchy reference).Dependency injection:
TRFEstimatoraccepts anySolverinstance viasolver=.Interactive TRF dashboard (
pyeeg.dashboard) with atrf-exploreconsole entry point for upload-and-fit exploration.scripts/examples/solver_showcase.pycomparing all TRF solvers.
Changed
Full backward compatibility preserved; existing
TRFEstimatorand free-function (_svd_regress, etc.) APIs work unchanged.
Fixed
Solver compatibility guards: warns when robust loss is used with a non-robust solver; raises when a non-SVD solver is used with multi-alpha arrays.
1.7.1 - 2026-08-24
Fixed
CI: bumped
actions/setup-pythonv3 → v5.CI: dropped
-W(treat-warnings-as-errors) from docs build.CI: fixed docs pandoc missing + sdist corruption from duplicate builds.
1.7.0 - 2026-08-24
Added
Stimulus feature extraction (
pyeeg.featurespackage): LLM-based features (surprisal, entropy, KL divergence), syntactic features (tree depth, opening, closing), TextGrid alignment, feature pipeline, and dimensionality reduction (PCA, ICA).Robust Cauchy-loss TRF fitting (issue #17) via IRLS and a SciPy nonlinear least-squares reference path.
Weighted samples (WLS) in
TRFEstimator(issue #17).Feature-specific ridge regularization (banded ridge,
feature_alphas).Quadratic regularization for TRFs (issue #16) with intercept and block-ordering support.
pyeeg.modelssubpackage: split monolithicpyeeg/models.pyintopyeeg.models(trf.py,var.py) while preserving public import paths (issue #11).Simulation-based regression tests for TRF and CCA (issue #10).
Full test suite for
pyeeg/utils.py(issue #9).
Changed
Stabilized and documented public API entry points and
pyeeg.__all__(issues #4, #5, #6, #24).Consolidated duplicate
_svd_regressimplementations (issue #7) and merged rootsolver.pyintopyeeg/solvers.py(issue #8).Unified project documentation; removed outdated TODO/NEXT_STEPS files, replaced with
ROADMAP.md.
Fixed
P-value underflow and
__repr__crash inTRFEstimatorstatistics (issue #25).Gammatone variable mismatch with C extension (issue #26).
Deprecated
lag_matrixcall arguments (issue #27).
1.6.10 - 2025-04-15
Fixed
Re-included
setup.pyin MANIFEST for wheel build.
1.6.9 - 2025-04-15
Fixed
Testing name change to PEP 8; documentation updated.
1.6.8 - 2025-04-15
Fixed
Re-included
setup.pyin MANIFEST; updated package inclusion pattern for submodules in setuptools.
1.6.7 - 2025-04-15
Changed
Code structure refactor for readability; sdist bloat cleanup.
1.6.6 - 2025-04-14
Changed
Python distribution tested for
>= 3.10.
1.6.5 - 2025-04-14
Fixed
Wheel build configuration.
1.6.4 - 2025-04-14
Fixed
publish.ymlnow handlestwine checkfailures gracefully.
1.6.3 - 2025-04-14
Fixed
Wheel build configuration.
1.6.2 - 2025-04-14
Fixed
Wheel repair process in
publish.yml; README updated for project name change.
1.6.1 - 2025-04-14
Fixed
Wheel build configuration.
1.6.0 - 2025-04-14
Changed
publish.ymlrepaired for manylinux wheels; OS classifiers updated inpyproject.toml; README updated;version.pyuntracked.
1.5.1 - 2025-04-14
Fixed
Removed MANIFEST (build error).
1.5.0 - 2025-04-14
Changed
Added
MANIFEST.infor package inclusion; updated project description and dependencies inpyproject.toml; disabled custom mingw32 build extension on Windows.
1.4.3 - 2025-04-14
Added
pyproject.tomlandsetup.pybuild system with C extension definitions (gammatone, makeRateMap) and numpy include-directory handling.License updated to GPL-3.0-or-later in
pyproject.toml.
Changed
Fully modernized installation and build process (
python -m build); refined package discovery and platform-specific compilation.
1.4.1 - 2025-04-14
Changed
publish.ymlartifact download steps updated to usepatternmatching withmerge-multiple.
1.4.0 - 2025-04-14
First modern release after the rename from pyEEG to natmeeg, consolidating
years of development into a single tagged milestone.
Added
Temporal Response Functions:
TRFEstimatorwith SVD-based ridge regression, multi-alpha scoring, list-based covariance accumulation, load/save,xfitcross-validation, interactive and significance plotting, topomaps, and__add__/__truediv__/__getitem__operators.Canonical Correlation Analysis:
CCA_Estimator(lagged/regularized) pluscca_ntandcca_svdbackends; multiway CCA (mCCA) for hyperalignment preprocessing.Connectivity module: Granger causality, phase transfer entropy (PTE), phase linearity measurement (PLM), and cross-spectral density.
Simulation module: AR/VAR generation, Jansen-Rit (and extended) neural mass model, CTRNN, and TRF simulation kernels.
Preprocessing:
Whitener(PCA/ZCA),WaveletTransform,MultichanWienerFilter(MWF), filterbanks, and covariance estimators.IO: EEGLAB/FieldTrip → MNE conversion,
AlignedSpeechandWordLevelFeaturesclasses, word-onset/envelope/surprisal/syntactic feature loaders.Visualization (
pyeeg.vizu): topomaps, filterbank plots, TRF significance overlays, pairwise boxplots, interactive plots.Gammatone filterbank and cochleagram C extensions.
Sigstore-signed PyPI publishing via GitHub Actions.
Changed
MNE made an optional dependency;
psutilandtqdmmade required.
0.4-complete_version - 2019-02-22
Added
AlignedSpeechclass for aligned audio features; fast envelope extraction; rolling-window and moving-average utilities.
Fixed
Memory issues and loading of MATLAB v7.3 files;
TRFEstimator.predictbeta reshape; lag order for TRF.
0.3-rc1 - 2019-02-11
Added
Canonical Correlation Analysis (CCA) implementation with separate
thresh_x/thresh_y, knee-point selection, andplot_activation_map.
0.3 - 2019-02-11
Initial release of pyEEG.
Added
TRFEstimatorwith SVD regression and lag-matrix utilities.WordLevelFeaturesandAlignedSpeechIO classes for word-level feature handling.Sphinx documentation with example notebooks.
mCCA, knee-point detection, SPD matrix checks, and memory checking.
EEGLAB → MNE conversion and word-onset loading utilities.
Preprocessing (filterbank, covariance) and visualization functions.