rbbt-dm 1.1.42 → 1.1.43
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/rbbt/network/paths.rb +16 -12
- data/test/rbbt/network/test_paths.rb +28 -31
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 270570bf58c397ec1f6da3195f882a5cf73eb1a1
|
4
|
+
data.tar.gz: 4f7232e2c2cddff960f2f9dce6e4279298b53408
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: faa0514ae85d537007147f8a1c06367202cffa83c5081b68f9e2e23943b02cc5601160fbcfd32f0c041fd511b2f3116e82b14b5313ba57488297f76a74f77433
|
7
|
+
data.tar.gz: bc1d750d449763f45482318e1f4fe5d54f80c64eb90c3fb08c71d94d282496aa87e54004f309e2c2dac4cc3bc01995880481be490c4bf6510d1e35417276eb85
|
data/lib/rbbt/network/paths.rb
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
-
require '
|
1
|
+
require 'fc'
|
2
2
|
|
3
3
|
module Paths
|
4
4
|
|
5
5
|
def self.dijkstra(adjacency, start_node, end_node = nil, max_steps = nil)
|
6
6
|
return nil unless adjacency.include? start_node
|
7
7
|
|
8
|
-
active = PriorityQueue.new
|
8
|
+
active = FastContainers::PriorityQueue.new(:max)
|
9
9
|
distances = Hash.new { 1.0 / 0.0 }
|
10
10
|
parents = Hash.new
|
11
11
|
|
12
|
-
active
|
12
|
+
active.push(start_node, 0)
|
13
13
|
best = 1.0 / 0.0
|
14
14
|
until active.empty?
|
15
|
-
u = active.
|
16
|
-
distance = active.
|
15
|
+
u = active.top
|
16
|
+
distance = active.top_key
|
17
|
+
active.pop
|
18
|
+
|
17
19
|
distances[u] = distance
|
18
20
|
d = distance + 1
|
19
21
|
path = extract_path(parents, start_node, u)
|
@@ -21,13 +23,12 @@ module Paths
|
|
21
23
|
adjacency[u].each do |v|
|
22
24
|
next unless d < distances[v] and d < best # we can't relax this one
|
23
25
|
best = d if (String === end_node ? end_node == v : end_node.include?(v))
|
24
|
-
active
|
26
|
+
active.push(v,d) if adjacency.include? v
|
25
27
|
distances[v] = d
|
26
28
|
parents[v] = u
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
|
-
|
31
32
|
if end_node
|
32
33
|
end_node = end_node.select{|n| parents.keys.include? n}.first unless String === end_node
|
33
34
|
return nil if not parents.include? end_node
|
@@ -48,25 +49,28 @@ module Paths
|
|
48
49
|
def self.weighted_dijkstra(adjacency, start_node, end_node = nil, threshold = nil, max_steps = nil)
|
49
50
|
return nil unless adjacency.include? start_node
|
50
51
|
|
51
|
-
active = PriorityQueue.new
|
52
|
+
active = FastContainers::PriorityQueue.new(:max)
|
52
53
|
distances = Hash.new { 1.0 / 0.0 }
|
53
54
|
parents = Hash.new
|
54
55
|
|
55
|
-
active[start_node] << 0
|
56
|
+
#active[start_node] << 0
|
57
|
+
active.push(start_node, 0)
|
56
58
|
best = 1.0 / 0.0
|
57
59
|
found = false
|
58
60
|
until active.empty?
|
59
|
-
u = active.
|
60
|
-
distance = active.
|
61
|
+
u = active.top
|
62
|
+
distance = active.top_key
|
63
|
+
active.pop
|
61
64
|
distances[u] = distance
|
62
65
|
path = extract_path(parents, start_node, u)
|
63
66
|
next if path.length > max_steps if max_steps
|
64
67
|
next if not adjacency.include?(u) or (adjacency[u].nil? or adjacency[u].empty? )
|
65
68
|
Misc.zip_fields(adjacency[u]).each do |v,node_dist|
|
69
|
+
node_dist = node_dist.to_f
|
66
70
|
next if node_dist.nil? or (threshold and node_dist > threshold)
|
67
71
|
d = distance + node_dist
|
68
72
|
next unless d < distances[v] and d < best # we can't relax this one
|
69
|
-
active
|
73
|
+
active.push(v, d)
|
70
74
|
distances[v] = d
|
71
75
|
parents[v] = u
|
72
76
|
if (String === end_node ? end_node == v : end_node.include?(v))
|
@@ -7,45 +7,42 @@ require 'set'
|
|
7
7
|
|
8
8
|
class TestNetwork < Test::Unit::TestCase
|
9
9
|
def _test_dijsktra
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
10
|
+
network_txt=<<-EOF
|
11
|
+
#: :sep=/\s/#:type=:flat
|
12
|
+
#Start End
|
13
|
+
N1 N2
|
14
|
+
N2 N3 N4
|
15
|
+
N4 N5
|
16
|
+
EOF
|
17
|
+
network = TSV.open(StringIO.new(network_txt))
|
18
|
+
|
19
|
+
start_node = "N1"
|
20
|
+
end_node = "N5"
|
21
|
+
|
22
|
+
path = Paths.dijkstra(network, start_node, [end_node])
|
23
|
+
assert_equal %w(N1 N2 N4), path.reverse
|
21
24
|
end
|
22
25
|
|
23
26
|
def test_weighted_dijsktra
|
24
|
-
|
25
|
-
|
27
|
+
network_txt=<<-EOF
|
28
|
+
#: :sep=/\s/#:type=:double
|
29
|
+
#Start End Score
|
30
|
+
N1 N2|N5 1|10
|
31
|
+
N2 N3|N4 1|1
|
32
|
+
N4 N5 1
|
33
|
+
EOF
|
34
|
+
network = TSV.open(StringIO.new(network_txt))
|
26
35
|
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
start_node = "ENSP00000256078"
|
32
|
-
end_node = "ENSP00000306245"
|
33
|
-
|
34
|
-
path = Paths.weighted_dijkstra(string, start_node, end_node)
|
36
|
+
start_node = "N1"
|
37
|
+
end_node = "N5"
|
35
38
|
|
36
|
-
|
37
|
-
|
38
|
-
assert path.include? end_node
|
39
|
-
|
40
|
-
path = Paths.weighted_dijkstra(string, start_node, Set.new([end_node]))
|
39
|
+
path = Paths.weighted_dijkstra(network, start_node, [end_node])
|
40
|
+
assert_equal %w(N1 N2 N4 N5), path.reverse
|
41
41
|
|
42
|
-
assert path != nil
|
43
|
-
assert path.include? start_node
|
44
|
-
assert path.include? end_node
|
45
|
-
|
46
42
|
end
|
47
43
|
|
48
|
-
|
44
|
+
|
45
|
+
def __test_random_weighted_dijsktra
|
49
46
|
string = STRING.protein_protein.tsv
|
50
47
|
|
51
48
|
string.process "Score" do |scores|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-dm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.43
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rbbt-util
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: priority_queue_cxx
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -138,18 +138,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
138
|
version: '0'
|
139
139
|
requirements: []
|
140
140
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.6.
|
141
|
+
rubygems_version: 2.6.8
|
142
142
|
signing_key:
|
143
143
|
specification_version: 4
|
144
144
|
summary: Data-mining and statistics
|
145
145
|
test_files:
|
146
|
+
- test/test_helper.rb
|
147
|
+
- test/rbbt/test_stan.rb
|
148
|
+
- test/rbbt/vector/model/test_svm.rb
|
149
|
+
- test/rbbt/vector/test_model.rb
|
146
150
|
- test/rbbt/network/test_paths.rb
|
147
151
|
- test/rbbt/matrix/test_barcode.rb
|
148
|
-
- test/rbbt/statistics/test_random_walk.rb
|
149
152
|
- test/rbbt/statistics/test_fisher.rb
|
150
|
-
- test/rbbt/statistics/test_fdr.rb
|
151
153
|
- test/rbbt/statistics/test_hypergeometric.rb
|
152
|
-
- test/rbbt/
|
153
|
-
- test/rbbt/
|
154
|
-
- test/rbbt/test_stan.rb
|
155
|
-
- test/test_helper.rb
|
154
|
+
- test/rbbt/statistics/test_fdr.rb
|
155
|
+
- test/rbbt/statistics/test_random_walk.rb
|