trace_visualization 0.0.3 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/bin/trace_visualization +21 -26
- data/lib/trace_visualization.rb +2 -2
- data/lib/trace_visualization/algorithm.rb +42 -0
- data/lib/trace_visualization/data/irepetition.rb +5 -1
- data/lib/trace_visualization/data/repetition.rb +14 -6
- data/lib/trace_visualization/data/sorted_array.rb +44 -0
- data/lib/trace_visualization/data/{lexeme.rb → token.rb} +7 -8
- data/lib/trace_visualization/lexeme_overlap_filter.rb +18 -18
- data/lib/trace_visualization/mapping.rb +72 -185
- data/lib/trace_visualization/repetitions/concatenation.rb +136 -0
- data/lib/trace_visualization/repetitions/context.rb +70 -0
- data/lib/trace_visualization/repetitions/filter.rb +153 -0
- data/lib/trace_visualization/repetitions/incrementation.rb +89 -0
- data/lib/trace_visualization/repetitions_psy.rb +12 -5
- data/lib/trace_visualization/utils.rb +5 -42
- data/lib/trace_visualization/version.rb +1 -1
- data/lib/trace_visualization/visualization/console_color_print.rb +20 -4
- data/spec/algorithm_spec.rb +69 -0
- data/spec/bwt_spec.rb +2 -5
- data/spec/data/sorted_array_spec.rb +27 -0
- data/spec/lexeme_overlap_filter_spec.rb +22 -22
- data/spec/longest_common_prefix_spec.rb +3 -8
- data/spec/mapping_spec.rb +72 -69
- data/spec/repetitions/concatenation_spec.rb +65 -0
- data/spec/repetitions/filter_spec.rb +180 -0
- data/spec/repetitions/incrementation_spec.rb +29 -0
- data/spec/repetitions_psy_spec.rb +7 -16
- data/spec/suffix_array_spec.rb +11 -31
- data/spec/utils_spec.rb +21 -9
- data/spec/visualization/console_color_print_spec.rb +26 -0
- data/trace_visualization.gemspec +2 -2
- metadata +27 -13
- data/lib/trace_visualization/repetitions_concatenation.rb +0 -134
- data/lib/trace_visualization/repetitions_context.rb +0 -18
- data/spec/repetitions_concatenation_spec.rb +0 -64
data/trace_visualization.gemspec
CHANGED
@@ -25,8 +25,8 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
26
26
|
spec.add_development_dependency 'rake'
|
27
27
|
|
28
|
-
spec.add_development_dependency 'redcarpet'
|
29
|
-
spec.add_development_dependency 'yard',
|
28
|
+
spec.add_development_dependency 'redcarpet'
|
29
|
+
spec.add_development_dependency 'yard', "~> 0.8.7.3"
|
30
30
|
|
31
31
|
spec.add_development_dependency 'rspec-core', '~> 2.0'
|
32
32
|
spec.add_development_dependency 'rspec-expectations', '~> 2.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trace_visualization
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,30 +42,30 @@ dependencies:
|
|
42
42
|
name: redcarpet
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: yard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.7.
|
61
|
+
version: 0.8.7.3
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.7.
|
68
|
+
version: 0.8.7.3
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec-core
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,12 +137,14 @@ files:
|
|
137
137
|
- Rakefile
|
138
138
|
- bin/trace_visualization
|
139
139
|
- lib/trace_visualization.rb
|
140
|
+
- lib/trace_visualization/algorithm.rb
|
140
141
|
- lib/trace_visualization/assert.rb
|
141
142
|
- lib/trace_visualization/bwt.rb
|
142
143
|
- lib/trace_visualization/bwt.rbold
|
143
144
|
- lib/trace_visualization/data/irepetition.rb
|
144
|
-
- lib/trace_visualization/data/lexeme.rb
|
145
145
|
- lib/trace_visualization/data/repetition.rb
|
146
|
+
- lib/trace_visualization/data/sorted_array.rb
|
147
|
+
- lib/trace_visualization/data/token.rb
|
146
148
|
- lib/trace_visualization/generators.rb
|
147
149
|
- lib/trace_visualization/lexeme_overlap_filter.rb
|
148
150
|
- lib/trace_visualization/longest_common_prefix.rb
|
@@ -150,8 +152,10 @@ files:
|
|
150
152
|
- lib/trace_visualization/profile.rb
|
151
153
|
- lib/trace_visualization/reorder.rb
|
152
154
|
- lib/trace_visualization/repetitions.rb
|
153
|
-
- lib/trace_visualization/
|
154
|
-
- lib/trace_visualization/
|
155
|
+
- lib/trace_visualization/repetitions/concatenation.rb
|
156
|
+
- lib/trace_visualization/repetitions/context.rb
|
157
|
+
- lib/trace_visualization/repetitions/filter.rb
|
158
|
+
- lib/trace_visualization/repetitions/incrementation.rb
|
155
159
|
- lib/trace_visualization/repetitions_incrementation.rb
|
156
160
|
- lib/trace_visualization/repetitions_psy.rb
|
157
161
|
- lib/trace_visualization/repetitions_score.rb
|
@@ -159,19 +163,24 @@ files:
|
|
159
163
|
- lib/trace_visualization/utils.rb
|
160
164
|
- lib/trace_visualization/version.rb
|
161
165
|
- lib/trace_visualization/visualization/console_color_print.rb
|
166
|
+
- spec/algorithm_spec.rb
|
162
167
|
- spec/bwt_spec.rb
|
168
|
+
- spec/data/sorted_array_spec.rb
|
163
169
|
- spec/generators_spec.rb
|
164
170
|
- spec/lexeme_overlap_filter_spec.rb
|
165
171
|
- spec/longest_common_prefix_spec.rb
|
166
172
|
- spec/mapping_spec.rb
|
167
173
|
- spec/reorder_spec.rb
|
168
|
-
- spec/
|
174
|
+
- spec/repetitions/concatenation_spec.rb
|
175
|
+
- spec/repetitions/filter_spec.rb
|
176
|
+
- spec/repetitions/incrementation_spec.rb
|
169
177
|
- spec/repetitions_incrementation_spec.rb
|
170
178
|
- spec/repetitions_psy_spec.rb
|
171
179
|
- spec/repetitions_spec.rb
|
172
180
|
- spec/spec_helper.rb
|
173
181
|
- spec/suffix_array_spec.rb
|
174
182
|
- spec/utils_spec.rb
|
183
|
+
- spec/visualization/console_color_print_spec.rb
|
175
184
|
- trace_visualization.gemspec
|
176
185
|
homepage: ''
|
177
186
|
licenses:
|
@@ -198,17 +207,22 @@ signing_key:
|
|
198
207
|
specification_version: 4
|
199
208
|
summary: Software for smart trace visualization
|
200
209
|
test_files:
|
210
|
+
- spec/algorithm_spec.rb
|
201
211
|
- spec/bwt_spec.rb
|
212
|
+
- spec/data/sorted_array_spec.rb
|
202
213
|
- spec/generators_spec.rb
|
203
214
|
- spec/lexeme_overlap_filter_spec.rb
|
204
215
|
- spec/longest_common_prefix_spec.rb
|
205
216
|
- spec/mapping_spec.rb
|
206
217
|
- spec/reorder_spec.rb
|
207
|
-
- spec/
|
218
|
+
- spec/repetitions/concatenation_spec.rb
|
219
|
+
- spec/repetitions/filter_spec.rb
|
220
|
+
- spec/repetitions/incrementation_spec.rb
|
208
221
|
- spec/repetitions_incrementation_spec.rb
|
209
222
|
- spec/repetitions_psy_spec.rb
|
210
223
|
- spec/repetitions_spec.rb
|
211
224
|
- spec/spec_helper.rb
|
212
225
|
- spec/suffix_array_spec.rb
|
213
226
|
- spec/utils_spec.rb
|
227
|
+
- spec/visualization/console_color_print_spec.rb
|
214
228
|
has_rdoc:
|
@@ -1,134 +0,0 @@
|
|
1
|
-
require 'trace_visualization'
|
2
|
-
|
3
|
-
module TraceVisualization
|
4
|
-
module RepetitionsConcatenation
|
5
|
-
|
6
|
-
def self.process(rs, k, context, options = {})
|
7
|
-
opts = {
|
8
|
-
:positions_min_size => 3
|
9
|
-
}.merge options
|
10
|
-
|
11
|
-
result = []
|
12
|
-
|
13
|
-
useful_cnt = 0
|
14
|
-
|
15
|
-
pairs_cnt = {}
|
16
|
-
context.rs_by_line.each do |item|
|
17
|
-
for i in 0 ... item.size
|
18
|
-
for j in i + 1 ... item.size
|
19
|
-
left, right = item[i][0], item[j][0]
|
20
|
-
delta = k - left.k - right.k
|
21
|
-
|
22
|
-
next if not concat_condition(left, right, delta, opts[:positions_min_size])
|
23
|
-
|
24
|
-
key = (left.id << 32) + right.id
|
25
|
-
val = (pairs_cnt[key] || 0) + 1
|
26
|
-
pairs_cnt[key] = val
|
27
|
-
next if val != opts[:positions_min_size]
|
28
|
-
|
29
|
-
lps, rps = process_common_positions(left, right, delta, context)
|
30
|
-
|
31
|
-
if lps.size >= opts[:positions_min_size]
|
32
|
-
result << create_repetition(left, right, delta, lps, rps)
|
33
|
-
end
|
34
|
-
|
35
|
-
useful_cnt += 1
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
options[:counter] << [k, useful_cnt] if options[:counter]
|
41
|
-
|
42
|
-
puts "Total: #{rs.size ** 2} #{useful_cnt} #{result.size}"
|
43
|
-
|
44
|
-
process_new_repetitions(result)
|
45
|
-
|
46
|
-
rs.concat(result)
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.process_new_repetitions(rs, context)
|
50
|
-
TraceVisualization::Utils.rs_by_line(rs, context.lines_pos, context.rs_by_line)
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.process_full_search(rs, k, context, options = {})
|
54
|
-
opts = {
|
55
|
-
:positions_min_size => 3
|
56
|
-
}.merge options
|
57
|
-
|
58
|
-
result = []
|
59
|
-
|
60
|
-
useful_cnt = 0
|
61
|
-
|
62
|
-
for left in rs
|
63
|
-
for right in rs
|
64
|
-
delta = k - left.k - right.k
|
65
|
-
next if not concat_condition(left, right, delta, opts[:positions_min_size])
|
66
|
-
|
67
|
-
# @@processed_path.add(key(left, right, delta))
|
68
|
-
|
69
|
-
lps, rps = process_common_positions(left, right, delta, context)
|
70
|
-
|
71
|
-
if lps.size >= opts[:positions_min_size]
|
72
|
-
result << create_repetition(left, right, delta, lps, rps)
|
73
|
-
end
|
74
|
-
|
75
|
-
useful_cnt += 1
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
puts "Total: #{rs.size ** 2} #{useful_cnt} #{result.size}"
|
80
|
-
|
81
|
-
rs.concat(result)
|
82
|
-
end
|
83
|
-
|
84
|
-
def self.delete_repetition(r, context)
|
85
|
-
r.lines.each do |line|
|
86
|
-
context.rs_by_line[line].delete_if { |item| item[0] == r }
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def self.concat_condition(left, right, delta, positions_min_size)
|
91
|
-
delta >= 0 && left.id != right.id &&
|
92
|
-
left.positions_size >= positions_min_size &&
|
93
|
-
right.positions_size >= positions_min_size
|
94
|
-
end
|
95
|
-
|
96
|
-
# *Attention* Position arrays are modified in place which can lead to side
|
97
|
-
# effects. Don't send left == right!
|
98
|
-
def self.process_common_positions(left, right, delta, context)
|
99
|
-
lr_pos = left.left_positions
|
100
|
-
lr_pos.collect! { |pos| pos + left.length + delta }
|
101
|
-
|
102
|
-
rr_pos = right.left_positions
|
103
|
-
|
104
|
-
cpr = lr_pos & rr_pos
|
105
|
-
cpl = cpr.collect { |pos| pos - left.length - delta }
|
106
|
-
|
107
|
-
idx = 0
|
108
|
-
while idx < cpr.size
|
109
|
-
if context.str[cpl[idx] + left.length ... cpr[idx]].scan(TraceVisualization::FORBIDDEN_CHARS).size != 0
|
110
|
-
cpr.delete_at(idx)
|
111
|
-
cpl.delete_at(idx)
|
112
|
-
else
|
113
|
-
idx += 1
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
lr_pos.collect! { |lpos| lpos - left.length - delta }
|
118
|
-
|
119
|
-
[cpl, cpr]
|
120
|
-
end
|
121
|
-
|
122
|
-
def self.create_repetition(left, right, delta, lps, rps)
|
123
|
-
r = left.class.new(left.length + right.length + delta, lps, rps)
|
124
|
-
|
125
|
-
r.k = left.k + right.k + delta
|
126
|
-
r.pcount = left.pcount + right.pcount
|
127
|
-
r.left = left
|
128
|
-
r.right = right
|
129
|
-
r.strict_ids = left.strict_ids + right.strict_ids
|
130
|
-
|
131
|
-
r
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'trace_visualization/utils'
|
2
|
-
|
3
|
-
module TraceVisualization
|
4
|
-
module Repetitions
|
5
|
-
class Context
|
6
|
-
attr_accessor :str, :lines_pos, :rs_by_line
|
7
|
-
|
8
|
-
def initialize(str, rs)
|
9
|
-
@str = str
|
10
|
-
@lines_pos = TraceVisualization::Utils.lines_pos(str)
|
11
|
-
@rs_by_line = Array.new(@lines_pos.size) { [] }
|
12
|
-
|
13
|
-
TraceVisualization::Utils.rs_by_line(rs, @lines_pos, @rs_by_line)
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'trace_visualization/repetitions_concatenation'
|
2
|
-
require 'trace_visualization/repetitions_context'
|
3
|
-
require 'trace_visualization/data/repetition'
|
4
|
-
|
5
|
-
describe TraceVisualization::RepetitionsConcatenation do
|
6
|
-
it "process common positions" do
|
7
|
-
str = "aaaxbbbyaaazbbbvaaawbbb"
|
8
|
-
|
9
|
-
mapping = TraceVisualization::Mapping.init do
|
10
|
-
default_tokens
|
11
|
-
end
|
12
|
-
|
13
|
-
mapping.process { from_string(str) }
|
14
|
-
|
15
|
-
context = TraceVisualization::Repetitions::Context.new(mapping, [])
|
16
|
-
|
17
|
-
lpos = [0, 8, 16]
|
18
|
-
rpos = [4, 12, 20]
|
19
|
-
ppos = [[0, 4], [8, 12], [16, 20]]
|
20
|
-
|
21
|
-
left = TraceVisualization::Data::Repetition.new(3, lpos)
|
22
|
-
right = TraceVisualization::Data::Repetition.new(3, rpos)
|
23
|
-
|
24
|
-
cpl, cpr = TraceVisualization::RepetitionsConcatenation.process_common_positions(left, right, 1, context)
|
25
|
-
|
26
|
-
left.left_positions.should eq cpl
|
27
|
-
right.left_positions.should eq cpr
|
28
|
-
|
29
|
-
lpos.should eq left.left_positions
|
30
|
-
rpos.should eq right.left_positions
|
31
|
-
end
|
32
|
-
|
33
|
-
it "don't concatenate repetitions through forbidden chars" do
|
34
|
-
str = <<EOF
|
35
|
-
aaa
|
36
|
-
bbb
|
37
|
-
aaa
|
38
|
-
bbb
|
39
|
-
EOF
|
40
|
-
context = TraceVisualization::Repetitions::Context.new(str, [])
|
41
|
-
|
42
|
-
lpos, rpos = [0, 8], [4, 12]
|
43
|
-
left = TraceVisualization::Data::Repetition.new(3, lpos)
|
44
|
-
right = TraceVisualization::Data::Repetition.new(3, rpos)
|
45
|
-
|
46
|
-
cpl, cpr = TraceVisualization::RepetitionsConcatenation.process_common_positions(left, right, 1, context)
|
47
|
-
|
48
|
-
cpl.should eq []
|
49
|
-
cpr.should eq []
|
50
|
-
|
51
|
-
#
|
52
|
-
str.gsub!(TraceVisualization::FORBIDDEN_CHARS, "x")
|
53
|
-
context = TraceVisualization::Repetitions::Context.new(str, [])
|
54
|
-
|
55
|
-
lpos, rpos = [0, 8], [4, 12]
|
56
|
-
left = TraceVisualization::Data::Repetition.new(3, lpos)
|
57
|
-
right = TraceVisualization::Data::Repetition.new(3, rpos)
|
58
|
-
|
59
|
-
cpl, cpr = TraceVisualization::RepetitionsConcatenation.process_common_positions(left, right, 1, context)
|
60
|
-
|
61
|
-
cpl.should eq [0, 8]
|
62
|
-
cpr.should eq [4, 12]
|
63
|
-
end
|
64
|
-
end
|