From 66641c7598e00e753b4409f83031dabaa9d22b1e Mon Sep 17 00:00:00 2001 From: Nathan Weinberg Date: Thu, 14 Mar 2024 11:00:58 -0400 Subject: [PATCH] Add handling for ZeroDivisionError --- .gitignore | 1 + README.md | 4 ++-- src/touchstone/decision_maker/__init__.py | 25 +++++++++++++++-------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 08ce389..67a8feb 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ MANIFEST # Per-project virtualenvs .venv*/ +venv*/ diff --git a/README.md b/README.md index 5a9887a..5a5be43 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ It is suggested to use a venv to install and run touchstone. ```shell python -m venv /virtual/environment source /virtual/environment/bin/activate -git clone https://github.com/cloud-bulldozer/touchstone -cd touchstone +git clone https://github.com/cloud-bulldozer/benchmark-comparison +cd benchmark-comparison python setup.py develop touchstone_compare -h usage: touchstone_compare [-h] [--version] [--database {elasticsearch}] [--identifier-key IDENTIFIER] -u UUID [UUID ...] [-a ALIASES [ALIASES ...]] [-o {json,yaml,csv}] --config CONFIG [--output-file OUTPUT_FILE] diff --git a/src/touchstone/decision_maker/__init__.py b/src/touchstone/decision_maker/__init__.py index 6124e10..2879cad 100644 --- a/src/touchstone/decision_maker/__init__.py +++ b/src/touchstone/decision_maker/__init__.py @@ -31,16 +31,23 @@ def _compare(self, input_dict, compare_dict): for u, v in input_dict.items(): if u == self.baseline_uuid: continue - metric_percent = v * 100 / input_dict[self.baseline_uuid] - # If percentage is greater than 100, sustract 100 from it else substract it from 100 - deviation = metric_percent - 100 if metric_percent > 100 else 100 - metric_percent - deviation = -deviation if v < input_dict[self.baseline_uuid] else deviation - if (self.tolerancy >= 0 and v > base_val) or (self.tolerancy < 0 and v < base_val): - result = "Fail" - self.passed = False - self.fails += 1 - else: + try: + metric_percent = v * 100 / input_dict[self.baseline_uuid] + # ZeroDivisionError means baseline value was 0, no comparison to be made here + except ZeroDivisionError: result = "Pass" + deviation = 0 + pass + else: + # If percentage is greater than 100, sustract 100 from it else substract it from 100 + deviation = metric_percent - 100 if metric_percent > 100 else 100 - metric_percent + deviation = -deviation if v < input_dict[self.baseline_uuid] else deviation + if (self.tolerancy >= 0 and v > base_val) or (self.tolerancy < 0 and v < base_val): + result = "Fail" + self.passed = False + self.fails += 1 + else: + result = "Pass" if result not in compare_dict: compare_dict[result] = {} compare_dict[result] = {