Exemple #1
0
    def run(self, circuit: Circuit, **kwargs):
        num_shots = kwargs.get('num_shots', 1024)

        initial_state = circuit.initial_state()
        gates = circuit.to_gates()
        measure_bits = circuit.measure_bits()

        counts = self.backend.run(initial_state, gates, measure_bits,
                                  num_shots)

        return QResult(counts, sig_bits=len(circuit.initial_state()))
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
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
Exemple #4
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
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
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
Exemple #7
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)
Exemple #8
0
def test_entanglement():
    circuit = Circuit()
    circuit.add(Qubits(2))
    circuit.add(Hadamard(0))
    circuit.add(CNOT(0, 1))
    circuit.add(Measure(0, 1))

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)

    assert result['01'] == 0
    assert result['10'] == 0
    assert result['00'] > 450
    assert result['11'] > 450
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
Exemple #10
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
Exemple #11
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))

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1000)

    assert result['00'] > 210
    assert result['01'] > 210
    assert result['10'] > 210
    assert result['11'] > 210
Exemple #12
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))

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)

    # All 16 states should be relatively equal probability
    assert len(result.counts) == 16
    assert max(result.counts.values()) - min(result.counts.values()) < 50
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
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
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
Exemple #16
0
def test_circuit_add_wrong_type():
    class SomeClass(object):
        def __init__(self):
            pass

    with pytest.raises(TypeError) as type_error:
        circuit = Circuit().add(SomeClass())
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
Exemple #18
0
def test_circuit_add_circuit():
    circuit = Circuit().add(_BaseLayer()).add(_BaseLayer())

    circuit_to_add = Circuit()
    circuit_to_add.add(_BaseLayer()).add(_BaseLayer()).add(_BaseLayer())

    assert len(circuit.layers) == 2
    circuit.add(circuit_to_add)

    assert len(circuit.layers) == 5
Exemple #19
0
def test_s_integration():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(S(0))  # Can also use H()
    circuit.add(Measure())

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)

    assert result['0'] == 1024
    assert result['1'] == 0
Exemple #20
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))

    sess = QSession(backend=QuantumSimulator())
    result_1 = sess.run(circuit_1, num_shots=1024)

    assert result_1['0'] > 450
    assert result_1['1'] > 450
Exemple #21
0
def test_rz_int():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(Rz(0, angle=np.pi / 2))
    circuit.add(Measure(0))

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1000)

    assert result['0'] == 1000
    assert result['1'] == 0
Exemple #22
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(quantum_amod_15(a))
    circuit.add(QFT(3, 2, 1, 0))  # Inverse Quantum Fourier transform

    from shor.backends import QuantumSimulator, QSession

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)
    return result
Exemple #23
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))

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)

    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
Exemple #24
0
def test_u1_integration():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(PauliX(0))
    circuit.add(U1(0))
    circuit.add(Measure())

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)

    assert result['0'] == 0
    assert result['1'] == 1024
Exemple #25
0
def test_ID_qubit():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(ID(0))
    circuit.add(Measure())

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)

    # Accounting for random noise, results won't be exact
    assert result['1'] == 0
    assert result['0'] == 1024
Exemple #26
0
def test_pauliz_integration():
    circuit = Circuit()
    circuit.add(Qubits(1))
    circuit.add(Hadamard(0))
    circuit.add(PauliZ(0))  # Can also use H()
    circuit.add(Measure())

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)

    # Accounting for random noise, results won't be exact
    assert result['0'] > 450
    assert result['1'] > 450
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
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
Exemple #29
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))

    sess = QSession(backend=QuantumSimulator())
    result = sess.run(circuit, num_shots=1024)

    assert result['11'] == 0
    assert result['00'] == 0
    assert result['10'] == 0
    assert result['01'] == 1024
Exemple #30
0
def qft(qubits: List[int]) -> Circuit:
    qc = Circuit()
    for i in range(len(qubits)):
        for k in range(i):
            qc.add(Rx(qubits[i], qubits[k], angle=math.pi/float(2**(i-k))))
        qc.add(H(qubits[i]))
    return qc