Skip to content

Commit a4fea2a

Browse files
committed
Make some functions more generic
Negate, Abs, Incremented, Decremented, Doubled, Halved and SquareRoot now accept any numeric type instead of just int and float. (Min and Max were also updated, although there's no behaviour change as floor and ceiling aren't defined for any other numeric types.)
1 parent a974889 commit a4fea2a

File tree

1 file changed

+15
-24
lines changed

1 file changed

+15
-24
lines changed

‎interpreterprocessor.py‎

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@ def product(item):
7575

7676

7777
def Negate(item):
78-
if isinstance(item, int) or isinstance(item, float) or isinstance(item, Number):
79-
return -item
8078
if isinstance(item, Expression):
8179
item = item.run()
8280
if isinstance(item, String):
@@ -87,11 +85,10 @@ def Negate(item):
8785
if item and isinstance(item[0], Expression):
8886
item = iter_apply(item, lambda o: o.run())
8987
return iter_apply(item, Negate)
88+
return -item
9089

9190

9291
def Abs(item):
93-
if isinstance(item, int) or isinstance(item, float):
94-
return abs(item)
9592
if isinstance(item, Expression):
9693
item = item.run()
9794
if isinstance(item, String):
@@ -102,6 +99,7 @@ def Abs(item):
10299
if item and isinstance(item[0], Expression):
103100
item = iter_apply(item, lambda o: o.run())
104101
return iter_apply(item, Abs)
102+
return abs(item)
105103

106104

107105
def Sum(item):
@@ -216,12 +214,11 @@ def Incremented(item):
216214
item = str(item)
217215
if isinstance(item, str):
218216
item = float(item) if "." in item else int(item)
219-
if isinstance(item, float) or isinstance(item, int):
220-
return item + 1
221217
if hasattr(item, "__iter__"):
222218
if item and isinstance(item[0], Expression):
223219
item = iter_apply(item, lambda o: o.run())
224220
return iter_apply(item, Incremented)
221+
return item + 1
225222

226223

227224
def Decremented(item):
@@ -231,12 +228,11 @@ def Decremented(item):
231228
item = str(item)
232229
if isinstance(item, str):
233230
item = float(item) if "." in item else int(item)
234-
if isinstance(item, float) or isinstance(item, int):
235-
return item - 1
236231
if hasattr(item, "__iter__"):
237232
if item and isinstance(item[0], Expression):
238233
item = iter_apply(item, lambda o: o.run())
239234
return iter_apply(item, Decremented)
235+
return item - 1
240236

241237

242238
def Doubled(item):
@@ -246,12 +242,11 @@ def Doubled(item):
246242
item = str(item)
247243
if isinstance(item, str):
248244
item = float(item) if "." in item else int(item)
249-
if isinstance(item, float) or isinstance(item, int):
250-
return item * 2
251245
if hasattr(item, "__iter__"):
252246
if item and isinstance(item[0], Expression):
253247
item = iter_apply(item, lambda o: o.run())
254248
return iter_apply(item, Doubled)
249+
return item * 2
255250

256251

257252
def Halved(item):
@@ -261,12 +256,11 @@ def Halved(item):
261256
item = str(item)
262257
if isinstance(item, str):
263258
item = float(item) if "." in item else int(item)
264-
if isinstance(item, float) or isinstance(item, int):
265-
return item / 2 if item % 2 else item // 2
266259
if hasattr(item, "__iter__"):
267260
if item and isinstance(item[0], Expression):
268261
item = iter_apply(item, lambda o: o.run())
269262
return iter_apply(item, Halved)
263+
return item / 2 if item % 2 else item // 2
270264

271265

272266
def SquareRoot(item):
@@ -276,12 +270,11 @@ def SquareRoot(item):
276270
item = str(item)
277271
if isinstance(item, str):
278272
item = float(item)
279-
if isinstance(item, float) or isinstance(item, int):
280-
return item ** 0.5
281273
if hasattr(item, "__iter__"):
282274
if item and isinstance(item[0], Expression):
283275
item = iter_apply(item, lambda o: o.run())
284276
return iter_apply(item, SquareRoot)
277+
return item ** 0.5
285278

286279

287280
def Lower(item):
@@ -300,33 +293,31 @@ def Lower(item):
300293

301294

302295
def Min(item):
303-
if isinstance(item, int) or isinstance(item, float):
304-
return floor(item)
305296
if isinstance(item, Expression):
306297
item = item.run()
307298
if isinstance(item, String):
308299
item = str(item)
309300
if isinstance(item, str):
310301
return item and min(item)
311-
if hasattr(item, "__iter__") and item:
312-
if isinstance(item[0], Expression):
302+
if hasattr(item, "__iter__"):
303+
if item and isinstance(item[0], Expression):
313304
item = iter_apply(item, lambda o: o.run())
314-
return min(item)
305+
return min(item) if item else None
306+
return floor(item)
315307

316308

317309
def Max(item):
318-
if isinstance(item, int) or isinstance(item, float):
319-
return ceil(item)
320310
if isinstance(item, Expression):
321311
item = item.run()
322312
if isinstance(item, String):
323313
item = str(item)
324314
if isinstance(item, str):
325315
return item and max(item)
326-
if hasattr(item, "__iter__") and item:
327-
if isinstance(item[0], Expression):
316+
if hasattr(item, "__iter__"):
317+
if item and isinstance(item[0], Expression):
328318
item = iter_apply(item, lambda o: o.run())
329-
return max(item)
319+
return max(item) if item else None
320+
return ceil(item)
330321

331322

332323
def Upper(item):

0 commit comments

Comments
 (0)