|
| 1 | +from Orange.data import Variable |
1 | 2 | from Orange.widgets import settings |
2 | | -from Orange.widgets.utils import getdeepattr |
3 | 3 |
|
4 | 4 |
|
5 | 5 | class EvaluationResultsContextHandler(settings.ContextHandler): |
6 | | - def __init__(self, targetAttr, selectedAttr): |
7 | | - super().__init__() |
8 | | - self.targetAttr, self.selectedAttr = targetAttr, selectedAttr |
| 6 | + """Context handler for evaluation results""" |
9 | 7 |
|
10 | | - #noinspection PyMethodOverriding |
11 | | - def match(self, context, cnames, cvalues): |
12 | | - return (cnames, cvalues) == ( |
13 | | - context.classifierNames, context.classValues) and 2 |
| 8 | + def open_context(self, widget, classes, classifier_names): |
| 9 | + if isinstance(classes, Variable): |
| 10 | + if classes.is_discrete: |
| 11 | + classes = classes.values |
| 12 | + else: |
| 13 | + classes = None |
| 14 | + super().open_context(widget, classes, classifier_names) |
14 | 15 |
|
15 | | - def fast_save(self, widget, name, value): |
16 | | - context = widget.current_context |
17 | | - if name == self.targetAttr: |
18 | | - context.targetClass = value |
19 | | - elif name == self.selectedAttr: |
20 | | - context.selectedClassifiers = list(value) |
| 16 | + def new_context(self, classes, classifier_names): |
| 17 | + context = super().new_context() |
| 18 | + context.classes = classes |
| 19 | + context.classifier_names = classifier_names |
| 20 | + return context |
21 | 21 |
|
22 | | - def settings_from_widget(self, widget, *args): |
23 | | - super().settings_from_widget(widget, *args) |
24 | | - context = widget.current_context |
25 | | - context.targetClass = getdeepattr(widget, self.targetAttr) |
26 | | - context.selectedClassifiers = list(getdeepattr(self.selectedAttr)) |
27 | | - |
28 | | - def settings_to_widget(self, widget, *args): |
29 | | - super().settings_to_widget(widget, *args) |
30 | | - context = widget.current_context |
31 | | - if context.targetClass is not None: |
32 | | - setattr(widget, self.targetAttr, context.targetClass) |
33 | | - if context.selectedClassifiers is not None: |
34 | | - setattr(widget, self.selectedAttr, context.selectedClassifiers) |
35 | | - |
36 | | - #noinspection PyMethodOverriding |
37 | | - def find_or_create_context(self, widget, results): |
38 | | - cnames = [c.name for c in results.classifiers] |
39 | | - cvalues = results.classValues |
40 | | - context, isNew = super().find_or_create_context( |
41 | | - widget, results.classifierNames, results.classValues) |
42 | | - if isNew: |
43 | | - context.classifierNames = results.classifierNames |
44 | | - context.classValues = results.classValues |
45 | | - context.selectedClassifiers = None |
46 | | - context.targetClass = None |
47 | | - return context, isNew |
| 22 | + def match(self, context, classes, classifier_names): |
| 23 | + if classifier_names != context.classifier_names: |
| 24 | + return self.NO_MATCH |
| 25 | + elif isinstance(classes, Variable) and classes.is_continuous: |
| 26 | + return (self.PERFECT_MATCH if context.classes is None |
| 27 | + else self.NO_MATCH) |
| 28 | + else: |
| 29 | + return (self.PERFECT_MATCH if context.classes == classes |
| 30 | + else self.NO_MATCH) |
0 commit comments