statval 0.1.1 → 0.1.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.
- data/lib/statval/statval.rb +32 -32
- data/lib/statval/version.rb +1 -1
- data/spec/lib/statval/statval_spec.rb +5 -1
- metadata +2 -5
data/lib/statval/statval.rb
CHANGED
@@ -2,9 +2,6 @@ module StatVal
|
|
2
2
|
|
3
3
|
class StatVal
|
4
4
|
|
5
|
-
POS_INFINITY = 1.0/0.0
|
6
|
-
NEG_INFINITY = - 1.0/0.0
|
7
|
-
|
8
5
|
attr_reader :num
|
9
6
|
attr_reader :min
|
10
7
|
attr_reader :max
|
@@ -23,12 +20,7 @@ module StatVal
|
|
23
20
|
options
|
24
21
|
end
|
25
22
|
|
26
|
-
|
27
|
-
def all_keys ; [ :avg, :std, :min, :max, :num, :sum, :sq_sum, :avg_sq, :var ] end
|
28
|
-
def default_keys ; [ :avg, :std, :min, :max, :num ] end
|
29
|
-
def writable_keys ; [ :num, :min, :max, :sum, :sq_sum ] end
|
30
|
-
|
31
|
-
alias_method :keys, :default_keys
|
23
|
+
def keys ; ::StatVal.keys(:default) end
|
32
24
|
|
33
25
|
def [](key)
|
34
26
|
case key
|
@@ -121,27 +113,8 @@ module StatVal
|
|
121
113
|
end
|
122
114
|
end
|
123
115
|
|
124
|
-
def
|
125
|
-
|
126
|
-
|
127
|
-
case which_keys
|
128
|
-
when nil then iter = keys
|
129
|
-
when :all then iter = all_keys
|
130
|
-
when :default then iter = default_keys
|
131
|
-
when :writable then iter = writable_keys
|
132
|
-
else
|
133
|
-
if which_keys.repsond_to?(:each)
|
134
|
-
iter = which_Keys
|
135
|
-
else
|
136
|
-
return { which_keys => which_keys }
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
iter.inject({}) { |h, k| h[k] = k; h }
|
141
|
-
end
|
142
|
-
|
143
|
-
def to_hash(which_keys = nil)
|
144
|
-
key_hash(which_keys).inject({}) { |h, (name, attr)| h[name] = self[attr]; h }
|
116
|
+
def to_hash(which_keys = nil, convert_to_s = false)
|
117
|
+
::StatVal.key_hash(which_keys).inject({}) { |h, (attr, name)| h[(if convert_to_s then name.to_s else name end)] = self[attr]; h }
|
145
118
|
end
|
146
119
|
|
147
120
|
def to_s ; to_hash.to_s end
|
@@ -183,14 +156,39 @@ module StatVal
|
|
183
156
|
@max = if new_val then new_val else (if empty? then NEG_INFINITY else avg+std end) end
|
184
157
|
end
|
185
158
|
|
159
|
+
def std_ratio ; std / avg end
|
160
|
+
|
186
161
|
private
|
187
162
|
|
188
|
-
|
163
|
+
POS_INFINITY = 1.0/0.0
|
164
|
+
NEG_INFINITY = - 1.0/0.0
|
189
165
|
|
166
|
+
def abs_is_infinite(val) ; val.abs.to_f === POS_INFINITY end
|
190
167
|
def zero_if_unbounded(val) ; if bounded? then val else 0.0 end end
|
191
|
-
|
192
168
|
def abs_div(nom, denom) ; nom.abs.to_f / denom end
|
169
|
+
end
|
193
170
|
|
171
|
+
def self.new(options = {}) ; StatVal.new(options) end
|
172
|
+
|
173
|
+
def self.all_keys ; [ :avg, :std, :std_ratio, :min, :max, :num, :sum, :sq_sum, :avg_sq, :var ] end
|
174
|
+
def self.default_keys ; [ :avg, :std, :min, :max, :num ] end
|
175
|
+
def self.writable_keys ; [ :num, :min, :max, :sum, :sq_sum ] end
|
176
|
+
|
177
|
+
def self.keys(ident = :default)
|
178
|
+
case ident
|
179
|
+
when :all then all_keys
|
180
|
+
when :writable then writable_keys
|
181
|
+
when :default then default_keys
|
182
|
+
when nil then default_keys
|
183
|
+
else
|
184
|
+
return ident if ident.respond_to?(:each)
|
185
|
+
return [ident]
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def self.key_hash(which_keys = nil)
|
190
|
+
return which_keys if which_keys.is_a?(Hash)
|
191
|
+
keys(which_keys).inject({}) { |h, k| h[k] = k; h }
|
194
192
|
end
|
195
193
|
|
196
194
|
# Take hash that contains StatVal values and create new hash that is identical to it but has
|
@@ -211,6 +209,8 @@ module StatVal
|
|
211
209
|
# raises on key conflict
|
212
210
|
#
|
213
211
|
def self.flatmap_hash(h, which_keys = nil, prefix=true, use_symbols=false)
|
212
|
+
return h.to_hash(which_keys, ! use_symbols) if h.kind_of?(StatVal)
|
213
|
+
|
214
214
|
flat = {}
|
215
215
|
h.each_pair do |k,r|
|
216
216
|
if r.kind_of? StatVal
|
data/lib/statval/version.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'set'
|
2
|
-
|
3
2
|
require 'statval'
|
4
3
|
|
5
4
|
module StatVal
|
@@ -75,6 +74,11 @@ module StatVal
|
|
75
74
|
::StatVal.flatmap_hash(@it).keys.to_set.should be == [ 'a', 'num_h', 'std_h', 'min_h', 'max_h', 'avg_h' ].to_set
|
76
75
|
end
|
77
76
|
|
77
|
+
it 'renders statvals with key renaming as if they were hashes' do
|
78
|
+
@it = ::StatVal.flatmap_hash(StatVal.new, ::StatVal.key_hash(nil).tap {|h| h[:max] = :susi } ).keys.to_set
|
79
|
+
@it.should be == ['min', 'susi', 'num', 'std', 'avg'].to_set
|
80
|
+
end
|
81
|
+
|
78
82
|
it 'times' do
|
79
83
|
@it = StatVal.new
|
80
84
|
@it.time {|| sleep(2) }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statval
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: script
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Utility class for incrementally recording measured values and reporting
|
15
15
|
avg, variance, min, and max
|
@@ -43,9 +43,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
hash: -3832811953487468408
|
49
46
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
47
|
none: false
|
51
48
|
requirements:
|