A comprehensive Python package for cognitive computing, implementing various brain-inspired computing paradigms for robust, efficient, and adaptive information processing.
The cognitive-computing
package provides implementations of several cognitive computing paradigms:
- Sparse Distributed Memory (SDM) β - Fully implemented
- Holographic Reduced Representations (HRR) β - Fully implemented
- Vector Symbolic Architectures (VSA) β - Fully implemented
- Hyperdimensional Computing (HDC) β - Fully implemented
These technologies enable:
- π§ Brain-inspired computing - Models based on human memory and cognition
- π Content-addressable storage - Retrieve data by content, not location
- π Noise tolerance - Graceful degradation with noisy inputs
- β‘ Fast approximate computing - Trade precision for speed and robustness
- π Symbolic reasoning - Combine neural and symbolic approaches
git clone https://github.com/transparentai-tech/cognitive-computing.git
cd cognitive-computing
pip install -e .
pip install -e ".[dev]"
pip install -e ".[viz]"
pip install -e ".[gpu]"
import numpy as np
from cognitive_computing.sdm import create_sdm
# Create a 1000-dimensional SDM
sdm = create_sdm(dimension=1000)
# Generate random binary patterns
address = np.random.randint(0, 2, 1000)
data = np.random.randint(0, 2, 1000)
# Store the pattern
sdm.store(address, data)
# Recall with perfect address
recalled_data = sdm.recall(address)
print(f"Perfect recall accuracy: {np.mean(recalled_data == data):.2%}")
# Recall with noisy address (10% noise)
from cognitive_computing.sdm.utils import add_noise
noisy_address = add_noise(address, noise_level=0.1)
recalled_noisy = sdm.recall(noisy_address)
print(f"Noisy recall accuracy: {np.mean(recalled_noisy == data):.2%}")
from cognitive_computing.sdm import SDM, SDMConfig
# Custom configuration
config = SDMConfig(
dimension=2000,
num_hard_locations=5000,
activation_radius=900,
storage_method="counters", # or "binary"
parallel=True,
num_workers=4
)
# Create SDM with custom parameters
sdm = SDM(config)
# Use different address decoders
from cognitive_computing.sdm.address_decoder import create_decoder
# Options: 'hamming', 'jaccard', 'random', 'adaptive', 'hierarchical', 'lsh'
decoder = create_decoder('adaptive', config, sdm.hard_locations)
from cognitive_computing.hrr import create_hrr
from cognitive_computing.hrr.encoding import RoleFillerEncoder
# Create HRR system
hrr = create_hrr(dimension=1024)
# Basic binding and unbinding
role = hrr.generate_vector()
filler = hrr.generate_vector()
binding = hrr.bind(role, filler)
retrieved = hrr.unbind(binding, role)
print(f"Similarity: {hrr.similarity(retrieved, filler):.3f}")
# Encode structured information
encoder = RoleFillerEncoder(hrr)
person = encoder.encode_structure({
"name": hrr.generate_vector(), # Vector for "John"
"age": hrr.generate_vector(), # Vector for "25"
"city": hrr.generate_vector() # Vector for "Boston"
})
# Cleanup memory for robust retrieval
from cognitive_computing.hrr.cleanup import CleanupMemory, CleanupMemoryConfig
cleanup = CleanupMemory(CleanupMemoryConfig(threshold=0.3), dimension=1024)
cleanup.add_item("john", hrr.generate_vector())
cleanup.add_item("mary", hrr.generate_vector())
# Clean up noisy vectors
noisy_vector = retrieved + np.random.randn(1024) * 0.2
name, clean_vector, similarity = cleanup.cleanup(noisy_vector, return_similarity=True)
from cognitive_computing.vsa import create_vsa, VSAConfig, VectorType
# Create VSA system
vsa = create_vsa(dimension=10000, vector_type=VectorType.BIPOLAR)
# Basic binding operations
a = vsa.generate_vector()
b = vsa.generate_vector()
bound = vsa.bind(a, b)
recovered = vsa.unbind(bound, a)
print(f"Similarity: {vsa.similarity(recovered, b):.3f}")
# Bundle multiple vectors
vectors = [vsa.generate_vector() for _ in range(5)]
bundled = vsa.bundle(vectors)
# Use different architectures
from cognitive_computing.vsa.architectures import BSC, MAP, FHRR
# Binary Spatter Codes
bsc = BSC(dimension=8192)
x = bsc.generate_vector()
y = bsc.generate_vector()
z = bsc.bind(x, y) # XOR binding
# Multiply-Add-Permute
map_vsa = MAP(dimension=10000)
bound = map_vsa.bind(a, b) # Uses multiplication and permutation
# Fourier HRR
fhrr = FHRR(dimension=1024)
complex_bound = fhrr.bind(a, b) # Complex-valued binding
-
Multiple Storage Methods
- Counter-based (default) - Better noise tolerance
- Binary - Lower memory usage
-
Six Address Decoders
- Hamming - Classic distance-based
- Jaccard - For sparse data
- Random - O(1) hashing
- Adaptive - Self-adjusting
- Hierarchical - Multi-level
- LSH - Locality-sensitive hashing
-
Comprehensive Analysis Tools
- Memory capacity estimation
- Activation pattern analysis
- Performance benchmarking
- Crosstalk measurement
-
Data Encoding Utilities
- Integer encoding
- Float encoding
- String encoding
- Vector encoding
-
Visualization Support
- Memory distribution plots
- Activation patterns
- Recall accuracy curves
- Interactive 3D visualizations
-
Core Operations
- Circular convolution binding
- Circular correlation unbinding
- Vector bundling (superposition)
- Real and complex storage modes
-
Encoding Strategies
- Role-filler binding
- Sequence encoding (positional/chaining)
- Hierarchical structures
- Tree encoding
-
Cleanup Memory
- Item storage and retrieval
- Similarity-based cleanup
- Multiple similarity metrics
- Persistence support
-
Analysis Tools
- Binding capacity analysis
- Crosstalk measurement
- Performance benchmarking
- Vector generation utilities
-
Visualization Support
- Similarity matrices
- Convolution spectra
- Cleanup space visualization
- Performance dashboards
-
Vector Types
- Binary vectors {0, 1}
- Bipolar vectors {-1, +1}
- Ternary vectors {-1, 0, +1}
- Complex unit vectors
- Integer vectors
-
Binding Operations
- XOR (self-inverse for binary)
- Element-wise multiplication
- Circular convolution
- MAP (Multiply-Add-Permute)
- Permutation-based binding
-
VSA Architectures
- Binary Spatter Codes (BSC)
- Multiply-Add-Permute (MAP)
- Fourier HRR (FHRR)
- Sparse VSA
- HRR-compatible mode
-
Encoding Strategies
- Random indexing for text
- Spatial encoding for coordinates
- Temporal encoding for sequences
- Level encoding for continuous values
- Graph encoding for networks
-
Analysis and Utilities
- Capacity analysis
- Vector generation utilities
- Architecture comparison tools
- Performance benchmarking
- Cross-architecture conversion
-
Hypervector Types
- Binary hypervectors {0, 1}
- Bipolar hypervectors {-1, +1}
- Ternary hypervectors {-1, 0, +1}
- Level hypervectors (multi-level quantized)
-
Core Operations
- Binding (XOR for binary, multiplication for others)
- Bundling (majority vote, averaging, weighted)
- Permutation (cyclic shift, random, block)
- Similarity (Hamming, cosine, Euclidean, Jaccard)
-
Classifiers
- One-shot learning classifier
- Adaptive online classifier
- Ensemble voting classifier
- Hierarchical multi-level classifier
-
Item Memory
- Associative storage and retrieval
- Content-based cleanup
- Similarity queries
- Merge and update operations
-
Encoding Strategies
- Scalar encoding (thermometer, level)
- Categorical encoding
- Sequence encoding (n-gram, positional)
- Spatial encoding (multi-dimensional)
- Record encoding (structured data)
- N-gram text encoding
-
Analysis and Utilities
- Capacity measurement
- Noise robustness testing
- Performance benchmarking
- Binding property analysis
- Similarity distribution analysis
from cognitive_computing.sdm import create_sdm
from cognitive_computing.sdm.utils import generate_random_patterns, add_noise
# Create SDM
sdm = create_sdm(dimension=1000)
# Generate base pattern and variations
base_pattern = np.random.randint(0, 2, 1000)
variations = [add_noise(base_pattern, 0.05) for _ in range(10)]
# Store all variations with same label
label = np.array([1, 0, 0, 0] + [0] * 996) # One-hot encoded label
for variant in variations:
sdm.store(variant, label)
# Recognize noisy input
test_input = add_noise(base_pattern, 0.15)
recalled_label = sdm.recall(test_input)
print(f"Pattern recognized: {np.argmax(recalled_label)}")
# Store sequential patterns
sequence = generate_random_patterns(10, 1000)[0] # 10 patterns
for i in range(len(sequence) - 1):
sdm.store(sequence[i], sequence[i + 1])
# Recall sequence
current = sequence[0]
recalled_sequence = [current]
for _ in range(len(sequence) - 1):
current = sdm.recall(current)
recalled_sequence.append(current)
from cognitive_computing.sdm.utils import PatternEncoder
encoder = PatternEncoder(dimension=1000)
sdm = create_sdm(dimension=1000)
# Encode and store different data types
# Integer
age = 25
age_encoded = encoder.encode_integer(age)
sdm.store(age_encoded, age_encoded)
# String
name = "Alice"
name_encoded = encoder.encode_string(name)
sdm.store(name_encoded, name_encoded)
# Float array
features = np.array([0.1, 0.5, 0.9, 0.2])
features_encoded = encoder.encode_vector(features)
sdm.store(features_encoded, features_encoded)
SDM operations are highly efficient:
from cognitive_computing.sdm.utils import evaluate_sdm_performance
# Run performance benchmark
results = evaluate_sdm_performance(sdm, test_patterns=100)
print(f"Write time: {results.write_time_mean*1000:.2f} ms")
print(f"Read time: {results.read_time_mean*1000:.2f} ms")
print(f"Recall accuracy: {results.recall_accuracy_mean:.2%}")
For large-scale applications, enable parallel processing:
config = SDMConfig(
dimension=5000,
num_hard_locations=10000,
parallel=True,
num_workers=8
)
sdm = SDM(config)
from cognitive_computing.sdm.visualizations import (
plot_memory_distribution,
plot_recall_accuracy,
visualize_memory_contents
)
# Analyze memory distribution
fig = plot_memory_distribution(sdm)
# Test and plot recall accuracy
test_results = evaluate_sdm_performance(sdm)
fig = plot_recall_accuracy(test_results)
# Interactive 3D visualization
fig = visualize_memory_contents(sdm, interactive=True)
Run the test suite:
# Run all tests
pytest
# Run specific module tests
pytest tests/test_sdm/
# Run with coverage
pytest --cov=cognitive_computing
# Run only fast tests
pytest -m "not slow"
We welcome contributions! Please see our Contributing Guide for details.
# Install in development mode with all dependencies
pip install -e ".[dev,viz]"
# Run code formatting
black cognitive_computing tests
# Run linting
flake8 cognitive_computing tests
# Run type checking
mypy cognitive_computing
-
β Sparse Distributed Memory (SDM) - Complete
- Core implementation with counter/binary storage
- Six address decoder strategies
- Comprehensive utilities and visualizations
- Full test coverage (226/226 tests passing)
-
β Holographic Reduced Representations (HRR) - Complete
- Circular convolution/correlation operations
- Role-filler and sequence encoding
- Cleanup memory implementation
- Full test coverage (184/184 tests passing)
-
β Vector Symbolic Architectures (VSA) - Complete
- Five vector types (binary, bipolar, ternary, complex, integer)
- Five binding operations (XOR, multiplication, convolution, MAP, permutation)
- Five complete architectures (BSC, MAP, FHRR, Sparse VSA, HRR-compatible)
- Comprehensive encoding strategies and utilities
- Near-complete test coverage (294/295 tests passing - 99.7%)
-
β Hyperdimensional Computing (HDC) - Complete
- Four hypervector types (binary, bipolar, ternary, level)
- Core operations (bind, bundle, permute, similarity)
- Item memory with associative retrieval
- Advanced classifiers (one-shot, adaptive, ensemble, hierarchical)
- Multiple encoding strategies (scalar, categorical, sequence, spatial, n-gram)
- Full test coverage (193/193 tests passing - 100%)
- Total Tests: 898 (897 passing, 1 skipped - 99.89% success rate)
- Total Modules: 36 core implementation files
- Example Scripts: 20 (all tested and working)
- Documentation: Complete API references, theory guides, and examples
-
π§ Advanced Integration Features
- Cross-paradigm operations
- Neural network interfaces (PyTorch, TensorFlow)
- GPU acceleration
- Distributed computing support
-
π§ Future Enhancements (see
planned_development/
)- Advanced decoders and storage mechanisms for SDM
- Enhanced convolution operations for HRR
- Learning and adaptation mechanisms for VSA
- Extreme-scale operations and quantum integration for HDC
- Unified cognitive architecture
- Complementary Technologies
If you use this package in your research, please cite:
@software{cognitive_computing,
title = {Cognitive Computing: A Python Package for Brain-Inspired Computing},
author = {Ian Hamilton},
year = {2025},
url = {https://github.com/transparentai-tech/cognitive-computing}
}
- Kanerva, P. (1988). Sparse Distributed Memory. MIT Press.
- Kanerva, P. (1993). "Sparse Distributed Memory and Related Models." Associative Neural Memories.
- Plate, T. A. (1995). "Holographic Reduced Representations." IEEE Transactions on Neural Networks.
- Gayler, R. W. (2003). "Vector Symbolic Architectures Answer Jackendoff's Challenges for Cognitive Neuroscience."
- Kanerva, P. (2009). "Hyperdimensional Computing: An Introduction to Computing in Distributed Representation."
- Plate, T. A. (2003). Holographic Reduced Representation: Distributed Representation for Cognitive Structures. CSLI Publications.
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by Pentti Kanerva's groundbreaking work on Sparse Distributed Memory
- Thanks to all contributors and the cognitive computing research community
Note: This package is ready for production use! All four core paradigms (SDM, HRR, VSA, HDC) are fully implemented with comprehensive test coverage (99.89%). The package is actively maintained and we welcome contributions for advanced integration features.