diverge 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/diverge.rb +7 -8
  2. metadata +2 -2
data/lib/diverge.rb CHANGED
@@ -18,7 +18,13 @@ class Diverge
18
18
  end
19
19
 
20
20
  def kullback_leibler(reverse = false)
21
- (reverse ? q.zip(p) : p.zip(q)).inject(0.0) { |sum, (i, j)| sum + (i.zero? ? 0 : i * Math.log(safe_cast(i) / safe_cast(j))) }
21
+ (reverse ? q.zip(p) : p.zip(q)).inject(0.0) do |sum, (i, j)|
22
+ if i > 0 && j.zero?
23
+ raise ArgumentError.new("Kullback-Leibler is not defined when P(i) > 0 and Q(i) = 0")
24
+ end
25
+
26
+ sum + (i.zero? ? 0 : i * Math.log(i / j))
27
+ end
22
28
  end
23
29
 
24
30
  alias :kl :kullback_leibler
@@ -28,11 +34,4 @@ class Diverge
28
34
  end
29
35
 
30
36
  alias :js :jensen_shannon
31
-
32
- private
33
-
34
- def safe_cast(value)
35
- # Just to make sure we don't go crazy and to_f a Complex, for whatever insane reason that might come up, while still avoiding integer division
36
- value.class < Integer ? value.to_f : value
37
- end
38
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diverge
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-19 00:00:00.000000000 Z
12
+ date: 2012-06-20 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A simple collection of functions for determining the divergence between
15
15
  two distributions.