def merge_dims(tensor, d1, d2):
    """
    merges dimensions d1 and d1 + 1 of tensor
    """
    D = len(tensor.size())
    if d1 < 0:
        d1 = D + d1
    if d2 < 0:
        d2 = D + d2
    assert d2 == d1 + 1
    d = list(tensor.size())
    d_new = d[:d1] + [d[d1] * d[d1 + 1]] + d[d1 + 2:]
    return tensor.view(*d_new)