Workspace Analyzer Caches#
The Workspace Analyzer Caches module provides simple and efficient caching mechanisms for storing and reusing workspace analysis data.
Table of Contents#
Overview#
The caches module provides simple caching mechanisms for workspace analysis data to improve performance:
Memory Cache: Fast in-memory storage for small to medium datasets
Disk Cache: Persistent storage for large datasets or long-term use
Simple API: Easy-to-use interface for both cache types
When to Use#
Memory Cache: When you have sufficient RAM and need fast access
Disk Cache: When working with large datasets or need to persist results between sessions
Cache Types#
Memory Cache#
Fast in-memory caching for medium-sized datasets:
from embodichain.lab.sim.utility.workspace_analyzer.caches import MemoryCache
# Create memory cache
cache = MemoryCache()
# Add data
positions = [...] # Your pose data
cache.add(positions)
# Get all data
all_data = cache.get_all()
Disk Cache#
Persistent disk caching for large datasets:
from embodichain.lab.sim.utility.workspace_analyzer.caches import DiskCache
# Create disk cache
cache = DiskCache(save_dir="./my_cache")
# Add data
positions = [...] # Your pose data
cache.add(positions)
cache.flush() # Save to disk
# Get data
all_data = cache.get_all()
Cache Manager#
Simplified factory pattern for creating caches:
from embodichain.lab.sim.utility.workspace_analyzer.caches import CacheManager
# Create memory cache
memory_cache = CacheManager.create_cache("memory")
# Create disk cache
disk_cache = CacheManager.create_cache("disk", save_dir="./cache")
Usage Examples#
Basic Usage#
import numpy as np
from embodichain.lab.sim.utility.workspace_analyzer.caches import MemoryCache, DiskCache
# Memory cache example
memory_cache = MemoryCache()
# Add pose data
poses = [np.eye(4) for _ in range(1000)] # Example data
memory_cache.add(poses)
# Get data
cached_poses = memory_cache.get_all()
print(f"Cached {len(cached_poses)} poses")
# Disk cache example
disk_cache = DiskCache(save_dir="./workspace_cache")
disk_cache.add(poses)
disk_cache.flush() # Save to disk
# Reload data
reloaded_poses = disk_cache.get_all()
Real-world Usage#
# Cache usage in workspace analysis
def analyze_workspace_with_cache(robot_config, use_cache=True):
if use_cache:
# Use disk cache to save results
cache = DiskCache(save_dir=f"./cache_{robot_config.name}")
# Check if cached data exists
if cache.get_batch_count() > 0:
print("Loading data from cache...")
return cache.get_all()
# Generate new workspace data
print("Generating new workspace data...")
poses = generate_workspace_poses(robot_config)
if use_cache:
# Save results
cache.add(poses)
cache.flush()
print(f"Cached {len(poses)} poses to disk")
return poses
Best Practices#
Choosing Cache Type#
Small datasets (< 100k poses): Use
MemoryCacheLarge datasets (> 100k poses): Use
DiskCacheNeed persistence: Use
DiskCacheTemporary computation: Use
MemoryCache
Simple Selection Function#
def choose_cache(data_size, need_persistence=False):
"""Choose cache type based on data size and requirements"""
if need_persistence or data_size > 100000:
return DiskCache()
else:
return MemoryCache()
# Usage example
cache = choose_cache(data_size=50000, need_persistence=True)
API Reference#
Basic Methods#
All cache classes support these basic operations:
# Add data
cache.add(poses_list)
# Get all data
all_data = cache.get_all()
# Clear cache
cache.clear()
# Flush to disk (DiskCache only)
cache.flush()
Creating Caches#
# Memory cache
memory_cache = MemoryCache()
# Disk cache
disk_cache = DiskCache(save_dir="./my_cache")
# Using factory method
cache = CacheManager.create_cache("memory") # or "disk"
Quick Start#
# Simplest usage
from embodichain.lab.sim.utility.workspace_analyzer.caches import MemoryCache, DiskCache
# For small datasets
cache = MemoryCache()
# For large datasets or persistence needed
cache = DiskCache()
# Add data
cache.add(your_poses)
# Get data
result = cache.get_all()