Esempio n. 1
0
def test_teleportation():
    circuit = Circuit()
    circuit.add(Qubits(3))
    circuit.add(CNOT(1, 2))
    circuit.add(CNOT(0, 1))
    circuit.add(Hadamard(0))
    circuit.add(Measure([0, 1]))

    result = circuit.run(1024).result

    # All 16 states should be relatively equal probability
    if result["11"] == 1024:
        circuit.add(PauliX(2))
        circuit.add(PauliZ(2))
    elif result["10"] == 1024:
        circuit.add(PauliZ(2))
    elif result["01"] == 1024:
        circuit.add(PauliX(2))
    circuit.add(Measure([2]))

    result2 = circuit.run(1024).result

    # TODO: Fix this test.

    assert result2
Esempio n. 2
0
def find_period(a, N):
    """WIP: Quantum subroutine for shor's algorithm.
    Finds the period of a function of the form:
    f(x) = a^x % N

    This uses the quantum fourier transform.
    """

    circuit = Circuit()

    # circuit.add(Qubits(5))
    # circuit.add(QFT(0, 1, 2, 3))
    # circuit.add(X(4))
    # circuit.add(quantum_amod_15(a))
    # circuit.add(QFT(0, 1, 2, 3))

    circuit.add(Qubits(5))
    circuit.add(H(0)).add(H(1)).add(H(2)).add(H(3))
    circuit.add(X(4))
    circuit.add(quantum_amod_15(a))
    circuit.add(QFT(3, 2, 1, 0))  # Inverse Quantum Fourier transform

    job = circuit.run(1024)
    result = job.result

    # TODO: This is still broken, likely due to differences between Qiskit and our library
    # See: https://github.com/shor-team/shor/issues/39
    # from shor.utils.visual import plot_results
    # plot_results(result)

    most_common = result.counts.most_common()
    if len(most_common) > 1:
        return gcd(most_common[0][0], most_common[1][0])
    return 1
Esempio n. 3
0
def test_u3_int():
    circuit_1 = Circuit()
    circuit_1.add(Qubits(1))
    circuit_1.add(U3(0, theta=np.pi / 2, phi=-np.pi / 2, lam=np.pi / 2))
    circuit_1.add(Measure([0]))

    circuit_2 = Circuit()
    circuit_2.add(Qubits(1))
    circuit_2.add(Rx(theta=np.pi))
    circuit_2.add(Measure([0]))
    result_1 = circuit_1.run(1024).result
    result_2 = circuit_2.run(1024).result

    assert result_1["0"] > 450
    assert result_1["1"] > 450
    assert result_2["0"] > 450
    assert result_2["1"] > 450
Esempio n. 4
0
def test_u2_int():
    circuit_1 = Circuit()
    circuit_1.add(Qubits(1))
    circuit_1.add(U2(0, phi=-np.pi / 2, alpha=np.pi / 2))
    circuit_1.add(Measure([0]))
    result_1 = circuit_1.run(1024).result

    assert result_1["0"] > 450
    assert result_1["1"] > 450
Esempio n. 5
0
def test_ry_int():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(Ry(0, angle=np.pi / 2))
    circuit.add(Measure([0]))
    job = circuit.run(1000)
    result = job.result
    assert result["0"] > 450
    assert result["1"] > 450
Esempio n. 6
0
def test_t_integration():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(T(0))  # Can also use H()
    circuit.add(Measure([0]))
    job = circuit.run(1024)
    result = job.result
    assert result["0"] == 1024
    assert result["1"] == 0
Esempio n. 7
0
def test_u1_integration():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(PauliX(0))
    circuit.add(U1(0))
    circuit.add(Measure([0]))
    job = circuit.run(1024)
    result = job.result
    assert result["0"] == 0
    assert result["1"] == 1024
Esempio n. 8
0
def test_id_qubit():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(ID(0))
    circuit.add(Measure([0]))
    job = circuit.run(1024)
    result = job.result
    # Accounting for random noise, results won't be exact
    assert result["1"] == 0
    assert result["0"] == 1024
Esempio n. 9
0
def test_pauliy_integration():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(PauliY(0))  # Can also use H()
    circuit.add(Measure([0]))
    job = circuit.run(1024)
    result = job.result
    # Accounting for random noise, results won't be exact
    assert result["0"] == 0
    assert result["1"] == 1024
Esempio n. 10
0
def test_modulus_circuit():
    circuit = Circuit()
    circuit.add(Qbits(5))
    circuit.add(quantum_amod_15(4))
    circuit.add(Measure([0, 1]))

    job = circuit.run(1024)
    result = job.result

    print(result)
Esempio n. 11
0
def test_inity_int():
    circuit_1 = Circuit()
    circuit_1.add(Qubits(1))
    circuit_1.add(Init_y(0))
    circuit_1.add(Measure([0]))

    result_1 = circuit_1.run(1024).result

    assert result_1["0"] > 450
    assert result_1["1"] > 450
Esempio n. 12
0
def test_single_qubit():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(Hadamard(0))
    circuit.add(Measure([0]))

    job = circuit.run(1024, provider=QiskitProvider())
    result = job.result
    # Accounting for random noise, results won't be exact
    assert result[bin(0)] > 450
    assert result[bin(1)] > 450
Esempio n. 13
0
def test_crz_integration():
    circuit = Circuit()
    circuit.add(Qubits(2))
    circuit.add(CRZ(0, 1, angle=math.pi / 3))
    circuit.add(Measure(0, 1))
    job = circuit.run(1024)
    result = job.result
    assert result["11"] == 0
    assert result["00"] == 1024
    assert result["10"] == 0
    assert result["01"] == 0
Esempio n. 14
0
def test_crk_int():
    circuit = Circuit()
    circuit.add(Qubits(2))
    circuit.add(CRk(0, 1, k=2))
    circuit.add(Measure(0, 1))

    result = circuit.run(1000).result

    assert result["00"] == 1000
    assert result["01"] == 0
    assert result["10"] == 0
    assert result["11"] == 0
Esempio n. 15
0
def test_cr_int():
    circuit = Circuit()
    circuit.add(Qubits(2))
    circuit.add(Cr(0, 1, angle=np.pi / 2))
    circuit.add(Measure(0, 1))

    result = circuit.run(1000).result

    assert result["00"] == 1000
    assert result["01"] == 0
    assert result["10"] == 0
    assert result["11"] == 0
Esempio n. 16
0
def test_entanglement():
    circuit = Circuit()
    circuit.add(Qubits(2))
    circuit.add(Hadamard(0))
    circuit.add(CNOT(0, 1))
    circuit.add(Measure([0, 1]))
    job = circuit.run(1024)
    result = job.result
    assert result["01"] == 0
    assert result["10"] == 0
    assert result["00"] > 450
    assert result["11"] > 450
Esempio n. 17
0
def test_swap_integration():
    circuit = Circuit()
    circuit.add(Qubits(2))
    circuit.add(PauliX(0))
    circuit.add(SWAP(0, 1))
    circuit.add(Measure([0, 1]))
    job = circuit.run(1024)
    result = job.result
    assert result["11"] == 0
    assert result["00"] == 0
    assert result["01"] == 0
    assert result["10"] == 1024
Esempio n. 18
0
def test_mult_gate_inputs1():
    circuit_1 = Circuit()
    circuit_1.add(Qubits(2))
    circuit_1.add(H([0, 1]))
    circuit_1.add(Measure(0, 1))

    result_1 = circuit_1.run(1024).result

    assert result_1["00"] > 215
    assert result_1["11"] > 215
    assert result_1["10"] > 215
    assert result_1["01"] > 215
Esempio n. 19
0
def test_multi_hadamard():
    circuit = Circuit()
    circuit.add(Qubits(4))
    circuit.add(Hadamard(0))
    circuit.add(Hadamard(1))
    circuit.add(Hadamard(2))
    circuit.add(Hadamard(3))
    circuit.add(Measure([0, 1, 2, 3]))
    job = circuit.run(1024)
    result = job.result
    # All 16 states should be relatively equal probability
    assert len(result.counts) == 16
    assert max(result.counts.values()) - min(result.counts.values()) < 50
Esempio n. 20
0
def test_unitary_symmetry_does_nothing():
    symmetric_circuit_1 = Circuit()
    symmetric_circuit_1.add(Qubits(2))
    symmetric_circuit_1.add(Hadamard(0))
    symmetric_circuit_1.add(Hadamard(0))
    symmetric_circuit_1.add(CNOT(0, 1))
    symmetric_circuit_1.add(CNOT(0, 1))
    symmetric_circuit_1.add(Measure([0, 1]))

    symmetric_circuit_2 = Circuit()
    symmetric_circuit_2.add(Qubits(2, state=1))
    symmetric_circuit_2.add(Hadamard(0))
    symmetric_circuit_2.add(CNOT(0, 1))
    symmetric_circuit_2.add(CNOT(0, 1))
    symmetric_circuit_2.add(Hadamard(0))
    symmetric_circuit_2.add(Measure([0, 1]))

    result_1 = symmetric_circuit_1.run(1024).result
    result_2 = symmetric_circuit_2.run(1024).result

    assert result_1.counts.get(0) == 1024
    assert result_2.counts.get(0) == 1024
Esempio n. 21
0
def test_cz2_int():
    circuit_1 = Circuit()
    circuit_1.add(Qubits(2))
    circuit_1.add(PauliX(0))
    circuit_1.add(Cz(0, 1))
    circuit_1.add(Measure(0, 1))

    result_1 = circuit_1.run(1024).result

    assert result_1["00"] == 0
    assert result_1["11"] == 0
    assert result_1["01"] == 1024
    assert result_1["10"] == 0
Esempio n. 22
0
def test_cz_int():
    circuit = Circuit()
    circuit.add(Qubits(2))
    circuit.add(Hadamard(0))
    circuit.add(Hadamard(1))
    circuit.add(Cz(0, 1))
    circuit.add(Measure([0, 1]))
    job = circuit.run(1000)
    result = job.result
    assert result["00"] > 210
    assert result["01"] > 210
    assert result["10"] > 210
    assert result["11"] > 210
Esempio n. 23
0
def test_ch_integration():
    circuit = Circuit()
    circuit.add(Qubits(2))
    circuit.add(PauliX(0))
    circuit.add(PauliX(1))
    circuit.add(CH(0, 1))
    circuit.add(Measure(0, 1))

    job = circuit.run(1024)
    result = job.result
    assert result["11"] > 450
    assert result["00"] == 0
    assert result["10"] == 0
    assert result["01"] > 450
Esempio n. 24
0
def test_multi_gate_int():
    circuit_1 = Circuit()
    circuit_1.add(Qubits(2))
    circuit_1.add(PauliX(0))
    circuit_1.add(CNOT(0, 1))
    circuit_1.add(CH(0, 1))
    circuit_1.add(Measure(0, 1))

    result_1 = circuit_1.run(1024).result

    assert result_1["00"] == 0
    assert result_1["11"] > 450
    assert result_1["01"] > 450
    assert result_1["10"] == 0
Esempio n. 25
0
def test_multi_entangle():
    circuit = Circuit()
    circuit.add(Qubits(4))
    circuit.add(Hadamard(0))
    circuit.add(CNOT(0, 1))
    circuit.add(CNOT(0, 2))
    circuit.add(CNOT(0, 3))
    circuit.add(Measure([0, 1, 2, 3]))
    job = circuit.run(1024)
    result = job.result
    assert result["0001"] == 0
    assert result["1000"] == 0
    assert result["0000"] > 450
    assert result["1111"] > 450
Esempio n. 26
0
def test_cx_int():
    circuit_1 = Circuit()
    circuit_1.add(Qubits(2))
    circuit_1.add(Hadamard(0))
    circuit_1.add(Cx(0, 1))
    circuit_1.add(Measure([0, 1]))

    circuit_2 = Circuit()
    circuit_2.add(Qubits(2))
    circuit_2.add(Hadamard(1))
    circuit_2.add(Cx(0, 1))
    circuit_2.add(Measure([0, 1]))
    result_1 = circuit_1.run(1024).result
    result_2 = circuit_2.run(1024).result

    assert result_1["01"] == 0
    assert result_1["10"] == 0
    assert result_1["00"] > 450
    assert result_1["11"] > 450

    assert result_2["01"] == 0
    assert result_2["10"] > 450
    assert result_2["00"] > 450
    assert result_2["11"] == 0
Esempio n. 27
0
def test_QFT():
    qbits = Qbits(4)
    X = Circuit()
    X.add(qbits)
    X.add(H(0)).add(H(1)).add(H(2)).add(H(3))
    X.add(QFT(0, 1, 2, 3))
    X.add(Measure([0, 1, 2, 3]))
    #
    # qc2 = QuantumCircuit() + H(qbits[0]) + X(qbits[1])
    #
    # qbits = Qbits(4)
    # qc = H(qbits) * QFT(qbits)
    #
    # qc += QFT(qbits[0:3])
    # qc += qc2
    #
    # qc.add(H())
    #
    # qc = H(qc[0:3])
    # qc = Z(qc[1])
    #
    # qbits = Qbits(4)
    # cbits = Cbits(4)
    #
    # qc = QuantumCircuit(qbits=qbits, cbits=cbits)
    # -> err
    # qc += Hadamard(qbits[0]) + Z(qbits[1])
    #
    # qc.add(Measure([qbits[0]]))
    # qc += Measure(qbits[0])
    #
    # qc.add(Measure(qbits), name='Output')

    # X = Circuit(qbits)
    # X = H(X)
    # Y = Z(X)
    # A = H(X)
    #
    # qbits = Qbits(4)
    # X = Circuit() + qbits + H(qbits) + QFT(qbits) + Measure(qbits)
    #
    # Y = X.run(QuantumSimulator, times=100)
    job = X.run(1024)
    result = job.result
    assert result
Esempio n. 28
0
def test_ccnot_integration():
    circuit = Circuit()
    circuit.add(Qubits(3))
    circuit.add(PauliX(0))
    circuit.add(PauliX(1))
    circuit.add(CCNOT(0, 1, 2))
    circuit.add(Measure([0, 1, 2]))
    job = circuit.run(1024)
    result = job.result

    assert result["000"] == 0
    assert result["001"] == 0
    assert result["010"] == 0
    assert result["100"] == 0
    assert result["110"] == 0
    assert result["101"] == 0
    assert result["011"] == 0
    assert result["111"] == 1024
Esempio n. 29
0
def test_quantum_multi_hadamard_partial_measure():
    circuit_1 = Circuit()
    circuit_1.add(Qubits(4))
    circuit_1.add(H(range(4)))
    circuit_1.add(Measure(0, 1))

    result_1 = circuit_1.run(1024).result

    print(result_1.counts)

    assert all(r > 215 for r in [
        result_1["0000"], result_1["0001"], result_1["0010"], result_1["0011"]
    ])

    # Ony measuring the 2 right-most qbits. Shouldn't see measurements for other qbits.
    assert result_1["1000"] == result_1["1001"] == result_1[
        "1010"] == result_1["1011"] == 0
    assert result_1["1100"] == result_1["1101"] == result_1[
        "1110"] == result_1["1111"] == 0
    assert result_1["0100"] == result_1["0101"] == result_1[
        "0110"] == result_1["0111"] == 0