mini_histogram 0.1.2 → 0.1.3

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