예제 #1
0
    def test_parse_program(self):
        """Test typical pulse program."""
        test_pulse = pulse.Gaussian(10, 0.1, 3)

        sched = pulse.Schedule()
        sched = sched.insert(0, pulse.SetPhase(3.14, pulse.DriveChannel(0)))
        sched = sched.insert(0, pulse.Play(test_pulse, pulse.DriveChannel(0)))
        sched = sched.insert(10, pulse.ShiftPhase(-1.57,
                                                  pulse.DriveChannel(0)))
        sched = sched.insert(10, pulse.Play(test_pulse, pulse.DriveChannel(0)))

        ch_events = events.ChannelEvents.load_program(sched,
                                                      pulse.DriveChannel(0))

        # check waveform data
        waveforms = list(ch_events.get_waveforms())
        inst_data0 = waveforms[0]
        self.assertEqual(inst_data0.t0, 0)
        self.assertEqual(inst_data0.frame.phase, 3.14)
        self.assertEqual(inst_data0.frame.freq, 0)
        self.assertEqual(inst_data0.inst,
                         pulse.Play(test_pulse, pulse.DriveChannel(0)))

        inst_data1 = waveforms[1]
        self.assertEqual(inst_data1.t0, 10)
        self.assertEqual(inst_data1.frame.phase, 1.57)
        self.assertEqual(inst_data1.frame.freq, 0)
        self.assertEqual(inst_data1.inst,
                         pulse.Play(test_pulse, pulse.DriveChannel(0)))

        # check frame data
        frames = list(ch_events.get_frame_changes())
        inst_data0 = frames[0]
        self.assertEqual(inst_data0.t0, 0)
        self.assertEqual(inst_data0.frame.phase, 3.14)
        self.assertEqual(inst_data0.frame.freq, 0)
        self.assertListEqual(inst_data0.inst,
                             [pulse.SetPhase(3.14, pulse.DriveChannel(0))])

        inst_data1 = frames[1]
        self.assertEqual(inst_data1.t0, 10)
        self.assertEqual(inst_data1.frame.phase, -1.57)
        self.assertEqual(inst_data1.frame.freq, 0)
        self.assertListEqual(inst_data1.inst,
                             [pulse.ShiftPhase(-1.57, pulse.DriveChannel(0))])
예제 #2
0
    def test_multiple_frames_at_the_same_time(self):
        """Test multiple frame instruction at the same time."""
        # shift phase followed by set phase
        sched = pulse.Schedule()
        sched = sched.insert(0, pulse.ShiftPhase(-1.57, pulse.DriveChannel(0)))
        sched = sched.insert(0, pulse.SetPhase(3.14, pulse.DriveChannel(0)))

        events = ChannelEvents.load_program(sched, pulse.DriveChannel(0))
        frames = list(events.get_frame_changes())
        _, frame, _ = frames[0]
        self.assertAlmostEqual(frame.phase, 3.14)

        # set phase followed by shift phase
        sched = pulse.Schedule()
        sched = sched.insert(0, pulse.SetPhase(3.14, pulse.DriveChannel(0)))
        sched = sched.insert(0, pulse.ShiftPhase(-1.57, pulse.DriveChannel(0)))

        events = ChannelEvents.load_program(sched, pulse.DriveChannel(0))
        frames = list(events.get_frame_changes())
        _, frame, _ = frames[0]
        self.assertAlmostEqual(frame.phase, 1.57)
예제 #3
0
 def test_parameter_attribute_schedule(self):
     """Test the ``parameter`` attributes."""
     schedule = pulse.Schedule()
     self.assertFalse(schedule.is_parameterized())
     schedule += pulse.SetFrequency(self.alpha, DriveChannel(0))
     self.assertEqual(schedule.parameters, {self.alpha})
     schedule += pulse.ShiftFrequency(self.gamma, DriveChannel(0))
     self.assertEqual(schedule.parameters, {self.alpha, self.gamma})
     schedule += pulse.SetPhase(self.phi, DriveChannel(1))
     self.assertTrue(schedule.is_parameterized())
     self.assertEqual(schedule.parameters, {self.alpha, self.gamma, self.phi})
     schedule.assign_parameters({self.phi: self.alpha, self.gamma: self.shift})
     self.assertEqual(schedule.parameters, {self.alpha})
     schedule.assign_parameters({self.alpha: self.beta})
     self.assertEqual(schedule.parameters, {self.beta})
     schedule.assign_parameters({self.beta: 10})
     self.assertFalse(schedule.is_parameterized())
예제 #4
0
    def test_straight_schedule_bind(self):
        """Nothing fancy, 1:1 mapping."""
        schedule = pulse.Schedule()
        schedule += pulse.SetFrequency(self.alpha, DriveChannel(0))
        schedule += pulse.ShiftFrequency(self.gamma, DriveChannel(0))
        schedule += pulse.SetPhase(self.phi, DriveChannel(1))
        schedule += pulse.ShiftPhase(self.theta, DriveChannel(1))

        schedule.assign_parameters({self.alpha: self.freq, self.gamma: self.shift,
                                    self.phi: self.phase, self.theta: -self.phase})

        insts = assemble(schedule, self.backend).experiments[0].instructions
        GHz = 1e9  # pylint: disable=invalid-name
        self.assertEqual(float(insts[0].frequency*GHz), self.freq)
        self.assertEqual(float(insts[1].frequency*GHz), self.shift)
        self.assertEqual(float(insts[2].phase), self.phase)
        self.assertEqual(float(insts[3].phase), -self.phase)
예제 #5
0
    def test_multiple_parameters(self):
        """Expressions of parameters with partial assignment."""
        schedule = pulse.Schedule()
        schedule += pulse.SetFrequency(self.alpha + self.beta, DriveChannel(0))
        schedule += pulse.ShiftFrequency(self.gamma + self.beta, DriveChannel(0))
        schedule += pulse.SetPhase(self.phi, DriveChannel(1))

        # Partial bind
        delta = 1e9
        schedule.assign_parameters({self.alpha: self.freq - delta})
        schedule.assign_parameters({self.beta: delta})
        schedule.assign_parameters({self.gamma: self.shift - delta})
        schedule.assign_parameters({self.phi: self.phase})

        insts = schedule.instructions
        self.assertEqual(float(insts[0][1].frequency), self.freq)
        self.assertEqual(float(insts[1][1].frequency), self.shift)
        self.assertEqual(float(insts[2][1].phase), self.phase)