3
3
import warnings
4
4
from collections import deque
5
5
from collections .abc import Generator , Sequence
6
+ from typing import Any , Callable
6
7
7
8
etuple_repr = reprlib .Repr ()
8
9
etuple_repr .maxstring = 100
@@ -164,6 +165,10 @@ def evaled_obj(self):
164
165
res = self ._eval_step ()
165
166
return trampoline_eval (res )
166
167
168
+ @evaled_obj .setter
169
+ def evaled_obj (self , obj ):
170
+ raise ValueError ("Value of evaluated expression cannot be set!" )
171
+
167
172
@property
168
173
def eval_obj (self ):
169
174
warnings .warn (
@@ -173,6 +178,9 @@ def eval_obj(self):
173
178
)
174
179
return trampoline_eval (self ._eval_step ())
175
180
181
+ def _eval_apply (self , op : Callable , op_args : inspect .BoundArguments ) -> Any :
182
+ return op (* op_args .args , ** op_args .kwargs )
183
+
176
184
def _eval_step (self ):
177
185
if len (self ._tuple ) == 0 :
178
186
raise InvalidExpression ("Empty expression." )
@@ -212,7 +220,7 @@ def _eval_step(self):
212
220
)
213
221
op_args .apply_defaults ()
214
222
215
- _evaled_obj = op ( * op_args . args , ** op_args . kwargs )
223
+ _evaled_obj = self . _eval_apply ( op , op_args )
216
224
217
225
if isinstance (_evaled_obj , Generator ):
218
226
self ._evaled_obj = _evaled_obj
@@ -221,10 +229,6 @@ def _eval_step(self):
221
229
self ._evaled_obj = _evaled_obj
222
230
yield self ._evaled_obj
223
231
224
- @evaled_obj .setter
225
- def evaled_obj (self , obj ):
226
- raise ValueError ("Value of evaluated expression cannot be set!" )
227
-
228
232
def __add__ (self , x ):
229
233
res = self ._tuple + x
230
234
if self ._parent is not None and res == self ._parent ._tuple :
0 commit comments