fwt 0.2.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fwt.gemspec +3 -3
- data/lib/fwt.rb +7 -15
- data/tests/test_fwt.rb +3 -3
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc144da4af3fc808cc68b7d0076a31bd3b1e35ce
|
4
|
+
data.tar.gz: 267e98bc7c5cb063a5d60dfcd51149e3064e361c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b10014fc405e7675c82e80013bbc0c879f579a4d1708840a47835fb7454c431b2e1426dd9f8bee4151bbb4d6f2d4db28db5ddcff22def78ad885f616914097f
|
7
|
+
data.tar.gz: 69a995a36d714b6052c62a1be6b30f0f940be2e062078baf4dbff4a6e923bb1096d15a75af60bef40a2645e49af1cfb56ae577af9d039af6d6febe571e72995e
|
data/fwt.gemspec
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# -*- ruby -*-
|
2
|
-
_VERSION = "0.
|
2
|
+
_VERSION = "1.0.0"
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "fwt"
|
6
6
|
s.version = _VERSION
|
7
|
-
s.date = "2013-03-
|
7
|
+
s.date = "2013-03-09"
|
8
8
|
s.summary = "Fast Walsh Transform native Ruby implementations."
|
9
9
|
s.email = "pjs@alum.mit.edu"
|
10
|
-
s.description = "Implements Hadamard- and sequency-ordered Fast Walsh Transforms as extensions of class Array."
|
10
|
+
s.description = "Implements Hadamard- and sequency-ordered Fast Walsh Transforms as extensions of class Array. Adds a boolean power_of_2? method to class Integer."
|
11
11
|
s.author = "Paul J Sanchez"
|
12
12
|
s.files = %w[
|
13
13
|
fwt.gemspec
|
data/lib/fwt.rb
CHANGED
@@ -12,9 +12,8 @@ class Array
|
|
12
12
|
# Perform a fast Walsh transformation using a Manz sequency ordered
|
13
13
|
# in-place algorithm. The array is modified by this algorithm.
|
14
14
|
def sequency
|
15
|
-
raise
|
16
|
-
|
17
|
-
) unless length.power_of_2?
|
15
|
+
raise "#{self.class}.#{__method__}: array length must be a power of 2" \
|
16
|
+
unless length.power_of_2?
|
18
17
|
j = 0
|
19
18
|
0.upto(length - 3) do |i| # Bit reversal sorting
|
20
19
|
self[i], self[j] = self[j], self[i] if (i < j)
|
@@ -34,13 +33,9 @@ class Array
|
|
34
33
|
j = i + group * offset
|
35
34
|
k = j + lag
|
36
35
|
if (group.odd?)
|
37
|
-
|
38
|
-
self[j] -= self[k]
|
39
|
-
self[k] += temp
|
36
|
+
self[j], self[k] = self[j] - self[k], self[j] + self[k]
|
40
37
|
else
|
41
|
-
|
42
|
-
self[j] += self[k]
|
43
|
-
self[k] = temp - self[k]
|
38
|
+
self[j], self[k] = self[j] + self[k], self[j] - self[k]
|
44
39
|
end
|
45
40
|
end
|
46
41
|
end
|
@@ -52,9 +47,8 @@ class Array
|
|
52
47
|
# Perform a fast Walsh transformation using a Hadamard (natural) ordered
|
53
48
|
# in-place algorithm. The array is modified by this algorithm.
|
54
49
|
def hadamard
|
55
|
-
raise
|
56
|
-
|
57
|
-
) unless length.power_of_2?
|
50
|
+
raise "#{self.class}.#{__method__}: array length must be a power of 2" \
|
51
|
+
unless length.power_of_2?
|
58
52
|
lag = 1
|
59
53
|
while lag < length
|
60
54
|
offset = lag << 1
|
@@ -63,9 +57,7 @@ class Array
|
|
63
57
|
lag.times do |base|
|
64
58
|
j = base + group * offset
|
65
59
|
k = j + lag
|
66
|
-
|
67
|
-
self[j] += self[k]
|
68
|
-
self[k] = temp - self[k]
|
60
|
+
self[j], self[k] = self[j] + self[k], self[j] - self[k]
|
69
61
|
end
|
70
62
|
end
|
71
63
|
lag = offset
|
data/tests/test_fwt.rb
CHANGED
@@ -15,7 +15,7 @@ class FWT_test < Test::Unit::TestCase
|
|
15
15
|
assert_equal [0,0,0,0,0,0,0,1].hadamard, [1, -1, -1, 1, -1, 1, 1, -1]
|
16
16
|
assert_equal [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1].sequency,
|
17
17
|
[1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1]
|
18
|
-
assert_raise
|
18
|
+
assert_raise RuntimeError do # non-power-of-2 array
|
19
19
|
[0,0,1].hadamard
|
20
20
|
end
|
21
21
|
end
|
@@ -31,10 +31,10 @@ class FWT_test < Test::Unit::TestCase
|
|
31
31
|
assert_equal [0,0,0,0,0,0,0,1].sequency, [1, -1, 1, -1, 1, -1, 1, -1]
|
32
32
|
assert_equal [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0].sequency,
|
33
33
|
[1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1]
|
34
|
-
assert_raise
|
34
|
+
assert_raise RuntimeError do # non-power-of-2 array
|
35
35
|
[0,0,1].sequency
|
36
36
|
end
|
37
|
-
assert_raise
|
37
|
+
assert_raise RuntimeError do # empty array
|
38
38
|
[].sequency
|
39
39
|
end
|
40
40
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fwt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul J Sanchez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-03-
|
11
|
+
date: 2013-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Implements Hadamard- and sequency-ordered Fast Walsh Transforms as extensions
|
14
|
-
of class Array.
|
14
|
+
of class Array. Adds a boolean power_of_2? method to class Integer.
|
15
15
|
email: pjs@alum.mit.edu
|
16
16
|
executables: []
|
17
17
|
extensions: []
|
@@ -41,8 +41,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
41
41
|
version: '0'
|
42
42
|
requirements: []
|
43
43
|
rubyforge_project:
|
44
|
-
rubygems_version: 2.0.
|
44
|
+
rubygems_version: 2.0.2
|
45
45
|
signing_key:
|
46
46
|
specification_version: 4
|
47
47
|
summary: Fast Walsh Transform native Ruby implementations.
|
48
48
|
test_files: []
|
49
|
+
has_rdoc:
|