Skip to content

Commit 74adad4

Browse files
committed
version bump -> 1.2.0-beta.6, moved cycle detection to another branch
1 parent 4420ef2 commit 74adad4

File tree

3 files changed

+9
-69
lines changed

3 files changed

+9
-69
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "koi-net"
7-
version = "1.2.0b4"
7+
version = "1.2.0b6"
88
description = "Implementation of KOI-net protocol in Python"
99
authors = [
1010
{name = "Luke Miller", email = "luke@block.science"}

src/koi_net/assembler.py

Lines changed: 7 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -30,34 +30,16 @@ def __new__(self) -> Self:
3030
"""Returns assembled node container."""
3131

3232
comps = self._collect_comps()
33-
# pp(list(comps.keys()))
3433
adj, comp_types = self._build_deps(comps)
35-
# pp(adj)
36-
# pp(comp_types)
3734
build_order = self._build_order(adj)
38-
# pp(build_order)
3935
components = self._build_comps(build_order, adj, comp_types)
4036
node = self._build_node(components)
4137

42-
old = list(comps.keys())
43-
new = build_order
44-
45-
result = []
46-
47-
for idx, item in enumerate(new):
48-
old_idx = old.index(item)
49-
if old_idx == idx:
50-
result.append(f"{idx}. {item}")
51-
else:
52-
result.append(f"{idx}. {item} (moved from {old_idx})")
53-
54-
# print("\n".join(result))
55-
5638
return node
5739

5840
@classmethod
59-
def _collect_comps(cls):
60-
comps: dict[str, Any] = {}
41+
def _collect_comps(cls) -> dict[str, Any]:
42+
comps = {}
6143
# adds components from base classes, including cls)
6244
for base in inspect.getmro(cls)[:-1]:
6345
for k, v in vars(base).items():
@@ -68,7 +50,9 @@ def _collect_comps(cls):
6850
return comps
6951

7052
@classmethod
71-
def _build_deps(cls, comps) -> tuple[dict[str, list[str]], dict[str, CompType]]:
53+
def _build_deps(
54+
cls, comps: dict[str, Any]
55+
) -> tuple[dict[str, list[str]], dict[str, CompType]]:
7256
"""Returns dependency graph for components defined in `cls_build_order`.
7357
7458
Graph representation is a dict where each key is a component name,
@@ -102,40 +86,7 @@ def _build_deps(cls, comps) -> tuple[dict[str, list[str]], dict[str, CompType]]:
10286
return dep_graph, comp_types
10387

10488
@classmethod
105-
def _find_cycle(cls, adj) -> list[str]:
106-
visited = set()
107-
stack = []
108-
on_stack = set()
109-
110-
def dfs(node):
111-
visited.add(node)
112-
stack.append(node)
113-
on_stack.add(node)
114-
115-
for nxt in adj[node]:
116-
if nxt not in visited:
117-
cycle = dfs(nxt)
118-
if cycle:
119-
return cycle
120-
121-
elif nxt in on_stack:
122-
idx = stack.index(nxt)
123-
return stack[idx:] + [nxt]
124-
125-
stack.pop()
126-
on_stack.remove(node)
127-
return None
128-
129-
for node in adj:
130-
if node not in visited:
131-
cycle = dfs(node)
132-
if cycle:
133-
return cycle
134-
135-
return None
136-
137-
@classmethod
138-
def _build_order(cls, adj) -> list[str]:
89+
def _build_order(cls, adj: dict[str, list[str]]) -> list[str]:
13990
# adj list: n -> outgoing neighbors
14091

14192
# reverse adj list: n -> incoming neighbors
@@ -171,17 +122,7 @@ def _build_order(cls, adj) -> list[str]:
171122

172123
if len(ordered) != len(adj):
173124
cycle_nodes = set(adj.keys()) - set(ordered)
174-
cycle_adj = {}
175-
for n in list(cycle_nodes):
176-
cycle_adj[n] = set(adj[n]) & cycle_nodes
177-
print(n, "->", cycle_adj[n])
178-
179-
cycle = cls._find_cycle(cycle_adj)
180-
181-
print("FOUND CYCLE")
182-
print(" -> ".join(cycle))
183-
184-
print(len(ordered), "/", len(adj))
125+
raise Exception(f"Found cycle in dependency graph, the following nodes could not be ordered: {cycle_nodes}")
185126

186127
return ordered
187128

src/koi_net/workers/kobj_worker.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
import traceback
33
import structlog
44

5-
from koi_net.config.core import NodeConfig
6-
5+
from ..config.core import NodeConfig
76
from ..processor.pipeline import KnowledgePipeline
87
from ..processor.kobj_queue import KobjQueue
98
from .base import ThreadWorker, STOP_WORKER

0 commit comments

Comments
 (0)