From 26a29bda31f0df24825adb6f3ac961b0a74f70d6 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sat, 12 Apr 2025 01:00:04 -0500 Subject: [PATCH] =?UTF-8?q?scripts:=20Tweaked=20RFrac=20to=20return=20+-?= =?UTF-8?q?=E2=88=9E=20when=20evaluated=20as=20a=20float?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This affects the table renderers as well as csv.py's ratio expr. This is a bit more correct, handwaving 0/0 (mapping 0/0 -> 100% is useful for cov.py, please don't kill me mathematicians): frac(1,0) => 1/0 (∞%) frac(0,0) => 0/0 (100.0%) frac(0,1) => 0/1 (0.0%) --- scripts/cov.py | 7 ++++++- scripts/csv.py | 11 +++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/scripts/cov.py b/scripts/cov.py index 1df42ce7..a69e33c0 100755 --- a/scripts/cov.py +++ b/scripts/cov.py @@ -169,7 +169,12 @@ class RFrac(co.namedtuple('RFrac', 'a,b')): return '%11s' % (self,) def notes(self): - t = self.a.x/self.b.x if self.b.x else 1.0 + if self.b.x == 0 and self.a.x == 0: + t = 1.0 + elif self.b.x == 0: + t = mt.copysign(mt.inf, self.a.x) + else: + t = self.a.x / self.b.x return ['∞%' if t == +mt.inf else '-∞%' if t == -mt.inf else '%.1f%%' % (100*t)] diff --git a/scripts/csv.py b/scripts/csv.py index ac81e57d..c6d52e13 100755 --- a/scripts/csv.py +++ b/scripts/csv.py @@ -261,7 +261,12 @@ class RFrac(co.namedtuple('RFrac', 'a,b')): return '%11s' % (self,) def notes(self): - t = self.a.x/self.b.x if self.b.x else 1.0 + if self.b.x == 0 and self.a.x == 0: + t = 1.0 + elif self.b.x == 0: + t = mt.copysign(mt.inf, self.a.x) + else: + t = self.a.x / self.b.x return ['∞%' if t == +mt.inf else '-∞%' if t == -mt.inf else '%.1f%%' % (100*t)] @@ -735,8 +740,10 @@ class RExpr: def eval(self, fields={}): v = RFrac(self.a.eval(fields)) - if not float(v.b): + if not float(v.b) and not float(v.a): return RFloat(1) + elif not float(v.b): + return RFloat(mt.copysign(mt.inf, float(v.a))) else: return RFloat(float(v.a) / float(v.b))