예제 #1
0
 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))
예제 #2
0
 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))
예제 #3
0
 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))
예제 #4
0
 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))