Skip to content

Commit

Permalink
Merge pull request #929 from qiboteam/rmu3
Browse files Browse the repository at this point in the history
Remove U3 rule from default compiler
  • Loading branch information
stavros11 authored Jul 10, 2024
2 parents 383d3c9 + c7de54e commit f0dd15f
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 68 deletions.
2 changes: 1 addition & 1 deletion doc/source/tutorials/compiler.rst
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Therefore the previous manipulations can be done as follows:

# define circuit
circuit = Circuit(1)
circuit.add(gates.U3(0, 0.1, 0.2, 0.3))
circuit.add(gates.GPI2(0, 0.1))
circuit.add(gates.M(0))

# set backend to qibolab
Expand Down
2 changes: 0 additions & 2 deletions src/qibolab/compilers/compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
identity_rule,
measurement_rule,
rz_rule,
u3_rule,
z_rule,
)
from qibolab.pulses import Delay, PulseSequence
Expand Down Expand Up @@ -49,7 +48,6 @@ def default(cls):
gates.I: identity_rule,
gates.Z: z_rule,
gates.RZ: rz_rule,
gates.U3: u3_rule,
gates.CZ: cz_rule,
gates.CNOT: cnot_rule,
gates.GPI2: gpi2_rule,
Expand Down
19 changes: 0 additions & 19 deletions src/qibolab/compilers/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,6 @@ def gpi_rule(gate, qubit):
return sequence


def u3_rule(gate, qubit):
"""U3 applied as RZ-RX90-RZ-RX90-RZ."""
# Transform gate to U3 and add pi/2-pulses
theta, phi, lam = gate.parameters
# apply RZ(lam)
virtual_z_phases = {qubit.name: lam}
sequence = PulseSequence()
sequence.append(VirtualZ(phase=lam, channel=qubit.drive.name, qubit=qubit.name))
# Fetch pi/2 pulse from calibration and apply RX(pi/2)
sequence.append(qubit.native_gates.RX90)
# apply RZ(theta)
sequence.append(VirtualZ(phase=theta, channel=qubit.drive.name, qubit=qubit.name))
# Fetch pi/2 pulse from calibration and apply RX(-pi/2)
sequence.append(replace(qubit.native_gates.RX90, relative_phase=-math.pi))
# apply RZ(phi)
sequence.append(VirtualZ(phase=phi, channel=qubit.drive.name, qubit=qubit.name))
return sequence


def cz_rule(gate, pair):
"""CZ applied as defined in the platform runcard.
Expand Down
1 change: 0 additions & 1 deletion tests/test_backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ def test_execute_circuit_initial_state():
(gates.Z, {}),
(gates.GPI, {"phi": np.pi / 8}),
(gates.GPI2, {"phi": np.pi / 8}),
(gates.U3, {"theta": 0.1, "phi": 0.2, "lam": 0.3}),
],
)
def test_execute_circuit(gate, kwargs):
Expand Down
51 changes: 6 additions & 45 deletions tests/test_compilers_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ def compile_circuit(circuit, platform):
((gates.GPI, np.pi / 8), 3),
((gates.GPI2, -np.pi / 8), 3),
((gates.RZ, np.pi / 4), 2),
((gates.U3, 0.1, 0.2, 0.3), 10),
],
)
def test_compile(platform, gateargs, sequence_len):
Expand All @@ -57,13 +56,13 @@ def test_compile(platform, gateargs, sequence_len):
def test_compile_two_gates(platform):
circuit = Circuit(1)
circuit.add(gates.GPI2(0, phi=0.1))
circuit.add(gates.U3(0, theta=0.1, phi=0.2, lam=0.3))
circuit.add(gates.GPI(0, 0.2))
circuit.add(gates.M(0))

sequence = compile_circuit(circuit, platform)

assert len(sequence) == 13
assert len(sequence.qd_pulses) == 3
assert len(sequence) == 5
assert len(sequence.qd_pulses) == 2
assert len(sequence.ro_pulses) == 1


Expand Down Expand Up @@ -115,45 +114,6 @@ def test_gpi2_to_sequence(platform):
assert sequence == s


def test_u3_to_sequence(platform):
circuit = Circuit(1)
circuit.add(gates.U3(0, 0.1, 0.2, 0.3))

sequence = compile_circuit(circuit, platform)
assert len(sequence) == 8
assert len(sequence.qd_pulses) == 2

rx90_pulse1 = platform.create_RX90_pulse(0, relative_phase=0.3)
rx90_pulse2 = platform.create_RX90_pulse(0, relative_phase=0.4 - np.pi)
s = PulseSequence([rx90_pulse1, rx90_pulse2])

np.testing.assert_allclose(
sequence.duration, rx90_pulse1.duration + rx90_pulse2.duration
)
# assert sequence == s


def test_two_u3_to_sequence(platform):
circuit = Circuit(1)
circuit.add(gates.U3(0, 0.1, 0.2, 0.3))
circuit.add(gates.U3(0, 0.4, 0.6, 0.5))

sequence = compile_circuit(circuit, platform)
assert len(sequence) == 18
assert len(sequence.qd_pulses) == 4

rx90_pulse = platform.create_RX90_pulse(0)

np.testing.assert_allclose(sequence.duration, 2 * 2 * rx90_pulse.duration)

rx90_pulse1 = platform.create_RX90_pulse(0, relative_phase=0.3)
rx90_pulse2 = platform.create_RX90_pulse(0, relative_phase=0.4 - np.pi)
rx90_pulse3 = platform.create_RX90_pulse(0, relative_phase=1.1)
rx90_pulse4 = platform.create_RX90_pulse(0, relative_phase=1.5 - np.pi)
s = PulseSequence([rx90_pulse1, rx90_pulse2, rx90_pulse3, rx90_pulse4])
# assert sequence == s


def test_cz_to_sequence():
platform = create_platform("dummy")
circuit = Circuit(3)
Expand All @@ -177,11 +137,12 @@ def test_cnot_to_sequence():

def test_add_measurement_to_sequence(platform):
circuit = Circuit(1)
circuit.add(gates.U3(0, 0.1, 0.2, 0.3))
circuit.add(gates.GPI2(0, 0.1))
circuit.add(gates.GPI2(0, 0.2))
circuit.add(gates.M(0))

sequence = compile_circuit(circuit, platform)
assert len(sequence) == 10
assert len(sequence) == 5
assert len(sequence.qd_pulses) == 2
assert len(sequence.ro_pulses) == 1

Expand Down

0 comments on commit f0dd15f

Please sign in to comment.