def test_rotations_pulse(self): q0 = Transmon("q0", levels=2) q1 = Transmon("q1", levels=3, kerr=-200e-3) q0.gaussian_pulse.sigma = 40 q1.gaussian_pulse.sigma = 40 system = System("system", modes=[q0, q1]) init_state = system.fock() for qubit in [q0, q1]: for _ in range(1): _ = tune_rabi(system, init_state=init_state, mode_name=qubit.name, verify=False) angles = np.linspace(-np.pi, np.pi, 5) for angle in angles: for qubit in [q0, q1]: seq = get_sequence(system) qubit.rotate_x(angle) unitary = qubit.rotate_x(angle, unitary=True) result = seq.run(init_state) fidelity = qutip.fidelity(result.states[-1], unitary * init_state)**2 self.assertGreater(fidelity, 1 - 1e-2) seq = get_sequence(system) qubit.rotate_y(angle) unitary = qubit.rotate_y(angle, unitary=True) result = seq.run(init_state) fidelity = qutip.fidelity(result.states[-1], unitary * init_state)**2 self.assertGreater(fidelity, 1 - 1e-2)
def setUpClass(cls): qubit = Transmon("qubit", levels=2) cavity = Cavity("cavity", levels=6) system = System("system", modes=[qubit, cavity]) system.set_cross_kerr(qubit, cavity, -2e-3) with system.use_modes([qubit]): _ = tune_rabi(system, init_state=qubit.fock(0), verify=False) cls.system = system
def setUpClass(cls): q0 = Transmon("q0", levels=2) q1 = Transmon("q1", levels=2) system = System("system", modes=[q0, q1]) for qubit in [q0, q1]: init_state = system.fock() for _ in range(1): _ = tune_rabi( system, init_state=init_state, mode_name=qubit.name, verify=False ) cls.system = system
def test_rabi_two_levels(self): qubit = Transmon("qubit", levels=2) system = System("system", modes=[qubit]) for _ in range(2): _, old_amp, new_amp = tune_rabi(system, qubit.fock(0)) self.assertLess(abs(old_amp - new_amp), 1e-7) init = qubit.fock(0) seq = get_sequence(system) qubit.rotate_x(np.pi) result = seq.run(init) target = qubit.Rx(np.pi) * init fidelity = qutip.fidelity(result.states[-1], target)**2 self.assertLess(abs(1 - fidelity), 1e-10)
def setUpClass(cls): n = 5 qubits = [ Transmon( f"q{i}", # levels=2, # # comment out the above line and uncomment the # # below line to use 3-level transmons with # # various anharmonicities levels=3, kerr=-100e-3 * (i + 1), ) for i in reversed(range(n)) ] qreg = System("qreg", modes=qubits) # Tune pi pulses for all qubits for i, qubit in enumerate(qubits): # Use different sigmas so that pulses can be visually distinguished qubit.gaussian_pulse.set(sigma=(10 + 2 * i), chop=4) with qreg.use_modes([qubit]): init_state = qubit.fock(0) e_ops = [qubit.fock_dm(1)] _ = tune_rabi( qreg, init_state, e_ops=e_ops, mode_name=qubit.name, plot=False, verify=False, ) # # Below line is unnecessary if the qubits # # only have two levels _ = tune_drag( qreg, init_state, e_ops=e_ops, mode_name=qubit.name, plot=False ) def bell_state(qreg): zeros = [0] * len(qreg.active_modes) ones = [1] * len(qreg.active_modes) return (qreg.logical_basis(*zeros) + qreg.logical_basis(*ones)).unit() cls.ideal_state = bell_state(qreg) cls.qreg = qreg
def test_drag(self): qubit = Transmon("qubit", levels=3, kerr=-200e-3) qubit.gaussian_pulse.sigma = 10 system = System("system", modes=[qubit]) for _ in range(3): _, old_amp, new_amp = tune_rabi(system, qubit.fock(0), plot=False, verify=False) self.assertLess(abs(old_amp - new_amp), 1e-7) _, old_drag, new_drag = tune_drag(system, qubit.fock(0), update=True) self.assertNotAlmostEqual(new_drag, 0) init = qubit.fock(0) seq = get_sequence(system) qubit.rotate_x(np.pi) result = seq.run(init) target = qubit.Rx(np.pi) * init fidelity = qutip.fidelity(result.states[-1], target)**2 self.assertLess(abs(1 - fidelity), 1e-5)