def test_id_graph(self): g = Graph() i = g.add_vertex(0,0,0) o = g.add_vertex(0,0,1) g.set_inputs((i,)) g.set_outputs((o,)) g.add_edge((i,o)) t = tensorfy(g) id_array = np.array([[1,0],[0,1]]) self.assertTrue(np.allclose(t,id_array)) self.assertTrue(compare_tensors(t,id_array))
def test_equality_of_id_zx_graph_to_id(self): g = Graph() i = g.add_vertex(0,0,0) o = g.add_vertex(0,0,2) g.set_inputs((i,)) g.set_outputs((o,)) g2 = g.copy() g.add_edge((i,o)) v = g2.add_vertex(1,0,1) g2.add_edges([(i,v),(v,o)]) tensor1 = tensorfy(g) tensor2 = tensorfy(g2) self.assertTrue(compare_tensors(tensor1,tensor2))
def test_inequality_id_and_swap(self): g = Graph() i1 = g.add_vertex(0,0,0) i2 = g.add_vertex(0,1,0) o1 = g.add_vertex(0,0,1) o2 = g.add_vertex(0,1,1) g.set_inputs((i1, i2)) g.set_outputs((o1, o2)) g2 = g.copy() g.add_edges([(i1,o2),(i2,o1)]) g2.add_edges([(i1,o1),(i2,o2)]) id_id = tensorfy(g2) swap = tensorfy(g) self.assertFalse(compare_tensors(id_id,swap))
def test_three_cnots_is_swap(self): g = Graph() i1 = g.add_vertex(0,0,0) i2 = g.add_vertex(0,1,0) o1 = g.add_vertex(0,0,1) o2 = g.add_vertex(0,1,1) g.set_inputs((i1, i2)) g.set_outputs((o1, o2)) g.add_edges([(i1,o2),(i2,o1)]) swap = tensorfy(g) c = Circuit(2) c.add_gate("CNOT",0,1) c.add_gate("CNOT",1,0) c.add_gate("CNOT",0,1) three_cnots = tensorfy(c.to_graph()) self.assertTrue(compare_tensors(swap,three_cnots))