def cb(): var, tr = w.get_data() type_ = tc.currentData() if type_ is not type(var): self.assertEqual(tr, [self.ReinterpretTransforms[type_](), Rename("Z")]) else: self.assertEqual(tr, [Rename("Z")])
def test_compound_transform(self): table = self.data_str domain = table.domain v1 = domain.metas[0] v1.attributes["a"] = "a" tv1 = apply_transform(v1, table, [AsContinuous(), Rename("Z1")]) tv2 = apply_transform( v1, table, [AsContinuous(), Rename("Z2"), Annotate((("a", "b"), ))]) self.assertIsInstance(tv1, ContinuousVariable) self.assertEqual(tv1.name, "Z1") self.assertEqual(tv1.attributes, {"a": "a"}) self.assertIsInstance(tv2, ContinuousVariable) self.assertEqual(tv2.name, "Z2") self.assertEqual(tv2.attributes, {"a": "b"}) tdomain = Domain([], metas=[tv1, tv2]) ttable = table.transform(tdomain) assert_array_nanequal( ttable.metas, np.array([ [0.1, 0.1], [1.0, 1.0], ], dtype=object))
def _test_common(self, var): tr = [Rename(var.name + "_copy"), Annotate((("A", "1"), ))] XX = apply_transform_var(var, tr) self.assertEqual(XX.name, var.name + "_copy") self.assertEqual(XX.attributes, {"A": 1}) self.assertIsInstance(XX.compute_value, Identity) self.assertIs(XX.compute_value.variable, var)
def test_delegate(self): model = PyListModel([None]) def set_item(v: dict): model.setItemData(model.index(0), v) def get_style_option() -> QStyleOptionViewItem: opt = QStyleOptionViewItem() delegate.initStyleOption(opt, model.index(0)) return opt set_item({Qt.EditRole: Categorical("a", (), ())}) delegate = VariableEditDelegate() opt = get_style_option() self.assertEqual(opt.text, "a") self.assertFalse(opt.font.italic()) set_item({TransformRole: [Rename("b")]}) opt = get_style_option() self.assertEqual(opt.text, "a \N{RIGHTWARDS ARROW} b") self.assertTrue(opt.font.italic()) set_item({TransformRole: [AsString()]}) opt = get_style_option() self.assertIn("reinterpreted", opt.text) self.assertTrue(opt.font.italic())
def test_reinterpret_editor(self): w = ReinterpretVariableEditor() self.assertEqual(w.get_data(), (None, [])) data = self.DataVectors[0] w.set_data(data, ) self.assertEqual(w.get_data(), (data.vtype, [])) w.set_data(data, [Rename("Z")]) self.assertEqual(w.get_data(), (data.vtype, [Rename("Z")])) for vec, tr in product(self.DataVectors, self.ReinterpretTransforms.values()): w.set_data(vec, [tr()]) v, tr_ = w.get_data() self.assertEqual(v, vec.vtype) if not tr_: self.assertEqual(tr, self.ReinterpretTransforms[type(v)]) else: self.assertEqual(tr_, [tr()])
def test_restore(self): iris = self.iris viris = ("Categorical", ("iris", ("Iris-setosa", "Iris-versicolor", "Iris-virginica"), ())) w = self.widget def restore(state): w._domain_change_store = state w._restore() model = w.variables_model self.send_signal(w.Inputs.data, iris, widget=w) restore({viris: [("Rename", ("Z", ))]}) tr = model.data(model.index(4), TransformRole) self.assertEqual(tr, [Rename("Z")]) restore({viris: [("AsString", ()), ("Rename", ("Z", ))]}) tr = model.data(model.index(4), TransformRole) self.assertEqual(tr, [AsString(), Rename("Z")])
def test_delegate(self): model = VariableListModel([None, None]) def set_item(row: int, v: dict): model.setItemData(model.index(row), v) def get_style_option(row: int) -> QStyleOptionViewItem: opt = QStyleOptionViewItem() delegate.initStyleOption(opt, model.index(row)) return opt set_item(0, {Qt.EditRole: Categorical("a", (), (), False)}) delegate = VariableEditDelegate() opt = get_style_option(0) self.assertEqual(opt.text, "a") self.assertFalse(opt.font.italic()) set_item(0, {TransformRole: [Rename("b")]}) opt = get_style_option(0) self.assertEqual(opt.text, "a \N{RIGHTWARDS ARROW} b") self.assertTrue(opt.font.italic()) set_item(0, {TransformRole: [AsString()]}) opt = get_style_option(0) self.assertIn("reinterpreted", opt.text) self.assertTrue(opt.font.italic()) set_item(1, { Qt.EditRole: String("b", (), False), TransformRole: [Rename("a")] }) opt = get_style_option(1) self.assertEqual(opt.palette.color(QPalette.Text), QColor(Qt.red)) view = QListView() with patch.object(QToolTip, "showText") as p: delegate.helpEvent( QHelpEvent(QHelpEvent.ToolTip, QPoint(0, 0), QPoint(0, 0)), view, opt, model.index(1), ) p.assert_called_once()
def test_reinterpret_editor_simulate(self): w = ReinterpretVariableEditor() tc = w.findChild(QComboBox, name="type-combo") def cb(): var, tr = w.get_data() type_ = tc.currentData() if type_ is not type(var): self.assertEqual(tr, [self.ReinterpretTransforms[type_](), Rename("Z")]) else: self.assertEqual(tr, [Rename("Z")]) for vec in self.DataVectors: w.set_data(vec, [Rename("Z")]) simulate.combobox_run_through_all(tc, callback=cb)
def test_variable_editor(self): w = VariableEditor() self.assertEqual(w.get_data(), (None, [])) v = String("S", (("A", "1"), ("B", "b"))) w.set_data(v, []) self.assertEqual(w.name_edit.text(), v.name) self.assertEqual(w.labels_model.get_dict(), {"A": "1", "B": "b"}) self.assertEqual(w.get_data(), (v, [])) w.set_data(None) self.assertEqual(w.name_edit.text(), "") self.assertEqual(w.labels_model.get_dict(), {}) self.assertEqual(w.get_data(), (None, [])) w.set_data(v, [Rename("T"), Annotate((("a", "1"), ("b", "2")))]) self.assertEqual(w.name_edit.text(), "T") self.assertEqual(w.labels_model.rowCount(), 2) add = w.findChild(QAction, "action-add-label") add.trigger() remove = w.findChild(QAction, "action-delete-label") remove.trigger()
def test_variable_model(self): model = VariableListModel() self.assertEqual(model.effective_name(model.index(-1, -1)), None) def data(row, role): return model.data(model.index(row, ), role) def set_data(row, data, role): model.setData(model.index(row), data, role) model[:] = [ RealVector(Real("A", (3, "g"), (), False), lambda: MArray([])), RealVector(Real("B", (3, "g"), (), False), lambda: MArray([])), ] self.assertEqual(data(0, Qt.DisplayRole), "A") self.assertEqual(data(1, Qt.DisplayRole), "B") self.assertEqual(model.effective_name(model.index(1)), "B") set_data(1, [Rename("A")], TransformRole) self.assertEqual(model.effective_name(model.index(1)), "A") self.assertEqual(data(0, MultiplicityRole), 2) self.assertEqual(data(1, MultiplicityRole), 2) set_data(1, [], TransformRole) self.assertEqual(data(0, MultiplicityRole), 1) self.assertEqual(data(1, MultiplicityRole), 1)
def test_rename(self): var = Real("X", (-1, ""), ()) tr = Rename("Y") val = report_transform(var, [tr]) self.assertIn("X", val) self.assertIn("Y", val)