示例#1
0
def _RegressionSizeScore(values, step_index):
    """Returns the "regression size" score at the given point."""
    left, right = values[:step_index], values[step_index:]
    step_size = abs(math_utils.Mean(left) - math_utils.Mean(right))
    if not step_size:
        return 0.0
    distance = _DistanceFromStep(values, step_index)
    if not distance:
        return float('inf')
    return step_size / distance
示例#2
0
 def testNormalize_ResultMeanIsZeroAndStdDevIsOne(self):
     # When a data series is normalized, it is guaranteed that the result
     # should have a mean of 0.0 and a standard deviation and variance of 1.0.
     _, y_values = zip(*_QUITE_STEPPISH)
     normalized = find_step._Normalize(y_values)
     self.assertAlmostEqual(0.0, math_utils.Mean(normalized))
     self.assertAlmostEqual(1.0, math_utils.StandardDeviation(normalized))
示例#3
0
def _ExtractValueAndError(trace):
    """Returns the value and measure of error from a chartjson trace dict.

  Args:
    trace: A dict that has one "result" from a performance test, e.g. one
        "value" in a Telemetry test, with the keys "trace_type", "value", etc.

  Returns:
    A pair (value, error) where |value| is a float and |error| is some measure
    of variance used to show error bars; |error| could be None.

  Raises:
    BadRequestError: Data format was invalid.
  """
    trace_type = trace.get('type')

    if trace_type == 'scalar':
        value = trace.get('value')
        if value is None and trace.get('none_value_reason'):
            return float('nan'), 0
        try:
            return float(value), 0
        except:
            raise BadRequestError('Expected scalar value, got: %r' % value)

    if trace_type == 'list_of_scalar_values':
        values = trace.get('values')
        if not isinstance(values, list) and values is not None:
            # Something else (such as a single scalar, or string) was given.
            raise BadRequestError('Expected list of scalar values, got: %r' %
                                  values)
        if not values or None in values:
            # None was included or values is None; this is not an error if there
            # is a reason.
            if trace.get('none_value_reason'):
                return float('nan'), float('nan')
            raise BadRequestError('Expected list of scalar values, got: %r' %
                                  values)
        if not all(_IsNumber(v) for v in values):
            raise BadRequestError('Non-number found in values list: %r' %
                                  values)
        value = math_utils.Mean(values)
        std = trace.get('std')
        if std is not None:
            error = std
        else:
            error = math_utils.StandardDeviation(values)
        return value, error

    if trace_type == 'histogram':
        return _GeomMeanAndStdDevFromHistogram(trace)

    raise BadRequestError('Invalid value type in chart object: %r' %
                          trace_type)
示例#4
0
 def testMean_ShortList_SameAsAlternativeImplementation(self):
     alternate_mean = lambda xs: sum(xs) / float(len(xs))
     self.assertEqual(alternate_mean([-1, 0.12, 0.72, 3.3, 8, 32, 439]),
                      math_utils.Mean([-1, 0.12, 0.72, 3.3, 8, 32, 439]))
示例#5
0
 def testMean_ShortList(self):
     self.assertEqual(0.5, math_utils.Mean([-3, 0, 1, 4]))
示例#6
0
 def testMean_OneValue(self):
     self.assertEqual(3.0, math_utils.Mean([3]))
示例#7
0
 def testMean_EmptyInput_ReturnsNan(self):
     self.assertTrue(math.isnan(math_utils.Mean([])))
示例#8
0
def _MakeSampleStats(sample):
    """Calculates relevant stats for a sample and makes a SampleStats object."""
    return SampleStats(math_utils.Mean(sample), math_utils.Variance(sample),
                       len(sample))
示例#9
0
def _StepFunctionValues(values, step_index):
    """Makes values for a step function corresponding to |values|."""
    left, right = values[:step_index], values[step_index:]
    step_left = len(left) * [math_utils.Mean(left)]
    step_right = len(right) * [math_utils.Mean(right)]
    return step_left + step_right
示例#10
0
def _Normalize(values):
    """Makes a series with the same shape but with variance = 1, mean = 0."""
    mean = math_utils.Mean(values)
    zeroed = [x - mean for x in values]
    stddev = math_utils.StandardDeviation(zeroed)
    return [math_utils.Divide(x, stddev) for x in zeroed]