Source code for adam_core.utils.bounded_lru

from __future__ import annotations

from collections import OrderedDict
from collections.abc import Hashable
from typing import TypeVar

K = TypeVar("K", bound=Hashable)
V = TypeVar("V")


[docs] def bounded_lru_get(cache: "OrderedDict[K, V]", key: K, *, maxsize: int) -> V | None: """ Get a value from a bounded LRU cache. If present, the entry is marked as most-recently used. If maxsize <= 0, the cache is treated as disabled. """ if int(maxsize) <= 0: return None v = cache.get(key) if v is None: return None cache.move_to_end(key) return v
[docs] def bounded_lru_put( cache: "OrderedDict[K, V]", key: K, value: V, *, maxsize: int ) -> None: """ Put a value into a bounded LRU cache. If maxsize <= 0, the cache is treated as disabled. """ if int(maxsize) <= 0: return cache[key] = value cache.move_to_end(key) while len(cache) > int(maxsize): cache.popitem(last=False)