Beispiel #1
0
    def test_substitution_with_existing(self):
        """Test that substituting one parameter with an existing parameter works."""
        schedule = pulse.Schedule()
        schedule += pulse.SetFrequency(self.alpha, DriveChannel(self.qubit))

        schedule.assign_parameters({self.alpha: 1e9*self.qubit})
        self.assertEqual(schedule.instructions[0][1].frequency, 1e9*self.qubit)
        schedule.assign_parameters({self.qubit: 2})
        self.assertEqual(float(schedule.instructions[0][1].frequency), 2e9)
Beispiel #2
0
    def test_substitution(self):
        """Test Parameter substitution (vs bind)."""
        schedule = pulse.Schedule()
        schedule += pulse.SetFrequency(self.alpha, DriveChannel(0))

        schedule.assign_parameters({self.alpha: 2*self.beta})
        self.assertEqual(schedule.instructions[0][1].frequency, 2*self.beta)
        schedule.assign_parameters({self.beta: self.freq / 2})
        self.assertEqual(float(schedule.instructions[0][1].frequency), self.freq)
    def test_frequency(self):
        """Test parse frequency."""
        sched = pulse.Schedule()
        sched = sched.insert(0, pulse.ShiftFrequency(1.0, pulse.DriveChannel(0)))
        sched = sched.insert(5, pulse.SetFrequency(5.0, pulse.DriveChannel(0)))

        ch_events = events.ChannelEvents.load_program(sched, pulse.DriveChannel(0))
        ch_events.set_config(dt=0.1, init_frequency=3.0, init_phase=0)
        frames = list(ch_events.get_frame_changes())

        inst_data0 = frames[0]
        self.assertAlmostEqual(inst_data0.frame.freq, 1.0)

        inst_data1 = frames[1]
        self.assertAlmostEqual(inst_data1.frame.freq, 1.0)
Beispiel #4
0
    def test_frequency(self):
        """Test parse frequency."""
        sched = pulse.Schedule()
        sched = sched.insert(0, pulse.ShiftFrequency(1.0,
                                                     pulse.DriveChannel(0)))
        sched = sched.insert(5, pulse.SetFrequency(5.0, pulse.DriveChannel(0)))

        events = ChannelEvents.load_program(sched, pulse.DriveChannel(0))
        events.init_frequency = 3.0
        frames = list(events.get_frame_changes())

        _, frame, _ = frames[0]
        self.assertAlmostEqual(frame.freq, 1.0)

        _, frame, _ = frames[1]
        self.assertAlmostEqual(frame.freq, 1.0)
Beispiel #5
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)
Beispiel #6
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())
Beispiel #7
0
    def test_with_function(self):
        """Test ParameterExpressions formed trivially in a function."""
        def get_frequency(variable):
            return 2*variable

        def get_shift(variable):
            return variable - 1

        schedule = pulse.Schedule()
        schedule += pulse.SetFrequency(get_frequency(self.alpha), DriveChannel(0))
        schedule += pulse.ShiftFrequency(get_shift(self.gamma), DriveChannel(0))

        schedule.assign_parameters({self.alpha: self.freq / 2, self.gamma: self.shift + 1})

        insts = schedule.instructions
        self.assertEqual(float(insts[0][1].frequency), self.freq)
        self.assertEqual(float(insts[1][1].frequency), self.shift)
Beispiel #8
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)