pAMICA: Adaptive Mixture ICA
Python (PyTorch) implementation of Adaptive Mixture Independent Component Analysis (AMICA) that reproduces the reference Fortran implementation within numerical tolerance, with CPU, NVIDIA GPU (CUDA), and Apple GPU (MLX) support. It targets EEG/EMG blind source separation and is a drop-in replacement for EEGLAB's AMICA: single-model output is written in exactly the reference's on-disk format and loads directly in EEGLAB.
Single-model results match the Fortran reference (Hungarian-matched component correlation ~ 0.998 on well-determined data, Newton disabled); see the documentation for validation details and the backend-selection guide.
Overview
AMICA (Adaptive Mixture ICA) is an advanced blind source separation algorithm that uses adaptive mixtures of independent component analyzers. This implementation provides:
- Multiple source models
- Different PDF types
- Newton optimization
- Component sharing
- Outlier rejection
- Data preprocessing (mean removal, sphering)
Installation
The canonical environment is uv:
git clone https://github.com/sccn/pAMICA.git
cd pAMICA
uv sync # install dependencies into a managed venv
uv run pytest # optional: run the tests
The optional Apple-GPU backend (MLX, Apple Silicon only) installs with the mlx
extra: uv pip install mlx.
Usage
pamica exposes a scikit-learn-style estimator backed by the PyTorch natural-gradient EM implementation:
import numpy as np
from pamica import AMICA
# X is (n_channels, n_samples) of real EEG/EMG; float64 gives Fortran parity
model = AMICA(n_models=1, n_mix=3).fit(X)
sources = model.transform(X) # (n_sources, n_samples)
A = model.get_mixing_matrix() # sensor-space scalp maps
order = model.variance_order() # EEGLAB IC order (IC1 = highest variance)
Backends and precision
The wrapper auto-selects a device and computes in float64 for Fortran parity.
- CPU and CUDA (float64) are bit-reproducible; use them for parity runs.
- float32 (about 7 significant digits, not parity) is required on the Apple GPUs and modestly faster on CPU; it is not a general speedup, since CUDA is overhead-bound (float32 is about as fast as float64).
- On Apple Silicon the MLX backend is the fastest option; import it explicitly.
AMICA(device="cuda").fit(X) # NVIDIA GPU, float64
from pamica.mlx_impl import AMICAMLXNG # Apple GPU (install the mlx extra)
EEGLAB interoperability
pamica writes results in EEGLAB's AMICA output format, so a run drops into an EEGLAB workflow with no manual re-ordering or sign-flipping:
model.write_amica_output("amicaout") # gm, W, S, mean, c, alpha, mu, sbeta, rho, ...
mod = loadmodout15('amicaout'); % components in EEGLAB variance order
Legacy NumPy CLI
The NumPy reference backend keeps a JSON-driven command-line interface:
python -m pamica.numpy_impl.cli params.json --outdir results
See the documentation for the full API, the parameter reference, and the backend-selection and validation guides.
Citation
If you use pamica, please cite it (see CITATION.cff) and the original AMICA method:
Palmer, J. A., Kreutz-Delgado, K., & Makeig, S. (2012). AMICA: An adaptive mixture of independent component analyzers with shared components. Technical report, Swartz Center for Computational Neuroscience, UC San Diego.
License
This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.
Release files for pamica 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pamica-0.3.2.tar.gz | 142.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pamica-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 292.7 kB
Release files / pamica-0.3.2.tar.gz
| Download URL | pamica-0.3.2.tar.gz |
|---|---|
| Size | 142.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
250aba0f3f734be11a667b6fd65b55ade9114e25422268034db3112cfc4d3fef
|
|
BLAKE2b-256 checksum How to use checksums |
7b6f2208a74f9ecfa1646709580cd9a388ed20fb2ebc16ba8211ae4742c8ceb1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / pamica-0.3.2-py3-none-any.whl
| Download URL | pamica-0.3.2-py3-none-any.whl |
|---|---|
| Size | 150.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
42a602057690c59ca0a453ff68cca5c0ad02745f41b37ad226d5671053019f55
|
|
BLAKE2b-256 checksum How to use checksums |
b6709fd44d622ee9f88759f7ba40ff6199c6e9127eea8cd9d7d611a237db711d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency log