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
data/lib/erbpp/line_number.rb
DELETED
@@ -1,133 +0,0 @@
|
|
1
|
-
class CountLnString < String
|
2
|
-
|
3
|
-
def initialize(filename)
|
4
|
-
@filename = filename
|
5
|
-
@lnchar = "\n"
|
6
|
-
@buf = ""
|
7
|
-
@str = ""
|
8
|
-
@countln = 1
|
9
|
-
@current = 1
|
10
|
-
super("\n"+report_line)
|
11
|
-
end
|
12
|
-
|
13
|
-
def report_line
|
14
|
-
"#line #{@current} \"#{@filename}\"\n"
|
15
|
-
end
|
16
|
-
|
17
|
-
def concat0(s)
|
18
|
-
ln(caller[0])
|
19
|
-
@buf.concat(s)
|
20
|
-
@str.concat(s)
|
21
|
-
end
|
22
|
-
|
23
|
-
def concat1(s)
|
24
|
-
ln(caller[0])
|
25
|
-
@buf.concat(s)
|
26
|
-
end
|
27
|
-
|
28
|
-
def ln(status=nil)
|
29
|
-
case status
|
30
|
-
when /:(\d+):/
|
31
|
-
n = $1.to_i
|
32
|
-
else
|
33
|
-
n = status.to_i
|
34
|
-
end
|
35
|
-
return if n == @current
|
36
|
-
if @current != @countln || @postpone
|
37
|
-
if /\A\s*\z/ =~ @str || /\A#line / =~ @buf
|
38
|
-
@postpone = true
|
39
|
-
elsif @in_comment
|
40
|
-
@postpone = false
|
41
|
-
else
|
42
|
-
if self[-1] != "\n"
|
43
|
-
concat("\n")
|
44
|
-
end
|
45
|
-
concat(report_line)
|
46
|
-
@postpone = false
|
47
|
-
end
|
48
|
-
end
|
49
|
-
concat(@buf)
|
50
|
-
|
51
|
-
b = @buf.gsub(/".*?(?<!\\)"/,'""')
|
52
|
-
/^.*(\/\*)(.*?)$/ =~ b
|
53
|
-
x = $2
|
54
|
-
/^.*(\*\/)(.*?)$/ =~ b
|
55
|
-
y = $2
|
56
|
-
if x
|
57
|
-
if y
|
58
|
-
if x.size < y.size
|
59
|
-
#:in_comment
|
60
|
-
@in_comment = true
|
61
|
-
else
|
62
|
-
#:out_comment
|
63
|
-
@in_comment = false
|
64
|
-
end
|
65
|
-
else
|
66
|
-
#:in_comment
|
67
|
-
@in_comment = true
|
68
|
-
end
|
69
|
-
else
|
70
|
-
if y
|
71
|
-
#:out_comment
|
72
|
-
@in_comment = false
|
73
|
-
else
|
74
|
-
#:keep
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
@countln = @current + @buf.count(@lnchar)
|
79
|
-
@current = n
|
80
|
-
@buf = ""
|
81
|
-
@str = ""
|
82
|
-
end
|
83
|
-
|
84
|
-
def d(s)
|
85
|
-
p [s, [x,y], r]
|
86
|
-
r
|
87
|
-
end
|
88
|
-
|
89
|
-
def final
|
90
|
-
concat(@buf)
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
class ERB
|
96
|
-
alias result_orig result
|
97
|
-
|
98
|
-
def result(b=new_toplevel)
|
99
|
-
src = src_with_cpp_line
|
100
|
-
if @safe_level
|
101
|
-
proc {
|
102
|
-
$SAFE = @safe_level
|
103
|
-
eval(src, b, (@filename || '(erb)'), 0)
|
104
|
-
}.call
|
105
|
-
else
|
106
|
-
#open("tmpout","w"){|f| f.write src} if /dtype/=~@filename
|
107
|
-
eval(src, b, (@filename || '(erb)'), 0)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
alias src_orig src
|
112
|
-
|
113
|
-
def src
|
114
|
-
src_with_cpp_line
|
115
|
-
end
|
116
|
-
|
117
|
-
def src_with_cpp_line
|
118
|
-
@src.each_line.with_index.map do |line, num|
|
119
|
-
line.gsub!(/_erbout.concat "/,'_erbout.concat0 "')
|
120
|
-
line.gsub!(/_erbout.concat\(/,'_erbout.concat1(')
|
121
|
-
if num==0
|
122
|
-
# skip
|
123
|
-
elsif num==1
|
124
|
-
f = @filename.dump
|
125
|
-
line.sub!(/_erbout = (\+?''|String\.new);/, "_erbout = CountLnString.new(#{f});")
|
126
|
-
elsif /^; _erbout\.force_encoding/ =~ line
|
127
|
-
line.sub!(/^;/,";_erbout.ln(#{num});")
|
128
|
-
end
|
129
|
-
line
|
130
|
-
end.join+";_erbout.final;"
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
data/lib/erbpp/narray_def.rb
DELETED
@@ -1,381 +0,0 @@
|
|
1
|
-
require 'erbpp'
|
2
|
-
|
3
|
-
module DefMethod
|
4
|
-
|
5
|
-
def def_id(meth,var=nil)
|
6
|
-
IdVar.new(self, meth, var)
|
7
|
-
end
|
8
|
-
|
9
|
-
def def_method(meth, n_arg, tmpl=nil, opts={})
|
10
|
-
h = {:meth => meth, :n_arg => n_arg}
|
11
|
-
h.merge!(opts)
|
12
|
-
tmpl ||= meth
|
13
|
-
Function.new(self, tmpl, h)
|
14
|
-
end
|
15
|
-
|
16
|
-
def def_singleton(meth, n_arg, tmpl=nil, opts={})
|
17
|
-
def_method(meth, n_arg, tmpl, :singleton => true)
|
18
|
-
end
|
19
|
-
|
20
|
-
def def_alias(dst, src)
|
21
|
-
Alias.new(self, dst, src)
|
22
|
-
end
|
23
|
-
|
24
|
-
def def_allocate(tmpl)
|
25
|
-
h = {:meth => "allocate", :singleton => true}
|
26
|
-
Allocate.new(self, tmpl, h)
|
27
|
-
end
|
28
|
-
|
29
|
-
def binary(meth, ope=nil)
|
30
|
-
ope = meth if ope.nil?
|
31
|
-
def_method(meth, 1, "binary", :op => ope)
|
32
|
-
end
|
33
|
-
|
34
|
-
def binary2(meth, ope=nil)
|
35
|
-
ope = meth if ope.nil?
|
36
|
-
def_method(meth, 1, "binary2", :op =>ope)
|
37
|
-
end
|
38
|
-
|
39
|
-
def unary(meth, ope=nil)
|
40
|
-
def_method(meth, 0, "unary", :op => ope)
|
41
|
-
end
|
42
|
-
|
43
|
-
def pow
|
44
|
-
def_method("pow", 1, "pow", :op => "**")
|
45
|
-
end
|
46
|
-
|
47
|
-
def unary2(meth, dtype, tpclass)
|
48
|
-
h = {:dtype => dtype, :tpclass => tpclass}
|
49
|
-
def_method(meth, 0, "unary2", h)
|
50
|
-
end
|
51
|
-
|
52
|
-
def set2(meth, dtype, tpclass)
|
53
|
-
h = {:dtype => dtype, :tpclass => tpclass}
|
54
|
-
def_method(meth, 1, "set2", h)
|
55
|
-
end
|
56
|
-
|
57
|
-
def cond_binary(meth,op=nil)
|
58
|
-
op = meth unless op
|
59
|
-
def_method(meth, 1, "cond_binary", :op => op)
|
60
|
-
end
|
61
|
-
|
62
|
-
def cond_unary(meth)
|
63
|
-
def_method(meth, 0, "cond_unary")
|
64
|
-
end
|
65
|
-
|
66
|
-
def bit_count(meth)
|
67
|
-
def_method(meth, -1, "bit_count")
|
68
|
-
end
|
69
|
-
|
70
|
-
def bit_reduce(meth, init_bit)
|
71
|
-
h = {:init_bit=>init_bit}
|
72
|
-
def_method(meth, -1, "bit_reduce", h)
|
73
|
-
end
|
74
|
-
|
75
|
-
def accum(meth, dtype, tpclass)
|
76
|
-
h = {:dtype => dtype, :tpclass => tpclass}
|
77
|
-
def_method(meth, -1, "accum", h)
|
78
|
-
end
|
79
|
-
|
80
|
-
def accum_index(meth)
|
81
|
-
def_method(meth, -1, "accum_index")
|
82
|
-
end
|
83
|
-
|
84
|
-
def cum(meth, cmacro)
|
85
|
-
def_method(meth, -1, "cum", cmacro:cmacro)
|
86
|
-
end
|
87
|
-
|
88
|
-
def accum_binary(meth, ope=nil)
|
89
|
-
ope = meth if ope.nil?
|
90
|
-
def_method(meth, -1, "accum_binary", :op => ope)
|
91
|
-
end
|
92
|
-
|
93
|
-
def qsort(tp, dtype, dcast, suffix="")
|
94
|
-
h = {:tp => tp, :dtype => dtype, :dcast => dcast, :suffix => suffix}
|
95
|
-
NodefFunction.new(self, "qsort", h)
|
96
|
-
end
|
97
|
-
|
98
|
-
def def_mod_func(meth, n_arg, tmpl=nil, opts={})
|
99
|
-
h = {:meth => meth, :n_arg => n_arg}
|
100
|
-
h.merge!(opts)
|
101
|
-
tmpl ||= meth
|
102
|
-
ModuleFunction.new(self, tmpl, h)
|
103
|
-
end
|
104
|
-
|
105
|
-
def math(meth, n=1, tmpl=nil)
|
106
|
-
h = {:mod_var => 'mTM'}
|
107
|
-
if tmpl.nil?
|
108
|
-
case n
|
109
|
-
when 1
|
110
|
-
tmpl = "unary_s"
|
111
|
-
when 2
|
112
|
-
tmpl = "binary_s"
|
113
|
-
when 3
|
114
|
-
tmpl = "ternary_s"
|
115
|
-
else
|
116
|
-
raise "invalid n=#{n}"
|
117
|
-
end
|
118
|
-
end
|
119
|
-
def_mod_func(meth, n, tmpl, h)
|
120
|
-
end
|
121
|
-
|
122
|
-
def store_numeric
|
123
|
-
StoreNum.new(self,"store_numeric")
|
124
|
-
end
|
125
|
-
|
126
|
-
def store_array
|
127
|
-
StoreArray.new(self,"store_array")
|
128
|
-
end
|
129
|
-
|
130
|
-
def cast_array
|
131
|
-
CastArray.new(self,"cast_array")
|
132
|
-
end
|
133
|
-
|
134
|
-
def store_from(cname,dtype,macro)
|
135
|
-
Store.new(self,"store_from",cname.downcase,dtype,"numo_c"+cname,macro)
|
136
|
-
end
|
137
|
-
|
138
|
-
def store_bit(cname)
|
139
|
-
Store.new(self,"store_bit",cname.downcase,nil,"numo_c"+cname,nil)
|
140
|
-
end
|
141
|
-
|
142
|
-
def store
|
143
|
-
Function.new(self,"store","store")
|
144
|
-
end
|
145
|
-
|
146
|
-
def find_method(meth)
|
147
|
-
Function::DEFS.find{|x| x.kind_of?(Function) and meth == x.meth }
|
148
|
-
end
|
149
|
-
|
150
|
-
def find_tmpl(meth)
|
151
|
-
Function::DEFS.find{|x| x.kind_of?(Function) and meth == x.tmpl }
|
152
|
-
end
|
153
|
-
|
154
|
-
def cast_func
|
155
|
-
"numo_#{tp}_s_cast"
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
# ----------------------------------------------------------------------
|
160
|
-
|
161
|
-
class DataType < ErbPP
|
162
|
-
include DefMethod
|
163
|
-
|
164
|
-
def initialize(erb_path, type_file)
|
165
|
-
super(nil, erb_path)
|
166
|
-
@class_alias = []
|
167
|
-
@upcast = []
|
168
|
-
@mod_var = "cT"
|
169
|
-
load_type(type_file) if type_file
|
170
|
-
dirs = template_dir || ["tmpl"]
|
171
|
-
@tmpl_dirs = dirs.map{|d| File.join(File.dirname(erb_path),d)}
|
172
|
-
end
|
173
|
-
|
174
|
-
attr_reader :tmpl_dirs
|
175
|
-
|
176
|
-
def load_type(file)
|
177
|
-
eval File.read(file)
|
178
|
-
end
|
179
|
-
|
180
|
-
attrs = %w[
|
181
|
-
class_name
|
182
|
-
ctype
|
183
|
-
template_dir
|
184
|
-
blas_char
|
185
|
-
complex_class_name
|
186
|
-
complex_type
|
187
|
-
real_class_name
|
188
|
-
real_ctype
|
189
|
-
has_math
|
190
|
-
is_bit
|
191
|
-
is_int
|
192
|
-
is_unsigned
|
193
|
-
is_float
|
194
|
-
is_real
|
195
|
-
is_complex
|
196
|
-
is_object
|
197
|
-
is_comparable
|
198
|
-
is_double_precision
|
199
|
-
mod_var
|
200
|
-
]
|
201
|
-
define_attrs attrs
|
202
|
-
|
203
|
-
def type_name
|
204
|
-
@type_name ||= class_name.downcase
|
205
|
-
end
|
206
|
-
alias tp type_name
|
207
|
-
|
208
|
-
def type_var
|
209
|
-
@type_var ||= "numo_c"+class_name
|
210
|
-
end
|
211
|
-
|
212
|
-
def math_var
|
213
|
-
@math_var ||= "numo_m"+class_name+"Math"
|
214
|
-
end
|
215
|
-
|
216
|
-
def real_class_name(arg=nil)
|
217
|
-
if arg.nil?
|
218
|
-
@real_class_name ||= class_name
|
219
|
-
else
|
220
|
-
@real_class_name = arg
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
def real_ctype(arg=nil)
|
225
|
-
if arg.nil?
|
226
|
-
@real_ctype ||= ctype
|
227
|
-
else
|
228
|
-
@real_ctype = arg
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
def real_type_var
|
233
|
-
@real_type_var ||= "numo_c"+real_class_name
|
234
|
-
end
|
235
|
-
|
236
|
-
def real_type_name
|
237
|
-
@real_type_name ||= real_class_name.downcase
|
238
|
-
end
|
239
|
-
|
240
|
-
def class_alias(*args)
|
241
|
-
@class_alias.concat(args)
|
242
|
-
end
|
243
|
-
|
244
|
-
def upcast(c=nil,t=nil)
|
245
|
-
if c
|
246
|
-
if t
|
247
|
-
t = "numo_c#{t}"
|
248
|
-
else
|
249
|
-
t = "cT"
|
250
|
-
end
|
251
|
-
@upcast << "rb_hash_aset(hCast, numo_c#{c}, #{t});"
|
252
|
-
else
|
253
|
-
@upcast
|
254
|
-
end
|
255
|
-
end
|
256
|
-
|
257
|
-
def upcast_rb(c,t=nil)
|
258
|
-
if t
|
259
|
-
t = "numo_c#{t}"
|
260
|
-
else
|
261
|
-
t = "cT"
|
262
|
-
end
|
263
|
-
if c=="Integer"
|
264
|
-
@upcast << "#ifdef RUBY_INTEGER_UNIFICATION"
|
265
|
-
@upcast << "rb_hash_aset(hCast, rb_cInteger, #{t});"
|
266
|
-
@upcast << "#else"
|
267
|
-
@upcast << "rb_hash_aset(hCast, rb_cFixnum, #{t});"
|
268
|
-
@upcast << "rb_hash_aset(hCast, rb_cBignum, #{t});"
|
269
|
-
@upcast << "#endif"
|
270
|
-
else
|
271
|
-
@upcast << "rb_hash_aset(hCast, rb_c#{c}, #{t});"
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
|
277
|
-
# ----------------------------------------------------------------------
|
278
|
-
|
279
|
-
|
280
|
-
class Allocate < Function
|
281
|
-
def definition
|
282
|
-
"rb_define_alloc_func(#{mod_var}, #{c_func});"
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
# ----------------------------------------------------------------------
|
287
|
-
|
288
|
-
class Store < Function
|
289
|
-
DEFS = []
|
290
|
-
|
291
|
-
def initialize(parent,tmpl,tpname,dtype,tpclass,macro)
|
292
|
-
super(parent,tmpl)
|
293
|
-
@tpname=tpname
|
294
|
-
@dtype=dtype
|
295
|
-
@tpclass=tpclass
|
296
|
-
@macro=macro
|
297
|
-
DEFS.push(self)
|
298
|
-
end
|
299
|
-
attr_reader :tmpl, :tpname, :dtype, :tpclass, :macro
|
300
|
-
|
301
|
-
def c_func
|
302
|
-
"numo_#{tp}_store_#{tpname}"
|
303
|
-
end
|
304
|
-
|
305
|
-
def c_iter
|
306
|
-
"iter_#{tp}_store_#{tpname}"
|
307
|
-
end
|
308
|
-
|
309
|
-
def definition
|
310
|
-
nil
|
311
|
-
end
|
312
|
-
|
313
|
-
def condition(klass)
|
314
|
-
"#{klass}==#{tpclass}"
|
315
|
-
end
|
316
|
-
|
317
|
-
def extract_data(ptr,pos,x)
|
318
|
-
case tpname
|
319
|
-
when "bit"
|
320
|
-
"{BIT_DIGIT b; LOAD_BIT(#{ptr},#{pos},b); x = m_from_real(b);}"
|
321
|
-
when "robject"
|
322
|
-
"#{x} = m_num_to_data(*(#{dtype}*)(#{ptr}+#{pos}))"
|
323
|
-
when /complex/
|
324
|
-
"{#{dtype} *p = (#{dtype}*)(#{ptr}+#{pos}); #{x} = c_new(REAL(*p),IMAG(*p));}"
|
325
|
-
else
|
326
|
-
"#{x} = m_from_real(*(#{dtype}*)(#{ptr}+#{pos}))"
|
327
|
-
end
|
328
|
-
end
|
329
|
-
|
330
|
-
def self.definitions
|
331
|
-
a = []
|
332
|
-
DEFS.each do |x|
|
333
|
-
if x.condition("")
|
334
|
-
if x.tpname == x.parents[0].class_name.downcase
|
335
|
-
a.unshift(x)
|
336
|
-
else
|
337
|
-
a.push(x)
|
338
|
-
end
|
339
|
-
end
|
340
|
-
end
|
341
|
-
a
|
342
|
-
end
|
343
|
-
end
|
344
|
-
|
345
|
-
class StoreNum < Store
|
346
|
-
def initialize(parent,tmpl)
|
347
|
-
super(parent,tmpl,"numeric",nil,nil,nil)
|
348
|
-
end
|
349
|
-
|
350
|
-
def condition(klass)
|
351
|
-
"IS_INTEGER_CLASS(#{klass}) || #{klass}==rb_cFloat || #{klass}==rb_cComplex"
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
class StoreArray < Store
|
356
|
-
def initialize(parent,tmpl)
|
357
|
-
super(parent,tmpl,"array",nil,nil,nil)
|
358
|
-
end
|
359
|
-
|
360
|
-
def c_func
|
361
|
-
"numo_#{tp}_#{tmpl}"
|
362
|
-
end
|
363
|
-
|
364
|
-
def condition(klass)
|
365
|
-
"#{klass}==rb_cArray"
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
369
|
-
class CastArray < StoreArray
|
370
|
-
def condition(klass)
|
371
|
-
nil
|
372
|
-
end
|
373
|
-
|
374
|
-
def c_func
|
375
|
-
"numo_#{tp}_cast_#{tpname}"
|
376
|
-
end
|
377
|
-
|
378
|
-
def c_iter
|
379
|
-
"iter_#{tp}_cast_#{tpname}"
|
380
|
-
end
|
381
|
-
end
|