in treeherder/webapp/api/perfcompare_utils.py [0:0]
def get_abs_ttest_value(control_values, test_values):
"""
If a set has only one value, assume average-ish-plus standard deviation, which
will manifest as smaller t-value the less items there are at the group
(so quite small for 1 value). This default value is a parameter.
C/T mean control/test group (in our case base/new data).
"""
length_control = len(control_values)
length_test = len(test_values)
if not length_control or not length_test:
return 0
control_group_avg = mean(control_values) if length_control else 0
test_group_avg = mean(test_values) if length_test else 0
stddev_control = (
stdev(control_values) if length_control > 1 else STDDEV_DEFAULT_FACTOR * control_group_avg
)
stddev_test = stdev(test_values) if length_test > 1 else STDDEV_DEFAULT_FACTOR * test_group_avg
try:
if length_control == 1:
stddev_control = (control_values[0] * stddev_test) / test_group_avg
elif length_test == 1:
stddev_test = (test_values[0] * stddev_control) / control_group_avg
except ZeroDivisionError:
return 0
delta = test_group_avg - control_group_avg
std_diff_err = sqrt(
(stddev_control * stddev_control) / length_control # control-variance / control-size
+ (stddev_test * stddev_test) / length_test
)
try:
res = abs(delta / std_diff_err)
except ZeroDivisionError:
return 0
return res