diverge 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +14 -12
  3. data/lib/diverge.rb +23 -3
  4. metadata +9 -14
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 91446f47cea184ffd150c7ea2c8970be6d44a1fa
4
+ data.tar.gz: 9532bd8926e032f158c2d9edb8c718af5db32825
5
+ SHA512:
6
+ metadata.gz: d7843f4c6121463c566d5728ce85daad3bc927b66917f93d31614c7320420a682e0c7485102465a13a4c33cf3ca867d6b359ed5fecae8508d5eb43fe3f094885
7
+ data.tar.gz: e43438b427a8282098ee472fd9e80e2acc2078392179b3ca1c744dfad8249a32eca8b250b7d21310958d021afac33a367a21546f749a66c3ab987df9b18a8097
data/README.md CHANGED
@@ -2,18 +2,20 @@
2
2
 
3
3
  Diverge is a very simple class for calculating the Kullback–Leibler divergence or Jensen–Shannon divergence of two datasets. Example usage is as follows:
4
4
 
5
- 1.9.3p194 :001 > require "diverge"
6
- => true
7
- 1.9.3p194 :002 > Diverge.new([0.25, 0.5, 0.25], [0.5, 0.3, 0.2]).kl
8
- => 0.1379119045715615
9
- 1.9.3p194 :003 > Diverge.new([0.25, 0.5, 0.25], [0.5, 0.3, 0.2]).kl(:reverse)
10
- => 0.14869719288733346
11
- 1.9.3p194 :004 > Diverge.new([0.5, 0.3, 0.2], [0.25, 0.5, 0.25]).kl
12
- => 0.14869719288733346
13
- 1.9.3p194 :005 > Diverge.new([0.25, 0.5, 0.25], [0.5, 0.3, 0.2]).js
14
- => 0.14330454872944748
15
- 1.9.3p194 :006 > Diverge.new([0.5, 0.3, 0.2], [0.25, 0.5, 0.25]).js
16
- => 0.14330454872944748
5
+ 1.9.3p194 :001 > require "diverge"
6
+ => true
7
+ 1.9.3p194 :002 > Diverge.new([0.25, 0.5, 0.25], [0.5, 0.3, 0.2]).kl # Kullback-Leibler
8
+ => 0.1379119045715615
9
+ 1.9.3p194 :003 > Diverge.new([0.25, 0.5, 0.25], [0.5, 0.3, 0.2]).kl(:reverse)
10
+ => 0.14869719288733346
11
+ 1.9.3p194 :004 > Diverge.new([0.5, 0.3, 0.2], [0.25, 0.5, 0.25]).kl
12
+ => 0.14869719288733346
13
+ 1.9.3p194 :005 > Diverge.new([0.25, 0.5, 0.25], [0.5, 0.3, 0.2]).js # Jensen-Shannon
14
+ => 0.14330454872944748
15
+ 1.9.3p194 :006 > Diverge.new([0.5, 0.3, 0.2], [0.25, 0.5, 0.25]).js
16
+ => 0.14330454872944748
17
+ 1.9.3p194 :006 > Diverge.new([0.5, 0.3, 0.2], [0.25, 0.5, 0.25]).corr # Pearson correlation
18
+ => -0.18898223650461368
17
19
 
18
20
  http://rubygems.org/gems/diverge
19
21
 
data/lib/diverge.rb CHANGED
@@ -1,21 +1,27 @@
1
1
  require "gsl"
2
2
 
3
3
  class Diverge
4
+ class << self
5
+ attr_accessor :debug
6
+ end
7
+
8
+ @debug = true
9
+
4
10
  attr_reader :p, :q
5
11
 
6
12
  def initialize(p, q)
7
13
  @p, @q = p, q
8
14
 
9
15
  unless p.length == q.length
10
- raise ArgumentError.new("The two discrete distributions must have the same number of elements")
16
+ debugger { "The two discrete distributions must have the same number of elements" }
11
17
  end
12
18
 
13
19
  unless (p_sum = p.inject(&:+)) == 1
14
- STDERR.puts("Warning: the first argument does not sum to 1, the sum is #{p_sum}")
20
+ debugger { "Warning: the first argument does not sum to 1, the sum is #{p_sum.inspect}" }
15
21
  end
16
22
 
17
23
  unless (q_sum = q.inject(&:+)) == 1
18
- STDERR.puts("Warning: the second argument does not sum to 1, the sum is #{q_sum}")
24
+ debugger { "Warning: the second argument does not sum to 1, the sum is #{q_sum.inspect}" }
19
25
  end
20
26
  end
21
27
 
@@ -48,4 +54,18 @@ class Diverge
48
54
  end
49
55
 
50
56
  alias :corr :correlation
57
+
58
+ def debug
59
+ self.class.debug
60
+ end
61
+
62
+ def debug=(value)
63
+ self.class.debug = value
64
+ end
65
+
66
+ private
67
+
68
+ def debugger
69
+ STDERR.puts yield if debug
70
+ end
51
71
  end
metadata CHANGED
@@ -1,30 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diverge
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
5
- prerelease:
4
+ version: 1.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Evan Senter
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-17 00:00:00.000000000 Z
11
+ date: 2013-04-29 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: gsl
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.14.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.14.0
30
27
  description: A simple collection of functions for determining the divergence between
@@ -39,27 +36,25 @@ files:
39
36
  - README.md
40
37
  homepage: http://rubygems.org/gems/diverge
41
38
  licenses: []
39
+ metadata: {}
42
40
  post_install_message:
43
41
  rdoc_options: []
44
42
  require_paths:
45
43
  - lib
46
44
  required_ruby_version: !ruby/object:Gem::Requirement
47
- none: false
48
45
  requirements:
49
- - - ! '>='
46
+ - - '>='
50
47
  - !ruby/object:Gem::Version
51
48
  version: '0'
52
49
  required_rubygems_version: !ruby/object:Gem::Requirement
53
- none: false
54
50
  requirements:
55
- - - ! '>='
51
+ - - '>='
56
52
  - !ruby/object:Gem::Version
57
53
  version: '0'
58
54
  requirements: []
59
55
  rubyforge_project:
60
- rubygems_version: 1.8.24
56
+ rubygems_version: 2.0.2
61
57
  signing_key:
62
- specification_version: 3
58
+ specification_version: 4
63
59
  summary: Distribution divergences.
64
60
  test_files: []
65
- has_rdoc: