Skip to content

Commit eb3d6ec

Browse files
authored
Merge pull request #4957 from PrimozGodec/fix-merge-data
[FIX] Fix variables equality and hashes
2 parents 242d3fc + 6b14233 commit eb3d6ec

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

Orange/data/tests/test_variable.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,18 +215,25 @@ def test_hash(self):
215215

216216
def test_hash_eq(self):
217217
a = ContinuousVariable("a")
218+
a1 = ContinuousVariable("a")
218219
b1 = ContinuousVariable("b", compute_value=Identity(a))
219220
b2 = ContinuousVariable("b2", compute_value=Identity(b1))
220221
b3 = ContinuousVariable("b")
221-
self.assertEqual(a, b2)
222-
self.assertEqual(b1, b2)
223-
self.assertEqual(a, b1)
222+
c1 = ContinuousVariable("c", compute_value=Identity(a))
223+
c2 = ContinuousVariable("c", compute_value=Identity(a))
224+
self.assertNotEqual(a, b2)
225+
self.assertNotEqual(b1, b2)
226+
self.assertNotEqual(a, b1)
224227
self.assertNotEqual(b1, b3)
228+
self.assertEqual(a, a1)
229+
self.assertEqual(c1, c2)
225230

226-
self.assertEqual(hash(a), hash(b2))
227-
self.assertEqual(hash(b1), hash(b2))
228-
self.assertEqual(hash(a), hash(b1))
231+
self.assertNotEqual(hash(a), hash(b2))
232+
self.assertNotEqual(hash(b1), hash(b2))
233+
self.assertNotEqual(hash(a), hash(b1))
229234
self.assertNotEqual(hash(b1), hash(b3))
235+
self.assertEqual(hash(a), hash(a1))
236+
self.assertEqual(hash(c1), hash(c2))
230237

231238

232239
def variabletest(varcls):

Orange/data/variable.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -353,12 +353,15 @@ def __eq__(self, other):
353353
var1 = self._get_identical_source(self)
354354
var2 = self._get_identical_source(other)
355355
# pylint: disable=protected-access
356-
return var1.name == var2.name \
357-
and var1._compute_value == var2._compute_value
356+
return (
357+
self.name == other.name
358+
and var1.name == var2.name
359+
and var1._compute_value == var2._compute_value
360+
)
358361

359362
def __hash__(self):
360363
var = self._get_identical_source(self)
361-
return hash((var.name, type(self), var._compute_value))
364+
return hash((self.name, var.name, type(self), var._compute_value))
362365

363366
@staticmethod
364367
def _get_identical_source(var):

Orange/tests/test_domain.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,22 @@ def test_domain_conversion_sparsity(self):
544544
self.assertTrue(conversion.sparse_Y)
545545
self.assertFalse(conversion.sparse_metas)
546546

547+
def test_get_item_similar_vars(self):
548+
a = DiscreteVariable("Cluster", values=["c"])
549+
var1 = a.renamed("Cluster x")
550+
var2 = DiscreteVariable("Cluster", values=["a", "b"])
551+
552+
domain = Domain(
553+
[],
554+
metas=[var1, var2]
555+
)
556+
# pylint: disable=protected-access
557+
self.assertDictEqual(
558+
{-1: -1, -2: -2, var1: -1, var2: -2, var1.name: -1, var2.name: -2},
559+
domain._indices
560+
)
561+
self.assertIs(domain[domain.metas[0]], domain.metas[0])
562+
547563

548564
class TestDomainFilter(unittest.TestCase):
549565
def setUp(self):

0 commit comments

Comments
 (0)