def test_discrete_editor(self): w = DiscreteVariableEditor() self.assertEqual(w.get_data(), (None, [])) v = Categorical("C", ("a", "b", "c"), None, (("A", "1"), ("B", "b"))) w.set_data(v) self.assertEqual(w.name_edit.text(), v.name) self.assertEqual(w.labels_model.get_dict(), dict(v.annotations)) 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, [])) mapping = [("c", "C"), ("a", "A"), ("b", None), (None, "b")] w.set_data(v, [CategoriesMapping(mapping)]) w.grab() # run delegate paint method self.assertEqual(w.get_data(), (v, [CategoriesMapping(mapping)])) # test selection/deselection in the view w.set_data(v) view = w.values_edit model = view.model() assert model.rowCount() sel_model = view.selectionModel() model = sel_model.model() sel_model.select(model.index(0, 0), QItemSelectionModel.Select) sel_model.select(model.index(0, 0), QItemSelectionModel.Deselect)
def test_discrete_editor_merge_action(self): """ This function check whether results of dialog have effect on merging the attributes. The dialog itself is tested separately. """ w = DiscreteVariableEditor() v = Categorical("C", ("a", "b", "c"), (("A", "1"), ("B", "b")), False) w.set_data_categorical( v, [0, 0, 0, 1, 1, 2], [CategoriesMapping([ ("a", "AA"), ("b", "BB"), ("c", "CC"), ])]) view = w.values_edit model = view.model() selmodel = view.selectionModel() # type: QItemSelectionModel selmodel.select(QItemSelection(model.index(0, 0), model.index(1, 0)), QItemSelectionModel.ClearAndSelect) spy = QSignalSpy(w.variable_changed) w.merge_items.trigger() self.assertEqual(model.index(0, 0).data(Qt.EditRole), "other") self.assertEqual(model.index(1, 0).data(Qt.EditRole), "other") self.assertEqual(model.index(2, 0).data(Qt.EditRole), "CC") self.assertSequenceEqual(list(spy), [[]], 'variable_changed should emit exactly once')
def test_discrete_reorder(self): D = DiscreteVariable("D", values=("2", "3", "1", "0")) DD = apply_transform_var(D, [ CategoriesMapping((("0", "0"), ("1", "1"), ("2", "2"), ("3", "3"))) ]) self.assertSequenceEqual(DD.values, ["0", "1", "2", "3"]) self._assertLookupEquals(DD.compute_value, Lookup(D, np.array([2, 3, 1, 0])))
def test_categories_mapping(self): var = Categorical("C", ("a", "b", "c"), ()) tr = CategoriesMapping( (("a", "aa"), ("b", None), ("c", "cc"), (None, "ee")), ) r = report_transform(var, [tr]) self.assertIn("a", r) self.assertIn("aa", r) self.assertIn("b", r) self.assertIn("<s>", r)
def test_discrete_editor(self): w = DiscreteVariableEditor() self.assertEqual(w.get_data(), (None, [])) v = Categorical("C", ("a", "b", "c"), (("A", "1"), ("B", "b")), False) values = [0, 0, 0, 1, 1, 2] w.set_data_categorical(v, values) self.assertEqual(w.name_edit.text(), v.name) self.assertEqual(w.labels_model.get_dict(), dict(v.annotations)) self.assertEqual(w.get_data(), (v, [])) w.set_data_categorical(None, None) self.assertEqual(w.name_edit.text(), "") self.assertEqual(w.labels_model.get_dict(), {}) self.assertEqual(w.get_data(), (None, [])) mapping = [("c", "C"), ("a", "A"), ("b", None), (None, "b")] w.set_data_categorical(v, values, [CategoriesMapping(mapping)]) w.grab() # run delegate paint method self.assertEqual(w.get_data(), (v, [CategoriesMapping(mapping)])) # test selection/deselection in the view w.set_data_categorical(v, values) view = w.values_edit model = view.model() assert model.rowCount() sel_model = view.selectionModel() model = sel_model.model() sel_model.select(model.index(0, 0), QItemSelectionModel.Select) sel_model.select(model.index(0, 0), QItemSelectionModel.Deselect) # merge mapping mapping = [("a", "a"), ("b", "b"), ("c", "b")] w.set_data_categorical(v, values, [CategoriesMapping(mapping)]) self.assertEqual(w.get_data()[1], [CategoriesMapping(mapping)]) self.assertEqual(model.data(model.index(0, 0), MultiplicityRole), 1) self.assertEqual(model.data(model.index(1, 0), MultiplicityRole), 2) self.assertEqual(model.data(model.index(2, 0), MultiplicityRole), 2) w.grab() model.setData(model.index(0, 0), "b", Qt.EditRole) self.assertEqual(model.data(model.index(0, 0), MultiplicityRole), 3) self.assertEqual(model.data(model.index(1, 0), MultiplicityRole), 3) self.assertEqual(model.data(model.index(2, 0), MultiplicityRole), 3) w.grab()
def test_categorical_merge_mapping(self): var = Categorical("C", ("a", "b1", "b2"), ()) tr = CategoriesMapping( (("a", "a"), ("b1", "b"), ("b2", "b"), (None, "c")), ) r = report_transform(var, [tr]) self.assertIn('b', r)
def test_discrete_merge(self): D = DiscreteVariable("D", values=("2", "3", "1", "0")) mapping = ( ("0", "x"), ("1", "y"), ("2", "x"), ("3", "y"), ) tr = [CategoriesMapping(mapping)] DD = apply_transform_var(D, tr) self.assertSequenceEqual(DD.values, ["x", "y"]) self._assertLookupEquals(DD.compute_value, Lookup(D, np.array([0, 1, 1, 0])))
def test_discrete_add_drop(self): D = DiscreteVariable("D", values=("2", "3", "1", "0")) mapping = ( ("0", None), ("1", "1"), ("2", "2"), ("3", None), (None, "A"), ) tr = [CategoriesMapping(mapping)] DD = apply_transform_var(D, tr) self.assertSequenceEqual(DD.values, ["1", "2", "A"]) self._assertLookupEquals(DD.compute_value, Lookup(D, np.array([1, np.nan, 0, np.nan])))
def test_discrete_rename(self): D = DiscreteVariable("D", values=("a", "b")) DD = apply_transform_var(D, [CategoriesMapping((("a", "A"), ("b", "B")))]) self.assertSequenceEqual(DD.values, ["A", "B"]) self.assertIs(DD.compute_value.variable, D)