xgb 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/NOTICE.txt +1 -1
- data/README.md +1 -1
- data/lib/xgboost/booster.rb +176 -65
- data/lib/xgboost/callback_container.rb +145 -0
- data/lib/xgboost/cv_pack.rb +26 -0
- data/lib/xgboost/dmatrix.rb +190 -78
- data/lib/xgboost/early_stopping.rb +132 -0
- data/lib/xgboost/evaluation_monitor.rb +44 -0
- data/lib/xgboost/ffi.rb +11 -2
- data/lib/xgboost/packed_booster.rb +51 -0
- data/lib/xgboost/training_callback.rb +23 -0
- data/lib/xgboost/utils.rb +19 -4
- data/lib/xgboost/version.rb +1 -1
- data/lib/xgboost.rb +107 -112
- data/vendor/aarch64-linux/libxgboost.so +0 -0
- data/vendor/arm64-darwin/libxgboost.dylib +0 -0
- data/vendor/x64-mingw/xgboost.dll +0 -0
- data/vendor/x86_64-darwin/libxgboost.dylib +0 -0
- data/vendor/x86_64-linux/libxgboost.so +0 -0
- data/vendor/x86_64-linux-musl/libxgboost.so +0 -0
- metadata +10 -10
- data/vendor/aarch64-linux/LICENSE-rabit.txt +0 -28
- data/vendor/arm64-darwin/LICENSE-rabit.txt +0 -28
- data/vendor/x64-mingw/LICENSE-rabit.txt +0 -28
- data/vendor/x86_64-darwin/LICENSE-rabit.txt +0 -28
- data/vendor/x86_64-linux/LICENSE-rabit.txt +0 -28
- data/vendor/x86_64-linux-musl/LICENSE-rabit.txt +0 -28
data/lib/xgboost.rb
CHANGED
@@ -4,9 +4,17 @@ require "ffi"
|
|
4
4
|
# modules
|
5
5
|
require_relative "xgboost/utils"
|
6
6
|
require_relative "xgboost/booster"
|
7
|
+
require_relative "xgboost/callback_container"
|
8
|
+
require_relative "xgboost/cv_pack"
|
7
9
|
require_relative "xgboost/dmatrix"
|
10
|
+
require_relative "xgboost/packed_booster"
|
8
11
|
require_relative "xgboost/version"
|
9
12
|
|
13
|
+
# callbacks
|
14
|
+
require_relative "xgboost/training_callback"
|
15
|
+
require_relative "xgboost/early_stopping"
|
16
|
+
require_relative "xgboost/evaluation_monitor"
|
17
|
+
|
10
18
|
# scikit-learn API
|
11
19
|
require_relative "xgboost/model"
|
12
20
|
require_relative "xgboost/classifier"
|
@@ -44,134 +52,113 @@ module XGBoost
|
|
44
52
|
autoload :FFI, "xgboost/ffi"
|
45
53
|
|
46
54
|
class << self
|
47
|
-
def train(
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
55
|
+
def train(
|
56
|
+
params,
|
57
|
+
dtrain,
|
58
|
+
num_boost_round: 10,
|
59
|
+
evals: nil,
|
60
|
+
maximize: nil,
|
61
|
+
early_stopping_rounds: nil,
|
62
|
+
evals_result: nil,
|
63
|
+
verbose_eval: true,
|
64
|
+
callbacks: nil
|
65
|
+
)
|
66
|
+
callbacks = callbacks.nil? ? [] : callbacks.dup
|
53
67
|
evals ||= []
|
54
68
|
|
69
|
+
bst = Booster.new(params: params, cache: [dtrain] + evals.map { |d| d[0] })
|
70
|
+
|
71
|
+
if verbose_eval
|
72
|
+
verbose_eval = verbose_eval == true ? 1 : verbose_eval
|
73
|
+
callbacks << EvaluationMonitor.new(period: verbose_eval)
|
74
|
+
end
|
55
75
|
if early_stopping_rounds
|
56
|
-
|
57
|
-
best_iter = nil
|
58
|
-
best_message = nil
|
76
|
+
callbacks << EarlyStopping.new(rounds: early_stopping_rounds, maximize: maximize)
|
59
77
|
end
|
78
|
+
cb_container = CallbackContainer.new(callbacks)
|
60
79
|
|
61
|
-
|
62
|
-
booster.update(dtrain, iteration)
|
80
|
+
bst = cb_container.before_training(bst)
|
63
81
|
|
64
|
-
|
65
|
-
|
66
|
-
|
82
|
+
num_boost_round.times do |i|
|
83
|
+
break if cb_container.before_iteration(bst, i, dtrain, evals)
|
84
|
+
bst.update(dtrain, i)
|
85
|
+
break if cb_container.after_iteration(bst, i, dtrain, evals)
|
86
|
+
end
|
67
87
|
|
68
|
-
|
69
|
-
metric = res[-1][0]
|
70
|
-
puts "Will train until #{metric} hasn't improved in #{early_stopping_rounds.to_i} rounds." if verbose_eval
|
71
|
-
end
|
88
|
+
bst = cb_container.after_training(bst)
|
72
89
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
# TODO handle larger better
|
77
|
-
if best_score.nil? || score < best_score
|
78
|
-
best_score = score
|
79
|
-
best_iter = iteration
|
80
|
-
best_message = message
|
81
|
-
elsif early_stopping_rounds && iteration - best_iter >= early_stopping_rounds
|
82
|
-
booster.best_iteration = best_iter
|
83
|
-
puts "Stopping. Best iteration:\n#{best_message}" if verbose_eval
|
84
|
-
break
|
85
|
-
end
|
86
|
-
end
|
90
|
+
if !evals_result.nil?
|
91
|
+
evals_result.merge!(cb_container.history)
|
87
92
|
end
|
88
93
|
|
89
|
-
|
94
|
+
bst
|
90
95
|
end
|
91
96
|
|
92
|
-
def cv(
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
cvfolds =
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
97
|
+
def cv(
|
98
|
+
params,
|
99
|
+
dtrain,
|
100
|
+
num_boost_round: 10,
|
101
|
+
nfold: 3,
|
102
|
+
maximize: nil,
|
103
|
+
early_stopping_rounds: nil,
|
104
|
+
verbose_eval: nil,
|
105
|
+
show_stdv: true,
|
106
|
+
seed: 0,
|
107
|
+
callbacks: nil,
|
108
|
+
shuffle: true
|
109
|
+
)
|
110
|
+
results = {}
|
111
|
+
cvfolds =
|
112
|
+
mknfold(
|
113
|
+
dall: dtrain,
|
114
|
+
param: params,
|
115
|
+
nfold: nfold,
|
116
|
+
seed: seed,
|
117
|
+
shuffle: shuffle
|
118
|
+
)
|
119
|
+
|
120
|
+
callbacks = callbacks.nil? ? [] : callbacks.dup
|
121
|
+
|
122
|
+
if verbose_eval
|
123
|
+
verbose_eval = verbose_eval == true ? 1 : verbose_eval
|
124
|
+
callbacks << EvaluationMonitor.new(period: verbose_eval, show_stdv: show_stdv)
|
113
125
|
end
|
114
|
-
|
115
|
-
eval_hist = {}
|
116
|
-
|
117
126
|
if early_stopping_rounds
|
118
|
-
|
119
|
-
best_iter = nil
|
127
|
+
callbacks << EarlyStopping.new(rounds: early_stopping_rounds, maximize: maximize)
|
120
128
|
end
|
129
|
+
callbacks_container = CallbackContainer.new(callbacks, is_cv: true)
|
121
130
|
|
122
|
-
|
123
|
-
|
131
|
+
booster = PackedBooster.new(cvfolds)
|
132
|
+
callbacks_container.before_training(booster)
|
124
133
|
|
125
|
-
|
126
|
-
|
127
|
-
|
134
|
+
num_boost_round.times do |i|
|
135
|
+
break if callbacks_container.before_iteration(booster, i, dtrain, nil)
|
136
|
+
booster.update(i)
|
128
137
|
|
129
|
-
|
130
|
-
|
131
|
-
|
138
|
+
should_break = callbacks_container.after_iteration(booster, i, dtrain, nil)
|
139
|
+
res = callbacks_container.aggregated_cv
|
140
|
+
res.each do |key, mean, std|
|
141
|
+
if !results.include?(key + "-mean")
|
142
|
+
results[key + "-mean"] = []
|
132
143
|
end
|
133
|
-
|
134
|
-
|
135
|
-
message_parts = ["[#{iteration}]"]
|
136
|
-
|
137
|
-
last_mean = nil
|
138
|
-
means = {}
|
139
|
-
scores.each do |eval_name, vals|
|
140
|
-
mean = mean(vals)
|
141
|
-
stdev = stdev(vals)
|
142
|
-
|
143
|
-
(eval_hist["#{eval_name}-mean"] ||= []) << mean
|
144
|
-
(eval_hist["#{eval_name}-std"] ||= []) << stdev
|
145
|
-
|
146
|
-
means[eval_name] = mean
|
147
|
-
last_mean = mean
|
148
|
-
|
149
|
-
if show_stdv
|
150
|
-
message_parts << "%s:%g+%g" % [eval_name, mean, stdev]
|
151
|
-
else
|
152
|
-
message_parts << "%s:%g" % [eval_name, mean]
|
144
|
+
if !results.include?(key + "-std")
|
145
|
+
results[key + "-std"] = []
|
153
146
|
end
|
147
|
+
results[key + "-mean"] << mean
|
148
|
+
results[key + "-std"] << std
|
154
149
|
end
|
155
150
|
|
156
|
-
if
|
157
|
-
|
158
|
-
|
159
|
-
if best_score.nil? || score < best_score
|
160
|
-
best_score = score
|
161
|
-
best_iter = iteration
|
162
|
-
elsif iteration - best_iter >= early_stopping_rounds
|
163
|
-
eval_hist.each_key do |k|
|
164
|
-
eval_hist[k] = eval_hist[k][0..best_iter]
|
165
|
-
end
|
166
|
-
break
|
151
|
+
if should_break
|
152
|
+
results.keys.each do |k|
|
153
|
+
results[k] = results[k][..booster.best_iteration]
|
167
154
|
end
|
155
|
+
break
|
168
156
|
end
|
169
|
-
|
170
|
-
# put at end to keep output consistent with Python
|
171
|
-
puts message_parts.join("\t") if verbose_eval
|
172
157
|
end
|
173
158
|
|
174
|
-
|
159
|
+
callbacks_container.after_training(booster)
|
160
|
+
|
161
|
+
results
|
175
162
|
end
|
176
163
|
|
177
164
|
def lib_version
|
@@ -184,18 +171,26 @@ module XGBoost
|
|
184
171
|
|
185
172
|
private
|
186
173
|
|
187
|
-
def
|
188
|
-
|
189
|
-
|
174
|
+
def mknfold(dall:, param:, nfold:, seed:, shuffle:)
|
175
|
+
rand_idx = (0...dall.num_row).to_a
|
176
|
+
rand_idx.shuffle!(random: Random.new(seed)) if shuffle
|
177
|
+
|
178
|
+
kstep = (rand_idx.size / nfold.to_f).ceil
|
179
|
+
out_idset = rand_idx.each_slice(kstep).to_a[0...nfold]
|
180
|
+
in_idset = []
|
181
|
+
nfold.times do |i|
|
182
|
+
idx = out_idset.dup
|
183
|
+
idx.delete_at(i)
|
184
|
+
in_idset << idx.flatten
|
185
|
+
end
|
190
186
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
sum += (v - m) ** 2
|
187
|
+
ret = []
|
188
|
+
nfold.times do |k|
|
189
|
+
fold_dtrain = dall.slice(in_idset[k])
|
190
|
+
fold_dvalid = dall.slice(out_idset[k])
|
191
|
+
ret << CVPack.new(fold_dtrain, fold_dvalid, param)
|
197
192
|
end
|
198
|
-
|
193
|
+
ret
|
199
194
|
end
|
200
195
|
end
|
201
196
|
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xgb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -37,36 +37,36 @@ files:
|
|
37
37
|
- lib/xgb.rb
|
38
38
|
- lib/xgboost.rb
|
39
39
|
- lib/xgboost/booster.rb
|
40
|
+
- lib/xgboost/callback_container.rb
|
40
41
|
- lib/xgboost/classifier.rb
|
42
|
+
- lib/xgboost/cv_pack.rb
|
41
43
|
- lib/xgboost/dmatrix.rb
|
44
|
+
- lib/xgboost/early_stopping.rb
|
45
|
+
- lib/xgboost/evaluation_monitor.rb
|
42
46
|
- lib/xgboost/ffi.rb
|
43
47
|
- lib/xgboost/model.rb
|
48
|
+
- lib/xgboost/packed_booster.rb
|
44
49
|
- lib/xgboost/ranker.rb
|
45
50
|
- lib/xgboost/regressor.rb
|
51
|
+
- lib/xgboost/training_callback.rb
|
46
52
|
- lib/xgboost/utils.rb
|
47
53
|
- lib/xgboost/version.rb
|
48
54
|
- vendor/aarch64-linux/LICENSE-dmlc-core.txt
|
49
|
-
- vendor/aarch64-linux/LICENSE-rabit.txt
|
50
55
|
- vendor/aarch64-linux/LICENSE-xgboost.txt
|
51
56
|
- vendor/aarch64-linux/libxgboost.so
|
52
57
|
- vendor/arm64-darwin/LICENSE-dmlc-core.txt
|
53
|
-
- vendor/arm64-darwin/LICENSE-rabit.txt
|
54
58
|
- vendor/arm64-darwin/LICENSE-xgboost.txt
|
55
59
|
- vendor/arm64-darwin/libxgboost.dylib
|
56
60
|
- vendor/x64-mingw/LICENSE-dmlc-core.txt
|
57
|
-
- vendor/x64-mingw/LICENSE-rabit.txt
|
58
61
|
- vendor/x64-mingw/LICENSE-xgboost.txt
|
59
62
|
- vendor/x64-mingw/xgboost.dll
|
60
63
|
- vendor/x86_64-darwin/LICENSE-dmlc-core.txt
|
61
|
-
- vendor/x86_64-darwin/LICENSE-rabit.txt
|
62
64
|
- vendor/x86_64-darwin/LICENSE-xgboost.txt
|
63
65
|
- vendor/x86_64-darwin/libxgboost.dylib
|
64
66
|
- vendor/x86_64-linux-musl/LICENSE-dmlc-core.txt
|
65
|
-
- vendor/x86_64-linux-musl/LICENSE-rabit.txt
|
66
67
|
- vendor/x86_64-linux-musl/LICENSE-xgboost.txt
|
67
68
|
- vendor/x86_64-linux-musl/libxgboost.so
|
68
69
|
- vendor/x86_64-linux/LICENSE-dmlc-core.txt
|
69
|
-
- vendor/x86_64-linux/LICENSE-rabit.txt
|
70
70
|
- vendor/x86_64-linux/LICENSE-xgboost.txt
|
71
71
|
- vendor/x86_64-linux/libxgboost.so
|
72
72
|
homepage: https://github.com/ankane/xgboost-ruby
|
@@ -81,14 +81,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
81
|
requirements:
|
82
82
|
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: '3'
|
84
|
+
version: '3.1'
|
85
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
requirements: []
|
91
|
-
rubygems_version: 3.
|
91
|
+
rubygems_version: 3.5.16
|
92
92
|
signing_key:
|
93
93
|
specification_version: 4
|
94
94
|
summary: High performance gradient boosting for Ruby
|
@@ -1,28 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 by Contributors
|
2
|
-
All rights reserved.
|
3
|
-
|
4
|
-
Redistribution and use in source and binary forms, with or without
|
5
|
-
modification, are permitted provided that the following conditions are met:
|
6
|
-
|
7
|
-
* Redistributions of source code must retain the above copyright notice, this
|
8
|
-
list of conditions and the following disclaimer.
|
9
|
-
|
10
|
-
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
this list of conditions and the following disclaimer in the documentation
|
12
|
-
and/or other materials provided with the distribution.
|
13
|
-
|
14
|
-
* Neither the name of rabit nor the names of its
|
15
|
-
contributors may be used to endorse or promote products derived from
|
16
|
-
this software without specific prior written permission.
|
17
|
-
|
18
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
22
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
@@ -1,28 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 by Contributors
|
2
|
-
All rights reserved.
|
3
|
-
|
4
|
-
Redistribution and use in source and binary forms, with or without
|
5
|
-
modification, are permitted provided that the following conditions are met:
|
6
|
-
|
7
|
-
* Redistributions of source code must retain the above copyright notice, this
|
8
|
-
list of conditions and the following disclaimer.
|
9
|
-
|
10
|
-
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
this list of conditions and the following disclaimer in the documentation
|
12
|
-
and/or other materials provided with the distribution.
|
13
|
-
|
14
|
-
* Neither the name of rabit nor the names of its
|
15
|
-
contributors may be used to endorse or promote products derived from
|
16
|
-
this software without specific prior written permission.
|
17
|
-
|
18
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
22
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
@@ -1,28 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 by Contributors
|
2
|
-
All rights reserved.
|
3
|
-
|
4
|
-
Redistribution and use in source and binary forms, with or without
|
5
|
-
modification, are permitted provided that the following conditions are met:
|
6
|
-
|
7
|
-
* Redistributions of source code must retain the above copyright notice, this
|
8
|
-
list of conditions and the following disclaimer.
|
9
|
-
|
10
|
-
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
this list of conditions and the following disclaimer in the documentation
|
12
|
-
and/or other materials provided with the distribution.
|
13
|
-
|
14
|
-
* Neither the name of rabit nor the names of its
|
15
|
-
contributors may be used to endorse or promote products derived from
|
16
|
-
this software without specific prior written permission.
|
17
|
-
|
18
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
22
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
@@ -1,28 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 by Contributors
|
2
|
-
All rights reserved.
|
3
|
-
|
4
|
-
Redistribution and use in source and binary forms, with or without
|
5
|
-
modification, are permitted provided that the following conditions are met:
|
6
|
-
|
7
|
-
* Redistributions of source code must retain the above copyright notice, this
|
8
|
-
list of conditions and the following disclaimer.
|
9
|
-
|
10
|
-
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
this list of conditions and the following disclaimer in the documentation
|
12
|
-
and/or other materials provided with the distribution.
|
13
|
-
|
14
|
-
* Neither the name of rabit nor the names of its
|
15
|
-
contributors may be used to endorse or promote products derived from
|
16
|
-
this software without specific prior written permission.
|
17
|
-
|
18
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
22
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
@@ -1,28 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 by Contributors
|
2
|
-
All rights reserved.
|
3
|
-
|
4
|
-
Redistribution and use in source and binary forms, with or without
|
5
|
-
modification, are permitted provided that the following conditions are met:
|
6
|
-
|
7
|
-
* Redistributions of source code must retain the above copyright notice, this
|
8
|
-
list of conditions and the following disclaimer.
|
9
|
-
|
10
|
-
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
this list of conditions and the following disclaimer in the documentation
|
12
|
-
and/or other materials provided with the distribution.
|
13
|
-
|
14
|
-
* Neither the name of rabit nor the names of its
|
15
|
-
contributors may be used to endorse or promote products derived from
|
16
|
-
this software without specific prior written permission.
|
17
|
-
|
18
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
22
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
@@ -1,28 +0,0 @@
|
|
1
|
-
Copyright (c) 2014 by Contributors
|
2
|
-
All rights reserved.
|
3
|
-
|
4
|
-
Redistribution and use in source and binary forms, with or without
|
5
|
-
modification, are permitted provided that the following conditions are met:
|
6
|
-
|
7
|
-
* Redistributions of source code must retain the above copyright notice, this
|
8
|
-
list of conditions and the following disclaimer.
|
9
|
-
|
10
|
-
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
this list of conditions and the following disclaimer in the documentation
|
12
|
-
and/or other materials provided with the distribution.
|
13
|
-
|
14
|
-
* Neither the name of rabit nor the names of its
|
15
|
-
contributors may be used to endorse or promote products derived from
|
16
|
-
this software without specific prior written permission.
|
17
|
-
|
18
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
22
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|