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: @@ -176,7 +176,11 @@ class Line:
To keep the indices consecutive, the line with the highest index within the circuit
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.circuit is not None: del self.circuit.lines[self.index]
self.driver = None
@ -564,6 +568,7 @@ class Circuit: @@ -564,6 +568,7 @@ class Circuit:
from graphviz import Digraph
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)
level_nodes = defaultdict(list)
for n, lv in self.topological_order_with_level():
@ -576,7 +581,8 @@ class Circuit: @@ -576,7 +581,8 @@ class Circuit:
for n in level_nodes[lv]:
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))])
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:
driver, reader = f'{l.driver.index}:o{l.driver_pin}', f'{l.reader.index}:i{l.reader_pin}'

Loading…
Cancel
Save