def ids_sharing_same_pgn(id_x, pgn_x, id_y, pgn_y):
    # type: (typing.Sequence[canmatrix.ArbitrationId], typing.Sequence[int], typing.Sequence[canmatrix.ArbitrationId], typing.Sequence[int]) -> typing.Iterable[typing.Tuple[canmatrix.ArbitrationId, canmatrix.ArbitrationId]]
    """Yield arbitration ids which has the same pgn."""
    for id_a, pgn_a in zip(id_x, pgn_x):
        for id_b, pgn_b in zip(id_y, pgn_y):
            if pgn_a == pgn_b:
                yield (id_a, id_b)