From ccabb2b7b5bc00723f18965caed506f621a2b18c Mon Sep 17 00:00:00 2001 From: Pete Shadbolt Date: Mon, 25 Jul 2016 22:36:46 -0700 Subject: [PATCH] Running Mercedes' example --- abp/graphstate.py | 9 ++++--- abp/static/scripts/materials.js | 2 +- examples/mercedes_demo.py | 48 +++++++++++++++++++++++++++++++++ tests/mercedes.py | 20 ++++++++++++++ 4 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 examples/mercedes_demo.py create mode 100644 tests/mercedes.py diff --git a/abp/graphstate.py b/abp/graphstate.py index bd1783e..1296677 100644 --- a/abp/graphstate.py +++ b/abp/graphstate.py @@ -342,12 +342,13 @@ class GraphState(object): if len(self.node) > 15: raise ValueError("Cannot build state vector: too many qubits") 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(): - state.act_cz(i, j) + state.act_cz(mapping[i], mapping[j]) 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 def to_stabilizer(self): diff --git a/abp/static/scripts/materials.js b/abp/static/scripts/materials.js index 12fe02a..a6d0f5d 100644 --- a/abp/static/scripts/materials.js +++ b/abp/static/scripts/materials.js @@ -1,7 +1,7 @@ var materials = {}; var curveProperties = { - splineDensity: 1, + splineDensity: 10, curvature: 20 }; diff --git a/examples/mercedes_demo.py b/examples/mercedes_demo.py new file mode 100644 index 0000000..4eade52 --- /dev/null +++ b/examples/mercedes_demo.py @@ -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() diff --git a/tests/mercedes.py b/tests/mercedes.py new file mode 100644 index 0000000..601dded --- /dev/null +++ b/tests/mercedes.py @@ -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} + +