forked from Imagelibrary/littlefs
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:
@@ -450,7 +450,10 @@ class RExpr:
|
|||||||
return RFrac
|
return RFrac
|
||||||
|
|
||||||
def eval(self, fields={}):
|
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
|
# fold exprs
|
||||||
@func('sum')
|
@func('sum')
|
||||||
@@ -596,7 +599,7 @@ class RExpr:
|
|||||||
return RFloat
|
return RFloat
|
||||||
|
|
||||||
def eval(self, fields={}):
|
def eval(self, fields={}):
|
||||||
v = self.a.eval(fields)
|
v = RFrac(self.a.eval(fields))
|
||||||
if not float(v.b):
|
if not float(v.b):
|
||||||
return RFloat(1)
|
return RFloat(1)
|
||||||
else:
|
else:
|
||||||
@@ -608,7 +611,7 @@ class RExpr:
|
|||||||
return RInt
|
return RInt
|
||||||
|
|
||||||
def eval(self, fields={}):
|
def eval(self, fields={}):
|
||||||
return self.a.eval(fields).b
|
return RFrac(self.a.eval(fields)).b
|
||||||
|
|
||||||
@func('abs')
|
@func('abs')
|
||||||
class Abs(Expr):
|
class Abs(Expr):
|
||||||
|
|||||||
Reference in New Issue
Block a user