133 lines
3.8 KiB
Python
133 lines
3.8 KiB
Python
import json
|
|
from collections import defaultdict
|
|
from typing import List, Tuple
|
|
|
|
import matplotlib.pyplot as plt
|
|
import os
|
|
|
|
from analyzers import Store, BiogamesStore, SimulationOrderAnalyzer
|
|
from . import Render
|
|
from .. import Result, SimulationRoundsAnalyzer, BoardDurationAnalyzer, ActivityMapper
|
|
|
|
ONE_DAY = 24 * 60 * 60
|
|
|
|
|
|
def plot(src_data: List[Tuple[str, List[int]]], title: str = "simulation retries", ylabel: str = "simulation rounds",
|
|
xargs={}):
|
|
names, datas = list(zip(*src_data))
|
|
plt.boxplot(datas, labels=names, **xargs)
|
|
plt.xticks(rotation='vertical')
|
|
# plt.margins()
|
|
plt.ylabel(ylabel)
|
|
plt.title(title)
|
|
plt.show()
|
|
|
|
|
|
def plot_old(src_data: List[Tuple[str, List[int]]], ylabel="simulation rounds", title="simulation retries",
|
|
rotation='vertical'):
|
|
names, datas = list(zip(*src_data))
|
|
plt.boxplot(datas, labels=names, **{"showfliers": True})
|
|
plt.xticks(rotation=rotation)
|
|
# plt.margins()
|
|
plt.ylabel(ylabel)
|
|
plt.title(title)
|
|
plt.show()
|
|
|
|
|
|
class SimulationRoundsRender(Render):
|
|
result_types = [SimulationRoundsAnalyzer]
|
|
xargs = {}
|
|
|
|
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, xargs=self.xargs)
|
|
|
|
result_types = [SimulationRoundsAnalyzer]
|
|
|
|
|
|
class SimulationRoundsMeanRender(SimulationRoundsRender):
|
|
xargs = {"showfliers": False}
|
|
|
|
|
|
class BoardDurationHistRender(Render):
|
|
result_types = [BoardDurationAnalyzer]
|
|
|
|
def render(self, results: List[Result]):
|
|
plt.title("board display duration")
|
|
plt.xlabel("display time")
|
|
plt.ylabel("# of boards")
|
|
data = []
|
|
for result in self.filter(results):
|
|
session = result.get()
|
|
_data = []
|
|
for board in session:
|
|
if "active" in board:
|
|
value = board["active"]
|
|
if value > ONE_DAY:
|
|
_data.append(0)
|
|
else:
|
|
_data.append(value)
|
|
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
|
|
if duration < ONE_DAY:
|
|
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, "board duration", "display time", xargs={"showfliers": False})
|
|
|
|
|
|
class ActivityMapperRender(Render):
|
|
result_types = [ActivityMapper]
|
|
|
|
def render(self, results: List[Result]):
|
|
print(os.getcwd())
|
|
for result in self.filter(results):
|
|
data = result.get()
|
|
with open(os.path.join("static", "progress", "data", data['instance']), "w") as out:
|
|
json.dump(data["store"], out, indent=1)
|
|
return "ok"
|
|
|
|
|
|
class StoreRender(Render):
|
|
result_types = [Store, BiogamesStore]
|
|
|
|
def render(self, results: List[Result]):
|
|
for result in self.filter(results):
|
|
with open(os.path.join("static", "progress", "data", "fooo"), "w") as out:
|
|
json.dump(result.get(), out, indent=1)
|
|
|
|
|
|
class SimulationOrderRender(Render):
|
|
def render(self, results: List[Result]):
|
|
data = defaultdict(list)
|
|
for result in self.filter(results):
|
|
get = result.get()
|
|
for i, value in enumerate(get):
|
|
data[i].append(value)
|
|
# data_tuples = [(key, data[key]) for key in sorted(data)]
|
|
# data_tuples = sorted(data_tuples, key=lambda x: sum(x[1]))
|
|
# plot(enumerate([r.get() for r in self.filter(results)]))
|
|
plot_old(list(data.items()), ylabel="simulation retries", title="sequential simulation retries", rotation=None)
|
|
|
|
result_types = [SimulationOrderAnalyzer]
|