jamtur01's picture
Upload folder using huggingface_hub
9c6594c verified
raw
history blame contribute delete
625 Bytes
from typing import Callable, Generic, Optional, TypeVar
R = TypeVar("R")
class Thunk(Generic[R]):
"""
A simple lazy evaluation implementation that lets you delay
execution of a function. It properly handles releasing the
function once it is forced.
"""
f: Optional[Callable[[], R]]
r: Optional[R]
__slots__ = ["f", "r"]
def __init__(self, f: Callable[[], R]):
self.f = f
self.r = None
def force(self) -> R:
if self.f is None:
return self.r # type: ignore[return-value]
self.r = self.f()
self.f = None
return self.r