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 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