ruby-lapack 1.4 → 1.4.1a

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,25 @@
1
1
  = What's Ruby-LAPACK
2
2
 
3
3
  Ruby-LAPACK is a Ruby wrapper of LAPACK.
4
- Requires
4
+
5
+ = Requires
5
6
 
6
7
  * Ruby (http://www.ruby-lang.org/)
7
8
  * LAPACK (http://www.netlib.org/lapack/)
8
9
  * NArray (http://narray.rubyforge.org/index.html.en)
9
10
 
10
11
 
12
+ = Install
13
+
14
+ == with gem
15
+ # gem install ruby-lapack
16
+
17
+ == build from source
18
+ % rake
19
+ % rake tests
20
+ % sudo rake install
21
+
22
+
11
23
  = Usage
12
24
 
13
25
  You need require numru/lapack to use Ruby-lapack
data/Rakefile CHANGED
@@ -1,86 +1,89 @@
1
1
  require "rubygems"
2
2
  require "rake/clean"
3
3
  require "rake/gempackagetask"
4
+ require "rake/testtask"
4
5
 
6
+ version = "1.4.1a"
5
7
  target_prefix = "numru"
6
8
 
7
- # get destdir
8
- if i = ARGV.index{|arg| /\ADESTDIR=/ =~ arg}
9
- destdir = ARGV[i].sub(/\ADESTDIR=/,"")
10
- else
11
- destdir = ""
12
- end
13
-
14
- # get sitelibdir
15
- if i = ARGV.index{|arg| /\ASITELIBDIR=/ =~ arg}
16
- libdir = ARGV[i].sub(/\ASITELIBDIR=/,"")
17
- unless File.exist?(libdir) && File.directory?(libdir)
18
- raise "SITELIBDIR is invalid: #{sitelibdir}"
19
- end
20
- else
21
- libdir = Config::CONFIG["sitelibdir"]
22
- end
23
- # get sitearchdir
24
- if i = ARGV.index{|arg| /\ASITEARCHDIR=/ =~ arg}
25
- archdir = ARGV[i].sub(/\ASITEARCHLIBDIR=/,"")
26
- unless File.exist?(archdir) && File.directory?(archdir)
27
- raise "SITEARCHDIR is invalid: #{sitearchdir}"
28
- end
29
- else
30
- archdir = Config::CONFIG["sitearchdir"]
31
- end
32
-
33
-
9
+ # get options
10
+ destdir = ENV["DESTDIR"]
11
+ libdir = ENV["SITELIBDIR"] || Config::CONFIG["sitelibdir"]
12
+ archdir = ENV["SITEARCHDIR"] || Config::CONFIG["sitearchdir"]
13
+ config_opts = ENV["CONFIG_OPTIONS"]
34
14
 
35
15
  NAME = "lapack"
36
16
  LIBS = FileList["lib/#{target_prefix}/*rb"]
37
17
  DLLIB = "ext/#{NAME}.so"
18
+ so_file = File.join("lib", target_prefix, "#{NAME}.so")
38
19
 
39
20
 
40
- task :default => DLLIB
21
+ task :default => so_file
41
22
 
42
- desc "building extensions"
23
+ desc "Building extensions"
24
+ file so_file => DLLIB do
25
+ mkdir_p File.dirname(so_file)
26
+ rm_f so_file
27
+ cp DLLIB, so_file
28
+ end
43
29
  file DLLIB => "ext/Makefile" do
44
30
  system("cd ext; make")
45
31
  end
46
- so_file = File.join("lib", target_prefix, "#{NAME}.so")
47
- file so_file => DLLIB do
48
- mkdir File.dirname(so_file)
49
- cp DLLIB, so_file
32
+ file "ext/Makefile" => "ext/rb_lapack.h" do
33
+ unless system("cd ext; ruby extconf.rb #{config_opts}")
34
+ warn <<-EOL
35
+
36
+ To give options to extconf.rb, set the options to CONFIG_OPTIONS
37
+ e.g.
38
+ % rake CONFIG_OPTIONS="--with-lapack=/opt/lapack"
39
+ EOL
40
+ end
50
41
  end
51
- file "ext/Makefile" do
52
- system("cd ext; ruby extconf.rb")
42
+ file "ext/rb_lapack.h" => "dev/make_csrc.rb" do
43
+ system("ruby dev/make_csrc.rb")
53
44
  end
54
45
 
55
- desc "install files to system"
46
+ desc "Install files to system"
56
47
  task :install => [:install_so, :install_rb]
57
48
 
58
49
  task :install_so => DLLIB do
59
- install DLLIB, File.join(destdir, archdir, target_prefix), 0755
50
+ dst = File.join(destdir, archdir, target_prefix)
51
+ mkdir_p dst
52
+ install DLLIB, dst, :mode => 0755
60
53
  end
61
54
 
62
55
  task :install_rb => LIBS do
63
- LIB.each do |lib|
64
- install lib, File.join(destdir, libdir, target_prefix), 644
56
+ dst = File.join(destdir, libdir, target_prefix)
57
+ mkdir_p dst
58
+ LIBS.each do |lib|
59
+ install lib, dst, :mode => 644
65
60
  end
66
61
  end
67
62
 
68
-
69
63
  CLEAN.include("ext/*.o")
70
- CLOBBER.include("ext/lapack.so")
64
+ CLOBBER.include(DLLIB, so_file)
65
+ CLOBBER.include("ext/Makefile")
71
66
 
72
67
 
73
68
  PKG_FILES = FileList["lib/#{target_prefix}/*rb"]
74
- PKG_FILES.include("ext/*.c", "ext/*h")
69
+ PKG_FILES.include("ext/rb_lapack.h")
70
+ PKG_FILES.include("ext/f2c_minimal.h")
71
+ PKG_FILES.include("ext/*.c")
75
72
  PKG_FILES.include("Rakefile")
76
73
  PKG_FILES.include("COPYING", "GPL", "README.rdoc")
77
74
  PKG_FILES.include("doc/*.html", "samples/**/*rb")
78
75
  PKG_FILES.include("dev/*.rb", "dev/defs/*")
79
76
  TEST_FILES = FileList["tests/**/*.rb"]
80
77
 
78
+ Rake::TestTask.new do |t|
79
+ t.libs << "lib"
80
+ t.libs << "tests"
81
+ t.test_files = TEST_FILES
82
+ end
83
+
81
84
  spec = Gem::Specification.new do |s|
82
85
  s.name = "ruby-lapack"
83
- s.version = "1.4"
86
+ s.version = version
84
87
  s.summary = "A Ruby wrapper of Lapack"
85
88
  s.description = <<EOL
86
89
  Ruby-LAPACK is a Ruby wrapper of Lapack, which is a linear algebra package (http://www.netlib.org/lapack/).
@@ -110,6 +113,7 @@ task :binary_package => binary_pkg
110
113
  file binary_pkg => so_file do
111
114
  files = PKG_FILES.dup
112
115
  files.include so_file
116
+ files.exclude "ext"
113
117
  spec.platform = Gem::Platform::CURRENT
114
118
  spec.files = files
115
119
  spec.extensions = []
@@ -46,7 +46,8 @@
46
46
  - work:
47
47
  :type: real
48
48
  :intent: workspace
49
- :dims: "(lsame_(&job,\"S\")||lsame_(&job,\"B\")) ? MAX(1,6*n) : (lsame_(&job,\"N\")||lsame_(&job,\"P\")) ? 1 : 0"
49
+ :dims:
50
+ - "(lsame_(&job,\"S\")||lsame_(&job,\"B\")) ? MAX(1,6*n) : (lsame_(&job,\"N\")||lsame_(&job,\"P\")) ? 1 : 0"
50
51
  - info:
51
52
  :type: integer
52
53
  :intent: output
@@ -46,7 +46,8 @@
46
46
  - work:
47
47
  :type: real
48
48
  :intent: workspace
49
- :dims: "(lsame_(&job,\"S\")||lsame_(&job,\"B\")) ? MAX(1,6*n) : (lsame_(&job,\"N\")||lsame_(&job,\"P\")) ? 1 : 0"
49
+ :dims:
50
+ - "(lsame_(&job,\"S\")||lsame_(&job,\"B\")) ? MAX(1,6*n) : (lsame_(&job,\"N\")||lsame_(&job,\"P\")) ? 1 : 0"
50
51
  - info:
51
52
  :type: integer
52
53
  :intent: output
@@ -46,7 +46,8 @@
46
46
  - work:
47
47
  :type: doublereal
48
48
  :intent: workspace
49
- :dims: "(lsame_(&job,\"S\")||lsame_(&job,\"B\")) ? MAX(1,6*n) : (lsame_(&job,\"N\")||lsame_(&job,\"P\")) ? 1 : 0"
49
+ :dims:
50
+ - "(lsame_(&job,\"S\")||lsame_(&job,\"B\")) ? MAX(1,6*n) : (lsame_(&job,\"N\")||lsame_(&job,\"P\")) ? 1 : 0"
50
51
  - info:
51
52
  :type: integer
52
53
  :intent: output
@@ -31,73 +31,10 @@ EOF
31
31
  end
32
32
  end
33
33
 
34
- def try_func(func, libs, headers = nil, &b)
35
- headers = cpp_include(headers)
36
- try_link(<<"SRC", libs, &b) or try_link(<<"SRC", libs, &b)
37
- #{COMMON_HEADERS}
38
- #{headers}
39
- /*top*/
40
- int main() { return 0; }
41
- int MAIN__() { return main(); }
42
- int t() { void ((*volatile p)()); p = (void ((*)()))#{func}; return 0; }
43
- SRC
44
- #{headers}
45
- /*top*/
46
- int main() { return 0; }
47
- int MAIN__() { return main(); }
48
- int t() { #{func}(); return 0; }
49
- SRC
50
- end
51
-
52
-
53
- def find_library(lib, func=nil, name=nil)
54
- func = "main" if !func or func.empty?
55
- ldir = with_config(lib+'-lib')
56
- ldirs = ldir ? Array === ldir ? ldir : ldir.split(File::PATH_SEPARATOR) : []
57
- $LIBPATH = ldirs | $LIBPATH
58
- if /\.(a|so)$/ =~ name
59
- libs = $libs
60
- $LIBPATH.each{|path|
61
- f = File.join(path,name)
62
- if File.exist?(f)
63
- libs = f + " " + $libs
64
- break
65
- end
66
- }
67
- else
68
- name = LIBARG%lib
69
- libs = append_library($libs, lib)
70
- end
71
- paths = {}
72
- checking_for "#{func}() in #{name}" do
73
- libpath = $LIBPATH
74
- begin
75
- until r = try_func(func, libs) or paths.empty?
76
- $LIBPATH = libpath | [paths.shift]
77
- end
78
- if r
79
- $libs = libs
80
- libpath = nil
81
- end
82
- ensure
83
- $LIBPATH = libpath if libpath
84
- end
85
- r
86
- end
87
- end
88
-
89
-
90
- unless File.exist?("rb_lapack.c")
91
- print "making c source files\n"
92
- cmd = File.join( File.dirname(__FILE__), "..", "dev", "make_csrc.rb")
93
- unless system("ruby #{cmd} > /dev/null")
94
- raise "error occure in making c source files"
95
- end
96
- end
97
34
 
98
35
 
99
36
  dir_config("lapack")
100
- unless find_library("lapack")
37
+ unless find_library("lapack", nil)
101
38
  library_not_found("lapack",nil)
102
39
 
103
40
  warn "LAPACK will be tried to find"
@@ -126,11 +63,16 @@ end
126
63
 
127
64
  sitearchdir = Config::CONFIG["sitearchdir"]
128
65
  dir_config("narray", sitearchdir, sitearchdir)
129
- unless find_header("narray.h") && have_header("narray_config.h")
130
- header_not_found("narray")
66
+ gem_path = nil
67
+ begin
68
+ require "rubygems"
69
+ if (spec = Gem.source_index.find_name("narray")).any?
70
+ gem_path = spec.last.full_gem_path
71
+ end
72
+ rescue LoadError
131
73
  end
132
- unless find_library("narray", nil, "narray.so")
133
- library_not_found("narray","narray.so")
74
+ unless find_header("narray.h",gem_path) && have_header("narray_config.h")
75
+ header_not_found("narray")
134
76
  end
135
77
 
136
78
  create_makefile("numru/lapack")
@@ -1,4 +1,4 @@
1
- $:.unshift(File.dirname(__FILE__), "..", "lib")
1
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
2
2
  require "test/unit"
3
3
  require "numru/lapack"
4
4
 
@@ -10,7 +10,7 @@ module LapackTest
10
10
  unless delta
11
11
  case actual.typecode
12
12
  when NArray::SFLOAT, NArray::SCOMPLEX
13
- delta = 1.0e-5
13
+ delta = 5.0e-5
14
14
  when NArray::DFLOAT, NArray::DCOMPLEX
15
15
  delta = 1.0e-13
16
16
  when NArray::INT, NArray::LINT
@@ -44,7 +44,7 @@ class GelssTest < Test::Unit::TestCase
44
44
  assert_equal 0, info
45
45
  assert_narray @b_exp[rc], b, 1e-4
46
46
  assert_narray @s_exp[rc], s, 1e-4
47
- assert @rank_exp[rc], rank
47
+ assert_equal @rank_exp[rc], rank
48
48
  end
49
49
 
50
50
  define_method("test_#{method}_inquiring_lwork") do
@@ -56,7 +56,7 @@ class GelssTest < Test::Unit::TestCase
56
56
  assert_equal lwork, get_int(work[0])
57
57
  assert_narray @b_exp[rc], b, 1e-4
58
58
  assert_narray @s_exp[rc], s, 1e-4
59
- assert @rank_exp[rc], rank
59
+ assert_equal @rank_exp[rc], rank
60
60
  end
61
61
 
62
62
  define_method("test_#{method}_inquiring_lwork_oldargstyle") do
@@ -45,7 +45,7 @@ class GelsyTest < Test::Unit::TestCase
45
45
  rank, work, info, a, b, jpvt = NumRu::Lapack.send(method, @a[rc], @b[rc], @jpvt[rc], @rcond)
46
46
  assert_equal 0, info
47
47
  assert_narray @b_exp[rc], b, 1e-4
48
- assert @rank_exp[rc], rank
48
+ assert_equal @rank_exp[rc], rank
49
49
  end
50
50
 
51
51
  define_method("test_#{method}_inquiring_lwork") do
@@ -56,7 +56,7 @@ class GelsyTest < Test::Unit::TestCase
56
56
  assert_equal 0, info
57
57
  assert_equal lwork, get_int(work[0])
58
58
  assert_narray @b_exp[rc], b, 1e-4
59
- assert @rank_exp[rc], rank
59
+ assert_equal @rank_exp[rc], rank
60
60
  end
61
61
 
62
62
  define_method("test_#{method}_inquiring_lwork_oldargstyle") do
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lapack
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease: false
4
+ hash: 3314901
5
+ prerelease: true
6
6
  segments:
7
7
  - 1
8
8
  - 4
9
- version: "1.4"
9
+ - 1a
10
+ version: 1.4.1a
10
11
  platform: ruby
11
12
  authors:
12
13
  - Seiya Nishizawa
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-04-18 00:00:00 +09:00
18
+ date: 2011-04-22 00:00:00 +09:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -43,6 +44,8 @@ extra_rdoc_files: []
43
44
 
44
45
  files:
45
46
  - lib/numru/lapack.rb
47
+ - ext/rb_lapack.h
48
+ - ext/f2c_minimal.h
46
49
  - ext/sstemr.c
47
50
  - ext/ilaenv.c
48
51
  - ext/slaqp2.c
@@ -1674,8 +1677,6 @@ files:
1674
1677
  - ext/dgeqr2.c
1675
1678
  - ext/zpotrs.c
1676
1679
  - ext/cunglq.c
1677
- - ext/f2c_minimal.h
1678
- - ext/rb_lapack.h
1679
1680
  - Rakefile
1680
1681
  - COPYING
1681
1682
  - GPL
@@ -3449,7 +3450,6 @@ files:
3449
3450
  - tests/eig/sb/test_sbev.rb
3450
3451
  - tests/eig/gg/test_ggev.rb
3451
3452
  - tests/eig/gg/test_ggsvd.rb
3452
- - tests/test_all.rb
3453
3453
  - tests/lin/ge/test_gelsy.rb
3454
3454
  - tests/lin/ge/test_gesv.rb
3455
3455
  - tests/lin/ge/test_gelss.rb
@@ -3481,12 +3481,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
3481
3481
  required_rubygems_version: !ruby/object:Gem::Requirement
3482
3482
  none: false
3483
3483
  requirements:
3484
- - - ">="
3484
+ - - ">"
3485
3485
  - !ruby/object:Gem::Version
3486
- hash: 3
3486
+ hash: 25
3487
3487
  segments:
3488
- - 0
3489
- version: "0"
3488
+ - 1
3489
+ - 3
3490
+ - 1
3491
+ version: 1.3.1
3490
3492
  requirements: []
3491
3493
 
3492
3494
  rubyforge_project:
@@ -3501,7 +3503,6 @@ test_files:
3501
3503
  - tests/eig/sb/test_sbev.rb
3502
3504
  - tests/eig/gg/test_ggev.rb
3503
3505
  - tests/eig/gg/test_ggsvd.rb
3504
- - tests/test_all.rb
3505
3506
  - tests/lin/ge/test_gelsy.rb
3506
3507
  - tests/lin/ge/test_gesv.rb
3507
3508
  - tests/lin/ge/test_gelss.rb
@@ -1,7 +0,0 @@
1
- require "test/unit"
2
-
3
- dir = File.dirname(__FILE__)
4
-
5
- Test::Unit::AutoRunner.run(true, File.join(dir, "lin"))
6
-
7
- Test::Unit::AutoRunner.run(true, File.join(dir, "eig"))