From ab1dbcf7cb85b8fb39181bf0a2d3f6d8b469ceb3 Mon Sep 17 00:00:00 2001 From: Didictateur Date: Mon, 23 Oct 2023 11:15:57 +0200 Subject: [PATCH] begin exceptions --- QElephant/QuBit.py | 123 +++++++++++++++++- QElephant/__pycache__/Matrix.cpython-311.pyc | Bin 0 -> 7709 bytes QElephant/__pycache__/QuBit.cpython-311.pyc | Bin 0 -> 21133 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 160 bytes 4 files changed, 118 insertions(+), 5 deletions(-) create mode 100644 QElephant/__pycache__/Matrix.cpython-311.pyc create mode 100644 QElephant/__pycache__/QuBit.cpython-311.pyc create mode 100644 QElephant/__pycache__/__init__.cpython-311.pyc diff --git a/QElephant/QuBit.py b/QElephant/QuBit.py index 0e4748a..4b0d769 100644 --- a/QElephant/QuBit.py +++ b/QElephant/QuBit.py @@ -9,6 +9,11 @@ I = complex(0, 1) class MuBit: def __init__(self, n: int=2) -> None: + if type(n) is not int: + raise TypeError(f"number of state must be an intergers, not {type(n)}") + if not n >= 2: + raise ValueError("a MuBit must have at least two intricated QuBit") + self.__n = n self.__state: list[complex] = [0]*(2**self.__n) self.__state[0] = 1 @@ -34,8 +39,14 @@ class MuBit: def __set(self, i: int, value: int) -> None: """Set the nth QuBit into value""" - assert(value in {0, 1}) + if type(i) is not int: + raise TypeError(f"MuBit indices must be integers, not {type(i)}") + if i > self.__n: + raise IndexError("MuBit index out of range") + if not value in {0, 1}: + raise ValueError(f"QuBit state must be 0 or 1, not {value}") + i = i%self.__n M = Matrix([[1]]) for j in range(self.__n): if j == i: @@ -50,12 +61,26 @@ class MuBit: return iter([IQuBit(i, self) for i in range(self.__n)]) def __getitem__(self, item: int) -> "QuBit": + if type(item) is not int: + raise TypeError(f"MuBit indices must be integers, not {type(item)}") + if item > self.__n: + raise IndexError("MuBit index out of range") + + item = item%self.__n return IQuBit(item, self) def __apply(self, i: int, matrix: Matrix) -> None: + if type(i) is not int: + raise TypeError(f"MuBit indices must be integers, not {type(i)}") + if i > self.__n: + raise IndexError("MuBit index out of range") + if type(matrix) is not Matrix: + raise TypeError(f"can only manipulate MuBit with Matrix, not {type(matrix)}") + i = i%self.__n + M = Matrix([[1]]) - for j in range(self.n): + for j in range(self.__n): if j == i: M *= matrix else: @@ -64,6 +89,14 @@ class MuBit: self.__state = M._Matrix__apply(self.__state) def __mapply(self, matrix: Matrix, i: int) -> None: + if type(i) is not int: + raise TypeError(f"MuBit indices must be integers, not {type(i)}") + if i > self.__n: + raise IndexError("MuBit index out of range") + if type(matrix) is not Matrix: + raise TypeError(f"can only manipulate MuBit with Matrix, not {type(matrix)}") + i = i%self.__n + M = Matrix([[1]]) j = 0 while j < self.__n: @@ -77,6 +110,12 @@ class MuBit: def __getProb(self, i: int) -> float: """Probs for i to be zero""" + if type(i) is not int: + raise TypeError(f"MuBit indices must be integers, not {type(i)}") + if i > self.__n: + raise IndexError("MuBit index out of range") + i = i%self.__n + M = Matrix([[1]]) for j in range(self.__n): @@ -94,10 +133,33 @@ class MuBit: l.append(IQuBit(i, self).observe()) return l + @staticmethod + def intricateThem(*args: "QuBit") -> "MuBit": + for q in args: + if type(q) is IQuBit: + raise TypeError("cannot intricate QuBit that are already intricated") + if type(q) is not QuBit: + raise TypeError(f"cannot intricate QuBit and {type(q)}") + if len(args) < 2: + raise ValueError("cannot intricate less than two QuBits") + + S = Matrix([[1]]) + for q in args: + S *= Matrix([q._QuBit__state]) + + mq = MuBit(len(args)) + mq._MuBit__state = S._Matrix__m[0] + return mq + class QuBit: def __init__(self, alpha: complex=1, beta: complex=0): + if type(alpha) not in {int, float, complex}: + TypeError(f"QuBit state must be int, float or complex, not {type(alpha)}") + if type(beta) not in {int, float, complex}: + TypeError(f"QuBit state must be int, float or complex, not {type(alpha)}") if abs(alpha)**2 + abs(beta)**2 != 1: - raise Exception("The initial state must be normalized") + raise ValueError(f"the initial state must be normalized. Here, |alpha|**2+|beta|**2={abs(alpha)**2 + abs(beta)**2}") + self.__state = [alpha, beta] self.__intricated = False @@ -111,6 +173,9 @@ class QuBit: return f"{round(self.__state[0], 3)} |0> + {round(self.__state[1], 3)} |1>" def __apply(self, matrix: Matrix) -> None: + if type(matrix) is not Matrix: + raise TypeError(f"can only manipulate QuBit with Matrix, not {type(matrix)}") + self.__state = matrix._Matrix__apply(self.__state) def observe(self) -> list[int]: @@ -123,6 +188,14 @@ class QuBit: class IQuBit(QuBit): def __init__(self, n: int, mb: MuBit) -> None: + if type(n) is not int: + raise TypeError(f"MuBit indices must be interger, not {type(n)}") + if n > mb._MuBit__n: + raise ValueError(f"MuBit index out of range") + if type(mb) is not MuBit: + TypeError(f"an intricate QuBit should be associated with a MuBit, not a {type(mb)}") + n = n%mb._MuBit__n + super().__init__() self.__n = n self.__muBit = mb @@ -139,6 +212,9 @@ class IQuBit(QuBit): return str(QuBit(math.sqrt(p), math.sqrt(1-p))) def __apply(self, matrix: Matrix) -> None: + if type(matrix) is not Matrix: + raise TypeError(f"can only manipulate QuBit with Matrix, not {type(matrix)}") + self.__muBit._MuBit__apply(self.__n, matrix) def observe(self) -> int: @@ -160,62 +236,98 @@ def H(q: QuBit) -> None: q._IQuBit__apply(Matrix.H()) elif type(q) == QuBit: q._QuBit__apply(Matrix.H()) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def X(q: QuBit) -> None: if type(q) == IQuBit: q._IQuBit__apply(Matrix.X()) elif type(q) == QuBit: q._QuBit__apply(Matrix.X()) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def Y(q: QuBit) -> None: if type(q) == IQuBit: q._IQuBit__apply(Matrix.Y()) elif type(q) == QuBit: q._QuBit__apply(Matrix.Y()) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def Z(q: QuBit) -> None: if type(q) == IQuBit: q._IQuBit__apply(Matrix.Z()) elif type(q) == QuBit: q._QuBit__apply(Matrix.Z()) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def S(q: QuBit) -> None: if type(q) == IQuBit: q._IQuBit__apply(Matrix.S()) elif type(q) == QuBit: q._QuBit__apply(Matrix.S()) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def T(q: QuBit) -> None: if type(q) == IQuBit: q._IQuBit__apply(Matrix.T()) elif type(q) == QuBit: q._QuBit__apply(Matrix.T()) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def Rx(q: QuBit, phi: float) -> None: + if type(phi) not in {int, float}: + TypeError(f"an angle must be integer or float, not {type(phi)}") + if type(q) == QuBit: q._QuBit__apply(Matrix.Rx(phi)) elif type(q) == IQuBit: q._IQuBit__apply(Matrix.Rx(phi)) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def Ry(q: QuBit, phi: float) -> None: + if type(phi) not in {int, float}: + TypeError(f"an angle must be integer or float, not {type(phi)}") + if type(q) == QuBit: q._QuBit__apply(Matrix.Ry(phi)) elif type(q) == IQuBit: q._IQuBit__apply(Matrix.Ry(phi)) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def Rz(q: QuBit, phi: float) -> None: + if type(phi) not in {int, float}: + TypeError(f"an angle must be integer or float, not {type(phi)}") + if type(q) == QuBit: q._QuBit__apply(Matrix.Rz(phi)) elif type(q) == IQuBit: q._IQuBit__apply(Matrix.Rz(phi)) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def R1(q: QuBit, phi: float) -> None: + if type(phi) not in {int, float}: + TypeError(f"an angle must be integer or float, not {type(phi)}") + if type(q) == QuBit: q._QuBit__apply(Matrix.R1(phi)) elif type(q) == IQuBit: q._IQuBit__apply(Matrix.R1(phi)) + else: + raise TypeError(f"a QuBit was expected, but a {type(q)} was given") def CNOT(q: MuBit, n1: int, n2: int) -> None: + if type(q) is not MuBit: + TypeError(f"a MuBit was expected, but a {type(q)} was given") + if type() + SWAP(q, 0, n1) SWAP(q, 1, n2) q._MuBit__mapply(Matrix.CNOT(), 0) @@ -246,5 +358,6 @@ def test(q: QuBit) -> None: print(varName) if __name__=="__main__": - q = MuBit(3) - s = q[1].get_Mubit() \ No newline at end of file + q = MuBit(2) + + print(q[0]) \ No newline at end of file diff --git a/QElephant/__pycache__/Matrix.cpython-311.pyc b/QElephant/__pycache__/Matrix.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..423f0273aea8846bc27ce7930812d8d4f60e1b79 GIT binary patch literal 7709 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 akGID6Ot!uJ`1s>v?6c_P#CnuuH1xmI?(A{^ literal 0 HcmV?d00001 diff --git a/QElephant/__pycache__/__init__.cpython-311.pyc b/QElephant/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9a2237e1b40fde2b7ec96272eeb90e2f23882c5 GIT binary patch literal 160 zcmZ3^%ge<81bm#@sUZ3>h=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09t%UC}nKQ~oB zF{LOoHBaBEv?w*PR6o!)C$%6WF|P!P6(66Omst`YuUAm{i^C>2KczG$)vkyYXa>lZ VVtyd;ftit!@dE>lC}IYR0Ra6iBZU9} literal 0 HcmV?d00001