From 4e5d1c5e7ddf8e7dc3e8cf2a3610f28acd63aa28 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 11 Nov 2024 18:19:09 -0600 Subject: [PATCH] scripts: csv.py: Frac expr tweaks - Allow single-arg frac: - frac(a) => a/a - frac(a, b) => a/b This was already supported internally. - Implicitly cast to frac in frac ops: - ratio(3) => ratio(3/3) => 1.0 (100%) - total(3) => total(3/3) => 3 This makes a bit more sense than erroring. --- scripts/csv.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/csv.py b/scripts/csv.py index a6007f70..1a533556 100755 --- a/scripts/csv.py +++ b/scripts/csv.py @@ -450,7 +450,10 @@ class RExpr: return RFrac def eval(self, fields={}): - return RFrac(self.a.eval(fields), self.b.eval(fields)) + if len(self) == 1: + return RFrac(self.a.eval(fields)) + else: + return RFrac(self.a.eval(fields), self.b.eval(fields)) # fold exprs @func('sum') @@ -596,7 +599,7 @@ class RExpr: return RFloat def eval(self, fields={}): - v = self.a.eval(fields) + v = RFrac(self.a.eval(fields)) if not float(v.b): return RFloat(1) else: @@ -608,7 +611,7 @@ class RExpr: return RInt def eval(self, fields={}): - return self.a.eval(fields).b + return RFrac(self.a.eval(fields)).b @func('abs') class Abs(Expr):