more_math 0.3.1 → 0.3.2
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/.travis.yml +2 -11
- data/Rakefile +3 -0
- data/VERSION +1 -1
- data/lib/more_math.rb +1 -1
- data/lib/more_math/cantor_pairing_function.rb +0 -2
- data/lib/more_math/continued_fraction.rb +0 -2
- data/lib/more_math/distributions.rb +0 -1
- data/lib/more_math/functions.rb +6 -7
- data/lib/more_math/histogram.rb +19 -7
- data/lib/more_math/linear_regression.rb +0 -2
- data/lib/more_math/newton_bisection.rb +0 -1
- data/lib/more_math/numberify_string_function.rb +1 -4
- data/lib/more_math/permutation.rb +1 -1
- data/lib/more_math/sequence.rb +17 -18
- data/lib/more_math/string_numeral.rb +0 -2
- data/lib/more_math/version.rb +1 -1
- data/more_math.gemspec +11 -4
- data/tests/histogram_test.rb +3 -3
- data/tests/sequence_test.rb +15 -5
- metadata +32 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a674bc5c2a002b16b490aa9fb5680d3b7e497e7e
|
4
|
+
data.tar.gz: 013ae510e5ee3fc03e0b7db8c9af68a722a0b797
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 989ae36653fd6c16cfe669078a211993cb1a3ed849bfa38b0b4a0b3e5509f1487990687cebf66bff5855320daaded6e3980e04be7f03ac38692326ea2dec0d14
|
7
|
+
data.tar.gz: ae9dd83eea3f61457dfcaa17f8f10e8bb41d78281e890a05850e85033cc6f6b51f0a2a8f5c1f85e34e46575fb30ae8e73a4d364607ee188b73909ec735554091
|
data/.travis.yml
CHANGED
@@ -1,15 +1,6 @@
|
|
1
1
|
rvm:
|
2
|
-
- 2.0
|
3
2
|
- 2.1
|
4
3
|
- 2.2
|
5
|
-
- 2.3.
|
6
|
-
-
|
7
|
-
- jruby-head
|
8
|
-
matrix:
|
9
|
-
allow_failures:
|
10
|
-
- rvm: ruby-head
|
11
|
-
- rvm: jruby-head
|
4
|
+
- 2.3.3
|
5
|
+
- 2.4.0
|
12
6
|
sudo: false
|
13
|
-
addons:
|
14
|
-
code_climate:
|
15
|
-
repo_token: c9eff249077e5d42951c2ac14abcaba555cb214524310e8d8f1769a579cbeb81
|
data/Rakefile
CHANGED
@@ -15,8 +15,11 @@ GemHadar do
|
|
15
15
|
readme 'README.rdoc'
|
16
16
|
title "#{name.camelize} -- More Math in Ruby"
|
17
17
|
|
18
|
+
required_ruby_version '>= 2.0'
|
18
19
|
dependency 'tins', '~>1.0'
|
20
|
+
dependency 'mize'
|
19
21
|
development_dependency 'rake'
|
20
22
|
development_dependency 'simplecov'
|
21
23
|
development_dependency 'test-unit'
|
24
|
+
development_dependency "codeclimate-test-reporter"
|
22
25
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/lib/more_math.rb
CHANGED
@@ -2,7 +2,7 @@ module MoreMath
|
|
2
2
|
unless defined?(::MoreMath::Infinity) == 'constant'
|
3
3
|
Infinity = 1.0 / 0 # Refers to floating point infinity.
|
4
4
|
end
|
5
|
-
|
5
|
+
require 'mize'
|
6
6
|
require 'more_math/cantor_pairing_function'
|
7
7
|
require 'more_math/constants/functions_constants'
|
8
8
|
require 'more_math/continued_fraction'
|
data/lib/more_math/functions.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'more_math'
|
2
1
|
require 'more_math/entropy'
|
3
2
|
|
4
3
|
module MoreMath
|
@@ -52,13 +51,13 @@ module MoreMath
|
|
52
51
|
when x > (a + 1) / (a + b + 2)
|
53
52
|
1 - beta_regularized(1 - x, b, a, epsilon, max_iterations)
|
54
53
|
else
|
55
|
-
fraction = ContinuedFraction.for_b do |n,
|
54
|
+
fraction = ContinuedFraction.for_b do |n, y|
|
56
55
|
if n % 2 == 0
|
57
56
|
m = n / 2.0
|
58
|
-
(m * (b - m) *
|
57
|
+
(m * (b - m) * y) / ((a + (2 * m) - 1) * (a + (2 * m)))
|
59
58
|
else
|
60
59
|
m = (n - 1) / 2.0
|
61
|
-
-((a + m) * (a + b + m) *
|
60
|
+
-((a + m) * (a + b + m) * y) / ((a + 2 * m) * (a + 2 * m + 1))
|
62
61
|
end
|
63
62
|
end
|
64
63
|
exp(a * log(x) + b * log(1.0 - x) - log(a) - log_beta(a, b)) /
|
@@ -112,9 +111,9 @@ module MoreMath
|
|
112
111
|
when a > x || a < 1
|
113
112
|
1 - gammaP_regularized(x, a, epsilon, max_iterations)
|
114
113
|
else
|
115
|
-
fraction = ContinuedFraction.for_a do |n,
|
116
|
-
(2 * n + 1) - a +
|
117
|
-
end.for_b do |n,
|
114
|
+
fraction = ContinuedFraction.for_a do |n, y|
|
115
|
+
(2 * n + 1) - a + y
|
116
|
+
end.for_b do |n, y|
|
118
117
|
n * (a - n)
|
119
118
|
end
|
120
119
|
exp(-x + a * log(x) - log_gamma(a)) *
|
data/lib/more_math/histogram.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require 'more_math'
|
2
|
-
|
3
1
|
module MoreMath
|
4
2
|
# A histogram gives an overview of a sequence's elements.
|
5
3
|
class Histogram
|
4
|
+
Bin = Struct.new(:left, :right, :count)
|
5
|
+
|
6
6
|
# Create a Histogram for the elements of +sequence+ with +bins+ bins.
|
7
7
|
def initialize(sequence, bins = 10)
|
8
8
|
@sequence = sequence
|
@@ -13,11 +13,19 @@ module MoreMath
|
|
13
13
|
# Number of bins for this Histogram.
|
14
14
|
attr_reader :bins
|
15
15
|
|
16
|
-
# Return the computed histogram as an array of
|
16
|
+
# Return the computed histogram as an array of Bin objects.
|
17
17
|
def to_a
|
18
18
|
@result
|
19
19
|
end
|
20
20
|
|
21
|
+
def each_bin(&block)
|
22
|
+
@result.each(&block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def counts
|
26
|
+
each_bin.map(&:count)
|
27
|
+
end
|
28
|
+
|
21
29
|
# Display this histogram to +output+, +width+ is the parameter for
|
22
30
|
# +prepare_display+
|
23
31
|
def display(output = $stdout, width = 50)
|
@@ -25,9 +33,14 @@ module MoreMath
|
|
25
33
|
for l, bar, r in d
|
26
34
|
output << "%11.5f -|%s\n" % [ (l + r) / 2.0, "*" * bar ]
|
27
35
|
end
|
36
|
+
output << "max_count=#{max_count}\n"
|
28
37
|
self
|
29
38
|
end
|
30
39
|
|
40
|
+
def max_count
|
41
|
+
counts.max
|
42
|
+
end
|
43
|
+
|
31
44
|
private
|
32
45
|
|
33
46
|
# Returns an array of tuples (l, c, r) where +l+ is the left bin edge, +c+
|
@@ -35,9 +48,8 @@ module MoreMath
|
|
35
48
|
# edge. +width+ is usually an integer number representing the width of a
|
36
49
|
# histogram bar.
|
37
50
|
def prepare_display(width)
|
38
|
-
|
39
|
-
|
40
|
-
r.map { |l, c, r| [ l, (c * factor).round, r ] }
|
51
|
+
factor = width.to_f / max_count
|
52
|
+
@result.reverse_each.map { |bin| [ bin.left, (bin.count * factor).round, bin.right ] }
|
41
53
|
end
|
42
54
|
|
43
55
|
# Computes the histogram and returns it as an array of tuples (l, c, r).
|
@@ -55,7 +67,7 @@ module MoreMath
|
|
55
67
|
x > last_r and (x <= r || i == bins - 1) and c += 1
|
56
68
|
end
|
57
69
|
last_r = r
|
58
|
-
|
70
|
+
Bin.new(l, r, c)
|
59
71
|
end
|
60
72
|
end
|
61
73
|
end
|
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'more_math'
|
2
|
-
require 'tins/memoize'
|
3
|
-
|
4
1
|
module MoreMath
|
5
2
|
module NumberifyStringFunction
|
6
3
|
Functions = MoreMath::Functions
|
@@ -42,6 +39,7 @@ module MoreMath
|
|
42
39
|
end
|
43
40
|
|
44
41
|
class << self
|
42
|
+
memoize function:
|
45
43
|
def compute_size(n, b)
|
46
44
|
i = 0
|
47
45
|
while n > 0
|
@@ -50,7 +48,6 @@ module MoreMath
|
|
50
48
|
end
|
51
49
|
i
|
52
50
|
end
|
53
|
-
memoize_function :compute_size
|
54
51
|
|
55
52
|
def convert_alphabet(alphabet)
|
56
53
|
if alphabet.respond_to?(:to_ary)
|
@@ -129,7 +129,7 @@ module MoreMath
|
|
129
129
|
# # => #<Permutation:0x6ae34 @last=719, @rank=312, @size=6>
|
130
130
|
# perm.project("abcdef")
|
131
131
|
# # => "ceabdf"
|
132
|
-
def project(data = @collection)
|
132
|
+
def project(data = (@collection if defined? @collection))
|
133
133
|
data or raise ArgumentError, "a collection is required to project"
|
134
134
|
raise ArgumentError, "data size is != #{size}!" if data.size != size
|
135
135
|
projection = data.clone
|
data/lib/more_math/sequence.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'more_math'
|
2
|
-
require 'tins/memoize'
|
3
1
|
require 'more_math/sequence/moving_average'
|
4
2
|
require 'more_math/sequence/refinement'
|
5
3
|
|
@@ -34,7 +32,7 @@ module MoreMath
|
|
34
32
|
|
35
33
|
# Reset all memoized values of this sequence.
|
36
34
|
def reset
|
37
|
-
self.class.
|
35
|
+
self.class.mize_cache_clear
|
38
36
|
self
|
39
37
|
end
|
40
38
|
|
@@ -52,66 +50,67 @@ module MoreMath
|
|
52
50
|
alias << push
|
53
51
|
|
54
52
|
# Returns the variance of the elements.
|
53
|
+
memoize method:
|
55
54
|
def variance
|
56
55
|
sum_of_squares / size
|
57
56
|
end
|
58
|
-
memoize_method :variance
|
59
57
|
|
60
58
|
# Returns the sample_variance of the elements.
|
59
|
+
memoize method:
|
61
60
|
def sample_variance
|
62
61
|
size > 1 ? sum_of_squares / (size - 1.0) : 0.0
|
63
62
|
end
|
64
|
-
memoize_method :sample_variance
|
65
63
|
|
66
64
|
# Returns the sum of squares (the sum of the squared deviations) of the
|
67
65
|
# elements.
|
66
|
+
memoize method:
|
68
67
|
def sum_of_squares
|
69
68
|
@elements.inject(0.0) { |s, t| s + (t - arithmetic_mean) ** 2 }
|
70
69
|
end
|
71
|
-
memoize_method :sum_of_squares
|
72
70
|
|
73
71
|
# Returns the standard deviation of the elements.
|
72
|
+
memoize method:
|
74
73
|
def standard_deviation
|
75
74
|
Math.sqrt(variance)
|
76
75
|
end
|
77
|
-
memoize_method :standard_deviation
|
78
76
|
|
79
77
|
# Returns the standard deviation of the elements in percentage of the
|
80
78
|
# arithmetic mean.
|
79
|
+
memoize method:
|
81
80
|
def standard_deviation_percentage
|
82
81
|
100.0 * standard_deviation / arithmetic_mean
|
83
82
|
end
|
84
|
-
memoize_method :standard_deviation_percentage
|
85
83
|
|
86
84
|
# Returns the sample standard deviation of the elements.
|
85
|
+
memoize method:
|
87
86
|
def sample_standard_deviation
|
88
87
|
Math.sqrt(sample_variance)
|
89
88
|
end
|
90
|
-
memoize_method :sample_standard_deviation
|
91
89
|
|
92
90
|
# Returns the sample standard deviation of the elements in percentage
|
93
91
|
# of the arithmetic mean.
|
92
|
+
memoize method:
|
94
93
|
def sample_standard_deviation_percentage
|
95
94
|
100.0 * sample_standard_deviation / arithmetic_mean
|
96
95
|
end
|
97
|
-
memoize_method :sample_standard_deviation_percentage
|
98
96
|
|
99
97
|
# Returns the sum of all elements.
|
98
|
+
memoize method:
|
100
99
|
def sum
|
101
100
|
@elements.inject(0.0) { |s, t| s + t }
|
102
101
|
end
|
103
|
-
memoize_method :sum
|
104
102
|
|
105
103
|
# Returns the arithmetic mean of the elements.
|
104
|
+
memoize method:
|
106
105
|
def arithmetic_mean
|
107
106
|
sum / size
|
108
107
|
end
|
109
|
-
memoize_method :arithmetic_mean
|
110
108
|
|
111
109
|
alias mean arithmetic_mean
|
112
110
|
|
113
111
|
# Returns the harmonic mean of the elements. If any of the elements
|
114
112
|
# is less than or equal to 0.0, this method returns NaN.
|
113
|
+
memoize method:
|
115
114
|
def harmonic_mean
|
116
115
|
sum = @elements.inject(0.0) { |s, t|
|
117
116
|
if t > 0
|
@@ -122,10 +121,10 @@ module MoreMath
|
|
122
121
|
}
|
123
122
|
sum ? size / sum : 0 / 0.0
|
124
123
|
end
|
125
|
-
memoize_method :harmonic_mean
|
126
124
|
|
127
125
|
# Returns the geometric mean of the elements. If any of the
|
128
126
|
# elements is less than 0.0, this method returns NaN.
|
127
|
+
memoize method:
|
129
128
|
def geometric_mean
|
130
129
|
sum = @elements.inject(0.0) { |s, t|
|
131
130
|
case
|
@@ -146,25 +145,24 @@ module MoreMath
|
|
146
145
|
0 / 0.0
|
147
146
|
end
|
148
147
|
end
|
149
|
-
memoize_method :geometric_mean
|
150
148
|
|
151
149
|
# Returns the minimum of the elements.
|
150
|
+
memoize method:
|
152
151
|
def min
|
153
152
|
@elements.min
|
154
153
|
end
|
155
|
-
memoize_method :min
|
156
154
|
|
157
155
|
# Returns the maximum of the elements.
|
156
|
+
memoize method:
|
158
157
|
def max
|
159
158
|
@elements.max
|
160
159
|
end
|
161
|
-
memoize_method :max
|
162
160
|
|
163
161
|
# Return a sorted array of the elements.
|
162
|
+
memoize method:
|
164
163
|
def sorted
|
165
164
|
@elements.sort
|
166
165
|
end
|
167
|
-
memoize_method :sorted
|
168
166
|
|
169
167
|
# Returns the +p+-percentile of the elements.
|
170
168
|
# There are many methods to compute the percentile, this method uses the
|
@@ -234,6 +232,7 @@ module MoreMath
|
|
234
232
|
signal = arithmetic_mean - other.arithmetic_mean
|
235
233
|
noise = common_standard_deviation(other) *
|
236
234
|
Math.sqrt(size ** -1 + size ** -1)
|
235
|
+
signal / noise
|
237
236
|
rescue Errno::EDOM
|
238
237
|
0.0
|
239
238
|
end
|
@@ -362,10 +361,10 @@ module MoreMath
|
|
362
361
|
|
363
362
|
# Returns the LinearRegression object for the equation a * x + b which
|
364
363
|
# represents the line computed by the linear regression algorithm.
|
364
|
+
memoize method:
|
365
365
|
def linear_regression
|
366
366
|
LinearRegression.new @elements
|
367
367
|
end
|
368
|
-
memoize_method :linear_regression
|
369
368
|
|
370
369
|
# Returns a Histogram instance with +bins+ as the number of bins for this
|
371
370
|
# analysis' elements.
|
data/lib/more_math/version.rb
CHANGED
data/more_math.gemspec
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: more_math 0.3.
|
2
|
+
# stub: more_math 0.3.2 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "more_math".freeze
|
6
|
-
s.version = "0.3.
|
6
|
+
s.version = "0.3.2"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "
|
11
|
+
s.date = "2017-03-14"
|
12
12
|
s.description = "Library that provides more mathematical functions/algorithms than standard Ruby.".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.extra_rdoc_files = ["README.rdoc".freeze, "lib/more_math.rb".freeze, "lib/more_math/cantor_pairing_function.rb".freeze, "lib/more_math/constants/functions_constants.rb".freeze, "lib/more_math/continued_fraction.rb".freeze, "lib/more_math/distributions.rb".freeze, "lib/more_math/entropy.rb".freeze, "lib/more_math/exceptions.rb".freeze, "lib/more_math/functions.rb".freeze, "lib/more_math/histogram.rb".freeze, "lib/more_math/linear_regression.rb".freeze, "lib/more_math/newton_bisection.rb".freeze, "lib/more_math/numberify_string_function.rb".freeze, "lib/more_math/permutation.rb".freeze, "lib/more_math/ranking_common.rb".freeze, "lib/more_math/sequence.rb".freeze, "lib/more_math/sequence/moving_average.rb".freeze, "lib/more_math/sequence/refinement.rb".freeze, "lib/more_math/string_numeral.rb".freeze, "lib/more_math/subset.rb".freeze, "lib/more_math/version.rb".freeze]
|
15
15
|
s.files = [".codeclimate.yml".freeze, ".gitignore".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, "CHANGES".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.rdoc".freeze, "Rakefile".freeze, "VERSION".freeze, "lib/more_math.rb".freeze, "lib/more_math/cantor_pairing_function.rb".freeze, "lib/more_math/constants/functions_constants.rb".freeze, "lib/more_math/continued_fraction.rb".freeze, "lib/more_math/distributions.rb".freeze, "lib/more_math/entropy.rb".freeze, "lib/more_math/exceptions.rb".freeze, "lib/more_math/functions.rb".freeze, "lib/more_math/histogram.rb".freeze, "lib/more_math/linear_regression.rb".freeze, "lib/more_math/newton_bisection.rb".freeze, "lib/more_math/numberify_string_function.rb".freeze, "lib/more_math/permutation.rb".freeze, "lib/more_math/ranking_common.rb".freeze, "lib/more_math/sequence.rb".freeze, "lib/more_math/sequence/moving_average.rb".freeze, "lib/more_math/sequence/refinement.rb".freeze, "lib/more_math/string_numeral.rb".freeze, "lib/more_math/subset.rb".freeze, "lib/more_math/version.rb".freeze, "more_math.gemspec".freeze, "tests/cantor_pairing_function_test.rb".freeze, "tests/continued_fraction_test.rb".freeze, "tests/distribution_test.rb".freeze, "tests/entropy_test.rb".freeze, "tests/functions_test.rb".freeze, "tests/histogram_test.rb".freeze, "tests/newton_bisection_test.rb".freeze, "tests/numberify_string_function_test.rb".freeze, "tests/permutation_test.rb".freeze, "tests/sequence_moving_average_test.rb".freeze, "tests/sequence_test.rb".freeze, "tests/string_numeral_test.rb".freeze, "tests/subset_test.rb".freeze, "tests/test_helper.rb".freeze]
|
16
16
|
s.homepage = "http://flori.github.com/more_math".freeze
|
17
17
|
s.rdoc_options = ["--title".freeze, "MoreMath -- More Math in Ruby".freeze, "--main".freeze, "README.rdoc".freeze]
|
18
|
-
s.
|
18
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.0".freeze)
|
19
|
+
s.rubygems_version = "2.6.10".freeze
|
19
20
|
s.summary = "Library that provides more mathematics.".freeze
|
20
21
|
s.test_files = ["tests/cantor_pairing_function_test.rb".freeze, "tests/continued_fraction_test.rb".freeze, "tests/distribution_test.rb".freeze, "tests/entropy_test.rb".freeze, "tests/functions_test.rb".freeze, "tests/histogram_test.rb".freeze, "tests/newton_bisection_test.rb".freeze, "tests/numberify_string_function_test.rb".freeze, "tests/permutation_test.rb".freeze, "tests/sequence_moving_average_test.rb".freeze, "tests/sequence_test.rb".freeze, "tests/string_numeral_test.rb".freeze, "tests/subset_test.rb".freeze, "tests/test_helper.rb".freeze]
|
21
22
|
|
@@ -27,19 +28,25 @@ Gem::Specification.new do |s|
|
|
27
28
|
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
28
29
|
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
29
30
|
s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
|
31
|
+
s.add_development_dependency(%q<codeclimate-test-reporter>.freeze, [">= 0"])
|
30
32
|
s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.0"])
|
33
|
+
s.add_runtime_dependency(%q<mize>.freeze, [">= 0"])
|
31
34
|
else
|
32
35
|
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.9.1"])
|
33
36
|
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
34
37
|
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
35
38
|
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
39
|
+
s.add_dependency(%q<codeclimate-test-reporter>.freeze, [">= 0"])
|
36
40
|
s.add_dependency(%q<tins>.freeze, ["~> 1.0"])
|
41
|
+
s.add_dependency(%q<mize>.freeze, [">= 0"])
|
37
42
|
end
|
38
43
|
else
|
39
44
|
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.9.1"])
|
40
45
|
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
41
46
|
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
42
47
|
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
48
|
+
s.add_dependency(%q<codeclimate-test-reporter>.freeze, [">= 0"])
|
43
49
|
s.add_dependency(%q<tins>.freeze, ["~> 1.0"])
|
50
|
+
s.add_dependency(%q<mize>.freeze, [">= 0"])
|
44
51
|
end
|
45
52
|
end
|
data/tests/histogram_test.rb
CHANGED
@@ -10,8 +10,8 @@ class HistogramTest < Test::Unit::TestCase
|
|
10
10
|
def test_histogram
|
11
11
|
sequence = Sequence.new [ 1, 2, 3, 0, 2 ]
|
12
12
|
histogram = Histogram.new sequence, 3
|
13
|
-
assert_equal [ [0.0,
|
14
|
-
histogram.to_a
|
13
|
+
assert_equal [ [0.0, 1.0, 2], [1.0, 2.0, 2], [2.0, 3.0, 1] ],
|
14
|
+
histogram.each_bin.map(&:to_a)
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_histogram_display
|
@@ -23,7 +23,7 @@ class HistogramTest < Test::Unit::TestCase
|
|
23
23
|
histogram.display output
|
24
24
|
output_expected =
|
25
25
|
" 2.50000 -|*************************\n 1.50000 -|*******************************"\
|
26
|
-
"*******************\n 0.50000 -|**************************************************\n"
|
26
|
+
"*******************\n 0.50000 -|**************************************************\nmax_count=2\n"
|
27
27
|
assert_equal output_expected, output.string
|
28
28
|
end
|
29
29
|
end
|
data/tests/sequence_test.rb
CHANGED
@@ -176,14 +176,16 @@ class SequenceTest < Test::Unit::TestCase
|
|
176
176
|
assert_in_delta 0.3, @flat.harmonic_mean, 1E-8
|
177
177
|
assert_in_delta 0, @flat.variance, 1E-8
|
178
178
|
assert_in_delta 0, @flat.standard_deviation, 1E-8
|
179
|
+
assert_in_delta 0, @flat.standard_deviation_percentage, 1E-8
|
179
180
|
assert_in_delta 0, @flat.sample_standard_deviation, 1E-8
|
181
|
+
assert_in_delta 0, @flat.sample_standard_deviation_percentage, 1E-8
|
180
182
|
assert_in_delta 30, @flat.sum, 1E-8
|
181
183
|
assert_in_delta 0.3, @flat.min, 1E-8
|
182
184
|
assert_in_delta 0.3, @flat.max, 1E-8
|
183
185
|
assert_in_delta 0.3, @flat.percentile(25), 1E-8
|
184
186
|
assert_in_delta 0.3, @flat.median, 1E-8
|
185
187
|
assert_in_delta 0.3, @flat.percentile(75), 1E-8
|
186
|
-
assert_equal 100, @flat.histogram(10).
|
188
|
+
assert_equal 100, @flat.histogram(10).each_bin.first.count
|
187
189
|
assert @flat.linear_regression.residues.all? { |r| r.abs <= 1E-6 }
|
188
190
|
end
|
189
191
|
|
@@ -194,14 +196,16 @@ class SequenceTest < Test::Unit::TestCase
|
|
194
196
|
assert_equal 'NaN', @half.harmonic_mean.to_s
|
195
197
|
assert_in_delta 208.31, @half.variance, 1E-2
|
196
198
|
assert_in_delta 14.43, @half.standard_deviation, 1E-2
|
199
|
+
assert_in_delta 58.31, @half.standard_deviation_percentage, 1E-2
|
197
200
|
assert_in_delta 14.50, @half.sample_standard_deviation, 1E-2
|
201
|
+
assert_in_delta 58.60, @half.sample_standard_deviation_percentage, 1E-2
|
198
202
|
assert_in_delta 2475, @half.sum, 1E-8
|
199
203
|
assert_in_delta 0, @half.min, 1E-8
|
200
204
|
assert_in_delta 99 / 2.0, @half.max, 1E-8
|
201
205
|
assert_in_delta 12.125, @half.percentile(25), 1E-8
|
202
206
|
assert_in_delta 24.75, @half.median, 1E-8
|
203
207
|
assert_in_delta 37.375, @half.percentile(75), 1E-8
|
204
|
-
assert_equal [10] * 10, counts = @half.histogram(10).
|
208
|
+
assert_equal [10] * 10, counts = @half.histogram(10).counts
|
205
209
|
assert_equal 100, counts.inject { |s, x| s + x }
|
206
210
|
assert @half.linear_regression.residues.all? { |r| r.abs <= 0.5 }
|
207
211
|
end
|
@@ -213,7 +217,9 @@ class SequenceTest < Test::Unit::TestCase
|
|
213
217
|
assert_equal 'NaN', @rand.harmonic_mean.to_s
|
214
218
|
assert_in_delta 976.95, @rand.variance, 1E-2
|
215
219
|
assert_in_delta 31.25, @rand.standard_deviation, 1E-2
|
220
|
+
assert_in_delta 61.47, @rand.standard_deviation_percentage, 1E-2
|
216
221
|
assert_in_delta 31.41, @rand.sample_standard_deviation, 1E-2
|
222
|
+
assert_in_delta 61.78, @rand.sample_standard_deviation_percentage, 1E-2
|
217
223
|
assert_in_delta 5084, @rand.sum, 1E-8
|
218
224
|
assert_in_delta 0, @rand.min, 1E-8
|
219
225
|
assert_in_delta 98, @rand.max, 1E-8
|
@@ -232,7 +238,7 @@ class SequenceTest < Test::Unit::TestCase
|
|
232
238
|
assert_nil @rand.detect_outliers
|
233
239
|
assert !@rand.detect_autocorrelation[:detected]
|
234
240
|
assert_equal [11, 14, 7, 9, 8, 7, 5, 11, 13, 15],
|
235
|
-
counts = @rand.histogram(10).
|
241
|
+
counts = @rand.histogram(10).counts
|
236
242
|
assert_equal 100, counts.inject { |s, x| s + x }
|
237
243
|
end
|
238
244
|
|
@@ -243,7 +249,9 @@ class SequenceTest < Test::Unit::TestCase
|
|
243
249
|
assert_equal 'NaN', @rasi.harmonic_mean.to_s
|
244
250
|
assert_in_delta 1604.67, @rasi.variance, 1E-2
|
245
251
|
assert_in_delta 40.05, @rasi.standard_deviation, 1E-2
|
252
|
+
assert_in_delta 1151.07, @rasi.standard_deviation_percentage, 1E-2
|
246
253
|
assert_in_delta 40.26, @rasi.sample_standard_deviation, 1E-2
|
254
|
+
assert_in_delta 1156.87, @rasi.sample_standard_deviation_percentage, 1E-2
|
247
255
|
assert_in_delta 348.007, @rasi.sum, 1E-3
|
248
256
|
assert_in_delta 92.81, @rasi.max, 1E-2
|
249
257
|
assert_in_delta(-20.75, @rasi.percentile(25), 1E-2)
|
@@ -255,7 +263,7 @@ class SequenceTest < Test::Unit::TestCase
|
|
255
263
|
assert_equal 13, @rasi.detect_outliers[:high]
|
256
264
|
assert @rasi.detect_autocorrelation[:detected]
|
257
265
|
assert_equal [4, 6, 11, 13, 22, 15, 12, 4, 7, 6],
|
258
|
-
counts = @rasi.histogram(10).
|
266
|
+
counts = @rasi.histogram(10).counts
|
259
267
|
assert_equal 100, counts.inject { |s, x| s + x }
|
260
268
|
end
|
261
269
|
|
@@ -266,7 +274,9 @@ class SequenceTest < Test::Unit::TestCase
|
|
266
274
|
assert_in_delta 47.98, @book.harmonic_mean, 1E-2
|
267
275
|
assert_in_delta 148.36, @book.variance, 1E-2
|
268
276
|
assert_in_delta 12.18, @book.standard_deviation, 1E-2
|
277
|
+
assert_in_delta 23.76, @book.standard_deviation_percentage, 1E-2
|
269
278
|
assert_in_delta 12.26, @book.sample_standard_deviation, 1E-2
|
279
|
+
assert_in_delta 23.93, @book.sample_standard_deviation_percentage, 1E-2
|
270
280
|
assert_in_delta 3588.0, @book.sum, 1E-2
|
271
281
|
assert_in_delta 23, @book.min, 1E-2
|
272
282
|
assert_in_delta 89, @book.max, 1E-2
|
@@ -285,7 +295,7 @@ class SequenceTest < Test::Unit::TestCase
|
|
285
295
|
end
|
286
296
|
assert @book.detect_autocorrelation(10)[:detected]
|
287
297
|
assert_equal [3, 4, 9, 12, 18, 14, 4, 5, 0, 1],
|
288
|
-
counts = @book.histogram(10).
|
298
|
+
counts = @book.histogram(10).counts
|
289
299
|
assert_equal 70, counts.inject { |s, x| s + x }
|
290
300
|
assert @flat.linear_regression.residues.all? { |r| r.abs <= 1E-6 }
|
291
301
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: more_math
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: codeclimate-test-reporter
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: tins
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '1.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mize
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
description: Library that provides more mathematical functions/algorithms than standard
|
84
112
|
Ruby.
|
85
113
|
email: flori@ping.de
|
@@ -168,7 +196,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
196
|
requirements:
|
169
197
|
- - ">="
|
170
198
|
- !ruby/object:Gem::Version
|
171
|
-
version: '0'
|
199
|
+
version: '2.0'
|
172
200
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
201
|
requirements:
|
174
202
|
- - ">="
|
@@ -176,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
204
|
version: '0'
|
177
205
|
requirements: []
|
178
206
|
rubyforge_project:
|
179
|
-
rubygems_version: 2.6.
|
207
|
+
rubygems_version: 2.6.10
|
180
208
|
signing_key:
|
181
209
|
specification_version: 4
|
182
210
|
summary: Library that provides more mathematics.
|