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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f1d5d444c84412e2b3fb7246e52f29d9672e27ef
4
- data.tar.gz: 981958d5893c22734588a132edd51fd28a759691
3
+ metadata.gz: a674bc5c2a002b16b490aa9fb5680d3b7e497e7e
4
+ data.tar.gz: 013ae510e5ee3fc03e0b7db8c9af68a722a0b797
5
5
  SHA512:
6
- metadata.gz: 5438f1293d698a5379a56ba70f3fedafa3931044ad36c4a6bc78d34826d01e118957e27244daaf0b0008d0d598cc8bf49c25f5608fbfed15823ce7041531f023
7
- data.tar.gz: ebdde22957a5d1dc9152f673f43e694404db3a8c793070efada5208bbef0f577839eff065d88d5046be705d13dd33843bc020b29b15cbc0fd772289065ac6ec6
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.1
6
- - ruby-head
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
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'
@@ -1,5 +1,3 @@
1
- require 'more_math'
2
-
3
1
  module MoreMath
4
2
  module CantorPairingFunction
5
3
 
@@ -1,5 +1,3 @@
1
- require 'more_math'
2
-
3
1
  module MoreMath
4
2
  # This class implements a continued fraction of the form:
5
3
  #
@@ -1,4 +1,3 @@
1
- require 'more_math'
2
1
  require 'more_math/functions'
3
2
  require 'more_math/constants/functions_constants'
4
3
 
@@ -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, x|
54
+ fraction = ContinuedFraction.for_b do |n, y|
56
55
  if n % 2 == 0
57
56
  m = n / 2.0
58
- (m * (b - m) * x) / ((a + (2 * m) - 1) * (a + (2 * 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) * x) / ((a + 2 * m) * (a + 2 * m + 1))
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, x|
116
- (2 * n + 1) - a + x
117
- end.for_b do |n, x|
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)) *
@@ -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 arrays.
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
- r = @result.reverse
39
- factor = width.to_f / (r.transpose[1].max)
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
- [ l, c, r ]
70
+ Bin.new(l, r, c)
59
71
  end
60
72
  end
61
73
  end
@@ -1,5 +1,3 @@
1
- require 'more_math'
2
-
3
1
  module MoreMath
4
2
  # This class computes a linear regression for the given image and domain data
5
3
  # sets.
@@ -1,5 +1,4 @@
1
1
  require 'more_math/exceptions'
2
- require 'more_math'
3
2
 
4
3
  module MoreMath
5
4
  # This class is used to find the root of a function with Newton's bisection
@@ -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
@@ -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.memoize_cache_clear
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.
@@ -1,5 +1,3 @@
1
- require 'more_math'
2
-
3
1
  module MoreMath
4
2
  class StringNumeral
5
3
  include ::MoreMath::NumberifyStringFunction
@@ -1,6 +1,6 @@
1
1
  module MoreMath
2
2
  # MoreMath version
3
- VERSION = '0.3.1'
3
+ VERSION = '0.3.2'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/more_math.gemspec CHANGED
@@ -1,21 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: more_math 0.3.1 ruby lib
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.1"
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 = "2016-10-20"
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.rubygems_version = "2.6.7".freeze
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
@@ -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, 2, 1.0], [1.0, 2, 2.0], [2.0, 1, 3.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
@@ -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).to_a.first[1]
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).to_a.transpose[1]
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).to_a.transpose[1]
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).to_a.transpose[1]
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).to_a.transpose[1]
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.1
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: 2016-10-20 00:00:00.000000000 Z
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.7
207
+ rubygems_version: 2.6.10
180
208
  signing_key:
181
209
  specification_version: 4
182
210
  summary: Library that provides more mathematics.