예제 #1
0
 def test_error_invalid_expression(self):
     data = Table("iris")
     self.widget.setData(data)
     self.widget.addFeature(ContinuousDescriptor("X", "0", 3))
     self.widget.apply()
     self.assertFalse(self.widget.Error.invalid_expressions.is_shown())
     self.widget.addFeature(ContinuousDescriptor("X", "0a", 3))
     self.widget.apply()
     self.assertTrue(self.widget.Error.invalid_expressions.is_shown())
 def test_transform_error(self):
     data = Table("iris")[::5]
     self.send_signal(self.widget.Inputs.data, data)
     self.widget.addFeature(ContinuousDescriptor("X", "1/0", 3))
     self.widget.apply()
     self.wait_until_finished(self.widget)
     self.assertTrue(self.widget.Error.transform_error.is_shown())
     self.widget.removeFeature(0)
     self.widget.addFeature(ContinuousDescriptor("X", "1", 3))
     self.widget.apply()
     self.wait_until_finished(self.widget)
     self.assertFalse(self.widget.Error.transform_error.is_shown())
예제 #3
0
    def test_migration_discrete_strings(self):
        v = [DiscreteVariable("Ana", values=tuple("012")),
             ContinuousVariable("Cilka")]
        domain = Domain(v)
        data = Table.from_numpy(domain, [[1, 3.14]])

        settings_w_discrete = {
            "context_settings":
            [Context(
                attributes=dict(Ana=1, Cilka=2), metas={},
                values=dict(
                    descriptors=[
                        ContinuousDescriptor("y", "Ana + int(Cilka)", 1),
                        StringDescriptor("u", "Ana.value + 'X'")
                    ],
                    currentIndex=0)
             )]
        }
        widget = self.create_widget(OWFeatureConstructor, settings_w_discrete)
        self.send_signal(widget.Inputs.data, data)
        self.assertTrue(widget.expressions_with_values)
        self.assertFalse(widget.fix_button.isHidden())
        out = self.get_output(widget.Outputs.data)
        np.testing.assert_almost_equal(out.X, [[1, 3.14, 4]])
        np.testing.assert_equal(out.metas, [["1X"]])

        settings_no_discrete = {
            "context_settings":
            [Context(
                attributes=dict(Ana=1, Cilka=2), metas={},
                values=dict(
                    descriptors=[
                        ContinuousDescriptor("y", "int(Cilka)", 1),
                    ],
                    currentIndex=0)
             )]
        }
        widget = self.create_widget(OWFeatureConstructor, settings_no_discrete)
        self.send_signal(widget.Inputs.data, data)
        self.assertFalse(widget.expressions_with_values)
        self.assertTrue(widget.fix_button.isHidden())
        out = self.get_output(widget.Outputs.data)
        np.testing.assert_almost_equal(out.X, [[1, 3.14, 3]])

        widget = self.create_widget(OWFeatureConstructor, settings_w_discrete)
        self.send_signal(widget.Inputs.data, data)
        self.assertTrue(widget.expressions_with_values)
        self.assertFalse(widget.fix_button.isHidden())
        self.send_signal(widget.Inputs.data, None)
        self.assertFalse(widget.expressions_with_values)
        self.assertTrue(widget.fix_button.isHidden())
예제 #4
0
    def test_report(self):
        settings = {
            "context_settings":
                [Context(
                    attributes=dict(x=2, y=2, z=2), metas={},
                    values=dict(
                        descriptors=[
                            ContinuousDescriptor("a", "x + 2", 1),
                            DiscreteDescriptor("b", "x < 3", (), False),
                            DiscreteDescriptor("c", "x > 15", (), True),
                            DiscreteDescriptor("d", "y > x", ("foo", "bar"), False),
                            DiscreteDescriptor("e", "x ** 2 + y == 5", ("foo", "bar"), True),
                            StringDescriptor("f", "str(x)"),
                            DateTimeDescriptor("g", "z")
                        ],
                        currentIndex=0)
                )]
        }

        w = self.create_widget(OWFeatureConstructor, settings)
        v = [ContinuousVariable(name) for name in "xyz"]
        domain = Domain(v, [])
        self.send_signal(w.Inputs.data, Table.from_numpy(domain, [[0, 1, 2]]))
        w.report_items = Mock()
        w.send_report()
        args = w.report_items.call_args[0][1]
        self.assertEqual(list(args), list("abcdefg"))
 def test_renaming_duplicate_vars(self):
     data = Table("iris")
     self.widget.setData(data)
     self.widget.addFeature(ContinuousDescriptor("iris", "0", 3))
     self.widget.apply()
     output = self.get_output(self.widget.Outputs.data)
     self.assertEqual(len(set(var.name for var in output.domain.variables)),
                      len(output.domain.variables))
예제 #6
0
 def test_construct_numeric_names(self):
     data = Table("iris")
     data.domain.attributes[0].name = "0.1"
     data.domain.attributes[1].name = "1"
     desc = PyListModel([
         ContinuousDescriptor(name="S",
                              expression="_0_1 + _1",
                              number_of_decimals=3)
     ])
     nv = construct_variables(desc, data.domain)
     ndata = Table(Domain(nv, None), data)
     np.testing.assert_array_equal(ndata.X[:, 0], data.X[:, :2].sum(axis=1))
     ContinuousVariable._clear_all_caches()
예제 #7
0
 def test_construct_numeric_names():
     data = Table("iris")
     newdomain = Domain(
         (ContinuousVariable("0.1"), ContinuousVariable("1")) +
         data.domain.attributes[2:], data.domain.class_var)
     data = Table.from_numpy(newdomain, data.X, data.Y)
     desc = PyListModel([
         ContinuousDescriptor(name="S",
                              expression="_0_1 + _1",
                              number_of_decimals=3)
     ])
     nv = construct_variables(desc, data)
     ndata = Table(Domain(nv, None), data)
     np.testing.assert_array_equal(ndata.X[:, 0], data.X[:, :2].sum(axis=1))
예제 #8
0
 def test_unicode_normalization():
     micro = "\u00b5"
     domain = Domain([ContinuousVariable(micro)])
     name = 'Micro Variable'
     expression = micro
     desc = PyListModel(
         [ContinuousDescriptor(name=name, expression=expression,
                               number_of_decimals=2)]
     )
     data = Table.from_numpy(domain, np.arange(5).reshape(5, 1))
     data = data.transform(Domain(data.domain.attributes,
                                  [],
                                  construct_variables(desc, data)))
     np.testing.assert_equal(data.X, data.metas)
예제 #9
0
 def test_construct_variables_continuous(self):
     data = Table("iris")
     name = 'Continuous Variable'
     expression = "pow(sepal_length + sepal_width, 2)"
     featuremodel = PyListModel(
         [ContinuousDescriptor(name=name, expression=expression,
                               number_of_decimals=2)]
     )
     data = Table(Domain(list(data.domain.attributes) +
                         construct_variables(featuremodel, data.domain),
                         data.domain.class_vars,
                         data.domain.metas), data)
     self.assertTrue(isinstance(data.domain[name], ContinuousVariable))
     for i in range(3):
         self.assertEqual(data[i * 50, name],
                          pow(data[i * 50, 0] + data[i * 50, 1], 2))
예제 #10
0
    def test_fix_values(self, msgbox):
        w = self.widget

        msgbox.ApplyRole, msgbox.RejectRole = object(), object()
        msgbox.return_value = Mock()
        dlgexec = msgbox.return_value.exec = Mock()

        v = [DiscreteVariable(name, values=tuple("abc"))
             for name in ("ana", "berta", "cilka")]
        domain = Domain(v, [])
        self.send_signal(w.Inputs.data, Table.from_numpy(domain, [[0, 1, 2]]))

        w.descriptors = [StringDescriptor(
            "y", "ana.value + berta.value + cilka.value")]

        # Reject fixing - no changes
        dlgexec.return_value=msgbox.RejectRole
        w.fix_expressions()
        self.assertEqual(w.descriptors[0].expression,
                         "ana.value + berta.value + cilka.value")

        dlgexec.return_value = Mock(return_value=msgbox.AcceptRole)

        w.fix_expressions()
        self.assertEqual(w.descriptors[0].expression, "ana + berta + cilka")

        w.descriptors = [StringDescriptor(
            "y", "ana.value + dani.value + cilka.value")]
        with patch.object(w, "apply"):  # dani doesn't exist and will fail
            w.fix_expressions()
        self.assertEqual(w.descriptors[0].expression,
                         "ana + dani.value + cilka")

        w.descriptors = [ContinuousDescriptor("y", "sqrt(berta)", 1)]
        w.fix_expressions()
        self.assertEqual(w.descriptors[0].expression,
                         "sqrt({'a': 0, 'b': 1, 'c': 2}[berta])")
예제 #11
0
 def test_create_variable_with_no_data(self):
     self.widget.addFeature(ContinuousDescriptor("X1", "", 3))