Browse Source

avoid holes in forks, update intro

devel
Stefan Holst 1 year ago
parent
commit
5be82da49a
  1. 1775
      examples/Introduction.ipynb
  2. 10
      src/kyupy/circuit.py

1775
examples/Introduction.ipynb

File diff suppressed because it is too large Load Diff

10
src/kyupy/circuit.py

@ -176,7 +176,11 @@ class Line:
To keep the indices consecutive, the line with the highest index within the circuit To keep the indices consecutive, the line with the highest index within the circuit
will be assigned the index of the removed line. will be assigned the index of the removed line.
""" """
if self.driver is not None: self.driver.outs[self.driver_pin] = None if self.driver is not None:
self.driver.outs[self.driver_pin] = None
if self.driver.kind == '__fork__': # squeeze outputs
del self.driver.outs[self.driver_pin]
for i, l in enumerate(self.driver.outs): l.driver_pin = i
if self.reader is not None: self.reader.ins[self.reader_pin] = None if self.reader is not None: self.reader.ins[self.reader_pin] = None
if self.circuit is not None: del self.circuit.lines[self.index] if self.circuit is not None: del self.circuit.lines[self.index]
self.driver = None self.driver = None
@ -564,6 +568,7 @@ class Circuit:
from graphviz import Digraph from graphviz import Digraph
dot = Digraph(format=format, graph_attr={'rankdir': 'LR', 'splines': 'true'}) dot = Digraph(format=format, graph_attr={'rankdir': 'LR', 'splines': 'true'})
s_dict = dict((n, i) for i, n in enumerate(self.s_nodes))
node_level = np.zeros(len(self.nodes), dtype=np.uint32) node_level = np.zeros(len(self.nodes), dtype=np.uint32)
level_nodes = defaultdict(list) level_nodes = defaultdict(list)
for n, lv in self.topological_order_with_level(): for n, lv in self.topological_order_with_level():
@ -576,7 +581,8 @@ class Circuit:
for n in level_nodes[lv]: for n in level_nodes[lv]:
ins = '|'.join([f'<i{i}>{i}' for i in range(len(n.ins))]) ins = '|'.join([f'<i{i}>{i}' for i in range(len(n.ins))])
outs = '|'.join([f'<o{i}>{i}' for i in range(len(n.outs))]) outs = '|'.join([f'<o{i}>{i}' for i in range(len(n.outs))])
s.node(name=str(n.index), label = f'{{{{{ins}}}|{n.index}\n{n.kind}\n{n.name}|{{{outs}}}}}', shape='record') io = f' [{s_dict[n]}]' if n in s_dict else ''
s.node(name=str(n.index), label = f'{{{{{ins}}}|{n.index}{io}\n{n.kind}\n{n.name}|{{{outs}}}}}', shape='record')
for l in self.lines: for l in self.lines:
driver, reader = f'{l.driver.index}:o{l.driver_pin}', f'{l.reader.index}:i{l.reader_pin}' driver, reader = f'{l.driver.index}:o{l.driver_pin}', f'{l.reader.index}:i{l.reader_pin}'

Loading…
Cancel
Save