From 54c6cf5c1e1db52ebc0775023b7f64b82b7678b3 Mon Sep 17 00:00:00 2001 From: John van de Wetering Date: Thu, 22 Feb 2024 11:57:58 +0100 Subject: [PATCH] Fixes bug in `to_graph_like`. See #195 --- pyzx/simplify.py | 21 ++++++++++++++------- tests/test_simplify.py | 14 ++++++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/pyzx/simplify.py b/pyzx/simplify.py index d2225f0a..91c1b227 100644 --- a/pyzx/simplify.py +++ b/pyzx/simplify.py @@ -25,7 +25,7 @@ 'pivot_gadget_simp', 'pivot_boundary_simp', 'gadget_simp', 'lcomp_simp', 'clifford_simp', 'tcount', 'to_gh', 'to_rg', 'full_reduce', 'teleport_reduce', 'reduce_scalar', 'supplementarity_simp', - 'to_clifford_normal_form_graph'] + 'to_clifford_normal_form_graph', 'to_graph_like', 'is_graph_like'] from typing import List, Callable, Optional, Union, Generic, Tuple, Dict, Iterator, cast @@ -492,13 +492,20 @@ def to_graph_like(g: BaseGraph[VT,ET]) -> None: # add dummy spiders for all but one for b in boundary_ns[:-1]: - z1 = g.add_vertex(ty=VertexType.Z) - z2 = g.add_vertex(ty=VertexType.Z) + e = g.edge(v,b) + if g.edge_type(e) == EdgeType.SIMPLE: + z1 = g.add_vertex(ty=VertexType.Z,row=0.3*g.row(v)+0.7*g.row(b),qubit=0.3*g.qubit(v)+0.7*g.qubit(b)) + z2 = g.add_vertex(ty=VertexType.Z,row=0.7*g.row(v)+0.3*g.row(b),qubit=0.7*g.qubit(v)+0.3*g.qubit(b)) - g.remove_edge(g.edge(v, b)) - g.add_edge(g.edge(z1, z2), edgetype=EdgeType.HADAMARD) - g.add_edge(g.edge(b, z1), edgetype=EdgeType.SIMPLE) - g.add_edge(g.edge(z2, v), edgetype=EdgeType.HADAMARD) + g.remove_edge(e) + g.add_edge(g.edge(z1, z2), edgetype=EdgeType.HADAMARD) + g.add_edge(g.edge(b, z1), edgetype=EdgeType.SIMPLE) + g.add_edge(g.edge(z2, v), edgetype=EdgeType.HADAMARD) + elif g.edge_type(e) == EdgeType.HADAMARD: + z = g.add_vertex(ty=VertexType.Z,row=0.5*g.row(v)+0.5*g.row(b),qubit=0.5*g.qubit(v)+0.5*g.qubit(b)) + g.remove_edge(e) + g.add_edge(g.edge(b,z),EdgeType.SIMPLE) + g.add_edge(g.edge(z,v),EdgeType.HADAMARD) assert(is_graph_like(g)) diff --git a/tests/test_simplify.py b/tests/test_simplify.py index 46d1a340..e11c8052 100644 --- a/tests/test_simplify.py +++ b/tests/test_simplify.py @@ -103,6 +103,12 @@ def test_teleport_reduce(self): c2 = Circuit.from_graph(teleport_reduce(g)) self.assertTrue(c.verify_equality(c2)) + def test_to_graph_like_introduce_boundary_vertices(self): + c = qasm(qasm_5) + g = c.to_graph() + to_graph_like(g) + self.assertTrue(compare_tensors(c,g)) + qasm_1 = """OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; @@ -155,6 +161,14 @@ def test_teleport_reduce(self): cx q[1], q[2]; """ +qasm_5 = """OPENQASM 2.0; +include "qelib1.inc"; +qreg q[2]; +h q[0]; +h q[1]; +cz q[0],q[1]; +""" + if __name__ == '__main__': unittest.main()