from collections import defaultdict from typing import List, Tuple import matplotlib.pyplot as plt from . import Render from .. import Result, SimulationRoundsAnalyzer, BoardDurationAnalyzer, ActivityMapper def plot(src_data: List[Tuple[str, List[int]]]): names, datas = list(zip(*src_data)) plt.boxplot(datas, labels=names) plt.xticks(rotation='vertical') # plt.margins() plt.ylabel("simulation rounds") plt.title("simulation retries") plt.show() class SimulationRoundsRender(Render): def render(self, results: List[Result]): data = defaultdict(list) for result in self.filter(results): get = result.get() for key in get: data[key].append(get[key]) data_tuples = [(key, data[key]) for key in sorted(data)] data_tuples = sorted(data_tuples, key=lambda x: sum(x[1])) plot(data_tuples) result_types = [SimulationRoundsAnalyzer] class BoardDurationHistRender(Render): result_types = [BoardDurationAnalyzer] def render(self, results: List[Result]): data = [] for result in self.filter(results): session = result.get() _data = [] for board in session: if "active" in board: _data.append(board["active"]) else: _data.append(0) data.append(_data) n, bins, patches = plt.hist(data, log=True) plt.show() class BoardDurationBoxRender(Render): result_types = [BoardDurationAnalyzer] def render(self, results: List[Result]): data = defaultdict(list) for result in self.filter(results): get = result.get() for board in get: duration = board['active'] if 'active' in board else 0 data[board['id']].append(duration) data_tuples = [(key, data[key]) for key in sorted(data)] data_tuples = sorted(data_tuples, key=lambda x: sum(x[1])) plot(data_tuples) class ActivityMapperRender(Render): result_types = [ActivityMapper] def render(self, results: List[Result]): pass