- Python: 3.8 or higher
- OS: Linux, macOS, or Windows
- RAM: 2 GB minimum (4 GB recommended)
- Disk: 500 MB for codebase and dependencies
- Python: 3.10 or higher
- RAM: 8 GB
- GPU: Optional (for accelerated numerical operations)
- [OK] Ubuntu 20.04 LTS and later
- [OK] Debian 11+
- [OK] macOS 10.14+
- [OK] Windows 10/11
- [OK] CentOS 8+
This method sets up a local development environment with all tools for running and modifying the code.
git clone https://github.com/rudywasfound/aethelix.git
cd aethelix# On Linux/macOS:
python3 -m venv .venv
source .venv/bin/activate
# On Windows (PowerShell):
python -m venv .venv
.venv\Scripts\Activate.ps1
# On Windows (Command Prompt):
python -m venv .venv
.venv\Scripts\activate.batWhy virtual environment? It isolates project dependencies from your system Python, preventing version conflicts.
pip install --upgrade pip setuptools wheel
pip install -r requirements.txtpython -c "import numpy; import matplotlib; print('[OK] All dependencies installed')"For containerized deployment:
docker build -t aethelix:latest -f Dockerfile .docker run -it \
-v $(pwd)/data:/app/data \
-v $(pwd)/output:/app/output \
aethelix:latest python main.pySee Deployment Guide for detailed Docker setup.
If you prefer Conda:
conda create -n aethelix python=3.10
conda activate aethelix
pip install -r requirements.txtOnce published to PyPI:
pip install aethelixCurrently in development. Install from source instead.
For high-performance telemetry processing with Rust acceleration:
- Rust 1.70+ (install)
- C compiler (gcc, clang, or MSVC)
cd rust_core
cargo build --release
# Optional: install Python bindings
pip install -e .See Rust Integration for detailed setup.
python -c "
import sys
print(f'Python: {sys.version}')
import numpy; print(f'NumPy: {numpy.__version__}')
import matplotlib; print(f'Matplotlib: {matplotlib.__version__}')
"Expected output:
Python: 3.10.X (...)
NumPy: 1.24.X
Matplotlib: 3.7.X
python -m unittest discover tests/ -vExpected: All tests pass (30+ tests)
python main.pyExpected output:
======================================================================
Causal Inference for Satellite Fault Diagnosis
======================================================================
[1] Initializing simulators...
[2] Running nominal scenario...
[3] Running degraded scenario (multi-fault)...
...
Outputs saved to 'output/'
| Package | Version | Purpose |
|---|---|---|
| NumPy | >=1.20.0 | Numerical computing, arrays, linear algebra |
| Matplotlib | >=3.3.0 | Plotting telemetry data and visualization |
Aethelix is intentionally lightweight:
- No heavy ML frameworks (scikit-learn, TensorFlow, PyTorch)
- No external optimization libraries
- No complex dependency trees
Benefits:
- Fast installation (~30 seconds)
- Small runtime footprint
- Easy to audit for security
- Works in constrained environments
For advanced features:
# For Jupyter notebooks
pip install jupyter ipykernel
# For API documentation generation
pip install sphinx sphinx-rtd-theme
# For code formatting and linting
pip install black flake8 pylint
# For testing with coverage
pip install coverage pytestSymptom: python: command not found or 'python' is not recognized
Solution:
# Check if Python 3 is available
python3 --version
# Use python3 instead of python
python3 -m venv .venvOn Windows, ensure Python is added to PATH during installation.
Symptom: activate: command not found or Invoke-WebRequest : The system cannot find the file specified
Solution:
# Verify .venv directory exists
ls -la .venv/
# On macOS/Linux, use full path:
source ./venv/bin/activate
# On Windows, use correct path:
.venv\Scripts\activate.bat # CMD
.venv\Scripts\Activate.ps1 # PowerShellSymptom: ERROR: Could not find a version that satisfies the requirement
Solution:
# Upgrade pip first
pip install --upgrade pip
# Install with verbose output to see details
pip install -r requirements.txt -v
# If proxy issues, configure pip
pip install -r requirements.txt --proxy [user:passwd@]proxy.server:portSymptom: ModuleNotFoundError: No module named 'numpy'
Solution:
# Verify virtual environment is activated
which python # or 'where python' on Windows
# Should show path inside .venv/
# Reinstall dependencies
pip install --force-reinstall -r requirements.txtSymptom: Plots not showing or error with matplotlib backend
Solution:
import matplotlib
# Add to top of your script:
matplotlib.use('Agg') # Non-interactive backend
# Or use environment variable:
# export MPLBACKEND=Aggmkdir -p outputls -la data/Should contain sample telemetry files (optional).
Edit main.py to customize:
- Input data directory
- Output plot locations
- Simulation parameters
python main.py
ls -la output/- Install Python extension (ms-python.python)
- Select interpreter:
.venv/bin/python - Create
.vscode/settings.json:
{
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
"python.formatting.provider": "black",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true
}- Open project
- Settings -> Project -> Python Interpreter
- Add Interpreter -> Existing Environment
- Select
.venv/bin/python
# Just ensure .venv/bin is in your PATH
export PATH="$(pwd)/.venv/bin:$PATH"pip install --upgrade -r requirements.txtcd rust_core
cargo update
cargo build --releasegit pull origin mainrm -rf .venvcd ..
rm -rf aethelix- Verify everything works: Run
python main.py - Learn the basics: Read Quick Start
- Explore examples: Check
tests/directory - Configure for your needs: Read Configuration Guide
Continue to: Quick Start ->
This documentation page includes updates from the v2.0 evaluation suite, incorporating empirical validation on European Space Agency (ESA) flight telemetry and improved hierarchical network rendering:
-
ESA OPS-SAT (OPSSAT-AD): Evaluated on ADCS reaction wheel magnetic interference and magnetometer attitude anomalies. By applying subsystem-aware persistence filtering (
$N=15$ consecutive samples for noisy magnetometer channels,$N=3$ for clean optical sensors), Aethelix achieves a 78.3% F1 score, comparable to deep LSTM autoencoder baselines (78.0% F1) without requiring historical model training. -
ESA-ADB Multi-Mission: Evaluated on satellite telemetry subject to periodic orbital thermal variation. To prevent false alarms caused by 90-minute day/night baseline oscillations, the engine evaluates innovation residuals (
$\Delta x_t = x_t - x_{t-1}$ ). Decoupling slow orbital dynamics from step-change fault signatures isolates transient subsystem anomalies.
-
Bounded Functional Corridors: The visualization script (
scripts/generate_dag_visuals.py) enforces strict vertical coordinate bounding (maximum node altitude$y=0.68$ ), ensuring clean separation from structural layer labels ($y=0.87$ ). -
Normalized Ranking Score Visualization: In accordance with project semantics, node color intensity maps directly to normalized ranking scores (e.g., 0.94 normalized score weight for
PCDU Regulator Failureon GSAT-6A; 0.89 normalized score weight forReaction Wheel Magnetic Interferenceon OPS-SAT). Active causal propagation paths connecting dominant root causes to observed telemetry deviations are highlighted along directed edges.
Benchmark datasets and diagnostic charts can be generated locally using the standalone scripts:
# Render hierarchical causal DAGs with normalized score weighting
python3 scripts/generate_dag_visuals.py
# Generate empirical validation charts across ESA datasets
python3 scripts/generate_validation_plots.py
# Execute benchmark suite evaluation
python3 scripts/esa_benchmark.py --dataset allGenerated diagnostic charts in docs/:
causal_dag_intensity_gsat6a.png— Multi-subsystem causal DAG mapping normalized ranking scores.causal_dag_intensity_opssat.png— ADCS magnetometer interference DAG structure.validation_signal_overlay.png— Telemetry Z-score deviations and persistence window thresholds.validation_confusion_matrix.png— Detection performance comparison against sequence-level baselines.validation_subsystem_metrics.png— Subsystem-level precision, recall, and F1 evaluation.validation_causal_attribution.png— Normalized root-cause score distribution across benchmark scenarios.