Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(635)

Unified Diff: tools/telemetry/telemetry/value/list_of_scalar_values.py

Issue 1647513002: Delete tools/telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/value/list_of_scalar_values.py
diff --git a/tools/telemetry/telemetry/value/list_of_scalar_values.py b/tools/telemetry/telemetry/value/list_of_scalar_values.py
deleted file mode 100644
index bd898c9fd83bcd807066a135b08f4051e85f4251..0000000000000000000000000000000000000000
--- a/tools/telemetry/telemetry/value/list_of_scalar_values.py
+++ /dev/null
@@ -1,223 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import numbers
-import math
-
-from telemetry import value as value_module
-from telemetry.value import none_values
-from telemetry.value import summarizable
-
-
-def Variance(sample):
- """ Compute the population variance.
-
- Args:
- sample: a list of numbers.
- """
- k = len(sample) - 1 # Bessel correction
- if k <= 0:
- return 0
- m = _Mean(sample)
- return sum((x - m)**2 for x in sample)/k
-
-
-def StandardDeviation(sample):
- """ Compute standard deviation for a list of numbers.
-
- Args:
- sample: a list of numbers.
- """
- return math.sqrt(Variance(sample))
-
-
-def PooledStandardDeviation(list_of_samples, list_of_variances=None):
- """ Compute standard deviation for a list of samples.
-
- See: https://en.wikipedia.org/wiki/Pooled_variance for the formula.
-
- Args:
- list_of_samples: a list of lists, each is a list of numbers.
- list_of_variances: a list of numbers, the i-th element is the variance of
- the i-th sample in list_of_samples. If this is None, we use
- Variance(sample) to get the variance of the i-th sample.
- """
- pooled_variance = 0.0
- total_degrees_of_freedom = 0
- for i in xrange(len(list_of_samples)):
- l = list_of_samples[i]
- k = len(l) - 1 # Bessel correction
- if k <= 0:
- continue
- variance = list_of_variances[i] if list_of_variances else Variance(l)
- pooled_variance += k * variance
- total_degrees_of_freedom += k
- if total_degrees_of_freedom:
- return (pooled_variance/total_degrees_of_freedom) ** 0.5
- return 0
-
-
-def _Mean(values):
- return float(sum(values)) / len(values) if len(values) > 0 else 0.0
-
-
-class ListOfScalarValues(summarizable.SummarizableValue):
- """ ListOfScalarValues represents a list of numbers.
-
- By default, std is the standard deviation of all numbers in the list. Std can
- also be specified in the constructor if the numbers are not from the same
- population.
- """
- def __init__(self, page, name, units, values,
- important=True, description=None,
- tir_label=None, none_value_reason=None,
- std=None, same_page_merge_policy=value_module.CONCATENATE,
- improvement_direction=None):
- super(ListOfScalarValues, self).__init__(page, name, units, important,
- description, tir_label,
- improvement_direction)
- if values is not None:
- assert isinstance(values, list)
- assert len(values) > 0
- assert all(isinstance(v, numbers.Number) for v in values)
- assert std is None or isinstance(std, numbers.Number)
- else:
- assert std is None
- none_values.ValidateNoneValueReason(values, none_value_reason)
- self.values = values
- self.none_value_reason = none_value_reason
- self.same_page_merge_policy = same_page_merge_policy
- if values is not None and std is None:
- std = StandardDeviation(values)
- assert std is None or std >= 0, (
- 'standard deviation cannot be negative: %s' % std)
- self._std = std
-
- @property
- def std(self):
- return self._std
-
- @property
- def variance(self):
- return self._std ** 2
-
- def __repr__(self):
- if self.page:
- page_name = self.page.display_name
- else:
- page_name = 'None'
- if self.same_page_merge_policy == value_module.CONCATENATE:
- merge_policy = 'CONCATENATE'
- else:
- merge_policy = 'PICK_FIRST'
- return ('ListOfScalarValues(%s, %s, %s, %s, '
- 'important=%s, description=%s, tir_label=%s, std=%s, '
- 'same_page_merge_policy=%s, improvement_direction=%s)') % (
- page_name,
- self.name,
- self.units,
- repr(self.values),
- self.important,
- self.description,
- self.tir_label,
- self.std,
- merge_policy,
- self.improvement_direction)
-
- def GetBuildbotDataType(self, output_context):
- if self._IsImportantGivenOutputIntent(output_context):
- return 'default'
- return 'unimportant'
-
- def GetBuildbotValue(self):
- return self.values
-
- def GetRepresentativeNumber(self):
- return _Mean(self.values)
-
- def GetRepresentativeString(self):
- return repr(self.values)
-
- def IsMergableWith(self, that):
- return (super(ListOfScalarValues, self).IsMergableWith(that) and
- self.same_page_merge_policy == that.same_page_merge_policy)
-
- @staticmethod
- def GetJSONTypeName():
- return 'list_of_scalar_values'
-
- def AsDict(self):
- d = super(ListOfScalarValues, self).AsDict()
- d['values'] = self.values
- d['std'] = self.std
-
- if self.none_value_reason is not None:
- d['none_value_reason'] = self.none_value_reason
-
- return d
-
- @staticmethod
- def FromDict(value_dict, page_dict):
- kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict)
- kwargs['values'] = value_dict['values']
- kwargs['std'] = value_dict['std']
-
- if 'improvement_direction' in value_dict:
- kwargs['improvement_direction'] = value_dict['improvement_direction']
- if 'none_value_reason' in value_dict:
- kwargs['none_value_reason'] = value_dict['none_value_reason']
- if 'tir_label' in value_dict:
- kwargs['tir_label'] = value_dict['tir_label']
-
- return ListOfScalarValues(**kwargs)
-
- @classmethod
- def MergeLikeValuesFromSamePage(cls, values):
- assert len(values) > 0
- v0 = values[0]
-
- if v0.same_page_merge_policy == value_module.PICK_FIRST:
- return ListOfScalarValues(
- v0.page, v0.name, v0.units,
- values[0].values,
- important=v0.important,
- same_page_merge_policy=v0.same_page_merge_policy,
- none_value_reason=v0.none_value_reason,
- improvement_direction=v0.improvement_direction)
-
- assert v0.same_page_merge_policy == value_module.CONCATENATE
- return cls._MergeLikeValues(values, v0.page, v0.name, v0.tir_label)
-
- @classmethod
- def MergeLikeValuesFromDifferentPages(cls, values):
- assert len(values) > 0
- v0 = values[0]
- return cls._MergeLikeValues(values, None, v0.name, v0.tir_label)
-
- @classmethod
- def _MergeLikeValues(cls, values, page, name, tir_label):
- v0 = values[0]
- merged_values = []
- list_of_samples = []
- none_value_reason = None
- pooled_std = None
- for v in values:
- if v.values is None:
- merged_values = None
- none_value_reason = none_values.MERGE_FAILURE_REASON
- break
- merged_values.extend(v.values)
- list_of_samples.append(v.values)
- if merged_values:
- pooled_std = PooledStandardDeviation(
- list_of_samples, list_of_variances=[v.variance for v in values])
- return ListOfScalarValues(
- page, name, v0.units,
- merged_values,
- important=v0.important,
- tir_label=tir_label,
- same_page_merge_policy=v0.same_page_merge_policy,
- std=pooled_std,
- none_value_reason=none_value_reason,
- improvement_direction=v0.improvement_direction)

Powered by Google App Engine
This is Rietveld 408576698