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)
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 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)
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)
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)
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)