in transducer.py [0:0]
def make_kernel_graph(x, blank_idx, blank_optional, spike=False, calc_grad=False):
g = gtn.Graph(calc_grad)
g.add_node(True, len(x) == 0) # start in blank
g.add_arc(0, 0, blank_idx)
for i, c in enumerate(x):
g.add_node(False, blank_optional and (i + 1) == len(x))
g.add_node(False, (i + 1) == len(x))
g.add_arc(2 * i, 2 * i + 1, c)
if not spike:
g.add_arc(2 * i + 1, 2 * i + 1, c)
g.add_arc(2 * i + 1, 2 * i + 2, blank_idx)
g.add_arc(2 * i + 2, 2 * i + 2, blank_idx)
if i > 0 and blank_optional and x[i - 1] != c:
g.add_arc(2 * i - 1, 2 * i + 1, c)
g.arc_sort(True)
g.arc_sort()
return g