def test_assemble_parametric(self): """Test that parametric pulses can be assembled properly into a PulseQobj.""" sched = pulse.Schedule(name='test_parametric') sched += pulse.Gaussian(duration=25, sigma=4, amp=0.5j)(DriveChannel(0)) sched += pulse.Drag(duration=25, amp=0.2+0.3j, sigma=7.8, beta=4)(DriveChannel(1)) sched += pulse.ConstantPulse(duration=25, amp=1)(DriveChannel(2)) sched += pulse.GaussianSquare(duration=150, amp=0.2, sigma=8, width=140)(MeasureChannel(0)) << sched.duration backend = FakeOpenPulse3Q() backend.configuration().parametric_pulses = ['gaussian', 'drag', 'gaussian_square', 'constant'] qobj = assemble(sched, backend) self.assertEqual(qobj.config.pulse_library, []) qobj_insts = qobj.experiments[0].instructions self.assertTrue(all(inst.name == 'parametric_pulse' for inst in qobj_insts)) self.assertEqual(qobj_insts[0].pulse_shape, 'gaussian') self.assertEqual(qobj_insts[1].pulse_shape, 'drag') self.assertEqual(qobj_insts[2].pulse_shape, 'constant') self.assertEqual(qobj_insts[3].pulse_shape, 'gaussian_square') self.assertDictEqual(qobj_insts[0].parameters, {'duration': 25, 'sigma': 4, 'amp': 0.5j}) self.assertDictEqual(qobj_insts[1].parameters, {'duration': 25, 'sigma': 7.8, 'amp': 0.2+0.3j, 'beta': 4}) self.assertDictEqual(qobj_insts[2].parameters, {'duration': 25, 'amp': 1}) self.assertDictEqual(qobj_insts[3].parameters, {'duration': 150, 'sigma': 8, 'amp': 0.2, 'width': 140}) self.assertListEqual( qobj.to_dict()['experiments'][0]['instructions'][0]['parameters']['amp'], [0.0, 0.5])
def test_assemble_parametric_unsupported(self): """Test that parametric pulses are translated to SamplePulses if they're not supported by the backend during assemble time. """ sched = pulse.Schedule(name='test_parametric_to_sample_pulse') sched += pulse.Drag(duration=25, amp=0.2+0.3j, sigma=7.8, beta=4)(DriveChannel(1)) sched += pulse.ConstantPulse(duration=25, amp=1)(DriveChannel(2)) backend = FakeOpenPulse3Q() backend.configuration().parametric_pulses = ['something_extra'] qobj = assemble(sched, backend) self.assertNotEqual(qobj.config.pulse_library, []) qobj_insts = qobj.experiments[0].instructions self.assertFalse(hasattr(qobj_insts[0], 'pulse_shape'))