numo-narray 0.9.1.5 → 0.9.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -5
- data/Rakefile +4 -63
- data/ext/numo/narray/array.c +19 -26
- data/ext/numo/narray/data.c +2 -8
- data/ext/numo/narray/depend.erb +6 -10
- data/ext/numo/narray/extconf.rb +23 -21
- data/ext/numo/narray/gen/cogen.rb +2 -2
- data/ext/numo/narray/gen/narray_def.rb +1 -1
- data/ext/numo/narray/gen/spec.rb +12 -6
- data/ext/numo/narray/gen/tmpl/accum_binary.c +4 -0
- data/ext/numo/narray/gen/tmpl/alloc_func.c +4 -1
- data/ext/numo/narray/gen/tmpl/allocate.c +1 -0
- data/ext/numo/narray/gen/tmpl/cast.c +7 -0
- data/ext/numo/narray/gen/tmpl/lib.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/allocate.c +1 -0
- data/ext/numo/narray/gen/tmpl_bit/binary.c +6 -0
- data/ext/numo/narray/gen/tmpl_bit/store_bit.c +6 -2
- data/ext/numo/narray/gen/tmpl_bit/unary.c +4 -0
- data/ext/numo/narray/index.c +5 -11
- data/ext/numo/narray/math.c +1 -1
- data/ext/numo/narray/narray.c +108 -11
- data/ext/numo/narray/ndloop.c +3 -3
- data/ext/numo/narray/numo/intern.h +1 -1
- data/ext/numo/narray/numo/narray.h +16 -12
- data/ext/numo/narray/numo/ndloop.h +1 -1
- data/ext/numo/narray/numo/template.h +8 -10
- data/ext/numo/narray/numo/types/complex.h +1 -1
- data/ext/numo/narray/numo/types/complex_macro.h +1 -1
- data/ext/numo/narray/numo/types/float_macro.h +1 -1
- data/ext/numo/narray/numo/types/int16.h +5 -2
- data/ext/numo/narray/numo/types/int32.h +0 -1
- data/ext/numo/narray/numo/types/int64.h +0 -1
- data/ext/numo/narray/numo/types/int8.h +1 -2
- data/ext/numo/narray/numo/types/uint16.h +5 -2
- data/ext/numo/narray/numo/types/uint32.h +0 -1
- data/ext/numo/narray/numo/types/uint64.h +0 -1
- data/ext/numo/narray/numo/types/uint8.h +1 -2
- data/ext/numo/narray/numo/types/xint_macro.h +2 -0
- data/ext/numo/narray/step.c +1 -1
- data/ext/numo/narray/struct.c +2 -2
- data/lib/numo/narray.rb +1 -7
- data/lib/numo/narray/extra.rb +42 -1
- data/numo-narray.gemspec +3 -8
- metadata +14 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a1e49e2dfd16c57254defdd6ccf5548d676f5c7238341fca70f841d14931e30
|
4
|
+
data.tar.gz: c2bdd3b1131d58ab462d1259ccdbff2664040c5cacd4f5ef2fcc314046a78bd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6906c6bff6eac4969dc653c17bbe6cfc7eaffd3415c65e56e2f09bd6575b18f5495eedf2f4baf3062e6501a9b177b88d900aec8c49bdd060495975342b951344
|
7
|
+
data.tar.gz: ae33fa09e06cedc0032c6689e3e8da4a53991deb0c04e8019aeee30c58617af7bd356f916464eb0ece80ea8063ce575e71facc50b1e06108bb45579e5d4e8891
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
# Numo::NArray
|
1
|
+
# Numo::NArray
|
2
2
|
|
3
3
|
[![Binder](http://mybinder.org/badge.svg)](http://mybinder.org/repo/ruby-numo/numo-narray)
|
4
|
-
[![Build Status](https://
|
4
|
+
[![Build Status](https://github.com/ruby-numo/numo-narray/workflows/build/badge.svg)](https://github.com/ruby-numo/numo-narray/actions)
|
5
5
|
|
6
6
|
[GitHub](https://github.com/ruby-numo/numo-narray)
|
7
7
|
| [RubyGems](https://rubygems.org/gems/numo-narray)
|
@@ -18,7 +18,7 @@ All documents are primitive.
|
|
18
18
|
* [Numo::NArray API Doc](http://ruby-numo.github.io/numo-narray/yard/index.html)
|
19
19
|
* [Numo::NArray vs numpy](https://github.com/ruby-numo/numo-narray/wiki/Numo-vs-numpy)
|
20
20
|
* [Numo::NArray vs ndarray](https://github.com/ruby-numo/numo-narray/wiki/Numo-vs-ndarray)
|
21
|
-
* [Numo::NArray Overview](https://github.com/ruby-numo/numo-narray/wiki/Numo::NArray
|
21
|
+
* [Numo::NArray Overview](https://github.com/ruby-numo/numo-narray/wiki/Numo::NArray-Overview-(Japanese)) (in Japanese)
|
22
22
|
|
23
23
|
## Related Projects
|
24
24
|
|
@@ -71,13 +71,15 @@ For more examples, check out this [narray version of 100 numpy exercises](https:
|
|
71
71
|
### Build
|
72
72
|
|
73
73
|
```shell
|
74
|
-
|
74
|
+
git clone https://github.com/ruby-numo/numo-narray
|
75
|
+
cd numo-narray
|
76
|
+
bundle install
|
77
|
+
bundle exec rake compile
|
75
78
|
```
|
76
79
|
|
77
80
|
### Run tests
|
78
81
|
|
79
82
|
```shell
|
80
|
-
bundle install
|
81
83
|
bundle exec rake test
|
82
84
|
```
|
83
85
|
|
data/Rakefile
CHANGED
@@ -1,76 +1,14 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
begin
|
3
2
|
|
4
3
|
task :doc do
|
5
4
|
dir = "ext/numo/narray"
|
6
5
|
src = %w[array.c data.c index.c math.c narray.c rand.c struct.c].
|
7
6
|
map{|s| File.join(dir,s)} +
|
8
|
-
[File.join(dir,"
|
7
|
+
[File.join(dir,"t_*.c"), "lib/numo/narray/extra.rb"]
|
9
8
|
sh "cd ext/numo/narray; ruby extconf.rb; make src"
|
10
9
|
sh "rm -rf yard .yardoc; yard doc -o yard -m markdown -r README.md #{src.join(' ')}"
|
11
10
|
end
|
12
11
|
|
13
|
-
require "rake/extensiontask"
|
14
|
-
require "rake_compiler_dock"
|
15
|
-
require "shellwords"
|
16
|
-
|
17
|
-
spec = Bundler::GemHelper.gemspec
|
18
|
-
|
19
|
-
cross_platforms = ["x86-mingw32", "x64-mingw32"]
|
20
|
-
Rake::ExtensionTask.new("numo/narray", spec) do |ext|
|
21
|
-
ext.cross_compile = true
|
22
|
-
ext.cross_platform = cross_platforms
|
23
|
-
end
|
24
|
-
|
25
|
-
pkg_dir = "pkg"
|
26
|
-
windows_gem_paths = cross_platforms.collect do |platform|
|
27
|
-
File.join(pkg_dir, "#{spec.full_name}-#{platform}.gem")
|
28
|
-
end
|
29
|
-
|
30
|
-
namespace :build do
|
31
|
-
directory pkg_dir
|
32
|
-
|
33
|
-
desc "Build gems for Windows into the pkg directory"
|
34
|
-
task :windows => pkg_dir do
|
35
|
-
build_dir = "tmp/windows"
|
36
|
-
rm_rf build_dir
|
37
|
-
mkdir_p build_dir
|
38
|
-
|
39
|
-
commands = [
|
40
|
-
["git", "clone", "file://#{Dir.pwd}/.git", build_dir],
|
41
|
-
["cd", build_dir],
|
42
|
-
["bundle"],
|
43
|
-
[
|
44
|
-
"rake",
|
45
|
-
"RUBY_CC_VERSION=2.5.0:2.4.0:2.3.0:2.2.2:2.1.6",
|
46
|
-
"cross",
|
47
|
-
"native",
|
48
|
-
"gem",
|
49
|
-
],
|
50
|
-
]
|
51
|
-
raw_commands = commands.collect do |command|
|
52
|
-
Shellwords.join(command)
|
53
|
-
end
|
54
|
-
raw_command_line = raw_commands.join(" && ")
|
55
|
-
|
56
|
-
RakeCompilerDock.sh(raw_command_line)
|
57
|
-
|
58
|
-
cp(Dir.glob("#{build_dir}/#{pkg_dir}/*.gem"),
|
59
|
-
"#{pkg_dir}/")
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
namespace :release do
|
64
|
-
task :windows => "build:windows" do
|
65
|
-
windows_gem_paths.each do |path|
|
66
|
-
ruby("-S", "gem", "push", path)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
rescue LoadError
|
72
|
-
end
|
73
|
-
|
74
12
|
require 'rake/testtask'
|
75
13
|
Rake::TestTask.new(:test) do |t|
|
76
14
|
t.libs << "test"
|
@@ -79,3 +17,6 @@ Rake::TestTask.new(:test) do |t|
|
|
79
17
|
t.warning = false
|
80
18
|
t.test_files = FileList['test/**/*_test.rb']
|
81
19
|
end
|
20
|
+
|
21
|
+
require 'rake/extensiontask'
|
22
|
+
Rake::ExtensionTask.new('numo/narray')
|
data/ext/numo/narray/array.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
array.c
|
3
3
|
Ruby/Numo::NArray - Numerical Array class for Ruby
|
4
|
-
Copyright (C) 1999-
|
4
|
+
Copyright (C) 1999-2020 Masahiro TANAKA
|
5
5
|
*/
|
6
6
|
#include <ruby.h>
|
7
7
|
#include "numo/narray.h"
|
@@ -30,16 +30,16 @@ static ID id_step;
|
|
30
30
|
static ID id_abs;
|
31
31
|
static ID id_cast;
|
32
32
|
static ID id_le;
|
33
|
+
#if SIZEOF_LONG <= 4
|
34
|
+
static ID id_ge;
|
35
|
+
#endif
|
33
36
|
static ID id_Complex;
|
34
|
-
|
37
|
+
static VALUE int32_max = Qnil;
|
38
|
+
static VALUE int32_min = Qnil;
|
35
39
|
|
36
40
|
static VALUE
|
37
41
|
na_object_type(int type, VALUE v)
|
38
42
|
{
|
39
|
-
static VALUE int32_max = Qnil;
|
40
|
-
if (NIL_P(int32_max))
|
41
|
-
int32_max = ULONG2NUM(2147483647);
|
42
|
-
|
43
43
|
switch(TYPE(v)) {
|
44
44
|
|
45
45
|
case T_TRUE:
|
@@ -48,15 +48,15 @@ static VALUE
|
|
48
48
|
return NA_BIT;
|
49
49
|
return type;
|
50
50
|
|
51
|
-
#if SIZEOF_LONG
|
51
|
+
#if SIZEOF_LONG <= 4
|
52
52
|
case T_FIXNUM:
|
53
53
|
if (type<NA_INT32)
|
54
54
|
return NA_INT32;
|
55
55
|
return type;
|
56
56
|
case T_BIGNUM:
|
57
57
|
if (type<NA_INT64) {
|
58
|
-
|
59
|
-
|
58
|
+
if (RTEST(rb_funcall(v,id_le,1,int32_max)) &&
|
59
|
+
RTEST(rb_funcall(v,id_ge,1,int32_min))) {
|
60
60
|
if (type<NA_INT32)
|
61
61
|
return NA_INT32;
|
62
62
|
} else {
|
@@ -64,13 +64,11 @@ static VALUE
|
|
64
64
|
}
|
65
65
|
}
|
66
66
|
return type;
|
67
|
-
|
68
|
-
#elif SIZEOF_LONG == 8
|
67
|
+
#else
|
69
68
|
case T_FIXNUM:
|
70
69
|
if (type<NA_INT64) {
|
71
70
|
long x = NUM2LONG(v);
|
72
|
-
if (x
|
73
|
-
if (x<=2147483647) {
|
71
|
+
if (x<=2147483647L && x>=-2147483648L) {
|
74
72
|
if (type<NA_INT32)
|
75
73
|
return NA_INT32;
|
76
74
|
} else {
|
@@ -82,19 +80,6 @@ static VALUE
|
|
82
80
|
if (type<NA_INT64)
|
83
81
|
return NA_INT64;
|
84
82
|
return type;
|
85
|
-
#else
|
86
|
-
case T_FIXNUM:
|
87
|
-
case T_BIGNUM:
|
88
|
-
if (type<NA_INT64) {
|
89
|
-
v = rb_funcall(v,id_abs,0);
|
90
|
-
if (RTEST(rb_funcall(v,id_le,1,int32_max))) {
|
91
|
-
if (type<NA_INT32)
|
92
|
-
return NA_INT32;
|
93
|
-
} else {
|
94
|
-
return NA_INT64;
|
95
|
-
}
|
96
|
-
}
|
97
|
-
return type;
|
98
83
|
#endif
|
99
84
|
|
100
85
|
case T_FLOAT:
|
@@ -649,5 +634,13 @@ Init_nary_array()
|
|
649
634
|
id_cast = rb_intern("cast");
|
650
635
|
id_abs = rb_intern("abs");
|
651
636
|
id_le = rb_intern("<=");
|
637
|
+
#if SIZEOF_LONG <= 4
|
638
|
+
id_ge = rb_intern(">=");
|
639
|
+
#endif
|
652
640
|
id_Complex = rb_intern("Complex");
|
641
|
+
|
642
|
+
rb_global_variable(&int32_max);
|
643
|
+
int32_max = INT2NUM(2147483647);
|
644
|
+
rb_global_variable(&int32_min);
|
645
|
+
int32_min = INT2NUM(-2147483648);
|
653
646
|
}
|
data/ext/numo/narray/data.c
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
/*
|
2
2
|
data.c
|
3
3
|
Ruby/Numo::NArray - Numerical Array class for Ruby
|
4
|
-
Copyright (C) 1999-
|
4
|
+
Copyright (C) 1999-2020 Masahiro TANAKA
|
5
5
|
*/
|
6
6
|
|
7
7
|
#include <ruby.h>
|
8
8
|
#include "numo/narray.h"
|
9
9
|
#include "numo/template.h"
|
10
10
|
|
11
|
-
static VALUE sym_mulsum;
|
12
11
|
static ID id_mulsum;
|
13
|
-
static ID id_respond_to_p;
|
14
12
|
static ID id_store;
|
15
13
|
static ID id_swap_byte;
|
16
14
|
|
@@ -921,12 +919,10 @@ na_new_dimension_for_dot(VALUE self, int pos, int len, bool transpose)
|
|
921
919
|
static VALUE
|
922
920
|
numo_na_dot(VALUE self, VALUE other)
|
923
921
|
{
|
924
|
-
VALUE test;
|
925
922
|
volatile VALUE a1=self, a2=other;
|
926
923
|
narray_t *na1, *na2;
|
927
924
|
|
928
|
-
|
929
|
-
if (!RTEST(test)) {
|
925
|
+
if (!rb_respond_to(a1, id_mulsum)) {
|
930
926
|
rb_raise(rb_eNoMethodError,"requires mulsum method for dot method");
|
931
927
|
}
|
932
928
|
GetNArray(a1,na1);
|
@@ -983,8 +979,6 @@ Init_nary_data()
|
|
983
979
|
//rb_define_method(cNArray, "dot", numo_na_dot, 1);
|
984
980
|
|
985
981
|
id_mulsum = rb_intern("mulsum");
|
986
|
-
sym_mulsum = ID2SYM(id_mulsum);
|
987
|
-
id_respond_to_p = rb_intern("respond_to?");
|
988
982
|
id_store = rb_intern("store");
|
989
983
|
id_swap_byte = rb_intern("swap_byte");
|
990
984
|
}
|
data/ext/numo/narray/depend.erb
CHANGED
@@ -1,17 +1,13 @@
|
|
1
1
|
TAGSRC = \
|
2
|
-
|
3
|
-
|
4
|
-
*.h \
|
5
|
-
types/*.h \
|
6
|
-
*.c \
|
7
|
-
types/*.c
|
2
|
+
numo/types/*.h \
|
3
|
+
*.c
|
8
4
|
|
9
5
|
tags : TAGS
|
10
6
|
TAGS : $(TAGSRC)
|
11
7
|
etags $(TAGSRC)
|
12
8
|
|
13
9
|
doc :
|
14
|
-
yard doc *.c
|
10
|
+
yard doc *.c
|
15
11
|
|
16
12
|
C_TMPL = <%=Dir.glob("#{__dir__}/gen/tmpl*/*.c").join(" ")%>
|
17
13
|
|
@@ -22,13 +18,13 @@ DEPENDS = $(C_TMPL) <%= __dir__ %>/gen/*.rb
|
|
22
18
|
type_c = []
|
23
19
|
type_rb = Dir.glob("#{__dir__}/gen/def/*.rb")
|
24
20
|
type_rb.each do |s|
|
25
|
-
type_c << c = "
|
21
|
+
type_c << c = "t_"+File.basename(s,".rb")+".c"
|
26
22
|
%>
|
27
23
|
<%=c%>: <%=s%> $(DEPENDS)
|
28
|
-
$(MAKEDIRS) $(@D) types
|
29
24
|
ruby $(COGEN) -l -o $@ <%=s%>
|
30
25
|
<% end %>
|
31
26
|
|
32
27
|
src : <%= type_c.join(" ") %>
|
33
28
|
|
34
|
-
CLEANOBJS = *.o
|
29
|
+
CLEANOBJS = *.o t_*.c *.bak
|
30
|
+
DISTCLEANFILES = depend TAGS
|
data/ext/numo/narray/extconf.rb
CHANGED
@@ -7,7 +7,11 @@ if RUBY_VERSION < "2.1.0"
|
|
7
7
|
exit(1)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
def d(file)
|
11
|
+
File.join(__dir__,file)
|
12
|
+
end
|
13
|
+
|
14
|
+
rm_f d('numo/extconf.h')
|
11
15
|
|
12
16
|
#$CFLAGS="-g3 -O0 -Wall"
|
13
17
|
#$CFLAGS=" $(cflags) -O3 -m64 -msse2 -funroll-loops"
|
@@ -28,20 +32,20 @@ step
|
|
28
32
|
index
|
29
33
|
ndloop
|
30
34
|
data
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
35
|
+
t_bit
|
36
|
+
t_int8
|
37
|
+
t_int16
|
38
|
+
t_int32
|
39
|
+
t_int64
|
40
|
+
t_uint8
|
41
|
+
t_uint16
|
42
|
+
t_uint32
|
43
|
+
t_uint64
|
44
|
+
t_sfloat
|
45
|
+
t_dfloat
|
46
|
+
t_scomplex
|
47
|
+
t_dcomplex
|
48
|
+
t_robject
|
45
49
|
math
|
46
50
|
SFMT
|
47
51
|
struct
|
@@ -89,14 +93,12 @@ have_var("rb_cComplex")
|
|
89
93
|
|
90
94
|
$objs = srcs.collect{|i| i+".o"}
|
91
95
|
|
92
|
-
create_header('numo/extconf.h')
|
96
|
+
create_header d('numo/extconf.h')
|
93
97
|
|
94
|
-
|
95
|
-
File.open(
|
96
|
-
depend_erb_path = File.join(__dir__, "depend.erb")
|
97
|
-
File.open(depend_erb_path, "r") do |depend_erb|
|
98
|
+
File.open(d('depend'), "w") do |depend|
|
99
|
+
File.open(d('depend.erb'), "r") do |depend_erb|
|
98
100
|
erb = ERB.new(depend_erb.read)
|
99
|
-
erb.filename =
|
101
|
+
erb.filename = d('depend.erb')
|
100
102
|
depend.print(erb.result)
|
101
103
|
end
|
102
104
|
end
|
@@ -50,7 +50,7 @@ code = DefLib.new do
|
|
50
50
|
set file_name: $output||""
|
51
51
|
set include_files: ["numo/types/#{type_name}.h"]
|
52
52
|
set lib_name: "numo_"+type_name
|
53
|
-
|
53
|
+
|
54
54
|
if (::RbConfig::CONFIG['target_cpu'] == 'x86_64') or (::RbConfig::CONFIG['target_cpu'] == 'x64')
|
55
55
|
set is_simd: true
|
56
56
|
else
|
@@ -66,7 +66,7 @@ code = DefLib.new do
|
|
66
66
|
end.result
|
67
67
|
|
68
68
|
if $output
|
69
|
-
|
69
|
+
File.write($output, code)
|
70
70
|
else
|
71
71
|
$stdout.write(code)
|
72
72
|
end
|
data/ext/numo/narray/gen/spec.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
def_id "cast"
|
2
|
-
def_id "eq"
|
3
|
-
def_id "ne"
|
4
|
-
def_id "pow"
|
5
2
|
def_id "mulsum"
|
3
|
+
def_id "to_a"
|
6
4
|
if is_complex
|
7
5
|
def_id "real"
|
8
6
|
def_id "imag"
|
@@ -32,7 +30,6 @@ if is_object
|
|
32
30
|
def_id "bit_xor"
|
33
31
|
def_id "bit_not"
|
34
32
|
def_id "abs"
|
35
|
-
def_id "minus"
|
36
33
|
def_id "reciprocal"
|
37
34
|
def_id "square"
|
38
35
|
def_id "floor"
|
@@ -42,6 +39,7 @@ if is_object
|
|
42
39
|
def_id "nan?"
|
43
40
|
def_id "infinite?"
|
44
41
|
def_id "finite?"
|
42
|
+
def_id "-@","minus"
|
45
43
|
def_id "==","eq"
|
46
44
|
def_id "!=","ne"
|
47
45
|
def_id ">" ,"gt"
|
@@ -49,6 +47,9 @@ if is_object
|
|
49
47
|
def_id "<" ,"lt"
|
50
48
|
def_id "<=","le"
|
51
49
|
def_id "<=>","ufo"
|
50
|
+
else
|
51
|
+
def_id "eq"
|
52
|
+
def_id "ne"
|
52
53
|
end
|
53
54
|
|
54
55
|
if is_int && !is_object
|
@@ -179,7 +180,12 @@ if !is_complex
|
|
179
180
|
binary2 "divmod"
|
180
181
|
end
|
181
182
|
|
182
|
-
|
183
|
+
|
184
|
+
if !is_bit
|
185
|
+
pow
|
186
|
+
def_id "**","pow"
|
187
|
+
def_alias "pow","**"
|
188
|
+
end
|
183
189
|
|
184
190
|
unary "minus", "-@"
|
185
191
|
unary "reciprocal"
|
@@ -273,7 +279,7 @@ if is_float
|
|
273
279
|
cond_unary "isfinite"
|
274
280
|
end
|
275
281
|
|
276
|
-
if is_int
|
282
|
+
if is_int && !is_object
|
277
283
|
if is_unsigned
|
278
284
|
accum "sum","u_int64_t","numo_cUInt64"
|
279
285
|
accum "prod","u_int64_t","numo_cUInt64"
|