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