I am looking for a compiler to compile a high-level quantum circuit for the Trapped-Ion Quantum Computing architecture, i.e. a compiler that can translate a high-level circuit to native gates of the TI hardware (single-qubit rotations and 2-qubit MS gate) in an optimized manner.


3 Answers 3


You can compile gates to native trapped ion gates via cirq.ion.ConvertToIonGates. For example:

import cirq

q0, q1 = cirq.LineQubit.range(2)

circuit = cirq.Circuit(
    cirq.CNOT(q0, q1),
    cirq.measure(q0, key='m')

# Prints
# Circuit:
# 0: ───H───@───M('m')───
#           │
# 1: ───────X────────────

ion_circuit = cirq.ion.ConvertToIonGates().convert_circuit(circuit)
print("Ion Circuit:")
# Prints
# Ion Circuit:
# 0: ───PhX(1)───────────MS(0.25π)───PhX(-0.5)^0.5───S^-1───M('m')───
#                        │
# 1: ────────────────────MS(0.25π)───PhX(1)^0.5──────────────────────


I believe that you can do this actually can be done with Qiskit as well. You just need to specify the basis gates sets you want to use under the transpile function.

For example: If I have the following circuit

enter image description here

which can be generated with Qiskit as:

from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from numpy import pi

qreg_q = QuantumRegister(2, 'q')
creg_c = ClassicalRegister(2, 'c')
circuit = QuantumCircuit(qreg_q, creg_c)

circuit.cx(qreg_q[0], qreg_q[1])
circuit.measure(qreg_q[0], creg_c[0])
circuit.measure(qreg_q[1], creg_c[1])
circuit.draw( 'mpl',style={'name': 'bw'}, plot_barriers= True, initial_state = True, scale = 1)

Now, if I am targeting a Trapped-ion system then instead of using CNOT as part of the native gate, we use Mølmer–Sørensen gate but this gate is equivalent to $R_{XX}$ gate when using two qubits. So I can transpile my circuit using this $R_{XX}$ gate and single qubit rotation as my native gates. We can do that as follow:

from qiskit import QuantumCircuit, transpile
trans_qc = transpile(circuit, backend = None, basis_gates = ['rx', 'ry', 'rz', 'rxx'])

the transpiled circuit, tans_qc, is now have the form:

enter image description here

Furthermore, if you want to actually simulate this on a trapped-ion hardware and potentially running on one then I would suggest you to sign-up for a free account with AQT (Alpine Quantum Technologies). Now you can actually set your backend using AQT system and transpile your circuit based on that.

from qiskit_aqt_provider import AQTProvider
aqt = AQTProvider('***********************')
AQT_backend = aqt.backends.aqt_qasm_simulator

trans_qc = transpile(circuit, backend = AQT_backend,  optimization_level = 3)
trans_qc.draw( 'mpl',style={'name': 'bw'}, plot_barriers= True, initial_state = True, scale = 1)

Which will output:

enter image description here

Use this documentation here for more details.


You can compile to the native gateset of the Quantinuum ion trap devices $\{\text{Rz}, \text{PhasedX}, \text{ZZPhase}\}$ using the pytket-quantinuum package.

See this answer for more details.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.