jubatus 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -1
- data/README.rst +1 -1
- data/Rakefile +8 -0
- data/VERSION +1 -1
- data/{test → integration_test}/jubatus_test/anomaly/test.rb +22 -23
- data/{test → integration_test}/jubatus_test/classifier/test.rb +10 -15
- data/integration_test/jubatus_test/clustering/test.rb +133 -0
- data/integration_test/jubatus_test/error/test.rb +51 -0
- data/{test → integration_test}/jubatus_test/graph/test.rb +15 -30
- data/integration_test/jubatus_test/nearest_neighbor/test.rb +86 -0
- data/integration_test/jubatus_test/recommender/test.rb +111 -0
- data/{test → integration_test}/jubatus_test/regression/test.rb +10 -15
- data/integration_test/jubatus_test/stat/test.rb +108 -0
- data/{test → integration_test}/jubatus_test/test_util.rb +1 -0
- data/jubatus.gemspec +1 -1
- data/lib/jubatus/anomaly/client.rb +34 -33
- data/lib/jubatus/anomaly/types.rb +30 -18
- data/lib/jubatus/classifier/client.rb +22 -28
- data/lib/jubatus/classifier/types.rb +56 -33
- data/lib/jubatus/clustering/client.rb +51 -0
- data/lib/jubatus/clustering/types.rb +44 -0
- data/lib/jubatus/common/client.rb +83 -0
- data/lib/jubatus/common/datum.rb +85 -0
- data/lib/jubatus/common/message_string_generator.rb +41 -0
- data/lib/jubatus/common/types.rb +247 -0
- data/lib/jubatus/common.rb +4 -0
- data/lib/jubatus/graph/client.rb +83 -60
- data/lib/jubatus/graph/types.rb +146 -85
- data/lib/jubatus/nearest_neighbor/client.rb +53 -0
- data/lib/jubatus/nearest_neighbor/types.rb +44 -0
- data/lib/jubatus/recommender/client.rb +50 -44
- data/lib/jubatus/recommender/types.rb +29 -26
- data/lib/jubatus/regression/client.rb +22 -28
- data/lib/jubatus/regression/types.rb +30 -18
- data/lib/jubatus/stat/client.rb +37 -38
- data/lib/jubatus/stat/types.rb +5 -4
- data/test/jubatus_test/common/client_test.rb +104 -0
- data/test/jubatus_test/common/datum_test.rb +43 -0
- data/test/jubatus_test/common/message_string_generator_test.rb +50 -0
- data/test/jubatus_test/common/types_test.rb +73 -0
- metadata +29 -16
- data/test/jubatus_test/recommender/test.rb +0 -122
- data/test/jubatus_test/stat/test.rb +0 -109
@@ -0,0 +1,83 @@
|
|
1
|
+
module Jubatus
|
2
|
+
module Common
|
3
|
+
|
4
|
+
class InterfaceMismatch < Exception; end
|
5
|
+
class UnknownMethod < InterfaceMismatch; end
|
6
|
+
class TypeMismatch < InterfaceMismatch; end
|
7
|
+
|
8
|
+
class Client
|
9
|
+
def initialize(client, name)
|
10
|
+
@client = client
|
11
|
+
@name = name
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(method, args, ret_type, args_type)
|
15
|
+
if args.size != args_type.size
|
16
|
+
raise "number of arguemnts for \"%s\" must to be %d, but %d arguments are given" % [method, args_type.size, args.size]
|
17
|
+
end
|
18
|
+
values = [@name]
|
19
|
+
args.zip(args_type).each do |v, t|
|
20
|
+
values << t.to_msgpack(v)
|
21
|
+
end
|
22
|
+
future = @client.call_async_apply(method, values)
|
23
|
+
future.attach_error_handler do |error, result|
|
24
|
+
error_handler(error, result)
|
25
|
+
end
|
26
|
+
ret = future.get
|
27
|
+
|
28
|
+
if ret_type != nil
|
29
|
+
return ret_type.from_msgpack(ret)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def error_handler(error, result)
|
34
|
+
if error == 1
|
35
|
+
raise UnknownMethod
|
36
|
+
elsif error == 2
|
37
|
+
raise TypeMismatch
|
38
|
+
else
|
39
|
+
raise MessagePack::RPC::RPCError.create(error, result)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class ClientBase
|
45
|
+
def initialize(host, port, name, timeout_sec)
|
46
|
+
@cli = MessagePack::RPC::Client.new(host, port)
|
47
|
+
@cli.timeout = timeout_sec
|
48
|
+
@jubatus_client = Jubatus::Common::Client.new(@cli, name)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.connect(host, port, name, timeout_sec, &block)
|
52
|
+
begin
|
53
|
+
client = self.new(host, port, name, timeout_sec)
|
54
|
+
block.call(client)
|
55
|
+
ensure
|
56
|
+
client.get_client.close
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_client
|
61
|
+
@cli
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_config
|
65
|
+
@jubatus_client.call("get_config", [], TString.new, [])
|
66
|
+
end
|
67
|
+
|
68
|
+
def save(id)
|
69
|
+
@jubatus_client.call("save", [id], TBool.new, [TString.new])
|
70
|
+
end
|
71
|
+
|
72
|
+
def load(id)
|
73
|
+
@jubatus_client.call("load", [id], TBool.new, [TString.new])
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_status
|
77
|
+
@jubatus_client.call("get_status", [], TMap.new(TString.new, TMap.new(
|
78
|
+
TString.new, TString.new)), [])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'jubatus/common'
|
2
|
+
module Jubatus
|
3
|
+
module Common
|
4
|
+
|
5
|
+
class Datum
|
6
|
+
include Jubatus::Common
|
7
|
+
TYPE = TTuple.new(TList.new(TTuple.new(TString.new, TString.new)),
|
8
|
+
TList.new(TTuple.new(TString.new, TFloat.new)),
|
9
|
+
TList.new(TTuple.new(TString.new, TString.new)))
|
10
|
+
|
11
|
+
def initialize(values = {})
|
12
|
+
@string_values = []
|
13
|
+
@num_values = []
|
14
|
+
@binary_values = []
|
15
|
+
values.each { |k, v|
|
16
|
+
raise TypeError unless String === k
|
17
|
+
if String === v
|
18
|
+
@string_values << [k, v]
|
19
|
+
elsif Integer === v
|
20
|
+
@num_values << [k, v.to_f]
|
21
|
+
elsif Float === v
|
22
|
+
@num_values << [k, v]
|
23
|
+
else
|
24
|
+
raise TypeError
|
25
|
+
end
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_string(key, value)
|
30
|
+
raise TypeError unless String === key
|
31
|
+
if String === value
|
32
|
+
@string_values << [k, v]
|
33
|
+
else
|
34
|
+
raise TypeError
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_number(key, value)
|
39
|
+
raise TypeError unless String === key
|
40
|
+
if Integer === v
|
41
|
+
@num_values << [k, v.to_f]
|
42
|
+
elsif Float === v
|
43
|
+
@num_values << [k, v]
|
44
|
+
else
|
45
|
+
raise TypeError
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_binary(key, value)
|
50
|
+
raise TypeError unless String === key
|
51
|
+
if String === value
|
52
|
+
@binary_values << [k, v]
|
53
|
+
else
|
54
|
+
raise TypeError
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_msgpack(out = '')
|
59
|
+
t = [@string_values, @num_values, @binary_values]
|
60
|
+
return TYPE.to_msgpack(t)
|
61
|
+
end
|
62
|
+
|
63
|
+
def Datum.from_msgpack(m)
|
64
|
+
val = TYPE.from_msgpack(m)
|
65
|
+
d = Datum.new
|
66
|
+
d.string_values.concat(m[0])
|
67
|
+
d.num_values.concat(m[1])
|
68
|
+
d.binary_values.concat(m[2])
|
69
|
+
return d
|
70
|
+
end
|
71
|
+
|
72
|
+
def to_s
|
73
|
+
gen = Jubatus::Common::MessageStringGenerator.new
|
74
|
+
gen.open("datum")
|
75
|
+
gen.add("string_values", @string_values)
|
76
|
+
gen.add("num_values", @num_values)
|
77
|
+
gen.add("binary_values", @binary_values)
|
78
|
+
gen.close()
|
79
|
+
return gen.to_s
|
80
|
+
end
|
81
|
+
attr_reader :string_values, :num_values, :binary_values
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Jubatus
|
2
|
+
module Common
|
3
|
+
|
4
|
+
class MessageStringGenerator
|
5
|
+
OPEN = "{"
|
6
|
+
COLON = ": "
|
7
|
+
DELIMITER = ", "
|
8
|
+
CLOSE = "}"
|
9
|
+
|
10
|
+
def initialize()
|
11
|
+
@buf = []
|
12
|
+
@first = true
|
13
|
+
end
|
14
|
+
|
15
|
+
def open(typ)
|
16
|
+
@buf << typ.to_s
|
17
|
+
@buf << OPEN
|
18
|
+
end
|
19
|
+
|
20
|
+
def add(key, value)
|
21
|
+
if @first
|
22
|
+
@first = false
|
23
|
+
else
|
24
|
+
@buf << DELIMITER
|
25
|
+
end
|
26
|
+
@buf << key.to_s
|
27
|
+
@buf << COLON
|
28
|
+
@buf << value.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
def close
|
32
|
+
@buf << CLOSE
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_s
|
36
|
+
@buf.join
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
module Jubatus
|
2
|
+
module Common
|
3
|
+
|
4
|
+
class TypeError < Exception; end
|
5
|
+
class ValueError < Exception; end
|
6
|
+
|
7
|
+
def self.check_type(value, typ)
|
8
|
+
if not (typ === value)
|
9
|
+
raise TypeError, "type %s is expected, but %s is given" % [typ, value.class]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.check_types(value, types)
|
14
|
+
types.each do |t|
|
15
|
+
return if t === value
|
16
|
+
end
|
17
|
+
t = types.map { |t| t.to_s }.join(", ")
|
18
|
+
raise TypeError, "type %s is expected, but %s is given" % [t, value.class]
|
19
|
+
end
|
20
|
+
|
21
|
+
class TPrimitive
|
22
|
+
def initialize(types)
|
23
|
+
@types = types
|
24
|
+
end
|
25
|
+
|
26
|
+
def from_msgpack(m)
|
27
|
+
Jubatus::Common.check_types(m, @types)
|
28
|
+
return m
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_msgpack(m)
|
32
|
+
Jubatus::Common.check_types(m, @types)
|
33
|
+
return m
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class TInt < TPrimitive
|
38
|
+
def initialize(signed, byts)
|
39
|
+
if signed
|
40
|
+
@max = (1 << (8 * byts - 1)) - 1
|
41
|
+
@min = - (1 << (8 * byts - 1))
|
42
|
+
else
|
43
|
+
@max = (1 << (8 * byts)) - 1
|
44
|
+
@min = 0
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def from_msgpack(m)
|
49
|
+
Jubatus::Common.check_type(m, Integer)
|
50
|
+
if not (@min <= m and m <= @max)
|
51
|
+
raise ValueError, "int value must be in (%d, %d), but %d is given" % [@min, @max, m]
|
52
|
+
end
|
53
|
+
return m
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_msgpack(m)
|
57
|
+
Jubatus::Common.check_type(m, Integer)
|
58
|
+
if not (@min <= m and m <= @max)
|
59
|
+
raise ValueError, "int value must be in (%d, %d), but %d is given" % [@min, @max, m]
|
60
|
+
end
|
61
|
+
return m
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class TFloat < TPrimitive
|
66
|
+
def initialize
|
67
|
+
super([Float])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class TBool < TPrimitive
|
72
|
+
def initialize
|
73
|
+
super([TrueClass, FalseClass])
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class TString < TPrimitive
|
78
|
+
def initialize()
|
79
|
+
super([String])
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class TDatum
|
84
|
+
def from_msgpack(m)
|
85
|
+
Jubatus::Common::Datum.from_msgpack(m)
|
86
|
+
end
|
87
|
+
|
88
|
+
def to_msgpack(m)
|
89
|
+
Jubatus::Common.check_type(m, Jubatus::Common::Datum)
|
90
|
+
m.to_msgpack()
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class TRaw < TPrimitive
|
95
|
+
def initialize()
|
96
|
+
super([String])
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
class TNullable
|
101
|
+
def initialize(type)
|
102
|
+
@type = type
|
103
|
+
end
|
104
|
+
|
105
|
+
def from_msgpack(m)
|
106
|
+
if m.nil?
|
107
|
+
return nil
|
108
|
+
else
|
109
|
+
@type.from_msgpack(m)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def to_msgpack(m)
|
114
|
+
if m.nil?
|
115
|
+
nil
|
116
|
+
else
|
117
|
+
@type.to_msgpack(m)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class TList
|
123
|
+
def initialize(type)
|
124
|
+
@type = type
|
125
|
+
end
|
126
|
+
|
127
|
+
def from_msgpack(m)
|
128
|
+
Jubatus::Common.check_type(m, Array)
|
129
|
+
return m.map { |v| @type.from_msgpack(v) }
|
130
|
+
end
|
131
|
+
|
132
|
+
def to_msgpack(m)
|
133
|
+
Jubatus::Common.check_type(m, Array)
|
134
|
+
return m.map { |v| @type.to_msgpack(v) }
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
class TMap
|
139
|
+
def initialize(key, value)
|
140
|
+
@key = key
|
141
|
+
@value = value
|
142
|
+
end
|
143
|
+
|
144
|
+
def from_msgpack(m)
|
145
|
+
Jubatus::Common.check_type(m, Hash)
|
146
|
+
dic = {}
|
147
|
+
m.each do |k, v|
|
148
|
+
dic[@key.from_msgpack(k)] = @value.from_msgpack(v)
|
149
|
+
end
|
150
|
+
return dic
|
151
|
+
end
|
152
|
+
|
153
|
+
def to_msgpack(m)
|
154
|
+
Jubatus::Common.check_type(m, Hash)
|
155
|
+
dic = {}
|
156
|
+
m.each do |k, v|
|
157
|
+
dic[@key.to_msgpack(k)] = @value.to_msgpack(v)
|
158
|
+
end
|
159
|
+
return dic
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
class TTuple
|
164
|
+
def initialize(*types)
|
165
|
+
@types = types
|
166
|
+
end
|
167
|
+
|
168
|
+
def check_tuple(m)
|
169
|
+
Jubatus::Common.check_type(m, Array)
|
170
|
+
if m.size != @types.size
|
171
|
+
raise TypeError, "size of tuple is %d, but %d is expected: %s" % [m.size, @types.size, m.to_s]
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def from_msgpack(m)
|
176
|
+
check_tuple(m)
|
177
|
+
tpl = []
|
178
|
+
@types.zip(m).each do |type, x|
|
179
|
+
tpl << type.from_msgpack(x)
|
180
|
+
end
|
181
|
+
return tpl
|
182
|
+
end
|
183
|
+
|
184
|
+
def to_msgpack(m)
|
185
|
+
check_tuple(m)
|
186
|
+
tpl = []
|
187
|
+
@types.zip(m).each do |type, x|
|
188
|
+
tpl << type.to_msgpack(x)
|
189
|
+
end
|
190
|
+
return tpl
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
class TUserDef
|
195
|
+
def initialize(type)
|
196
|
+
@type = type
|
197
|
+
end
|
198
|
+
|
199
|
+
def from_msgpack(m)
|
200
|
+
return @type.from_msgpack(m)
|
201
|
+
end
|
202
|
+
|
203
|
+
def to_msgpack(m)
|
204
|
+
if @type === m
|
205
|
+
return m.to_msgpack()
|
206
|
+
elsif Array === m
|
207
|
+
return @type::TYPE.to_msgpack(m)
|
208
|
+
else
|
209
|
+
raise TypeError, "type %s or Array are expected, but %s is given" % [@type, m.class]
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
class TObject
|
215
|
+
def from_msgpack(m)
|
216
|
+
return m
|
217
|
+
end
|
218
|
+
|
219
|
+
def to_msgpack(m)
|
220
|
+
return m
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
class TEnum
|
225
|
+
def initialize(values)
|
226
|
+
@values = values
|
227
|
+
end
|
228
|
+
|
229
|
+
def from_msgpack(m)
|
230
|
+
Jubatus::Common.check_type(m, Integer)
|
231
|
+
if not (@values.include?(m))
|
232
|
+
raise ValueError
|
233
|
+
end
|
234
|
+
return m
|
235
|
+
end
|
236
|
+
|
237
|
+
def to_msgpack(m)
|
238
|
+
Jubatus::Common.check_type(m, Integer)
|
239
|
+
if not (@values.inlcude?(m))
|
240
|
+
raise ValueError
|
241
|
+
end
|
242
|
+
return m
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
end
|
247
|
+
end
|
data/lib/jubatus/graph/client.rb
CHANGED
@@ -1,92 +1,115 @@
|
|
1
|
-
# This file is auto-generated from graph.idl
|
1
|
+
# This file is auto-generated from graph.idl(0.4.5-347-g86989a6) with jenerator version 0.4.5-418-gd2d5f04/develop
|
2
2
|
# *** DO NOT EDIT ***
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'msgpack/rpc'
|
6
|
+
require 'jubatus/common'
|
6
7
|
require File.join(File.dirname(__FILE__), 'types')
|
7
8
|
|
8
9
|
module Jubatus
|
10
|
+
|
9
11
|
module Graph
|
10
12
|
module Client
|
11
13
|
|
12
|
-
class Graph
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
def get_client
|
17
|
-
@cli
|
18
|
-
end
|
19
|
-
def get_config(name)
|
20
|
-
@cli.call(:get_config, name)
|
21
|
-
end
|
22
|
-
def create_node(name)
|
23
|
-
@cli.call(:create_node, name)
|
14
|
+
class Graph < Jubatus::Common::ClientBase
|
15
|
+
include Jubatus::Common
|
16
|
+
def initialize(host, port, name, timeout_sec=10)
|
17
|
+
super
|
24
18
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
def update_node(name, node_id, property)
|
29
|
-
@cli.call(:update_node, name, node_id, property)
|
30
|
-
end
|
31
|
-
def create_edge(name, node_id, e)
|
32
|
-
@cli.call(:create_edge, name, node_id, e)
|
19
|
+
|
20
|
+
def create_node
|
21
|
+
@jubatus_client.call("create_node", [], TString.new, [])
|
33
22
|
end
|
34
|
-
|
35
|
-
|
23
|
+
|
24
|
+
def remove_node(node_id)
|
25
|
+
@jubatus_client.call("remove_node", [node_id], TBool.new, [TString.new])
|
36
26
|
end
|
37
|
-
|
38
|
-
|
27
|
+
|
28
|
+
def update_node(node_id, property)
|
29
|
+
@jubatus_client.call("update_node", [node_id, property], TBool.new,
|
30
|
+
[TString.new, TMap.new(TString.new, TString.new)])
|
39
31
|
end
|
40
|
-
|
41
|
-
|
32
|
+
|
33
|
+
def create_edge(node_id, e)
|
34
|
+
@jubatus_client.call("create_edge", [node_id, e], TInt.new(false, 8),
|
35
|
+
[TString.new, TUserDef.new(Edge)])
|
42
36
|
end
|
43
|
-
|
44
|
-
|
37
|
+
|
38
|
+
def update_edge(node_id, edge_id, e)
|
39
|
+
@jubatus_client.call("update_edge", [node_id, edge_id, e], TBool.new,
|
40
|
+
[TString.new, TInt.new(false, 8), TUserDef.new(Edge)])
|
45
41
|
end
|
46
|
-
|
47
|
-
|
42
|
+
|
43
|
+
def remove_edge(node_id, edge_id)
|
44
|
+
@jubatus_client.call("remove_edge", [node_id, edge_id], TBool.new,
|
45
|
+
[TString.new, TInt.new(false, 8)])
|
48
46
|
end
|
49
|
-
|
50
|
-
|
47
|
+
|
48
|
+
def get_centrality(node_id, centrality_type, query)
|
49
|
+
@jubatus_client.call("get_centrality", [node_id, centrality_type, query],
|
50
|
+
TFloat.new, [TString.new, TInt.new(true, 4), TUserDef.new(PresetQuery)])
|
51
51
|
end
|
52
|
-
|
53
|
-
|
52
|
+
|
53
|
+
def add_centrality_query(query)
|
54
|
+
@jubatus_client.call("add_centrality_query", [query], TBool.new,
|
55
|
+
[TUserDef.new(PresetQuery)])
|
54
56
|
end
|
55
|
-
|
56
|
-
|
57
|
+
|
58
|
+
def add_shortest_path_query(query)
|
59
|
+
@jubatus_client.call("add_shortest_path_query", [query], TBool.new,
|
60
|
+
[TUserDef.new(PresetQuery)])
|
57
61
|
end
|
58
|
-
|
59
|
-
|
62
|
+
|
63
|
+
def remove_centrality_query(query)
|
64
|
+
@jubatus_client.call("remove_centrality_query", [query], TBool.new,
|
65
|
+
[TUserDef.new(PresetQuery)])
|
60
66
|
end
|
61
|
-
|
62
|
-
|
67
|
+
|
68
|
+
def remove_shortest_path_query(query)
|
69
|
+
@jubatus_client.call("remove_shortest_path_query", [query], TBool.new,
|
70
|
+
[TUserDef.new(PresetQuery)])
|
63
71
|
end
|
64
|
-
|
65
|
-
|
72
|
+
|
73
|
+
def get_shortest_path(query)
|
74
|
+
@jubatus_client.call("get_shortest_path", [query], TList.new(TString.new),
|
75
|
+
[TUserDef.new(ShortestPathQuery)])
|
66
76
|
end
|
67
|
-
|
68
|
-
|
77
|
+
|
78
|
+
def update_index
|
79
|
+
@jubatus_client.call("update_index", [], TBool.new, [])
|
69
80
|
end
|
70
|
-
|
71
|
-
|
81
|
+
|
82
|
+
def clear
|
83
|
+
@jubatus_client.call("clear", [], TBool.new, [])
|
72
84
|
end
|
73
|
-
|
74
|
-
|
85
|
+
|
86
|
+
def get_node(node_id)
|
87
|
+
@jubatus_client.call("get_node", [node_id], TUserDef.new(Node),
|
88
|
+
[TString.new])
|
75
89
|
end
|
76
|
-
|
77
|
-
|
90
|
+
|
91
|
+
def get_edge(node_id, edge_id)
|
92
|
+
@jubatus_client.call("get_edge", [node_id, edge_id], TUserDef.new(Edge),
|
93
|
+
[TString.new, TInt.new(false, 8)])
|
78
94
|
end
|
79
|
-
|
80
|
-
|
95
|
+
|
96
|
+
def create_node_here(node_id)
|
97
|
+
@jubatus_client.call("create_node_here", [node_id], TBool.new,
|
98
|
+
[TString.new])
|
81
99
|
end
|
82
|
-
|
83
|
-
|
100
|
+
|
101
|
+
def remove_global_node(node_id)
|
102
|
+
@jubatus_client.call("remove_global_node", [node_id], TBool.new,
|
103
|
+
[TString.new])
|
84
104
|
end
|
85
|
-
|
86
|
-
|
105
|
+
|
106
|
+
def create_edge_here(edge_id, e)
|
107
|
+
@jubatus_client.call("create_edge_here", [edge_id, e], TBool.new, [TInt.new(
|
108
|
+
false, 8), TUserDef.new(Edge)])
|
87
109
|
end
|
88
110
|
end
|
89
111
|
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
112
|
+
end # Client
|
113
|
+
end # Graph
|
114
|
+
|
115
|
+
end # Jubatus
|