def make_kernel_graph()

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