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.
This commit is contained in:
Christopher Haster
2024-11-11 18:19:09 -06:00
parent d4c835ba89
commit 4e5d1c5e7d

View File

@@ -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):