コード例 #1
0
def test_multiqubit_permutation_rules(linkedlist, eng):
    rules = BasePermutationRules(linkedlist)
    qureg = eng.allocate_qureg(4)
    reg1 = qureg[:-1]
    reg2 = qureg[1:]

    H = projectq.ops.QubitOperator
    T = projectq.ops.send_time_evolution

    left = T(-cmath.pi / 4, H("X0 Z1 Z2"))
    right = T(-cmath.pi / 4, H("Z0 Z1 Y2"))

    linkedlist.push_back(left.generate_command(reg1))
    linkedlist.push_back(right.generate_command(reg2))

    print(linkedlist.head.data)
    print(linkedlist.back.data)

    rules.permute(linkedlist.head, linkedlist.back)

    print(linkedlist.head.data)
    print(linkedlist.back.data)

    assert (linkedlist.head.data.gate.time == -cmath.pi / 4)
    assert (linkedlist.back.data.gate.time == -cmath.pi / 4)

    # TODO: write more checks for multi qubit operators
    return
コード例 #2
0
def test_H_X_different_targets(linkedlist, eng):
    rules = BasePermutationRules(linkedlist)
    qureg = eng.allocate_qureg(3)

    H = projectq.ops.H
    Rx = projectq.ops.X

    linkedlist.push_back(H.generate_command(qureg[0]))
    linkedlist.push_back(Rx.generate_command(qureg[1]))

    rules.permute(linkedlist.head, linkedlist.back)

    assert (isinstance(linkedlist.head.data.gate, projectq.ops.Rx))
    assert (linkedlist.back.data.gate == H)
    return
コード例 #3
0
def test_Rzpi2_Rxpi(linkedlist, eng):
    rules = BasePermutationRules(linkedlist)
    qureg = eng.allocate_qureg(3)

    Rz = projectq.ops.Rz(cmath.pi / 2)
    Rx = projectq.ops.Rx(cmath.pi)

    linkedlist.push_back(Rz.generate_command(qureg[0]))
    linkedlist.push_back(Rx.generate_command(qureg[0]))

    rules.permute(linkedlist.head, linkedlist.back)

    assert (isinstance(linkedlist.head.data.gate, projectq.ops.Rx))
    assert (isinstance(linkedlist.back.data.gate, projectq.ops.Rz))

    assert (abs(linkedlist.back.data.gate.angle -
                (4 * cmath.pi - cmath.pi / 2)) < _PRECISION)
    return