diff --git a/qoolqit/execution/compilation_functions.py b/qoolqit/execution/compilation_functions.py index 5309ce1b2..dff4ba245 100644 --- a/qoolqit/execution/compilation_functions.py +++ b/qoolqit/execution/compilation_functions.py @@ -13,7 +13,6 @@ from qoolqit.drive import DetuningMapModulator, Drive, Waveform from qoolqit.exceptions import CompilationError from qoolqit.register import Register -from qoolqit.waveforms import InterpolatedWaveform class CompilerProfile(Enum): @@ -58,14 +57,6 @@ def _pulser_duration(self, waveform: Waveform) -> int: def convert(self, waveform: Waveform) -> ParamObj | PulserWaveform: """Convert a QoolQit waveform into a equivalent Pulser waveform.""" pulser_duration = self._pulser_duration(waveform) - - # Interpolated to be converted differently because of round off issue: - # see https://github.com/pasqal-io/qoolqit/issues/288 - # see https://github.com/pasqal-io/Pulser/issues/1051 - if isinstance(waveform, InterpolatedWaveform): - wf = waveform._to_pulser(duration=pulser_duration, energy_factor=self._energy) - return wf - return waveform._to_pulser(duration=pulser_duration) * self._energy diff --git a/qoolqit/waveforms/waveforms.py b/qoolqit/waveforms/waveforms.py index d5cadff17..2f76b47fa 100644 --- a/qoolqit/waveforms/waveforms.py +++ b/qoolqit/waveforms/waveforms.py @@ -281,12 +281,10 @@ def __mul__(self, other: float) -> Waveform: def _to_pulser( self, duration: int, - energy_factor: float = 1.0, ) -> ParamObj | pulser.InterpolatedWaveform: - truncated_values = self._values * energy_factor return pulser.InterpolatedWaveform( duration, - values=truncated_values, + values=self._values, times=self._times, interpolator="PchipInterpolator", ) diff --git a/tests/test_waveforms/test_derived_waveforms.py b/tests/test_waveforms/test_derived_waveforms.py index dfa518f92..a7d8765cb 100644 --- a/tests/test_waveforms/test_derived_waveforms.py +++ b/tests/test_waveforms/test_derived_waveforms.py @@ -310,15 +310,19 @@ def test_interpolated_to_pulser() -> None: @pytest.mark.parametrize( "values", [[0.1, 0.3, -0.5, 1.0, 5.7], np.sin(np.linspace(0, 2 * np.pi, 10))] ) -@pytest.mark.parametrize("energy_factor", [0.5, 1.0, np.pi]) -def test_interpolated_to_pulser_energy_factor(values: ArrayLike, energy_factor: float) -> None: +def test_interpolated_to_pulser_samples(values: ArrayLike) -> None: + # regression test for bugs in pulser and qoolqit + # Interpolated converted differently because of round off issue: + # see https://github.com/pasqal-io/qoolqit/issues/288 + # see https://github.com/pasqal-io/Pulser/issues/1051 + interpolated = InterpolatedWaveform(20.46, values=values) - pulser_interpolated = interpolated._to_pulser(duration=20, energy_factor=energy_factor) + pulser_interpolated = interpolated._to_pulser(duration=20) assert isinstance(pulser_interpolated, pulser.InterpolatedWaveform) - # check that pulser values are scaled correctly, within the expected tolerance - expected_pulser_values = np.array(values) * energy_factor + # check that pulser values are stored correctly + expected_pulser_values = np.array(values) np.testing.assert_allclose(pulser_interpolated._values, expected_pulser_values, atol=1e-8) # check that pulser samples are within the expected range