CDash: Add comparison tables
[csit.git] / csit.infra.dash / app / cdash / utils / utils.py
index 4244560..6809998 100644 (file)
@@ -17,6 +17,7 @@
 import pandas as pd
 import dash_bootstrap_components as dbc
 
+from math import sqrt
 from numpy import isnan
 from dash import dcc
 from datetime import datetime
@@ -391,3 +392,28 @@ def get_list_group_items(
         )
 
     return children
+
+def relative_change_stdev(mean1, mean2, std1, std2):
+    """Compute relative standard deviation of change of two values.
+
+    The "1" values are the base for comparison.
+    Results are returned as percentage (and percentual points for stdev).
+    Linearized theory is used, so results are wrong for relatively large stdev.
+
+    :param mean1: Mean of the first number.
+    :param mean2: Mean of the second number.
+    :param std1: Standard deviation estimate of the first number.
+    :param std2: Standard deviation estimate of the second number.
+    :type mean1: float
+    :type mean2: float
+    :type std1: float
+    :type std2: float
+    :returns: Relative change and its stdev.
+    :rtype: float
+    """
+    mean1, mean2 = float(mean1), float(mean2)
+    quotient = mean2 / mean1
+    first = std1 / mean1
+    second = std2 / mean2
+    std = quotient * sqrt(first * first + second * second)
+    return (quotient - 1) * 100, std * 100