Skip to content

Releases: sccn/pyAMICA

pyAMICA 0.1.2

Choose a tag to compare

@neuromechanist neuromechanist released this 14 Jul 17:21
0ef9428

Patch release adding NumPy-backend outlier-rejection parity, repo-wide type-checking enforcement, and the full validation-evidence documentation. Correctness remains defined as parity with the reference Fortran binary, validated only on real sample EEG.

Highlights

  • NumPy outlier rejection (do_reject): the Fortran outlier-rejection path is ported to AMICA_NumPy via the same good_idx mechanism as the PyTorch backend, so the NumPy reference now drops per-sample outliers on the rejstart/rejint/maxrej schedule (#123).
  • Rejection robustness: a non-finite log-likelihood is now distinguished from an over-aggressive rejsig, so an over-tight rejection threshold fails with a clear message instead of a silent non-finite result (#127).
  • Type checking enforced repo-wide: all ty diagnostics fixed (496 to 0) and ty added to CI alongside a pre-commit config (ruff + ty) (#124, #125).
  • Comprehensive validation docs: the validation guide is now a full evidence page covering source-density bit-exactness, cross-platform device/precision invariance (cross-backend equivalence matrix + IC topomaps), the EEGLAB drop-in round-trip, and the other validated behaviors (#108).

Changelog

The changelog now also backfills the previously missing 0.1.1 entry. See the full changelog.

Install

```bash
git clone https://github.com/sccn/pyAMICA.git
cd pyAMICA
uv sync
```

Full diff: v0.1.1...v0.1.2

pyAMICA 0.1.1

Choose a tag to compare

@neuromechanist neuromechanist released this 13 Jul 22:58
9a92d49

Patch release covering validation-methodology and correctness fixes since v0.1.0.

Highlights

  • Amari distance: a second, permutation/scale-invariant unmixing-matrix
    comparison metric (Amari, Cichocki & Yang 1996) alongside the existing
    Hungarian-matched correlation, used throughout the Fortran-parity
    validation (single-model ~0.006; multi-model ensemble equivalence
    confirmed, run-level permutation p>0.999).
  • Performance tables: Table 2 and the docs performance guide gained
    native-Fortran rows (Intel 24-core workstation, Apple Silicon 8-core) and
    the full CPU core-scaling comparison, alongside the existing GPU/torch
    numbers.
  • Type-safety fixes: validate_implementations.py's run_fortran_amica
    is now correctly typed Optional[Dict] (it returns None on several
    failure paths), removing a latent possibly-unbound-variable risk in its
    exception handling; load_eeglab_data's dtype annotation now matches
    its default value.
  • Multi-model equivalence test fix: the ensemble equivalence test now
    uses a valid run-level permutation test (respecting the dependence among
    the 40 runs' pairwise correlations) instead of a pseudoreplicated
    Mann-Whitney/TOST.
  • Corrected a stale float32-speedup claim and added a funding acknowledgement.

Validation

Correctness is defined as parity with the reference Fortran binary, measured
with two complementary metrics (Hungarian-matched correlation and Amari
distance), and validated only on real sample EEG -- never synthetic data.
See the documentation for the full validation and per-run detail.

Install

```bash
git clone https://github.com/sccn/pyAMICA.git
cd pyAMICA
uv sync
```

pyAMICA 0.1.0

Choose a tag to compare

@neuromechanist neuromechanist released this 11 Jul 16:38
6a5e158

First public release of pyAMICA, a Python (PyTorch) implementation of Adaptive Mixture Independent Component Analysis (AMICA) that reproduces the reference Fortran implementation within numerical tolerance.

Highlights

  • Fortran parity on real EEG: single-model log-likelihood ~ -3.40 (reference -3.4018), Hungarian-matched component correlation ~ 0.997; source-density score functions bit-exact to ~1e-15.
  • Backends: CPU, NVIDIA GPU (CUDA), and Apple GPU (MLX). float64 for parity, float32 for speed (MLX is the fastest option on Apple Silicon).
  • Full algorithm: all five source-density families, mixture of ICA models, positive-definite Newton updates, component sharing, and outlier rejection.
  • EEGLAB drop-in output: write_amica_output writes the loadmodout15 binary format and variance_order gives the EEGLAB back-projected-variance component order (IC1 = highest), so a run loads directly in EEGLAB.
  • scikit-learn-style AMICA interface, model save/load, and a documentation site.
  • Benchmarks: spatially-distributed channel-subset selection and a data-size (k-factor) cross-backend equivalence sweep.

Validation

Correctness is defined as parity with the reference Fortran binary and is validated on real sample EEG, never synthetic data. See the documentation for the full validation and backend-selection guides.

Install

git clone https://github.com/sccn/pyAMICA.git
cd pyAMICA
uv sync