mini_histogram 0.1.2 → 0.1.3

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
  SHA256:
3
- metadata.gz: 387d46563e24fde087f05153983b93b8209b5b83f8291515baa9458acd55f696
4
- data.tar.gz: d74fafa98d169baf6de9cd66f46d8a25f514ac7d4f40a3ac9ea9029feeb9c2d9
3
+ metadata.gz: f74ffb350c63f9f26ea90db6a41c8135c3b2e180de663a1747d649a47e8e2df4
4
+ data.tar.gz: 3a69ae4f5a0f4d64d830f7a39b0b79f3ab011cae5cf7479328ee8a907b5f7820
5
5
  SHA512:
6
- metadata.gz: e8a23b6ebdb80c2a06679d6ef5fa7183ee4d2e7a6e4bf7b8caf46cbd335398b30af8dfb8dd7fd8970ea6fe73e35650297595db57381223744d3b7b787efb4b0a
7
- data.tar.gz: 2c8fafef6d1bed5fa60b7e5ebb46698ad3305ac110fb3414d33502a9e4b0f44cfd9fbc9f83eef60eddbb6d9815c0dd9c2541703ab2fba92041e5881a6cf9fb3f
6
+ metadata.gz: 477c617614b9ed9202dc2f42aa6c3571a44651173ffb7357c5650aefedaeb599b9a98b38daa107e9c2002f8c59700cc2e349ddb2ead5412e99c339d37f4f6691
7
+ data.tar.gz: a6dc9302632ab19b9264c5787d31fe8387dc9130669ec0fe2ae7860bab6fbcb10fee9d712943aa00a3a41167873fee214df9c07c5af2101dc5914da5662f9472
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Master
2
2
 
3
+ ## 0.1.3
4
+
5
+ - Handle edge cases (https://github.com/zombocom/mini_histogram/pull/2)
6
+
3
7
  ## 0.1.2
4
8
 
5
9
  - Add `edge` as alias to `edges`
@@ -21,12 +21,13 @@ class MiniHistogram
21
21
  class Error < StandardError; end
22
22
  attr_reader :array, :left_p, :max
23
23
 
24
- def initialize(array, left_p: false, edges: nil)
24
+ def initialize(array, left_p: true, edges: nil)
25
25
  @array = array
26
26
  @left_p = left_p
27
27
  @edges = edges
28
28
  @weights = nil
29
- @max = array.max
29
+
30
+ @min, @max = array.minmax
30
31
  end
31
32
 
32
33
  def edges_min
@@ -42,7 +43,7 @@ class MiniHistogram
42
43
  end
43
44
 
44
45
  def closed
45
- :left
46
+ @left_p ? :left : :right
46
47
  end
47
48
 
48
49
  # Sets the edge value to something new,
@@ -54,6 +55,8 @@ class MiniHistogram
54
55
  end
55
56
 
56
57
  def bin_size
58
+ return 0 if edges.length <= 1
59
+
57
60
  edges[1] - edges[0]
58
61
  end
59
62
 
@@ -86,6 +89,7 @@ class MiniHistogram
86
89
  # 4 values between 4.0 and 6.0 and three values between 10.0 and 12.0
87
90
  def weights
88
91
  return @weights if @weights
92
+ return @weights = [] if array.empty?
89
93
 
90
94
  lo = edges.first
91
95
  step = edges[1] - edges[0]
@@ -118,16 +122,18 @@ class MiniHistogram
118
122
  def edges
119
123
  return @edges if @edges
120
124
 
121
- hi = array.max
122
- lo = array.min
125
+ return @edges = [0.0] if array.empty?
123
126
 
124
- nbins = sturges * 1.0
127
+ lo = @min
128
+ hi = @max
129
+
130
+ nbins = sturges.to_f
125
131
 
126
132
  if hi == lo
127
- start = hi
133
+ start = lo
128
134
  step = 1.0
129
135
  divisor = 1.0
130
- len = 1.0
136
+ len = 1
131
137
  else
132
138
  bw = (hi - lo) / nbins
133
139
  lbw = Math.log10(bw)
@@ -163,31 +169,32 @@ class MiniHistogram
163
169
  start = (lo * divisor).floor
164
170
  len = (hi * divisor - start).ceil
165
171
  end
172
+ end
166
173
 
167
- if left_p
168
- while (lo < start/divisor)
169
- start -= step
170
- end
171
-
172
- while (start + (len - 1)*step)/divisor <= hi
173
- len += 1
174
- end
175
- else
176
- while lo <= start/divisor
177
- start -= step
178
- end
179
- while (start + (len - 1)*step)/divisor < hi
180
- len += 1
181
- end
174
+ if left_p
175
+ while (lo < start/divisor)
176
+ start -= step
182
177
  end
183
178
 
184
- @edges = []
185
- len.next.times.each do
186
- @edges << start/divisor
187
- start += step
179
+ while (start + (len - 1)*step)/divisor <= hi
180
+ len += 1
181
+ end
182
+ else
183
+ while lo <= start/divisor
184
+ start -= step
188
185
  end
189
- return @edges
186
+ while (start + (len - 1)*step)/divisor < hi
187
+ len += 1
188
+ end
189
+ end
190
+
191
+ @edges = []
192
+ len.times.each do
193
+ @edges << start/divisor
194
+ start += step
190
195
  end
196
+
197
+ return @edges
191
198
  end
192
199
  alias :edge :edges
193
200
 
@@ -1,3 +1,3 @@
1
1
  class MiniHistogram
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -26,4 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ["lib"]
27
27
 
28
28
  spec.add_development_dependency "m"
29
+ # Used for comparison testing, but only supports Ruby 2.4+
30
+ # spec.add_development_dependency "enumerable-statistics"
31
+ spec.add_development_dependency "benchmark-ips"
29
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_histogram
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - schneems
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: benchmark-ips
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: It makes histograms out of Ruby data. How cool is that!? Pretty cool
28
42
  if you ask me.
29
43
  email: