In [ ]:
from predict import load_test_results, TestResults
from validate import join_dict_to_table
import netCDF4
from path import Path
from IPython.display import display
from functools import reduce, partial
from scipy.stats.mstats import gmean

In [ ]:
TESTS_RESULTS_DIR = "/home/shibbiry/Dropbox/documents/msu/clust_top/test_results/"

In [ ]:
def dataset_to_big_table(test_results: TestResults) -> pd.DataFrame:
    """
    Returns DataFrame with columns:
        msg_len, node1, node2, ping_mean, ping_median, ping_std_dev
    """
    tables = (
        join_dict_to_table(getattr(test_results, attr)).rename(columns={"value": column})
        for attr, column in [
            ("medians", "ping_median"),
            ("means", "ping_mean"),
            ("std_dev", "ping_std_dev")
        ]
    )
    return reduce(partial(pd.merge, on=["msg_len", "node1", "node2"]), tables)

In [ ]:
datasets = [load_test_results(dir_) for dir_ in Path(TESTS_RESULTS_DIR).dirs()]
big_tables = [dataset_to_big_table(dataset) for dataset in datasets]
for table in big_tables:
    table["ping_rel_std_dev"] = table["ping_std_dev"] / table["ping_mean"]

ping_rel_std_dev_geometric_means = pd.DataFrame(
    (gmean(table["ping_rel_std_dev"].dropna()) for table in big_tables),
    columns=["geom_mean_of_ping_rel_std_dev"]
) \
    .assign(name=[dataset.name for dataset in datasets])

In [ ]:
ping_rel_std_dev_geometric_means

In [ ]:
print(ping_rel_std_dev_geometric_means.set_index("name").sort_index().to_latex())