def test_use_features_checked(self):
        data = Table("iris")
        attrs = data.domain.attributes

        # prepare stored settings (check "Use input features")
        in_features = AttributeList(attrs[:2])
        self.send_signal(self.widget.Inputs.data, data)
        self.send_signal(self.widget.Inputs.features, in_features)
        self.widget.use_features_box.checkbox.setChecked(True)
        self.assertControlsEnabled(False, False, True)
        out_features = self.get_output(self.widget.Outputs.features)
        self.assertListEqual(out_features, in_features)
        settings = self.widget.settingsHandler.pack_data(self.widget)

        # "Use input features" is checked by default
        widget = self.create_widget(OWSelectAttributes, settings)
        in_features = AttributeList(attrs[:3])
        self.send_signal(widget.Inputs.data, data, widget=widget)
        self.send_signal(widget.Inputs.features, in_features, widget=widget)
        self.assertControlsEnabled(False, False, True, widget)
        out_features = self.get_output(widget.Outputs.features, widget=widget)
        self.assertListEqual(out_features, in_features)

        # reset "Features"
        widget.reset()
        out_features = self.get_output(widget.Outputs.features, widget=widget)
        self.assertFalse(widget.use_features_box.checkbox.isChecked())
        self.assertListEqual(out_features, AttributeList(attrs))
        self.assertControlsEnabled(True, True, True, widget)
    def test_features(self):
        w = self.widget
        self.send_signal(w.Inputs.time_series, self.amzn)
        self.assertEqual(1, len(w.configs))

        sel = self.amzn.domain.attributes[3:6]
        self.send_signal(w.Inputs.features, AttributeList(sel))
        self.assertEqual(3, len(w.configs))

        sel = self.amzn.domain.attributes[3:5]
        self.send_signal(w.Inputs.features, AttributeList(sel))
        self.assertEqual(2, len(w.configs))
 def test_input_features_no_data(self):
     data = Table("zoo")
     in_features = AttributeList(data.domain.variables + data.domain.metas)
     self.send_signal(self.widget.Inputs.features, in_features)
     self.assertControlsEnabled(True, False, False)
     self.assertVariableCountsEqual(0, 0, 0, 0)
     self.assertIsNone(self.get_output(self.widget.Outputs.features))
Esempio n. 4
0
    def commit(self):
        if self.data is None or self.cont_data is None:
            self.Outputs.data.send(self.data)
            self.Outputs.features.send(None)
            self.Outputs.correlations.send(None)
            return

        metas = [StringVariable("Feature 1"), StringVariable("Feature 2")]
        domain = Domain([ContinuousVariable("Correlation")], metas=metas)
        model = self.vizrank.rank_model
        x = np.array([[float(model.data(model.index(row, 0)))]
                      for row in range(model.rowCount())])
        # pylint: disable=protected-access
        m = np.array([[
            a.name
            for a in model.data(model.index(row, 0), CorrelationRank._AttrRole)
        ] for row in range(model.rowCount())],
                     dtype=object)
        corr_table = Table(domain, x, metas=m)
        corr_table.name = "Correlations"

        self.Outputs.data.send(self.data)
        # data has been imputed; send original attributes
        self.Outputs.features.send(
            AttributeList(
                [attr.compute_value.variable for attr in self.selection]))
        self.Outputs.correlations.send(corr_table)
Esempio n. 5
0
    def test_features_and_data(self):
        self.assertTrue(self.widget.attr_box.isEnabled())
        self.send_signal(self.widget.Inputs.data, self.data)
        x, y = self.widget.graph.scatterplot_item.getData()
        np.testing.assert_array_equal(x, self.data.X[:, 0])
        np.testing.assert_array_equal(y, self.data.X[:, 1])
        self.send_signal(self.widget.Inputs.features,
                         AttributeList(self.data.domain[2:]))
        self.assertIs(self.widget.attr_x, self.data.domain[2])
        self.assertIs(self.widget.attr_y, self.data.domain[3])
        self.assertFalse(self.widget.attr_box.isEnabled())
        self.assertFalse(self.widget.vizrank.isEnabled())
        x, y = self.widget.graph.scatterplot_item.getData()
        np.testing.assert_array_equal(x, self.data.X[:, 2])
        np.testing.assert_array_equal(y, self.data.X[:, 3])

        self.send_signal(self.widget.Inputs.data, None)
        self.send_signal(self.widget.Inputs.data, self.data)
        self.assertIs(self.widget.attr_x, self.data.domain[2])
        self.assertIs(self.widget.attr_y, self.data.domain[3])
        self.assertFalse(self.widget.attr_box.isEnabled())
        self.assertFalse(self.widget.vizrank.isEnabled())

        self.send_signal(self.widget.Inputs.features, None)
        self.assertTrue(self.widget.attr_box.isEnabled())
        self.assertTrue(self.widget.vizrank.isEnabled())
Esempio n. 6
0
    def commit(self):
        if self.data is None or self.cont_data is None:
            self.Outputs.data.send(self.data)
            self.Outputs.features.send(None)
            self.Outputs.correlations.send(None)
            return

        attrs = [ContinuousVariable("Correlation"), ContinuousVariable("FDR")]
        metas = [StringVariable("Feature 1"), StringVariable("Feature 2")]
        domain = Domain(attrs, metas=metas)
        model = self.vizrank.rank_model
        x = np.array([[
            float(model.data(model.index(row, 0), role))
            for role in (Qt.DisplayRole, CorrelationRank.PValRole)
        ] for row in range(model.rowCount())])
        x[:, 1] = FDR(list(x[:, 1]))
        # pylint: disable=protected-access
        m = np.array([[
            a.name
            for a in model.data(model.index(row, 0), CorrelationRank._AttrRole)
        ] for row in range(model.rowCount())],
                     dtype=object)
        corr_table = Table(domain, x, metas=m)
        corr_table.name = "Correlations"

        self.Outputs.data.send(self.data)
        # data has been imputed; send original attributes
        self.Outputs.features.send(
            AttributeList(
                [self.data.domain[name] for name, _ in self.selection]))
        self.Outputs.correlations.send(corr_table)
Esempio n. 7
0
    def test_invalidated_same_time_features_first(self):
        self.widget.setup_plot = Mock()
        # send features and data at the same time (features first)
        features = self.data.domain.attributes[:2]
        signals = [(self.widget.Inputs.features, AttributeList(features)),
                   (self.widget.Inputs.data, self.data)]
        self.send_signals(signals)
        self.widget.setup_plot.assert_called_once()
        self.assertListEqual(self.widget.effective_variables, list(features))

        self.widget.setup_plot.reset_mock()
        features = self.data.domain.attributes[2:]
        signals = [(self.widget.Inputs.features, AttributeList(features)),
                   (self.widget.Inputs.data, self.data)]
        self.send_signals(signals)
        self.widget.setup_plot.assert_called_once()
Esempio n. 8
0
 def test_features_and_data(self):
     data = Table("iris")
     self.send_signal(self.widget.Inputs.data, data)
     self.send_signal(self.widget.Inputs.features,
                      AttributeList(data.domain[2:]))
     self.assertIs(self.widget.attr_x, data.domain[2])
     self.assertIs(self.widget.attr_y, data.domain[3])
    def commit(self):
        if self.data is None or self.cont_data is None:
            self.send("Data", self.data)
            self.send("Features", None)
            self.send("Correlations", None)
            return

        metas = [StringVariable("Feature 1"), StringVariable("Feature 2")]
        domain = Domain([ContinuousVariable("Correlation")], metas=metas)
        model = self.vizrank.rank_model
        x = np.array([[float(model.data(model.index(row, 2)))]
                      for row in range(model.rowCount())])
        m = np.array([[
            model.data(model.index(row, 0)),
            model.data(model.index(row, 1))
        ] for row in range(model.rowCount())],
                     dtype=object)
        corr_table = Table(domain, x, metas=m)
        corr_table.name = "Correlations"

        self.send("Data", self.data)
        # data has been imputed; send original attributes
        self.send(
            "Features",
            AttributeList(
                [attr.compute_value.variable for attr in self.selection]))
        self.send("Correlations", corr_table)
Esempio n. 10
0
 def test_features_and_no_data(self):
     """
     Prevent crashing when features are sent but no data.
     """
     domain = Table("iris").domain
     self.send_signal(self.widget.Inputs.features,
                      AttributeList(domain.variables))
     self.send_signal(self.widget.Inputs.features, None)
Esempio n. 11
0
 def test_input_features_same_domain(self):
     data = Table("zoo")
     in_features = AttributeList(data.domain.variables + data.domain.metas)
     self.send_signal(self.widget.Inputs.data, data)
     self.send_signal(self.widget.Inputs.features, in_features)
     self.assertControlsEnabled(True, False, True)
     self.assertVariableCountsEqual(0, 16, 1, 1)
     self.assertListEqual(self.get_output(self.widget.Outputs.features),
                          list(data.domain.attributes))
Esempio n. 12
0
 def test_input_features_sub_domain(self):
     data = Table("zoo")
     in_features = AttributeList(data.domain.attributes[::3])
     self.send_signal(self.widget.Inputs.data, data)
     self.send_signal(self.widget.Inputs.features, in_features)
     self.assertControlsEnabled(True, True, True)
     self.assertVariableCountsEqual(10, 6, 1, 1)
     self.assertListEqual(self.get_output(self.widget.Outputs.features),
                          in_features)
Esempio n. 13
0
 def test_input_features_by_name_sub_domain(self):
     data = Table("zoo")
     in_features = AttributeList([DiscreteVariable(attr.name, attr.values)
                                  for attr in data.domain.attributes[:5]])
     self.send_signal(self.widget.Inputs.data, data)
     self.send_signal(self.widget.Inputs.features, in_features)
     self.assertControlsEnabled(True, True, True)
     self.assertVariableCountsEqual(11, 5, 1, 1)
     self.assertListEqual(self.get_output(self.widget.Outputs.features),
                          list(data.domain.attributes[:5]))
Esempio n. 14
0
 def test_input_features(self):
     self.assertTrue(self.widget.attr_box.isEnabled())
     self.send_signal(self.widget.Inputs.data, self.iris)
     self.send_signal(self.widget.Inputs.features,
                      AttributeList(self.iris.domain.attributes))
     self.assertFalse(self.widget.attr_box.isEnabled())
     self.assertFalse(self.widget.vizrank.isEnabled())
     self.send_signal(self.widget.Inputs.features, None)
     self.assertTrue(self.widget.attr_box.isEnabled())
     self.assertTrue(self.widget.vizrank.isEnabled())
 def test_data_none(self):
     w = self.widget
     self.send_signal(w.Inputs.time_series, None)
     # send selection when no data on the input
     self.send_signal(
         w.Inputs.features, AttributeList(self.airpassengers.attributes)
     )
     # send forecast on empty data
     model1 = ARIMA((3, 1, 1)).fit(self.airpassengers)
     prediction = model1.predict(10, as_table=True)
     self.send_signal(w.Inputs.forecast, prediction, 1)
Esempio n. 16
0
 def test_input_features_diff_domain(self):
     zoo = Table("zoo")
     in_features = AttributeList(Table("iris").domain.attributes)
     self.send_signal(self.widget.Inputs.data, zoo)
     self.send_signal(self.widget.Inputs.features, in_features)
     self.assertControlsEnabled(True, False, False)
     self.assertVariableCountsEqual(0, 16, 1, 1)
     self.assertListEqual(self.get_output(self.widget.Outputs.features),
                          list(zoo.domain.attributes))
     self.assertTrue(self.widget.Warning.mismatching_domain.is_shown())
     self.send_signal(self.widget.Inputs.features, None)
     self.assertFalse(self.widget.Warning.mismatching_domain.is_shown())
Esempio n. 17
0
 def commit(self):
     if not self.selected_attrs:
         self.Outputs.reduced_data.send(None)
         self.Outputs.features.send(None)
         self.out_domain_desc = None
     else:
         reduced_domain = Domain(self.selected_attrs,
                                 self.data.domain.class_var,
                                 self.data.domain.metas)
         data = self.data.transform(reduced_domain)
         self.Outputs.reduced_data.send(data)
         self.Outputs.features.send(AttributeList(self.selected_attrs))
         self.out_domain_desc = report.describe_domain(data.domain)
Esempio n. 18
0
 def test_features_and_data(self):
     data = Table("iris")
     self.send_signal(self.widget.Inputs.data, data)
     x, y = self.widget.graph.scatterplot_item.getData()
     np.testing.assert_array_equal(x, data.X[:, 0])
     np.testing.assert_array_equal(y, data.X[:, 1])
     self.send_signal(self.widget.Inputs.features,
                      AttributeList(data.domain[2:]))
     self.assertIs(self.widget.attr_x, data.domain[2])
     self.assertIs(self.widget.attr_y, data.domain[3])
     x, y = self.widget.graph.scatterplot_item.getData()
     np.testing.assert_array_equal(x, data.X[:, 2])
     np.testing.assert_array_equal(y, data.X[:, 3])
Esempio n. 19
0
    def test_input_combinations(self):
        data = Table("iris")
        in_features = AttributeList(data.domain.attributes[:2])

        # check initial state
        self.assertControlsEnabled(True, False, False)
        self.assertVariableCountsEqual(0, 0, 0, 0)
        self.assertIsNone(self.get_output(self.widget.Outputs.features))

        # send data
        self.send_signal(self.widget.Inputs.data, data)
        self.assertControlsEnabled(True, False, False)
        self.assertVariableCountsEqual(0, 4, 1, 0)
        self.assertEqual(len(self.get_output(self.widget.Outputs.features)), 4)

        # send features
        self.send_signal(self.widget.Inputs.features, in_features)
        self.assertControlsEnabled(True, True, True)
        self.assertVariableCountsEqual(2, 2, 1, 0)
        self.assertEqual(len(self.get_output(self.widget.Outputs.features)), 2)

        # remove data
        self.send_signal(self.widget.Inputs.data, None)
        self.assertControlsEnabled(True, False, False)
        self.assertVariableCountsEqual(0, 0, 0, 0)
        self.assertIsNone(self.get_output(self.widget.Outputs.features))

        # remove features
        self.send_signal(self.widget.Inputs.features, None)
        self.assertControlsEnabled(True, False, False)
        self.assertVariableCountsEqual(0, 0, 0, 0)
        self.assertIsNone(self.get_output(self.widget.Outputs.features))

        # send features
        self.send_signal(self.widget.Inputs.features, in_features)
        self.assertControlsEnabled(True, False, False)
        self.assertVariableCountsEqual(0, 0, 0, 0)
        self.assertIsNone(self.get_output(self.widget.Outputs.features))

        # send data
        self.send_signal(self.widget.Inputs.data, data)
        self.assertControlsEnabled(True, False, True)
        self.assertVariableCountsEqual(2, 2, 1, 0)
        self.assertEqual(len(self.get_output(self.widget.Outputs.features)), 2)

        # remove features
        self.send_signal(self.widget.Inputs.features, None)
        self.assertControlsEnabled(True, False, False)
        self.assertVariableCountsEqual(2, 2, 1, 0)
        self.assertEqual(len(self.get_output(self.widget.Outputs.features)), 2)
Esempio n. 20
0
    def test_invalidated_diff_features_features_first(self):
        self.widget.setup_plot = Mock()
        # send features (not the same as defaults)
        self.send_signal(self.widget.Inputs.features,
                         AttributeList(self.data.domain.attributes[2:4]))
        self.assertListEqual(self.widget.effective_variables, [None, None])
        self.widget.setup_plot.assert_called_once()

        # send data
        self.widget.setup_plot.reset_mock()
        self.send_signal(self.widget.Inputs.data, self.data)
        self.widget.setup_plot.assert_called_once()
        self.assertListEqual(self.widget.effective_variables,
                             list(self.data.domain.attributes[2:4]))
Esempio n. 21
0
    def test_invalidated_diff_features(self):
        self.widget.setup_plot = Mock()
        # send data and set default features
        self.send_signal(self.widget.Inputs.data, self.data)
        self.widget.setup_plot.assert_called_once()
        self.assertListEqual(self.widget.effective_variables,
                             list(self.data.domain.attributes[:2]))

        # send different features
        self.widget.setup_plot.reset_mock()
        self.send_signal(self.widget.Inputs.features,
                         AttributeList(self.data.domain.attributes[2:4]))
        self.widget.setup_plot.assert_called_once()
        self.assertListEqual(self.widget.effective_variables,
                             list(self.data.domain.attributes[2:4]))
Esempio n. 22
0
    def commit(self):
        self.update_domain_role_hints()
        if self.data is not None:
            attributes = list(self.used_attrs)
            class_var = list(self.class_attrs)
            metas = list(self.meta_attrs)

            domain = Orange.data.Domain(attributes, class_var, metas)
            newdata = self.data.transform(domain)
            self.output_data = newdata
            self.Outputs.data.send(newdata)
            self.Outputs.features.send(AttributeList(attributes))
        else:
            self.output_data = None
            self.Outputs.data.send(None)
            self.Outputs.features.send(None)
Esempio n. 23
0
 def commit(self):
     if not self.selected_attrs:
         self.Outputs.reduced_data.send(None)
         self.Outputs.features.send(None)
         self.out_domain_desc = None
         self.info.set_output_summary(self.info.NoOutput)
     else:
         reduced_domain = Domain(self.selected_attrs,
                                 self.data.domain.class_var,
                                 self.data.domain.metas)
         data = self.data.transform(reduced_domain)
         self.Outputs.reduced_data.send(data)
         self.Outputs.features.send(AttributeList(self.selected_attrs))
         self.out_domain_desc = report.describe_domain(data.domain)
         self.info.set_output_summary(len(data),
                                      format_summary_details(data))
Esempio n. 24
0
    def commit(self):
        self.update_domain_role_hints()
        self.Warning.multiple_targets.clear()
        if self.data is not None:
            attributes = list(self.used_attrs)
            class_var = list(self.class_attrs)
            metas = list(self.meta_attrs)

            domain = Orange.data.Domain(attributes, class_var, metas)
            newdata = self.data.transform(domain)
            self.output_data = newdata
            self.Outputs.data.send(newdata)
            self.Outputs.features.send(AttributeList(attributes))
            self.info.set_output_summary(len(newdata),
                                         format_summary_details(newdata))
            self.Warning.multiple_targets(shown=len(class_var) > 1)
        else:
            self.output_data = None
            self.Outputs.data.send(None)
            self.Outputs.features.send(None)
            self.info.set_output_summary(self.info.NoOutput)
    def test_context_with_features(self):
        """
        Test if context saves selection correctly afeter providing features
        on the input.
        """
        w = self.widget
        self.send_signal(w.Inputs.time_series, self.amzn)
        self.assertEqual(1, len(w.configs))

        sel = self.amzn.domain.attributes[3:5]
        w.configs[0].set_selection(sel)

        sel_features = self.amzn.domain.attributes[2:4]
        self.send_signal(w.Inputs.features, AttributeList(sel_features))

        self.assertEqual(2, len(w.configs))
        self.assertListEqual([sel_features[0]], w.configs[0].get_selection())
        self.assertListEqual([sel_features[1]], w.configs[1].get_selection())

        self.send_signal(w.Inputs.features, None)

        self.assertEqual(1, len(w.configs))
        self.assertListEqual(list(sel), w.configs[0].get_selection())
Esempio n. 26
0
def main(argv=None):  # pragma: no cover
    from AnyQt.QtWidgets import QApplication
    if argv is None:
        argv = sys.argv
    argv = list(argv)
    app = QApplication(list(argv))

    if len(argv) > 1:
        filename = argv[1]
    else:
        filename = "brown-selected"

    w = OWSelectAttributes()
    data = Orange.data.Table(filename)
    w.set_data(data)
    w.set_features(AttributeList(data.domain.attributes[:2]))
    w.handleNewSignals()
    w.show()
    w.raise_()
    rval = app.exec_()
    w.set_data(None)
    w.saveSettings()
    return rval
Esempio n. 27
0
	def commit(self):
		if self.data is None or self.disc_data is None:
			self.Outputs.features.send(None)
			self.Outputs.interactions.send(None)
			return

		attrs = [ContinuousVariable("Interaction"), ContinuousVariable("Entropy Removed")]
		metas = [StringVariable("Feature 1"), StringVariable("Feature 2")]
		domain = Domain(attrs, metas=metas)
		model = self.vizrank.rank_model
		x = np.array(
			[[float(model.data(model.index(row, 0), role))
				for role in (InteractionRank.IntRole, InteractionRank.RemovedRole)]
				for row in range(model.rowCount())])
		m = np.array(
			[[a.name for a in model.data(model.index(row, 0), InteractionRank._AttrRole)]
				for row in range(model.rowCount())], dtype=object)
		int_table = Table(domain, x, metas=m)
		int_table.name = "Interactions"

		# data has been imputed; send original attributes
		self.Outputs.features.send(AttributeList(
			[self.data.domain[var.name] for var in self.selection]))
		self.Outputs.interactions.send(int_table)
Esempio n. 28
0
 def on_selection_changed(self, selected, deselected):
     """Called when the ranks view selection changes."""
     a1 = selected.indexes()[1].data().replace('D_', '')
     a2 = selected.indexes()[2].data().replace('D_', '')
     d = self.data.domain
     self.send("Features", AttributeList([d[a1], d[a2]]))
Esempio n. 29
0
 def send_features(self):
     features = [attr for attr in [self.attr_x, self.attr_y] if attr]
     self.Outputs.features.send(AttributeList(features) or None)
Esempio n. 30
0
            self.available_attrs[:] = []
            self.used_attrs[:] = self.data.domain.attributes
            self.class_attrs[:] = self.data.domain.class_vars
            self.meta_attrs[:] = self.data.domain.metas
            self.update_domain_role_hints()
            self.commit()

    def send_report(self):
        if not self.data or not self.output_data:
            return
        in_domain, out_domain = self.data.domain, self.output_data.domain
        self.report_domain("Input data", self.data.domain)
        if (in_domain.attributes, in_domain.class_vars,
                in_domain.metas) == (out_domain.attributes,
                                     out_domain.class_vars, out_domain.metas):
            self.report_paragraph("Output data", "No changes.")
        else:
            self.report_domain("Output data", self.output_data.domain)
            diff = list(
                set(in_domain.variables + in_domain.metas) -
                set(out_domain.variables + out_domain.metas))
            if diff:
                text = "%i (%s)" % (len(diff), ", ".join(x.name for x in diff))
                self.report_items((("Removed", text), ))


if __name__ == "__main__":  # pragma: no cover
    brown = Orange.data.Table("brown-selected")
    feats = AttributeList(brown.domain.attributes[:2])
    WidgetPreview(OWSelectAttributes).run(set_data=brown, set_features=feats)