| @@ -137,35 +137,44 @@ class GraphState(object): | |||||
| # TODO: put the asserts from graphsim.cpp into tests | # TODO: put the asserts from graphsim.cpp into tests | ||||
| return res | return res | ||||
| def measure_y(self, node, force=None): | |||||
| """ Measure the graph in the Y-basis """ | |||||
| result = force if force != None else random.choice([0, 1]) | |||||
| # Do some rotations | |||||
| rotation = clifford.conjugate("sqz" if result else "msqz") | |||||
| for neighbour in self.adj[node]: | |||||
| self.act_local_rotation(neighbour, rotation) | |||||
| # A sort of local complementation | |||||
| vngbh = set(self.adj[node]) + {node} | |||||
| for i, j in it.combinations(vngbh, 2): | |||||
| self.toggle_edge(i, j) | |||||
| if result: | |||||
| self.act_local_rotation(node, "msqz") | |||||
| else: | |||||
| self.act_local_rotation(node, clifford.conjugate("msqz")) | |||||
| return result | |||||
| def measure_z(self, node, force=None): | def measure_z(self, node, force=None): | ||||
| """ Measure the graph in the Z-basis """ | """ Measure the graph in the Z-basis """ | ||||
| res = force if force != None else random.choice([0, 1]) | |||||
| result = force if force != None else random.choice([0, 1]) | |||||
| # Disconnect | # Disconnect | ||||
| for neighbour in self.adj[node]: | for neighbour in self.adj[node]: | ||||
| self.del_edge(node, neighbour) | self.del_edge(node, neighbour) | ||||
| if res: | |||||
| if result: | |||||
| self.act_local_rotation(neighbour, "pz") | self.act_local_rotation(neighbour, "pz") | ||||
| # Rotate | # Rotate | ||||
| if res: | |||||
| if result: | |||||
| self.act_local_rotation(node, "px") | self.act_local_rotation(node, "px") | ||||
| self.act_local_rotation(node, "hadamard") | |||||
| else: | |||||
| self.act_local_rotation(node, "hadamard") | |||||
| return res | |||||
| def measure_x(self, node, force=None): | |||||
| """ Measure the graph in the X-basis """ | |||||
| # TODO | |||||
| pass | |||||
| def measure_y(self, node, force=None): | |||||
| """ Measure the graph in the Y-basis """ | |||||
| # TODO | |||||
| pass | |||||
| self.act_local_rotation(node, "hadamard") | |||||
| return result | |||||
| def order(self): | def order(self): | ||||
| """ Get the number of qubits """ | """ Get the number of qubits """ | ||||