Source code for nlsq.interfaces.cache_protocol

"""Protocol definition for caching mechanisms.

This module defines the CacheProtocol that caching implementations
should follow, enabling different caching strategies.
"""

from typing import Any, Protocol, runtime_checkable


[docs] @runtime_checkable class CacheProtocol(Protocol): """Protocol for caching mechanisms. This protocol defines the interface for cache implementations, allowing different strategies (LRU, TTL, memory-bounded) to be used. Methods ------- get(key, default) Retrieve value from cache. set(key, value) Store value in cache. clear() Clear all cached values. """
[docs] def get(self, key: str, default: Any = None) -> Any: """Retrieve value from cache. Parameters ---------- key : str Cache key. default : Any Value to return if key not found. Returns ------- Any Cached value or default. """ ...
[docs] def set(self, key: str, value: Any) -> None: """Store value in cache. Parameters ---------- key : str Cache key. value : Any Value to store. """ ...
[docs] def clear(self) -> None: """Clear all cached values.""" ...
[docs] @runtime_checkable class BoundedCacheProtocol(Protocol): """Protocol for memory-bounded caches. Extended protocol for caches that track memory usage and can evict items based on size limits. """
[docs] def get(self, key: str, default: Any = None) -> Any: """Retrieve value from cache.""" ...
[docs] def set(self, key: str, value: Any) -> None: """Store value in cache.""" ...
[docs] def clear(self) -> None: """Clear all cached values.""" ...
@property def size_bytes(self) -> int: """Current cache size in bytes.""" ... @property def max_size_bytes(self) -> int: """Maximum cache size in bytes.""" ...
[docs] def evict(self, n_bytes: int) -> int: """Evict items to free at least n_bytes. Parameters ---------- n_bytes : int Minimum bytes to free. Returns ------- int Actual bytes freed. """ ...
[docs] class DictCache: """Simple dictionary-based cache implementation. A minimal cache implementation for testing and simple use cases. """ __slots__ = ("_cache",)
[docs] def __init__(self) -> None: self._cache: dict[str, Any] = {}
[docs] def get(self, key: str, default: Any = None) -> Any: """Retrieve value from cache.""" return self._cache.get(key, default)
[docs] def set(self, key: str, value: Any) -> None: """Store value in cache.""" self._cache[key] = value
[docs] def clear(self) -> None: """Clear all cached values.""" self._cache.clear()
[docs] def __contains__(self, key: str) -> bool: """Check if key exists in cache.""" return key in self._cache
[docs] def __len__(self) -> int: """Return number of cached items.""" return len(self._cache)