From 7eb34b5312974f601d1117eeaf6393b9648be31c Mon Sep 17 00:00:00 2001 From: Jonathan Herman Date: Fri, 12 Apr 2013 15:12:22 -0400 Subject: Improved error handling in parse_ and plot_exps.py. --- parse/dir_map.py | 5 ++++- parse/ft.py | 1 - parse/point.py | 4 ++-- parse/sched.py | 6 +++++- parse/tuple_table.py | 5 +---- 5 files changed, 12 insertions(+), 9 deletions(-) (limited to 'parse') diff --git a/parse/dir_map.py b/parse/dir_map.py index a8d2a83..231d21a 100644 --- a/parse/dir_map.py +++ b/parse/dir_map.py @@ -96,7 +96,10 @@ class DirMap(object): return with open(path, 'rb') as f: - data = np.loadtxt(f, delimiter=",") + try: + data = np.loadtxt(f, delimiter=",") + except Exception as e: + raise IOError("Cannot load '%s': %s" % (path, e.message)) # Convert to tuples of ints if possible, else floats values = [map(lambda a:a if a%1 else int(a), t) for t in data] diff --git a/parse/ft.py b/parse/ft.py index 98405f4..1f05323 100644 --- a/parse/ft.py +++ b/parse/ft.py @@ -71,7 +71,6 @@ def extract_ft_data(result, data_dir, work_dir, cycles): bin_file = "{}/{}".format(data_dir, bins[0]) if not os.path.getsize(bin_file): - sys.stderr.write("Empty feather trace file %s!" % bin_file) return False with open("%s/%s" % (work_dir, FT_ERR_NAME), 'w') as err_file: diff --git a/parse/point.py b/parse/point.py index f2b266a..ac47c70 100644 --- a/parse/point.py +++ b/parse/point.py @@ -8,8 +8,8 @@ from enum import Enum from collections import defaultdict Type = Enum(['Min','Max','Avg','Var']) -default_typemap = {Type.Max : {Type.Max : 1, Type.Min : 1, Type.Avg : 1, Type.Var : 1}, - Type.Min : {Type.Max : 1, Type.Min : 1, Type.Avg : 1, Type.Var : 1}, +default_typemap = {Type.Max : {Type.Max : 1, Type.Min : 0, Type.Avg : 0, Type.Var : 0}, + Type.Min : {Type.Max : 0, Type.Min : 1, Type.Avg : 0, Type.Var : 0}, Type.Avg : {Type.Max : 1, Type.Min : 1, Type.Avg : 1, Type.Var : 1}} def make_typemap(): diff --git a/parse/sched.py b/parse/sched.py index 147a2e5..1213f0d 100644 --- a/parse/sched.py +++ b/parse/sched.py @@ -68,7 +68,7 @@ def make_iterator(fname): '''Iterate over (parsed record, processing method) in a sched-trace file.''' if not os.path.getsize(fname): - sys.stderr.write("Empty sched_trace file %s!" % fname) + # Likely a release master CPU return f = open(fname, 'rb') @@ -176,6 +176,10 @@ def extract_sched_data(result, data_dir, work_dir): # Group per-task values for tdata in task_dict.itervalues(): + if not tdata.params: + # Currently unknown where these invalid tasks come from... + continue + miss_ratio = float(tdata.misses.num) / tdata.jobs # Scale average down to account for jobs with 0 tardiness avg_tard = tdata.misses.avg * miss_ratio diff --git a/parse/tuple_table.py b/parse/tuple_table.py index 491ea7b..47fb6b6 100644 --- a/parse/tuple_table.py +++ b/parse/tuple_table.py @@ -78,7 +78,7 @@ class ReducedTupleTable(TupleTable): val = kv[col] try: - float(val) + float(str(val)) except: # Only vary numbers. Otherwise, just have seperate files continue @@ -93,9 +93,6 @@ class ReducedTupleTable(TupleTable): Leaf = namedtuple('Leaf', ['stat', 'variable', 'base', 'summary', 'config', 'values']) - def next_type(path): - return path.pop() if path[-1] in Type else Type.Avg - def leafs(): for path, node in dir_map.leafs(): # The path will be of at least size 1: the filename -- cgit v1.2.2