def test_error_multi_acquire(self): """Test that an error is raised if multiple acquires occur on the same channel.""" acquire = pulse.Acquire(5) sched = pulse.Schedule(name='fake_experiment') sched = sched.insert(0, self.short_pulse(self.device.drives[0])) sched = sched.insert(4, acquire(self.device.acquires[0], self.device.memoryslots[0])) sched = sched.insert(10, acquire(self.device.acquires[0], self.device.memoryslots[0])) with self.assertRaises(PulseError): align_measures([sched], self.cmd_def)
def test_error_post_acquire_pulse(self): """Test that an error is raised if a pulse occurs on a channel after an acquire.""" acquire = pulse.Acquire(5) sched = pulse.Schedule(name='fake_experiment') sched = sched.insert(0, self.short_pulse(self.device.drives[0])) sched = sched.insert(4, acquire(self.device.acquires[0], self.device.memoryslots[0])) # No error with separate channel sched = sched.insert(10, self.short_pulse(self.device.drives[1])) align_measures([sched], self.cmd_def) sched = sched.insert(10, self.short_pulse(self.device.drives[0])) with self.assertRaises(PulseError): align_measures([sched], self.cmd_def)
def test_align_post_u3(self): """Test that acquires are scheduled no sooner than the duration of the longest X gate. """ acquire = pulse.Acquire(5) sched = pulse.Schedule(name='fake_experiment') sched = sched.insert(0, self.short_pulse(self.device.drives[0])) sched = sched.insert(1, acquire(self.device.acquires[0], self.device.memoryslots[0])) sched = align_measures([sched], self.cmd_def)[0] for time, inst in sched.instructions: if isinstance(inst, AcquireInstruction): self.assertEqual(time, 4) sched = align_measures([sched], self.cmd_def, max_calibration_duration=10)[0] for time, inst in sched.instructions: if isinstance(inst, AcquireInstruction): self.assertEqual(time, 10)
def test_align_measures(self): """Test that one acquire is delayed to match the time of the later acquire.""" acquire = pulse.Acquire(5) sched = pulse.Schedule(name='fake_experiment') sched = sched.insert(0, self.short_pulse(self.device.drives[0])) sched = sched.insert(1, acquire(self.device.acquires[0], self.device.memoryslots[0])) sched = sched.insert(10, acquire(self.device.acquires[1], self.device.memoryslots[1])) sched = align_measures([sched], self.cmd_def)[0] for time, inst in sched.instructions: if isinstance(inst, AcquireInstruction): self.assertEqual(time, 10) sched = align_measures([sched], self.cmd_def, align_time=20)[0] for time, inst in sched.instructions: if isinstance(inst, AcquireInstruction): self.assertEqual(time, 20)
def test_align_across_schedules(self): """Test that acquires are aligned together across multiple schedules.""" acquire = pulse.Acquire(5) sched1 = pulse.Schedule(name='fake_experiment') sched1 = sched1.insert(0, self.short_pulse(self.device.drives[0])) sched1 = sched1.insert(10, acquire(self.device.acquires[0], self.device.memoryslots[0])) sched2 = pulse.Schedule(name='fake_experiment') sched2 = sched2.insert(3, self.short_pulse(self.device.drives[0])) sched2 = sched2.insert(25, acquire(self.device.acquires[0], self.device.memoryslots[0])) schedules = align_measures([sched1, sched2], self.cmd_def) for time, inst in schedules[0].instructions: if isinstance(inst, AcquireInstruction): self.assertEqual(time, 25) for time, inst in schedules[0].instructions: if isinstance(inst, AcquireInstruction): self.assertEqual(time, 25)