wongi-engine 0.4.0.pre.alpha8 → 0.4.0.pre.alpha9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9461adc4b75933300d9be090ac8825c90ddc2b5ba167ec7e47128e4622aa853
4
- data.tar.gz: ed1f2760dae84df0faee9d8ccc80849713b849299f2b4bc5520d8004f332879f
3
+ metadata.gz: 8b8990e295e71589c0de4e5ab8ab947e4a88d6de25df75d15ea219532cd923e7
4
+ data.tar.gz: ba314dbc0885f56c74b876d00f3b903836931a0b959b23708375c778692801c9
5
5
  SHA512:
6
- metadata.gz: c3f6c9b2f491c96758c319268b61e7654dcdeab9d0acfd41c582428245fcd5b52edd2f8fa34674882600b9ce6668df6ab48de11123fcf72819d7a9d53aa4e9a4
7
- data.tar.gz: fd2e4ac006478621202f2013d43e022186e48e3411c035e9d7f2a9c6557001b17125519a2280092507ca749ef065aa43f6f69b194e37393ce365f7ae7d5e1ee2
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).push(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
- (token.parents - considered_tokens).each { |parent| tokens_to_consider.push(parent) }
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
@@ -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.hash => alpha_top }
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[hash] if alpha_hash.key?(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[hash] = alpha
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.hash_for(s, p, o)
292
+ key = Template.new(s, p, o)
294
293
  # puts "Lookup for #{key}"
295
294
  alpha_hash[key]
296
295
  end
@@ -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.object_id) ? by_wme[wme.object_id].keys : []
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.object_id) && by_wme[jr.wme.object_id].key?(jr)
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.object_id][jr] = true
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.object_id)
47
- by_wme[jr.wme.object_id].delete(jr)
48
- if by_wme[jr.wme.object_id].empty?
49
- by_wme.delete(jr.wme.object_id)
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.object_id)
74
+ return unless by_wme.key?(wme)
75
75
 
76
- by_wme[wme.object_id].keys do |jr|
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.object_id) ||
241
+ wme_manual.key?(wme) ||
242
242
  if parent
243
- parent.manual?(wme) && !hidden_parent_wme_manual.key?(wme.object_id)
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.object_id) && wme_generators[wme.object_id].include?(gen)
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.object_id) ? wme_generators[wme.object_id] : []
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.object_id)
276
+ wme_manual.key?(wme)
277
277
  end
278
278
 
279
279
  private def own_generated?(wme)
280
- wme_generators.key?(wme.object_id) && wme_generators[wme.object_id].any?
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
- collections = indexes.map { |index|
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.object_id)
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.object_id)
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.object_id] << generator unless own_generated_by?(wme, generator)
343
+ wme_generators[wme] << generator unless own_generated_by?(wme, generator)
348
344
  else
349
- wme_manual[wme.object_id] = true
345
+ wme_manual[wme] = true
350
346
  end
351
347
  elsif find_parents_wme(wme)
352
348
  if generator
353
- wme_generators[wme.object_id] << generator unless generated_by?(wme, generator)
349
+ wme_generators[wme] << generator unless generated_by?(wme, generator)
354
350
  else
355
- wme_manual[wme.object_id] = true unless manual?(wme)
351
+ wme_manual[wme] = true unless manual?(wme)
356
352
  end
357
353
  else
358
- wmes << wme
354
+ wmes.add(wme)
359
355
  indexes.each { _1.add(wme) }
360
356
  if generator
361
- wme_generators[wme.object_id] << generator
357
+ wme_generators[wme] << generator
362
358
  else
363
- wme_manual[wme.object_id] = true
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.object_id].delete(generator)
375
- wme_generators.delete(wme.object_id) if wme_generators[wme.object_id].empty?
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.object_id)
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.object_id].delete(generator)
399
- wme_generators.delete(wme.object_id) if wme_generators[wme.object_id].empty?
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.object_id)
403
+ wme_manual.delete(wme)
408
404
  end
409
405
  if manual?(wme)
410
- hidden_parent_wme_manual[wme.object_id] = true
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.object_id] = true
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.object_id)
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
@@ -1,5 +1,5 @@
1
1
  module Wongi
2
2
  module Engine
3
- VERSION = "0.4.0-alpha8".freeze
3
+ VERSION = "0.4.0-alpha9".freeze
4
4
  end
5
5
  end
@@ -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 equal(wmes.first)
69
+ expect(overlay.select(1, 11, 111).first).to eq(wmes.first)
70
70
  end
71
71
  end
72
72
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wongi-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.pre.alpha8
4
+ version: 0.4.0.pre.alpha9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valeri Sokolov