netica 0.0.21-java → 1.0.0.pre-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 231e9845a73e728268cbc2db7801e44cf3d46c68
4
+ data.tar.gz: 30512cdcf0a3573a8dfe1c7f5f7546442a87fc14
5
+ SHA512:
6
+ metadata.gz: d834a08e817f3e579c14906fb70f08680c8f0ab52772757ace63be7293f507f37e863e1127b7b028653e495851c21c5ae24b8e525b2e78a76c6979076f0d56aa
7
+ data.tar.gz: 16ed7f4c125df781c6b206dd8207db5e8fc22892f6ddde12d37f344b8ec58be691ef6923b6948e894d361e7a9fc1646e44fd60e86ce84d69ef0ce24f72b80690
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- jruby-1.7.3
1
+ jruby-1.7.9
data/README.md CHANGED
@@ -67,9 +67,11 @@ Then, re-read the value of the Belief node.
67
67
 
68
68
  ## Release Notes
69
69
 
70
- ### Version 0.0.21
70
+ ### Version 1.0.0.pre
71
71
 
72
- Search multiple locations for NeticaJ.jar.
72
+ * Split ActiveNetwork's out-of-process storage and retrieval methods into a new subclass, StorableNetwork.
73
+ * Add filename parameter to StorableNetwork#find, allowing a stored network's .dne file to be updated.
74
+ * Built and tested with JRuby 1.7.9
73
75
 
74
76
  ### Version 0.0.20
75
77
 
@@ -0,0 +1,110 @@
1
+ // ~->[DNET-1]->~
2
+
3
+ // File created by an unlicensed user using Netica 5.04 on 10/01/12 at 20:20:06.
4
+
5
+ bnet ChestClinic {
6
+ autoupdate = FALSE;
7
+
8
+ node VisitAntarctica {
9
+ kind = NATURE;
10
+ discrete = TRUE;
11
+ chance = CHANCE;
12
+ states = (visit, no_visit);
13
+ statetitles = ("Visited Antarctica within the last 3 years", );
14
+ parents = ();
15
+ probs =
16
+ // Visited Antarctica wit no visit
17
+ (0.01, 0.99);
18
+ title = "Visit to Antarctica";
19
+ };
20
+
21
+ node Tuberculosis {
22
+ kind = NATURE;
23
+ discrete = TRUE;
24
+ chance = CHANCE;
25
+ states = (present, absent);
26
+ parents = (VisitAntarctica);
27
+ probs =
28
+ // present absent // VisitAntarctica
29
+ (0.05, 0.95, // Visited Antarctica wit
30
+ 0.01, 0.99); // no visit ;
31
+ };
32
+
33
+ node Smoking {
34
+ kind = NATURE;
35
+ discrete = TRUE;
36
+ chance = CHANCE;
37
+ states = (smoker, nonsmoker);
38
+ parents = ();
39
+ probs =
40
+ // smoker nonsmoker
41
+ (0.5, 0.5);
42
+ };
43
+
44
+ node Cancer {
45
+ kind = NATURE;
46
+ discrete = TRUE;
47
+ chance = CHANCE;
48
+ states = (present, absent);
49
+ parents = (Smoking);
50
+ probs =
51
+ // present absent // Smoking
52
+ (0.1, 0.9, // smoker
53
+ 0.01, 0.99); // nonsmoker ;
54
+ title = "Lung Cancer";
55
+ };
56
+
57
+ node TbOrCa {
58
+ kind = NATURE;
59
+ discrete = TRUE;
60
+ chance = DETERMIN;
61
+ states = (true, false);
62
+ parents = (Tuberculosis, Cancer);
63
+ functable =
64
+ // Tuberculosis Cancer
65
+ (true, // present present
66
+ true, // present absent
67
+ true, // absent present
68
+ false); // absent absent ;
69
+ equation = "TbOrCa (Tuberculosis, Cancer) = Tuberculosis || Cancer";
70
+ title = "Tuberculosis or Cancer";
71
+ };
72
+
73
+ node XRay {
74
+ kind = NATURE;
75
+ discrete = TRUE;
76
+ chance = CHANCE;
77
+ states = (abnormal, normal);
78
+ parents = (TbOrCa);
79
+ probs =
80
+ // abnormal normal // TbOrCa
81
+ (0.98, 0.02, // true
82
+ 0.05, 0.95); // false ;
83
+ };
84
+
85
+ node Bronchitis {
86
+ kind = NATURE;
87
+ discrete = TRUE;
88
+ chance = CHANCE;
89
+ states = (present, absent);
90
+ parents = (Smoking);
91
+ probs =
92
+ // present absent // Smoking
93
+ (0.6, 0.4, // smoker
94
+ 0.3, 0.7); // nonsmoker ;
95
+ };
96
+
97
+ node Dyspnea {
98
+ kind = NATURE;
99
+ discrete = TRUE;
100
+ chance = CHANCE;
101
+ states = (present, absent);
102
+ parents = (TbOrCa, Bronchitis);
103
+ probs =
104
+ // present absent // TbOrCa Bronchitis
105
+ (0.9, 0.1, // true present
106
+ 0.7, 0.3, // true absent
107
+ 0.8, 0.2, // false present
108
+ 0.1, 0.9); // false absent ;
109
+ };
110
+ };
data/lib/netica.rb CHANGED
@@ -1,20 +1,5 @@
1
1
  require 'java'
2
-
3
- loaded_netica_j = false
4
-
5
- locations = ['/Library/Java/Extensions/NeticaJ.jar', '/System/Library/Java/Extensions/NeticaJ.jar', '/usr/lib/java/NeticaJ.jar', '/lib/NeticaJ.jar']
6
- locations.each do |fname|
7
- if !loaded_netica_j && File.exists?(fname)
8
- begin
9
- require fname
10
- loaded_netica_j = true
11
- rescue LoadError
12
- puts "NeticaJ.jar not found at '#{fname}'"
13
- end
14
- end
15
- end
16
-
17
- raise "NeticaJ library files not found in #{locations}. See https://github.com/disruptive/netica for installation instructions." unless loaded_netica_j
2
+ require '/lib/NeticaJ.jar'
18
3
 
19
4
  require "netica/version"
20
5
  require "netica/environ"
@@ -24,6 +9,7 @@ require "netica/node"
24
9
  require "netica/node_list"
25
10
  require "netica/bayes_network"
26
11
  require "netica/active_network"
12
+ require "netica/storable_network"
27
13
  require "netica/java_library_path"
28
14
 
29
15
  module Netica
@@ -6,7 +6,7 @@ module Netica
6
6
  class ActiveNetwork::NodeNotFound < RuntimeError; end
7
7
  class ActiveNetwork::NetworkNotFound < RuntimeError; end
8
8
 
9
- attr_accessor :network, :token, :created_at, :updated_at, :reloaded_at, :in_use
9
+ attr_accessor :network, :token, :created_at, :updated_at, :reloaded_at, :in_use, :filepath
10
10
 
11
11
  def initialize(token, filepath = nil)
12
12
  Netica::NeticaLogger.info "Initializing #{self.class} for #{token}."
@@ -16,7 +16,8 @@ module Netica
16
16
  self.in_use = false
17
17
 
18
18
  if filepath
19
- self.network = BayesNetwork.new(filepath)
19
+ self.filepath = filepath
20
+ self.network = BayesNetwork.new(filepath)
20
21
  end
21
22
  processor = Netica::Environment.instance
22
23
  processor.active_networks << self
@@ -58,21 +59,11 @@ module Netica
58
59
  }
59
60
  end
60
61
 
61
- # Save ActiveNetwork to an associated redis store, if one is defined.
62
- #
63
- # @return [true,false,nil] outcome of redis.set, or nil if redis is not found
64
- def save
65
- if Netica::Environment.instance.redis
66
- return Netica::Environment.instance.redis.set(token, JSON.dump(state))
67
- end
68
- end
69
-
70
62
  # Retrieve ActiveNetwork from current Netica Environment instance
71
- # or an associated redis store, if one is defined.
72
63
  #
73
64
  # @param token [String] identifying token for ActiveNetwork sought
74
65
  # @return [ActiveNetwork] ActiveNetwork object found
75
- def self.find(token, load_from_storage = true)
66
+ def self.find(token)
76
67
  environment = Netica::Environment.instance
77
68
  Netica::NeticaLogger.info "Searching in #{environment.network_container.class} #{environment.network_container.object_id} (length: #{environment.network_container.length}) for #{token}."
78
69
  environment.network_container.each do |an|
@@ -85,62 +76,31 @@ module Netica
85
76
  end
86
77
  end
87
78
  Netica::NeticaLogger.info "Network #{token} not found in current instance #{environment.object_id}."
88
- if Netica::Environment.instance.redis
89
- stored_state = Netica::Environment.instance.redis.get(token)
90
- if stored_state && load_from_storage
91
- hash = JSON.parse(stored_state)
92
- active_network = Object.const_get(hash['class']).new(token)
93
- active_network.load_from_saved_state(hash)
94
- Netica::NeticaLogger.info "Network #{token} reloaded from saved state: #{hash}"
95
- return active_network
96
- elsif stored_state
97
- return stored_state
98
- else
99
- Netica::NeticaLogger.info "Network #{token} not found in redis."
100
- end
101
- end
102
79
  return nil
103
80
  end
104
81
 
105
82
  # Destroy the ActiveNetwork
106
83
  #
107
- # @param memory [Boolean] destroy the in-memory object?, default is `true`
108
- # @param storage [Boolean] destroy object in redis?, default is `true`
109
- # @return [Hash] outcome of deletion attempts per storage location
110
- def destroy(memory = true, storage = true)
111
- outcome = { token: token, deletion: { memory: nil, redis: nil}}
84
+ # @return [Hash] outcome of deletion attempt
85
+ def destroy
86
+ outcome = { token: token, deletion: { memory: nil }}
112
87
  environment = Netica::Environment.instance
113
-
114
- if memory
115
- rejection = environment.network_container.reject!{|network| network.token == token}
116
- outcome[:deletion][:memory] = rejection.is_a?(Array)
117
- end
118
-
119
- if environment.redis && storage == true
120
- outcome[:deletion][:redis] = (environment.redis.del(token) > 0)
121
- end
88
+ rejection = environment.network_container.reject!{|network| network.token == token}
89
+ outcome[:deletion][:memory] = rejection.is_a?(Array)
122
90
  outcome
123
91
  end
124
92
 
125
- # Destroy a saved network
126
- #
127
- # @return [Hash] outcome of deletion attempts per storage location
128
- def self.destroy_by_token(token)
129
- outcome = { token: token, deletion: { memory: nil, redis: nil}}
130
- environment = Netica::Environment.instance
131
-
132
- if environment.redis
133
- outcome[:deletion][:redis] = (environment.redis.del(token) > 0)
134
- end
135
-
136
- outcome
137
- end
138
93
 
139
- # Load ActiveNetwork from a saved state
94
+ # Load ActiveNetwork from a Hash
140
95
  #
141
96
  # @param hash [Hash] network state to be restored
142
97
  def load_from_saved_state(hash)
143
- self.network = BayesNetwork.new(hash["network"]["dne_file_path"])
98
+ if filepath
99
+ self.network = BayesNetwork.new(filepath)
100
+ else
101
+ self.filepath = hash["network"]["dne_file_path"]
102
+ self.network = BayesNetwork.new(hash["network"]["dne_file_path"])
103
+ end
144
104
  self.reloaded_at = Time.now
145
105
  self.network.load_from_state(hash["network"])
146
106
  end
@@ -42,11 +42,16 @@ module Netica
42
42
  end
43
43
 
44
44
  def load_from_state(network_hash)
45
- Netica::NeticaLogger.info "Loading state from network_hash => #{network_hash}"
46
45
  network_hash["decision_nodes"].each do |node_name, node_value|
47
46
  Netica::NeticaLogger.info "Setting #{node_name} => #{node_value}"
48
47
  node(node_name).value = node_value
49
48
  end
49
+
50
+ network_hash["nature_nodes"].each do |node_name, node_value_hash|
51
+ next unless node_name == 'XRay'
52
+ Netica::NeticaLogger.info "Setting #{node_name} => #{node_value_hash}"
53
+ node(node_name).value = node_value_hash
54
+ end
50
55
  end
51
56
 
52
57
  def state
data/lib/netica/node.rb CHANGED
@@ -65,7 +65,16 @@ class Java::NorsysNetica::Node
65
65
  finding().setReal(new_value)
66
66
  elsif nature_node?
67
67
  Netica::NeticaLogger.info "Nature Node: Setting #{kind} #{type} node #{self.name} to #{new_value}"
68
- finding.enterState(new_value)
68
+ if new_value.is_a?(Hash)
69
+ value_array = []
70
+ states.each do |s|
71
+ value_array << new_value[s.name]
72
+ end
73
+ finding().enter_likelihood(value_array)
74
+ else
75
+ finding.enterState(new_value)
76
+ end
77
+ Netica::NeticaLogger.info beliefs
69
78
  else
70
79
  throw "Could not set value for #{kind} #{type} node #{self.name} to #{new_value}"
71
80
  end
@@ -0,0 +1,74 @@
1
+ # provides a persistable object container for a Netica Bayes net.
2
+ class StorableNetwork < Netica::ActiveNetwork
3
+
4
+ # Save StorableNetwork to an associated redis store, if one is defined.
5
+ #
6
+ # @return [true,false,nil] outcome of redis.set, or nil if redis is not found
7
+ def save
8
+ if Netica::Environment.instance.redis
9
+ return Netica::Environment.instance.redis.set(token, JSON.dump(state))
10
+ end
11
+ end
12
+
13
+ # Retrieve ActiveNetwork from current Netica Environment instance
14
+ # or an associated redis store, if one is defined.
15
+ #
16
+ # @param token [String] identifying token for ActiveNetwork sought
17
+ # @return [ActiveNetwork] ActiveNetwork object found
18
+ def self.find(token, load_from_storage = true, filepath = nil)
19
+ environment = Netica::Environment.instance
20
+ redis = environment.redis
21
+ found_network = super(token)
22
+ if found_network.nil? && redis
23
+ stored_state = redis.get(token)
24
+ if stored_state && load_from_storage
25
+ hash = JSON.parse(stored_state)
26
+ found_network = Object::const_get(hash['class']).new(token)
27
+ found_network.filepath = filepath
28
+ found_network.load_from_saved_state(hash)
29
+ Netica::NeticaLogger.info "Network #{token} reloaded from saved state: #{hash}"
30
+ Netica::NeticaLogger.info "#{token} reloaded state: #{found_network.state}"
31
+ return found_network
32
+ elsif stored_state
33
+ return stored_state
34
+ else
35
+ Netica::NeticaLogger.info "Network #{token} not found in redis."
36
+ end
37
+ end
38
+ return nil
39
+ end
40
+
41
+ # Destroy the ActiveNetwork
42
+ #
43
+ # @param memory [Boolean] destroy the in-memory object?, default is `true`
44
+ # @param storage [Boolean] destroy object in redis?, default is `true`
45
+ # @return [Hash] outcome of deletion attempts per storage location
46
+ def destroy(memory = true, storage = true)
47
+ outcome = { token: token, deletion: { memory: nil, redis: nil}}
48
+ environment = Netica::Environment.instance
49
+
50
+ if memory
51
+ rejection = environment.network_container.reject!{|network| network.token == token}
52
+ outcome[:deletion][:memory] = rejection.is_a?(Array)
53
+ end
54
+
55
+ if environment.redis && storage == true
56
+ outcome[:deletion][:redis] = (environment.redis.del(token) > 0)
57
+ end
58
+ outcome
59
+ end
60
+
61
+ # Destroy a saved network
62
+ #
63
+ # @return [Hash] outcome of deletion attempts per storage location
64
+ def self.destroy_by_token(token)
65
+ outcome = { token: token, deletion: { memory: nil, redis: nil}}
66
+ environment = Netica::Environment.instance
67
+
68
+ if environment.redis
69
+ outcome[:deletion][:redis] = (environment.redis.del(token) > 0)
70
+ end
71
+
72
+ outcome
73
+ end
74
+ end
@@ -1,3 +1,3 @@
1
1
  module Netica
2
- VERSION = "0.0.21"
2
+ VERSION = "1.0.0.pre"
3
3
  end
@@ -31,7 +31,7 @@ describe Netica::ActiveNetwork do
31
31
  end
32
32
 
33
33
  it "should be returned when searched for" do
34
- Netica::ActiveNetwork.find("fake_token_identifier", false).should === @active_network
34
+ Netica::ActiveNetwork.find("fake_token_identifier").should === @active_network
35
35
  end
36
36
 
37
37
  context "the tuberculosis node" do
@@ -49,67 +49,8 @@ describe Netica::ActiveNetwork do
49
49
  Netica::Environment.instance.active_networks.length.should eq(1)
50
50
  outcome = @active_network.destroy
51
51
  outcome[:deletion][:memory].should be_true
52
- outcome[:deletion][:redis].should be_nil
53
52
  Netica::Environment.instance.active_networks.length.should eq(0)
54
53
  end
55
54
  end
56
55
  end
57
-
58
- context "with redis" do
59
- before(:all) do
60
- Java::NorsysNetica::Environ.__persistent__ = true
61
- redis_settings = { :redis => { :host => "127.0.0.1", :port => 6379 }}
62
- Netica::Environment.engage(redis_settings)
63
- @redis = Redis.new(redis_settings)
64
- end
65
-
66
- after(:all) do
67
- Netica::Environment.instance.processor.finalize
68
- end
69
-
70
- context "with ChestClinic.dne" do
71
- before(:all) do
72
- @active_network = Netica::ActiveNetwork.new("fake_token_identifier", "#{File.dirname(__FILE__)}/../../examples/ChestClinic.dne")
73
- @active_network_token = @active_network.token
74
- end
75
-
76
- describe "#save" do
77
- it "should be savable" do
78
- @redis.get(@active_network_token).should be_nil
79
- @active_network.save
80
- @redis.get(@active_network_token).should_not be_nil
81
- end
82
- end
83
-
84
- describe "#destroy" do
85
- it "should be deletable" do
86
- Netica::Environment.instance.active_networks.length.should eq(1)
87
- @redis.get(@active_network_token).should_not be_nil
88
- outcome = @active_network.destroy
89
- outcome[:deletion][:memory].should be_true
90
- outcome[:deletion][:redis].should be_true
91
- @redis.get(@active_network_token).should be_nil
92
- Netica::Environment.instance.active_networks.length.should eq(0)
93
- end
94
- end
95
-
96
- describe "#destroy_by_token" do
97
- context "A stored active network" do
98
- it "should be deletable" do
99
- @active_network.save
100
- @active_network.destroy(true, false)
101
- @redis.get(@active_network_token).should be_true
102
-
103
- outcome = Netica::ActiveNetwork.destroy_by_token(@active_network_token)
104
- outcome[:deletion][:memory].should be_nil
105
- outcome[:deletion][:redis].should be_true
106
-
107
- @redis.get(@active_network_token).should be_nil
108
- Netica::Environment.instance.active_networks.length.should eq(0)
109
- end
110
- end
111
- end
112
- end
113
- end
114
56
  end
115
-
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+
3
+ describe StorableNetwork do
4
+ context "with redis" do
5
+ before(:all) do
6
+ Java::NorsysNetica::Environ.__persistent__ = true
7
+ redis_settings = { :redis => { :host => "127.0.0.1", :port => 6379 }}
8
+ Netica::Environment.engage(redis_settings)
9
+ @redis = Redis.new(redis_settings)
10
+ end
11
+
12
+ after(:all) do
13
+ Netica::Environment.instance.processor.finalize
14
+ end
15
+
16
+ context "with ChestClinic.dne" do
17
+ before(:all) do
18
+ @active_network = StorableNetwork.new("storable_fake_token_identifier", "#{File.dirname(__FILE__)}/../../examples/ChestClinic.dne")
19
+ @active_network_token = @active_network.token
20
+ end
21
+
22
+ after(:all) do
23
+ @redis.del("storable_fake_token_identifier")
24
+ end
25
+
26
+ describe "#save" do
27
+ it "should be savable" do
28
+ @redis.get(@active_network_token).should be_nil
29
+ @active_network.save
30
+ @redis.get(@active_network_token).should_not be_nil
31
+ end
32
+ end
33
+
34
+ describe "#destroy" do
35
+ it "should be deletable" do
36
+ Netica::Environment.instance.active_networks.length.should eq(1)
37
+ @redis.get(@active_network_token).should_not be_nil
38
+ outcome = @active_network.destroy
39
+ outcome[:deletion][:memory].should be_true
40
+ outcome[:deletion][:redis].should be_true
41
+ @redis.get(@active_network_token).should be_nil
42
+ Netica::Environment.instance.active_networks.length.should eq(0)
43
+ end
44
+ end
45
+
46
+ describe "#destroy_by_token" do
47
+ context "A stored active network" do
48
+ it "should be deletable" do
49
+ @active_network.save
50
+ @active_network.destroy(true, false)
51
+ @redis.get(@active_network_token).should be_true
52
+
53
+ outcome = StorableNetwork.destroy_by_token(@active_network_token)
54
+ outcome[:deletion][:memory].should be_nil
55
+ outcome[:deletion][:redis].should be_true
56
+
57
+ @redis.get(@active_network_token).should be_nil
58
+ Netica::Environment.instance.active_networks.length.should eq(0)
59
+ end
60
+ end
61
+ end
62
+
63
+ describe "#find" do
64
+ it "should be reloadable" do
65
+ @active_network.network.node("Tuberculosis").value("present").should be_less_than 0.011
66
+ @active_network.network.node("XRay").value = "abnormal"
67
+
68
+ @active_network.network.node("Tuberculosis").value("present").should be_greater_than 0.092
69
+ @active_network.save
70
+
71
+ @active_network.destroy(true, false)
72
+
73
+ Netica::Environment.instance.active_networks.length.should eq(0)
74
+
75
+ @reloaded_network = StorableNetwork.find(@active_network_token, true)
76
+ Netica::Environment.instance.active_networks.length.should eq(1)
77
+
78
+ @reloaded_network.network.node("Tuberculosis").value("present").should be_greater_than 0.092
79
+
80
+ @reloaded_network.destroy
81
+ Netica::Environment.instance.active_networks.length.should eq(0)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+
metadata CHANGED
@@ -1,32 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netica
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.0.21
4
+ version: 1.0.0.pre
6
5
  platform: java
7
6
  authors:
8
7
  - Jerry Richardson
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-06-03 00:00:00.000000000 Z
11
+ date: 2013-12-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: redis
16
15
  version_requirements: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - ">="
17
+ - - '>='
19
18
  - !ruby/object:Gem::Version
20
- version: !binary |-
21
- MA==
22
- none: false
19
+ version: '0'
23
20
  requirement: !ruby/object:Gem::Requirement
24
21
  requirements:
25
- - - ">="
22
+ - - '>='
26
23
  - !ruby/object:Gem::Version
27
- version: !binary |-
28
- MA==
29
- none: false
24
+ version: '0'
30
25
  prerelease: false
31
26
  type: :development
32
27
  description: Netica Bayes Network Management
@@ -36,15 +31,16 @@ executables: []
36
31
  extensions: []
37
32
  extra_rdoc_files: []
38
33
  files:
39
- - ".gitignore"
40
- - ".rspec"
41
- - ".ruby-version"
34
+ - .gitignore
35
+ - .rspec
36
+ - .ruby-version
42
37
  - CONTRIBUTING.md
43
38
  - Gemfile
44
39
  - LICENSE.txt
45
40
  - README.md
46
41
  - Rakefile
47
42
  - examples/ChestClinic.dne
43
+ - examples/ChestClinicv2.dne
48
44
  - examples/chest_clinic.rb
49
45
  - lib/netica.rb
50
46
  - lib/netica/active_network.rb
@@ -57,43 +53,43 @@ files:
57
53
  - lib/netica/node_list.rb
58
54
  - lib/netica/railtie.rb
59
55
  - lib/netica/state.rb
56
+ - lib/netica/storable_network.rb
60
57
  - lib/netica/version.rb
61
58
  - lib/tasks/netica.rake
62
59
  - log/.gitignore
63
60
  - netica.gemspec
64
61
  - spec/netica/active_network_spec.rb
65
62
  - spec/netica/environment_spec.rb
63
+ - spec/netica/storable_network_spec.rb
66
64
  - spec/netica_spec.rb
67
65
  - spec/spec_helper.rb
68
66
  homepage: http://disruptive.github.io/netica/
69
67
  licenses:
70
68
  - MIT
69
+ metadata: {}
71
70
  post_install_message:
72
71
  rdoc_options: []
73
72
  require_paths:
74
73
  - lib
75
74
  required_ruby_version: !ruby/object:Gem::Requirement
76
75
  requirements:
77
- - - ">="
76
+ - - '>='
78
77
  - !ruby/object:Gem::Version
79
- version: !binary |-
80
- MA==
81
- none: false
78
+ version: '0'
82
79
  required_rubygems_version: !ruby/object:Gem::Requirement
83
80
  requirements:
84
- - - ">="
81
+ - - '>'
85
82
  - !ruby/object:Gem::Version
86
- version: !binary |-
87
- MA==
88
- none: false
83
+ version: 1.3.1
89
84
  requirements: []
90
85
  rubyforge_project:
91
- rubygems_version: 1.8.24
86
+ rubygems_version: 2.1.9
92
87
  signing_key:
93
- specification_version: 3
88
+ specification_version: 4
94
89
  summary: Tools to manage Bayes Networks with the NeticaJ API
95
90
  test_files:
96
91
  - spec/netica/active_network_spec.rb
97
92
  - spec/netica/environment_spec.rb
93
+ - spec/netica/storable_network_spec.rb
98
94
  - spec/netica_spec.rb
99
95
  - spec/spec_helper.rb