diff --git a/lib_q_computer_math.py b/lib_q_computer_math.py index ee8e28c..117dc22 100644 --- a/lib_q_computer_math.py +++ b/lib_q_computer_math.py @@ -231,6 +231,18 @@ class State(Vector): return "{:0" + str(int(np.ceil(np.log2(len(self))))) + "b}" def measure(self): + """ + Measures in the computational basis + TODO: Generalize the method so it takes a basis + TODO: Should we memoize the result? Should we memoize per basis? + If it's measured twice, should it return the same state? + What about if measured twice but in different bases? + E.g. measure1 -> computation -> A + measure2 -> +/- basis -> B + measure3 -> computation -> should it return A again or random weighted? + measure4 -> +/- basis -> should it return B again or random weighted? + :return: binary representation of the measured qubit (e.g. "011") + """ weights = [self.get_prob(j) for j in range(len(self))] format_str = self.get_fmt_of_element() choices = [format_str.format(i) for i in range(len(weights))] @@ -239,13 +251,15 @@ class State(Vector): def measure_with_op(self, mo): """ Measures with a measurement operator mo - TODO: Can't define mo: MeasurementOperator because in python you can't declare classes before defining them + TODO: Can't define `mo: MeasurementOperator` because in python you can't declare classes before defining them """ m = mo.on(self) / np.sqrt(mo.get_prob(self)) return State(m) def measure_n(self, n=1): - """measures n times""" + """measures n times + TODO: Does this make sense? When a state is measured once, it should "collapse" + """ measurements = defaultdict(int) for _ in range(n): k = self.measure()