def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) x_values = [] for r in groups[k]: if len(r.x_values) > len(x_values): x_values = r.x_values cutoff = config.get('cutoff', None) if cutoff is not None: res.x_values = [x for x in x_values if x >= cutoff[0] and x <= max(x_values) - cutoff[1]] else: res.x_values = x_values for s in config['series']: length = max([r.meta("TOTAL_LENGTH") for r in groups[k]]) data = zip_longest(x_values, *[r[s['data']] for r in groups[k]]) new_data = [] reducer = self.get_reducer(s) reducer.cutoff = None for d in data: if cutoff is None or (d[0] >= cutoff[0] and d[0] <= length - cutoff[1]): new_data.append(reducer(res, s, data=d[1:])) res.add_result(s['data'], new_data) new_results.append(res) return new_results
def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) res.create_series([s['data'] for s in self.orig_series]) cutoff = config.get('cutoff', None) x = 0 for r in groups[k]: if cutoff: start = min(r.x_values) + cutoff[0] end = min(r.x_values) + r.meta("TOTAL_LENGTH") - cutoff[1] keys, minvals = [], {} for s in self.orig_series: k = s['data'] keys.append(k) if s.get('combine_mode', None) == 'span' and k in r: minvals[k] = min( [d for d in r.series(k) if d is not None]) else: minvals[k] = None for p in r.zipped(keys): if cutoff is None or (p[0] > start and p[0] < end): dp = {} for k, v in zip(keys, p[1:]): if minvals[k] is None: dp[k] = v elif v is not None: dp[k] = v - minvals[k] else: pass # skip None-values when a minval exists res.append_datapoint(x, dp) x += 1 new_results.append(res) return new_results
def group(self, groups, config): assert len(config['series']) == 1 series_names = [] group_names = [] old_s = config['series'][0] for k in groups.keys(): s, g = k.rsplit("-", 1) if s not in series_names: series_names.append(s) if g not in group_names: group_names.append(g) new_series = [{'data': s, 'label': s} for s in series_names] new_results = [] for s in group_names: res = ResultSet(TITLE=s, NAME=self.orig_name) res.create_series(series_names) x = 0 for d in zip_longest(*[g[1] for g in groups.items() if g[0].endswith("-%s" % s)]): data = {} for k, v in zip([k.rsplit("-", 1)[0] for k in groups.keys() if k.endswith("-%s" % s)], d): reducer = self.get_reducer(old_s) data[k] = reducer(v, old_s) if v is not None else None res.append_datapoint(x, data) x += 1 new_results.append(res) config['series'] = new_series return new_results
def group(self, groups, config): new_results = [] for s in self.orig_series: res = ResultSet(TITLE=s.get('label'), NAME=self.orig_name) res.meta('label_override', s.get('label_override', False)) res.create_series(groups.keys()) x = 0 for d in zip_longest(*groups.values()): data = {} for k, v in zip(groups.keys(), d): reducer = self.get_reducer(s) data[k] = reducer(v, s) if v is not None else None if data[k] is not None and 'norm_factor' in s: data[k] /= s['norm_factor'] res.append_datapoint(x, data) x += 1 new_results.append(res) new_series = [] for k in groups.keys(): new_series.append({'data': k, 'label': k}) config['series'] = new_series return new_results
def load_files(self, filenames): added = 0 for f in filenames: if self.add_extra(ResultSet.load_file(unicode(f))): self.update(False) added += 1 self.redraw() return added
def load_results(self, results): if isinstance(results, ResultSet): self.results = results else: self.results = ResultSet.load_file(unicode(results)) self.settings.update(self.results.meta()) self.settings.load_test(informational=True) self.settings.compute_missing_results(self.results) self.init_formatter() return True
def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) res.create_series([s['data'] for s in self.orig_series]) x = 0 for r in groups[k]: data = {} for s in self.orig_series: reducer = self.get_reducer(s) data[s['data']] = reducer(r, s) res.append_datapoint(x, data) x += 1 new_results.append(res) return new_results
def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) x_values = [] for r in groups[k]: if len(r.x_values) > len(x_values): x_values = r.x_values length = max([r.meta("TOTAL_LENGTH") for r in groups[k]]) cutoff = self.data_cutoff or config.get('cutoff', None) if cutoff is not None: start, end = cutoff if end <= 0: end += length res.x_values = [x for x in x_values if x >= start and x <= end] else: res.x_values = x_values for s in config['series']: data = zip_longest(x_values, *[r[s['data']] for r in groups[k]]) new_data = [] reducer = self.get_reducer(s) reducer.cutoff = None for d in data: if cutoff is None or (d[0] >= start and d[0] <= end): new_data.append(reducer(res, s, data=d[1:])) res.add_result(s['data'], new_data) new_results.append(res) return new_results
def group(self, groups, config): if len(config['series']) > 1: raise RuntimeError("Cannot use group_by=both for plots with more " "than one data series") series_names = [] group_names = [] old_s = config['series'][0] for k in groups.keys(): s, g = k.rsplit("-", 1) if s not in series_names: series_names.append(s) if g not in group_names: group_names.append(g) new_series = [{'data': s, 'label': s} for s in series_names] new_results = [] for s in group_names: res = ResultSet(TITLE=s, NAME=self.orig_name) res.create_series(series_names) x = 0 for d in zip_longest(*[g[1] for g in groups.items() if g[0].endswith("-%s" % s)]): data = {} for k, v in zip([k.rsplit("-", 1)[0] for k in groups.keys() if k.endswith("-%s" % s)], d): reducer = self.get_reducer(old_s) data[k] = reducer(v, old_s) if v is not None else None res.append_datapoint(x, data) x += 1 new_results.append(res) config['series'] = new_series return new_results
def group(self, groups, config): assert len(config['series']) == 1 series_names = [] group_names = [] old_s = config['series'][0] for k in groups.keys(): s, g = k.rsplit("-", 1) if not s in series_names: series_names.append(s) if not g in group_names: group_names.append(g) new_series = [{'data': s, 'label': s} for s in series_names] new_results = [] for s in group_names: res = ResultSet(TITLE=s, NAME=self.orig_name) res.create_series(series_names) x = 0 for d in zip_longest( * [g[1] for g in groups.items() if g[0].endswith("-%s" % s)]): data = {} for k, v in zip([ k.rsplit("-", 1)[0] for k in groups.keys() if k.endswith("-%s" % s) ], d): reducer = self.get_reducer(old_s) data[k] = reducer(v, old_s['data']) if v is not None else Non res.append_datapoint(x, data) x += 1 new_results.append(res) config['series'] = new_series return new_results
def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) res.create_series([s['data'] for s in self.orig_series]) cutoff = config.get('cutoff', None) x = 0 for r in groups[k]: if cutoff: start = min(r.x_values) + cutoff[0] end = max(r.x_values) - cutoff[1] keys, minvals = [], {} for s in self.orig_series: k = s['data'] keys.append(k) if s.get('combine_mode', None) == 'span' and k in r: minvals[k] = min( [d for d in r.series(k) if d is not None]) else: minvals[k] = None for p in r.zipped(keys): if cutoff is None or (p[0] > start and p[0] < end): dp = {} for k, v in zip(keys, p[1:]): if minvals[k] is None: dp[k] = v elif v is not None: dp[k] = v - minvals[k] else: pass # skip None-values when a minval exists res.append_datapoint(x, dp) x += 1 new_results.append(res) return new_results
def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) x_values = [] for r in groups[k]: if len(r.x_values) > len(x_values): x_values = r.x_values cutoff = config.get('cutoff', None) if cutoff is not None: res.x_values = [ x for x in x_values if x >= cutoff[0] and x <= max(x_values) - cutoff[1] ] else: res.x_values = x_values for s in config['series']: data = zip_longest(x_values, *[r[s['data']] for r in groups[k]]) new_data = [] reducer = self.get_reducer(s) reducer.cutoff = None for d in data: if cutoff is None or (d[0] >= cutoff[0] and d[0] <= max(x_values) - cutoff[1]): new_data.append(reducer(res, s['data'], data=d[1:])) res.add_result(s['data'], new_data) new_results.append(res) return new_results
def group(self, groups, config): new_results = [] for s in self.orig_series: res = ResultSet(TITLE=s['label'], NAME=self.orig_name) res.create_series(groups.keys()) x = 0 for d in zip_longest(*groups.values()): data = {} for k, v in zip(groups.keys(), d): reducer = self.get_reducer(s) data[k] = reducer(v, s) if v is not None else None res.append_datapoint(x, data) x += 1 new_results.append(res) new_series = [] for k in groups.keys(): new_series.append({'data': k, 'label': k}) config['series'] = new_series return new_results
def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) res.create_series([s['data'] for s in self.orig_series]) x = 0 orig_n = {s['data']: [] for s in self.orig_series} for r in groups[k]: data = {} for s in self.orig_series: reducer = self.get_reducer(s) data[s['data']] = reducer(r, s) orig_n[s['data']].append(reducer.N) res.append_datapoint(x, data) x += 1 for k, v in orig_n.items(): res.series_meta(k, 'orig_n', v) new_results.append(res) return new_results
def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) res.create_series([s['data'] for s in self.orig_series]) x = 0 for r in groups[k]: data = {} for s in self.orig_series: reducer = self.get_reducer(s) data[s['data']] = reducer(r, s['data']) res.append_datapoint(x, data) x += 1 new_results.append(res) return new_results
def group(self, groups, config): new_results = [] for s in self.orig_series: res = ResultSet(TITLE=s['label'], NAME=self.orig_name) res.create_series(groups.keys()) x = 0 for d in zip_longest(*groups.values()): data = {} for k, v in zip(groups.keys(), d): reducer = self.get_reducer(s) data[k] = reducer(v, s['data']) if v is not None else Non res.append_datapoint(x, data) x += 1 new_results.append(res) new_series = [] for k in groups.keys(): new_series.append({'data': k, 'label': k}) config['series'] = new_series return new_results
def __init__(self, parent, filename, settings): super(ResultWidget, self).__init__(parent) self.filename = unicode(filename) self.settings = settings.copy() self.dirty = True self.settings.OUTPUT = "-" self.results = ResultSet.load_file(self.filename) self.extra_results = [] self.settings.update(self.results.meta()) self.settings.load_test(informational=True) self.settings.compute_missing_results(self.results) try: self.formatter = PlotFormatter(self.settings) except Exception as e: traceback.print_exc() if isinstance(e, RuntimeError): err = "%s" % e else: typ, val, tra = sys.exc_info() err = "".join(traceback.format_exception_only(typ, val)) QMessageBox.warning( self, "Error loading plot", "Error while loading plot:\n\n%s\nFalling back to default plot. Full traceback output to console." % err) self.settings.PLOT = self.settings.DEFAULTS['PLOT'] self.formatter = PlotFormatter(self.settings) self.canvas = FigureCanvas(self.formatter.figure) self.canvas.setParent(self.graphDisplay) self.toolbar = NavigationToolbar(self.canvas, self.graphDisplay) vbl = QVBoxLayout() vbl.addWidget(self.canvas) vbl.addWidget(self.toolbar) self.graphDisplay.setLayout(vbl) self.plotModel = PlotModel(self, self.settings) self.plotSelectionModel = QItemSelectionModel(self.plotModel) self.plotSelectionModel.setCurrentIndex( self.plotModel.index_of(self.settings.PLOT), QItemSelectionModel.SelectCurrent) self.plotSelectionModel.currentChanged.connect(self.change_plot) self.metadataModel = MetadataModel(self, self.results.meta()) self.metadataSelectionModel = QItemSelectionModel(self.metadataModel) if self.settings.TITLE: self.title = "%s - %s" % (self.settings.NAME, self.settings.TITLE) self.long_title = "%s - %s" % ( self.title, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) else: self.title = "%s - %s" % ( self.settings.NAME, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) self.long_title = self.title if self.settings.GUI_NO_DEFER: self.redraw()