|
| 1 | +# BindsNET - Spiking Neural Networks Library |
| 2 | + |
| 3 | +Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here. |
| 4 | + |
| 5 | +BindsNET is a Python spiking neural network simulation library built on PyTorch that supports both CPU and GPU computation. It is designed for machine learning and reinforcement learning applications with biologically inspired neural networks. |
| 6 | + |
| 7 | +## Working Effectively |
| 8 | + |
| 9 | +### Bootstrap the Environment |
| 10 | +Use these exact commands to set up the development environment: |
| 11 | + |
| 12 | +```bash |
| 13 | +# Install Poetry (required dependency manager) |
| 14 | +pip install poetry==2.1.2 |
| 15 | +poetry config virtualenvs.create false |
| 16 | + |
| 17 | +# Install core dependencies manually due to network timeout issues |
| 18 | +pip install torch matplotlib numpy scipy pandas tqdm tensorboardX torchvision --timeout=600 |
| 19 | +pip install pytest flake8 --timeout=600 |
| 20 | + |
| 21 | +# WARNING: Full package installation may fail due to network timeouts |
| 22 | +# These additional packages needed for full functionality (may timeout): |
| 23 | +pip install opencv-python scikit-image scikit-learn --timeout=600 |
| 24 | + |
| 25 | +# Try Poetry installation (often fails due to dependency conflicts) |
| 26 | +poetry install |
| 27 | +``` |
| 28 | + |
| 29 | +**CRITICAL TIMING**: Package installation can take 15-30 minutes due to large PyTorch dependencies. NEVER CANCEL pip install commands. Set timeout to 60+ minutes. |
| 30 | + |
| 31 | +### Build and Test |
| 32 | +```bash |
| 33 | +# Run all tests - NEVER CANCEL, can take 10-15 minutes |
| 34 | +python -m pytest test/ --timeout=900 |
| 35 | + |
| 36 | +# Run specific test modules |
| 37 | +python -m pytest test/network/ -v |
| 38 | +python -m pytest test/encoding/ -v |
| 39 | + |
| 40 | +# Quick validation test |
| 41 | +python -c "import bindsnet; print('BindsNET imported successfully')" |
| 42 | +``` |
| 43 | + |
| 44 | +**WARNING**: Full test suite requires ALL dependencies. Some tests may fail if OpenAI gym is not installed - this is expected. |
| 45 | + |
| 46 | +### Code Quality and Formatting |
| 47 | +```bash |
| 48 | +# Run linting (required before commits) |
| 49 | +flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics |
| 50 | + |
| 51 | +# Format code with black (automatic via pre-commit) |
| 52 | +poetry run pre-commit run -a |
| 53 | + |
| 54 | +# Install pre-commit hooks |
| 55 | +poetry run pre-commit install |
| 56 | +``` |
| 57 | + |
| 58 | +Always run linting before committing or CI will fail. |
| 59 | + |
| 60 | +## Validation Scenarios |
| 61 | + |
| 62 | +After making changes, ALWAYS test these scenarios: |
| 63 | + |
| 64 | +### Basic Import Test |
| 65 | +**WARNING**: Full package import currently fails due to missing opencv-python dependency. |
| 66 | +```bash |
| 67 | +# Test linting works (this is validated to work) |
| 68 | +flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics |
| 69 | + |
| 70 | +# Test individual modules (may work partially) |
| 71 | +python -c "import torch; print('PyTorch available')" |
| 72 | +python -c "import matplotlib.pyplot as plt; print('Matplotlib available')" |
| 73 | +``` |
| 74 | + |
| 75 | +### Working Validation Commands |
| 76 | +These commands are verified to work: |
| 77 | +```bash |
| 78 | +# Lint check - takes ~1 second, always run before commits |
| 79 | +flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics |
| 80 | + |
| 81 | +# Check repository structure |
| 82 | +ls -la bindsnet/ # Main package |
| 83 | +ls -la examples/ # Example scripts |
| 84 | +ls -la test/ # Test suite |
| 85 | +``` |
| 86 | + |
| 87 | +### Run Example Scripts |
| 88 | +**WARNING**: Examples require full dependency installation including opencv-python. |
| 89 | +Test examples to ensure core functionality: |
| 90 | +```bash |
| 91 | +# Simple MNIST example (takes 5-10 minutes) - ONLY after all deps installed |
| 92 | +cd examples/mnist |
| 93 | +python eth_mnist.py --n_neurons 100 --time 100 |
| 94 | + |
| 95 | +# Check example structure without running (works immediately) |
| 96 | +ls examples/mnist/ # MNIST classification examples |
| 97 | +ls examples/benchmark/ # Performance benchmarking |
| 98 | +ls examples/dotTracing/ # RL dot tracing demo |
| 99 | +``` |
| 100 | + |
| 101 | +### Docker Validation |
| 102 | +```bash |
| 103 | +# Build Docker image (takes 30-45 minutes, NEVER CANCEL) |
| 104 | +docker build . --timeout=3600 |
| 105 | + |
| 106 | +# Test Docker container |
| 107 | +docker run -it <image_id> python -c "import bindsnet; print('Docker setup working')" |
| 108 | +``` |
| 109 | + |
| 110 | +## Common Installation Issues |
| 111 | + |
| 112 | +### Critical Dependencies Issue |
| 113 | +**MAJOR ISSUE**: Package import fails until opencv-python is successfully installed: |
| 114 | +```bash |
| 115 | +# This is the blocking dependency - often fails due to network timeouts |
| 116 | +pip install opencv-python --timeout=600 |
| 117 | + |
| 118 | +# Without opencv-python, you'll get "ModuleNotFoundError: No module named 'cv2'" |
| 119 | +# when trying to import bindsnet |
| 120 | +``` |
| 121 | + |
| 122 | +### Poetry Installation Problems |
| 123 | +- Poetry may fail with `typing-extensions` conflicts |
| 124 | +- **Solution**: Install Poetry via pip, not curl installer |
| 125 | +- Use `poetry config virtualenvs.create false` to avoid venv conflicts |
| 126 | + |
| 127 | +### Network Timeout Issues |
| 128 | +- PyPI downloads frequently timeout, especially opencv-python and scikit packages |
| 129 | +- **Solution**: Use `--timeout=600` or higher for pip commands |
| 130 | +- If pip fails, try installing packages individually or use different PyPI mirrors |
| 131 | + |
| 132 | +### Missing Dependencies |
| 133 | +Common missing packages and solutions: |
| 134 | +```bash |
| 135 | +# If import errors occur: |
| 136 | +pip install matplotlib # for plotting |
| 137 | +pip install pandas # for data analysis |
| 138 | +pip install cv2 # actually opencv-python |
| 139 | +pip install torchvision # for vision utilities |
| 140 | +``` |
| 141 | + |
| 142 | +## Repository Structure |
| 143 | + |
| 144 | +### Key Directories |
| 145 | +- `bindsnet/` - Main package source code |
| 146 | + - `analysis/` - Analysis and plotting utilities |
| 147 | + - `conversion/` - ANN to SNN conversion tools |
| 148 | + - `datasets/` - Dataset loading utilities |
| 149 | + - `encoding/` - Input encoding methods |
| 150 | + - `environment/` - RL environment interfaces |
| 151 | + - `learning/` - STDP learning rules |
| 152 | + - `models/` - Pre-built network models |
| 153 | + - `network/` - Core network components (nodes, connections, topology) |
| 154 | + - `pipeline/` - Training and evaluation pipelines |
| 155 | + - `preprocessing/` - Data preprocessing utilities |
| 156 | + |
| 157 | +### Important Files |
| 158 | +- `pyproject.toml` - Poetry configuration and dependencies |
| 159 | +- `CONTRIBUTING.md` - Development guidelines |
| 160 | +- `.github/workflows/python-app.yml` - CI configuration |
| 161 | +- `examples/` - Example applications and benchmarks |
| 162 | +- `test/` - Test suite organized by module |
| 163 | +- `docs/` - Sphinx documentation source |
| 164 | + |
| 165 | +### Frequently Modified Files |
| 166 | +When working on core functionality, commonly edited files: |
| 167 | +- `bindsnet/network/nodes.py` - Neuron implementations |
| 168 | +- `bindsnet/network/topology.py` - Connection types |
| 169 | +- `bindsnet/learning/*.py` - STDP learning rules |
| 170 | +- `bindsnet/encoding/*.py` - Input encoding methods |
| 171 | + |
| 172 | +## Example Commands and Expected Times |
| 173 | + |
| 174 | +### Development Workflow |
| 175 | +```bash |
| 176 | +# Full development cycle (60-90 minutes total) |
| 177 | +poetry install # 20-30 min, NEVER CANCEL |
| 178 | +python -m pytest test/ # 10-15 min, NEVER CANCEL |
| 179 | +flake8 . # 1-2 min |
| 180 | +poetry run pre-commit run -a # 2-3 min |
| 181 | + |
| 182 | +# Quick validation cycle (1-5 minutes) - ALWAYS WORKS |
| 183 | +flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # ~1 second |
| 184 | +python -c "import torch; import matplotlib; print('Core deps available')" # ~2 seconds |
| 185 | +ls -la bindsnet/ examples/ test/ # Instant |
| 186 | + |
| 187 | +# Full validation cycle (only after ALL dependencies installed) |
| 188 | +python -c "import bindsnet" # Test full package import |
| 189 | +python examples/mnist/eth_mnist.py --time 50 --n_neurons 50 # 5-10 min |
| 190 | +``` |
| 191 | + |
| 192 | +### Running Examples |
| 193 | +```bash |
| 194 | +# MNIST classification (5-10 min) |
| 195 | +cd examples/mnist && python eth_mnist.py --plot |
| 196 | + |
| 197 | +# Benchmark comparison (varies by parameters, 10-30 min) |
| 198 | +cd examples/benchmark && python benchmark.py |
| 199 | + |
| 200 | +# RL dot tracing (2-5 min) |
| 201 | +cd examples/dotTracing && python dot_tracing.py |
| 202 | +``` |
| 203 | + |
| 204 | +## Build Troubleshooting |
| 205 | + |
| 206 | +### If Poetry Fails |
| 207 | +```bash |
| 208 | +# Fallback to pip installation |
| 209 | +pip install -e . # May also fail due to build dependencies |
| 210 | +pip install torch torchvision matplotlib numpy scipy pandas tqdm |
| 211 | +``` |
| 212 | + |
| 213 | +### If Tests Fail |
| 214 | +```bash |
| 215 | +# Run tests with more verbose output |
| 216 | +python -m pytest test/ -v -s --tb=long |
| 217 | + |
| 218 | +# Test specific modules that don't require all dependencies |
| 219 | +python -m pytest test/network/test_nodes.py -v |
| 220 | +``` |
| 221 | + |
| 222 | +### If Examples Don't Work |
| 223 | +```bash |
| 224 | +# Most likely cause: missing opencv-python |
| 225 | +pip install opencv-python --timeout=600 |
| 226 | + |
| 227 | +# Check that core dependencies are available |
| 228 | +pip list | grep torch # Should show torch and related packages |
| 229 | +pip list | grep matplotlib |
| 230 | +pip list | grep opencv # Look for opencv-python |
| 231 | + |
| 232 | +# If opencv still fails, package import will fail |
| 233 | +# Alternative: work directly with specific module files |
| 234 | +``` |
| 235 | + |
| 236 | +## Performance Notes |
| 237 | + |
| 238 | +- **CPU vs GPU**: Code supports both, GPU much faster for large networks |
| 239 | +- **Memory Usage**: Large networks can use significant RAM/VRAM |
| 240 | +- **Build Time**: Initial dependency installation is slowest part |
| 241 | +- **Test Time**: Full test suite exercises many scenarios, be patient |
| 242 | + |
| 243 | +Always allow sufficient time for builds and tests. The library handles complex neural computations that require substantial dependencies and can take time to process. |
0 commit comments