Skip to content

Commit 12e1ae5

Browse files
Tidy up some details
Closes #1725
1 parent 492acf1 commit 12e1ae5

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

c/tskit/trees.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3626,7 +3626,6 @@ tsk_tree_get_time(const tsk_tree_t *self, tsk_id_t u, double *t)
36263626
if (u == self->virtual_root) {
36273627
*t = INFINITY;
36283628
} else {
3629-
36303629
ret = tsk_treeseq_get_node(self->tree_sequence, u, &node);
36313630
if (ret != 0) {
36323631
goto out;
@@ -4288,7 +4287,7 @@ tsk_tree_get_size_bound(const tsk_tree_t *self)
42884287
/* Traversal orders */
42894288

42904289
static tsk_id_t *
4291-
tsk_tree_alloc_stack(const tsk_tree_t *self)
4290+
tsk_tree_alloc_node_stack(const tsk_tree_t *self)
42924291
{
42934292
return tsk_malloc(tsk_tree_get_size_bound(self) * sizeof(tsk_id_t));
42944293
}
@@ -4300,7 +4299,7 @@ tsk_tree_preorder(
43004299
int ret = 0;
43014300
const tsk_id_t *restrict right_child = self->right_child;
43024301
const tsk_id_t *restrict left_sib = self->left_sib;
4303-
tsk_id_t *restrict stack = tsk_tree_alloc_stack(self);
4302+
tsk_id_t *restrict stack = tsk_tree_alloc_node_stack(self);
43044303
tsk_size_t num_nodes = 0;
43054304
tsk_id_t u, v;
43064305
int stack_top;
@@ -4352,7 +4351,7 @@ tsk_tree_postorder(
43524351
const tsk_id_t *restrict right_child = self->right_child;
43534352
const tsk_id_t *restrict left_sib = self->left_sib;
43544353
const tsk_id_t *restrict parent = self->parent;
4355-
tsk_id_t *restrict stack = tsk_tree_alloc_stack(self);
4354+
tsk_id_t *restrict stack = tsk_tree_alloc_node_stack(self);
43564355
tsk_size_t num_nodes = 0;
43574356
tsk_id_t u, v, postorder_parent;
43584357
int stack_top;

python/tests/test_highlevel.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,24 @@ def get_samples(ts, time=None, population=None):
445445

446446

447447
class TestTreeTraversals:
448+
def test_bad_traversal_order(self):
449+
ts = msprime.sim_ancestry(2, random_seed=234)
450+
tree = ts.first()
451+
for bad_order in ["pre", "post", "preorderorder", ("x",), b"preorder"]:
452+
with pytest.raises(ValueError, match="Traversal order"):
453+
tree.nodes(order=bad_order)
454+
455+
@pytest.mark.parametrize("order", list(traversal_map.keys()))
456+
def test_returned_types(self, order):
457+
ts = msprime.sim_ancestry(2, random_seed=234)
458+
tree = ts.first()
459+
iterator = tree.nodes(order=order)
460+
assert isinstance(iterator, collections.abc.Iterable)
461+
lst = list(iterator)
462+
assert len(lst) > 0
463+
for u in lst:
464+
assert isinstance(u, int)
465+
448466
@pytest.mark.parametrize("ts", get_example_tree_sequences())
449467
@pytest.mark.parametrize("order", list(traversal_map.keys()))
450468
def test_traversals_virtual_root(self, ts, order):

python/tskit/trees.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2127,9 +2127,11 @@ def timedesc(self, u=NULL):
21272127
return self.timeasc(u)[::-1]
21282128

21292129
def _preorder_traversal(self, root):
2130+
# Return Python integers for compatibility
21302131
return map(int, self.preorder(root))
21312132

21322133
def _postorder_traversal(self, root):
2134+
# Return Python integers for compatibility
21332135
return map(int, self.postorder(root))
21342136

21352137
def _inorder_traversal(self, root):
@@ -2166,13 +2168,13 @@ def _timeasc_traversal(self, root):
21662168
"""
21672169
Sorts by increasing time but falls back to increasing ID for equal times.
21682170
"""
2169-
yield from self.timeasc(root)
2171+
return map(int, self.timeasc(root))
21702172

21712173
def _timedesc_traversal(self, root):
21722174
"""
21732175
The reverse of timeasc.
21742176
"""
2175-
yield from self.timedesc(root)
2177+
return map(int, self.timedesc(root))
21762178

21772179
def _minlex_postorder_traversal(self, root):
21782180
"""

0 commit comments

Comments
 (0)