| OLD | NEW |
| (Empty) | |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 """Interface of scorers to score and reason Result. |
| 6 |
| 7 A Scorer represents a heuristic rule to score a culprit cl result. |
| 8 """ |
| 9 |
| 10 import logging |
| 11 |
| 12 |
| 13 class Scorer(object): # pragma: no cover. |
| 14 |
| 15 def GetMetric(self, result): |
| 16 raise NotImplementedError() |
| 17 |
| 18 def Score(self, metric): |
| 19 """Score the result based on extracted metric.""" |
| 20 raise NotImplementedError() |
| 21 |
| 22 def Reason(self, metric, score): |
| 23 """Given the reason of this score.""" |
| 24 raise NotImplementedError() |
| 25 |
| 26 def __call__(self, result): |
| 27 """Returns score and reason of this result.""" |
| 28 metric = self.GetMetric(result) |
| 29 if metric is None: |
| 30 logging.warning('Cannot get needed metric of result %s for scorer %s', |
| 31 repr(result.ToDict()), self.name) |
| 32 return 0, '' |
| 33 |
| 34 score = self.Score(metric) |
| 35 reason = self.Reason(metric, score) |
| 36 return score, reason |
| 37 |
| 38 @property |
| 39 def name(self): |
| 40 return self.__class__.__name__ |
| OLD | NEW |