Skip to content

Releases: sccn/pAMICA

pamica 0.2.2

Choose a tag to compare

@neuromechanist neuromechanist released this 18 Jul 09:39
9fa04f8

Patch release fixing two issues found right after 0.2.1.

  • pamica.__version__ now derives from the installed package metadata (single source of truth = pyproject.toml). It previously returned the stale 0.1.2 even in the 0.2.1 wheel because version.py hardcoded it (#182).
  • pyAMICA -> pAMICA URL canonicalization after the GitHub repository was renamed sccn/pyAMICA -> sccn/pAMICA. The docs site moved to https://eeglab.org/pAMICA/, so the old eeglab.org/pyAMICA links (including the README docs badge) now 404; the repo URLs, codecov, the native-binary resolver default, the badge, and clone snippets are updated to match. The package/import name stays lowercase pamica (#184).

Install/upgrade: pip install -U pamica. Native reference binaries (macOS arm64, Linux x64/arm64, Windows x64) are attached below.

pamica 0.2.1

Choose a tag to compare

@neuromechanist neuromechanist released this 18 Jul 07:50
7b3ea4e

First PyPI release of pamica: pip install pamica.

This release also rolls up two milestones that landed in the repo but were never published to any index:

  • 0.1.3 — native Fortran run engine (AMICANative), MIR/PMI separation-quality metrics, LLt output parity with the Fortran reference, and the loadmodout byte-order fix.
  • 0.2.0 — the pyAMICA -> pamica package rename (import pamica, pip install pamica).

0.2.1

  • PyPI publish workflow (OIDC Trusted Publishing) and scripts/sync_version.py, which keeps the version consistent across pyproject.toml, CITATION.cff and .zenodo.json.
  • Display title is now pAMICA; the package, import path and pip name stay lowercase pamica (pip matching is case-insensitive).
  • Native-engine documentation page, and validate_implementations.py --native-engine/--fortran-binary to run the real Fortran reference as a backend on any platform.

Dependency-free native reference binaries (macOS arm64, Linux x64/arm64, Windows x64) attach to this release automatically; the Python package publishes to PyPI via Trusted Publishing.

Full changelog: https://eeglab.org/pyAMICA/changelog/

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