pyqres.primitives.transform 源代码
import pysparq
import sympy as sp
from ..core.operation import Primitive
from ..core.utils import merge_controllers, reg_sz, get_control_qubit_count, mcx_t_count
from ..core.simulator import PyQSparseOperationWrapper
[文档]
class QFT(Primitive):
[文档]
def __init__(self, reg_list, param_list=None):
super().__init__(reg_list, param_list)
self.reg = reg_list[0]
[文档]
def pyqsparse_object(self, dagger_ctx=False, controllers_ctx=None):
controllers_ctx = merge_controllers(self.controllers, controllers_ctx or {})
obj = PyQSparseOperationWrapper(pysparq.QFT(self.reg))
obj.set_dagger(dagger_ctx ^ self.dagger_flag)
obj.set_controller(controllers_ctx)
return obj
[文档]
def t_count(self, dagger_ctx=False, controllers_ctx=None):
ncontrols = get_control_qubit_count(
merge_controllers(self.controllers, controllers_ctx or {}))
n = reg_sz(self.reg)
return (n - 1) * n // 2 * mcx_t_count(ncontrols + 2)
[文档]
class InverseQFT(Primitive):
[文档]
def __init__(self, reg_list, param_list=None):
super().__init__(reg_list, param_list)
self.reg = reg_list[0]
[文档]
def pyqsparse_object(self, dagger_ctx=False, controllers_ctx=None):
controllers_ctx = merge_controllers(self.controllers, controllers_ctx or {})
obj = PyQSparseOperationWrapper(pysparq.inverseQFT(self.reg))
obj.set_dagger(dagger_ctx ^ self.dagger_flag)
obj.set_controller(controllers_ctx)
return obj
[文档]
def t_count(self, dagger_ctx=False, controllers_ctx=None):
ncontrols = get_control_qubit_count(
merge_controllers(self.controllers, controllers_ctx or {}))
n = reg_sz(self.reg)
return (n - 1) * n // 2 * mcx_t_count(ncontrols + 2)
[文档]
class Reflection_Bool(Primitive):
[文档]
def __init__(self, reg_list, param_list):
super().__init__(reg_list=reg_list, param_list=param_list)
self.reg = reg_list[0]
self.inverse = param_list[0]
[文档]
def pyqsparse_object(self, dagger_ctx=False, controllers_ctx=None):
controllers_ctx = merge_controllers(self.controllers, controllers_ctx or {})
obj = PyQSparseOperationWrapper(
pysparq.Reflection_Bool(self.reg, self.inverse))
obj.set_controller(controllers_ctx)
return obj
[文档]
def t_count(self, dagger_ctx=False, controllers_ctx=None):
ncontrols = get_control_qubit_count(
merge_controllers(self.controllers, controllers_ctx or {}))
n = reg_sz(self.reg)
return mcx_t_count(ncontrols + n)