diff --git a/qupulse/pulses/mapping_pulse_template.py b/qupulse/pulses/mapping_pulse_template.py index 824a60e62..a9ff5a0f1 100644 --- a/qupulse/pulses/mapping_pulse_template.py +++ b/qupulse/pulses/mapping_pulse_template.py @@ -201,7 +201,10 @@ def defined_channels(self) -> Set[ChannelID]: @property def duration(self) -> Expression: - return self.__template.duration.evaluate_symbolic(self.__parameter_mapping) + return self.__template.duration.evaluate_symbolic( + {parameter_name: expression.underlying_expression + for parameter_name, expression in self.__parameter_mapping.items()} + ) def get_serialization_data(self, serializer: Optional[Serializer]=None) -> Dict[str, Any]: data = super().get_serialization_data(serializer) diff --git a/tests/pulses/mapping_pulse_template_tests.py b/tests/pulses/mapping_pulse_template_tests.py index 6248a391b..2a70c78da 100644 --- a/tests/pulses/mapping_pulse_template_tests.py +++ b/tests/pulses/mapping_pulse_template_tests.py @@ -253,6 +253,15 @@ def test_integral(self) -> None: self.assertEqual({'a': Expression('2*f'), 'B': Expression('-3.2*f+2.3')}, pulse.integral) + def test_duration(self): + seconds2ns = 1e9 + pulse_duration = 1.0765001496284785e-07 + + dpt = DummyPulseTemplate(duration=Expression('duration'), parameter_names={'duration'}, + defined_channels={'A'}) + mpt = MappingPulseTemplate(dpt, parameter_mapping={'duration': seconds2ns * pulse_duration}) + self.assertEqual(seconds2ns * pulse_duration, mpt.duration) + def test_drop_channel(self): dummy = DummyPulseTemplate(defined_channels={'A', 'B', 'C', 'D'}, parameter_names={'k', 'f', 'b'})