line_graph.cc 1.1 KB
Newer Older
1
/**
2
 *  Copyright (c) 2020 by Contributors
3
4
 * @file graph/transform/line_graph.cc
 * @brief Line graph implementation
5
6
7
 */

#include <dgl/array.h>
8
#include <dgl/base_heterograph.h>
9
#include <dgl/packed_func_ext.h>
10
11
#include <dgl/transform.h>

12
#include <utility>
13
14
#include <vector>

15
16
17
18
19
20
21
22
23
24
#include "../../c_api_common.h"
#include "../heterograph.h"

namespace dgl {

using namespace dgl::runtime;
using namespace dgl::aten;

namespace transform {

25
/**
26
27
28
 * @brief Create Line Graph.
 * @param hg Graph.
 * @param backtracking whether the pair of (v, u) (u, v) edges are treated as
29
 *        linked.
30
 * @return The Line Graph.
31
 */
32
HeteroGraphPtr CreateLineGraph(HeteroGraphPtr hg, bool backtracking) {
33
34
35
36
37
  const auto hgp = std::dynamic_pointer_cast<HeteroGraph>(hg);
  return hgp->LineGraph(backtracking);
}

DGL_REGISTER_GLOBAL("transform._CAPI_DGLHeteroLineGraph")
38
39
40
    .set_body([](DGLArgs args, DGLRetValue* rv) {
      HeteroGraphRef hg = args[0];
      bool backtracking = args[1];
41

42
43
44
      auto hgptr = CreateLineGraph(hg.sptr(), backtracking);
      *rv = HeteroGraphRef(hgptr);
    });
45
46
47

};  // namespace transform
};  // namespace dgl