carray 1.3.7 → 1.4.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -7
  3. data/Rakefile +31 -0
  4. data/carray.gemspec +9 -14
  5. data/carray.h +4 -0
  6. data/carray_access.c +50 -8
  7. data/carray_conversion.c +3 -3
  8. data/carray_generate.c +67 -1
  9. data/carray_math.rb +22 -22
  10. data/carray_operator.c +23 -0
  11. data/devel/im2col.rb +17 -0
  12. data/lib/carray.rb +32 -1
  13. data/lib/carray/autoload/autoload_base.rb +0 -4
  14. data/lib/carray/autoload/autoload_gem_cairo.rb +9 -0
  15. data/lib/carray/autoload/autoload_gem_ffi.rb +9 -0
  16. data/lib/carray/autoload/autoload_gem_gnuplot.rb +2 -0
  17. data/lib/carray/autoload/autoload_gem_io_csv.rb +14 -0
  18. data/lib/carray/autoload/autoload_gem_io_pg.rb +6 -0
  19. data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +12 -0
  20. data/lib/carray/autoload/autoload_gem_narray.rb +10 -0
  21. data/lib/carray/autoload/autoload_gem_numo_narray.rb +14 -0
  22. data/lib/carray/autoload/autoload_gem_opencv.rb +16 -0
  23. data/lib/carray/autoload/autoload_gem_rmagick.rb +23 -0
  24. data/lib/carray/autoload/{autoload_graphics_zimg.rb → autoload_gem_zimg.rb} +0 -0
  25. data/lib/carray/base/autoload.rb +47 -5
  26. data/lib/carray/base/basic.rb +58 -2
  27. data/lib/carray/base/math.rb +1 -1
  28. data/lib/carray/base/string.rb +242 -0
  29. data/mkmath.rb +12 -2
  30. data/version.h +5 -5
  31. metadata +29 -109
  32. data/Gemfile +0 -8
  33. data/Gemfile.lock +0 -33
  34. data/ext/calculus/lib/autoload/autoload_math_calculus.rb +0 -2
  35. data/ext/fortio/extconf.rb +0 -3
  36. data/ext/fortio/lib/carray/autoload/autoload_fortran_format.rb +0 -5
  37. data/ext/fortio/lib/carray/io/fortran_format.rb +0 -43
  38. data/ext/fortio/lib/fortio.rb +0 -3
  39. data/ext/fortio/lib/fortio/fortran_format.rb +0 -605
  40. data/ext/fortio/lib/fortio/fortran_format.tab.rb +0 -536
  41. data/ext/fortio/lib/fortio/fortran_format.y +0 -215
  42. data/ext/fortio/lib/fortio/fortran_namelist.rb +0 -151
  43. data/ext/fortio/lib/fortio/fortran_namelist.tab.rb +0 -470
  44. data/ext/fortio/lib/fortio/fortran_namelist.y +0 -213
  45. data/ext/fortio/lib/fortio/fortran_sequential.rb +0 -345
  46. data/ext/fortio/ruby_fortio.c +0 -182
  47. data/ext/fortio/test/test_H.rb +0 -5
  48. data/ext/fortio/test/test_T.rb +0 -7
  49. data/ext/fortio/test/test_fortran_format.rb +0 -86
  50. data/ext/fortio/test/test_namelist.rb +0 -25
  51. data/ext/fortio/test/test_namelist_write.rb +0 -10
  52. data/ext/fortio/test/test_sequential.rb +0 -13
  53. data/ext/fortio/test/test_sequential2.rb +0 -13
  54. data/ext/fortio/work/test.rb +0 -10
  55. data/ext/fortio/work/test_e.rb +0 -19
  56. data/ext/fortio/work/test_ep.rb +0 -10
  57. data/ext/fortio/work/test_parse.rb +0 -12
  58. data/ext/mathfunc/lib/autoload/autoload_math_mathfunc.rb +0 -1
  59. data/ext/mathfunc/lib/math/mathfunc.rb +0 -15
  60. data/ext/narray/README +0 -22
  61. data/ext/narray/ca_wrap_narray.c +0 -500
  62. data/ext/narray/carray_narray.c +0 -21
  63. data/ext/narray/extconf.rb +0 -57
  64. data/ext/narray/lib/autoload/autoload_math_narray.rb +0 -1
  65. data/ext/narray/lib/autoload/autoload_math_narray_miss.rb +0 -11
  66. data/ext/narray/lib/math/narray.rb +0 -17
  67. data/ext/narray/lib/math/narray_miss.rb +0 -45
  68. data/lib/carray/autoload/autoload_graphics_gnuplot.rb +0 -2
  69. data/lib/carray/autoload/autoload_io_csv.rb +0 -14
  70. data/lib/carray/autoload/autoload_io_numo.rb +0 -9
  71. data/lib/carray/autoload/autoload_io_pg.rb +0 -6
  72. data/lib/carray/autoload/autoload_io_sqlite3.rb +0 -12
  73. data/lib/carray/graphics/gnuplot.rb +0 -2141
  74. data/lib/carray/graphics/zimg.rb +0 -296
  75. data/lib/carray/io/csv.rb +0 -572
  76. data/lib/carray/io/numo.rb +0 -52
  77. data/lib/carray/io/pg.rb +0 -101
  78. data/lib/carray/io/sqlite3.rb +0 -215
@@ -1,213 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/io/fortran_namelist.y
4
- #
5
- # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
- #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
10
- #
11
- # ----------------------------------------------------------------------------
12
-
13
- #
14
- # racc fortran_namelist.y -> fortan_namelist.tab.rb
15
- #
16
-
17
- class FortranNamelistParser
18
-
19
- prechigh
20
- left COMMA
21
- left ','
22
- left '='
23
- preclow
24
-
25
- rule
26
-
27
- namelist_all :
28
- namelist
29
- | namelist namelist_all
30
-
31
- namelist :
32
- header paramlist tailer
33
- { @root[val[0]] = val[1]; @scan.in_namelist = false }
34
-
35
- header :
36
- '&' IDENT { result = val[1].downcase }
37
- | '$' IDENT { result = val[1].downcase }
38
-
39
- tailer :
40
- '$'
41
- | '&'
42
- | '/'
43
- | '&' IDENT { on_error unless val[1] =~ /\Aend\Z/i }
44
- | '$' IDENT { on_error unless val[1] =~ /\Aend\Z/i }
45
-
46
- paramlist:
47
- paramdef { result = [val[0]] }
48
- | paramlist paramdef
49
- { result = val[0] + [val[1]] }
50
- | paramlist COMMA paramdef
51
- { result = val[0] + [val[2]] }
52
- | paramlist COMMA
53
- { result = val[0] }
54
-
55
- paramdef:
56
- IDENT '=' rvalues
57
- { result = ParamDef.new(val[0].downcase.intern, nil, val[2]) }
58
- | IDENT '(' array_spec ')' '=' rvalues
59
- { result = ParamDef.new(val[0].downcase.intern, val[2], val[5]) }
60
-
61
- rvalues :
62
- abbreb { result = val[0] }
63
- | rvalues abbreb
64
- { result = val[0] + val[1] }
65
- | rvalues NIL
66
- { result = val[0] + [nil] }
67
- | rvalues ',' abbreb
68
- { result = val[0] + val[2] }
69
- | IDENT
70
- { result = val[0] }
71
-
72
- abbreb :
73
- constant { result = [val[0]] }
74
- | DIGITS '*' constant
75
- { result = [val[2]] * val[0] }
76
-
77
- constant :
78
- STRING
79
- | DIGITS
80
- | FLOAT
81
-
82
- array_spec :
83
- DIGITS { result = [val[0]-1] }
84
- | DIGITS ':' DIGITS
85
- { result = [(val[0]-1)..(val[2]-1)] }
86
- | DIGITS ',' array_spec
87
- { result = [val[0]-1] + val[2] }
88
- | DIGITS ':' DIGITS ',' array_spec
89
- { result = [(val[0]-1)..(val[2]-1)] + val[4] }
90
-
91
- end
92
-
93
- ---- inner
94
-
95
- def parse (str)
96
- @scan = FortranNamelistScanner.new(str)
97
- @root = {}
98
- do_parse
99
- return @root
100
- end
101
-
102
- def next_token
103
- return @scan.yylex
104
- end
105
-
106
- ---- header
107
-
108
- require "strscan"
109
- require "stringio"
110
-
111
- class FortranNamelistScanner
112
-
113
- def initialize (text)
114
- @s = StringScanner.new(text)
115
- @in_namelist = false
116
- end
117
-
118
- attr_accessor :in_namelist
119
-
120
- def yylex
121
- while @s.rest?
122
- unless @in_namelist
123
- case
124
- when @s.scan(/\A([\$&])/) ### {$|&}
125
- @in_namelist = true
126
- return [
127
- @s[0],
128
- nil
129
- ]
130
- when @s.scan(/\A[^\$&]/)
131
- next
132
- end
133
- else
134
- case
135
- when @s.scan(/\A[+-]?(\d+)\.(\d+)?([ED][+-]?(\d+))?/i) ### float
136
- return [ ### 1.2E+3, 1.E+3, 1.2E3
137
- :FLOAT, ### 1.2, 1.
138
- @s[0].sub(/D/i,'e').sub(/\.e/,".0e").to_f
139
- ]
140
- when @s.scan(/\A[+-]?\.(\d+)([ED][+-]?(\d+))?/i) ### float
141
- return [ ### .2E+3, -.2E+3, .2E3
142
- :FLOAT, ### .2, -.2
143
- @s[0].sub(/D/i,'e').sub(/\./, '0.').to_f
144
- ]
145
- when @s.scan(/\A[+-]?(\d+)[ED][+-]?(\d+)/i) ### float
146
- return [ ### 12E+3, 12E3, 0E0
147
- :FLOAT,
148
- @s[0].sub(/D/i,'e').to_f
149
- ]
150
- when @s.scan(/\A[\-\+]?\d+/) ### digits
151
- return [
152
- :DIGITS,
153
- Integer(@s[0])
154
- ]
155
- when @s.scan(/\A'((?:''|[^'])*)'/) ### 'quoted string'
156
- return [
157
- :STRING,
158
- @s[1].gsub(/''/, "'")
159
- ]
160
- when @s.scan(/\A"((?:""|[^"])*)"/) ### 'double-quoted string'
161
- return [
162
- :STRING,
163
- @s[1].gsub(/""/, '"')
164
- ]
165
- when @s.scan(/\A,/) ### ,
166
- @s.scan(/\A\s+/)
167
- while @s.scan(/\A\n\s*/) or @s.scan(/\A\![^\n]*/)
168
- ### skip comment
169
- end
170
- if @s.match?(/\A[a-z]\w*/i) or @s.match?(/\A[\&\$\/\!]/)
171
- return [
172
- :COMMA,
173
- nil
174
- ]
175
- elsif @s.match?(/\A,/)
176
- return [
177
- :NIL,
178
- nil
179
- ]
180
- else
181
- return [
182
- ',',
183
- nil
184
- ]
185
- end
186
- when @s.scan(/\A[\$&\/=\(\):*]/) ### {$|&|/|,|=|(|)|:|*}
187
- return [
188
- @s[0],
189
- nil
190
- ]
191
- when @s.scan(/\A[a-z]\w*/i) ### IDENT
192
- return [
193
- :IDENT,
194
- @s[0]
195
- ]
196
- when @s.scan(/\A\s+/) ### blank
197
- next
198
- when @s.scan(/\A![^\n]*?\n/) ### comment
199
- next
200
- when @s.scan(/\A\n/) ### newline
201
- next
202
- else
203
- @s.rest =~ /\A(.*)$/
204
- raise "FortranFormat parse error\n\t#{$1}\n\t^"
205
- end
206
- end
207
- end
208
- end
209
-
210
- end
211
-
212
- ---- footer
213
-
@@ -1,345 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # fortio/fortran_sequential.rb
4
- #
5
- # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
- #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
10
- #
11
- # ----------------------------------------------------------------------------
12
- #
13
- #
14
- # Format
15
- #
16
- # real*4 : native endian => "f", "F"
17
- # little endian => "e"
18
- # big endian => "g"
19
- #
20
- # real*8 : native endian => "d", "D"
21
- # little endian => "E"
22
- # big endian => "G"
23
- #
24
- # integer*2 : native endian => "s"
25
- # little endian => "v"
26
- # big endian => "n"
27
- #
28
- # integer*4 : native endian => "l"
29
- # little endian => "V"
30
- # big endian => "N"
31
- #
32
- # character : "a"
33
- #
34
-
35
- require "stringio"
36
- require "carray"
37
-
38
- class FortranSequential
39
-
40
- if "ab".unpack("v").pack("s") == "ab"
41
- ENDIAN = "little"
42
- else
43
- ENDIAN = "big"
44
- end
45
-
46
- FMT_VAX = {
47
- "f" => "e", "F" => "e", "e" => "e", "g" => "g",
48
- "d" => "E", "D" => "E", "E" => "E", "G" => "G",
49
- "s" => "v", "v" => "v", "n" => "n",
50
- "l" => "V", "V" => "V", "N" => "N",
51
- "a" => "a"
52
- }
53
-
54
- FMT_NET = {
55
- "f" => "g", "F" => "g", "e" => "e", "g" => "g",
56
- "d" => "G", "D" => "G", "E" => "E", "G" => "G",
57
- "s" => "n", "v" => "v", "n" => "n",
58
- "l" => "N", "V" => "V", "N" => "N",
59
- "a" => "a"
60
- }
61
-
62
- def self.open (file, mode="r", opt={:endian=>nil})
63
- io = Kernel::open(file, mode)
64
- if mode =~ /r/
65
- fs = FortranSequentialReader.new(io, opt)
66
- else
67
- fs = FortranSequentialWriter.new(io, opt)
68
- end
69
- if block_given?
70
- begin
71
- yield(fs)
72
- ensure
73
- fs.close
74
- end
75
- else
76
- return fs
77
- end
78
- end
79
-
80
- def get_pack_fmt (endian)
81
- case endian
82
- when "big"
83
- return FMT_NET
84
- when "little"
85
- return FMT_VAX
86
- else
87
- raise "unknown endian '#{endian}'"
88
- end
89
- end
90
-
91
- class Record
92
-
93
- def initialize (data="", endian="little", fmt=nil)
94
- @io = StringIO.new(data)
95
- @fmt = fmt
96
- @endian = endian
97
- end
98
-
99
- def to_s
100
- return @io.string
101
- end
102
-
103
- def empty?
104
- return @io.eof?
105
- end
106
-
107
- def rest?
108
- return (not @io.eof?)
109
- end
110
-
111
- def read (*fmts)
112
- out = []
113
- while not fmts.empty?
114
- case fmt = fmts.shift
115
- when String
116
- list = []
117
- specs = fmt.scan(/(?:\d+|)(?:a\[\d+\]|\w)/)
118
- while not specs.empty?
119
- case specs.shift
120
- when /(\d+)?a\[(\d+)\]/
121
- ($1||1).to_i.times do
122
- list.push(*@io.read($2.to_i).unpack("a#{$2}"))
123
- end
124
- when /(\d+)?a/
125
- ($1||1).to_i.times do
126
- list.push(*@io.read(1).unpack("a"))
127
- end
128
- when /(\d+)?([dDEG])/
129
- ($1||1).to_i.times do
130
- list.push(*@io.read(8).unpack(@fmt[$2]))
131
- end
132
- when /(\d+)?([lNVefFg])/
133
- ($1||1).to_i.times do
134
- list.push(*@io.read(4).unpack(@fmt[$2]))
135
- end
136
- when /(\d+)?([nsv])/
137
- ($1||1).to_i.times do
138
- list.push(*@io.read(2).unpack(@fmt[$2]))
139
- end
140
- else
141
- raise "invalid format for FortranSequential::Record#read"
142
- end
143
- end
144
- if list.size == 1
145
- out.push(list.first)
146
- else
147
- out.push(list)
148
- end
149
- when Integer
150
- n, tmpl = fmt, fmts.shift
151
- n.times do
152
- out.push(tmpl.template.load_binary(@io))
153
- end
154
- when CArray
155
- tmpl = fmt
156
- if ENDIAN == @endian
157
- out.push(tmpl.template.load_binary(@io))
158
- else
159
- out.push(tmpl.template.load_binary(@io).swap_bytes!)
160
- end
161
- when CA::Struct
162
- if ENDIAN == @endian
163
- out.push(CScalar.new(fmt.class).load_binary(@io)[0])
164
- else
165
- out.push(CScalar.new(fmt.class).load_binary(@io).swap_bytes![0])
166
- end
167
- when Class
168
- if fmt < CA::Struct
169
- if ENDIAN == @endian
170
- out.push(CScalar.new(fmt).load_binary(@io)[0])
171
- else
172
- out.push(CScalar.new(fmt).load_binary(@io).swap_bytes![0])
173
- end
174
- else
175
- raise "invlaid argument (format string or CArray)"
176
- end
177
- else
178
- raise "invlaid argument (format string or CArray)"
179
- end
180
- end
181
- if out.size == 1
182
- return out.first
183
- else
184
- return out
185
- end
186
- end
187
-
188
- def write (*fmts)
189
- while fmt = fmts.shift
190
- if fmt.is_a?(String)
191
- argv = fmts.shift
192
- unless argv.is_a?(Array)
193
- raise "argv should be array"
194
- end
195
- argv = argv.clone
196
- end
197
- case fmt
198
- when String
199
- specs = fmt.scan(/(?:\d+|)(?:a\[\d+\]|\w)/)
200
- while not specs.empty?
201
- case specs.shift
202
- when /(\d+)?a\[(\d+)\]/
203
- ($1||1).to_i.times do
204
- @io.write [argv.shift].pack("a#{$2}")
205
- end
206
- when /(\d+)?([adDEGefFglNVnsv])/
207
- ($1||1).to_i.times do
208
- @io.write [argv.shift].pack(@fmt[$2])
209
- end
210
- else
211
- raise "invalid format for FortranSequential::Record#write"
212
- end
213
- end
214
- when CArray
215
- if ENDIAN == @endian
216
- fmt.dump_binary(@io)
217
- else
218
- fmt.swap_bytes.dump_binary(@io)
219
- end
220
- when CA::Struct
221
- if RUBY_VERSION.to_f >= 1.9
222
- if ENDIAN == @endian
223
- @io.write fmt.encode.force_encoding("ASCII-8BIT")
224
- else
225
- @io.write fmt.swap_bytes.encode.force_encoding("ASCII-8BIT")
226
- end
227
- else
228
- if ENDIAN == @endian
229
- @io.write fmt.encode
230
- else
231
- @io.write fmt.swap_bytes.encode
232
- end
233
- end
234
- else
235
- raise "invlaid argument (format string or CArray)"
236
- end
237
- end
238
- end
239
-
240
- end
241
-
242
- def eof?
243
- return @io.eof?
244
- end
245
-
246
- end
247
-
248
- class FortranSequentialReader < FortranSequential
249
-
250
- def initialize (io, opt={:endian=>nil})
251
- @io = io
252
- @endian = opt[:endian] || ENDIAN
253
- @fmt = get_pack_fmt(@endian)
254
- end
255
-
256
- def record (n=nil)
257
- if n
258
- @io.rewind
259
- skip(n)
260
- end
261
- data = read
262
- if data
263
- rec = FortranSequential::Record.new(data, @endian, @fmt)
264
- if block_given?
265
- return yield(rec)
266
- else
267
- return rec
268
- end
269
- else
270
- return nil
271
- end
272
- end
273
-
274
- def skip (n=1)
275
- n.times do
276
- unless @io.eof?
277
- length = @io.read(4).unpack(@fmt["l"]).first
278
- @io.pos += length
279
- if length != @io.read(4).unpack(@fmt["l"]).first
280
- raise "invalid record length (should be #{length})"
281
- end
282
- end
283
- end
284
- end
285
-
286
- def read (*dummy)
287
- if @io.eof?
288
- return nil
289
- else
290
- length = @io.read(4).unpack(@fmt["l"]).first
291
- data = @io.read(length)
292
- if data.length != length
293
- raise "record too short (record length should be #{length})"
294
- end
295
- if length != @io.read(4).unpack(@fmt["l"]).first
296
- raise "mismatched record length (should be #{length})"
297
- end
298
- return data
299
- end
300
- end
301
-
302
- def close
303
- @io.close
304
- end
305
-
306
- end
307
-
308
- class FortranSequentialWriter < FortranSequential
309
-
310
- def initialize (io, opt={:endian=>nil})
311
- @io = io
312
- @endian = opt[:endian] || ENDIAN
313
- @fmt = get_pack_fmt(@endian)
314
- end
315
-
316
- def record
317
- rec = FortranSequential::Record.new("", @endian, @fmt)
318
- if block_given?
319
- return yield(rec)
320
- else
321
- return rec
322
- end
323
- end
324
-
325
- def write (data)
326
- if data.respond_to?(:to_s)
327
- data = data.to_s
328
- end
329
- if RUBY_VERSION.to_f >= 1.9
330
- data = data.force_encoding("ASCII-8BIT")
331
- end
332
- @io.write [data.length].pack(@fmt["l"])
333
- @io.write data
334
- @io.write [data.length].pack(@fmt["l"])
335
- end
336
-
337
- def close
338
- @io.close
339
- end
340
-
341
- end
342
-
343
- def fortran_sequential_open (file, mode="r", opt={:endian=>nil}, &block)
344
- return FortranSequential.open(file, mode, opt, &block)
345
- end