numo-narray 0.9.1.5 → 0.9.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 +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
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
template.h
|
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
|
#ifndef TEMPLATE_H
|
7
7
|
#define TEMPLATE_H
|
@@ -36,19 +36,17 @@
|
|
36
36
|
|
37
37
|
#define INIT_PTR_BIT( lp, i, ad, ps, st ) \
|
38
38
|
{ \
|
39
|
-
ps = ((lp)->args[i].iter[0]).pos;
|
40
|
-
ad = (BIT_DIGIT*)(((lp)->args[i]).ptr)
|
41
|
-
|
42
|
-
st = ((lp)->args[i].iter[0]).step; \
|
39
|
+
ps = ((lp)->args[i].iter[0]).pos; \
|
40
|
+
ad = (BIT_DIGIT*)(((lp)->args[i]).ptr); \
|
41
|
+
st = ((lp)->args[i].iter[0]).step; \
|
43
42
|
}
|
44
43
|
|
45
44
|
#define INIT_PTR_BIT_IDX( lp, i, ad, ps, st, id ) \
|
46
45
|
{ \
|
47
|
-
ps = ((lp)->args[i].iter[0]).pos;
|
48
|
-
ad = (BIT_DIGIT*)(((lp)->args[i]).ptr)
|
49
|
-
|
50
|
-
|
51
|
-
id = ((lp)->args[i].iter[0]).idx; \
|
46
|
+
ps = ((lp)->args[i].iter[0]).pos; \
|
47
|
+
ad = (BIT_DIGIT*)(((lp)->args[i]).ptr); \
|
48
|
+
st = ((lp)->args[i].iter[0]).step; \
|
49
|
+
id = ((lp)->args[i].iter[0]).idx; \
|
52
50
|
}
|
53
51
|
|
54
52
|
#define GET_DATA( ptr, type, val ) \
|
@@ -117,7 +117,7 @@ static inline dtype c_from_dcomplex(dcomplex x) {
|
|
117
117
|
#define m_acosh(x) c_acosh(x)
|
118
118
|
#define m_atanh(x) c_atanh(x)
|
119
119
|
#define m_hypot(x,y) c_hypot(x,y)
|
120
|
-
#define m_sinc(x) c_div(c_sin(x),x)
|
120
|
+
#define m_sinc(x) ((REAL(x)==0 && IMAG(x)==0) ? (c_new(1,0)):(c_div(c_sin(x),x)))
|
121
121
|
|
122
122
|
#define m_sum_init INT2FIX(0)
|
123
123
|
#define m_mulsum_init INT2FIX(0)
|
@@ -110,7 +110,7 @@ extern double pow(double, double);
|
|
110
110
|
#define m_atanh(x) atanh(x)
|
111
111
|
#define m_atan2(x,y) atan2(x,y)
|
112
112
|
#define m_hypot(x,y) hypot(x,y)
|
113
|
-
#define m_sinc(x) (sin(x)/(x))
|
113
|
+
#define m_sinc(x) (((x)==0) ? 1.0:(sin(x)/(x)))
|
114
114
|
|
115
115
|
#define m_erf(x) erf(x)
|
116
116
|
#define m_erfc(x) erfc(x)
|
@@ -4,8 +4,11 @@ typedef int16_t rtype;
|
|
4
4
|
#define cRT cT
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2INT(x))
|
7
|
-
#
|
8
|
-
#define
|
7
|
+
#if SIZEOF_INT > 2
|
8
|
+
#define m_data_to_num(x) INT2FIX(x)
|
9
|
+
#else
|
10
|
+
#define m_data_to_num(x) INT2NUM(x)
|
11
|
+
#endif
|
9
12
|
#define m_sprintf(s,x) sprintf(s,"%d",(int)(x))
|
10
13
|
|
11
14
|
#ifndef INT16_MIN
|
@@ -4,8 +4,7 @@ typedef int8_t rtype;
|
|
4
4
|
#define cRT cT
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2INT(x))
|
7
|
-
#define m_data_to_num(x)
|
8
|
-
#define m_extract(x) INT2NUM((int)*(dtype*)(x))
|
7
|
+
#define m_data_to_num(x) INT2FIX(x)
|
9
8
|
#define m_sprintf(s,x) sprintf(s,"%d",(int)(x))
|
10
9
|
|
11
10
|
#ifndef INT8_MIN
|
@@ -4,8 +4,11 @@ typedef u_int16_t rtype;
|
|
4
4
|
#define cRT cT
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2UINT(x))
|
7
|
-
#
|
8
|
-
#define
|
7
|
+
#if SIZEOF_INT > 2
|
8
|
+
#define m_data_to_num(x) INT2FIX(x)
|
9
|
+
#else
|
10
|
+
#define m_data_to_num(x) UINT2NUM(x)
|
11
|
+
#endif
|
9
12
|
#define m_sprintf(s,x) sprintf(s,"%u",(unsigned int)(x))
|
10
13
|
|
11
14
|
#ifndef UINT16_MAX
|
@@ -5,7 +5,6 @@ typedef u_int32_t rtype;
|
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2UINT32(x))
|
7
7
|
#define m_data_to_num(x) UINT322NUM((u_int32_t)(x))
|
8
|
-
#define m_extract(x) UINT322NUM((u_int32_t)*(dtype*)(x))
|
9
8
|
#define m_sprintf(s,x) sprintf(s,"%"PRIu32,(u_int32_t)(x))
|
10
9
|
|
11
10
|
#ifndef UINT32_MAX
|
@@ -5,7 +5,6 @@ typedef u_int64_t rtype;
|
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2UINT64(x))
|
7
7
|
#define m_data_to_num(x) UINT642NUM((u_int64_t)(x))
|
8
|
-
#define m_extract(x) UINT642NUM((u_int64_t)*(dtype*)(x))
|
9
8
|
#define m_sprintf(s,x) sprintf(s,"%"PRIu64,(u_int64_t)(x))
|
10
9
|
|
11
10
|
#ifndef UINT64_MAX
|
@@ -4,8 +4,7 @@ typedef u_int8_t rtype;
|
|
4
4
|
#define cRT cT
|
5
5
|
|
6
6
|
#define m_num_to_data(x) ((dtype)NUM2UINT(x))
|
7
|
-
#define m_data_to_num(x)
|
8
|
-
#define m_extract(x) UINT2NUM((unsigned int)*(dtype*)(x))
|
7
|
+
#define m_data_to_num(x) INT2FIX(x)
|
9
8
|
#define m_sprintf(s,x) sprintf(s,"%u",(unsigned int)(x))
|
10
9
|
|
11
10
|
#ifndef UINT8_MAX
|
data/ext/numo/narray/step.c
CHANGED
data/ext/numo/narray/struct.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
strut.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"
|
@@ -813,7 +813,7 @@ nst_s_add_type(int argc, VALUE *argv, VALUE mod)
|
|
813
813
|
|
814
814
|
#define NST_TYPEDEF(tpname,tpclass) \
|
815
815
|
static VALUE \
|
816
|
-
nst_s_##tpname(
|
816
|
+
nst_s_##tpname(int argc, VALUE *argv, VALUE mod) \
|
817
817
|
{ nstruct_add_type(tpclass,argc,argv,mod); \
|
818
818
|
return Qnil; \
|
819
819
|
}
|
data/lib/numo/narray.rb
CHANGED
data/lib/numo/narray/extra.rb
CHANGED
@@ -106,7 +106,19 @@ module Numo
|
|
106
106
|
|
107
107
|
# Convert the argument to an narray if not an narray.
|
108
108
|
def self.cast(a)
|
109
|
-
|
109
|
+
case a
|
110
|
+
when NArray
|
111
|
+
a
|
112
|
+
when Array,Numeric
|
113
|
+
NArray.array_type(a).cast(a)
|
114
|
+
else
|
115
|
+
if a.respond_to?(:to_a)
|
116
|
+
a = a.to_a
|
117
|
+
NArray.array_type(a).cast(a)
|
118
|
+
else
|
119
|
+
raise TypeError,"invalid type for NArray"
|
120
|
+
end
|
121
|
+
end
|
110
122
|
end
|
111
123
|
|
112
124
|
def self.asarray(a)
|
@@ -1171,6 +1183,35 @@ module Numo
|
|
1171
1183
|
end
|
1172
1184
|
end
|
1173
1185
|
|
1186
|
+
# Percentile
|
1187
|
+
#
|
1188
|
+
# @param q [Numo::NArray]
|
1189
|
+
# @param axis [Integer] applied axis
|
1190
|
+
# @return [Numo::NArray] return percentile
|
1191
|
+
def percentile(q, axis: nil)
|
1192
|
+
raise ArgumentError, "q is out of range" if q < 0 || q > 100
|
1193
|
+
|
1194
|
+
x = self
|
1195
|
+
unless axis
|
1196
|
+
axis = 0
|
1197
|
+
x = x.flatten
|
1198
|
+
end
|
1199
|
+
|
1200
|
+
sorted = x.sort(axis: axis)
|
1201
|
+
x = q / 100.0 * (sorted.shape[axis] - 1)
|
1202
|
+
r = x % 1
|
1203
|
+
i = x.floor
|
1204
|
+
refs = [true] * sorted.ndim
|
1205
|
+
refs[axis] = i
|
1206
|
+
if i == sorted.shape[axis] - 1
|
1207
|
+
sorted[*refs]
|
1208
|
+
else
|
1209
|
+
refs_upper = refs.dup
|
1210
|
+
refs_upper[axis] = i + 1
|
1211
|
+
sorted[*refs] + r * (sorted[*refs_upper] - sorted[*refs])
|
1212
|
+
end
|
1213
|
+
end
|
1214
|
+
|
1174
1215
|
# Kronecker product of two arrays.
|
1175
1216
|
#
|
1176
1217
|
# kron(a,b)[k_0, k_1, ...] = a[i_0, i_1, ...] * b[j_0, j_1, ...]
|
data/numo-narray.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.summary = %q{alpha release of Numo::NArray - New NArray class library in Ruby/Numo (NUmerical MOdule)}
|
21
21
|
spec.homepage = "https://github.com/ruby-numo/numo-narray"
|
22
22
|
spec.license = "BSD-3-Clause"
|
23
|
-
spec.required_ruby_version = '
|
23
|
+
spec.required_ruby_version = '>= 2.2'
|
24
24
|
|
25
25
|
spec.files = `git ls-files Gemfile README.md Rakefile lib ext numo-narray.gemspec spec`.split($/)
|
26
26
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
@@ -33,12 +33,7 @@ Gem::Specification.new do |spec|
|
|
33
33
|
else
|
34
34
|
spec.add_development_dependency "bundler", "~> 2.0"
|
35
35
|
end
|
36
|
-
|
37
|
-
|
38
|
-
else
|
39
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
40
|
-
end
|
36
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
37
|
+
spec.add_development_dependency "rake-compiler", "~> 1.1"
|
41
38
|
spec.add_development_dependency "test-unit", "~> 3.0"
|
42
|
-
spec.add_development_dependency 'rake-compiler', "~> 1.0", ">= 1.0.1"
|
43
|
-
spec.add_development_dependency "rake-compiler-dock", "~> 0.0"
|
44
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: numo-narray
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro TANAKA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,64 +28,44 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '10.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: test-unit
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
31
|
+
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
33
|
+
version: 12.3.3
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- - "
|
38
|
+
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 12.3.3
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rake-compiler
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: 1.0.1
|
47
|
+
version: '1.1'
|
65
48
|
type: :development
|
66
49
|
prerelease: false
|
67
50
|
version_requirements: !ruby/object:Gem::Requirement
|
68
51
|
requirements:
|
69
52
|
- - "~>"
|
70
53
|
- !ruby/object:Gem::Version
|
71
|
-
version: '1.
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: 1.0.1
|
54
|
+
version: '1.1'
|
75
55
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
56
|
+
name: test-unit
|
77
57
|
requirement: !ruby/object:Gem::Requirement
|
78
58
|
requirements:
|
79
59
|
- - "~>"
|
80
60
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
61
|
+
version: '3.0'
|
82
62
|
type: :development
|
83
63
|
prerelease: false
|
84
64
|
version_requirements: !ruby/object:Gem::Requirement
|
85
65
|
requirements:
|
86
66
|
- - "~>"
|
87
67
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
68
|
+
version: '3.0'
|
89
69
|
description: Numo::NArray - New NArray class library in Ruby/Numo.
|
90
70
|
email:
|
91
71
|
- masa16.tanaka@gmail.com
|
@@ -256,16 +236,16 @@ require_paths:
|
|
256
236
|
- lib
|
257
237
|
required_ruby_version: !ruby/object:Gem::Requirement
|
258
238
|
requirements:
|
259
|
-
- - "
|
239
|
+
- - ">="
|
260
240
|
- !ruby/object:Gem::Version
|
261
|
-
version: '2.
|
241
|
+
version: '2.2'
|
262
242
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
263
243
|
requirements:
|
264
244
|
- - ">="
|
265
245
|
- !ruby/object:Gem::Version
|
266
246
|
version: '0'
|
267
247
|
requirements: []
|
268
|
-
rubygems_version: 3.
|
248
|
+
rubygems_version: 3.2.3
|
269
249
|
signing_key:
|
270
250
|
specification_version: 4
|
271
251
|
summary: alpha release of Numo::NArray - New NArray class library in Ruby/Numo (NUmerical
|