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 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.