Installation#

SPD Learn requires Python 3.11 or higher and is built on PyTorch 2.0+.

Quick Install#

The simplest way to install SPD Learn is via pip:

pip install spd_learn

This will install the core package with minimal dependencies.

Dependencies#

Core dependencies (installed automatically):

  • PyTorch - Deep learning framework

  • einops - Flexible tensor operations

  • NumPy - Numerical computing

Installing from Source#

For the latest development version, you can install directly from GitHub:

git clone https://github.com/spdlearn/spd_learn.git
cd spd_learn
pip install -e .

Optional Dependencies#

SPD Learn provides optional dependency groups for different use cases:

Brain-Computer Interface (BCI) & Neuroimaging#

For EEG and fMRI applications:

pip install "spd_learn[brain]"

This installs:

Documentation#

To build the documentation locally:

pip install "spd_learn[docs]"

Testing#

For running the test suite:

pip install "spd_learn[tests]"

All Dependencies#

To install all optional dependencies:

pip install "spd_learn[all]"

Verifying Installation#

After installation, verify that SPD Learn is working correctly:

import torch
from spd_learn.models import SPDNet

# Create SPDNet for 16-channel data with 2 output classes
model = SPDNet(
    n_chans=16,
    n_outputs=2,
    subspacedim=8,
    input_type="cov",  # Input is pre-computed covariance
)

# Generate random SPD matrix (must be positive definite)
X = torch.randn(4, 16, 16)
X = X @ X.transpose(-1, -2) + 0.1 * torch.eye(16)  # Make SPD

# Forward pass
output = model(X)
print(f"Input shape: {X.shape}")  # (4, 16, 16)
print(f"Output shape: {output.shape}")  # (4, 2)
print("Installation successful!")

Development Installation#

For contributing to SPD Learn:

git clone https://github.com/spdlearn/spd_learn.git
cd spd_learn
pip install -e ".[all]"

This installs the package in editable mode with all dependencies for development, testing, and documentation.

Troubleshooting#

Common Issues#

ImportError: No module named ‘spd_learn’

Make sure you’ve installed the package:

pip install spd_learn

CUDA out of memory

Try reducing batch size or using CPU:

model = model.cpu()
X = X.cpu()

Numerical instability with eigenvalue decomposition

Use the ReEig layer with an appropriate threshold:

from spd_learn.modules import ReEig

# Add small threshold to prevent numerical issues
reeig = ReEig(threshold=1e-4)

Getting Help#