wongi-engine 0.4.0.pre.alpha8 → 0.4.0.pre.alpha9
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.
- checksums.yaml +4 -4
- data/lib/wongi-engine/alpha_index.rb +2 -2
- data/lib/wongi-engine/dsl/action/statement_generator.rb +3 -2
- data/lib/wongi-engine/network.rb +4 -5
- data/lib/wongi-engine/overlay.rb +37 -41
- data/lib/wongi-engine/template.rb +0 -12
- data/lib/wongi-engine/version.rb +1 -1
- data/spec/alpha_index_spec.rb +6 -6
- data/spec/overlay_spec.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b8990e295e71589c0de4e5ab8ab947e4a88d6de25df75d15ea219532cd923e7
|
4
|
+
data.tar.gz: ba314dbc0885f56c74b876d00f3b903836931a0b959b23708375c778692801c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34593896193fc9eb110f04794c2f33ae43f53e6061bf557e16320f980646999573002e186f4ef591388b16692419eb478aaab80e03250f500a64c407fc227333
|
7
|
+
data.tar.gz: 97a14c3519ca53e3cbc665ff9d682ff41cc8b20a3d3e4f6de238c67c4a9ad6ac4d31dc90c605b83c205f5e469f8394a8d501377ea476c484291542fa6bd1c371
|
@@ -6,11 +6,11 @@ module Wongi::Engine
|
|
6
6
|
|
7
7
|
def initialize(pattern)
|
8
8
|
@pattern = pattern
|
9
|
-
@index = Hash.new { |h, k| h[k] =
|
9
|
+
@index = Hash.new { |h, k| h[k] = Set.new }
|
10
10
|
end
|
11
11
|
|
12
12
|
def add(wme)
|
13
|
-
collection_for_wme(wme).
|
13
|
+
collection_for_wme(wme).add(wme)
|
14
14
|
end
|
15
15
|
|
16
16
|
def remove(wme)
|
@@ -43,7 +43,7 @@ module Wongi::Engine
|
|
43
43
|
# TODO: clean up
|
44
44
|
return false if token.node.is_a?(NegNode) && wme =~ token.node.alpha.template && token.node.matches?(token, wme) # how much is actually necessary?
|
45
45
|
|
46
|
-
|
46
|
+
token.parents.each { |parent| tokens_to_consider.push(parent) unless considered_tokens.include?(parent) }
|
47
47
|
|
48
48
|
next unless token.wme
|
49
49
|
|
@@ -57,9 +57,10 @@ module Wongi::Engine
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def deexecute(token)
|
60
|
+
# p deexecute: {token:}
|
60
61
|
origin = GeneratorOrigin.new(token, self)
|
61
62
|
|
62
|
-
generated = token.generated_wmes.select { overlay.generators(_1).include?(origin) }
|
63
|
+
generated = token.generated_wmes.dup # select { overlay.generators(_1).include?(origin) }
|
63
64
|
generated.each do |wme|
|
64
65
|
overlay.retract wme, generator: origin
|
65
66
|
end
|
data/lib/wongi-engine/network.rb
CHANGED
@@ -43,7 +43,7 @@ module Wongi::Engine
|
|
43
43
|
@overlays = [base_overlay]
|
44
44
|
|
45
45
|
self.alpha_top = AlphaMemory.new(Template.new(:_, :_, :_), self)
|
46
|
-
self.alpha_hash = { alpha_top.template
|
46
|
+
self.alpha_hash = { alpha_top.template => alpha_top }
|
47
47
|
self.beta_top = RootNode.new(nil)
|
48
48
|
beta_top.rete = self
|
49
49
|
beta_top.seed
|
@@ -188,13 +188,12 @@ module Wongi::Engine
|
|
188
188
|
template.predicate = condition.predicate unless Template.variable?(condition.predicate)
|
189
189
|
template.object = condition.object unless Template.variable?(condition.object)
|
190
190
|
|
191
|
-
hash = template.hash
|
192
191
|
# puts "COMPILED CONDITION #{condition} WITH KEY #{key}"
|
193
|
-
return alpha_hash[
|
192
|
+
return alpha_hash[template] if alpha_hash.key?(template)
|
194
193
|
|
195
194
|
alpha = AlphaMemory.new(template, self)
|
196
195
|
|
197
|
-
alpha_hash[
|
196
|
+
alpha_hash[template] = alpha
|
198
197
|
initial_fill alpha
|
199
198
|
|
200
199
|
alpha
|
@@ -290,7 +289,7 @@ module Wongi::Engine
|
|
290
289
|
end
|
291
290
|
|
292
291
|
def lookup(s, p, o)
|
293
|
-
key = Template.
|
292
|
+
key = Template.new(s, p, o)
|
294
293
|
# puts "Lookup for #{key}"
|
295
294
|
alpha_hash[key]
|
296
295
|
end
|
data/lib/wongi-engine/overlay.rb
CHANGED
@@ -12,7 +12,7 @@ module Wongi::Engine
|
|
12
12
|
|
13
13
|
def for(wme: nil, token: nil)
|
14
14
|
if wme
|
15
|
-
by_wme.key?(wme
|
15
|
+
by_wme.key?(wme) ? by_wme[wme].keys : []
|
16
16
|
elsif token
|
17
17
|
by_token.key?(token.object_id) ? by_token[token.object_id].keys : []
|
18
18
|
else
|
@@ -21,7 +21,7 @@ module Wongi::Engine
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def has?(jr)
|
24
|
-
by_wme.key?(jr.wme
|
24
|
+
by_wme.key?(jr.wme) && by_wme[jr.wme].key?(jr)
|
25
25
|
end
|
26
26
|
|
27
27
|
def hidden?(jr)
|
@@ -32,7 +32,7 @@ module Wongi::Engine
|
|
32
32
|
if hidden.key?(jr)
|
33
33
|
hidden.delete(jr)
|
34
34
|
else
|
35
|
-
by_wme[jr.wme
|
35
|
+
by_wme[jr.wme][jr] = true
|
36
36
|
by_token[jr.token.object_id][jr] = true
|
37
37
|
end
|
38
38
|
end
|
@@ -43,10 +43,10 @@ module Wongi::Engine
|
|
43
43
|
return
|
44
44
|
end
|
45
45
|
|
46
|
-
if by_wme.key?(jr.wme
|
47
|
-
by_wme[jr.wme
|
48
|
-
if by_wme[jr.wme
|
49
|
-
by_wme.delete(jr.wme
|
46
|
+
if by_wme.key?(jr.wme)
|
47
|
+
by_wme[jr.wme].delete(jr)
|
48
|
+
if by_wme[jr.wme].empty?
|
49
|
+
by_wme.delete(jr.wme)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -71,9 +71,9 @@ module Wongi::Engine
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def remove_wme(wme)
|
74
|
-
return unless by_wme.key?(wme
|
74
|
+
return unless by_wme.key?(wme)
|
75
75
|
|
76
|
-
by_wme[wme
|
76
|
+
by_wme[wme].keys do |jr|
|
77
77
|
remove(jr)
|
78
78
|
end
|
79
79
|
end
|
@@ -99,7 +99,7 @@ module Wongi::Engine
|
|
99
99
|
@rete = rete
|
100
100
|
@parent = parent
|
101
101
|
|
102
|
-
@wmes =
|
102
|
+
@wmes = Set.new
|
103
103
|
@indexes = [
|
104
104
|
AlphaIndex.new(%i[subject]),
|
105
105
|
AlphaIndex.new(%i[predicate]),
|
@@ -238,9 +238,9 @@ module Wongi::Engine
|
|
238
238
|
end
|
239
239
|
|
240
240
|
def manual?(wme)
|
241
|
-
wme_manual.key?(wme
|
241
|
+
wme_manual.key?(wme) ||
|
242
242
|
if parent
|
243
|
-
parent.manual?(wme) && !hidden_parent_wme_manual.key?(wme
|
243
|
+
parent.manual?(wme) && !hidden_parent_wme_manual.key?(wme)
|
244
244
|
end
|
245
245
|
end
|
246
246
|
|
@@ -258,11 +258,11 @@ module Wongi::Engine
|
|
258
258
|
end
|
259
259
|
|
260
260
|
private def own_generated_by?(wme, gen)
|
261
|
-
wme_generators.key?(wme
|
261
|
+
wme_generators.key?(wme) && wme_generators[wme].include?(gen)
|
262
262
|
end
|
263
263
|
|
264
264
|
def generators(wme)
|
265
|
-
own_generators = wme_generators.key?(wme
|
265
|
+
own_generators = wme_generators.key?(wme) ? wme_generators[wme] : []
|
266
266
|
parent_generators =
|
267
267
|
if parent
|
268
268
|
parent.generators(wme).reject { |g| hidden_parent_wme_generators.key?(g) }
|
@@ -273,11 +273,11 @@ module Wongi::Engine
|
|
273
273
|
end
|
274
274
|
|
275
275
|
private def own_manual?(wme)
|
276
|
-
wme_manual.key?(wme
|
276
|
+
wme_manual.key?(wme)
|
277
277
|
end
|
278
278
|
|
279
279
|
private def own_generated?(wme)
|
280
|
-
wme_generators.key?(wme
|
280
|
+
wme_generators.key?(wme) && wme_generators[wme].any?
|
281
281
|
end
|
282
282
|
|
283
283
|
private def find_wme(wme)
|
@@ -285,11 +285,7 @@ module Wongi::Engine
|
|
285
285
|
end
|
286
286
|
|
287
287
|
private def find_own_wme(wme)
|
288
|
-
|
289
|
-
index.collection_for_wme(wme)
|
290
|
-
}
|
291
|
-
smallest = collections.min_by(&:size)
|
292
|
-
smallest.find { _1 == wme }
|
288
|
+
wmes.include?(wme) ? wme : nil
|
293
289
|
end
|
294
290
|
|
295
291
|
private def find_parents_wme(wme)
|
@@ -325,9 +321,9 @@ module Wongi::Engine
|
|
325
321
|
|
326
322
|
private def select_parents_template(template)
|
327
323
|
if parent
|
328
|
-
parent.select(template).reject { hidden_wme?(_1) }
|
324
|
+
parent.select(template).reject { hidden_wme?(_1) }.to_set
|
329
325
|
else
|
330
|
-
|
326
|
+
Set.new
|
331
327
|
end
|
332
328
|
end
|
333
329
|
|
@@ -335,32 +331,32 @@ module Wongi::Engine
|
|
335
331
|
# p add_wme: { wme:, generator: !!generator }
|
336
332
|
|
337
333
|
# if we previously hid this locally, unhide it
|
338
|
-
hidden_parent_wmes.delete(wme
|
334
|
+
hidden_parent_wmes.delete(wme)
|
339
335
|
if generator
|
340
336
|
hidden_parent_wme_generators.delete(generator)
|
341
337
|
else
|
342
|
-
hidden_parent_wme_manual.delete(wme
|
338
|
+
hidden_parent_wme_manual.delete(wme)
|
343
339
|
end
|
344
340
|
|
345
341
|
if find_own_wme(wme)
|
346
342
|
if generator
|
347
|
-
wme_generators[wme
|
343
|
+
wme_generators[wme] << generator unless own_generated_by?(wme, generator)
|
348
344
|
else
|
349
|
-
wme_manual[wme
|
345
|
+
wme_manual[wme] = true
|
350
346
|
end
|
351
347
|
elsif find_parents_wme(wme)
|
352
348
|
if generator
|
353
|
-
wme_generators[wme
|
349
|
+
wme_generators[wme] << generator unless generated_by?(wme, generator)
|
354
350
|
else
|
355
|
-
wme_manual[wme
|
351
|
+
wme_manual[wme] = true unless manual?(wme)
|
356
352
|
end
|
357
353
|
else
|
358
|
-
wmes
|
354
|
+
wmes.add(wme)
|
359
355
|
indexes.each { _1.add(wme) }
|
360
356
|
if generator
|
361
|
-
wme_generators[wme
|
357
|
+
wme_generators[wme] << generator
|
362
358
|
else
|
363
|
-
wme_manual[wme
|
359
|
+
wme_manual[wme] = true
|
364
360
|
end
|
365
361
|
end
|
366
362
|
end
|
@@ -371,11 +367,11 @@ module Wongi::Engine
|
|
371
367
|
if find_own_wme(wme)
|
372
368
|
if generator
|
373
369
|
if own_generated_by?(wme, generator)
|
374
|
-
wme_generators[wme
|
375
|
-
wme_generators.delete(wme
|
370
|
+
wme_generators[wme].delete(generator)
|
371
|
+
wme_generators.delete(wme) if wme_generators[wme].empty?
|
376
372
|
end
|
377
373
|
elsif own_manual?(wme)
|
378
|
-
wme_manual.delete(wme
|
374
|
+
wme_manual.delete(wme)
|
379
375
|
end
|
380
376
|
|
381
377
|
if !own_generated?(wme) && !own_manual?(wme)
|
@@ -395,8 +391,8 @@ module Wongi::Engine
|
|
395
391
|
if generator
|
396
392
|
# first, delete local
|
397
393
|
if own_generated_by?(wme, generator)
|
398
|
-
wme_generators[wme
|
399
|
-
wme_generators.delete(wme
|
394
|
+
wme_generators[wme].delete(generator)
|
395
|
+
wme_generators.delete(wme) if wme_generators[wme].empty?
|
400
396
|
end
|
401
397
|
# if we're still generated, hide parents'
|
402
398
|
if generated_by?(wme, generator)
|
@@ -404,15 +400,15 @@ module Wongi::Engine
|
|
404
400
|
end
|
405
401
|
else
|
406
402
|
if own_manual?(wme)
|
407
|
-
wme_manual.delete(wme
|
403
|
+
wme_manual.delete(wme)
|
408
404
|
end
|
409
405
|
if manual?(wme)
|
410
|
-
hidden_parent_wme_manual[wme
|
406
|
+
hidden_parent_wme_manual[wme] = true
|
411
407
|
end
|
412
408
|
end
|
413
409
|
|
414
410
|
if !manual?(wme) && !generated?(wme)
|
415
|
-
hidden_parent_wmes[wme
|
411
|
+
hidden_parent_wmes[wme] = true
|
416
412
|
end
|
417
413
|
end
|
418
414
|
|
@@ -581,7 +577,7 @@ module Wongi::Engine
|
|
581
577
|
end
|
582
578
|
|
583
579
|
private def hidden_wme?(wme)
|
584
|
-
hidden_parent_wmes.key?(wme
|
580
|
+
hidden_parent_wmes.key?(wme)
|
585
581
|
end
|
586
582
|
|
587
583
|
private def hidden_token?(token)
|
@@ -36,18 +36,6 @@ module Wongi::Engine
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def hash
|
40
|
-
@hash ||= [subject.hash, predicate.hash, object.hash].hash
|
41
|
-
end
|
42
|
-
|
43
|
-
def eql?(other)
|
44
|
-
subject.eql?(other.subject) && predicate.eql?(other.predicate) && object.eql?(other.object)
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.hash_for(*args)
|
48
|
-
args.map(&:hash).hash
|
49
|
-
end
|
50
|
-
|
51
39
|
def ==(other)
|
52
40
|
other.is_a?(Template) && subject == other.subject && predicate == other.predicate && object == other.object
|
53
41
|
end
|
data/lib/wongi-engine/version.rb
CHANGED
data/spec/alpha_index_spec.rb
CHANGED
@@ -18,7 +18,7 @@ describe Wongi::Engine::AlphaIndex do
|
|
18
18
|
|
19
19
|
it 'indexes by pattern' do
|
20
20
|
expect(collection.keys).to eq([key])
|
21
|
-
expect(collection[key]).to eq([wme])
|
21
|
+
expect(collection[key]).to eq(Set.new([wme]))
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -28,7 +28,7 @@ describe Wongi::Engine::AlphaIndex do
|
|
28
28
|
|
29
29
|
it 'indexes by pattern' do
|
30
30
|
expect(collection.keys).to eq([key])
|
31
|
-
expect(collection[key]).to eq([wme])
|
31
|
+
expect(collection[key]).to eq(Set.new([wme]))
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -38,7 +38,7 @@ describe Wongi::Engine::AlphaIndex do
|
|
38
38
|
|
39
39
|
it 'indexes by pattern' do
|
40
40
|
expect(collection.keys).to eq([key])
|
41
|
-
expect(collection[key]).to eq([wme])
|
41
|
+
expect(collection[key]).to eq(Set.new([wme]))
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -48,7 +48,7 @@ describe Wongi::Engine::AlphaIndex do
|
|
48
48
|
|
49
49
|
it 'indexes by pattern' do
|
50
50
|
expect(collection.keys).to eq([key])
|
51
|
-
expect(collection[key]).to eq([wme])
|
51
|
+
expect(collection[key]).to eq(Set.new([wme]))
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -58,7 +58,7 @@ describe Wongi::Engine::AlphaIndex do
|
|
58
58
|
|
59
59
|
it 'indexes by pattern' do
|
60
60
|
expect(collection.keys).to eq([key])
|
61
|
-
expect(collection[key]).to eq([wme])
|
61
|
+
expect(collection[key]).to eq(Set.new([wme]))
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -68,7 +68,7 @@ describe Wongi::Engine::AlphaIndex do
|
|
68
68
|
|
69
69
|
it 'indexes by pattern' do
|
70
70
|
expect(collection.keys).to eq([key])
|
71
|
-
expect(collection[key]).to eq([wme])
|
71
|
+
expect(collection[key]).to eq(Set.new([wme]))
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
data/spec/overlay_spec.rb
CHANGED
@@ -66,7 +66,7 @@ describe Wongi::Engine::Overlay do
|
|
66
66
|
expect(overlay.select(:_, :_, :_)).to have(wmes.length).items
|
67
67
|
|
68
68
|
expect(overlay.select(1, 11, 111)).to have(1).items
|
69
|
-
expect(overlay.select(1, 11, 111).first).to
|
69
|
+
expect(overlay.select(1, 11, 111).first).to eq(wmes.first)
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|