Source code for iqm.qdmi.gates

# Copyright (c) 2025 - 2026 IQM Finland Oy
# All rights reserved.
#
# Licensed under the Apache License v2.0 with LLVM Exceptions (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://github.com/iqm-finland/QDMI-on-IQM/blob/main/LICENSE
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

"""Qiskit gates for IQM device-native operations.

This module hosts gate classes that are not part of Qiskit's standard gate
library but are required to represent IQM device-native operations in a Qiskit
:class:`~qiskit.transpiler.Target`.
"""

from __future__ import annotations

try:
    from qiskit.circuit import Gate
except ImportError as e:
    msg = (
        "Failed to import Qiskit. "
        "Ensure that `iqm-qdmi` is installed with the `qiskit` extra, e.g., via `uv pip install iqm-qdmi[qiskit]`."
    )
    raise ImportError(msg) from e

__all__ = ["MoveGate"]


def __dir__() -> list[str]:
    return __all__


[docs] class MoveGate(Gate): """MOVE gate for IQM devices. The MOVE gate transfers the state of a qubit into a computational resonator (or back to the qubit), as used by IQM's star-topology architectures. The gate is intentionally kept opaque so Qiskit does not attempt to decompose it. """ def __init__(self, label: str | None = None) -> None: """Initialize the MOVE gate. Args: label: Optional gate label. """ super().__init__("move", 2, [], label=label)