| @@ -342,12 +342,13 @@ class GraphState(object): | |||||
| if len(self.node) > 15: | if len(self.node) > 15: | ||||
| raise ValueError("Cannot build state vector: too many qubits") | raise ValueError("Cannot build state vector: too many qubits") | ||||
| state = qi.CircuitModel(len(self.node)) | state = qi.CircuitModel(len(self.node)) | ||||
| for i in range(len(self.node)): | |||||
| state.act_hadamard(i) | |||||
| mapping = {node: i for i, node in enumerate(sorted(self.node))} | |||||
| for n in self.node: | |||||
| state.act_hadamard(mapping[n]) | |||||
| for i, j in self.edgelist(): | for i, j in self.edgelist(): | ||||
| state.act_cz(i, j) | |||||
| state.act_cz(mapping[i], mapping[j]) | |||||
| for i, n in self.node.items(): | for i, n in self.node.items(): | ||||
| state.act_local_rotation(i, clifford.unitaries[n["vop"]]) | |||||
| state.act_local_rotation(mapping[i], clifford.unitaries[n["vop"]]) | |||||
| return state | return state | ||||
| def to_stabilizer(self): | def to_stabilizer(self): | ||||
| @@ -1,7 +1,7 @@ | |||||
| var materials = {}; | var materials = {}; | ||||
| var curveProperties = { | var curveProperties = { | ||||
| splineDensity: 1, | |||||
| splineDensity: 10, | |||||
| curvature: 20 | curvature: 20 | ||||
| }; | }; | ||||
| @@ -0,0 +1,48 @@ | |||||
| from abp.fancy import GraphState as FGS | |||||
| import abp | |||||
| from abp.util import xyz | |||||
| def linear_cluster(n): | |||||
| g = FGS(range(n), deterministic=True) | |||||
| g.act_circuit([(i, "hadamard") for i in range(n)]) | |||||
| g.act_circuit([((i, i+1), "cz") for i in range(n-1)]) | |||||
| return g | |||||
| def test_mercedes_example_1(): | |||||
| """ Run an example provided by mercedes """ | |||||
| g = linear_cluster(5) | |||||
| g.measure(3, "px", 1) | |||||
| g.measure(2, "px", 0) | |||||
| g.remove_nodes_from((2, 3)) | |||||
| print g.node | |||||
| g = linear_cluster(5) | |||||
| g.measure(2, "px", 0) | |||||
| g.measure(3, "px", 0) | |||||
| g.remove_vop(0, 1) | |||||
| g.remove_vop(1, 0) | |||||
| g.remove_nodes_from((2, 3)) | |||||
| a = g.to_state_vector() | |||||
| print g.node | |||||
| g = linear_cluster(5) | |||||
| g.measure(2, "px", 0) | |||||
| g.measure(3, "px", 1) | |||||
| g.remove_vop(0, 1) | |||||
| g.remove_vop(1, 0) | |||||
| g.remove_nodes_from((2, 3)) | |||||
| b = g.to_state_vector() | |||||
| print g.node | |||||
| if __name__ == '__main__': | |||||
| test_mercedes_example_1() | |||||
| @@ -0,0 +1,20 @@ | |||||
| from abp import GraphState | |||||
| from abp.util import xyz | |||||
| def linear_cluster(n): | |||||
| g = GraphState(range(n)) | |||||
| g.act_circuit([(i, "hadamard") for i in range(n)]) | |||||
| g.act_circuit([((i, i+1), "cz") for i in range(n-1)]) | |||||
| return g | |||||
| def test_mercedes_example_1(): | |||||
| """ Run an example provided by mercedes """ | |||||
| g = linear_cluster(5) | |||||
| g.measure(3, "px") | |||||
| g.measure(2, "px") | |||||
| assert set(g.adj[0]) == {1} | |||||
| assert set(g.adj[1]) == {0, 4} | |||||
| assert set(g.adj[4]) == {1} | |||||