|
@@ -310,6 +310,25 @@ class GraphState(object): |
|
|
""" |
|
|
""" |
|
|
return self.measure(node, "pz", force, detail) |
|
|
return self.measure(node, "pz", force, detail) |
|
|
|
|
|
|
|
|
|
|
|
def measure_sequence(self, measurements, forces=None, detail=False): |
|
|
|
|
|
""" Measures a sequence of Paulis |
|
|
|
|
|
|
|
|
|
|
|
:param measurements: The sequence of measurements to be made, in the form [(node, basis), ...] |
|
|
|
|
|
:type force: list of tuples |
|
|
|
|
|
:param force: Measurements in quantum mechanics are probabilistic. If you want to force a particular outcome, use the ``force``. List outcome force values in same order as measurements |
|
|
|
|
|
:type force: list |
|
|
|
|
|
:param detail: Provide detailed information |
|
|
|
|
|
:type detail: boolean |
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
|
|
forces = forces if forces != None else [random.choice([0, 1]) for i in range(len(measurements))] |
|
|
|
|
|
measurements = zip(measurements, forces) |
|
|
|
|
|
results = [] |
|
|
|
|
|
for (node, basis), force in measurements: |
|
|
|
|
|
result = self.measure(node, basis, force, detail) |
|
|
|
|
|
results += [result] |
|
|
|
|
|
return results |
|
|
|
|
|
|
|
|
def _toggle_edges(self, a, b): |
|
|
def _toggle_edges(self, a, b): |
|
|
""" Toggle edges between vertex sets a and b """ |
|
|
""" Toggle edges between vertex sets a and b """ |
|
|
# TODO: i'm pretty sure this is just a single-line it.combinations or |
|
|
# TODO: i'm pretty sure this is just a single-line it.combinations or |
|
|