carray 1.1.7 → 1.1.8
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/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
|
+
|