mirror of https://github.com/Qiskit/qiskit.git
Fixed multi parameter bug (#2743)
* Remove repeated parameters * Updated changelog * Update CHANGELOG.md * Adding test * Adding test of CmdDef arguments issue being fixed * Formatting * Formatting * Formatting * Formatting * Formatting
This commit is contained in:
parent
fae93bc413
commit
ae1921a41a
|
@ -96,6 +96,8 @@ The format is based on [Keep a Changelog].
|
|||
|
||||
### Fixed
|
||||
|
||||
- Fixed bug in `Pulse` for multiple parameters being added (\#2742)
|
||||
- Fixed bug in `Pulse` for CmdDef arguments (\#2741)
|
||||
- Fixed bug in `Operator` and `SuperOp` for initializing from circuit
|
||||
containing gates without an explicit matrix definition (\#2723)
|
||||
- Possible to decompose SU(4) gate into non-CNOT basis with
|
||||
|
|
|
@ -376,7 +376,7 @@ class ParameterizedSchedule:
|
|||
|
||||
self._parameterized = tuple(parameterized)
|
||||
self._schedules = tuple(full_schedules)
|
||||
self._parameters = tuple(sorted(parameters))
|
||||
self._parameters = tuple(sorted(set(parameters)))
|
||||
|
||||
@property
|
||||
def parameters(self) -> Tuple[str]:
|
||||
|
|
|
@ -23,10 +23,10 @@ from qiskit.pulse.channels import (DeviceSpecification, PulseChannelSpec, Qubit,
|
|||
from qiskit.pulse.commands import (FrameChange, Acquire, PersistentValue, Snapshot,
|
||||
functional_pulse, Instruction, AcquireInstruction,
|
||||
PulseInstruction, FrameChangeInstruction)
|
||||
from qiskit.pulse import pulse_lib
|
||||
from qiskit.pulse import pulse_lib, SamplePulse, CmdDef
|
||||
from qiskit.pulse.timeslots import TimeslotCollection, Interval
|
||||
from qiskit.pulse.exceptions import PulseError
|
||||
from qiskit.pulse.schedule import Schedule
|
||||
from qiskit.pulse.schedule import Schedule, ParameterizedSchedule
|
||||
from qiskit.test import QiskitTestCase
|
||||
|
||||
|
||||
|
@ -455,6 +455,45 @@ class TestSchedule(QiskitTestCase):
|
|||
|
||||
self.assertEqual(sched.duration, 10)
|
||||
|
||||
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'))
|
||||
|
||||
|
||||
class TestScheduleWithDeviceSpecification(QiskitTestCase):
|
||||
"""Schedule tests."""
|
||||
|
|
Loading…
Reference in New Issue