fwt 0.2.1 → 1.0.0
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/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:
|