xgboost 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c395c9bc4b61e328f2b5a34c25974e0156cba8b
4
- data.tar.gz: a2c3c597c32a4a8531b840cfbdf05ad5b879dc0d
3
+ metadata.gz: 055f94dc621ffd0592d84a0dd6204f959b677ffa
4
+ data.tar.gz: dacbb294c2a47ffb4762e3889dd779cd01fbc1c3
5
5
  SHA512:
6
- metadata.gz: bf320b80c8aeb33274487a8fecb1678ee6b561a32abc788954ca92bf95cfbed35db8cb83810bd0eedd72b5e3c2efd498c239db3739c9b978e8a2eb442413a6b6
7
- data.tar.gz: 2fa7cbc313adf72d5a14e4bdf896f20e33d63385dcc454fa1c489bd618e8295c2fdcd8f2d387c9f4231f264ceffc27de7cc4566302b6962b7301390dfe5c8c6d
6
+ metadata.gz: ef5817e2e12c6face712d99c2a5a159af6c4c1444b23206ec71b2b17d1990cd8a427710bc51f3e28e70c982da391dc9a53cf6ddcc8733c1e3b7eb5de2736d152
7
+ data.tar.gz: e90dd7e036b37f510e96558ed8c9f8ba7ea81cf467f8ed3e3511072ae9474012d9a1097a8afa5e90379541340c6b536c5ed0bffdb24905611e891b62faf00a1b
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+ set -xv
5
+
6
+ target="$(dirname $0)/../vendor/xgboost"
7
+ mkdir -p "$target"
8
+ target=$(cd "$target"; pwd -P)
9
+ cd "$target"
10
+
11
+ if [ ! -d .git ]; then
12
+ git clone --recurse-submodules https://github.com/dmlc/xgboost .
13
+ else
14
+ git fetch --recurse-submodules
15
+ fi
16
+
17
+ if [[ -z "$1" ]]; then
18
+ git checkout origin/master
19
+ git submodule update --remote
20
+ else
21
+ git checkout "$1"
22
+ fi
23
+
24
+ if [[ "$OSTYPE" == darwin* ]]; then
25
+ cp make/minimum.mk config.mk
26
+ fi
27
+
28
+ make --jobs 4
@@ -1,5 +1,11 @@
1
- require "xgboost/version"
2
- require "xgboost/xgboost"
3
-
4
1
  module Xgboost
2
+ def self.root
3
+ File.expand_path(File.join('..', '..'), __FILE__)
4
+ end
5
+
6
+ # eager require wouldn't allow people to use `rake xgboost:install`
7
+ autoload :FFI, 'xgboost/ffi'
5
8
  end
9
+
10
+ require 'xgboost/booster'
11
+ require 'xgboost/version'
@@ -0,0 +1,54 @@
1
+ require 'ffi'
2
+
3
+ module Xgboost
4
+ class Booster
5
+ def initialize
6
+ @handle = ::FFI::MemoryPointer.new(:pointer)
7
+ FFI.XGBoosterCreate(nil, 0, @handle)
8
+ ObjectSpace.define_finalizer(self, self.class.finalize(handle_pointer))
9
+ end
10
+
11
+ def self.finalize(pointer)
12
+ proc { FFI.XGBoosterFree(pointer) }
13
+ end
14
+
15
+ def load(path)
16
+ FFI.XGBoosterLoadModel(handle_pointer, path)
17
+ end
18
+
19
+ def save(path)
20
+ FFI.XGBoosterSaveModel(handle_pointer, path)
21
+ end
22
+
23
+ def predict(input, missing: Float::NAN)
24
+ raise TypeError unless input.is_a?(Array)
25
+
26
+ unless input_2d = input.first.is_a?(Array)
27
+ input = [input]
28
+ end
29
+
30
+ out_len = ::FFI::MemoryPointer.new(:ulong_long)
31
+ out_result = ::FFI::MemoryPointer.new(:pointer)
32
+
33
+ data = ::FFI::MemoryPointer.new(:float, input.count * input.first.count)
34
+ data.put_array_of_float(0, input.flatten)
35
+
36
+ dmatrix = ::FFI::MemoryPointer.new(:pointer)
37
+ FFI.XGDMatrixCreateFromMat(data, input.count, input.first.count, missing, dmatrix)
38
+
39
+ FFI.XGBoosterPredict(handle_pointer, dmatrix.read_pointer, 0, 0, out_len, out_result)
40
+
41
+ out = out_result.read_pointer.read_array_of_float(out_len.read_ulong_long)
42
+
43
+ input_2d ? out : out.first
44
+ ensure
45
+ FFI.XGDMatrixFree(dmatrix.read_pointer) if dmatrix
46
+ end
47
+
48
+ private
49
+
50
+ def handle_pointer
51
+ @handle.read_pointer
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,60 @@
1
+ require 'ffi'
2
+
3
+ module Xgboost
4
+ module FFI
5
+ extend ::FFI::Library
6
+ lib_name = ::FFI.map_library_name('xgboost')
7
+ lib_path = File.join(Xgboost.root, 'vendor', 'xgboost', 'lib', lib_name)
8
+
9
+ begin
10
+ ffi_lib ['xgboost', lib_path]
11
+ rescue LoadError => e
12
+ abort <<~HELP
13
+
14
+ Cannot load libxgboost! Looked in:
15
+ - /usr/lib
16
+ - /usr/local/lib
17
+ - #{lib_path}
18
+
19
+ You can either:
20
+ 1. (easiest) Run `rake -r xgboost/rake xgboost:install`
21
+
22
+ This will clone and compile the latest version of dmlc/xgboost, as per
23
+ https://github.com/PairOnAir/xgboost-ruby/tree/v#{VERSION}/bin/install_xgboost.
24
+
25
+ 2. (easy, stable) Run `rake -r xgboost/rake xgboost:install[GIT_SHA]`
26
+
27
+ This will clone and compile the given commit SHA1 of dmlc/xgboost. This way you're
28
+ making sure you're locking to the same version of XGBoost across development,
29
+ CI, staging, and production.
30
+
31
+ 3. (full control) Compile xgboost yourself and put it in /usr/local/lib, e.g.:
32
+
33
+ git clone --recurse-submodules https://github.com/dmlc/xgboost.git && cd xgboost && make
34
+ ln -s $(pwd)/lib/#{lib_name} /usr/local/lib
35
+ # or: cp $(pwd)/lib/#{lib_name} /usr/local/lib
36
+
37
+ Depending on your platform, compiling xgboost from source
38
+ will probably be more tricky than that, please consult the
39
+ XGBoost docs for help: http://xgboost.readthedocs.io/en/latest/build.html.
40
+
41
+ Exception details:
42
+ #{e}
43
+
44
+ HELP
45
+ end
46
+
47
+ {
48
+ XGBoosterCreate: %i[ pointer long pointer ],
49
+ XGBoosterFree: %i[ pointer ],
50
+ XGBoosterLoadModel: %i[ pointer string ],
51
+ XGBoosterSaveModel: %i[ pointer string ],
52
+ XGBoosterPredict: %i[ pointer pointer int uint pointer pointer ],
53
+ XGDMatrixCreateFromMat: %i[ pointer long long float pointer ],
54
+ XGDMatrixFree: %i[ pointer ],
55
+ }.each do |function, args|
56
+ attach_function function, args, :int
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,19 @@
1
+ require 'rake'
2
+ require 'xgboost'
3
+
4
+ module Xgboost
5
+ module Rake
6
+ extend ::Rake::DSL
7
+
8
+ def self.add_tasks
9
+ namespace :xgboost do
10
+ desc 'Clones and compiles xgboost'
11
+ task :install, :sha do |_t, args|
12
+ system(File.join(Xgboost.root, 'bin', 'install_xgboost'), args[:sha])
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ Xgboost::Rake.add_tasks
@@ -1,3 +1,3 @@
1
1
  module Xgboost
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xgboost
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harald Wartig
@@ -9,38 +9,38 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-11-03 00:00:00.000000000 Z
12
+ date: 2018-04-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
15
+ name: ffi
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '1.15'
21
- type: :development
20
+ version: '0'
21
+ type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '1.15'
27
+ version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '10.0'
35
- type: :development
34
+ version: '0'
35
+ type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '10.0'
41
+ version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
- name: rake-compiler
43
+ name: bundler
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
@@ -57,41 +57,31 @@ dependencies:
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - "~>"
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: '3.0'
62
+ version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - "~>"
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: '3.0'
69
+ version: '0'
70
70
  description: Ruby binding for XGBoost
71
71
  email:
72
72
  - hwartig@gmail.com
73
73
  - olek.janiszewski@gmail.com
74
74
  executables: []
75
- extensions:
76
- - ext/xgboost/extconf.rb
75
+ extensions: []
77
76
  extra_rdoc_files: []
78
77
  files:
79
- - ".gitignore"
80
- - ".rspec"
81
- - ".travis.yml"
82
- - CODE_OF_CONDUCT.md
83
- - Gemfile
84
78
  - LICENSE.txt
85
- - README.md
86
- - Rakefile
87
- - bin/console
88
- - bin/setup
89
- - ext/xgboost/extconf.rb
90
- - ext/xgboost/xgboost.c
91
- - ext/xgboost/xgboost.h
79
+ - bin/install_xgboost
92
80
  - lib/xgboost.rb
81
+ - lib/xgboost/booster.rb
82
+ - lib/xgboost/ffi.rb
83
+ - lib/xgboost/rake.rb
93
84
  - lib/xgboost/version.rb
94
- - xgboost.gemspec
95
85
  homepage: https://github.com/paironair/xgboost-ruby
96
86
  licenses:
97
87
  - MIT
@@ -112,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
102
  version: '0'
113
103
  requirements: []
114
104
  rubyforge_project:
115
- rubygems_version: 2.6.11
105
+ rubygems_version: 2.6.14
116
106
  signing_key:
117
107
  specification_version: 4
118
108
  summary: Ruby binding for XGBoost
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
- mkmf.log
15
-
16
- # rspec failure tracking
17
- .rspec_status
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.1
5
- before_install: gem install bundler -v 1.15.4
@@ -1,74 +0,0 @@
1
- # Contributor Covenant Code of Conduct
2
-
3
- ## Our Pledge
4
-
5
- In the interest of fostering an open and welcoming environment, we as
6
- contributors and maintainers pledge to making participation in our project and
7
- our community a harassment-free experience for everyone, regardless of age, body
8
- size, disability, ethnicity, gender identity and expression, level of experience,
9
- nationality, personal appearance, race, religion, or sexual identity and
10
- orientation.
11
-
12
- ## Our Standards
13
-
14
- Examples of behavior that contributes to creating a positive environment
15
- include:
16
-
17
- * Using welcoming and inclusive language
18
- * Being respectful of differing viewpoints and experiences
19
- * Gracefully accepting constructive criticism
20
- * Focusing on what is best for the community
21
- * Showing empathy towards other community members
22
-
23
- Examples of unacceptable behavior by participants include:
24
-
25
- * The use of sexualized language or imagery and unwelcome sexual attention or
26
- advances
27
- * Trolling, insulting/derogatory comments, and personal or political attacks
28
- * Public or private harassment
29
- * Publishing others' private information, such as a physical or electronic
30
- address, without explicit permission
31
- * Other conduct which could reasonably be considered inappropriate in a
32
- professional setting
33
-
34
- ## Our Responsibilities
35
-
36
- Project maintainers are responsible for clarifying the standards of acceptable
37
- behavior and are expected to take appropriate and fair corrective action in
38
- response to any instances of unacceptable behavior.
39
-
40
- Project maintainers have the right and responsibility to remove, edit, or
41
- reject comments, commits, code, wiki edits, issues, and other contributions
42
- that are not aligned to this Code of Conduct, or to ban temporarily or
43
- permanently any contributor for other behaviors that they deem inappropriate,
44
- threatening, offensive, or harmful.
45
-
46
- ## Scope
47
-
48
- This Code of Conduct applies both within project spaces and in public spaces
49
- when an individual is representing the project or its community. Examples of
50
- representing a project or community include using an official project e-mail
51
- address, posting via an official social media account, or acting as an appointed
52
- representative at an online or offline event. Representation of a project may be
53
- further defined and clarified by project maintainers.
54
-
55
- ## Enforcement
56
-
57
- Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at hwartig@gmail.com. All
59
- complaints will be reviewed and investigated and will result in a response that
60
- is deemed necessary and appropriate to the circumstances. The project team is
61
- obligated to maintain confidentiality with regard to the reporter of an incident.
62
- Further details of specific enforcement policies may be posted separately.
63
-
64
- Project maintainers who do not follow or enforce the Code of Conduct in good
65
- faith may face temporary or permanent repercussions as determined by other
66
- members of the project's leadership.
67
-
68
- ## Attribution
69
-
70
- This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
- available at [http://contributor-covenant.org/version/1/4][version]
72
-
73
- [homepage]: http://contributor-covenant.org
74
- [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
-
5
- # Specify your gem's dependencies in xgboost.gemspec
6
- gemspec
data/README.md DELETED
@@ -1,43 +0,0 @@
1
- # Xgboost
2
-
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/xgboost`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
6
-
7
- ## Installation
8
-
9
- Add this line to your application's Gemfile:
10
-
11
- ```ruby
12
- gem 'xgboost'
13
- ```
14
-
15
- And then execute:
16
-
17
- $ bundle
18
-
19
- Or install it yourself as:
20
-
21
- $ gem install xgboost
22
-
23
- ## Usage
24
-
25
- TODO: Write usage instructions here
26
-
27
- ## Development
28
-
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
31
-
32
-
33
- ## Contributing
34
-
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/hwartig/xgboost. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
-
37
- ## License
38
-
39
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
40
-
41
- ## Code of Conduct
42
-
43
- Everyone interacting in the Xgboost project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hwartig/xgboost/blob/master/CODE_OF_CONDUCT.md).
data/Rakefile DELETED
@@ -1,14 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- require "rake/extensiontask"
7
-
8
- task :build => :compile
9
-
10
- Rake::ExtensionTask.new("xgboost") do |ext|
11
- ext.lib_dir = "lib/xgboost"
12
- end
13
-
14
- task :default => [:clobber, :compile, :spec]
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "xgboost"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,3 +0,0 @@
1
- require "mkmf"
2
-
3
- create_makefile("xgboost/xgboost")
@@ -1,31 +0,0 @@
1
- #include "xgboost.h"
2
-
3
- VALUE rb_mXgboost;
4
-
5
- VALUE rb_xgboost_this_is_c(VALUE klass)
6
- {
7
- VALUE r_result = rb_int_new(42);
8
- return r_result;
9
- }
10
-
11
- VALUE rb_xgboost_add_in_c(VALUE klass, VALUE op1, VALUE op2)
12
- {
13
- if (!FIXNUM_P(op1))
14
- rb_raise(rb_eArgError, "Argument 1 has to be of type Fixnum");
15
-
16
- if (!FIXNUM_P(op2))
17
- rb_raise(rb_eArgError, "Argument 2 has to be of type Fixnum");
18
-
19
- long op1_long = FIX2LONG(op1);
20
- long op2_long = FIX2LONG(op2);
21
-
22
- return LONG2FIX(op1_long + op2_long);
23
- }
24
-
25
- void
26
- Init_xgboost(void)
27
- {
28
- rb_mXgboost = rb_define_module("Xgboost");
29
- rb_define_module_function(rb_mXgboost, "this_is_c", rb_xgboost_this_is_c, 0);
30
- rb_define_module_function(rb_mXgboost, "add_in_c", rb_xgboost_add_in_c, 2);
31
- }
@@ -1,6 +0,0 @@
1
- #ifndef XGBOOST_H
2
- #define XGBOOST_H 1
3
-
4
- #include "ruby.h"
5
-
6
- #endif /* XGBOOST_H */
@@ -1,27 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "xgboost/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "xgboost"
8
- spec.version = Xgboost::VERSION
9
- spec.authors = ["Harald Wartig", "Olek Janiszewski"]
10
- spec.email = ["hwartig@gmail.com", "olek.janiszewski@gmail.com"]
11
-
12
- spec.summary = %q{Ruby binding for XGBoost}
13
- spec.description = %q{Ruby binding for XGBoost}
14
- spec.homepage = "https://github.com/paironair/xgboost-ruby"
15
- spec.license = "MIT"
16
-
17
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
- f.match(%r{^spec/})
19
- end
20
- spec.require_paths = ["lib"]
21
- spec.extensions = ["ext/xgboost/extconf.rb"]
22
-
23
- spec.add_development_dependency "bundler", "~> 1.15"
24
- spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency "rake-compiler"
26
- spec.add_development_dependency "rspec", "~> 3.0"
27
- end