mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-26 21:14:19 +00:00
Remove royalnet.lazy
, superseded by lazy-object-proxy
https://github.com/ionelmc/python-lazy-object-proxy
This commit is contained in:
parent
6da801864a
commit
3229d9edac
3 changed files with 0 additions and 87 deletions
|
@ -1 +0,0 @@
|
||||||
from .lazy import *
|
|
|
@ -1,52 +0,0 @@
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from royalnet.royaltyping import *
|
|
||||||
|
|
||||||
Result = TypeVar("Result")
|
|
||||||
|
|
||||||
|
|
||||||
class Lazy:
|
|
||||||
def __init__(self, obj: Callable[[Any], Result], *args, **kwargs):
|
|
||||||
self._func: Callable[[Any], Result] = obj
|
|
||||||
self._args = args
|
|
||||||
self._kwargs = kwargs
|
|
||||||
self.evaluated = False
|
|
||||||
self._result = None
|
|
||||||
|
|
||||||
def _evaluate_args(self) -> List[Any]:
|
|
||||||
evaluated_args = []
|
|
||||||
for arg in self._args:
|
|
||||||
if isinstance(arg, Lazy):
|
|
||||||
arg = arg.evaluate()
|
|
||||||
evaluated_args.append(arg)
|
|
||||||
return evaluated_args
|
|
||||||
|
|
||||||
def _evaluate_kwargs(self) -> Dict[str, Any]:
|
|
||||||
evaluated_kwargs = {}
|
|
||||||
for key, value in self._kwargs.items():
|
|
||||||
if isinstance(value, Lazy):
|
|
||||||
value = value.evaluate()
|
|
||||||
evaluated_kwargs[key] = value
|
|
||||||
return evaluated_kwargs
|
|
||||||
|
|
||||||
def evaluate(self, *args, **kwargs) -> Result:
|
|
||||||
if not self.evaluated:
|
|
||||||
self._result = self._func(*self._evaluate_args(), *args, **self._evaluate_kwargs(), **kwargs)
|
|
||||||
self.evaluated = True
|
|
||||||
return self._result
|
|
||||||
|
|
||||||
@property
|
|
||||||
def e(self) -> Result:
|
|
||||||
return self.evaluate()
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def decorator(cls, *args, **kwargs):
|
|
||||||
def deco(func):
|
|
||||||
return cls(func, *args, **kwargs)
|
|
||||||
|
|
||||||
return deco
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = (
|
|
||||||
"Lazy",
|
|
||||||
)
|
|
|
@ -1,34 +0,0 @@
|
||||||
from royalnet.lazy import Lazy
|
|
||||||
|
|
||||||
|
|
||||||
def test_single_eval_no_args():
|
|
||||||
lazy = Lazy(lambda: 1)
|
|
||||||
assert not lazy.evaluated
|
|
||||||
assert lazy._result is None
|
|
||||||
result = lazy.evaluate()
|
|
||||||
assert result == 1
|
|
||||||
assert lazy.evaluated
|
|
||||||
assert lazy._result == 1
|
|
||||||
|
|
||||||
|
|
||||||
def test_single_eval_with_args():
|
|
||||||
lazy = Lazy(lambda a, b: a + b, 10, 10)
|
|
||||||
result = lazy.evaluate()
|
|
||||||
assert result == 20
|
|
||||||
assert lazy.evaluated
|
|
||||||
assert lazy._result == 20
|
|
||||||
|
|
||||||
|
|
||||||
def test_chained_eval():
|
|
||||||
twenty = Lazy(lambda a, b: a + b, 10, 10)
|
|
||||||
assert not twenty.evaluated
|
|
||||||
assert twenty._result is None
|
|
||||||
twentyfive = Lazy(lambda a, b: a + b, twenty, 5)
|
|
||||||
assert not twentyfive.evaluated
|
|
||||||
assert twentyfive._result is None
|
|
||||||
result = twentyfive.evaluate()
|
|
||||||
assert result == 25
|
|
||||||
assert twenty.evaluated
|
|
||||||
assert twenty._result == 20
|
|
||||||
assert twentyfive.evaluated
|
|
||||||
assert twentyfive._result == 25
|
|
Loading…
Reference in a new issue