Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions qoolqit/execution/compilation_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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


Expand Down
4 changes: 1 addition & 3 deletions qoolqit/waveforms/waveforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)
14 changes: 9 additions & 5 deletions tests/test_waveforms/test_derived_waveforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading