From 91c1bde79b377277845566afb92f25df33dba96b Mon Sep 17 00:00:00 2001 From: BadPrograms Date: Tue, 5 Aug 2025 15:51:59 +0300 Subject: [PATCH 1/3] initial --- src/lineagetree/_basics/_navigation.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lineagetree/_basics/_navigation.py b/src/lineagetree/_basics/_navigation.py index 9a86ea2..b41d48a 100644 --- a/src/lineagetree/_basics/_navigation.py +++ b/src/lineagetree/_basics/_navigation.py @@ -366,8 +366,13 @@ def nodes_at_t( r = [r] if t is None: t = lT.t_e - to_do = list(r) + to_do = [] final_nodes = [] + for root in r: + if lT.time[root] == t: + final_nodes.append(root) + else: + to_do.append(root) while len(to_do) > 0: curr = to_do.pop() for _next in lT._successor[curr]: From f0653f553063727424c46194250b83a2fcb10ca0 Mon Sep 17 00:00:00 2001 From: BadPrograms Date: Mon, 11 Aug 2025 11:56:10 +0300 Subject: [PATCH 2/3] fix for pr (no sets) --- src/lineagetree/_basics/_navigation.py | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/lineagetree/_basics/_navigation.py b/src/lineagetree/_basics/_navigation.py index b41d48a..7b4af18 100644 --- a/src/lineagetree/_basics/_navigation.py +++ b/src/lineagetree/_basics/_navigation.py @@ -361,27 +361,19 @@ def nodes_at_t( list of ids of the nodes at time `t` spawned by `r` """ if not r and r != 0: - r = {root for root in lT.roots if lT.time[root] <= t} + r = [root for root in lT.roots if lT.time[root] <= t] if isinstance(r, int): r = [r] if t is None: t = lT.t_e - to_do = [] + to_do = list(r) final_nodes = [] - for root in r: - if lT.time[root] == t: - final_nodes.append(root) - else: - to_do.append(root) - while len(to_do) > 0: + while 0 < len(to_do): curr = to_do.pop() - for _next in lT._successor[curr]: - if lT._time[_next] < t: - to_do.append(_next) - elif lT._time[_next] == t: - final_nodes.append(_next) - if not final_nodes: - return list(r) + if lT._time[curr] == t: + final_nodes.append(curr) + elif lT._time[curr] < t: + to_do.extend(lT.successor[curr]) return final_nodes From 994a0f9032fd40aeb30b32a95a6c2037307816ac Mon Sep 17 00:00:00 2001 From: jules-vanaret Date: Tue, 26 Aug 2025 12:22:36 +0200 Subject: [PATCH 3/3] simplified logic --- src/lineagetree/_basics/_navigation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lineagetree/_basics/_navigation.py b/src/lineagetree/_basics/_navigation.py index 7b4af18..7c23a94 100644 --- a/src/lineagetree/_basics/_navigation.py +++ b/src/lineagetree/_basics/_navigation.py @@ -360,8 +360,8 @@ def nodes_at_t( list of int list of ids of the nodes at time `t` spawned by `r` """ - if not r and r != 0: - r = [root for root in lT.roots if lT.time[root] <= t] + if r is None: + return lT.time_nodes.get(t, []) if isinstance(r, int): r = [r] if t is None: