Qiskit 2.0 interoperability with qat-qiskit
Translating circuits from one framework to the other
qat.qiskit allows to translate a Qiskit circuit into a Qaptiva one and vice versa.
It can convert a circuit to Qiskit (respectively Qaptiva) by either using the class
QaptivaToQiskit (respectively QiskitToQaptiva)
or the function qaptiva_to_qiskit() (respectively qiskit_to_qaptiva()).
Here is an example of a translation:
from qat.qiskit.QaptivaToQiskit
qiskit_circuit = QaptivaToQiskit(your_qaptiva_circuit)
from qat.qiskit.QiskitToQaptiva
qaptiva_circuit = QiskitToQaptiva(your_qiskit_circuit)
Submitting circuits to Qaptiva Access
qat.qiskit also allows to use a Qiskit wrapper that uses Qaptiva qpus and computations before returning results in the form of qiskit basic data structures.
It is possible to run either a Sampler or a Estimator.
Both have basically the same API and inherit from Qiskit base classes. The Qaptiva backend is accessed through
the QaptivaService class.
Warning
For the moment, both the Sampler and the Estimator require a connection with a Qaptiva Access server to get access to the backend. It would not run without it.
First, here is an example of a sampler
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
from qat.qiskit import QaptivaService, Sampler
def bell_pair():
qr = QuantumRegister(2, 'q')
cr = ClassicalRegister(2, 'c')
circuit = QuantumCircuit(qr, cr)
circuit.h(qr[0])
circuit.cx(qr[0], qr[1])
circuit.measure(qr, cr)
return circuit
circuit = bell_pair()
service = QaptivaService()
backend = service.backend("LinAlg")
sampler = Sampler(backend)
job = sampler.run([circuit], shots=10)
print(job.status())
print(job.result())
Next, here is an example with an Estimator:
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.quantum_info import SparsePauliOp
from qat.qiskit import QaptivaService, Estimator
observable = SparsePauliOp.from_list(
[("II", 2), ("XX", -2), ("YY", 3), ("ZZ", -3)]
)
theta = Parameter('θ')
phi = Parameter('φ')
quantum_circuit = QuantumCircuit(2)
quantum_circuit.rx(theta, 0)
quantum_circuit.ry(phi, 1)
param_dict = {theta: 1.57, phi: 3.14}
qiskit_pub = (quantum_circuit, observable, param_dict)
service = QaptivaService()
backend = service.backend("LinAlg")
estimator = Estimator(backend)
job = estimator.run([qiskit_pub], shots=10)
print(job)
print(job.status())
print(job.result())