Loading xlap/parse.py +53 −18 Changes for xlap/parse.py: 53 added lines, 18 removed lines. Original line number Diff line number Diff line import pandas as pd import numpy as np import ruamel.yaml import ruamel.yaml as yaml import logging import copy def _stamp_name_by_src_and_type(all_stamps, src, kind=None): Loading Loading @@ -39,6 +42,49 @@ def _diff_t_c(df, start, stop): return time.astype(float), cycles.astype(float) def _generate_thread_durations(df, cycle_reference, thread, stamps): # Generate Processing Duration src_name = "".join(map(str.capitalize, thread.split("_"))) # Generate Cycle Times time, cycles = _diff_t_c(df, cycle_reference[thread]["Start"], cycle_reference[thread]["Stop"]) # TODO: Introduce check if both are on the same host. df[src_name + "_D"] = time df[src_name + "_C"] = cycles df[src_name + "Cycle_D"] = time / cycles # Recreate missing timestamps from cycles for stamp_name in _stamp_name_by_thread_and_type(stamps, thread, "cycle"): start_stamp = cycle_reference[thread]["Start"] diff = df[stamp_name + "_C"] - df[start_stamp + "_C"] try: df[stamp_name + "_T"] = (diff * df[src_name + "Cycle_D"] + df[start_stamp + "_T"]).astype(int) except ValueError as e: df[stamp_name + "_T"] = np.nan logging.debug("Stamp '%s' caused a ValueError %s %s", stamp_name, src_name, start_stamp) raise e def evaluate_side(file, config, side="sender", kind=0): config = copy.deepcopy(config) stamps = config["stamps"] df = _evaluate_file(file, stamps, kind, _stamp_name_by_src_and_type(stamps, "sender", kind=["time"])[0], True) tr = config["time_reference"] cr = config["cycle_reference"] for src in config["threads"]: _generate_thread_durations(df, cr, src, config["stamps"]) config["durations"] = dict([(x,y) for (x,y) in config["durations"].items() if y["Source"] == side]) _generate_durations(df, config) df["Sender_D"] = 0 df["Receiver_D"] = 0 df["EndToEnd_D"] = df[tr[side]["Stop"] + "_T"] - df[tr[side]["Start"] + "_T"] return df def evaluate(sender_file, receiver_file, config, kind=0): stamps = config["stamps"] df1 = _evaluate_file(sender_file, stamps, kind, _stamp_name_by_src_and_type(stamps, "sender", kind=["time"])[0], True) Loading @@ -56,25 +102,9 @@ def evaluate(sender_file, receiver_file, config, kind=0): df[s + "_T"] -= df["Transport_D"] for src in config["threads"]: # Generate Processing Duration src_name = "".join(map(str.capitalize, src.split("_"))) # Generate Cycle Times time, cycles = _diff_t_c(df, cr[src]["Start"], cr[src]["Stop"]) # TODO: Introduce check if both are on the same host. df[src_name + "_D"] = time df[src_name + "_C"] = cycles df[src_name + "Cycle_D"] = time / cycles _generate_thread_durations(df, cr, src, stamps) # Recreate missing timestamps from cycles for stamp_name in _stamp_name_by_thread_and_type(stamps, src, "cycle"): start_stamp = cr[src]["Start"] diff = df[stamp_name + "_C"] - df[start_stamp + "_C"] df[stamp_name + "_T"] = (diff * df[src_name + "Cycle_D"] + df[start_stamp + "_T"]).astype(int) # Generate Durations for name, duration in config["durations"].items(): df[name + "_D"] = df[duration["Stop"] + "_T"] - df[duration["Start"] + "_T"] _generate_durations(df, config) df["Sender_D"] = df[tr["sender"]["Stop"] + "_T"] - df[tr["sender"]["Start"] + "_T"] df["Receiver_D"] = df[tr["receiver"]["Stop"] + "_T"] - df[tr["receiver"]["Start"] + "_T"] Loading @@ -83,6 +113,11 @@ def evaluate(sender_file, receiver_file, config, kind=0): return df def _generate_durations(df, config): for name, duration in config["durations"].items(): df[name + "_D"] = df[duration["Stop"] + "_T"] - df[duration["Start"] + "_T"] def parse_config(file_name="xlap.yml"): with open(file_name) as f: contents = f.read() Loading Loading
xlap/parse.py +53 −18 Changes for xlap/parse.py: 53 added lines, 18 removed lines. Original line number Diff line number Diff line import pandas as pd import numpy as np import ruamel.yaml import ruamel.yaml as yaml import logging import copy def _stamp_name_by_src_and_type(all_stamps, src, kind=None): Loading Loading @@ -39,6 +42,49 @@ def _diff_t_c(df, start, stop): return time.astype(float), cycles.astype(float) def _generate_thread_durations(df, cycle_reference, thread, stamps): # Generate Processing Duration src_name = "".join(map(str.capitalize, thread.split("_"))) # Generate Cycle Times time, cycles = _diff_t_c(df, cycle_reference[thread]["Start"], cycle_reference[thread]["Stop"]) # TODO: Introduce check if both are on the same host. df[src_name + "_D"] = time df[src_name + "_C"] = cycles df[src_name + "Cycle_D"] = time / cycles # Recreate missing timestamps from cycles for stamp_name in _stamp_name_by_thread_and_type(stamps, thread, "cycle"): start_stamp = cycle_reference[thread]["Start"] diff = df[stamp_name + "_C"] - df[start_stamp + "_C"] try: df[stamp_name + "_T"] = (diff * df[src_name + "Cycle_D"] + df[start_stamp + "_T"]).astype(int) except ValueError as e: df[stamp_name + "_T"] = np.nan logging.debug("Stamp '%s' caused a ValueError %s %s", stamp_name, src_name, start_stamp) raise e def evaluate_side(file, config, side="sender", kind=0): config = copy.deepcopy(config) stamps = config["stamps"] df = _evaluate_file(file, stamps, kind, _stamp_name_by_src_and_type(stamps, "sender", kind=["time"])[0], True) tr = config["time_reference"] cr = config["cycle_reference"] for src in config["threads"]: _generate_thread_durations(df, cr, src, config["stamps"]) config["durations"] = dict([(x,y) for (x,y) in config["durations"].items() if y["Source"] == side]) _generate_durations(df, config) df["Sender_D"] = 0 df["Receiver_D"] = 0 df["EndToEnd_D"] = df[tr[side]["Stop"] + "_T"] - df[tr[side]["Start"] + "_T"] return df def evaluate(sender_file, receiver_file, config, kind=0): stamps = config["stamps"] df1 = _evaluate_file(sender_file, stamps, kind, _stamp_name_by_src_and_type(stamps, "sender", kind=["time"])[0], True) Loading @@ -56,25 +102,9 @@ def evaluate(sender_file, receiver_file, config, kind=0): df[s + "_T"] -= df["Transport_D"] for src in config["threads"]: # Generate Processing Duration src_name = "".join(map(str.capitalize, src.split("_"))) # Generate Cycle Times time, cycles = _diff_t_c(df, cr[src]["Start"], cr[src]["Stop"]) # TODO: Introduce check if both are on the same host. df[src_name + "_D"] = time df[src_name + "_C"] = cycles df[src_name + "Cycle_D"] = time / cycles _generate_thread_durations(df, cr, src, stamps) # Recreate missing timestamps from cycles for stamp_name in _stamp_name_by_thread_and_type(stamps, src, "cycle"): start_stamp = cr[src]["Start"] diff = df[stamp_name + "_C"] - df[start_stamp + "_C"] df[stamp_name + "_T"] = (diff * df[src_name + "Cycle_D"] + df[start_stamp + "_T"]).astype(int) # Generate Durations for name, duration in config["durations"].items(): df[name + "_D"] = df[duration["Stop"] + "_T"] - df[duration["Start"] + "_T"] _generate_durations(df, config) df["Sender_D"] = df[tr["sender"]["Stop"] + "_T"] - df[tr["sender"]["Start"] + "_T"] df["Receiver_D"] = df[tr["receiver"]["Stop"] + "_T"] - df[tr["receiver"]["Start"] + "_T"] Loading @@ -83,6 +113,11 @@ def evaluate(sender_file, receiver_file, config, kind=0): return df def _generate_durations(df, config): for name, duration in config["durations"].items(): df[name + "_D"] = df[duration["Stop"] + "_T"] - df[duration["Start"] + "_T"] def parse_config(file_name="xlap.yml"): with open(file_name) as f: contents = f.read() Loading