fix auto graph stripping

This commit is contained in:
Nicolas Kruse 2025-12-19 20:33:36 +01:00
parent 3c5f01db7f
commit ce15e83c2b
2 changed files with 14 additions and 9 deletions

View File

@ -336,7 +336,7 @@ class CPConstant(Node):
self.dtype, self.value = _get_data_and_dtype(value)
self.name = 'const_' + self.dtype
self.args = tuple()
self.node_hash = hash(value) if constant else id(self)
self.node_hash = hash(value) ^ hash(self.dtype) if constant else id(self)
class Write(Node):

View File

@ -102,19 +102,24 @@ def get_all_dag_edges(nodes: Iterable[Node]) -> Generator[tuple[Node, Node], Non
Tuples of (source_node, target_node) representing edges in the DAG
"""
emitted_edges: set[tuple[Node, Node]] = set()
used_nets: set[Net] = set()
used_nets: dict[Net, Net] = {}
node_list: list[Node] = [n for n in nodes]
while(node_list):
node = node_list.pop()
for net in node.args:
if net not in used_nets:
used_nets.add(net)
edge = (net.source, node)
if edge not in emitted_edges:
yield edge
node_list.append(net.source)
emitted_edges.add(edge)
# In case there is already net with equivalent value use this
if net in used_nets:
net = used_nets[net]
else:
used_nets[net] = net
edge = (net.source, node)
if edge not in emitted_edges:
yield edge
node_list.append(net.source)
emitted_edges.add(edge)
def get_const_nets(nodes: list[Node]) -> list[Net]: