File size: 1,594 Bytes
9f8cf99 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | """Boundary tests for qhybrid circuit converter registry contracts."""
import json
import pytest
from qhybrid_kernels.circuit import (
QHYBRID_PAYLOAD_VERSION,
QhybridGatePayload,
get_supported_qiskit_gates,
qiskit_to_qhybrid_json,
register_gate_converter,
)
class _DummyOperation:
def __init__(self, params: list[float]):
self.params = params
def test_register_gate_converter_rejects_invalid_arity():
with pytest.raises(ValueError):
register_gate_converter("bad", "X", arity=0)
with pytest.raises(ValueError):
register_gate_converter("bad", "X", arity=4)
def test_register_gate_converter_registers_and_converts_payload():
converter = register_gate_converter("custom_rot", "RX", arity=1, expected_params=1)
payload = converter(_DummyOperation([0.25]), [2])
assert payload == QhybridGatePayload(
gate_type={"RX": 0.25},
qubits=[2],
parameters=[0.25],
)
assert "custom_rot" in get_supported_qiskit_gates()
with pytest.raises(ValueError):
converter(_DummyOperation([]), [2])
def test_supported_gate_registry_exposes_deterministic_order():
supported = get_supported_qiskit_gates()
assert supported == sorted(supported)
def test_qiskit_to_qhybrid_json_includes_schema_version():
pytest.importorskip("qiskit")
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
payload = json.loads(qiskit_to_qhybrid_json(qc))
assert payload["schema_version"] == QHYBRID_PAYLOAD_VERSION
assert payload["n_qubits"] == 2
|