def getResultsRange(self): """Returns the valid result range for this analysis duplicate, based on both on the result and duplicate variation set in the original analysis A Duplicate will be out of range if its result does not match with the result for the parent analysis plus the duplicate variation in % as the margin error. :return: A dictionary with the keys min and max :rtype: dict """ specs = ResultsRangeDict() analysis = self.getAnalysis() if not analysis: return specs result = analysis.getResult() if not api.is_floatable(result): return specs specs.min = specs.max = result result = api.to_float(result) dup_variation = analysis.getDuplicateVariation() dup_variation = api.to_float(dup_variation) if not dup_variation: return specs margin = abs(result) * (dup_variation / 100.0) specs.min = str(result - margin) specs.max = str(result + margin) return specs
def getResultsRange(self): """Returns the valid result range for this analysis duplicate, based on both on the result and duplicate variation set in the original analysis A Duplicate will be out of range if its result does not match with the result for the parent analysis plus the duplicate variation in % as the margin error. If the duplicate is from an analysis with result options and/or string results enabled (with non-numeric value), returns an empty result range :return: A dictionary with the keys min and max :rtype: dict """ # Get the original analysis original_analysis = self.getAnalysis() if not original_analysis: logger.warn("Orphan duplicate: {}".format(repr(self))) return {} # Return empty if results option enabled (exact match expected) if original_analysis.getResultOptions(): return {} # Return empty if non-floatable (exact match expected) original_result = original_analysis.getResult() if not api.is_floatable(original_result): return {} # Calculate the min/max based on duplicate variation % specs = ResultsRangeDict(uid=self.getServiceUID()) dup_variation = original_analysis.getDuplicateVariation() dup_variation = api.to_float(dup_variation, default=0) if not dup_variation: # We expect an exact match specs.min = specs.max = original_result return specs original_result = api.to_float(original_result) margin = abs(original_result) * (dup_variation / 100.0) specs.min = str(original_result - margin) specs.max = str(original_result + margin) return specs