Source code for qudas.gate.block

from typing import List, Optional
from qudas.gate.gate_ir import QdGateIR


# 量子回路ブロック(SDK 非依存・構造表現用)
[docs]class QdGateBlock: """量子回路ブロック(SDK 非依存・構造表現用)。""" def __init__( self, gates: List[QdGateIR], num_qubits: Optional[int] = None, label: str = "block", ): """量子回路ブロック(SDK 非依存・構造表現用)。 Parameters ---------- gates : List[QdGateIR] ブロックに含まれるゲートのリスト。 num_qubits : int, optional ブロックに含まれる量子ビットの数。 label : str, optional ブロックのラベル。 Raises: TypeError: gates に QdGateIR のリスト以外を渡した場合。 TypeError: num_qubits に int 以外を渡した場合。 """ if not all(isinstance(gate, QdGateIR) for gate in gates): raise TypeError("gates には QdGateIR のリストを渡してください。") if num_qubits is None: num_qubits = self._infer_num_qubits(gates) elif not isinstance(num_qubits, int): raise TypeError("num_qubits には int を渡してください。") self.gates = gates self.num_qubits = num_qubits self.label = label def _infer_num_qubits(self, gates: List[QdGateIR]) -> int: max_index = -1 for g in gates: for idx in g.targets + g.controls: # 複数対応 max_index = max(max_index, idx) return max_index + 1 # 0-indexed → qubit数は +1
[docs] def to_ir(self): """IR として返す(簡易ユーティリティ)。""" from qudas.gate.ir import QdAlgorithmIR # 遅延インポートで依存を最小化 return QdAlgorithmIR(gates=self.gates)
def __iter__(self): """`for gate in block` と書けるようにイテレータを実装。""" return iter(self.gates) def __repr__(self): return f"QdGateBlock(label={self.label!r}, num_qubits={self.num_qubits}, gates={len(self.gates)} ops)"
# Alias for backward compatibility / shorthand QdBlock = QdGateBlock