| """Base class for WebDriver tests.""" |
| |
| from __future__ import absolute_import |
| from __future__ import division |
| from __future__ import print_function |
| |
| import math |
| |
| |
| def mean(list_values): |
| """Returns the mean of a list of numeric values. |
| |
| Args: |
| list_values: A list of numeric values. |
| Returns: |
| Appropriate value. |
| """ |
| if not list_values: |
| return None |
| |
| return sum(list_values) / len(list_values) |
| |
| |
| def percentile(list_values, target_percentile): |
| """Returns the percentile of a list. |
| |
| This method interpolates between two numbers if the percentile lands between |
| two data points. |
| |
| Args: |
| list_values: A sortable list of values |
| target_percentile: A number ranging from 0-100. |
| Returns: |
| Appropriate value. |
| Raises: |
| RuntimeError: Raised on invalid args. |
| """ |
| if not list_values: |
| return None |
| if target_percentile > 100 or target_percentile < 0: |
| raise RuntimeError("target_percentile must be 0-100") |
| sorted_values = sorted(list_values) |
| |
| if target_percentile == 100: |
| return sorted_values[-1] |
| fractional, index = math.modf( |
| (len(sorted_values) - 1) * (target_percentile * 0.01)) |
| index = int(index) |
| |
| if len(sorted_values) == index + 1: |
| return sorted_values[index] |
| |
| return sorted_values[index] * ( |
| 1 - fractional) + sorted_values[index + 1] * fractional |
| |
| |
| def sample_variance(list_values): |
| """Returns the variance of a list of numeric values. |
| |
| Args: |
| list_values: A list of numeric values. |
| Returns: |
| Appropriate value. |
| """ |
| if not list_values: |
| return None |
| if len(list_values) <= 1: |
| return 0 |
| |
| mean_of_values = mean(list_values) |
| dif_squared_sum = 0 |
| for value in list_values: |
| dif = value - mean_of_values |
| dif_squared_sum += dif * dif |
| |
| return dif_squared_sum / (len(list_values) - 1) |
| |
| |
| def sample_standard_deviation(list_values): |
| """Returns the standard deviation of a list of numeric values. |
| |
| Args: |
| list_values: A list of numeric values. |
| Returns: |
| Appropriate value. |
| """ |
| if not list_values: |
| return None |
| |
| return math.sqrt(sample_variance(list_values)) |