Пример #1
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)
Пример #2
0
    def gen_frame_symbol(self):
        """Test gen_frame_symbol."""
        fcs = [
            pulse.ShiftPhase(np.pi / 2, pulse.DriveChannel(0)),
            pulse.ShiftFrequency(1e6, pulse.DriveChannel(0))
        ]
        inst_data = create_instruction(fcs, np.pi / 2, 1e6, 5, 0.1)

        obj = frame.gen_frame_symbol(inst_data,
                                     formatter=self.formatter,
                                     device=self.device)[0]

        # type check
        self.assertEqual(type(obj), drawings.TextData)

        # data check
        self.assertListEqual(obj.channels, [pulse.DriveChannel(0)])
        self.assertEqual(obj.latex,
                         self.formatter['latex_symbol.frame_change'])
        self.assertEqual(obj.text,
                         self.formatter['unicode_symbol.frame_change'])

        # metadata check
        ref_meta = {
            'total phase change': np.pi / 2,
            'total frequency change': 1e6,
            'program':
            ['ShiftPhase(1.57 rad.)', 'ShiftFrequency(1.00e+06 Hz)'],
            't0 (cycle time)': 5,
            't0 (sec)': 0.5
        }
        self.assertDictEqual(obj.meta, ref_meta)

        # style check
        ref_style = {
            'zorder': self.formatter['layer.frame_change'],
            'color': self.formatter['color.frame_change'],
            'size': self.formatter['text_size.frame_change'],
            'va': 'center',
            'ha': 'center'
        }
        self.assertDictEqual(obj.styles, ref_style)
Пример #3
0
    def gen_frame_symbol(self):
        """Test gen_frame_symbol."""
        fcs = [
            pulse.ShiftPhase(np.pi / 2, pulse.DriveChannel(0)),
            pulse.ShiftFrequency(1e6, pulse.DriveChannel(0)),
        ]
        inst_data = create_instruction(fcs, np.pi / 2, 1e6, 5, 0.1)

        obj = frame.gen_frame_symbol(inst_data,
                                     formatter=self.formatter,
                                     device=self.device)[0]

        # type check
        self.assertEqual(type(obj), drawings.TextData)

        # data check
        self.assertListEqual(obj.channels, [pulse.DriveChannel(0)])
        self.assertEqual(obj.latex,
                         self.formatter["latex_symbol.frame_change"])
        self.assertEqual(obj.text,
                         self.formatter["unicode_symbol.frame_change"])

        # metadata check
        ref_meta = {
            "total phase change": np.pi / 2,
            "total frequency change": 1e6,
            "program":
            ["ShiftPhase(1.57 rad.)", "ShiftFrequency(1.00e+06 Hz)"],
            "t0 (cycle time)": 5,
            "t0 (sec)": 0.5,
        }
        self.assertDictEqual(obj.meta, ref_meta)

        # style check
        ref_style = {
            "zorder": self.formatter["layer.frame_change"],
            "color": self.formatter["color.frame_change"],
            "size": self.formatter["text_size.frame_change"],
            "va": "center",
            "ha": "center",
        }
        self.assertDictEqual(obj.styles, ref_style)
    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)
 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())
    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)
Пример #7
0
    def test_gen_raw_frame_operand_values(self):
        """Test gen_raw_frame_operand_values."""
        fcs = [pulse.ShiftPhase(np.pi/2, pulse.DriveChannel(0)),
               pulse.ShiftFrequency(1e6, pulse.DriveChannel(0))]
        inst_data = self.create_instruction(fcs, np.pi/2, 1e6, 5, 0.1)

        obj = generators.gen_raw_frame_operand_values(inst_data)[0]

        # type check
        self.assertEqual(type(obj), drawing_objects.TextData)

        # data check
        self.assertEqual(obj.channel, pulse.DriveChannel(0))
        self.assertEqual(obj.text, r'(1.57, 1.0e+06)')

        # style check
        ref_style = {'zorder': self.style['formatter.layer.frame_change'],
                     'color': self.style['formatter.color.frame_change'],
                     'size': self.style['formatter.text_size.annotate'],
                     'va': 'center',
                     'ha': 'center'}
        self.assertDictEqual(obj.styles, ref_style)
Пример #8
0
    def test_gen_latex_frequency_mhz_value(self):
        """Test gen_latex_frequency_mhz_value."""
        fcs = [pulse.ShiftPhase(np.pi/2, pulse.DriveChannel(0)),
               pulse.ShiftFrequency(1e6, pulse.DriveChannel(0))]
        inst_data = self.create_instruction(fcs, np.pi/2, 1e6, 5, 0.1)

        obj = generators.gen_latex_frequency_mhz_value(inst_data)[0]

        # type check
        self.assertEqual(type(obj), drawing_objects.TextData)

        # data check
        self.assertEqual(obj.channel, pulse.DriveChannel(0))
        self.assertEqual(obj.latex, r'\Delta f = 1.00 ~{\rm MHz}')
        self.assertEqual(obj.text, '\u0394' + 'f=1.00 MHz')

        # style check
        ref_style = {'zorder': self.style['formatter.layer.frame_change'],
                     'color': self.style['formatter.color.frame_change'],
                     'size': self.style['formatter.text_size.annotate'],
                     'va': 'center',
                     'ha': 'center'}
        self.assertDictEqual(obj.styles, ref_style)
Пример #9
0
    def test_gen_latex_vz_label(self):
        """Test gen_latex_vz_label."""
        fcs = [pulse.ShiftPhase(np.pi/2, pulse.DriveChannel(0)),
               pulse.ShiftFrequency(1e6, pulse.DriveChannel(0))]
        inst_data = self.create_instruction(fcs, np.pi/2, 1e6, 5, 0.1)

        obj = generators.gen_latex_vz_label(inst_data)[0]

        # type check
        self.assertEqual(type(obj), drawing_objects.TextData)

        # data check
        self.assertEqual(obj.channel, pulse.DriveChannel(0))
        self.assertEqual(obj.latex, r'{\rm VZ}(-\frac{\pi}{2})')
        self.assertEqual(obj.text, r'VZ(-1.57 rad.)')

        # style check
        ref_style = {'zorder': self.style['formatter.layer.frame_change'],
                     'color': self.style['formatter.color.frame_change'],
                     'size': self.style['formatter.text_size.annotate'],
                     'va': 'center',
                     'ha': 'center'}
        self.assertDictEqual(obj.styles, ref_style)