diff --git a/quafu/elements/element_gates/c11.py b/quafu/elements/element_gates/c11.py index 39c4ec2..2d773e1 100644 --- a/quafu/elements/element_gates/c11.py +++ b/quafu/elements/element_gates/c11.py @@ -13,7 +13,7 @@ class _C11Gate(ControlledGate, ABC): ct_dims = (1, 1, 2) -@QuantumGate.register_gate('cx') +@QuantumGate.register('cx') class CXGate(_C11Gate, FixedGate): name = "CX" @@ -22,7 +22,7 @@ def __init__(self, ctrl: int, targ: int): self.symbol = "+" -@QuantumGate.register_gate('cy') +@QuantumGate.register('cy') class CYGate(_C11Gate, FixedGate): name = "CY" @@ -30,7 +30,7 @@ def __init__(self, ctrl: int, targ: int): _C11Gate.__init__(self, "Y", [ctrl], [targ], None, tar_matrix=YMatrix) -@QuantumGate.register_gate('cz') +@QuantumGate.register('cz') class CZGate(_C11Gate, FixedGate): name = "CZ" @@ -38,7 +38,7 @@ def __init__(self, ctrl: int, targ: int): _C11Gate.__init__(self, "Z", [ctrl], [targ], None, tar_matrix=ZMatrix) -@QuantumGate.register_gate('cs') +@QuantumGate.register('cs') class CSGate(_C11Gate, FixedGate): name = "CS" @@ -49,7 +49,7 @@ def to_qasm(self): return "cp(pi/2) " + "q[%d],q[%d]" % (self.pos[0], self.pos[1]) -@QuantumGate.register_gate('ct') +@QuantumGate.register('ct') class CTGate(_C11Gate, FixedGate): name = "CT" @@ -60,7 +60,7 @@ def to_qasm(self): return "cp(pi/4) " + "q[%d],q[%d]" % (self.pos[0], self.pos[1]) -@QuantumGate.register_gate('cp') +@QuantumGate.register('cp') class CPGate(_C11Gate): name = "CP" diff --git a/quafu/elements/element_gates/c12.py b/quafu/elements/element_gates/c12.py index 3a3f447..f336020 100644 --- a/quafu/elements/element_gates/c12.py +++ b/quafu/elements/element_gates/c12.py @@ -1,12 +1,10 @@ -from ..quantum_gate import ControlledGate, FixedGate +from ..quantum_gate import ControlledGate, FixedGate, QuantumGate from quafu.elements.matrices import SwapMatrix +@QuantumGate.register('cswap') class FredkinGate(ControlledGate, FixedGate): name = "CSWAP" def __init__(self, ctrl: int, targ1: int, targ2: int): ControlledGate.__init__(self, "SWAP", [ctrl], [targ1, targ2], None, tar_matrix=SwapMatrix) - - -ControlledGate.register_gate(FredkinGate) diff --git a/quafu/elements/element_gates/clifford.py b/quafu/elements/element_gates/clifford.py index 0aabf8b..e7e099d 100644 --- a/quafu/elements/element_gates/clifford.py +++ b/quafu/elements/element_gates/clifford.py @@ -1,11 +1,12 @@ import numpy as np from quafu.elements.matrices import HMatrix, SMatrix -from ..quantum_gate import SingleQubitGate, FixedGate +from ..quantum_gate import SingleQubitGate, FixedGate, QuantumGate __all__ = ['HGate', 'SGate', 'SdgGate', 'TGate', 'TdgGate'] +@QuantumGate.register('h') class HGate(SingleQubitGate, FixedGate): name = "H" matrix = HMatrix @@ -14,6 +15,7 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('s') class SGate(SingleQubitGate, FixedGate): name = "S" matrix = SMatrix @@ -22,6 +24,7 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('sdg') class SdgGate(SingleQubitGate, FixedGate): name = "Sdg" matrix = SMatrix.conj().T @@ -30,6 +33,7 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('t') class TGate(SingleQubitGate, FixedGate): name = "T" matrix = np.array([[1.0, 0.0], [0.0, np.exp(1.0j * np.pi / 4)]], dtype=complex) @@ -38,16 +42,10 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('tdg') class TdgGate(SingleQubitGate, FixedGate): name = "Tdg" matrix = TGate.matrix.conj().T def __init__(self, pos: int): FixedGate.__init__(self, pos) - - -FixedGate.register_gate(HGate) -FixedGate.register_gate(SGate) -FixedGate.register_gate(SdgGate) -FixedGate.register_gate(TGate) -FixedGate.register_gate(TdgGate) diff --git a/quafu/elements/element_gates/cm1.py b/quafu/elements/element_gates/cm1.py index bf4b6b9..ca217bc 100644 --- a/quafu/elements/element_gates/cm1.py +++ b/quafu/elements/element_gates/cm1.py @@ -4,7 +4,7 @@ __all__ = ['MCXGate', 'MCYGate', 'MCZGate', 'ToffoliGate'] -@QuantumGate.register_gate('mcx') +@QuantumGate.register('mcx') class MCXGate(ControlledGate, FixedGate): name = "MCX" @@ -12,7 +12,7 @@ def __init__(self, ctrls, targ: int): ControlledGate.__init__(self, "X", ctrls, [targ], None, tar_matrix=XMatrix) -@QuantumGate.register_gate('mcy') +@QuantumGate.register('mcy') class MCYGate(ControlledGate, FixedGate): name = "MCY" @@ -20,7 +20,7 @@ def __init__(self, ctrls, targ: int): ControlledGate.__init__(self, "Y", ctrls, [targ], None, tar_matrix=YMatrix) -@QuantumGate.register_gate('mcz') +@QuantumGate.register('mcz') class MCZGate(ControlledGate, FixedGate): name = "MCZ" @@ -28,7 +28,7 @@ def __init__(self, ctrls, targ: int): ControlledGate.__init__(self, "Z", ctrls, [targ], None, tar_matrix=ZMatrix) -@QuantumGate.register_gate('ccx') +@QuantumGate.register('ccx') class ToffoliGate(ControlledGate, FixedGate): name = "CCX" diff --git a/quafu/elements/element_gates/pauli.py b/quafu/elements/element_gates/pauli.py index 6c3dcab..e43af7e 100644 --- a/quafu/elements/element_gates/pauli.py +++ b/quafu/elements/element_gates/pauli.py @@ -1,13 +1,14 @@ import numpy as np from quafu.elements.matrices import XMatrix, YMatrix, ZMatrix, WMatrix, SWMatrix -from quafu.elements.quantum_gate import FixedGate, SingleQubitGate +from quafu.elements.quantum_gate import FixedGate, SingleQubitGate, QuantumGate __all__ = ['IdGate', 'XGate', 'YGate', 'ZGate', 'WGate', 'SWGate', 'SWdgGate', 'SXGate', 'SYGate', 'SXdgGate', 'SYdgGate'] # hint: "SZ" gate is S contained in Clifford gates +@QuantumGate.register('id') class IdGate(FixedGate, SingleQubitGate): name = "Id" matrix = XMatrix @@ -16,6 +17,7 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('x') class XGate(FixedGate, SingleQubitGate): name = "X" matrix = XMatrix @@ -24,6 +26,7 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('y') class YGate(FixedGate, SingleQubitGate): name = "Y" matrix = YMatrix @@ -32,6 +35,7 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('z') class ZGate(FixedGate, SingleQubitGate): name = "Z" matrix = ZMatrix @@ -40,6 +44,7 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('w') class WGate(FixedGate, SingleQubitGate): """ (X+Y)/sqrt(2) """ name = "W" @@ -57,6 +62,7 @@ def to_qasm(self): ) +@QuantumGate.register('sw') class SWGate(FixedGate, SingleQubitGate): name = "SW" matrix = SWMatrix @@ -73,6 +79,7 @@ def to_qasm(self): ) +@QuantumGate.register('swdg') class SWdgGate(FixedGate, SingleQubitGate): name = "SWdg" matrix = SWMatrix @@ -89,6 +96,7 @@ def to_qasm(self): ) +@QuantumGate.register('sx') class SXGate(FixedGate, SingleQubitGate): name = "SX" matrix = np.array( @@ -99,6 +107,7 @@ def __init__(self, pos: int): FixedGate.__init__(self, pos) +@QuantumGate.register('sxdg') class SXdgGate(FixedGate, SingleQubitGate): name = "SXdg" matrix = SXGate.matrix.conj().T @@ -108,6 +117,7 @@ def __init__(self, pos: int): self.symbol = "√X†" +@QuantumGate.register('sy') class SYGate(FixedGate, SingleQubitGate): name = "SY" matrix = np.array( @@ -122,6 +132,7 @@ def to_qasm(self): return "ry(pi/2) q[%d];" % self.pos +@QuantumGate.register('sydg') class SYdgGate(FixedGate, SingleQubitGate): name = "SYdg" matrix = SYGate.matrix.conj().T @@ -134,14 +145,14 @@ def to_qasm(self): return "ry(-pi/2) q[%d]" % self.pos -SingleQubitGate.register_gate(IdGate) -SingleQubitGate.register_gate(XGate) -SingleQubitGate.register_gate(YGate) -SingleQubitGate.register_gate(ZGate) -SingleQubitGate.register_gate(WGate) -SingleQubitGate.register_gate(SWGate) -SingleQubitGate.register_gate(SWdgGate) -SingleQubitGate.register_gate(SXGate) -SingleQubitGate.register_gate(SXdgGate) -SingleQubitGate.register_gate(SYGate) -SingleQubitGate.register_gate(SYdgGate) +# SingleQubitGate.register_gate(IdGate) +# SingleQubitGate.register_gate(XGate) +# SingleQubitGate.register_gate(YGate) +# SingleQubitGate.register_gate(ZGate) +# SingleQubitGate.register_gate(WGate) +# SingleQubitGate.register_gate(SWGate) +# SingleQubitGate.register_gate(SWdgGate) +# SingleQubitGate.register_gate(SXGate) +# SingleQubitGate.register_gate(SXdgGate) +# SingleQubitGate.register_gate(SYGate) +# SingleQubitGate.register_gate(SYdgGate) diff --git a/quafu/elements/element_gates/swap.py b/quafu/elements/element_gates/swap.py index 1cb0952..d0ea21d 100644 --- a/quafu/elements/element_gates/swap.py +++ b/quafu/elements/element_gates/swap.py @@ -1,4 +1,4 @@ -from ..quantum_gate import FixedGate, MultiQubitGate +from ..quantum_gate import FixedGate, MultiQubitGate, QuantumGate from quafu.elements.matrices import ISwapMatrix, SwapMatrix from typing import Dict @@ -6,6 +6,7 @@ __all__ = ['ISwapGate', 'SwapGate'] +@QuantumGate.register('iswap') class ISwapGate(FixedGate, MultiQubitGate): name = "iSWAP" matrix = ISwapMatrix @@ -22,6 +23,7 @@ def named_pos(self) -> Dict: return {'pos': self.pos} +@QuantumGate.register('swap') class SwapGate(FixedGate, MultiQubitGate): name = "SWAP" matrix = SwapMatrix @@ -36,7 +38,3 @@ def get_targ_matrix(self, reverse_order=False): @property def named_pos(self) -> Dict: return {'pos': self.pos} - - -FixedGate.register_gate(ISwapGate) -FixedGate.register_gate(SwapGate)