"vscode:/vscode.git/clone" did not exist on "dbb3174cbcea9d646ff2b2ba67b4b5e47909cb9b"
graph_apis.cc 7.37 KB
Newer Older
Minjie Wang's avatar
Minjie Wang committed
1
2
3
4
5
6
7
8
9
10
#include <dgl/runtime/packed_func.h>
#include <dgl/runtime/registry.h>
#include <dgl/graph.h>

using tvm::runtime::TVMArgs;
using tvm::runtime::TVMArgValue;
using tvm::runtime::TVMRetValue;
using tvm::runtime::PackedFunc;

namespace dgl {
Minjie Wang's avatar
Minjie Wang committed
11
12
namespace {

13
14
PackedFunc ConvertEdgeArrayToPackedFunc(const Graph::EdgeArray& ea) {
  auto body = [ea] (TVMArgs args, TVMRetValue* rv) {
Minjie Wang's avatar
Minjie Wang committed
15
      int which = args[0];
16
17
18
19
20
21
22
23
24
      if (which == 0) {
        *rv = ea.src;
      } else if (which == 1) {
        *rv = ea.dst;
      } else if (which == 2) {
        *rv = ea.id;
      } else {
        LOG(FATAL) << "invalid choice";
      }
Minjie Wang's avatar
Minjie Wang committed
25
26
27
    };
  return PackedFunc(body);
}
Minjie Wang's avatar
Minjie Wang committed
28

Minjie Wang's avatar
Minjie Wang committed
29
}  // namespace
Minjie Wang's avatar
Minjie Wang committed
30

Minjie Wang's avatar
Minjie Wang committed
31
32
// Graph handler type
typedef void* GraphHandle;
Minjie Wang's avatar
Minjie Wang committed
33

Minjie Wang's avatar
Minjie Wang committed
34
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphCreate")
Minjie Wang's avatar
Minjie Wang committed
35
36
37
38
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = new Graph();
    *rv = ghandle;
  });
Minjie Wang's avatar
Minjie Wang committed
39

Minjie Wang's avatar
Minjie Wang committed
40
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphFree")
Minjie Wang's avatar
Minjie Wang committed
41
42
43
44
45
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    Graph* gptr = static_cast<Graph*>(ghandle);
    delete gptr;
  });
Minjie Wang's avatar
Minjie Wang committed
46

Minjie Wang's avatar
Minjie Wang committed
47
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphAddVertices")
Minjie Wang's avatar
Minjie Wang committed
48
49
50
51
52
53
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    Graph* gptr = static_cast<Graph*>(ghandle);
    uint64_t num_vertices = args[1];
    gptr->AddVertices(num_vertices);
  });
Minjie Wang's avatar
Minjie Wang committed
54

Minjie Wang's avatar
Minjie Wang committed
55
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphAddEdge")
Minjie Wang's avatar
Minjie Wang committed
56
57
58
59
60
61
62
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t src = args[1];
    const dgl_id_t dst = args[2];
    gptr->AddEdge(src, dst);
  });
Minjie Wang's avatar
Minjie Wang committed
63

Minjie Wang's avatar
Minjie Wang committed
64
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphAddEdges")
Minjie Wang's avatar
Minjie Wang committed
65
66
67
68
69
70
71
72
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    Graph* gptr = static_cast<Graph*>(ghandle);
    const IdArray src = args[1];
    const IdArray dst = args[2];
    gptr->AddEdges(src, dst);
  });

Minjie Wang's avatar
Minjie Wang committed
73
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphClear")
Minjie Wang's avatar
Minjie Wang committed
74
75
76
77
78
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    Graph* gptr = static_cast<Graph*>(ghandle);
    gptr->Clear();
  });
Minjie Wang's avatar
Minjie Wang committed
79

Minjie Wang's avatar
Minjie Wang committed
80
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphNumVertices")
Minjie Wang's avatar
Minjie Wang committed
81
82
83
84
85
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    *rv = static_cast<int64_t>(gptr->NumVertices());
  });
Minjie Wang's avatar
Minjie Wang committed
86

Minjie Wang's avatar
Minjie Wang committed
87
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphNumEdges")
Minjie Wang's avatar
Minjie Wang committed
88
89
90
91
92
93
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    *rv = static_cast<int64_t>(gptr->NumEdges());
  });

Minjie Wang's avatar
Minjie Wang committed
94
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphHasVertex")
Minjie Wang's avatar
Minjie Wang committed
95
96
97
98
99
100
101
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t vid = args[1];
    *rv = gptr->HasVertex(vid);
  });

Minjie Wang's avatar
Minjie Wang committed
102
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphHasVertices")
Minjie Wang's avatar
Minjie Wang committed
103
104
105
106
107
108
109
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const IdArray vids = args[1];
    *rv = gptr->HasVertices(vids);
  });

Minjie Wang's avatar
Minjie Wang committed
110
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphHasEdge")
Minjie Wang's avatar
Minjie Wang committed
111
112
113
114
115
116
117
118
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t src = args[1];
    const dgl_id_t dst = args[2];
    *rv = gptr->HasEdge(src, dst);
  });

Minjie Wang's avatar
Minjie Wang committed
119
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphHasEdges")
Minjie Wang's avatar
Minjie Wang committed
120
121
122
123
124
125
126
127
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const IdArray src = args[1];
    const IdArray dst = args[2];
    *rv = gptr->HasEdges(src, dst);
  });

Minjie Wang's avatar
Minjie Wang committed
128
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphPredecessors")
Minjie Wang's avatar
Minjie Wang committed
129
130
131
132
133
134
135
136
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t vid = args[1];
    const uint64_t radius = args[2];
    *rv = gptr->Predecessors(vid, radius);
  });

Minjie Wang's avatar
Minjie Wang committed
137
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphSuccessors")
Minjie Wang's avatar
Minjie Wang committed
138
139
140
141
142
143
144
145
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t vid = args[1];
    const uint64_t radius = args[2];
    *rv = gptr->Successors(vid, radius);
  });

Minjie Wang's avatar
Minjie Wang committed
146
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphEdgeId")
Minjie Wang's avatar
Minjie Wang committed
147
148
149
150
151
152
153
154
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t src = args[1];
    const dgl_id_t dst = args[2];
    *rv = static_cast<int64_t>(gptr->EdgeId(src, dst));
  });

Minjie Wang's avatar
Minjie Wang committed
155
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphEdgeIds")
Minjie Wang's avatar
Minjie Wang committed
156
157
158
159
160
161
162
163
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const IdArray src = args[1];
    const IdArray dst = args[2];
    *rv = gptr->EdgeIds(src, dst);
  });

Minjie Wang's avatar
Minjie Wang committed
164
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphInEdges_1")
Minjie Wang's avatar
Minjie Wang committed
165
166
167
168
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t vid = args[1];
169
    *rv = ConvertEdgeArrayToPackedFunc(gptr->InEdges(vid));
Minjie Wang's avatar
Minjie Wang committed
170
171
  });

Minjie Wang's avatar
Minjie Wang committed
172
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphInEdges_2")
Minjie Wang's avatar
Minjie Wang committed
173
174
175
176
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const IdArray vids = args[1];
177
    *rv = ConvertEdgeArrayToPackedFunc(gptr->InEdges(vids));
Minjie Wang's avatar
Minjie Wang committed
178
179
  });

Minjie Wang's avatar
Minjie Wang committed
180
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphOutEdges_1")
Minjie Wang's avatar
Minjie Wang committed
181
182
183
184
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t vid = args[1];
185
    *rv = ConvertEdgeArrayToPackedFunc(gptr->OutEdges(vid));
Minjie Wang's avatar
Minjie Wang committed
186
187
  });

Minjie Wang's avatar
Minjie Wang committed
188
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphOutEdges_2")
Minjie Wang's avatar
Minjie Wang committed
189
190
191
192
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const IdArray vids = args[1];
193
    *rv = ConvertEdgeArrayToPackedFunc(gptr->OutEdges(vids));
Minjie Wang's avatar
Minjie Wang committed
194
195
  });

Minjie Wang's avatar
Minjie Wang committed
196
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphEdges")
Minjie Wang's avatar
Minjie Wang committed
197
198
199
200
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const bool sorted = args[1];
201
    *rv = ConvertEdgeArrayToPackedFunc(gptr->Edges(sorted));
Minjie Wang's avatar
Minjie Wang committed
202
203
  });

Minjie Wang's avatar
Minjie Wang committed
204
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphInDegree")
Minjie Wang's avatar
Minjie Wang committed
205
206
207
208
209
210
211
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t vid = args[1];
    *rv = static_cast<int64_t>(gptr->InDegree(vid));
  });

Minjie Wang's avatar
Minjie Wang committed
212
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphInDegrees")
Minjie Wang's avatar
Minjie Wang committed
213
214
215
216
217
218
219
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const IdArray vids = args[1];
    *rv = gptr->InDegrees(vids);
  });

Minjie Wang's avatar
Minjie Wang committed
220
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphOutDegree")
Minjie Wang's avatar
Minjie Wang committed
221
222
223
224
225
226
227
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const dgl_id_t vid = args[1];
    *rv = static_cast<int64_t>(gptr->OutDegree(vid));
  });

Minjie Wang's avatar
Minjie Wang committed
228
TVM_REGISTER_GLOBAL("graph._CAPI_DGLGraphOutDegrees")
Minjie Wang's avatar
Minjie Wang committed
229
230
231
232
233
234
.set_body([] (TVMArgs args, TVMRetValue* rv) {
    GraphHandle ghandle = args[0];
    const Graph* gptr = static_cast<Graph*>(ghandle);
    const IdArray vids = args[1];
    *rv = gptr->OutDegrees(vids);
  });
Minjie Wang's avatar
Minjie Wang committed
235
236

}  // namespace dgl