diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bd52059 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,8 @@ +name: CI +on: [push] +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: python -m unittest discover tests diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7fe7cf9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,5 @@ +FROM python:3.9-slim +WORKDIR /app +COPY . . +RUN pip install -r requirements.txt +CMD ["python", "src/main.py"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fcb475f --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +test: + python -m unittest discover tests diff --git a/config/default.yaml b/config/default.yaml new file mode 100644 index 0000000..51a95e8 --- /dev/null +++ b/config/default.yaml @@ -0,0 +1,5 @@ +# Default hyperparameters for Aether-SPARC v3 +seed: 42 +model: + type: "mamba" + d_model: 256 diff --git a/config/experiment_01.yaml b/config/experiment_01.yaml new file mode 100644 index 0000000..1178204 --- /dev/null +++ b/config/experiment_01.yaml @@ -0,0 +1,2 @@ +# Experiment 1: High temporal sparsity speech +dataset: "speech" diff --git a/config/loihi2.yaml b/config/loihi2.yaml new file mode 100644 index 0000000..47c882b --- /dev/null +++ b/config/loihi2.yaml @@ -0,0 +1,2 @@ +# Intel Loihi 2 hardware specifications +energy_per_synaptic_op: 10e-12 diff --git a/data/processed/.gitkeep b/data/processed/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/raw/.gitkeep b/data/raw/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/api_reference.md b/docs/api_reference.md new file mode 100644 index 0000000..eedbb26 --- /dev/null +++ b/docs/api_reference.md @@ -0,0 +1,2 @@ +# API Reference +Comprehensive API documentation. diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..7a60d33 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,2 @@ +# Architecture Overview +Details on the Selective State Space Model. diff --git a/docs/hardware_mapping.md b/docs/hardware_mapping.md new file mode 100644 index 0000000..946165b --- /dev/null +++ b/docs/hardware_mapping.md @@ -0,0 +1,2 @@ +# Hardware Mapping +Details on projection onto Intel Loihi 2. diff --git a/notebooks/01_exploratory_data_analysis.ipynb b/notebooks/01_exploratory_data_analysis.ipynb new file mode 100644 index 0000000..b621b8d --- /dev/null +++ b/notebooks/01_exploratory_data_analysis.ipynb @@ -0,0 +1 @@ +{"cells":[],"metadata":{},"nbformat":4,"nbformat_minor":5} diff --git a/notebooks/02_model_evaluation.ipynb b/notebooks/02_model_evaluation.ipynb new file mode 100644 index 0000000..b621b8d --- /dev/null +++ b/notebooks/02_model_evaluation.ipynb @@ -0,0 +1 @@ +{"cells":[],"metadata":{},"nbformat":4,"nbformat_minor":5} diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..648829f --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,8 @@ +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "aether-sparc" +version = "3.0.0" +description = "Asynchronous Event-Triggered Signal Processor" diff --git a/results/figures/.gitkeep b/results/figures/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/results/logs/.gitkeep b/results/logs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/deploy_loihi.sh b/scripts/deploy_loihi.sh new file mode 100644 index 0000000..f8f9eaf --- /dev/null +++ b/scripts/deploy_loihi.sh @@ -0,0 +1,3 @@ +#!/bin/bash -e +# Deployment script for Intel Loihi 2 +echo "Deploying to Loihi 2..." diff --git a/scripts/evaluate.sh b/scripts/evaluate.sh new file mode 100644 index 0000000..4edc898 --- /dev/null +++ b/scripts/evaluate.sh @@ -0,0 +1,3 @@ +#!/bin/bash -e +# Evaluation script +python src/evaluate.py --config config/default.yaml diff --git a/scripts/train.sh b/scripts/train.sh new file mode 100644 index 0000000..a8eb3de --- /dev/null +++ b/scripts/train.sh @@ -0,0 +1,3 @@ +#!/bin/bash -e +# Training script for Aether-SPARC +python src/main.py --config config/default.yaml diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..80f0ce4 --- /dev/null +++ b/src/__init__.py @@ -0,0 +1 @@ +"""Source package for Aether-SPARC v3.""" diff --git a/src/core/__init__.py b/src/core/__init__.py new file mode 100644 index 0000000..30a63c7 --- /dev/null +++ b/src/core/__init__.py @@ -0,0 +1 @@ +"""Core functionalities for event-triggered signal processing.""" diff --git a/src/core/event_trigger.py b/src/core/event_trigger.py new file mode 100644 index 0000000..b4f1124 --- /dev/null +++ b/src/core/event_trigger.py @@ -0,0 +1,4 @@ +"""Adaptive Level-Crossing Sampling (ALCS) algorithms.""" + +def alcs_trigger(signal: list[float], threshold: float) -> list[float]: + return [s for s in signal if abs(s) > threshold] diff --git a/src/core/interpolation.py b/src/core/interpolation.py new file mode 100644 index 0000000..9fca400 --- /dev/null +++ b/src/core/interpolation.py @@ -0,0 +1,4 @@ +"""Zero-Order Hold and Linear Interpolation modules.""" + +def zero_order_hold(events): + pass diff --git a/src/core/predictive_coding.py b/src/core/predictive_coding.py new file mode 100644 index 0000000..2533d64 --- /dev/null +++ b/src/core/predictive_coding.py @@ -0,0 +1,4 @@ +"""Predictive coding mechanisms for neuromorphic state update transitions.""" + +def predict(model: "torch.nn.Module", state: "torch.Tensor") -> "torch.Tensor": + return model.forward(state) diff --git a/src/data/__init__.py b/src/data/__init__.py new file mode 100644 index 0000000..06f2e8b --- /dev/null +++ b/src/data/__init__.py @@ -0,0 +1 @@ +"""Data loading and preprocessing.""" diff --git a/src/data/loader.py b/src/data/loader.py new file mode 100644 index 0000000..0403c72 --- /dev/null +++ b/src/data/loader.py @@ -0,0 +1,4 @@ +"""Dataloaders for high temporal sparsity signals.""" + +class DataLoader: + pass diff --git a/src/data/transforms.py b/src/data/transforms.py new file mode 100644 index 0000000..a9cc388 --- /dev/null +++ b/src/data/transforms.py @@ -0,0 +1,4 @@ +"""Signal transformations.""" + +def apply_transform(signal: "np.ndarray") -> "np.ndarray": + return signal diff --git a/src/evaluate.py b/src/evaluate.py new file mode 100644 index 0000000..1243e1c --- /dev/null +++ b/src/evaluate.py @@ -0,0 +1,7 @@ +"""Evaluation script.""" + +def evaluate(): + print("Evaluating...") + +if __name__ == "__main__": + evaluate() diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..fdcfde1 --- /dev/null +++ b/src/main.py @@ -0,0 +1,7 @@ +"""Main entry point for Aether-SPARC v3.""" + +def main(): + print("Starting Aether-SPARC...") + +if __name__ == "__main__": + main() diff --git a/src/models/__init__.py b/src/models/__init__.py new file mode 100644 index 0000000..6e5edcc --- /dev/null +++ b/src/models/__init__.py @@ -0,0 +1 @@ +"""Neuromorphic State Space Models.""" diff --git a/src/models/loihi.py b/src/models/loihi.py new file mode 100644 index 0000000..07fe5e0 --- /dev/null +++ b/src/models/loihi.py @@ -0,0 +1,5 @@ +"""Intel Loihi 2 silicon specification mappings.""" + +class Loihi2Mapper: + def __init__(self, mac_energy: float): + self.mac_energy = mac_energy diff --git a/src/models/mamba.py b/src/models/mamba.py new file mode 100644 index 0000000..cf2f045 --- /dev/null +++ b/src/models/mamba.py @@ -0,0 +1,5 @@ +"""Selective State Space Model - Mamba architecture tailored for event-driven processing.""" + +class Mamba: + def __init__(self): + pass diff --git a/src/models/s4.py b/src/models/s4.py new file mode 100644 index 0000000..d6469a9 --- /dev/null +++ b/src/models/s4.py @@ -0,0 +1,5 @@ +"""Structured State Space sequence model (S4) implementation.""" + +class S4: + def __init__(self): + pass diff --git a/src/utils/__init__.py b/src/utils/__init__.py new file mode 100644 index 0000000..6df1719 --- /dev/null +++ b/src/utils/__init__.py @@ -0,0 +1 @@ +"""Utility functions for data and metrics.""" diff --git a/src/utils/logger.py b/src/utils/logger.py new file mode 100644 index 0000000..6d58fa7 --- /dev/null +++ b/src/utils/logger.py @@ -0,0 +1,3 @@ +"""Experiment logging utilities.""" + +import logging diff --git a/src/utils/metrics.py b/src/utils/metrics.py new file mode 100644 index 0000000..513a4b0 --- /dev/null +++ b/src/utils/metrics.py @@ -0,0 +1,4 @@ +"""Energy and Compute Accounting metrics.""" + +def compute_macs(events: list) -> int: + return len(events) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..38c89b6 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +"""Unit and integration tests.""" diff --git a/tests/test_mamba.py b/tests/test_mamba.py new file mode 100644 index 0000000..8421760 --- /dev/null +++ b/tests/test_mamba.py @@ -0,0 +1,8 @@ +"""Tests for Mamba selective state space model.""" +import unittest +from src.models.mamba import Mamba + +class TestMamba(unittest.TestCase): + def test_init(self): + m = Mamba() + self.assertIsNotNone(m) diff --git a/tests/test_metrics.py b/tests/test_metrics.py new file mode 100644 index 0000000..9acefa7 --- /dev/null +++ b/tests/test_metrics.py @@ -0,0 +1,7 @@ +"""Tests for MAC accounting.""" +import unittest +from src.utils.metrics import compute_macs + +class TestMetrics(unittest.TestCase): + def test_macs(self): + self.assertEqual(compute_macs([1, 2]), 2) diff --git a/tests/test_s4.py b/tests/test_s4.py new file mode 100644 index 0000000..ef83899 --- /dev/null +++ b/tests/test_s4.py @@ -0,0 +1,8 @@ +"""Tests for S4 model.""" +import unittest +from src.models.s4 import S4 + +class TestS4(unittest.TestCase): + def test_init(self): + s = S4() + self.assertIsNotNone(s) diff --git a/tests/test_trigger.py b/tests/test_trigger.py new file mode 100644 index 0000000..8ec3a28 --- /dev/null +++ b/tests/test_trigger.py @@ -0,0 +1,7 @@ +"""Tests for ALCS event trigger.""" +import unittest +from src.core.event_trigger import alcs_trigger + +class TestTrigger(unittest.TestCase): + def test_alcs(self): + self.assertEqual(alcs_trigger([1, 2, 3], 1.5), [2, 3])