diverge 1.1.0 → 1.1.1

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