Skip to content

Commit b5acdc8

Browse files
Add a method for generic ExpressionTuple evaluation
1 parent 1e9a057 commit b5acdc8

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

etuples/core.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import warnings
44
from collections import deque
55
from collections.abc import Generator, Sequence
6+
from typing import Any, Callable
67

78
etuple_repr = reprlib.Repr()
89
etuple_repr.maxstring = 100
@@ -164,6 +165,10 @@ def evaled_obj(self):
164165
res = self._eval_step()
165166
return trampoline_eval(res)
166167

168+
@evaled_obj.setter
169+
def evaled_obj(self, obj):
170+
raise ValueError("Value of evaluated expression cannot be set!")
171+
167172
@property
168173
def eval_obj(self):
169174
warnings.warn(
@@ -173,6 +178,9 @@ def eval_obj(self):
173178
)
174179
return trampoline_eval(self._eval_step())
175180

181+
def _eval_apply(self, op: Callable, op_args: inspect.BoundArguments) -> Any:
182+
return op(*op_args.args, **op_args.kwargs)
183+
176184
def _eval_step(self):
177185
if len(self._tuple) == 0:
178186
raise InvalidExpression("Empty expression.")
@@ -212,7 +220,7 @@ def _eval_step(self):
212220
)
213221
op_args.apply_defaults()
214222

215-
_evaled_obj = op(*op_args.args, **op_args.kwargs)
223+
_evaled_obj = self._eval_apply(op, op_args)
216224

217225
if isinstance(_evaled_obj, Generator):
218226
self._evaled_obj = _evaled_obj
@@ -221,10 +229,6 @@ def _eval_step(self):
221229
self._evaled_obj = _evaled_obj
222230
yield self._evaled_obj
223231

224-
@evaled_obj.setter
225-
def evaled_obj(self, obj):
226-
raise ValueError("Value of evaluated expression cannot be set!")
227-
228232
def __add__(self, x):
229233
res = self._tuple + x
230234
if self._parent is not None and res == self._parent._tuple:

0 commit comments

Comments
 (0)