from __future__ import print_function
import os, sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import cats
import hierarchy
import dependentchains
import sleepy
import independent
datadir = os.getcwd()+'/data/'
modules = [dependentchains, cats, hierarchy, sleepy, independent]
allcolors = ['r','b','g','k','c','y','m', 'r']
allpatterns = ['o-', 's:', '*-.', 'x--', '.-', '<-', '>-', 'v-']
tool_patterns = {}
fslabels, fshandles = [], []
toollabels, toolhandles = [], []
mod = None
for m in modules:
if m.name == sys.argv[1]:
mod = m
if mod is None:
print("Invalid mod: ", sys.argv[1])
exit(1)
verb = sys.argv[2]
if verb not in mod.verbs:
print("Invalid verb: ", sys.argv[2])
exit(1)
dates = os.listdir(datadir)
dates.sort()
date = dates[-1]
print('date', date, mod.name)
plt.figure(figsize=(6,4.3))
plt.title('%s %s on %s' % (verb, mod.name, date))
have_handled = {}
num_fs = len(os.listdir(datadir+date+'/'+mod.name+'/fac -j4'))
tools = os.listdir(datadir+date+'/'+mod.name)
tools.sort()
for tool in tools:
if not tool in tool_patterns:
tool_patterns[tool] = allpatterns[0]
allpatterns = allpatterns[1:]
if num_fs == 1:
mycolor = allcolors[0]
allcolors = allcolors[1:]
toollabels.append(tool)
toolhandles.append(plt.Line2D((0,1),(0,0), marker=tool_patterns[tool][0],
linestyle=tool_patterns[tool][1:], color='k'))
for fs in os.listdir(datadir+date+'/'+mod.name+'/'+tool):
if num_fs > 1 and not fs in fs_colors:
mycolor = allcolors[0]
allcolors = allcolors[1:]
fslabels.append(fs)
fshandles.append(plt.Line2D((0,1),(0,0), color=fs_colors[fs], linewidth=3))
data = np.loadtxt(datadir+date+'/'+mod.name+'/'+tool+'/'+fs+'/'+verb+'.txt')
if len(data.shape) == 2:
for n in data[:,0]:
ind = data[:,0] == n
data[ind,1] = np.mean(data[ind,1])
data = np.sort(np.vstack({tuple(row) for row in data}), axis=0) if num_fs > 1:
mylabel = '%s on %s' % (tool, fs)
else:
mylabel = tool
plt.loglog(data[:,0], data[:,1]/data[:,0],
tool_patterns[tool],
color=mycolor,
label=mylabel)
plt.gca().grid(True)
plt.xlabel('$N$')
plt.ylabel('$t/N$ (s)')
if num_fs > 1:
plt.legend(fshandles+toolhandles, fslabels+toollabels, loc='best', frameon=False)
else:
plt.legend(loc='best', frameon=False)
plt.tight_layout()
plt.savefig('../web/%s-%s.svg' % (mod.name, verb), dpi=60)