carray 1.1.7 → 1.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/carray.gemspec +7 -2
- data/carray.h +1 -0
- data/carray_access.c +16 -3
- data/devel/guess_shape.rb +76 -0
- data/examples/ex001.rb +10 -0
- data/examples/test-int.rb +13 -0
- data/lib/carray/autoload/autoload_graphics_zimg.rb +3 -0
- data/lib/carray/base/autoload.rb +6 -1
- data/lib/carray/base/basic.rb +16 -6
- data/lib/carray/base/inspect.rb +4 -6
- data/lib/carray/base/struct.rb +1 -1
- data/lib/carray/graphics/zimg.rb +296 -0
- data/lib/carray/io/csv.rb +16 -9
- data/lib/carray/io/sqlite3.rb +7 -2
- data/test/test_ref_store.rb +1 -1
- data/version.h +4 -4
- metadata +82 -10
- data/ext/dataframe/API.txt +0 -11
- data/ext/dataframe/extconf.rb +0 -3
- data/ext/dataframe/lib/carray/autoload/autoload_dataframe_dataframe.rb +0 -14
- data/ext/dataframe/lib/carray/dataframe/dataframe.rb +0 -1104
- data/ext/dataframe/sample/test_uniq_sort.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e750df14d398beba90298203a253b80bf9f3f8a1
|
4
|
+
data.tar.gz: 372405f4be4af7621011dc3e725aad673903d618
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d3eaf9c183473c1ae7a65120ee54d5f32b369229b29282936b5bcbb32b482a39e7da011b8b51479ef8f9dd4f941c58571455759065bce6eb81889b061bc11c4
|
7
|
+
data.tar.gz: 5283d53bae1c583c57fbe5459505a10f4d6bc5b45fc7647863c2ca4927f18ed205a70e4ade244b39f1ac3f5f403fbc83896dfd5fedf9d9444ec9ef51db70493e
|
data/carray.gemspec
CHANGED
@@ -31,12 +31,17 @@ Gem::Specification::new do |s|
|
|
31
31
|
Dir["ext/*/extconf.rb"].select{|f| File.exist?(f) }
|
32
32
|
s.has_rdoc = true
|
33
33
|
s.rdoc_options = [
|
34
|
-
"--main
|
34
|
+
"--main rdoc_main.rb",
|
35
35
|
"rdoc_main.rb",
|
36
36
|
"rdoc_ext.rb",
|
37
37
|
"rdoc_math.rb",
|
38
38
|
"rdoc_stat.rb",
|
39
|
-
Dir.glob("lib/carray/**/*.rb")
|
39
|
+
Dir.glob("lib/carray/**/*.rb"),
|
40
40
|
].flatten
|
41
41
|
s.required_ruby_version = ">= 1.8.1"
|
42
|
+
s.add_runtime_dependency 'narray', '~> 0.6.1.1'
|
43
|
+
s.add_runtime_dependency 'narray_miss', '~> 1.3'
|
44
|
+
s.add_runtime_dependency 'axlsx', '~> 2.0'
|
45
|
+
s.add_runtime_dependency 'spreadsheet', '~> 1.1'
|
46
|
+
s.add_runtime_dependency 'sqlite3', '~> 1.3'
|
42
47
|
end
|
data/carray.h
CHANGED
data/carray_access.c
CHANGED
@@ -348,7 +348,7 @@ rb_ary_flatten_for_elements (VALUE ary, int32_t elements, void *ap)
|
|
348
348
|
rb_raise(rb_eRuntimeError, "invalid shape array for conversion to carray");
|
349
349
|
}
|
350
350
|
else {
|
351
|
-
VALUE out = rb_ary_new2(
|
351
|
+
VALUE out = rb_ary_new2(0);
|
352
352
|
int len = 0;
|
353
353
|
ary_flatten_upto_level(ary, max_level, 0, out, &len);
|
354
354
|
if ( len != elements ) {
|
@@ -374,7 +374,7 @@ rb_ary_flatten_for_elements (VALUE ary, int32_t elements, void *ap)
|
|
374
374
|
}
|
375
375
|
|
376
376
|
if ( same_shape ) {
|
377
|
-
VALUE out = rb_ary_new2(
|
377
|
+
VALUE out = rb_ary_new2(0);
|
378
378
|
int len = 0;
|
379
379
|
ary_flatten_upto_level(ary, ca->rank-1, 0, out, &len);
|
380
380
|
|
@@ -396,7 +396,7 @@ rb_ary_flatten_for_elements (VALUE ary, int32_t elements, void *ap)
|
|
396
396
|
}
|
397
397
|
|
398
398
|
if ( level >= 0 ) {
|
399
|
-
VALUE out = rb_ary_new2(
|
399
|
+
VALUE out = rb_ary_new2(0);
|
400
400
|
int len = 0;
|
401
401
|
ary_flatten_upto_level(ary, level, 0, out, &len);
|
402
402
|
if ( len != elements ) {
|
@@ -512,6 +512,10 @@ rb_ca_scan_index (int ca_rank, int32_t *ca_dim, int32_t ca_elements,
|
|
512
512
|
info->index[0].scalar = addr;
|
513
513
|
return;
|
514
514
|
}
|
515
|
+
else if ( arg == Qnil ) {
|
516
|
+
info->type = CA_REG_FLATTEN;
|
517
|
+
return;
|
518
|
+
}
|
515
519
|
else { /* ca[i..j] -> CA_REG_ADDRESS_COMPLEX */
|
516
520
|
info->type = CA_REG_ADDRESS_COMPLEX;
|
517
521
|
return;
|
@@ -1227,6 +1231,9 @@ rb_ca_fetch_method (int argc, VALUE *argv, VALUE self)
|
|
1227
1231
|
case CA_REG_ADDRESS:
|
1228
1232
|
obj = rb_ca_ref_address(self, &info);
|
1229
1233
|
break;
|
1234
|
+
case CA_REG_FLATTEN:
|
1235
|
+
obj = rb_ca_refer_new_flatten(self);
|
1236
|
+
break;
|
1230
1237
|
case CA_REG_POINT:
|
1231
1238
|
obj = rb_ca_ref_point(self, &info);
|
1232
1239
|
break;
|
@@ -1311,6 +1318,10 @@ rb_ca_store_method (int argc, VALUE *argv, VALUE self)
|
|
1311
1318
|
case CA_REG_ADDRESS:
|
1312
1319
|
obj = rb_ca_store_address(self, &info, rval);
|
1313
1320
|
break;
|
1321
|
+
case CA_REG_FLATTEN:
|
1322
|
+
self = rb_ca_refer_new_flatten(self);
|
1323
|
+
obj = rb_ca_store_all(self, rval);
|
1324
|
+
break;
|
1314
1325
|
case CA_REG_POINT:
|
1315
1326
|
obj = rb_ca_store_point(self, &info, rval);
|
1316
1327
|
break;
|
@@ -1584,6 +1595,7 @@ rb_ca_normalize_index (VALUE self, VALUE ridx)
|
|
1584
1595
|
}
|
1585
1596
|
return rindex;
|
1586
1597
|
case CA_REG_ADDRESS_COMPLEX:
|
1598
|
+
case CA_REG_FLATTEN:
|
1587
1599
|
self = rb_ca_refer_new_flatten(self);
|
1588
1600
|
return rb_ca_normalize_index(self, ridx);
|
1589
1601
|
default:
|
@@ -1779,6 +1791,7 @@ Init_carray_access ()
|
|
1779
1791
|
rb_define_const(rb_cObject, "CA_REG_NONE", INT2NUM(CA_REG_NONE));
|
1780
1792
|
rb_define_const(rb_cObject, "CA_REG_ALL", INT2NUM(CA_REG_ALL));
|
1781
1793
|
rb_define_const(rb_cObject, "CA_REG_ADDRESS", INT2NUM(CA_REG_ADDRESS));
|
1794
|
+
rb_define_const(rb_cObject, "CA_REG_FLATTEN", INT2NUM(CA_REG_FLATTEN));
|
1782
1795
|
rb_define_const(rb_cObject, "CA_REG_ADDRESS_COMPLEX",
|
1783
1796
|
INT2NUM(CA_REG_ADDRESS_COMPLEX));
|
1784
1797
|
rb_define_const(rb_cObject, "CA_REG_POINT", INT2NUM(CA_REG_POINT));
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require "carray"
|
2
|
+
|
3
|
+
def guess_shape (ary)
|
4
|
+
if ary.class == Array
|
5
|
+
info = {
|
6
|
+
:rank => 0,
|
7
|
+
:dim => [],
|
8
|
+
:stop_rank => 0,
|
9
|
+
}
|
10
|
+
(1..5).each do |rank|
|
11
|
+
info[:rank] = rank
|
12
|
+
guess_shape_rank(ary, info, 1)
|
13
|
+
if info[:stop_rank] != 0
|
14
|
+
return info[:dim]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
raise "too deep array"
|
18
|
+
else
|
19
|
+
return [] ### rank = 0
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# ok 0
|
24
|
+
# scalar => 1
|
25
|
+
# array invalid length => 2
|
26
|
+
|
27
|
+
def guess_shape_rank (ary, info, level)
|
28
|
+
len = info[:dim][level-1]
|
29
|
+
printf "len->#{len}\n"
|
30
|
+
if len
|
31
|
+
if len != ary.length
|
32
|
+
info[:stop_rank] = level-1
|
33
|
+
return 2
|
34
|
+
end
|
35
|
+
else
|
36
|
+
len = ary.length
|
37
|
+
printf "len: set #{len}\n"
|
38
|
+
info[:dim][level-1] = len
|
39
|
+
end
|
40
|
+
if level == info[:rank]
|
41
|
+
return 0
|
42
|
+
end
|
43
|
+
if level < info[:rank]
|
44
|
+
p ary
|
45
|
+
ary.each do |e|
|
46
|
+
if e.class == Array
|
47
|
+
retval = guess_shape_rank(e, info, level+1)
|
48
|
+
case retval
|
49
|
+
when 1, 2
|
50
|
+
return retval
|
51
|
+
when 0
|
52
|
+
end
|
53
|
+
else
|
54
|
+
info[:stop_rank] = level
|
55
|
+
info[:dim] = info[:dim][0..level-1]
|
56
|
+
return 1
|
57
|
+
end
|
58
|
+
end
|
59
|
+
return 0
|
60
|
+
end
|
61
|
+
return 3
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
ary = [
|
66
|
+
[[[[3],3],1]],
|
67
|
+
[[2,2]],
|
68
|
+
[[3,3,]]
|
69
|
+
]
|
70
|
+
#ca = CArray.object(4,3,2,1).seq
|
71
|
+
#ca.elem_store([0,0,0,0],[1,2])
|
72
|
+
#ary = ca.to_a
|
73
|
+
p ary
|
74
|
+
p CArray.guess_array_shape(ary)
|
75
|
+
p guess_shape(ary)
|
76
|
+
p ary.to_ca
|
data/examples/ex001.rb
ADDED
data/lib/carray/base/autoload.rb
CHANGED
@@ -61,7 +61,12 @@ module CA
|
|
61
61
|
begin
|
62
62
|
Gem::Specification.each do |spec|
|
63
63
|
if spec.name =~ /carray/
|
64
|
-
|
64
|
+
spec.require_paths.each do |path|
|
65
|
+
if path !~ /^\//
|
66
|
+
path = File.join(spec.full_gem_path, path)
|
67
|
+
end
|
68
|
+
autoload_dirs.push(path)
|
69
|
+
end
|
65
70
|
end
|
66
71
|
end
|
67
72
|
rescue Gem::LoadError
|
data/lib/carray/base/basic.rb
CHANGED
@@ -318,6 +318,18 @@ class CArray
|
|
318
318
|
return reshape(elements).to_ca
|
319
319
|
end
|
320
320
|
|
321
|
+
# pulled
|
322
|
+
|
323
|
+
def pulled (*args)
|
324
|
+
idx = args.map{|s| s.nil? ? :% : s}
|
325
|
+
return self[*idx]
|
326
|
+
end
|
327
|
+
|
328
|
+
def pull (*args)
|
329
|
+
idx = args.map{|s| s.nil? ? :% : s}
|
330
|
+
return self[*idx].to_ca
|
331
|
+
end
|
332
|
+
|
321
333
|
# reversed
|
322
334
|
|
323
335
|
def reversed
|
@@ -599,7 +611,7 @@ class CArray
|
|
599
611
|
|
600
612
|
#
|
601
613
|
# CArray.span(data_type, range[, step])
|
602
|
-
# CArray.span(range[, step]) -> data_type guessed by range.first
|
614
|
+
# CArray.span(range[, step]) -> data_type guessed by range.first type
|
603
615
|
#
|
604
616
|
|
605
617
|
def self.span (*argv)
|
@@ -608,7 +620,7 @@ class CArray
|
|
608
620
|
else
|
609
621
|
type, = *CArray.guess_type_and_bytes(argv.shift, nil)
|
610
622
|
end
|
611
|
-
range, step = argv[0], argv[1]
|
623
|
+
range, step = argv[0], argv[1]
|
612
624
|
start, stop = range.begin, range.end
|
613
625
|
if step == 0
|
614
626
|
raise "step should not be 0"
|
@@ -624,11 +636,9 @@ class CArray
|
|
624
636
|
end
|
625
637
|
end
|
626
638
|
if type == CA_OBJECT and not step
|
627
|
-
return CA_OBJECT(range.
|
639
|
+
return CA_OBJECT(range.to_a)
|
628
640
|
else
|
629
|
-
|
630
|
-
# stop = stop.to_s.to_r
|
631
|
-
# step = step.to_s.to_r
|
641
|
+
step ||= 1
|
632
642
|
if range.exclude_end?
|
633
643
|
n = ((stop - start).abs/step).floor
|
634
644
|
else
|
data/lib/carray/base/inspect.rb
CHANGED
@@ -126,13 +126,11 @@ class CArray::Inspector # :nodoc:
|
|
126
126
|
lambda{|x| "%i" % x }
|
127
127
|
when CA_UINT8, CA_UINT16, CA_UINT32, CA_UINT64
|
128
128
|
lambda{|x| "%u" % x }
|
129
|
-
when CA_FLOAT32
|
130
|
-
lambda{|x|
|
131
|
-
when CA_FLOAT64, CA_FLOAT128
|
132
|
-
lambda{|x| "%.8g" % x }
|
129
|
+
when CA_FLOAT32, CA_FLOAT64, CA_FLOAT128
|
130
|
+
lambda{|x| x.inspect }
|
133
131
|
when CA_CMPLX64, CA_CMPLX128, CA_CMPLX256
|
134
|
-
lambda{|x| format("
|
135
|
-
x.real, (x.imag >= 0) ? "+" : "-", x.imag.abs) }
|
132
|
+
lambda{|x| format("%s%s%si",
|
133
|
+
x.real.inspect, (x.imag >= 0) ? "+" : "-", x.imag.abs.inspect) }
|
136
134
|
when CA_FIXLEN
|
137
135
|
if @carray.data_class
|
138
136
|
if @carray.bytes <= 6
|
data/lib/carray/base/struct.rb
CHANGED
@@ -303,7 +303,7 @@ class CA::Struct::Builder # :nodoc:
|
|
303
303
|
else
|
304
304
|
data_type, @bytes = CArray.guess_type_and_bytes(@type, @opt[:bytes])
|
305
305
|
if data_type == CA_OBJECT
|
306
|
-
raise
|
306
|
+
raise RuntimeError, "CA_OBJECT type can't be a member of struct or union"
|
307
307
|
end
|
308
308
|
@byte_length = @bytes
|
309
309
|
end
|
@@ -0,0 +1,296 @@
|
|
1
|
+
# ----------------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# carray/graphics/zimg.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
|
+
=begin
|
15
|
+
|
16
|
+
option
|
17
|
+
|
18
|
+
:debug => (true|false)
|
19
|
+
:output => filename
|
20
|
+
:complex => (abs|length|phase|real|imaginary)
|
21
|
+
:colormap => (red|blue|gray) | "filename" | [r,g,b]
|
22
|
+
:invert => (true|false)
|
23
|
+
:crange => [min,max]
|
24
|
+
:nda_color => color
|
25
|
+
:scale => [x[,y]]
|
26
|
+
:align => [h,[,v,bcol]]
|
27
|
+
:quality => quality
|
28
|
+
:interlace => (true|false)
|
29
|
+
:colorbox => (true|false)
|
30
|
+
:cbox_tics => n
|
31
|
+
:cbox_label => string
|
32
|
+
:cbox_format => string
|
33
|
+
:display => (true|false) | "program"
|
34
|
+
:legend => string
|
35
|
+
:label => [[x1,y1,s1], [x2,y2,s2], ...]
|
36
|
+
:vlabel => [[x1,y1,s1], [x2,y2,s2], ...]
|
37
|
+
:textfont => n
|
38
|
+
:textcolor => "xxx"|"xxxxxx"
|
39
|
+
:smooth => threshold
|
40
|
+
:contors => [levels,"log",bg,fg] ### Not Implemented
|
41
|
+
|
42
|
+
=end
|
43
|
+
|
44
|
+
class CArray
|
45
|
+
|
46
|
+
@@zimg_count = 0
|
47
|
+
|
48
|
+
def zimg (option={}) # :nodoc:
|
49
|
+
|
50
|
+
tempfile = "%zimg_#{$$}_#{@@zimg_count}.dat"
|
51
|
+
@@zimg_count += 1
|
52
|
+
|
53
|
+
if self.rank != 2
|
54
|
+
raise "zimg accept only 2-D data"
|
55
|
+
end
|
56
|
+
|
57
|
+
option.each do |k, v|
|
58
|
+
if k.kind_of?(String)
|
59
|
+
option[k.intern] = v
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
if option[:output]
|
64
|
+
output = option[:output]
|
65
|
+
case output
|
66
|
+
when /.ppm$/
|
67
|
+
outfmt = "--ppm"
|
68
|
+
when /.pgm$/
|
69
|
+
outfmt = "--pgm"
|
70
|
+
when /.jpg$/i, /.jpeg$/i
|
71
|
+
if option[:quality]
|
72
|
+
outfmt = "--jpeg=" + option[:quality].to_s
|
73
|
+
else
|
74
|
+
outfmt = "--jpeg"
|
75
|
+
end
|
76
|
+
else
|
77
|
+
outfmt = ""
|
78
|
+
end
|
79
|
+
else
|
80
|
+
output = "-"
|
81
|
+
outfmt = ""
|
82
|
+
end
|
83
|
+
|
84
|
+
if option[:interlace]
|
85
|
+
interlace = "--interlace"
|
86
|
+
else
|
87
|
+
interlace = ""
|
88
|
+
end
|
89
|
+
|
90
|
+
case self.data_type
|
91
|
+
when CA_UINT8
|
92
|
+
type_spec = "--unsigned-char"
|
93
|
+
when CA_INT8, CA_BOOLEAN
|
94
|
+
type_spec = "--char"
|
95
|
+
when CA_UINT16
|
96
|
+
type_spec = "--unsigned-short"
|
97
|
+
when CA_INT16
|
98
|
+
type_spec = "--short"
|
99
|
+
when CA_UINT32
|
100
|
+
type_spec = "--unsigned-int"
|
101
|
+
when CA_INT32
|
102
|
+
type_spec = "--int"
|
103
|
+
when CA_FLOAT32
|
104
|
+
type_spec = "--float"
|
105
|
+
when CA_FLOAT64
|
106
|
+
type_spec = "--double"
|
107
|
+
when CA_CMPLX64
|
108
|
+
type_spec = "--complex-float=" + ( option[:complex] || "abs" )
|
109
|
+
when CA_CMPLX128
|
110
|
+
type_spec = "--complex-double=" + ( option[:complex] || "abs" )
|
111
|
+
else
|
112
|
+
raise "can't create image for invalid numerical data"
|
113
|
+
end
|
114
|
+
|
115
|
+
case option[:colormap]
|
116
|
+
when "red", "blue", "gray"
|
117
|
+
colormap = "--" + option[:colormap]
|
118
|
+
when String
|
119
|
+
if File.exist?(option[:colormap])
|
120
|
+
colormap = "--colormap=" + option[:colormap]
|
121
|
+
else
|
122
|
+
raise "can't find colomap file"
|
123
|
+
end
|
124
|
+
when Array
|
125
|
+
colormap = "--colormap=" + option[:colormap].join(",")
|
126
|
+
else
|
127
|
+
colormap = ""
|
128
|
+
end
|
129
|
+
|
130
|
+
if option[:crange]
|
131
|
+
crange = "--crange=" + option[:crange].join(',')
|
132
|
+
else
|
133
|
+
crange = ''
|
134
|
+
end
|
135
|
+
|
136
|
+
if option[:nda_color]
|
137
|
+
if option[:fill_value]
|
138
|
+
nda = "--nda=" + [option[:fill_value], option[:nda_color]].join(',')
|
139
|
+
else
|
140
|
+
nda = "--nda=" + ["Infinity", option[:nda_color]].join(',')
|
141
|
+
end
|
142
|
+
else
|
143
|
+
nda = ""
|
144
|
+
end
|
145
|
+
|
146
|
+
if option[:scale]
|
147
|
+
scale = "--scale=" + option[:scale].join(',')
|
148
|
+
else
|
149
|
+
scale = ''
|
150
|
+
end
|
151
|
+
|
152
|
+
if option[:align]
|
153
|
+
if option[:align].last.kind_of?(String)
|
154
|
+
align = "--align=" + option[:align][0..-2].join('x')
|
155
|
+
"," + option[:align].last
|
156
|
+
else
|
157
|
+
align = "--align=" + option[:align].join('x')
|
158
|
+
end
|
159
|
+
else
|
160
|
+
align = ''
|
161
|
+
end
|
162
|
+
|
163
|
+
if option[:colorbox]
|
164
|
+
if option[:cbox_tics]
|
165
|
+
colorbox = "--colorbox=" + option[:cbox_tics].to_s
|
166
|
+
else
|
167
|
+
colorbox = "--colorbox"
|
168
|
+
end
|
169
|
+
else
|
170
|
+
colorbox = ""
|
171
|
+
end
|
172
|
+
|
173
|
+
if option[:cbox_format]
|
174
|
+
cbox_format = option[:cbox_format]
|
175
|
+
else
|
176
|
+
cbox_format = ""
|
177
|
+
end
|
178
|
+
|
179
|
+
if option[:cbox_label]
|
180
|
+
cbox_label = option[:cbox_label]
|
181
|
+
else
|
182
|
+
cbox_label = ""
|
183
|
+
end
|
184
|
+
|
185
|
+
geom = lambda{|x,y|
|
186
|
+
[ (x > 0 ? "+" : '') + x.to_s, (y > 0 ? '+' :'') + y.to_s].join
|
187
|
+
}
|
188
|
+
|
189
|
+
label = ""
|
190
|
+
if option[:label]
|
191
|
+
option[:label].each do |x, y, s|
|
192
|
+
label << "--label=" + [geom[x, y],s].join(',') + " "
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
vlabel = ""
|
197
|
+
if option[:vlabel]
|
198
|
+
option[:vlabel].each do |x, y, s|
|
199
|
+
vlabel << "--vlabel=" + [geom[x, y],s].join(',') + " "
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
if option[:textfont]
|
204
|
+
textfont = "--font=" + option[:textfont].to_s
|
205
|
+
else
|
206
|
+
textfont = ""
|
207
|
+
end
|
208
|
+
|
209
|
+
if option[:textcolor]
|
210
|
+
textcolor = "--textcolor=" + option[:textcolor].to_s
|
211
|
+
else
|
212
|
+
textcolor = ""
|
213
|
+
end
|
214
|
+
|
215
|
+
case option[:smooth]
|
216
|
+
when Numeric
|
217
|
+
smooth = "--smooth=" + option[:smooth].to_s
|
218
|
+
else
|
219
|
+
if option[:smooth]
|
220
|
+
smooth = "--smooth"
|
221
|
+
else
|
222
|
+
smooth = ""
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
command = [
|
227
|
+
"zimg",
|
228
|
+
"--output=#{output}",
|
229
|
+
outfmt,
|
230
|
+
interlace,
|
231
|
+
type_spec,
|
232
|
+
"--size=" + self.dim.reverse.join(","),
|
233
|
+
scale,
|
234
|
+
align,
|
235
|
+
colormap,
|
236
|
+
option[:invert] ? "--invert" : "",
|
237
|
+
crange,
|
238
|
+
nda,
|
239
|
+
colorbox,
|
240
|
+
cbox_label,
|
241
|
+
cbox_format,
|
242
|
+
label,
|
243
|
+
vlabel,
|
244
|
+
textfont,
|
245
|
+
textcolor,
|
246
|
+
smooth,
|
247
|
+
tempfile
|
248
|
+
].join(" ")
|
249
|
+
|
250
|
+
if option[:nda_color] and self.has_mask?
|
251
|
+
if option[:fill_value]
|
252
|
+
out = self.unmask(option[:fill_value])
|
253
|
+
else
|
254
|
+
out = self.unmask(nan)
|
255
|
+
end
|
256
|
+
else
|
257
|
+
out = self
|
258
|
+
end
|
259
|
+
|
260
|
+
open(tempfile, "w"){ |io|
|
261
|
+
out.dump_binary(io)
|
262
|
+
}
|
263
|
+
|
264
|
+
if option[:debug]
|
265
|
+
puts command
|
266
|
+
end
|
267
|
+
|
268
|
+
if option[:output]
|
269
|
+
system(command)
|
270
|
+
case option[:display]
|
271
|
+
when String
|
272
|
+
system([option[:display], output].join(" "))
|
273
|
+
else
|
274
|
+
if option[:display]
|
275
|
+
system(["display", output].join(" "))
|
276
|
+
end
|
277
|
+
end
|
278
|
+
else
|
279
|
+
case option[:display]
|
280
|
+
when String
|
281
|
+
system(command + ["|", option[:display], "-"].join(" "))
|
282
|
+
else
|
283
|
+
if option[:display]
|
284
|
+
system(command + ["|", "display -"].join(" "))
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
ensure
|
290
|
+
if File.exist?(tempfile)
|
291
|
+
File.unlink(tempfile)
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
end
|
296
|
+
|