In[]:=
<<Wolfram`QuantumFramework`
Using Python session to make QiskitCircuit
Using Python session to make QiskitCircuit
You can use ResourceFunction[“SetLanguageCellSession”] to set your Python session for a LanguageCell bellow to work:
In[]:=
session=First@ExternalSessions[]
Out[]=
ExternalSessionObject
In[]:=
ResourceFunction["SetLanguageCellSession"][session]
Out[]=
ExternalSessionObject
If qiskit and wolframclient is pre-installed and working this should make a QiskitCircuit object:
In[]:=
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
qr = QuantumRegister(3, 'q')
anc = QuantumRegister(1, 'ancilla')
cr = ClassicalRegister(3, 'c')
qc = QuantumCircuit(qr, anc, cr)
qc.x(anc[0])
qc.h(anc[0])
qc.h(qr[0:3])
qc.cx(qr[0:3], anc[0])
qc.h(qr[0:3])
qc.barrier(qr)
qc.measure(qr, cr)
# QuantumFramework's QiskitCircuit just stores pickled QuantumCircuit
from wolframclient.language import wl
import pickle
wl.Wolfram.QuantumFramework.QiskitCircuit(pickle.dumps(qc))
qr = QuantumRegister(3, 'q')
anc = QuantumRegister(1, 'ancilla')
cr = ClassicalRegister(3, 'c')
qc = QuantumCircuit(qr, anc, cr)
qc.x(anc[0])
qc.h(anc[0])
qc.h(qr[0:3])
qc.cx(qr[0:3], anc[0])
qc.h(qr[0:3])
qc.barrier(qr)
qc.measure(qr, cr)
# QuantumFramework's QiskitCircuit just stores pickled QuantumCircuit
from wolframclient.language import wl
import pickle
wl.Wolfram.QuantumFramework.QiskitCircuit(pickle.dumps(qc))
Out[]=
QiskitCircuit
In[]:=
qiskitCircuit=%;
Or use ExternalEvaluate
In[]:=
qiskitCircuit=ExternalEvaluate["Python","from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuitqr = QuantumRegister(3, 'q')anc = QuantumRegister(1, 'ancilla')cr = ClassicalRegister(3, 'c')qc = QuantumCircuit(qr, anc, cr)qc.x(anc[0])qc.h(anc[0])qc.h(qr[0:3])qc.cx(qr[0:3], anc[0])qc.h(qr[0:3])qc.barrier(qr)qc.measure(qr, cr)# QuantumFramework's QiskitCircuit just stores pickled QuantumCircuitfrom wolframclient.language import wlimport picklewl.Wolfram.QuantumFramework.QiskitCircuit(pickle.dumps(qc))"]
Out[]=
QiskitCircuit
And then just use “QuantumCircuit” property to reconstruct QuantumCircuitOperator:
In[]:=
circuit=qiskitCircuit["QuantumCircuit"]
Out[]=
QuantumCircuitOperator
In[]:=
circuit["Diagram"]
Out[]=
It may not support all qiskit gates properly yet, so tweaking of Qiskit.m maybe required to make your circuit convert properly:
SystemOpen@FileNameJoin[{PacletObject["Wolfram/QuantumFramework"]["Location"],"Kernel","QuantumCircuitOperator","Qiskit.m"}]