Exemplo n.º 1
0
 def test_copy(self):
     g = Graph()
     v1, v2 = g.add_vertices(2)
     g.add_edge((v1, v2), 2)
     g2 = g.copy()
     self.assertEqual(g.num_vertices(), g2.num_vertices())
     self.assertEqual(g.num_edges(), g2.num_edges())
     v1, v2 = list(g2.vertices())
     self.assertEqual(g.edge_type(g.edge(v1, v2)), 2)
Exemplo n.º 2
0
 def test_add_edge_table_same_type(self):
     g = Graph()
     v1, v2 = g.add_vertices(2)
     g.set_type(v1,VertexType.Z)
     g.set_type(v2,VertexType.Z)
     etab = {(v1,v2):[2,0]}
     g.add_edge_table(etab)
     self.assertTrue(g.connected(v1,v2))
     self.assertEqual((g.phase(v1),g.phase(v2)),(0,0))
     g.remove_edge(g.edge(v1,v2))
     self.assertFalse(g.connected(v1,v2))
     etab = {(v1,v2):[0,2]}
     g.add_edge_table(etab)
     self.assertFalse(g.connected(v1,v2))
     etab = {(v1,v2): [1,1]}
     g.add_edge_table(etab)
     self.assertEqual(g.edge_type(g.edge(v1,v2)),EdgeType.SIMPLE)
     self.assertTrue((g.phase(v1)==1  and g.phase(v2)==0) or (g.phase(v1)==0 and g.phase(v2)==1))
Exemplo n.º 3
0
 def test_add_edge_table_different_type(self):
     g = Graph()
     v1, v2 = g.add_vertices(2)
     g.set_type(v1,1)
     g.set_type(v2,2)
     etab = {(v1,v2):[0,2]}
     g.add_edge_table(etab)
     self.assertTrue(g.connected(v1,v2))
     self.assertEqual((g.phase(v1),g.phase(v2)),(0,0))
     g.remove_edge(g.edge(v1,v2))
     self.assertFalse(g.connected(v1,v2))
     etab = {(v1,v2):[2,0]}
     g.add_edge_table(etab)
     self.assertFalse(g.connected(v1,v2))
     etab = {(v1,v2): [1,1]}
     g.add_edge_table(etab)
     self.assertEqual(g.edge_type(g.edge(v1,v2)),2)
     self.assertTrue((g.phase(v1)==1  and g.phase(v2)==0) or (g.phase(v1)==0 and g.phase(v2)==1))
Exemplo n.º 4
0
 def test_scalar(self):
     g = Graph()
     x = g.add_vertex(VertexType.Z, row = 0, phase = 1 / 2)
     y = g.add_vertex(VertexType.Z, row = 1, phase = 1 / 4)
     g.add_edge(g.edge(x, y), edgetype = EdgeType.SIMPLE)
     
     full_reduce(g)
     val = to_quimb_tensor(g).contract(output_inds = ())
     expected_val = 1 + np.exp(1j * np.pi * 3 / 4)
     self.assertTrue(abs(val - expected_val) < 1e-9)
Exemplo n.º 5
0
    def test_xor_tensor(self):
        g = Graph()
        x = g.add_vertex(VertexType.BOUNDARY)
        y = g.add_vertex(VertexType.BOUNDARY)
        v = g.add_vertex(VertexType.Z)
        z = g.add_vertex(VertexType.BOUNDARY)

        g.add_edge(g.edge(x, v), edgetype = EdgeType.HADAMARD)
        g.add_edge(g.edge(y, v), edgetype = EdgeType.HADAMARD)
        g.add_edge(g.edge(v, z), edgetype = EdgeType.HADAMARD)
        tn = to_quimb_tensor(g)
        
        for x in range(2):
            for y in range(2):
                for z in range(2):
                    self.assertTrue(abs((tn &
                            qtn.Tensor(data = [1 - x, x], inds = ("0",)) &
                            qtn.Tensor(data = [1 - y, y], inds = ("1",)) &
                            qtn.Tensor(data = [1 - z, z], inds = ("3",))).contract(output_inds = ()) - 
                            ((x ^ y) == z) / np.sqrt(2)) < 1e-9)
Exemplo n.º 6
0
 def test_phases_tensor(self):
     # This diagram represents a 1-input 1-output Z-spider of phase pi/2,
     # but written using two Z-spiders of phases pi/6 and pi/3 that are
     # connected by a simple edge.
     g = Graph()
     x = g.add_vertex(VertexType.BOUNDARY)
     v = g.add_vertex(VertexType.Z, phase = 1. / 6.)
     w = g.add_vertex(VertexType.Z, phase = 1. / 3.)
     y = g.add_vertex(VertexType.BOUNDARY)
     
     g.add_edge(g.edge(x, v), edgetype = EdgeType.SIMPLE)
     g.add_edge(g.edge(v, w), edgetype = EdgeType.SIMPLE)
     g.add_edge(g.edge(w, y), edgetype = EdgeType.SIMPLE)
     tn = to_quimb_tensor(g)
     
     self.assertTrue(abs((tn & qtn.Tensor(data = [1, 0], inds = ("0",)) 
                         & qtn.Tensor(data = [1, 0], inds = ("3",)))
                     .contract(output_inds = ()) - 1) < 1e-9)
     self.assertTrue(abs((tn & qtn.Tensor(data = [0, 1], inds = ("0",)) 
                         & qtn.Tensor(data = [0, 1j], inds = ("3",)))
                     .contract(output_inds = ()) + 1) < 1e-9)
Exemplo n.º 7
0
 def test_hadamard_tensor(self):
     g = Graph()
     x = g.add_vertex(VertexType.BOUNDARY)
     y = g.add_vertex(VertexType.BOUNDARY)
     g.add_edge(g.edge(x, y), edgetype = EdgeType.HADAMARD)
     
     tn = to_quimb_tensor(g)
     self.assertTrue(abs((tn & qtn.Tensor(data = [1, 0], inds = ("0",)) 
                         & qtn.Tensor(data = [1 / np.sqrt(2), 1 / np.sqrt(2)], inds = ("1",)))
                     .contract(output_inds = ()) - 1) < 1e-9)
     self.assertTrue(abs((tn & qtn.Tensor(data = [0, 1], inds = ("0",)) 
                         & qtn.Tensor(data = [1 / np.sqrt(2), -1 / np.sqrt(2)], inds = ("1",)))
                     .contract(output_inds = ()) - 1) < 1e-9)
Exemplo n.º 8
0
 def test_id_tensor(self):
     g = Graph()
     x = g.add_vertex(VertexType.BOUNDARY)
     y = g.add_vertex(VertexType.BOUNDARY)
     g.add_edge(g.edge(x, y), edgetype = EdgeType.SIMPLE)
     
     tn = to_quimb_tensor(g)
     self.assertTrue((tn & qtn.Tensor(data = [0, 1], inds = ("0",)) 
                         & qtn.Tensor(data = [0, 1], inds = ("1",)))
                     .contract(output_inds = ()) == 1)
     self.assertTrue((tn & qtn.Tensor(data = [1, 0], inds = ("0",)) 
                         & qtn.Tensor(data = [1, 0], inds = ("1",)))
                     .contract(output_inds = ()) == 1)
Exemplo n.º 9
0
 def test_edges(self):
     g = Graph()
     v1, v2, v3 = g.add_vertices(3)
     g.add_edge((v1, v2))
     self.assertEqual(g.num_edges(), 1)
     self.assertTrue(g.connected(v1, v2))
     self.assertTrue(v2 in g.neighbours(v1))
     self.assertEqual(g.vertex_degree(v1), 1)
     self.assertFalse(g.connected(v1, v3))
     e = g.edge(v1, v2)
     self.assertEqual(g.edge_type(e), 1)
     g.set_edge_type(e, 2)
     self.assertEqual(g.edge_type(e), 2)
     g.remove_edge(e)
     self.assertEqual(g.num_edges(), 0)
     self.assertFalse(g.connected(v1, v2))