def test_negative_phases(self): """Test bind parameters with negative values.""" cmd_def = CmdDef() converter = QobjToInstructionConverter([]) qobjs = [PulseQobjInstruction(name='fc', ch='d0', t0=10, phase='P1'), PulseQobjInstruction(name='fc', ch='d0', t0=20, phase='-(P2)')] converted_instruction = [converter(qobj) for qobj in qobjs] cmd_def.add('inst_seq', 0, ParameterizedSchedule(*converted_instruction, name='inst_seq')) sched = cmd_def.get('inst_seq', 0, -1, 2) self.assertEqual(sched.instructions[0][-1].command.phase, -1) self.assertEqual(sched.instructions[1][-1].command.phase, -2)
def test_pop(self): """Test pop with default.""" sched = Schedule() sched.append(SamplePulse(np.ones(5))(self.config.drive(0))) cmd_def = CmdDef() cmd_def.add('tmp', 0, sched) cmd_def.pop('tmp', 0) self.assertFalse(cmd_def.has('tmp', 0)) with self.assertRaises(PulseError): cmd_def.pop('not_there', (0, ))
def build_cmd_def(self): """Construct the `CmdDef` object for the backend. Returns: CmdDef: `CmdDef` instance generated from defaults """ return CmdDef.from_defaults(self.cmd_def, self.pulse_library)
def test_parameterized_schedule(self): """Test building parameterized schedule.""" cmd_def = CmdDef() converter = QobjToInstructionConverter([], buffer=0) qobj = PulseQobjInstruction(name='pv', ch='u1', t0=10, val='P2*cos(np.pi*P1)') converted_instruction = converter(qobj) cmd_def.add('pv_test', 0, converted_instruction) self.assertEqual(cmd_def.get_parameters('pv_test', 0), ('P1', 'P2')) sched = cmd_def.get('pv_test', 0, '0', P2=-1) self.assertEqual(sched.instructions[0][-1].command.value, -1) with self.assertRaises(PulseError): cmd_def.get('pv_test', 0, '0', P1=-1) sched = cmd_def.pop('pv_test', 0, '0', P2=-1) self.assertEqual(sched.instructions[0][-1].command.value, -1) self.assertFalse(cmd_def.has('pv_test', 0))
def test_add(self): """Test `add`, `has`, `get`, `cmdss`.""" sched = Schedule() sched.append(SamplePulse(np.ones(5))(self.config.drive(0))) cmd_def = CmdDef() cmd_def.add('tmp', 1, sched) cmd_def.add('tmp', 0, sched) self.assertEqual(sched.instructions, cmd_def.get('tmp', (0,)).instructions) self.assertIn('tmp', cmd_def.cmds()) self.assertEqual(cmd_def.cmd_qubits('tmp'), [(0,), (1,)])
def test_filter(self): """Test _filter method.""" device = self.two_qubit_device lp0 = self.linear(duration=3, slope=0.2, intercept=0.1) sched = Schedule(name='fake_experiment') sched = sched.insert(0, lp0(device.drives[0])) sched = sched.insert(10, lp0(device.drives[1])) sched = sched.insert(30, FrameChange(phase=-1.57)(device.drives[0])) for i in sched._filter([lambda x: True]).instructions: self.assertTrue(i in sched.instructions) self.assertEqual(len(sched._filter([lambda x: False]).instructions), 0) self.assertEqual( len(sched._filter([lambda x: x[0] < 30]).instructions), 2) def my_test_par_sched_one(x, y, z): result = PulseInstruction( SamplePulse(np.array([x, y, z]), name='sample'), device.drives[0]) return 0, result def my_test_par_sched_two(x, y, z): result = PulseInstruction( SamplePulse(np.array([x, y, z]), name='sample'), device.drives[0]) return 5, result par_sched_in_0 = ParameterizedSchedule(my_test_par_sched_one, parameters={ 'x': 0, 'y': 1, 'z': 2 }) par_sched_in_1 = ParameterizedSchedule(my_test_par_sched_two, parameters={ 'x': 0, 'y': 1, 'z': 2 }) par_sched = ParameterizedSchedule(par_sched_in_0, par_sched_in_1) cmd_def = CmdDef() cmd_def.add('test', 0, par_sched) actual = cmd_def.get('test', 0, 0.01, 0.02, 0.03) expected = par_sched_in_0.bind_parameters(0.01, 0.02, 0.03) |\ par_sched_in_1.bind_parameters(0.01, 0.02, 0.03) self.assertEqual(actual.start_time, expected.start_time) self.assertEqual(actual.stop_time, expected.stop_time) self.assertEqual(cmd_def.get_parameters('test', 0), ('x', 'y', 'z'))
def test_multiple_parameters_not_returned(self): """Constructing ParameterizedSchedule object from multiple ParameterizedSchedules sharing arguments should not produce repeated parameters in resulting ParameterizedSchedule object.""" device = self.two_qubit_device def my_test_par_sched_one(x, y, z): result = PulseInstruction( SamplePulse(np.array([x, y, z]), name='sample'), device.drives[0]) return 0, result def my_test_par_sched_two(x, y, z): result = PulseInstruction( SamplePulse(np.array([x, y, z]), name='sample'), device.drives[0]) return 5, result par_sched_in_0 = ParameterizedSchedule(my_test_par_sched_one, parameters={ 'x': 0, 'y': 1, 'z': 2 }) par_sched_in_1 = ParameterizedSchedule(my_test_par_sched_two, parameters={ 'x': 0, 'y': 1, 'z': 2 }) par_sched = ParameterizedSchedule(par_sched_in_0, par_sched_in_1) cmd_def = CmdDef() cmd_def.add('test', 0, par_sched) actual = cmd_def.get('test', 0, 0.01, 0.02, 0.03) expected = par_sched_in_0.bind_parameters(0.01, 0.02, 0.03) |\ par_sched_in_1.bind_parameters(0.01, 0.02, 0.03) self.assertEqual(actual.start_time, expected.start_time) self.assertEqual(actual.stop_time, expected.stop_time) self.assertEqual(cmd_def.get_parameters('test', 0), ('x', 'y', 'z'))
def test_repr(self): """Test repr.""" sched = Schedule() sched.append(SamplePulse(np.ones(5))(self.config.drive(0))) cmd_def = CmdDef({('tmp', 0): sched}) repr(cmd_def)
def test_init(self): """Test `init`, `has`.""" sched = Schedule() sched.append(SamplePulse(np.ones(5))(self.config.drive(0))) cmd_def = CmdDef({('tmp', 0): sched}) self.assertTrue(cmd_def.has('tmp', 0))
def test_sequenced_parameterized_schedule(self): """Test parametrized schedule consist of multiple instruction. """ cmd_def = CmdDef() converter = QobjToInstructionConverter([]) qobjs = [ PulseQobjInstruction(name='fc', ch='d0', t0=10, phase='P1'), PulseQobjInstruction(name='fc', ch='d0', t0=20, phase='P2'), PulseQobjInstruction(name='fc', ch='d0', t0=30, phase='P3') ] converted_instruction = [converter(qobj) for qobj in qobjs] cmd_def.add( 'inst_seq', 0, ParameterizedSchedule(*converted_instruction, name='inst_seq')) with self.assertRaises(PulseError): cmd_def.get('inst_seq', 0, P1=1, P2=2, P3=3, P4=4, P5=5) with self.assertRaises(PulseError): cmd_def.get('inst_seq', 0, P1=1) with self.assertRaises(PulseError): cmd_def.get('inst_seq', 0, 1, 2, 3, P1=1) sched = cmd_def.get('inst_seq', 0, 1, 2, 3) self.assertEqual(sched.instructions[0][-1].command.phase, 1) self.assertEqual(sched.instructions[1][-1].command.phase, 2) self.assertEqual(sched.instructions[2][-1].command.phase, 3) sched = cmd_def.get('inst_seq', 0, P1=1, P2=2, P3=3) self.assertEqual(sched.instructions[0][-1].command.phase, 1) self.assertEqual(sched.instructions[1][-1].command.phase, 2) self.assertEqual(sched.instructions[2][-1].command.phase, 3) sched = cmd_def.get('inst_seq', 0, 1, 2, P3=3) self.assertEqual(sched.instructions[0][-1].command.phase, 1) self.assertEqual(sched.instructions[1][-1].command.phase, 2) self.assertEqual(sched.instructions[2][-1].command.phase, 3)