Skip to content

Commit 4a0ba2e

Browse files
committed
Added unit tests for Gaussian OpenPulse generator. The tests cover generation, overrides, and unrolling.
1 parent 37a82a2 commit 4a0ba2e

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

tests/test_gaussian.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Copyright 2025 qBraid
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
"""Tests for the Gaussian OpenPulse waveform generator."""
16+
17+
from __future__ import annotations
18+
19+
import pyqasm
20+
import pytest
21+
22+
from qbraid_algorithms.openpulse import GaussianPulse, PulseParams, generate_program
23+
24+
25+
def test_generate_program_dumps_contains_expected_sections() -> None:
26+
"""Verify generated OpenPulse program contains expected QASM sections."""
27+
pulse = GaussianPulse(amplitude=1.0 + 2.0j, duration="16ns", sigma="4ns")
28+
params = PulseParams(frame_frequency=5.0e9, frame_phase=0.0, defcal_name="play_gaussian", qubit=0)
29+
30+
module = generate_program(pulse, params=params)
31+
qasm = pyqasm.dumps(module)
32+
33+
assert 'defcalgrammar "openpulse";' in qasm
34+
assert "cal {" in qasm
35+
assert "port d0;" in qasm
36+
assert "frame driveframe = newframe(d0, 5000000000.0, 0.0);" in qasm
37+
assert "waveform wf = gaussian(1.0 + 2.0im, 16ns, 4ns);" in qasm
38+
assert "defcal play_gaussian" in qasm
39+
assert "play(driveframe, wf);" in qasm
40+
41+
42+
def test_generate_program_kwargs_override_names() -> None:
43+
"""Verify kwargs correctly override parameters."""
44+
pulse = GaussianPulse(amplitude=0.5 + 0.0j, duration="8ns", sigma="2ns")
45+
params = PulseParams(frame_frequency=5.0e9, frame_phase=0.0, defcal_name="play_gaussian", qubit=0)
46+
47+
module = generate_program(
48+
pulse,
49+
params=params,
50+
frame_name="driveframe2",
51+
waveform_name="wf2",
52+
port_name="d1",
53+
)
54+
qasm = pyqasm.dumps(module)
55+
56+
assert "port d1;" in qasm
57+
assert "frame driveframe2 = newframe(d1, 5000000000.0, 0.0);" in qasm
58+
assert "waveform wf2 = gaussian(0.5 + 0.0im, 8ns, 2ns);" in qasm
59+
assert "play(driveframe2, wf2);" in qasm
60+
61+
62+
def test_unroll_succeeds_when_pulse_dependencies_present() -> None:
63+
"""
64+
Unrolling requires the OpenPulse parser dependency.
65+
66+
In CI this should be available via the `pulse` extra (pyqasm[pulse]).
67+
"""
68+
pulse = GaussianPulse(amplitude=1.0 + 2.0j, duration="16ns", sigma="4ns")
69+
params = PulseParams(frame_frequency=5.0e9, frame_phase=0.0, defcal_name="play_gaussian", qubit=0)
70+
71+
module = generate_program(pulse, params=params)
72+
73+
try:
74+
module.unroll()
75+
except ModuleNotFoundError as exc:
76+
pytest.skip(f"OpenPulse parser dependency not installed: {exc}")
77+
78+
qasm = pyqasm.dumps(module)
79+
assert "qubit[1] __PYQASM_QUBITS__;" in qasm

0 commit comments

Comments
 (0)