def test_construct_variables_discrete(self): data = Table("iris") name = "Discrete Variable" expression = ("iris_one if iris == 'Iris-setosa' else iris_two " "if iris == 'Iris-versicolor' else iris_three") values = ("iris one", "iris two", "iris three") desc = PyListModel([ DiscreteDescriptor( name=name, expression=expression, values=values, base_value=-1, ordered=False, ) ]) data = Table( Domain( list(data.domain.attributes) + construct_variables(desc, data.domain.variables), data.domain.class_vars, data.domain.metas, ), data, ) self.assertTrue(isinstance(data.domain[name], DiscreteVariable)) self.assertEqual(data.domain[name].values, list(values)) for i in range(3): self.assertEqual(data[i * 50, name], values[i])
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()
def test_construct_variables_string(self): data = Table("iris") name = 'String Variable' expression = "str(iris) + '_name'" desc = PyListModel( [StringDescriptor(name=name, expression=expression)]) data = data.transform( Domain(data.domain.attributes, data.domain.class_vars, list(data.domain.metas) + construct_variables(desc, data))) self.assertTrue(isinstance(data.domain[name], StringVariable)) for i in range(3): self.assertEqual(data[i * 50, name], str(data[i * 50, "iris"]) + "_name")
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))
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)
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.variables) ndata = Table(Domain(nv, None), data) np.testing.assert_array_equal(ndata.X[:, 0], data.X[:, :2].sum(axis=1)) ContinuousVariable._clear_all_caches()
def test_construct_variables_datetime(self): data = Table("housing") name = 'Date' expression = '"2019-07-{:02}".format(int(MEDV/3))' featuremodel = PyListModel( [DateTimeDescriptor(name=name, expression=expression)]) data = Table( Domain( list(data.domain.attributes) + construct_variables(featuremodel, data), data.domain.class_vars, data.domain.metas), data) self.assertTrue(isinstance(data.domain[name], TimeVariable)) for row in data: self.assertEqual("2019-07-{:02}".format(int(row["MEDV"] / 3)), str(row["Date"])[:10])
def test_construct_variables_string(self): data = Table("iris") name = 'String Variable' expression = "str(iris) + '_name'" desc = PyListModel( [StringDescriptor(name=name, expression=expression)] ) data = Table(Domain(data.domain.attributes, data.domain.class_vars, list(data.domain.metas) + construct_variables(desc, data.domain)), data) self.assertTrue(isinstance(data.domain[name], StringVariable)) for i in range(3): self.assertEqual(data[i * 50, name], str(data[i * 50, "iris"]) + "_name")
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))
def test_construct_variables_discrete(self): data = Table("iris") name = 'Discrete Variable' expression = "iris_one if iris == 'Iris-setosa' else iris_two " \ "if iris == 'Iris-versicolor' else iris_three" values = ('iris one', 'iris two', 'iris three') desc = PyListModel( [DiscreteDescriptor(name=name, expression=expression, values=values, base_value=-1, ordered=False)] ) data = Table(Domain(list(data.domain.attributes) + construct_variables(desc, data.domain), data.domain.class_vars, data.domain.metas), data) self.assertTrue(isinstance(data.domain[name], DiscreteVariable)) self.assertEqual(data.domain[name].values, list(values)) for i in range(3): self.assertEqual(data[i * 50, name], values[i])
def test_construct_variables_discrete(self): data = Table("iris") name = 'Discrete Variable' expression = "iris_one if iris == 'Iris-setosa' else iris_two " \ "if iris == 'Iris-versicolor' else iris_three" values = ('iris one', 'iris two', 'iris three') desc = PyListModel( [DiscreteDescriptor(name=name, expression=expression, values=values, ordered=False)] ) data = data.transform(Domain(list(data.domain.attributes) + construct_variables(desc, data), data.domain.class_vars, data.domain.metas)) self.assertTrue(isinstance(data.domain[name], DiscreteVariable)) self.assertEqual(data.domain[name].values, values) for i in range(3): self.assertEqual(data[i * 50, name], values[i])
def test_construct_variables_discrete_no_values(self): data = Table("iris") name = 'Discrete Variable' expression = "str(iris)[-1]" # last letter - a or r values = () desc = PyListModel( [DiscreteDescriptor(name=name, expression=expression, values=values, ordered=False)] ) data = data.transform(Domain(list(data.domain.attributes) + construct_variables(desc, data), data.domain.class_vars, data.domain.metas)) newvar = data.domain[name] self.assertTrue(isinstance(newvar, DiscreteVariable)) self.assertEqual(set(data.domain[name].values), set("ar")) for i in range(3): inst = data[i * 50] self.assertEqual(str(inst[name]), str(inst["iris"])[-1])