104 lines
3.0 KiB
Python
104 lines
3.0 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
|
|
|
|
|
|
def plot(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)
|
|
plt.xticks(rotation=rotation)
|
|
# plt.margins()
|
|
plt.ylabel(ylabel)
|
|
plt.title(title)
|
|
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]):
|
|
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(list(data.items()), ylabel="simulation retries", title="sequential simulation retries", rotation=None)
|
|
|
|
result_types = [SimulationOrderAnalyzer] |