def test_full_small():
    m = 4
    n = 3
    t = 2
    expected = [[r, c, u, k]
                for r in xrange(m)
                for c in xrange(n)
                for u in xrange(2)
                for k in xrange(t)]
    assert linear_index_to_chimera(range(2 * m * n * t), m, n, t) == expected
Beispiel #2
0
def coupler_number(M, N, L, q1, q2):
    "Map a pair of qubits to a coupler number a la the dw command."
    qmin = min(q1, q2)
    qmax = max(q1, q2)
    [[imin, jmin, umin, kmin], [imax, jmax, umax, kmax]] = linear_index_to_chimera([qmin, qmax], M, N, L)
    cell_links = L*L
    if imin == imax and jmin == jmax and umin != umax:
        # Same unit cell
        return cell_links*(imin*M + jmin) + kmin*L + kmax
    total_intra = cell_links*M*N
    if imin == imax and jmin + 1 == jmax and umin == umax and kmin == kmax:
        # Horizontal (same cell row)
        return total_intra + L*(imin*(M - 1) + jmin) + kmin
    total_horiz = (M - 1)*N*L
    if imin + 1 == imax and jmin == jmax and umin == umax and kmin == kmax:
        # Vertical (same cell column)
        return total_intra + total_horiz + L*(imin*M + jmin) + kmin
    raise IndexError("No coupler exists between Q%04d and Q%04d" % (q1, q2))
Beispiel #3
0
def coupler_number(M, N, L, q1, q2):
    "Map a pair of qubits to a coupler number a la the dw command."
    qmin = min(q1, q2)
    qmax = max(q1, q2)
    [[imin, jmin, umin, kmin], [imax, jmax, umax, kmax]] = linear_index_to_chimera([qmin, qmax], M, N, L)
    cell_links = L*L
    if imin == imax and jmin == jmax and umin != umax:
        # Same unit cell
        return cell_links*(imin*M + jmin) + kmin*L + kmax
    total_intra = cell_links*M*N
    if imin == imax and jmin + 1 == jmax and umin == umax and kmin == kmax:
        # Horizontal (same cell row)
        return total_intra + L*(imin*(M - 1) + jmin) + kmin
    total_horiz = (M - 1)*N*L
    if imin + 1 == imax and jmin == jmax and umin == umax and kmin == kmax:
        # Vertical (same cell column)
        return total_intra + total_horiz + L*(imin*M + jmin) + kmin
    raise IndexError("No coupler exists between Q%04d and Q%04d" % (q1, q2))
def test_trivial():
    assert linear_index_to_chimera([], 1) == []
def test_larger():
    li = [214, 370, 1210, 366, 1172, 350, 1338, 503, 283, 361, 887, 681]
    expected = [[2, 1, 1, 4], [3, 6, 1, 4], [12, 4, 1, 4], [3, 6, 1, 0],
                [12, 1, 1, 2], [3, 5, 0, 2], [13, 7, 1, 0], [5, 1, 1, 5],
                [2, 7, 1, 1], [3, 6, 0, 1], [9, 1, 1, 5], [7, 0, 1, 3]]
    assert linear_index_to_chimera(li, 15, 8, 6) == expected