def test_disassemble_single_schedule(self): """Test disassembling a single schedule. """ d0 = pulse.DriveChannel(0) d1 = pulse.DriveChannel(1) with pulse.build(self.backend) as sched: with pulse.align_right(): pulse.play(pulse.library.Constant(10, 1.0), d0) pulse.set_phase(1.0, d0) pulse.shift_phase(3.11, d0) pulse.set_frequency(1e9, d0) pulse.shift_frequency(1e7, d0) pulse.delay(20, d0) pulse.delay(10, d1) pulse.play(pulse.library.Constant(8, 0.1), d1) pulse.measure_all() qobj = assemble(sched, backend=self.backend, shots=2000) scheds, run_config_out, _ = disassemble(qobj) run_config_out = RunConfig(**run_config_out) self.assertEqual(run_config_out.memory_slots, 2) self.assertEqual(run_config_out.shots, 2000) self.assertEqual(run_config_out.memory, False) self.assertEqual(run_config_out.meas_level, 2) self.assertEqual(run_config_out.meas_lo_freq, self.backend.defaults().meas_freq_est) self.assertEqual(run_config_out.qubit_lo_freq, self.backend.defaults().qubit_freq_est) self.assertEqual(run_config_out.rep_time, 99) self.assertEqual(len(scheds), 1) self.assertEqual(scheds[0], sched)
def _schedule(self) -> Tuple[pulse.ScheduleBlock, Parameter]: """Create the spectroscopy schedule.""" dt, granularity = self._dt, self._granularity duration = int(granularity * (self.experiment_options.duration / dt // granularity)) sigma = granularity * (self.experiment_options.sigma / dt // granularity) width = granularity * (self.experiment_options.width / dt // granularity) qubit = self.physical_qubits[0] freq_param = Parameter("frequency") with pulse.build(backend=self.backend, name="spectroscopy") as schedule: pulse.shift_frequency(freq_param, pulse.MeasureChannel(qubit)) pulse.play( pulse.GaussianSquare( duration=duration, amp=self.experiment_options.amp, sigma=sigma, width=width, ), pulse.MeasureChannel(qubit), ) pulse.acquire(duration, qubit, pulse.MemorySlot(0)) return schedule, freq_param
def test_shift_frequency(self): # pylint: disable=no-member """Test shift frequency instruction.""" d0 = pulse.DriveChannel(0) with pulse.build() as schedule: pulse.shift_frequency(0.1e9, d0) reference = pulse.Schedule() reference += instructions.ShiftFrequency(0.1e9, d0) # pylint: disable=no-member self.assertEqual(schedule, reference)
def test_shift_frequency(self): """Test shift frequency instruction.""" d0 = pulse.DriveChannel(0) with pulse.build() as schedule: pulse.shift_frequency(0.1e9, d0) reference = pulse.Schedule() reference += instructions.ShiftFrequency(0.1e9, d0) self.assertScheduleEqual(schedule, reference)
def test_ef_rabi_circuit(self): """Test the EFRabi experiment end to end.""" anharm = -330e6 rabi12 = EFRabi(2) rabi12.set_experiment_options(amplitudes=[0.5], frequency_shift=anharm) circ = rabi12.circuits(RabiBackend())[0] with pulse.build() as expected: pulse.shift_frequency(anharm, pulse.DriveChannel(2)) pulse.play(pulse.Gaussian(160, 0.5, 40), pulse.DriveChannel(2)) pulse.shift_frequency(-anharm, pulse.DriveChannel(2)) self.assertEqual(circ.calibrations["Rabi"][((2, ), (0.5, ))], expected) self.assertEqual(circ.data[0][0].name, "x") self.assertEqual(circ.data[1][0].name, "Rabi")
def test_disassemble_multiple_schedules(self): """Test disassembling multiple schedules, all should have the same config. """ d0 = pulse.DriveChannel(0) d1 = pulse.DriveChannel(1) with pulse.build(self.backend) as sched0: with pulse.align_right(): pulse.play(pulse.library.Constant(10, 1.0), d0) pulse.set_phase(1.0, d0) pulse.shift_phase(3.11, d0) pulse.set_frequency(1e9, d0) pulse.shift_frequency(1e7, d0) pulse.delay(20, d0) pulse.delay(10, d1) pulse.play(pulse.library.Constant(8, 0.1), d1) pulse.measure_all() with pulse.build(self.backend) as sched1: with pulse.align_right(): pulse.play(pulse.library.Constant(8, 0.1), d0) pulse.play(pulse.library.Waveform([0., 1.]), d1) pulse.set_phase(1.1, d0) pulse.shift_phase(3.5, d0) pulse.set_frequency(2e9, d0) pulse.shift_frequency(3e7, d1) pulse.delay(20, d1) pulse.delay(10, d0) pulse.play(pulse.library.Constant(8, 0.4), d1) pulse.measure_all() qobj = assemble([sched0, sched1], backend=self.backend, shots=2000) scheds, run_config_out, _ = disassemble(qobj) run_config_out = RunConfig(**run_config_out) self.assertEqual(run_config_out.memory_slots, 2) self.assertEqual(run_config_out.shots, 2000) self.assertEqual(run_config_out.memory, False) self.assertEqual(len(scheds), 2) self.assertEqual(scheds[0], sched0) self.assertEqual(scheds[1], sched1)
def _spec_gate_schedule( self, backend: Optional[Backend] = None ) -> Tuple[pulse.ScheduleBlock, Parameter]: """Create the spectroscopy schedule.""" freq_param = Parameter("frequency") with pulse.build(backend=backend, name="spectroscopy") as schedule: pulse.shift_frequency(freq_param, pulse.DriveChannel(self.physical_qubits[0])) pulse.play( pulse.GaussianSquare( duration=self.experiment_options.duration, amp=self.experiment_options.amp, sigma=self.experiment_options.sigma, width=self.experiment_options.width, ), pulse.DriveChannel(self.physical_qubits[0]), ) pulse.shift_frequency(-freq_param, pulse.DriveChannel(self.physical_qubits[0])) return schedule, freq_param