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.
- checksums.yaml +4 -4
- data/README.md +0 -7
- data/Rakefile +31 -0
- data/carray.gemspec +9 -14
- data/carray.h +4 -0
- data/carray_access.c +50 -8
- data/carray_conversion.c +3 -3
- data/carray_generate.c +67 -1
- data/carray_math.rb +22 -22
- data/carray_operator.c +23 -0
- data/devel/im2col.rb +17 -0
- data/lib/carray.rb +32 -1
- data/lib/carray/autoload/autoload_base.rb +0 -4
- data/lib/carray/autoload/autoload_gem_cairo.rb +9 -0
- data/lib/carray/autoload/autoload_gem_ffi.rb +9 -0
- data/lib/carray/autoload/autoload_gem_gnuplot.rb +2 -0
- data/lib/carray/autoload/autoload_gem_io_csv.rb +14 -0
- data/lib/carray/autoload/autoload_gem_io_pg.rb +6 -0
- data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +12 -0
- data/lib/carray/autoload/autoload_gem_narray.rb +10 -0
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +14 -0
- data/lib/carray/autoload/autoload_gem_opencv.rb +16 -0
- data/lib/carray/autoload/autoload_gem_rmagick.rb +23 -0
- data/lib/carray/autoload/{autoload_graphics_zimg.rb → autoload_gem_zimg.rb} +0 -0
- data/lib/carray/base/autoload.rb +47 -5
- data/lib/carray/base/basic.rb +58 -2
- data/lib/carray/base/math.rb +1 -1
- data/lib/carray/base/string.rb +242 -0
- data/mkmath.rb +12 -2
- data/version.h +5 -5
- metadata +29 -109
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -33
- data/ext/calculus/lib/autoload/autoload_math_calculus.rb +0 -2
- data/ext/fortio/extconf.rb +0 -3
- data/ext/fortio/lib/carray/autoload/autoload_fortran_format.rb +0 -5
- data/ext/fortio/lib/carray/io/fortran_format.rb +0 -43
- data/ext/fortio/lib/fortio.rb +0 -3
- data/ext/fortio/lib/fortio/fortran_format.rb +0 -605
- data/ext/fortio/lib/fortio/fortran_format.tab.rb +0 -536
- data/ext/fortio/lib/fortio/fortran_format.y +0 -215
- data/ext/fortio/lib/fortio/fortran_namelist.rb +0 -151
- data/ext/fortio/lib/fortio/fortran_namelist.tab.rb +0 -470
- data/ext/fortio/lib/fortio/fortran_namelist.y +0 -213
- data/ext/fortio/lib/fortio/fortran_sequential.rb +0 -345
- data/ext/fortio/ruby_fortio.c +0 -182
- data/ext/fortio/test/test_H.rb +0 -5
- data/ext/fortio/test/test_T.rb +0 -7
- data/ext/fortio/test/test_fortran_format.rb +0 -86
- data/ext/fortio/test/test_namelist.rb +0 -25
- data/ext/fortio/test/test_namelist_write.rb +0 -10
- data/ext/fortio/test/test_sequential.rb +0 -13
- data/ext/fortio/test/test_sequential2.rb +0 -13
- data/ext/fortio/work/test.rb +0 -10
- data/ext/fortio/work/test_e.rb +0 -19
- data/ext/fortio/work/test_ep.rb +0 -10
- data/ext/fortio/work/test_parse.rb +0 -12
- data/ext/mathfunc/lib/autoload/autoload_math_mathfunc.rb +0 -1
- data/ext/mathfunc/lib/math/mathfunc.rb +0 -15
- data/ext/narray/README +0 -22
- data/ext/narray/ca_wrap_narray.c +0 -500
- data/ext/narray/carray_narray.c +0 -21
- data/ext/narray/extconf.rb +0 -57
- data/ext/narray/lib/autoload/autoload_math_narray.rb +0 -1
- data/ext/narray/lib/autoload/autoload_math_narray_miss.rb +0 -11
- data/ext/narray/lib/math/narray.rb +0 -17
- data/ext/narray/lib/math/narray_miss.rb +0 -45
- data/lib/carray/autoload/autoload_graphics_gnuplot.rb +0 -2
- data/lib/carray/autoload/autoload_io_csv.rb +0 -14
- data/lib/carray/autoload/autoload_io_numo.rb +0 -9
- data/lib/carray/autoload/autoload_io_pg.rb +0 -6
- data/lib/carray/autoload/autoload_io_sqlite3.rb +0 -12
- data/lib/carray/graphics/gnuplot.rb +0 -2141
- data/lib/carray/graphics/zimg.rb +0 -296
- data/lib/carray/io/csv.rb +0 -572
- data/lib/carray/io/numo.rb +0 -52
- data/lib/carray/io/pg.rb +0 -101
- data/lib/carray/io/sqlite3.rb +0 -215
data/mkmath.rb
CHANGED
@@ -289,7 +289,12 @@ ca_binop_#{name}_#{type} (ca_size_t n, boolean8_t *m, char *ptr1, ca_size_t i1,
|
|
289
289
|
io.puts
|
290
290
|
io.print %{
|
291
291
|
static VALUE rb_ca_#{name} (VALUE self, VALUE other)
|
292
|
-
{
|
292
|
+
{
|
293
|
+
if ( ! rb_ca_test_castable(other) ) {
|
294
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("#{op}"));
|
295
|
+
}
|
296
|
+
return rb_ca_call_binop(self, other, ca_binop_#{name});
|
297
|
+
}
|
293
298
|
static VALUE rb_ca_#{name}_bang (VALUE self, VALUE other)
|
294
299
|
{ return rb_ca_call_binop_bang(self, other, ca_binop_#{name}); }
|
295
300
|
}
|
@@ -529,7 +534,12 @@ ca_bincmp_#{name}_#{type} (ca_size_t n, boolean8_t *m,
|
|
529
534
|
io.puts
|
530
535
|
io.print %{
|
531
536
|
static VALUE rb_ca_#{name} (VALUE self, VALUE other)
|
532
|
-
{
|
537
|
+
{
|
538
|
+
if ( ! rb_ca_test_castable(other) ) {
|
539
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("#{op}"));
|
540
|
+
}
|
541
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_#{name});
|
542
|
+
}
|
533
543
|
}
|
534
544
|
DEFINITIONS << io.string
|
535
545
|
if op
|
data/version.h
CHANGED
@@ -10,9 +10,9 @@
|
|
10
10
|
|
11
11
|
---------------------------------------------------------------------------- */
|
12
12
|
|
13
|
-
#define CA_VERSION "1.
|
14
|
-
#define CA_VERSION_CODE
|
13
|
+
#define CA_VERSION "1.4.0"
|
14
|
+
#define CA_VERSION_CODE 140
|
15
15
|
#define CA_VERSION_MAJOR 1
|
16
|
-
#define CA_VERSION_MINOR
|
17
|
-
#define CA_VERSION_TEENY
|
18
|
-
#define CA_VERSION_DATE "2020/
|
16
|
+
#define CA_VERSION_MINOR 4
|
17
|
+
#define CA_VERSION_TEENY 0
|
18
|
+
#define CA_VERSION_DATE "2020/06/15"
|
metadata
CHANGED
@@ -1,57 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carray
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroki Motoyoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: narray
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.6.1.1
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.6.1.1
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: narray_miss
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.3'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.3'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: sqlite3
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.3'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.3'
|
11
|
+
date: 2020-06-15 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
55
13
|
description: |2
|
56
14
|
CArray is a uniform multi-dimensional rectangular array class.
|
57
15
|
It provides the various types of sub-arrays and references
|
@@ -61,16 +19,12 @@ email: ''
|
|
61
19
|
executables: []
|
62
20
|
extensions:
|
63
21
|
- extconf.rb
|
64
|
-
- ext/narray/extconf.rb
|
65
22
|
- ext/mathfunc/extconf.rb
|
66
|
-
- ext/fortio/extconf.rb
|
67
23
|
- ext/calculus/extconf.rb
|
68
24
|
extra_rdoc_files: []
|
69
25
|
files:
|
70
26
|
- COPYING
|
71
27
|
- GPL
|
72
|
-
- Gemfile
|
73
|
-
- Gemfile.lock
|
74
28
|
- LEGAL
|
75
29
|
- NOTE
|
76
30
|
- README.md
|
@@ -125,61 +79,33 @@ files:
|
|
125
79
|
- carray_undef.c
|
126
80
|
- carray_utils.c
|
127
81
|
- devel/guess_shape.rb
|
82
|
+
- devel/im2col.rb
|
128
83
|
- ext/calculus/carray_calculus.c
|
129
84
|
- ext/calculus/carray_interp.c
|
130
85
|
- ext/calculus/extconf.rb
|
131
|
-
- ext/calculus/lib/autoload/autoload_math_calculus.rb
|
132
86
|
- ext/calculus/lib/math/calculus.rb
|
133
87
|
- ext/calculus/lib/math/interp/adapter_interp1d.rb
|
134
|
-
- ext/fortio/extconf.rb
|
135
|
-
- ext/fortio/lib/carray/autoload/autoload_fortran_format.rb
|
136
|
-
- ext/fortio/lib/carray/io/fortran_format.rb
|
137
|
-
- ext/fortio/lib/fortio.rb
|
138
|
-
- ext/fortio/lib/fortio/fortran_format.rb
|
139
|
-
- ext/fortio/lib/fortio/fortran_format.tab.rb
|
140
|
-
- ext/fortio/lib/fortio/fortran_format.y
|
141
|
-
- ext/fortio/lib/fortio/fortran_namelist.rb
|
142
|
-
- ext/fortio/lib/fortio/fortran_namelist.tab.rb
|
143
|
-
- ext/fortio/lib/fortio/fortran_namelist.y
|
144
|
-
- ext/fortio/lib/fortio/fortran_sequential.rb
|
145
|
-
- ext/fortio/ruby_fortio.c
|
146
|
-
- ext/fortio/test/test_H.rb
|
147
|
-
- ext/fortio/test/test_T.rb
|
148
|
-
- ext/fortio/test/test_fortran_format.rb
|
149
|
-
- ext/fortio/test/test_namelist.rb
|
150
|
-
- ext/fortio/test/test_namelist_write.rb
|
151
|
-
- ext/fortio/test/test_sequential.rb
|
152
|
-
- ext/fortio/test/test_sequential2.rb
|
153
|
-
- ext/fortio/work/test.rb
|
154
|
-
- ext/fortio/work/test_e.rb
|
155
|
-
- ext/fortio/work/test_ep.rb
|
156
|
-
- ext/fortio/work/test_parse.rb
|
157
88
|
- ext/mathfunc/carray_mathfunc.c
|
158
89
|
- ext/mathfunc/extconf.rb
|
159
|
-
- ext/mathfunc/lib/autoload/autoload_math_mathfunc.rb
|
160
|
-
- ext/mathfunc/lib/math/mathfunc.rb
|
161
90
|
- ext/mathfunc/test/test_hypot.rb
|
162
91
|
- ext/mathfunc/test/test_j0.rb
|
163
92
|
- ext/mathfunc/test/test_jn.rb
|
164
93
|
- ext/mathfunc/test/test_sph.rb
|
165
|
-
- ext/narray/README
|
166
|
-
- ext/narray/ca_wrap_narray.c
|
167
|
-
- ext/narray/carray_narray.c
|
168
|
-
- ext/narray/extconf.rb
|
169
|
-
- ext/narray/lib/autoload/autoload_math_narray.rb
|
170
|
-
- ext/narray/lib/autoload/autoload_math_narray_miss.rb
|
171
|
-
- ext/narray/lib/math/narray.rb
|
172
|
-
- ext/narray/lib/math/narray_miss.rb
|
173
94
|
- extconf.rb
|
174
95
|
- lib/carray.rb
|
175
96
|
- lib/carray/autoload/autoload_base.rb
|
176
|
-
- lib/carray/autoload/
|
177
|
-
- lib/carray/autoload/
|
178
|
-
- lib/carray/autoload/
|
97
|
+
- lib/carray/autoload/autoload_gem_cairo.rb
|
98
|
+
- lib/carray/autoload/autoload_gem_ffi.rb
|
99
|
+
- lib/carray/autoload/autoload_gem_gnuplot.rb
|
100
|
+
- lib/carray/autoload/autoload_gem_io_csv.rb
|
101
|
+
- lib/carray/autoload/autoload_gem_io_pg.rb
|
102
|
+
- lib/carray/autoload/autoload_gem_io_sqlite3.rb
|
103
|
+
- lib/carray/autoload/autoload_gem_narray.rb
|
104
|
+
- lib/carray/autoload/autoload_gem_numo_narray.rb
|
105
|
+
- lib/carray/autoload/autoload_gem_opencv.rb
|
106
|
+
- lib/carray/autoload/autoload_gem_rmagick.rb
|
107
|
+
- lib/carray/autoload/autoload_gem_zimg.rb
|
179
108
|
- lib/carray/autoload/autoload_io_imagemagick.rb
|
180
|
-
- lib/carray/autoload/autoload_io_numo.rb
|
181
|
-
- lib/carray/autoload/autoload_io_pg.rb
|
182
|
-
- lib/carray/autoload/autoload_io_sqlite3.rb
|
183
109
|
- lib/carray/autoload/autoload_io_table.rb
|
184
110
|
- lib/carray/autoload/autoload_math_histogram.rb
|
185
111
|
- lib/carray/autoload/autoload_math_interp.rb
|
@@ -194,15 +120,10 @@ files:
|
|
194
120
|
- lib/carray/base/math.rb
|
195
121
|
- lib/carray/base/obsolete.rb
|
196
122
|
- lib/carray/base/serialize.rb
|
123
|
+
- lib/carray/base/string.rb
|
197
124
|
- lib/carray/base/struct.rb
|
198
|
-
- lib/carray/graphics/gnuplot.rb
|
199
|
-
- lib/carray/graphics/zimg.rb
|
200
125
|
- lib/carray/info.rb
|
201
|
-
- lib/carray/io/csv.rb
|
202
126
|
- lib/carray/io/imagemagick.rb
|
203
|
-
- lib/carray/io/numo.rb
|
204
|
-
- lib/carray/io/pg.rb
|
205
|
-
- lib/carray/io/sqlite3.rb
|
206
127
|
- lib/carray/io/table.rb
|
207
128
|
- lib/carray/math/histogram.rb
|
208
129
|
- lib/carray/math/interp.rb
|
@@ -296,11 +217,7 @@ rdoc_options:
|
|
296
217
|
- rdoc_stat.rb
|
297
218
|
- lib/carray/info.rb
|
298
219
|
- lib/carray/io/table.rb
|
299
|
-
- lib/carray/io/sqlite3.rb
|
300
|
-
- lib/carray/io/csv.rb
|
301
|
-
- lib/carray/io/numo.rb
|
302
220
|
- lib/carray/io/imagemagick.rb
|
303
|
-
- lib/carray/io/pg.rb
|
304
221
|
- lib/carray/math/interp.rb
|
305
222
|
- lib/carray/math/interp/adapter_gsl_spline.rb
|
306
223
|
- lib/carray/math/histogram.rb
|
@@ -309,24 +226,28 @@ rdoc_options:
|
|
309
226
|
- lib/carray/object/ca_obj_pack.rb
|
310
227
|
- lib/carray/object/ca_obj_link.rb
|
311
228
|
- lib/carray/autoload/autoload_io_table.rb
|
229
|
+
- lib/carray/autoload/autoload_gem_narray.rb
|
312
230
|
- lib/carray/autoload/autoload_math_histogram.rb
|
313
|
-
- lib/carray/autoload/autoload_io_csv.rb
|
314
|
-
- lib/carray/autoload/autoload_io_pg.rb
|
315
231
|
- lib/carray/autoload/autoload_math_interp.rb
|
316
232
|
- lib/carray/autoload/autoload_io_imagemagick.rb
|
317
|
-
- lib/carray/autoload/
|
233
|
+
- lib/carray/autoload/autoload_gem_cairo.rb
|
234
|
+
- lib/carray/autoload/autoload_gem_numo_narray.rb
|
235
|
+
- lib/carray/autoload/autoload_gem_zimg.rb
|
318
236
|
- lib/carray/autoload/autoload_math_recurrence.rb
|
319
|
-
- lib/carray/autoload/
|
320
|
-
- lib/carray/autoload/
|
321
|
-
- lib/carray/autoload/
|
237
|
+
- lib/carray/autoload/autoload_gem_io_pg.rb
|
238
|
+
- lib/carray/autoload/autoload_gem_ffi.rb
|
239
|
+
- lib/carray/autoload/autoload_gem_gnuplot.rb
|
240
|
+
- lib/carray/autoload/autoload_gem_opencv.rb
|
241
|
+
- lib/carray/autoload/autoload_gem_io_sqlite3.rb
|
242
|
+
- lib/carray/autoload/autoload_gem_io_csv.rb
|
243
|
+
- lib/carray/autoload/autoload_gem_rmagick.rb
|
322
244
|
- lib/carray/autoload/autoload_base.rb
|
323
245
|
- lib/carray/autoload/autoload_object_link.rb
|
324
246
|
- lib/carray/autoload/autoload_object_pack.rb
|
325
247
|
- lib/carray/autoload/autoload_object_iterator.rb
|
326
248
|
- lib/carray/mkmf.rb
|
327
|
-
- lib/carray/graphics/gnuplot.rb
|
328
|
-
- lib/carray/graphics/zimg.rb
|
329
249
|
- lib/carray/base/struct.rb
|
250
|
+
- lib/carray/base/string.rb
|
330
251
|
- lib/carray/base/math.rb
|
331
252
|
- lib/carray/base/inspect.rb
|
332
253
|
- lib/carray/base/iterator.rb
|
@@ -347,8 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
347
268
|
- !ruby/object:Gem::Version
|
348
269
|
version: '0'
|
349
270
|
requirements: []
|
350
|
-
|
351
|
-
rubygems_version: 2.7.7
|
271
|
+
rubygems_version: 3.0.3
|
352
272
|
signing_key:
|
353
273
|
specification_version: 4
|
354
274
|
summary: Multi-dimesional array class
|
data/Gemfile
DELETED
data/Gemfile.lock
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: https://rubygems.org/
|
3
|
-
specs:
|
4
|
-
axlsx (2.0.1)
|
5
|
-
htmlentities (~> 4.3.1)
|
6
|
-
nokogiri (>= 1.4.1)
|
7
|
-
rubyzip (~> 1.0.0)
|
8
|
-
htmlentities (4.3.4)
|
9
|
-
mini_portile2 (2.0.0)
|
10
|
-
narray (0.6.1.2)
|
11
|
-
narray_miss (1.3.0)
|
12
|
-
numru-narray
|
13
|
-
nokogiri (1.6.7.2)
|
14
|
-
mini_portile2 (~> 2.0.0.rc2)
|
15
|
-
numru-narray (1.0.3)
|
16
|
-
ruby-ole (1.2.12)
|
17
|
-
rubyzip (1.0.0)
|
18
|
-
spreadsheet (1.1.2)
|
19
|
-
ruby-ole (>= 1.0)
|
20
|
-
sqlite3 (1.3.11)
|
21
|
-
|
22
|
-
PLATFORMS
|
23
|
-
ruby
|
24
|
-
|
25
|
-
DEPENDENCIES
|
26
|
-
axlsx
|
27
|
-
narray
|
28
|
-
narray_miss
|
29
|
-
spreadsheet
|
30
|
-
sqlite3
|
31
|
-
|
32
|
-
BUNDLED WITH
|
33
|
-
1.11.2
|
data/ext/fortio/extconf.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require "fortio"
|
2
|
-
|
3
|
-
class CArray
|
4
|
-
|
5
|
-
def self.from_fortran_format (fmt, io)
|
6
|
-
case io
|
7
|
-
when String
|
8
|
-
io = StringIO.new(io)
|
9
|
-
end
|
10
|
-
case fmt
|
11
|
-
when String
|
12
|
-
fmt = FortranFormat.new(fmt)
|
13
|
-
end
|
14
|
-
data = []
|
15
|
-
begin
|
16
|
-
data << fmt.read(io)
|
17
|
-
end until io.eof?
|
18
|
-
return data.to_ca
|
19
|
-
end
|
20
|
-
|
21
|
-
def to_fortran_format (fmt, input="")
|
22
|
-
case input
|
23
|
-
when String
|
24
|
-
io = StringIO.new(input)
|
25
|
-
else
|
26
|
-
io = input
|
27
|
-
end
|
28
|
-
case fmt
|
29
|
-
when String
|
30
|
-
fmt = FortranFormat.new(fmt)
|
31
|
-
end
|
32
|
-
n = fmt.count_args
|
33
|
-
attach {
|
34
|
-
self[nil].blocks(0...n).each do |blk|
|
35
|
-
fmt.write(io, *blk.to_a)
|
36
|
-
end
|
37
|
-
}
|
38
|
-
return input
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
|
data/ext/fortio/lib/fortio.rb
DELETED
@@ -1,605 +0,0 @@
|
|
1
|
-
# ----------------------------------------------------------------------------
|
2
|
-
#
|
3
|
-
# carray/io/fortran_format.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
|
-
# Supported format descriptors
|
14
|
-
# ----------------------------
|
15
|
-
# nFw.d : floating point
|
16
|
-
# nEw.d : floating point
|
17
|
-
# nDw.d : floating point
|
18
|
-
# nGw.d : floating point
|
19
|
-
# nESw.d :
|
20
|
-
# nEd : exponential
|
21
|
-
# nIw(.d) : integer
|
22
|
-
# nLw : logical
|
23
|
-
# nAw : string
|
24
|
-
# nX : write n white space or skip reading by n-characters
|
25
|
-
# Tn : move to n-character from line head
|
26
|
-
# TLn : move left relative by n-characters
|
27
|
-
# TRn : move right relative by n-characters
|
28
|
-
# +P, -P
|
29
|
-
# S, SP, SS
|
30
|
-
# BN,BZ
|
31
|
-
# nH... : hollerith string (e.g. 5Hhello)
|
32
|
-
# '...', "..." : quoted string
|
33
|
-
# / : line feed
|
34
|
-
# $ : surppress line feed
|
35
|
-
#
|
36
|
-
# Short methods
|
37
|
-
# -------------
|
38
|
-
#
|
39
|
-
# ### fortran_format(fmt, *vals)
|
40
|
-
#
|
41
|
-
# ### fortran_format_write(io, fmt, *vals)
|
42
|
-
#
|
43
|
-
# ### fortran_format_read(io, fmt)
|
44
|
-
#
|
45
|
-
|
46
|
-
|
47
|
-
require "fortio_ext"
|
48
|
-
require "fortio/fortran_format.tab"
|
49
|
-
require "stringio"
|
50
|
-
|
51
|
-
class FortranFormat
|
52
|
-
|
53
|
-
FORMAT_POOL = Hash.new { |hash, fmt|
|
54
|
-
hash[fmt] = FortranFormatParser.new.parse(fmt)
|
55
|
-
}
|
56
|
-
|
57
|
-
def self.reset
|
58
|
-
FORMAT_POOL.clear
|
59
|
-
end
|
60
|
-
|
61
|
-
def initialize (fmt)
|
62
|
-
@format = FORMAT_POOL[fmt]
|
63
|
-
end
|
64
|
-
|
65
|
-
def write (io, *list)
|
66
|
-
io ||= ""
|
67
|
-
buf = StringIO.new()
|
68
|
-
@format.write_as_root(buf, list)
|
69
|
-
io << buf.string
|
70
|
-
return io
|
71
|
-
end
|
72
|
-
|
73
|
-
def read (io, list = [])
|
74
|
-
if io.is_a?(String)
|
75
|
-
io = StringIO.new(io)
|
76
|
-
end
|
77
|
-
@format.read_as_root(io, list)
|
78
|
-
return list
|
79
|
-
end
|
80
|
-
|
81
|
-
def count_args
|
82
|
-
return @format.count_args
|
83
|
-
end
|
84
|
-
|
85
|
-
def inspect
|
86
|
-
return "<FortranFormat: #{@format.inspect}>"
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
def FortranFormat.check_length (len, str)
|
92
|
-
if str.length > len
|
93
|
-
return "*" * len
|
94
|
-
else
|
95
|
-
return str
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def FortranFormat (fmt)
|
100
|
-
return FortranFormat.new(fmt)
|
101
|
-
end
|
102
|
-
|
103
|
-
def fortran_format_write (io, fmt, *data)
|
104
|
-
if fmt.is_a?(FortranFormat)
|
105
|
-
return fmt.write(io, *data)
|
106
|
-
else
|
107
|
-
return FortranFormat.new(fmt).write(io, *data)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def fortran_format_read (io, fmt)
|
112
|
-
if fmt.is_a?(FortranFormat)
|
113
|
-
return fmt.read(io)
|
114
|
-
else
|
115
|
-
return FortranFormat.new(fmt).read(io)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def fortran_format (fmt, *data)
|
120
|
-
return fortran_format_write(nil, fmt, *data)
|
121
|
-
end
|
122
|
-
|
123
|
-
class FortranFormatParser
|
124
|
-
|
125
|
-
State = Struct.new(:scale, :sign, :zero, :continue, :pos0, :tab_move)
|
126
|
-
|
127
|
-
Group = Struct.new(:count, :member)
|
128
|
-
class Group
|
129
|
-
def write_as_root (io, list)
|
130
|
-
state = State.new(0, false, false, false, io.pos, false)
|
131
|
-
write(io, list, state)
|
132
|
-
if state.continue
|
133
|
-
if state.tab_move
|
134
|
-
io.string.gsub!(/\000/, ' ')
|
135
|
-
end
|
136
|
-
else
|
137
|
-
if state.tab_move
|
138
|
-
io.string.gsub!(/\000/, ' ')
|
139
|
-
io.seek(0, IO::SEEK_END)
|
140
|
-
end
|
141
|
-
io.puts
|
142
|
-
end
|
143
|
-
end
|
144
|
-
def write (io, list, state)
|
145
|
-
count.times do |i|
|
146
|
-
member.each do |mem|
|
147
|
-
mem.write(io, list, state)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
def read_as_root (io, list)
|
152
|
-
state = State.new(0, false, false, false, io.pos, false)
|
153
|
-
read(io, list, state)
|
154
|
-
unless state.continue
|
155
|
-
io.gets
|
156
|
-
end
|
157
|
-
end
|
158
|
-
def read (io, list, state)
|
159
|
-
count.times do |i|
|
160
|
-
member.each do |mem|
|
161
|
-
mem.read(io, list, state)
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
def count_args
|
166
|
-
return count*member.inject(0){|s,m| s + m.count_args}
|
167
|
-
end
|
168
|
-
def inspect
|
169
|
-
count_str = count == 1 ? "" : count.to_s
|
170
|
-
return "#{count_str}(" + member.map{|x| x.inspect}.join(",")+ ')'
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
class Continue
|
175
|
-
def write (io, list, state)
|
176
|
-
state.continue = true
|
177
|
-
end
|
178
|
-
def read (io, list, state)
|
179
|
-
state.continue = true
|
180
|
-
end
|
181
|
-
def count_args
|
182
|
-
return 0
|
183
|
-
end
|
184
|
-
def inspect
|
185
|
-
return "$"
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
Flush = Struct.new(:count)
|
190
|
-
class Flush
|
191
|
-
def write (io, list, state)
|
192
|
-
io << "\n" * count
|
193
|
-
end
|
194
|
-
def read (io, list, state)
|
195
|
-
count.times do
|
196
|
-
io.gets
|
197
|
-
end
|
198
|
-
end
|
199
|
-
def count_args
|
200
|
-
return count
|
201
|
-
end
|
202
|
-
def inspect
|
203
|
-
count_str = count == 1 ? "" : count.to_s
|
204
|
-
return "#{count_str}/"
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
NodeS = Struct.new(:text)
|
209
|
-
class NodeS
|
210
|
-
def write (io, list, state)
|
211
|
-
io << text
|
212
|
-
end
|
213
|
-
def read (io, list, state)
|
214
|
-
raise RuntimeError, "constant string for reading"
|
215
|
-
end
|
216
|
-
def count_args
|
217
|
-
return 0
|
218
|
-
end
|
219
|
-
def inspect
|
220
|
-
if text !~ /'/
|
221
|
-
return "'" + text + "'"
|
222
|
-
else
|
223
|
-
return '"' + text.gsub(/"/, '""') + '"'
|
224
|
-
end
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
NodeT= Struct.new(:n)
|
229
|
-
class NodeT
|
230
|
-
def write (io, list, state)
|
231
|
-
io.pos = state.pos0 + n
|
232
|
-
state.tab_move = true
|
233
|
-
end
|
234
|
-
def read (io, list, state)
|
235
|
-
io.pos = state.pos0 + n
|
236
|
-
end
|
237
|
-
def count_args
|
238
|
-
return 0
|
239
|
-
end
|
240
|
-
def inspect
|
241
|
-
return "TL#{n}"
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
NodeTL = Struct.new(:n)
|
246
|
-
class NodeTL
|
247
|
-
def write (io, list, state)
|
248
|
-
io.pos -= n
|
249
|
-
state.tab_move = true
|
250
|
-
end
|
251
|
-
def read (io, list, state)
|
252
|
-
io.pos -= n
|
253
|
-
end
|
254
|
-
def count_args
|
255
|
-
return 0
|
256
|
-
end
|
257
|
-
def inspect
|
258
|
-
return "TL#{n}"
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
NodeTR = Struct.new(:n)
|
263
|
-
class NodeTR
|
264
|
-
def write (io, list, state)
|
265
|
-
io.pos += n
|
266
|
-
state.tab_move = true
|
267
|
-
end
|
268
|
-
def read (io, list, state)
|
269
|
-
io.pos += n
|
270
|
-
end
|
271
|
-
def count_args
|
272
|
-
return 0
|
273
|
-
end
|
274
|
-
def inspect
|
275
|
-
return "TR#{n}"
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
|
-
NodeX = Struct.new(:count)
|
280
|
-
class NodeX
|
281
|
-
def write (io, list, state)
|
282
|
-
io << " " * count
|
283
|
-
end
|
284
|
-
def read (io, list, state)
|
285
|
-
io.read(count)
|
286
|
-
end
|
287
|
-
def count_args
|
288
|
-
return 0
|
289
|
-
end
|
290
|
-
def inspect
|
291
|
-
count_str = count == 1 ? "" : count.to_s
|
292
|
-
return "#{count_str}X"
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
NodeP = Struct.new(:scale)
|
297
|
-
class NodeP
|
298
|
-
def write (io, list, state)
|
299
|
-
state.scale = scale
|
300
|
-
end
|
301
|
-
def read (io, list, state)
|
302
|
-
state.scale = scale
|
303
|
-
end
|
304
|
-
def count_args
|
305
|
-
return 0
|
306
|
-
end
|
307
|
-
def inspect
|
308
|
-
return "#{scale}P"
|
309
|
-
end
|
310
|
-
end
|
311
|
-
|
312
|
-
NodeSp = Struct.new(:sign)
|
313
|
-
class NodeSp
|
314
|
-
def write (io, list, state)
|
315
|
-
state.sign = sign
|
316
|
-
end
|
317
|
-
def read (io, list, state)
|
318
|
-
end
|
319
|
-
def count_args
|
320
|
-
return 0
|
321
|
-
end
|
322
|
-
def inspect
|
323
|
-
if sign
|
324
|
-
return "SP"
|
325
|
-
else
|
326
|
-
return "SS"
|
327
|
-
end
|
328
|
-
end
|
329
|
-
end
|
330
|
-
|
331
|
-
NodeB = Struct.new(:zero)
|
332
|
-
class NodeB
|
333
|
-
def write (io, list, state)
|
334
|
-
end
|
335
|
-
def read (io, list, state)
|
336
|
-
state.zero = zero
|
337
|
-
# if zero
|
338
|
-
# warn "FortranFormat: BZ is not supported descriptor"
|
339
|
-
# end
|
340
|
-
end
|
341
|
-
def count_args
|
342
|
-
return 0
|
343
|
-
end
|
344
|
-
def inspect
|
345
|
-
if zero
|
346
|
-
return "BZ"
|
347
|
-
else
|
348
|
-
return "BN"
|
349
|
-
end
|
350
|
-
end
|
351
|
-
end
|
352
|
-
|
353
|
-
NodeH = Struct.new(:count, :string)
|
354
|
-
class NodeH
|
355
|
-
def write (io, list, state)
|
356
|
-
io << string
|
357
|
-
end
|
358
|
-
def read (io, list, state)
|
359
|
-
raise "format h is not implemented for reading"
|
360
|
-
end
|
361
|
-
def count_args
|
362
|
-
return count
|
363
|
-
end
|
364
|
-
def inspect
|
365
|
-
count_str = count == 1 ? "" : count.to_s
|
366
|
-
return "#{count_str}H#{string}"
|
367
|
-
end
|
368
|
-
end
|
369
|
-
|
370
|
-
NodeA = Struct.new(:count, :length)
|
371
|
-
class NodeA
|
372
|
-
def write (io, list, state)
|
373
|
-
len = length
|
374
|
-
if len
|
375
|
-
count.times do
|
376
|
-
str = list.shift
|
377
|
-
if str.length > len
|
378
|
-
io << str[0,len]
|
379
|
-
else
|
380
|
-
io << str.rjust(len)
|
381
|
-
end
|
382
|
-
end
|
383
|
-
else
|
384
|
-
io << str
|
385
|
-
end
|
386
|
-
end
|
387
|
-
def read (io, list, state)
|
388
|
-
str = nil
|
389
|
-
if length
|
390
|
-
count.times do
|
391
|
-
list << (str = io.read(length))
|
392
|
-
end
|
393
|
-
else
|
394
|
-
list << (str = io.read)
|
395
|
-
end
|
396
|
-
rescue
|
397
|
-
raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
|
398
|
-
end
|
399
|
-
def count_args
|
400
|
-
return count
|
401
|
-
end
|
402
|
-
def inspect
|
403
|
-
count_str = count == 1 ? "" : count.to_s
|
404
|
-
return "#{count_str}A#{length}"
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
|
-
NodeL = Struct.new(:count, :length)
|
409
|
-
class NodeL
|
410
|
-
def write (io, list, state)
|
411
|
-
count.times do
|
412
|
-
if list.shift
|
413
|
-
io << " "*(length-1) + "T"
|
414
|
-
else
|
415
|
-
io << " "*(length-1) + "F"
|
416
|
-
end
|
417
|
-
end
|
418
|
-
end
|
419
|
-
def read (io, list, state)
|
420
|
-
count.times do
|
421
|
-
case io.read(length)
|
422
|
-
when /\A *?\.?t/i
|
423
|
-
list.push(true)
|
424
|
-
else
|
425
|
-
list.push(false)
|
426
|
-
end
|
427
|
-
end
|
428
|
-
end
|
429
|
-
def count_args
|
430
|
-
return count
|
431
|
-
end
|
432
|
-
def inspect
|
433
|
-
count_str = count == 1 ? "" : count.to_s
|
434
|
-
return "#{count_str}L#{length}"
|
435
|
-
end
|
436
|
-
end
|
437
|
-
|
438
|
-
NodeI = Struct.new(:count, :length, :prec)
|
439
|
-
class NodeI
|
440
|
-
def write (io, list, state)
|
441
|
-
if prec
|
442
|
-
if state.sign
|
443
|
-
fmt = "%#{length-prec}s%+0#{prec-1}i"
|
444
|
-
else
|
445
|
-
fmt = "%#{length-prec}s%0#{prec}i"
|
446
|
-
end
|
447
|
-
else
|
448
|
-
if state.sign
|
449
|
-
fmt = "%s%+#{length-1}i"
|
450
|
-
else
|
451
|
-
fmt = "%s%#{length}i"
|
452
|
-
end
|
453
|
-
end
|
454
|
-
count.times do
|
455
|
-
str = format(fmt, "", list.shift)
|
456
|
-
io << FortranFormat.check_length(length, str)
|
457
|
-
end
|
458
|
-
end
|
459
|
-
def read (io, list, state)
|
460
|
-
str = nil
|
461
|
-
count.times do
|
462
|
-
str = io.read(length)
|
463
|
-
if state.zero
|
464
|
-
list << str.gsub(/ /,'0').to_i
|
465
|
-
else
|
466
|
-
list << str.to_i
|
467
|
-
end
|
468
|
-
end
|
469
|
-
rescue
|
470
|
-
raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
|
471
|
-
end
|
472
|
-
def count_args
|
473
|
-
return count
|
474
|
-
end
|
475
|
-
def inspect
|
476
|
-
count_str = count == 1 ? "" : count.to_s
|
477
|
-
if prec
|
478
|
-
return "#{count_str}I#{length}.#{prec}"
|
479
|
-
else
|
480
|
-
return "#{count_str}I#{length}"
|
481
|
-
end
|
482
|
-
end
|
483
|
-
end
|
484
|
-
|
485
|
-
NodeF = Struct.new(:count, :length, :prec)
|
486
|
-
class NodeF
|
487
|
-
def write (io, list, state)
|
488
|
-
count.times do
|
489
|
-
str = FortranFormat.write_F(state.sign, state.scale, length, prec, list.shift)
|
490
|
-
io << FortranFormat.check_length(length, str)
|
491
|
-
end
|
492
|
-
end
|
493
|
-
def read (io, list, state)
|
494
|
-
str = nil
|
495
|
-
count.times do
|
496
|
-
str = io.read(length)
|
497
|
-
if state.zero
|
498
|
-
str = str.gsub(/ /,'0')
|
499
|
-
end
|
500
|
-
list << FortranFormat.read_F(str, state.scale, length, prec)
|
501
|
-
end
|
502
|
-
rescue
|
503
|
-
raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
|
504
|
-
end
|
505
|
-
def count_args
|
506
|
-
return count
|
507
|
-
end
|
508
|
-
def inspect
|
509
|
-
count_str = count == 1 ? "" : count.to_s
|
510
|
-
return "#{count_str}F#{length}.#{prec}"
|
511
|
-
end
|
512
|
-
end
|
513
|
-
|
514
|
-
NodeE = Struct.new(:count, :length, :prec, :exp)
|
515
|
-
class NodeE
|
516
|
-
def write (io, list, state)
|
517
|
-
count.times do
|
518
|
-
str = FortranFormat.write_E(state.sign, state.scale, length, prec, exp, list.shift)
|
519
|
-
io << FortranFormat.check_length(length, str)
|
520
|
-
end
|
521
|
-
end
|
522
|
-
def read (io, list, state)
|
523
|
-
str = nil
|
524
|
-
count.times do
|
525
|
-
str = io.read(length)
|
526
|
-
if state.zero
|
527
|
-
str = str.gsub(/ /,'0')
|
528
|
-
end
|
529
|
-
list << str.to_f
|
530
|
-
end
|
531
|
-
rescue
|
532
|
-
raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
|
533
|
-
end
|
534
|
-
def count_args
|
535
|
-
return count
|
536
|
-
end
|
537
|
-
def inspect
|
538
|
-
count_str = count == 1 ? "" : count.to_s
|
539
|
-
exp_str = (exp.nil? or exp == 2) ? "" : "E#{exp}"
|
540
|
-
return "#{count_str}E#{length}.#{prec}#{exp_str}"
|
541
|
-
end
|
542
|
-
end
|
543
|
-
|
544
|
-
NodeES = Struct.new(:count, :length, :prec, :exp)
|
545
|
-
class NodeES
|
546
|
-
def write (io, list, state)
|
547
|
-
count.times do
|
548
|
-
str = FortranFormat.write_E(state.sign, 1, length, prec, exp, list.shift)
|
549
|
-
io << FortranFormat.check_length(length, str)
|
550
|
-
end
|
551
|
-
end
|
552
|
-
def read (io, list, state)
|
553
|
-
str = nil
|
554
|
-
count.times do
|
555
|
-
str = io.read(length)
|
556
|
-
if state.zero
|
557
|
-
str = str.gsub(/ /,'0')
|
558
|
-
end
|
559
|
-
list << str.to_f
|
560
|
-
end
|
561
|
-
rescue
|
562
|
-
raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
|
563
|
-
end
|
564
|
-
def count_args
|
565
|
-
return count
|
566
|
-
end
|
567
|
-
def inspect
|
568
|
-
count_str = count == 1 ? "" : count.to_s
|
569
|
-
exp_str = (exp.nil? or exp == 2) ? "" : "E#{exp}"
|
570
|
-
return "#{count_str}ES#{length}.#{prec}#{exp_str}"
|
571
|
-
end
|
572
|
-
end
|
573
|
-
|
574
|
-
NodeG = Struct.new(:count, :length, :prec, :exp)
|
575
|
-
class NodeG
|
576
|
-
def write (io, list, state)
|
577
|
-
count.times do
|
578
|
-
str = FortranFormat.write_G(state.sign, state.scale, length, prec, exp, list.shift)
|
579
|
-
io << FortranFormat.check_length(length, str)
|
580
|
-
end
|
581
|
-
end
|
582
|
-
def read (io, list, state)
|
583
|
-
str = nil
|
584
|
-
count.times do
|
585
|
-
str = io.read(length)
|
586
|
-
if state.zero
|
587
|
-
str = str.gsub(/ /,'0')
|
588
|
-
end
|
589
|
-
list << str.to_f
|
590
|
-
end
|
591
|
-
rescue
|
592
|
-
raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
|
593
|
-
end
|
594
|
-
def count_args
|
595
|
-
return count
|
596
|
-
end
|
597
|
-
def inspect
|
598
|
-
count_str = count == 1 ? "" : count.to_s
|
599
|
-
exp_str = (exp.nil? or exp == 2) ? "" : "E#{exp}"
|
600
|
-
return "#{count_str}G#{length}.#{prec}#{exp_str}"
|
601
|
-
end
|
602
|
-
end
|
603
|
-
|
604
|
-
end
|
605
|
-
|