Skip to content

Commit 747df7f

Browse files
benjefferymergify[bot]
authored andcommitted
Add ref seq equals
1 parent 295a92d commit 747df7f

File tree

3 files changed

+66
-15
lines changed

3 files changed

+66
-15
lines changed

python/CHANGELOG.rst

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
**Fixes**
1212

1313
- ``TreeSequence.dump_text`` now prints decoded metadata if there is a schema.
14-
(:user:`bejeffery`, :issue:`1860`, :issue:`1527`,
14+
(:user:`benjeffery`, :issue:`1860`, :issue:`1527`)
15+
16+
- Add missing ``ReferenceSequence.__eq__`` method.
17+
(:user:`benjeffery`, :issue:`2063`, :pr:`2085`)
1518

1619

1720
----------------------

python/tests/test_reference_sequence.py

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -148,42 +148,80 @@ def test_repr(self):
148148
assert repr(refseq).startswith("ReferenceSequence")
149149

150150

151-
class TestAssertEquals:
152-
def test_success_self(self, ts_fixture):
151+
class TestEquals:
152+
def test_equal_self(self, ts_fixture):
153153
ts_fixture.reference_sequence.assert_equals(ts_fixture.reference_sequence)
154+
assert ts_fixture.reference_sequence == ts_fixture.reference_sequence
155+
assert not ts_fixture.reference_sequence != ts_fixture.reference_sequence
156+
assert ts_fixture.reference_sequence.equals(ts_fixture.reference_sequence)
154157

155-
def test_success_empty(self):
158+
def test_equal_empty(self):
156159
tables = tskit.TableCollection(1)
157160
tables.reference_sequence.assert_equals(tables.reference_sequence)
161+
assert tables.reference_sequence == tables.reference_sequence
162+
assert tables.reference_sequence.equals(tables.reference_sequence)
158163

159164
@pytest.mark.parametrize("attr", ["url", "data"])
160-
def test_fails_attr_missing(self, ts_fixture, attr):
165+
def test_unequal_attr_missing(self, ts_fixture, attr):
161166
t1 = ts_fixture.tables
162167
d = t1.asdict()
163168
del d["reference_sequence"][attr]
164169
t2 = tskit.TableCollection.fromdict(d)
165170
with pytest.raises(AssertionError, match=attr):
166171
t1.reference_sequence.assert_equals(t2.reference_sequence)
172+
assert t1.reference_sequence != t2.reference_sequence
173+
assert not t1.reference_sequence.equals(t2.reference_sequence)
167174
with pytest.raises(AssertionError, match=attr):
168175
t2.reference_sequence.assert_equals(t1.reference_sequence)
169-
170-
def test_fails_metadata_different(self, ts_fixture):
176+
assert t2.reference_sequence != t1.reference_sequence
177+
assert not t2.reference_sequence.equals(t1.reference_sequence)
178+
179+
@pytest.mark.parametrize(
180+
("attr", "val"),
181+
[
182+
("url", "foo"),
183+
("data", "bar"),
184+
("metadata", {"json": "runs the world"}),
185+
("metadata_schema", tskit.MetadataSchema(None)),
186+
],
187+
)
188+
def test_different_not_equal(self, ts_fixture, attr, val):
171189
t1 = ts_fixture.dump_tables()
172190
t2 = t1.copy()
173-
t1.reference_sequence.metadata = {"different": "metadata"}
174-
with pytest.raises(AssertionError, match="metadata"):
191+
setattr(t1.reference_sequence, attr, val)
192+
193+
with pytest.raises(AssertionError):
175194
t1.reference_sequence.assert_equals(t2.reference_sequence)
176-
with pytest.raises(AssertionError, match="metadata"):
195+
assert t1.reference_sequence != t2.reference_sequence
196+
assert not t1.reference_sequence.equals(t2.reference_sequence)
197+
with pytest.raises(AssertionError):
177198
t2.reference_sequence.assert_equals(t1.reference_sequence)
178-
179-
def test_fails_metadata_schema_different(self, ts_fixture):
199+
assert t2.reference_sequence != t1.reference_sequence
200+
assert not t2.reference_sequence.equals(t1.reference_sequence)
201+
202+
@pytest.mark.parametrize(
203+
("attr", "val"),
204+
[
205+
("metadata", {"json": "runs the world"}),
206+
("metadata_schema", tskit.MetadataSchema(None)),
207+
],
208+
)
209+
def test_different_but_ignore(self, ts_fixture, attr, val):
180210
t1 = ts_fixture.dump_tables()
181211
t2 = t1.copy()
182-
t1.reference_sequence.metadata_schema = tskit.MetadataSchema(None)
183-
with pytest.raises(AssertionError, match="schemas"):
212+
setattr(t1.reference_sequence, attr, val)
213+
214+
with pytest.raises(AssertionError):
184215
t1.reference_sequence.assert_equals(t2.reference_sequence)
185-
with pytest.raises(AssertionError, match="schemas"):
216+
assert t1.reference_sequence != t2.reference_sequence
217+
assert not t1.reference_sequence.equals(t2.reference_sequence)
218+
with pytest.raises(AssertionError):
186219
t2.reference_sequence.assert_equals(t1.reference_sequence)
220+
assert t2.reference_sequence != t1.reference_sequence
221+
assert not t2.reference_sequence.equals(t1.reference_sequence)
222+
223+
t2.reference_sequence.assert_equals(t1.reference_sequence, ignore_metadata=True)
224+
assert t2.reference_sequence.equals(t1.reference_sequence, ignore_metadata=True)
187225

188226

189227
class TestTreeSequenceProperties:

python/tskit/tables.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2773,6 +2773,16 @@ def asdict(self) -> dict:
27732773
"url": self.url,
27742774
}
27752775

2776+
def __eq__(self, other):
2777+
return self.equals(other)
2778+
2779+
def equals(self, other, ignore_metadata=False):
2780+
try:
2781+
self.assert_equals(other, ignore_metadata)
2782+
return True
2783+
except AssertionError:
2784+
return False
2785+
27762786
def assert_equals(self, other, ignore_metadata=False):
27772787
if not ignore_metadata:
27782788
super().assert_equals(other)

0 commit comments

Comments
 (0)