예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
 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)