Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update for Qiskit 1.0 #50

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions docs/examples/GettingStarted.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
" QuantumCircuit,\n",
" QuantumRegister,\n",
" ClassicalRegister,\n",
" execute\n",
" transpile\n",
")\n",
"from qiskit_rigetti import RigettiQCSProvider"
]
Expand Down Expand Up @@ -103,7 +103,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The circuit can now be run against the backend with Qiskit's `execute()` function:"
"The circuit can now be run against the backend:"
]
},
{
Expand All @@ -120,7 +120,7 @@
}
],
"source": [
"job = execute(circuit, backend, shots=1000)\n",
"job = backend.run(transpile(circuit, backend), shots=1000)\n",
"result = job.result()\n",
"counts = result.get_counts()\n",
"print(\"Counts for experiment:\", counts)"
Expand All @@ -144,7 +144,7 @@
}
],
"source": [
"from qiskit.tools.visualization import plot_histogram\n",
"from qiskit.visualization import plot_histogram\n",
"\n",
"plot_histogram(counts)"
]
Expand Down
1 change: 0 additions & 1 deletion docs/examples/QAOA.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@
],
"source": [
"from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister\n",
"from qiskit import Aer, execute\n",
"from qiskit.circuit import Parameter\n",
"\n",
"# Adjacency is essentially a matrix which tells you which nodes are\n",
Expand Down
7 changes: 6 additions & 1 deletion qiskit_rigetti/gates/_can.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@
__all__ = ["CanonicalGate"]

import numpy as np
from qiskit.extensions import UnitaryGate

try:
# qiskit>=1.0
from qiskit.circuit.library import UnitaryGate
except ImportError:
from qiskit.extensions import UnitaryGate


class CanonicalGate(UnitaryGate):
Expand Down
7 changes: 6 additions & 1 deletion qiskit_rigetti/gates/_cphase.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@
]

from pyquil.simulation.matrices import CPHASE00, CPHASE01, CPHASE10
from qiskit.extensions import UnitaryGate

try:
# qiskit>=1.0
from qiskit.circuit.library import UnitaryGate
except ImportError:
from qiskit.extensions import UnitaryGate


class CPhase00Gate(UnitaryGate):
Expand Down
7 changes: 6 additions & 1 deletion qiskit_rigetti/gates/_pswap.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@
__all__ = ["PSwapGate"]

from pyquil.simulation.matrices import PSWAP
from qiskit.extensions import UnitaryGate

try:
# qiskit>=1.0
from qiskit.circuit.library import UnitaryGate
except ImportError:
from qiskit.extensions import UnitaryGate


class PSwapGate(UnitaryGate):
Expand Down
7 changes: 6 additions & 1 deletion qiskit_rigetti/gates/_xy.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@
__all__ = ["XYGate"]

from pyquil.simulation.matrices import XY
from qiskit.extensions import UnitaryGate

try:
# qiskit>=1.0
from qiskit.circuit.library import UnitaryGate
except ImportError:
from qiskit.extensions import UnitaryGate


class XYGate(UnitaryGate):
Expand Down
5 changes: 3 additions & 2 deletions qiskit_rigetti/hooks/pre_compilation.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,16 @@ def set_rewiring(rewiring: str) -> PreCompilationHook:
Examples:
Applying rewiring to a program::

>>> from qiskit import execute
>>> from qiskit import transpile
>>> from qiskit_rigetti import RigettiQCSProvider, QuilCircuit
>>> from qiskit_rigetti.hooks.pre_compilation import set_rewiring

>>> p = RigettiQCSProvider()
>>> backend = p.get_simulator(num_qubits=2, noisy=True)
>>> circuit = QuilCircuit(2, 2)
>>> _ = circuit.measure([0, 1], [0, 1])
>>> job = execute(circuit, backend, shots=10, before_compile=[set_rewiring("NAIVE")])
>>> circuit = transpile(circuit, backend)
>>> job = backend.run(circuit, shots=10, before_compile=[set_rewiring("NAIVE")])
"""

def fn(qasm: str) -> str:
Expand Down
27 changes: 16 additions & 11 deletions tests/test_qcs_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# limitations under the License.
##############################################################################
import pytest
from qiskit import execute, QuantumCircuit, QuantumRegister, ClassicalRegister, transpile
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, transpile
from qiskit.providers import JobStatus
from qiskit.circuit import Parameter, Qubit
from qiskit.circuit.library import CZGate
Expand All @@ -26,7 +26,8 @@
def test_run(backend: RigettiQCSBackend):
circuit = make_circuit()

job = execute(circuit, backend, shots=10)
circuit = transpile(circuit, backend)
job = backend.run(circuit, shots=10)

assert job.backend() is backend
result = job.result()
Expand All @@ -41,7 +42,8 @@ def test_run__multiple_circuits(backend: RigettiQCSBackend):
circuit1 = make_circuit(num_qubits=2)
circuit2 = make_circuit(num_qubits=3)

job = execute([circuit1, circuit2], backend, shots=10)
circuits_list = transpile([circuit1, circuit2], backend)
job = backend.run(circuits_list, shots=10)

assert job.backend() is backend
result = job.result()
Expand Down Expand Up @@ -70,9 +72,8 @@ def test_run__parametric_circuits(backend: RigettiQCSBackend):
circuit2.ry(t, 0)
circuit2.measure([0], [0])

job = execute(
[circuit1, circuit2],
backend,
job = backend.run(
transpile([circuit1, circuit2], backend),
shots=1000,
parameter_binds=[
{t: 1.0},
Expand Down Expand Up @@ -105,7 +106,8 @@ def test_run__readout_register_not_named_ro(backend: RigettiQCSBackend):
circuit.measure([0, 1], [0, 1])
qasm_before = circuit.qasm()

job = execute(circuit, backend, shots=10)
circuit = transpile(circuit, backend)
job = backend.run(circuit, shots=10)

assert circuit.qasm() == qasm_before, "should not modify original circuit"

Expand All @@ -124,7 +126,8 @@ def test_run__multiple_registers__single_readout(backend: RigettiQCSBackend):
circuit.measure([0, 1], [readout_reg[0], readout_reg[1]])
qasm_before = circuit.qasm()

job = execute(circuit, backend, shots=10)
circuit = transpile(circuit, backend)
job = backend.run(circuit, shots=10)

assert circuit.qasm() == qasm_before, "should not modify original circuit"

Expand All @@ -144,17 +147,19 @@ def test_run__multiple_readout_registers(backend: RigettiQCSBackend):
circuit = QuantumCircuit(qr, cr, cr2)
circuit.measure([qr[0], qr[1]], [cr[0], cr2[0]])

circuit = transpile(circuit, backend)
with pytest.raises(RuntimeError, match="Multiple readout registers are unsupported on QCSBackend; found c, c2"):
execute(circuit, backend, shots=10)
backend.run(circuit, shots=10)


def test_run__no_measurments(backend: RigettiQCSBackend):
qr = QuantumRegister(2, "q")
cr = ClassicalRegister(1, "c")
circuit = QuantumCircuit(qr, cr)

circuit = transpile(circuit, backend)
with pytest.raises(RuntimeError, match="Circuit has no measurements"):
execute(circuit, backend, shots=10)
backend.run(circuit, shots=10)


def test_run__backend_coupling_map():
Expand All @@ -171,7 +176,7 @@ def test_decomposition(backend: RigettiQCSBackend):
circuit.measure_all()

circuit = transpile(circuit, backend=backend)
job = execute(circuit, backend, shots=1)
job = backend.run(circuit, shots=1)
job.result() # Just make sure nothing throws an exception so the circuit is valid

assert job.status() == JobStatus.DONE
Expand Down