Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
    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
Пример #10
0
 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
Пример #11
0
    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
Пример #12
0
    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
Пример #13
0
 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
Пример #14
0
 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
Пример #15
0
    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
Пример #16
0
    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
Пример #17
0
    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
Пример #18
0
    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
Пример #19
0
    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()