def test_geometric(self): x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t().to(device) edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]]).to(device) data = Data(x=x, edge_index=edge_index).to(torch.device('cpu')) N = data.num_nodes self.assertCountEqual(data.x.tolist(), x.tolist()) self.assertCountEqual(data['x'].tolist(), x.tolist()) self.assertEqual(['edge_index', 'x'], sorted(data.keys)) self.assertEqual(2, len(data)) self.assertIn('x', data) self.assertIn('edge_index', data) self.assertNotIn('pos', data) self.assertEqual(0, data.__cat_dim__('x', data.x)) self.assertEqual(-1, data.__cat_dim__('edge_index', data.edge_index)) self.assertEqual(0, data.__inc__('x', data.x)) self.assertEqual(data.num_nodes, data.__inc__('edge_index', data.edge_index)) data.contiguous() self.assertTrue(data.x.is_contiguous()) data.edge_index, _ = coalesce(data.edge_index, None, N, N) data = data.coalesce() self.assertTrue(data.is_coalesced()) clone = data.clone() self.assertNotEqual(clone, data) self.assertEqual(len(clone), len(data)) self.assertCountEqual(clone.x.tolist(), data.x.tolist()) self.assertCountEqual(clone.edge_index.tolist(), data.edge_index.tolist()) data['x'] = x + 1 self.assertCountEqual(data.x.tolist(), (x + 1).tolist()) self.assertEqual('Data(edge_index=[2, 4], x=[3, 2])', data.__repr__()) dictionary = {'x': data.x, 'edge_index': data.edge_index} data = Data.from_dict(dictionary) self.assertEqual(['edge_index', 'x'], sorted(data.keys)) self.assertTrue(data.is_undirected()) self.assertEqual(3, data.num_nodes) self.assertEqual(4, data.num_edges) self.assertIsNone(data.num_faces) self.assertEqual(2, data.num_node_features) self.assertEqual(2, data.num_features)
def test_geometric(self): x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t() edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]]) data = Data(x=x, edge_index=edge_index).to(torch.device('cpu')) N = data.num_nodes self.assertTrue(data.x.tolist() == x.tolist()) self.assertTrue(data['x'].tolist() == x.tolist()) self.assertTrue(sorted(data.keys) == ['edge_index', 'x']) self.assertTrue(len(data) == 2) self.assertTrue('x' in data and 'edge_index' in data and 'pos' not in data) self.assertTrue(data.__cat_dim__('x', data.x) == 0) self.assertTrue(data.__cat_dim__('edge_index', data.edge_index) == -1) self.assertTrue(data.__inc__('x', data.x) == 0) self.assertTrue(data.__inc__('edge_index', data.edge_index) == data.num_nodes) data.contiguous() self.assertTrue(data.x.is_contiguous()) data.edge_index, _ = coalesce(data.edge_index, None, N, N) data = data.coalesce() self.assertTrue(data.is_coalesced()) clone = data.clone() self.assertTrue(clone != data) self.assertTrue(len(clone) == len(data)) self.assertTrue(clone.x.tolist() == data.x.tolist()) self.assertTrue(clone.edge_index.tolist() == data.edge_index.tolist()) data['x'] = x + 1 self.assertTrue(data.x.tolist() == (x + 1).tolist()) self.assertTrue(data.__repr__() == 'Data(edge_index=[2, 4], x=[3, 2])') dictionary = {'x': data.x, 'edge_index': data.edge_index} data = Data.from_dict(dictionary) self.assertTrue(sorted(data.keys) == ['edge_index', 'x']) self.assertTrue(data.is_undirected()) self.assertTrue(data.num_nodes == 3) self.assertTrue(data.num_edges == 4) self.assertTrue(data.num_faces is None) self.assertTrue(data.num_node_features == 2) self.assertTrue(data.num_features == 2)
def test_data(): torch_geometric.set_debug(True) x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t() edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]]) data = Data(x=x, edge_index=edge_index).to(torch.device('cpu')) N = data.num_nodes assert N == 3 assert data.x.tolist() == x.tolist() assert data['x'].tolist() == x.tolist() assert sorted(data.keys) == ['edge_index', 'x'] assert len(data) == 2 assert 'x' in data and 'edge_index' in data and 'pos' not in data D = data.to_dict() assert len(D) == 2 assert 'x' in D and 'edge_index' in D D = data.to_namedtuple() assert len(D) == 2 assert D.x is not None and D.edge_index is not None assert data.__cat_dim__('x', data.x) == 0 assert data.__cat_dim__('edge_index', data.edge_index) == -1 assert data.__inc__('x', data.x) == 0 assert data.__inc__('edge_index', data.edge_index) == data.num_nodes assert not data.x.is_contiguous() data.contiguous() assert data.x.is_contiguous() assert not data.is_coalesced() data = data.coalesce() assert data.is_coalesced() clone = data.clone() assert clone != data assert len(clone) == len(data) assert clone.x.tolist() == data.x.tolist() assert clone.edge_index.tolist() == data.edge_index.tolist() # Test `data.to_heterogenous()`: out = data.to_heterogeneous() assert torch.allclose(data.x, out['0'].x) assert torch.allclose(data.edge_index, out['0', '0'].edge_index) data.edge_type = torch.tensor([0, 0, 1, 0]) out = data.to_heterogeneous() assert torch.allclose(data.x, out['0'].x) assert [store.num_edges for store in out.edge_stores] == [3, 1] data.edge_type = None data['x'] = x + 1 assert data.x.tolist() == (x + 1).tolist() assert str(data) == 'Data(x=[3, 2], edge_index=[2, 4])' dictionary = {'x': data.x, 'edge_index': data.edge_index} data = Data.from_dict(dictionary) assert sorted(data.keys) == ['edge_index', 'x'] assert not data.has_isolated_nodes() assert not data.has_self_loops() assert data.is_undirected() assert not data.is_directed() assert data.num_nodes == 3 assert data.num_edges == 4 assert data.num_faces is None assert data.num_node_features == 2 assert data.num_features == 2 data.edge_attr = torch.randn(data.num_edges, 2) assert data.num_edge_features == 2 data.edge_attr = None data.x = None assert data.num_nodes == 3 data.edge_index = None assert data.num_nodes is None assert data.num_edges == 0 data.num_nodes = 4 assert data.num_nodes == 4 data = Data(x=x, attribute=x) assert len(data) == 2 assert data.x.tolist() == x.tolist() assert data.attribute.tolist() == x.tolist() face = torch.tensor([[0, 1], [1, 2], [2, 3]]) data = Data(num_nodes=4, face=face) assert data.num_faces == 2 assert data.num_nodes == 4 data = Data(title='test') assert str(data) == "Data(title='test')" assert data.num_node_features == 0 assert data.num_edge_features == 0 key = value = 'test_value' data[key] = value assert data[key] == value del data[value] del data[value] # Deleting unset attributes should work as well. assert data.get(key) is None assert data.get('title') == 'test' torch_geometric.set_debug(False)
def test_data(): torch_geometric.set_debug(True) x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t() edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]]) data = Data(x=x, edge_index=edge_index).to(torch.device('cpu')) N = data.num_nodes assert N == 3 assert data.x.tolist() == x.tolist() assert data['x'].tolist() == x.tolist() assert sorted(data.keys) == ['edge_index', 'x'] assert len(data) == 2 assert 'x' in data and 'edge_index' in data and 'pos' not in data D = data.to_dict() assert len(D) == 2 assert 'x' in D and 'edge_index' in D D = data.to_namedtuple() assert len(D) == 2 assert D.x is not None and D.edge_index is not None assert data.__cat_dim__('x', data.x) == 0 assert data.__cat_dim__('edge_index', data.edge_index) == -1 assert data.__inc__('x', data.x) == 0 assert data.__inc__('edge_index', data.edge_index) == data.num_nodes assert not data.x.is_contiguous() data.contiguous() assert data.x.is_contiguous() assert not data.is_coalesced() data = data.coalesce() assert data.is_coalesced() clone = data.clone() assert clone != data assert len(clone) == len(data) assert clone.x.tolist() == data.x.tolist() assert clone.edge_index.tolist() == data.edge_index.tolist() data['x'] = x + 1 assert data.x.tolist() == (x + 1).tolist() assert str(data) == 'Data(x=[3, 2], edge_index=[2, 4])' dictionary = {'x': data.x, 'edge_index': data.edge_index} data = Data.from_dict(dictionary) assert sorted(data.keys) == ['edge_index', 'x'] assert not data.has_isolated_nodes() assert not data.has_self_loops() assert data.is_undirected() assert not data.is_directed() assert data.num_nodes == 3 assert data.num_edges == 4 assert data.num_faces is None assert data.num_node_features == 2 assert data.num_features == 2 data.edge_attr = torch.randn(data.num_edges, 2) assert data.num_edge_features == 2 data.edge_attr = None data.x = None assert data.num_nodes == 3 data.edge_index = None assert data.num_nodes is None assert data.num_edges == 0 data.num_nodes = 4 assert data.num_nodes == 4 data = Data(x=x, attribute=x) assert len(data) == 2 assert data.x.tolist() == x.tolist() assert data.attribute.tolist() == x.tolist() face = torch.tensor([[0, 1], [1, 2], [2, 3]]) data = Data(num_nodes=4, face=face) assert data.num_faces == 2 assert data.num_nodes == 4 data = Data(title='test') assert str(data) == "Data(title='test')" assert data.num_node_features == 0 assert data.num_edge_features == 0 torch_geometric.set_debug(False)
def test_data(): x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t() edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]]) data = Data(x=x, edge_index=edge_index).to(torch.device('cpu')) N = data.num_nodes assert data.x.tolist() == x.tolist() assert data['x'].tolist() == x.tolist() assert sorted(data.keys) == ['edge_index', 'x'] assert len(data) == 2 assert 'x' in data and 'edge_index' in data and 'pos' not in data assert data.__cat_dim__('x', data.x) == 0 assert data.__cat_dim__('edge_index', data.edge_index) == -1 assert data.__inc__('x', data.x) == 0 assert data.__inc__('edge_index', data.edge_index) == data.num_nodes assert not data.x.is_contiguous() data.contiguous() assert data.x.is_contiguous() assert not data.is_coalesced() data.edge_index, _ = coalesce(data.edge_index, None, N, N) data = data.coalesce() assert data.is_coalesced() clone = data.clone() assert clone != data assert len(clone) == len(data) assert clone.x.tolist() == data.x.tolist() assert clone.edge_index.tolist() == data.edge_index.tolist() data['x'] = x + 1 assert data.x.tolist() == (x + 1).tolist() assert data.__repr__() == 'Data(edge_index=[2, 4], x=[3, 2])' dictionary = {'x': data.x, 'edge_index': data.edge_index} data = Data.from_dict(dictionary) assert sorted(data.keys) == ['edge_index', 'x'] assert not data.contains_isolated_nodes() assert not data.contains_self_loops() assert data.is_undirected() assert not data.is_directed() assert data.num_nodes == 3 assert data.num_edges == 4 assert data.num_faces is None assert data.num_node_features == 2 assert data.num_features == 2 data.edge_attr = torch.randn(data.num_edges, 2) assert data.num_edge_features == 2 data.edge_attr = None data.x = None assert data.num_nodes == 3 data.edge_index = None assert data.num_nodes is None assert data.num_edges is None data.num_nodes = 4 assert data.num_nodes == 4 data = Data(x=x, attribute=x) assert len(data) == 2 assert data.x.tolist() == x.tolist() assert data.attribute.tolist() == x.tolist() face = torch.tensor([[0, 1], [1, 2], [2, 3]]) data = Data(num_nodes=4, face=face) assert data.num_faces == 2 assert data.num_nodes == 4 data = Data(title="test") assert data.__repr__() == 'Data(title=test)' assert data.num_node_features == 0 assert data.num_edge_features == 0