more_math 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|