........................................................................ [  6%]
.............................sssssss.................................... [ 12%]
........................................................................ [ 19%]
........................................................................ [ 25%]
.................................s...................................... [ 32%]
....................................................ss.................. [ 38%]
........................................................................ [ 45%]
................................................F....................... [ 51%]
......sssssss..................................................sssssss.s [ 58%]
s..........................................ss.......................ssss [ 64%]
........................................................................ [ 71%]
........................................................................ [ 77%]
........................................................................ [ 84%]
..............................sssss..................................... [ 90%]
........................................................................ [ 96%]
..............ssss................                                       [100%]
=================================== FAILURES ===================================
___ test_score_paths_decodes_the_shared_prefix_once_at_the_engines_positions ___

    def test_score_paths_decodes_the_shared_prefix_once_at_the_engines_positions():
        """The bug this gate is for: the parent of a level-`k` prefix is the prefix of length `k-1`."""
        row_a = exact_row({1: 3.0})                     # p(1) = 3/7
        row_b = exact_row({3: 1.0})                     # p(3) = 1/7
        session = FakeRowSession({10: row_a, 11: row_b})
        got = labels.score_paths(session, head_seq=1, base=10, pool=[7, 8],
                                 paths=[(2, 1, 3), (2, 1, 0), (2, 3)])
        # level 1: one child prefix (2,) — decoded once, forked from the head sequence
        # level 2: two child prefixes (2, 1) and (2, 3) — forked from the (2,) sequence
        assert session.forks == [(1, 7, 10), (7, 8, 11)]
>       assert [(batch.tokens, batch.positions) for batch in session.batches] == [
            ((2,), (10,)), ((1, 3), (11, 11))]
E       assert [((2,), (10,)), ((1,), (11,))] == [((2,), (10,)...3), (11, 11))]
E         
E         At index 1 diff: ((1,), (11,)) != ((1, 3), (11, 11))
E         Use -v to get more diff

tests/test_e3b_labels.py:265: AssertionError
=========================== short test summary info ============================
FAILED tests/test_e3b_labels.py::test_score_paths_decodes_the_shared_prefix_once_at_the_engines_positions
1 failed, 1072 passed, 41 skipped in 117.13s (0:01:57)
