Skip to content

Commit e49d5e7

Browse files
committed
Prevent iterating over a TopologyCounter
1 parent ee8ccaa commit e49d5e7

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

python/CHANGELOG.rst

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,11 @@
7272
values with mutations over roots.
7373
(:user:`benjeffery`, :pr:`3274`, :issue:`3273`)
7474

75+
- Prevent iterating over a ``TopologyCounter``
76+
(:user:`benjeffery` , :pr:`3202`, :issue:`1462`)
7577

76-
**Breaking changes**
78+
79+
**Breaking changes**
7780

7881
- ``ltrim``, ``rtrim``, ``trim`` and ``shift`` raise an error if used on a tree sequence
7982
containing a reference sequence (:user:`hyanwong`, :pr:`3210`, :issue:`2091`)

python/tests/test_combinatorics.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,11 @@ def verify_topologies(self, ts, sample_sets=None, expected=None):
635635
assert actual_topologies == expected[i][sample_set_indexes]
636636
assert actual_topologies == actual_inc_topologies
637637

638+
def test_no_iterate(self):
639+
with pytest.raises(TypeError, match="not iterable"):
640+
for _ in tskit.Tree.generate_star(3).count_topologies():
641+
pass
642+
638643
def subsample_topologies(self, ts, sample_sets, sample_set_indexes):
639644
subsample_sets = [sample_sets[i] for i in sample_set_indexes]
640645
topologies = collections.Counter()

python/tskit/combinatorics.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,12 @@ def __setitem__(self, sample_set_indexes, counter):
541541
k = TopologyCounter._to_key(sample_set_indexes)
542542
self.topologies[k] = counter
543543

544+
def __iter__(self):
545+
raise TypeError(
546+
"TopologyCounter object is not iterable, "
547+
"iterate over '.topologies' instead"
548+
)
549+
544550
@staticmethod
545551
def _to_key(sample_set_indexes):
546552
if not isinstance(sample_set_indexes, collections.abc.Iterable):

0 commit comments

Comments
 (0)