numo-narray 0.9.1.0 → 0.9.1.1
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 +34 -12
- data/Rakefile +8 -0
- data/ext/numo/narray/array.c +2 -1
- data/ext/numo/narray/gen/cogen.rb +5 -2
- data/ext/numo/narray/gen/erbln.rb +132 -0
- data/ext/numo/narray/gen/erbpp2.rb +21 -2
- data/ext/numo/narray/gen/narray_def.rb +1 -1
- data/ext/numo/narray/gen/spec.rb +5 -0
- data/ext/numo/narray/gen/tmpl/each_with_index.c +3 -2
- data/ext/numo/narray/gen/tmpl/ewcomp.c +64 -0
- data/ext/numo/narray/gen/tmpl/map_with_index.c +3 -2
- data/ext/numo/narray/ndloop.c +9 -15
- data/ext/numo/narray/numo/narray.h +2 -2
- data/ext/numo/narray/numo/types/real_accum.h +45 -0
- data/ext/numo/narray/numo/types/xint_macro.h +16 -0
- data/numo-narray.gemspec +2 -2
- metadata +11 -16
- data/lib/erbpp.rb +0 -294
- data/lib/erbpp/line_number.rb +0 -133
- data/lib/erbpp/narray_def.rb +0 -381
- data/spec/bit_spec.rb +0 -93
- data/spec/narray_spec.rb +0 -252
@@ -439,3 +439,48 @@ static inline dtype f_ptp(size_t n, char *p, ssize_t stride)
|
|
439
439
|
f_minmax(n,p,stride,&min,&max);
|
440
440
|
return m_sub(max,min);
|
441
441
|
}
|
442
|
+
|
443
|
+
|
444
|
+
static inline dtype f_maximum(dtype x, dtype y)
|
445
|
+
{
|
446
|
+
if (m_ge(x,y)) {
|
447
|
+
return x;
|
448
|
+
}
|
449
|
+
if (not_nan(y)) {
|
450
|
+
return y;
|
451
|
+
}
|
452
|
+
return x;
|
453
|
+
}
|
454
|
+
|
455
|
+
static inline dtype f_maximum_nan(dtype x, dtype y)
|
456
|
+
{
|
457
|
+
if (m_ge(x,y)) {
|
458
|
+
return x;
|
459
|
+
}
|
460
|
+
if (!not_nan(x)) {
|
461
|
+
return x;
|
462
|
+
}
|
463
|
+
return y;
|
464
|
+
}
|
465
|
+
|
466
|
+
static inline dtype f_minimum(dtype x, dtype y)
|
467
|
+
{
|
468
|
+
if (m_le(x,y)) {
|
469
|
+
return x;
|
470
|
+
}
|
471
|
+
if (not_nan(y)) {
|
472
|
+
return y;
|
473
|
+
}
|
474
|
+
return x;
|
475
|
+
}
|
476
|
+
|
477
|
+
static inline dtype f_minimum_nan(dtype x, dtype y)
|
478
|
+
{
|
479
|
+
if (m_le(x,y)) {
|
480
|
+
return x;
|
481
|
+
}
|
482
|
+
if (!not_nan(x)) {
|
483
|
+
return x;
|
484
|
+
}
|
485
|
+
return y;
|
486
|
+
}
|
@@ -171,3 +171,19 @@ static inline double f_seq(double x, double y, double c)
|
|
171
171
|
{
|
172
172
|
return x + y * c;
|
173
173
|
}
|
174
|
+
|
175
|
+
static inline dtype f_maximum(dtype x, dtype y)
|
176
|
+
{
|
177
|
+
if (m_ge(x,y)) {
|
178
|
+
return x;
|
179
|
+
}
|
180
|
+
return y;
|
181
|
+
}
|
182
|
+
|
183
|
+
static inline dtype f_minimum(dtype x, dtype y)
|
184
|
+
{
|
185
|
+
if (m_le(x,y)) {
|
186
|
+
return x;
|
187
|
+
}
|
188
|
+
return y;
|
189
|
+
}
|
data/numo-narray.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.email = ["masa16.tanaka@gmail.com"]
|
19
19
|
spec.description = %q{Numo::NArray - New NArray class library in Ruby/Numo.}
|
20
20
|
spec.summary = %q{alpha release of Numo::NArray - New NArray class library in Ruby/Numo (NUmerical MOdule)}
|
21
|
-
spec.homepage = "https://github.com/ruby-numo/narray"
|
21
|
+
spec.homepage = "https://github.com/ruby-numo/numo-narray"
|
22
22
|
spec.license = "BSD-3-Clause"
|
23
23
|
spec.required_ruby_version = '~> 2.1'
|
24
24
|
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
|
31
31
|
spec.add_development_dependency "bundler", "~> 1.3"
|
32
32
|
spec.add_development_dependency "rake", "~> 0"
|
33
|
-
spec.add_development_dependency "
|
33
|
+
spec.add_development_dependency "test-unit"
|
34
34
|
spec.add_development_dependency 'rake-compiler', "~> 1.0", ">= 1.0.1"
|
35
35
|
spec.add_development_dependency "rake-compiler-dock", "~> 0"
|
36
36
|
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.1.
|
4
|
+
version: 0.9.1.1
|
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: 2018-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: test-unit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake-compiler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,6 +120,7 @@ files:
|
|
120
120
|
- ext/numo/narray/gen/def/uint32.rb
|
121
121
|
- ext/numo/narray/gen/def/uint64.rb
|
122
122
|
- ext/numo/narray/gen/def/uint8.rb
|
123
|
+
- ext/numo/narray/gen/erbln.rb
|
123
124
|
- ext/numo/narray/gen/erbpp2.rb
|
124
125
|
- ext/numo/narray/gen/narray_def.rb
|
125
126
|
- ext/numo/narray/gen/spec.rb
|
@@ -144,6 +145,7 @@ files:
|
|
144
145
|
- ext/numo/narray/gen/tmpl/cum.c
|
145
146
|
- ext/numo/narray/gen/tmpl/each.c
|
146
147
|
- ext/numo/narray/gen/tmpl/each_with_index.c
|
148
|
+
- ext/numo/narray/gen/tmpl/ewcomp.c
|
147
149
|
- ext/numo/narray/gen/tmpl/extract.c
|
148
150
|
- ext/numo/narray/gen/tmpl/extract_data.c
|
149
151
|
- ext/numo/narray/gen/tmpl/eye.c
|
@@ -239,15 +241,10 @@ files:
|
|
239
241
|
- ext/numo/narray/rand.c
|
240
242
|
- ext/numo/narray/step.c
|
241
243
|
- ext/numo/narray/struct.c
|
242
|
-
- lib/erbpp.rb
|
243
|
-
- lib/erbpp/line_number.rb
|
244
|
-
- lib/erbpp/narray_def.rb
|
245
244
|
- lib/numo/narray.rb
|
246
245
|
- lib/numo/narray/extra.rb
|
247
246
|
- numo-narray.gemspec
|
248
|
-
|
249
|
-
- spec/narray_spec.rb
|
250
|
-
homepage: https://github.com/ruby-numo/narray
|
247
|
+
homepage: https://github.com/ruby-numo/numo-narray
|
251
248
|
licenses:
|
252
249
|
- BSD-3-Clause
|
253
250
|
metadata: {}
|
@@ -272,6 +269,4 @@ signing_key:
|
|
272
269
|
specification_version: 4
|
273
270
|
summary: alpha release of Numo::NArray - New NArray class library in Ruby/Numo (NUmerical
|
274
271
|
MOdule)
|
275
|
-
test_files:
|
276
|
-
- spec/bit_spec.rb
|
277
|
-
- spec/narray_spec.rb
|
272
|
+
test_files: []
|
data/lib/erbpp.rb
DELETED
@@ -1,294 +0,0 @@
|
|
1
|
-
require "erb"
|
2
|
-
|
3
|
-
class ErbPP
|
4
|
-
ATTRS = []
|
5
|
-
|
6
|
-
class ParamNotSetError < StandardError; end
|
7
|
-
|
8
|
-
def self.define_attrs(attrs)
|
9
|
-
attrs.each do |attr|
|
10
|
-
ivar = ("@"+attr).to_sym
|
11
|
-
define_method(attr){|*a| attr_method(ivar,*a)}
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def attr_method(ivar,arg=nil)
|
16
|
-
if arg.nil?
|
17
|
-
instance_variable_get(ivar)
|
18
|
-
else
|
19
|
-
instance_variable_set(ivar,arg)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def initialize(parent,erb_path,opts={})
|
24
|
-
parents.push(parent) if parent
|
25
|
-
@erb_path = erb_path
|
26
|
-
@tmpl = @erb_path
|
27
|
-
|
28
|
-
@opts = opts
|
29
|
-
if @opts.class != Hash
|
30
|
-
raise ArgumentError, "option is not Hash"
|
31
|
-
end
|
32
|
-
|
33
|
-
@opts.each do |k,v|
|
34
|
-
ivar = ("@"+k.to_s).to_sym
|
35
|
-
instance_variable_set(ivar,v)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def load_erb
|
40
|
-
safe_level = nil
|
41
|
-
trim_mode = '%<>'
|
42
|
-
@erb = ERB.new(File.read(@erb_path),safe_level,trim_mode)
|
43
|
-
@erb.filename = @erb_path
|
44
|
-
end
|
45
|
-
|
46
|
-
def parents
|
47
|
-
@parents ||= []
|
48
|
-
end
|
49
|
-
|
50
|
-
def search_method_in_parents(_meth_id)
|
51
|
-
parents.each do |x|
|
52
|
-
if x.has_attr? _meth_id
|
53
|
-
return x
|
54
|
-
end
|
55
|
-
end
|
56
|
-
parents.each do |x|
|
57
|
-
if f = x.search_method_in_parents(_meth_id)
|
58
|
-
return f
|
59
|
-
end
|
60
|
-
end
|
61
|
-
nil
|
62
|
-
end
|
63
|
-
|
64
|
-
def attrs
|
65
|
-
self.class::ATTRS
|
66
|
-
end
|
67
|
-
|
68
|
-
def has_attr?(_meth_id)
|
69
|
-
respond_to?(_meth_id) or attrs.include?(_meth_id.to_s)
|
70
|
-
end
|
71
|
-
|
72
|
-
def check_params(*params)
|
73
|
-
params.each do |x|
|
74
|
-
val = send(x)
|
75
|
-
if !val # || val.empty?
|
76
|
-
raise ParamNotSetError,"parameter #{x.to_s} is not set"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
alias method_missing_alias method_missing
|
82
|
-
|
83
|
-
def method_missing(_meth_id, *args, &block)
|
84
|
-
ivar = "@"+_meth_id.to_s
|
85
|
-
if args.empty? and instance_variable_defined?(ivar)
|
86
|
-
parm = instance_variable_get(ivar)
|
87
|
-
if parm.nil?
|
88
|
-
raise ParamNotSetError,"parameter #{_meth_id.to_s} is not set"
|
89
|
-
end
|
90
|
-
parm
|
91
|
-
elsif args.size == 1 and attrs.include?(_meth_id.to_s)
|
92
|
-
instance_variable_set(ivar,args.first)
|
93
|
-
elsif x = search_method_in_parents(_meth_id)
|
94
|
-
x.send(_meth_id, *args, &block)
|
95
|
-
else
|
96
|
-
method_missing_alias(_meth_id, *args)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def run
|
101
|
-
load_erb unless @erb
|
102
|
-
@erb.run(binding)
|
103
|
-
end
|
104
|
-
|
105
|
-
def result
|
106
|
-
load_erb unless @erb
|
107
|
-
@erb.result(binding)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
# ----------------------------------------------------------------------
|
112
|
-
|
113
|
-
class IdVar
|
114
|
-
DEFS = []
|
115
|
-
|
116
|
-
def id_decl
|
117
|
-
"static ID #{@id_var};"
|
118
|
-
end
|
119
|
-
|
120
|
-
def id_assign
|
121
|
-
"#{@id_var} = rb_intern(\"#{@name}\");"
|
122
|
-
end
|
123
|
-
|
124
|
-
def initialize(parent,name,var=nil)
|
125
|
-
@name = name
|
126
|
-
var = name if var.nil?
|
127
|
-
@id_var = "id_"+var.gsub(/\?/,"_p").gsub(/\!/,"_bang")
|
128
|
-
DEFS.push(self)
|
129
|
-
end
|
130
|
-
|
131
|
-
def self.declaration
|
132
|
-
DEFS.map do |x|
|
133
|
-
x.id_decl
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
def self.assignment
|
138
|
-
DEFS.map do |x|
|
139
|
-
x.id_assign
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
# ----------------------------------------------------------------------
|
145
|
-
|
146
|
-
class Function < ErbPP
|
147
|
-
DEFS = []
|
148
|
-
|
149
|
-
attrs = %w[
|
150
|
-
singleton
|
151
|
-
meth
|
152
|
-
n_arg
|
153
|
-
]
|
154
|
-
define_attrs attrs
|
155
|
-
|
156
|
-
def id_op
|
157
|
-
if op.size == 1
|
158
|
-
"'#{op}'"
|
159
|
-
else
|
160
|
-
"id_#{method}"
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
def method
|
165
|
-
meth.gsub(/\?/,"_p").gsub(/\!/,"_bang")
|
166
|
-
end
|
167
|
-
|
168
|
-
def initialize(parent,tmpl,**opts)
|
169
|
-
super
|
170
|
-
@aliases = opts[:aliases] || []
|
171
|
-
parent.tmpl_dirs.each do |d|
|
172
|
-
@erb_path = File.join(d, tmpl+".c")
|
173
|
-
break if File.exist?(@erb_path)
|
174
|
-
end
|
175
|
-
DEFS.push(self)
|
176
|
-
end
|
177
|
-
|
178
|
-
def c_method
|
179
|
-
"#{m_prefix}#{method}"
|
180
|
-
end
|
181
|
-
|
182
|
-
def c_iter
|
183
|
-
begin
|
184
|
-
t = "_"+type_name
|
185
|
-
rescue
|
186
|
-
t = ""
|
187
|
-
end
|
188
|
-
"iter#{t}_#{method}"
|
189
|
-
end
|
190
|
-
alias c_iterator c_iter
|
191
|
-
|
192
|
-
def c_func
|
193
|
-
s = singleton ? "_s" : ""
|
194
|
-
begin
|
195
|
-
t = "_"+type_name
|
196
|
-
rescue
|
197
|
-
t = ""
|
198
|
-
end
|
199
|
-
"numo#{t}#{s}_#{method}"
|
200
|
-
end
|
201
|
-
alias c_function c_func
|
202
|
-
alias c_instance_method c_func
|
203
|
-
|
204
|
-
def op_map
|
205
|
-
@op || meth
|
206
|
-
end
|
207
|
-
|
208
|
-
def code
|
209
|
-
result + "\n\n"
|
210
|
-
end
|
211
|
-
|
212
|
-
def definition
|
213
|
-
return nil if n_arg <= -9
|
214
|
-
s = singleton ? "_singleton" : ""
|
215
|
-
check_params(:mod_var, :op_map, :c_func, :n_arg)
|
216
|
-
m = op_map
|
217
|
-
a = ["rb_define#{s}_method(#{mod_var}, \"#{m}\", #{c_func}, #{n_arg});"]
|
218
|
-
@aliases.map{|x| a << "rb_define_alias(#{mod_var}, \"#{x}\", \"#{m}\");"}
|
219
|
-
a
|
220
|
-
end
|
221
|
-
|
222
|
-
def self.codes
|
223
|
-
a = []
|
224
|
-
DEFS.each do |i|
|
225
|
-
x = i.code
|
226
|
-
a.push(x) if x
|
227
|
-
end
|
228
|
-
a
|
229
|
-
end
|
230
|
-
|
231
|
-
def self.definitions
|
232
|
-
a = []
|
233
|
-
DEFS.each do |i|
|
234
|
-
case x = i.definition
|
235
|
-
when Array
|
236
|
-
a.concat(x)
|
237
|
-
when String
|
238
|
-
a.push(x)
|
239
|
-
else
|
240
|
-
raise "unknown definition: #{x}" if x
|
241
|
-
end
|
242
|
-
end
|
243
|
-
a
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
class ModuleFunction < Function
|
248
|
-
def definition
|
249
|
-
m = op_map
|
250
|
-
"rb_define_module_function(#{mod_var}, \"#{m}\", #{c_func}, #{n_arg});"
|
251
|
-
end
|
252
|
-
end
|
253
|
-
|
254
|
-
class NodefFunction < Function
|
255
|
-
def definition
|
256
|
-
nil
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
class Alias < ErbPP
|
261
|
-
def initialize(parent, dst, src)
|
262
|
-
super(parent,nil)
|
263
|
-
@dst = dst
|
264
|
-
@src = src
|
265
|
-
Function::DEFS.push(self)
|
266
|
-
end
|
267
|
-
|
268
|
-
def code
|
269
|
-
nil
|
270
|
-
end
|
271
|
-
|
272
|
-
def definition
|
273
|
-
"rb_define_alias(#{mod_var}, \"#{dst}\", \"#{src}\");"
|
274
|
-
end
|
275
|
-
end
|
276
|
-
|
277
|
-
class Const < ErbPP
|
278
|
-
def initialize(parent,name,value,desc)
|
279
|
-
super(parent,nil)
|
280
|
-
@name = name
|
281
|
-
@value = value
|
282
|
-
@desc = desc
|
283
|
-
Function::DEFS.push(self)
|
284
|
-
end
|
285
|
-
|
286
|
-
def code
|
287
|
-
nil
|
288
|
-
end
|
289
|
-
|
290
|
-
def definition
|
291
|
-
"/*"+desc+"*/\n "+
|
292
|
-
"rb_define_const(#{mod_var},\"#{name}\",#{value});"
|
293
|
-
end
|
294
|
-
end
|