janus.circuit.qubit 源代码
"""
Janus 量子比特定义
"""
from typing import Optional
[文档]
class Qubit:
"""
量子比特类
Attributes:
index: 量子比特在电路中的索引
register: 所属的量子寄存器(可选)
"""
[文档]
def __init__(self, index: int, register: Optional['QuantumRegister'] = None):
self._index = index
self._register = register
@property
def index(self) -> int:
return self._index
@property
def register(self) -> Optional['QuantumRegister']:
return self._register
def __repr__(self) -> str:
if self._register:
return f"{self._register.name}[{self._index}]"
return f"Qubit({self._index})"
def __eq__(self, other) -> bool:
if isinstance(other, Qubit):
return self._index == other._index
return False
def __hash__(self) -> int:
return hash(self._index)
[文档]
class QuantumRegister:
"""
量子寄存器 - 一组量子比特的集合
Attributes:
size: 寄存器中量子比特的数量
name: 寄存器名称
"""
[文档]
def __init__(self, size: int, name: str = "q"):
self._size = size
self._name = name
self._qubits = [Qubit(i, self) for i in range(size)]
@property
def size(self) -> int:
return self._size
@property
def name(self) -> str:
return self._name
def __len__(self) -> int:
return self._size
def __getitem__(self, index: int) -> Qubit:
if index < 0 or index >= self._size:
raise IndexError(f"Qubit index {index} out of range [0, {self._size})")
return self._qubits[index]
def __iter__(self):
return iter(self._qubits)
def __repr__(self) -> str:
return f"QuantumRegister({self._size}, '{self._name}')"