pyqres.core.utils 源代码

from copy import deepcopy
from typing import Dict, List, Tuple, Union


[文档] def merge_controllers(controller1, controller2): """Merge controller2 into controller1, returning a new dict.""" controller_ret = deepcopy(controller1) for control_type, control_list in controller2.items(): if control_type not in controller_ret: controller_ret[control_type] = [] controller_ret[control_type].extend(control_list) return controller_ret
def controller2str(controller): parts = [] for control_type, control_list in controller.items(): if control_type == 'conditioned_by_nonzero': parts.append(f"conditioned_by_nonzero({', '.join(control_list)})") elif control_type == 'conditioned_by_all_ones': parts.append(f"conditioned_by_all_ones({', '.join(control_list)})") elif control_type == 'conditioned_by_bit': parts.append(f"conditioned_by_bit({', '.join(f'{reg}[{bit}]' for reg, bit in control_list)})") elif control_type == 'conditioned_by_value': parts.append(f"conditioned_by_value({', '.join(f'{reg}=={value}' for reg, value in control_list)})") else: raise ValueError(f"Unknown control type {control_type}") return ", ".join(parts)
[文档] def reg_sz(reg_name): from .metadata import RegisterMetadata register_metadata = RegisterMetadata.get_register_metadata() reginfo = register_metadata.registers.get(reg_name) if reginfo is None: raise ValueError(f"Register {reg_name} not declared") return reginfo
[文档] def get_control_qubit_count(controllers): from .metadata import RegisterMetadata count = 0 for control_type, control_list in controllers.items(): if control_type == 'conditioned_by_bit': count += len(control_list) elif control_type == 'conditioned_by_value': count += sum(reg_sz(cp[0]) for cp in control_list) elif control_type in ('conditioned_by_nonzero', 'conditioned_by_all_ones'): count += sum(reg_sz(cr) for cr in control_list) return count
[文档] def mcx_t_count(ncontrols): """T-count for multi-controlled X gate.""" if ncontrols <= 1: return 0 if ncontrols == 2: return 7 return 16 * 7 * ncontrols