def get_abs_ttest_value()

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