ruby-netcdf 0.7.1 → 0.8.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 +5 -13
- data/.ChangeLog.until20150117 +447 -0
- data/.gitignore +4 -6
- data/ChangeLog +392 -383
- data/LICENSE.txt +32 -57
- data/Rakefile +36 -1
- data/{extconf.rb → ext/numru/extconf.rb} +2 -2
- data/{netcdfraw.c → ext/numru/netcdfraw.c} +318 -320
- data/lib/numru/netcdf/version.rb +7 -0
- data/lib/numru/netcdf.rb +806 -0
- data/lib/{netcdf_miss.rb → numru/netcdf_miss.rb} +0 -0
- data/ruby-netcdf-bigmem.gemspec +29 -0
- data/ruby-netcdf.gemspec +8 -13
- data/test/aref_aset.rb +63 -33
- data/test/char_var.rb +32 -21
- data/test/clone.rb +46 -51
- data/test/create_tmp.rb +17 -13
- data/test/def_var_with_dim.rb +29 -11
- data/test/factor_offset.rb +77 -46
- data/test/putatt.rb +71 -49
- data/test/test.rb +197 -190
- data/test/type.rb +27 -11
- metadata +37 -24
- data/.rspec +0 -2
- data/.travis.yml +0 -3
- data/bin/console +0 -14
- data/bin/setup +0 -7
- data/lib/netcdf.rb +0 -808
- data/lib/version.rb +0 -5
File without changes
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'numru/netcdf/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ruby-netcdf-bigmem"
|
8
|
+
spec.version = NumRu::NetCDF::VERSION
|
9
|
+
spec.authors = ["Takeshi Horinouchi", "Tsuyoshi Koshiro",\
|
10
|
+
"Shigenori Otsuka", "Seiya Nishizawa", "T Sakakima"]
|
11
|
+
spec.email = ['eriko@gfd-dennou.org']
|
12
|
+
|
13
|
+
spec.summary = %q{Ruby interface to NetCDF}
|
14
|
+
spec.description = %q{RubyNetCDF is the Ruby interface to the NetCDF library built on the NArray library, which is an efficient multi-dimensional numeric array class for Ruby. This version works with Ruby2.0.}
|
15
|
+
|
16
|
+
spec.homepage = 'http://www.gfd-dennou.org/arch/ruby/products/ruby-netcdf/'
|
17
|
+
spec.licenses = ["BSD-2-Clause"]
|
18
|
+
|
19
|
+
spec.files = `git ls-files -z`.split("\x0")
|
20
|
+
spec.test_files = spec.files.grep(%r{^(test|demo)/})
|
21
|
+
spec.require_paths = ["ext","lib"]
|
22
|
+
spec.extensions << "ext/numru/extconf.rb"
|
23
|
+
|
24
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 1.8")
|
25
|
+
spec.add_runtime_dependency(%q<narray-bigmem>, [">= 0"])
|
26
|
+
spec.add_runtime_dependency(%q<narray_miss-bigmem>, [">= 0"])
|
27
|
+
spec.add_development_dependency "test-unit"
|
28
|
+
|
29
|
+
end
|
data/ruby-netcdf.gemspec
CHANGED
@@ -1,34 +1,29 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'version'
|
4
|
+
require 'numru/netcdf/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "ruby-netcdf"
|
8
|
-
spec.version =
|
8
|
+
spec.version = NumRu::NetCDF::VERSION
|
9
9
|
spec.authors = ["Takeshi Horinouchi", "Tsuyoshi Koshiro",\
|
10
10
|
"Shigenori Otsuka", "Seiya Nishizawa", "T Sakakima"]
|
11
11
|
spec.email = ['eriko@gfd-dennou.org']
|
12
12
|
|
13
|
-
#if spec.respond_to?(:metadata)
|
14
|
-
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
15
|
-
#end
|
16
|
-
|
17
13
|
spec.summary = %q{Ruby interface to NetCDF}
|
18
|
-
spec.description = %q{RubyNetCDF is the Ruby interface to the NetCDF library built on the NArray library, which is an efficient multi-dimensional numeric array class for Ruby.}
|
14
|
+
spec.description = %q{RubyNetCDF is the Ruby interface to the NetCDF library built on the NArray library, which is an efficient multi-dimensional numeric array class for Ruby. This version works with Ruby2.0.}
|
19
15
|
|
20
16
|
spec.homepage = 'http://www.gfd-dennou.org/arch/ruby/products/ruby-netcdf/'
|
21
|
-
spec.licenses = ["
|
17
|
+
spec.licenses = ["BSD-2-Clause"]
|
22
18
|
|
23
19
|
spec.files = `git ls-files -z`.split("\x0")
|
24
20
|
spec.test_files = spec.files.grep(%r{^(test|demo)/})
|
25
|
-
|
26
|
-
|
27
|
-
spec.require_paths = ["lib"]
|
21
|
+
spec.require_paths = ["ext","lib"]
|
22
|
+
spec.extensions << "ext/numru/extconf.rb"
|
28
23
|
|
29
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 1.
|
24
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 1.8")
|
30
25
|
spec.add_runtime_dependency(%q<narray>, [">= 0"])
|
31
26
|
spec.add_runtime_dependency(%q<narray_miss>, [">= 0"])
|
27
|
+
spec.add_development_dependency "test-unit"
|
32
28
|
|
33
|
-
spec.extensions << "extconf.rb"
|
34
29
|
end
|
data/test/aref_aset.rb
CHANGED
@@ -1,37 +1,67 @@
|
|
1
|
+
require 'test/unit'
|
1
2
|
require 'numru/netcdf'
|
2
3
|
include NumRu
|
3
|
-
s = 'tmp.nc'
|
4
|
-
f = NetCDF.create(s)
|
5
|
-
f.redef
|
6
|
-
dx = f.def_dim('x',5)
|
7
|
-
dy = f.def_dim('y',3)
|
8
|
-
v = f.def_var('x','sfloat',[dx])
|
9
|
-
v2 = f.def_var('x2',NArray::SFLOAT,[dx])
|
10
|
-
vxy = f.def_var('xy','sfloat',[dx,dy])
|
11
|
-
f.enddef
|
12
|
-
v.put([1,2,3,4,5])
|
13
|
-
p 'testing []= ...'
|
14
|
-
v[{0..3=>2}]=[100,500]
|
15
|
-
v[1]=999
|
16
|
-
v[3..4]=[-99,-99]
|
17
|
-
v2.put(666)
|
18
|
-
v2[0..2]=777
|
19
|
-
vxy.put(NArray.sfloat(5,3).indgen!)
|
20
|
-
vxy[[2,0],[0,2,1]] = [[1,2],[3,4],[5,6]]
|
21
|
-
vxy[1,[2,0,1]] = [10,20,30]
|
22
|
-
vxy[[4,3],2] = [100,200]
|
23
4
|
|
24
|
-
|
5
|
+
class TestArefAset < Test::Unit::TestCase
|
6
|
+
def startup # call once before tests
|
7
|
+
end
|
8
|
+
def setup # call before each test
|
9
|
+
@s = 'tmp.nc'
|
10
|
+
end
|
11
|
+
def teardown # call after each test
|
12
|
+
end
|
13
|
+
def shutdown # call once after tests
|
14
|
+
end
|
25
15
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
vxy = f.
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
16
|
+
def test_netcdf_create
|
17
|
+
f = NetCDF.create(@s)
|
18
|
+
f.redef
|
19
|
+
dx = f.def_dim('x',5)
|
20
|
+
dy = f.def_dim('y',3)
|
21
|
+
v = f.def_var('x','sfloat',[dx])
|
22
|
+
v2 = f.def_var('x2',NArray::SFLOAT,[dx])
|
23
|
+
vxy = f.def_var('xy','sfloat',[dx,dy])
|
24
|
+
f.enddef
|
25
|
+
v.put([1,2,3,4,5])
|
26
|
+
v[{0..3=>2}]=[100,500]
|
27
|
+
v[1]=999
|
28
|
+
v[3..4]=[-99,-99]
|
29
|
+
v2.put(666)
|
30
|
+
v2[0..2]=777
|
31
|
+
vxy.put(NArray.sfloat(5,3).indgen!)
|
32
|
+
vxy[[2,0],[0,2,1]] = [[1,2],[3,4],[5,6]]
|
33
|
+
vxy[1,[2,0,1]] = [10,20,30]
|
34
|
+
vxy[[4,3],2] = [100,200]
|
35
|
+
f.close
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_netcdf_open
|
39
|
+
unless File.exist?(@s)
|
40
|
+
test_netcdf_create
|
41
|
+
else
|
42
|
+
f = NetCDF.open(@s)
|
43
|
+
v = f.var('x')
|
44
|
+
assert_equal v[{0..3=>2}], NArray[100.0,500.0].to_f
|
45
|
+
assert_equal v[1], NArray[999.0].to_f
|
46
|
+
assert_equal v[3..4], NArray[-99.0,-99.0].to_f
|
47
|
+
assert_equal v.rank, 1
|
48
|
+
assert_equal v[[2,0,0]], NArray[500.0,100.0,100.0].to_f
|
49
|
+
vxy = f.var('xy')
|
50
|
+
assert_equal vxy[[2,0],[0,2,1]],
|
51
|
+
NArray[[1.0,2.0],[3.0,4.0],[5.0,6.0]].to_f
|
52
|
+
assert_equal vxy[1,[2,0,1]],
|
53
|
+
NArray[10.0,20.0,30.0].to_f
|
54
|
+
assert_equal vxy[[4,3],2],
|
55
|
+
NArray[100.0,200.0].to_f
|
56
|
+
f.close
|
57
|
+
end
|
58
|
+
if File.exist?(@s)
|
59
|
+
begin
|
60
|
+
File.delete(@s)
|
61
|
+
rescue
|
62
|
+
p $!
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
data/test/char_var.rb
CHANGED
@@ -1,25 +1,36 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'test/unit'
|
3
2
|
require 'numru/netcdf'
|
4
3
|
include NumRu
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
f.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
tv.put( NArray.to_na("
|
15
|
-
|
16
|
-
|
17
|
-
f
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
4
|
+
class TestCharVar < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@s = 'tmp.nc'
|
7
|
+
f = NetCDF.create(@s)
|
8
|
+
d = f.def_dim('x',5)
|
9
|
+
v = f.def_var('x','char',[d])
|
10
|
+
tv = f.def_var('text','char',[d])
|
11
|
+
f.enddef
|
12
|
+
v.put( NArray.byte(5).indgen! )
|
13
|
+
tv.put( NArray.to_na("hello","byte",5) )
|
14
|
+
tv.put( NArray.to_na("LO","byte",2), 'start'=>[3] )
|
15
|
+
tv.put( NArray.to_na("H","byte",1), 'index'=>[0] )
|
16
|
+
f.close
|
17
|
+
end
|
18
|
+
def teardown
|
19
|
+
if File.exist?(@s)
|
20
|
+
begin
|
21
|
+
File.delete(@s)
|
22
|
+
rescue
|
23
|
+
p $!
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
24
27
|
|
28
|
+
def test_char_var
|
29
|
+
f = NetCDF.open(@s)
|
30
|
+
v = f.var('x')
|
31
|
+
assert_equal v.get, NArray.byte(5).indgen!
|
32
|
+
tv = f.var('text')
|
33
|
+
assert_equal tv.get.to_s, "HelLO"
|
34
|
+
end
|
25
35
|
|
36
|
+
end
|
data/test/clone.rb
CHANGED
@@ -1,54 +1,49 @@
|
|
1
|
+
require 'test/unit'
|
1
2
|
require 'numru/netcdf'
|
2
3
|
include NumRu
|
3
|
-
s = 'tmp.nc'
|
4
|
-
#f = NetCDF.new(s,'rw')
|
5
|
-
f = NetCDF.create(s)
|
6
|
-
f.redef
|
7
|
-
d = f.def_dim('x',3)
|
8
|
-
v = f.def_var('x','sfloat',[d])
|
9
|
-
a = f.put_att('long_name','xx')
|
10
|
-
f.enddef
|
11
|
-
v.put([1,2,3])
|
12
|
-
f.taint
|
13
|
-
f.freeze
|
14
|
-
f2 = f.clone
|
15
|
-
p 'netcdf clone'
|
16
|
-
p f.path, f2.path
|
17
|
-
p f.tainted?, f2.tainted?, f.frozen?, f2.frozen?
|
18
|
-
|
19
|
-
p 'netcdf dup'
|
20
|
-
f3 = f.dup
|
21
|
-
p f.tainted?, f3.tainted?, f.frozen?, f3.frozen?
|
22
|
-
|
23
|
-
p 'netcdfdim'
|
24
|
-
d.taint
|
25
|
-
d2 = d.clone
|
26
|
-
d3 = d.dup
|
27
|
-
p d.tainted?, d2.tainted?, d3.tainted?
|
28
|
-
|
29
|
-
p 'netcdfvar'
|
30
|
-
v.taint
|
31
|
-
v2 = v.clone
|
32
|
-
v3 = v.dup
|
33
|
-
p v.tainted?, v2.tainted?, v3.tainted?
|
34
|
-
|
35
|
-
p 'netcdfatt'
|
36
|
-
a.taint
|
37
|
-
a2 = a.clone
|
38
|
-
a3 = a.dup
|
39
|
-
p a.tainted?, a2.tainted?, a3.tainted?
|
40
|
-
|
41
|
-
f.close
|
42
|
-
|
43
|
-
p 'narray (for reference)'
|
44
|
-
a = NArray.float(3)
|
45
|
-
a.taint
|
46
|
-
b = a.clone
|
47
|
-
p a.tainted?, b.tainted?
|
48
|
-
b = a.dup
|
49
|
-
p a.tainted?, b.tainted?
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
4
|
|
5
|
+
class TestClone < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@s = 'tmp.nc'
|
8
|
+
@f = NetCDF.create(@s)
|
9
|
+
@f.redef
|
10
|
+
@d = @f.def_dim('x',3)
|
11
|
+
@v = @f.def_var('x','sfloat',[@d])
|
12
|
+
@a = @f.put_att('long_name','xx')
|
13
|
+
@f.enddef
|
14
|
+
@v.put([1,2,3])
|
15
|
+
@f.freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
@f.close
|
20
|
+
if File.exist?(@s)
|
21
|
+
begin
|
22
|
+
File.delete(@s)
|
23
|
+
rescue
|
24
|
+
p $!
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_clone_netcdf_path
|
30
|
+
f = @f.clone
|
31
|
+
assert_equal @f.path, f.path
|
32
|
+
assert(@f.frozen? == f.frozen?)
|
33
|
+
d = @d.clone
|
34
|
+
assert_equal @d, d
|
35
|
+
v = @v.clone
|
36
|
+
assert_equal @v, v
|
37
|
+
a = @a.clone
|
38
|
+
assert_equal @a, a
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_clone_netcdf_dup
|
42
|
+
f = @f.dup
|
43
|
+
assert(@f.frozen? != f.frozen?)
|
44
|
+
# d = @d.dup
|
45
|
+
# v = @v.dup
|
46
|
+
# a = @a.dup
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/test/create_tmp.rb
CHANGED
@@ -1,15 +1,19 @@
|
|
1
|
+
require 'test/unit'
|
1
2
|
require 'numru/netcdf'
|
2
|
-
|
3
|
-
$DEBUG = true
|
4
3
|
include NumRu
|
5
|
-
|
6
|
-
|
7
|
-
file
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
4
|
+
class CreateTMP < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@file = NetCDF.create_tmp
|
7
|
+
@file.def_dim('x',5)
|
8
|
+
@file.put_att("history", __FILE__ )
|
9
|
+
end
|
10
|
+
def teardown
|
11
|
+
@file.close
|
12
|
+
GC.start
|
13
|
+
end
|
14
|
+
def test_create_tmp
|
15
|
+
assert_equal @file.att("history").get, __FILE__
|
16
|
+
# print "environment variable TEMP ="+(ENV['TEMP'] || '')+"\n"
|
17
|
+
# file2 = @file
|
18
|
+
end
|
19
|
+
end
|
data/test/def_var_with_dim.rb
CHANGED
@@ -1,14 +1,32 @@
|
|
1
|
+
require 'test/unit'
|
1
2
|
require 'numru/netcdf'
|
2
3
|
include NumRu
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
file.
|
4
|
+
class TestDefVarWithDim < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@fname = "tmp.nc"
|
7
|
+
@file = NetCDF.create(@fname)
|
8
|
+
@var1 = @file.def_var_with_dim("var1","sfloat",[6],["x"])
|
9
|
+
@var2 = @file.def_var_with_dim("var2","sfloat",[6,3],["x","y"])
|
10
|
+
@var3 = @file.def_var_with_dim("var3","sfloat",[3],["y"])
|
11
|
+
@var3 = @file.def_var_with_dim("var4","sfloat",[0],["t"])
|
12
|
+
@att = @var1.put_att("long_name","test")
|
13
|
+
@file.close
|
14
|
+
end
|
15
|
+
def teardown
|
16
|
+
if File.exist?(@fname)
|
17
|
+
begin
|
18
|
+
File.delete(@fname)
|
19
|
+
rescue
|
20
|
+
p $!
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
10
24
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
25
|
+
def test_def_var_with_dim
|
26
|
+
assert_not_nil @var1
|
27
|
+
assert_not_nil @var2
|
28
|
+
assert_not_nil @var3
|
29
|
+
assert_not_nil @file
|
30
|
+
assert_not_nil @att
|
31
|
+
end
|
32
|
+
end
|
data/test/factor_offset.rb
CHANGED
@@ -1,53 +1,84 @@
|
|
1
|
+
require 'test/unit'
|
1
2
|
require 'numru/netcdf'
|
2
3
|
include NumRu
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
class TestFactorOffset < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@s = 'tmp.nc'
|
8
|
+
f = NetCDF.create(@s)
|
9
|
+
nx = 10
|
10
|
+
d = f.def_dim('x',nx)
|
11
|
+
v1 = f.def_var('v1','sint',[d])
|
12
|
+
v2 = f.def_var('v2','sint',[d])
|
13
|
+
v3 = f.def_var('v3','int',[d])
|
14
|
+
v1.put_att('scale_factor',0.1,'sfloat')
|
15
|
+
v1.put_att('add_offset',100.0,'sfloat')
|
16
|
+
v2.put_att('scale_factor',0.1,'sfloat')
|
17
|
+
v2.put_att('add_offset',100.0,'sfloat')
|
18
|
+
v3.put_att('scale_factor',0.1,'sfloat')
|
19
|
+
v3.put_att('add_offset',100.0,'sfloat')
|
20
|
+
f.enddef
|
21
|
+
v1.put( NArray.sint(nx).indgen!+100 )
|
22
|
+
v2.scaled_put( NArray.float(nx).indgen!+100 )
|
23
|
+
v3.scaled_put( NArray.float(nx).indgen!+100 )
|
24
|
+
f.close
|
25
|
+
end
|
6
26
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
f.
|
19
|
-
v1.
|
20
|
-
|
21
|
-
|
22
|
-
|
27
|
+
def teardown
|
28
|
+
if File.exist?(@s)
|
29
|
+
begin
|
30
|
+
File.delete(@s)
|
31
|
+
rescue
|
32
|
+
p $!
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
def test_originally_uscaled
|
37
|
+
f = NetCDF.open(@s)
|
38
|
+
v1 = f.var('v1')
|
39
|
+
v11 = v1.get
|
40
|
+
assert_equal v11,
|
41
|
+
NArray[ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109 ].to_i
|
42
|
+
v12 = v1.scaled_get
|
43
|
+
assert_equal v12,
|
44
|
+
NArray[ 110.0, 110.1, 110.2, 110.3, 110.4, 110.5, 110.6, 110.7, 110.8, 110.9 ].to_type(NArray::SFLOAT)
|
45
|
+
f.close
|
46
|
+
end
|
23
47
|
|
48
|
+
def test_originally_scaled
|
49
|
+
f = NetCDF.open(@s)
|
50
|
+
v2 = f.var('v2')
|
51
|
+
v21 = v2.get
|
52
|
+
assert_equal v21,
|
53
|
+
NArray[ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 ].to_i
|
54
|
+
v22 = v2.scaled_get
|
55
|
+
assert_equal v22,
|
56
|
+
NArray[ 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0 ].to_type(NArray::SFLOAT)
|
57
|
+
f.close
|
58
|
+
end
|
24
59
|
|
25
|
-
|
26
|
-
f = NetCDF.open(s)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
60
|
+
def test_originally_scaled_int_to_double
|
61
|
+
f = NetCDF.open(@s)
|
62
|
+
v3 = f.var('v3')
|
63
|
+
v31 = v3.get
|
64
|
+
assert_equal v31,
|
65
|
+
NArray[ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 ].to_i
|
66
|
+
v32 = v3.scaled_get
|
67
|
+
assert_equal v32,
|
68
|
+
NArray[ 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0 ].to_type(NArray::SFLOAT)
|
69
|
+
f.close
|
70
|
+
end
|
32
71
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
print "** unpack type fixed to sfloat\n"
|
48
|
-
NetCDFVar.unpack_type = NArray::SFLOAT
|
49
|
-
v33 = v3.scaled_get
|
50
|
-
p v33
|
51
|
-
NetCDFVar.unpack_type = NArray::INT
|
52
|
-
v33 = v3.scaled_get
|
53
|
-
p v33
|
72
|
+
def test_unpack_type_fixed_to_sfloat
|
73
|
+
f = NetCDF.open(@s)
|
74
|
+
v3 = f.var('v3')
|
75
|
+
NetCDFVar.unpack_type = NArray::SFLOAT
|
76
|
+
v33 = v3.scaled_get
|
77
|
+
assert_equal v33,
|
78
|
+
NArray[ 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0 ].to_type(NArray::SFLOAT)
|
79
|
+
NetCDFVar.unpack_type = NArray::INT
|
80
|
+
v33 = v3.scaled_get
|
81
|
+
assert_equal v33,
|
82
|
+
NArray[ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109 ].to_i
|
83
|
+
end
|
84
|
+
end
|
data/test/putatt.rb
CHANGED
@@ -1,56 +1,78 @@
|
|
1
|
+
require 'test/unit'
|
1
2
|
require 'numru/netcdf'
|
2
|
-
include NumRu
|
3
|
-
s = 'tmp.nc'
|
4
|
-
f = NetCDF.create(s)
|
5
|
-
d = f.def_dim('x',5)
|
6
|
-
v = f.def_var('x','sfloat',[d])
|
7
|
-
|
8
3
|
require 'date'
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
4
|
+
include NumRu
|
5
|
+
class TestPutAttr < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@s = 'tmp.nc'
|
8
|
+
@f = NetCDF.create(@s)
|
9
|
+
@d = @f.def_dim('x',5)
|
10
|
+
@v = @f.def_var('x','sfloat',[@d])
|
11
|
+
end
|
12
|
+
def teardown
|
13
|
+
@f.close
|
14
|
+
if File.exist?(@s)
|
15
|
+
begin
|
16
|
+
File.delete(@s)
|
17
|
+
rescue
|
18
|
+
p $!
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
def test_att_history_get
|
23
|
+
att = @f.put_att("history", Date.today.to_s )
|
24
|
+
assert_equal att.get,
|
25
|
+
@f.att("history").get
|
26
|
+
end
|
27
|
+
def test_att_int_att_get
|
28
|
+
att = @f.put_att("int_att",123)
|
29
|
+
att = @f.put_att("sfloat_att",1.0/3.0,'sfloat')
|
30
|
+
att = @f.put_att("sfloat_att2",2.0/3.0,NArray::SFLOAT)
|
31
|
+
att = @v.put_att("long_name",'test variable')
|
32
|
+
att = @v.put_att("int_att",123)
|
33
|
+
assert_equal att.get,
|
34
|
+
@v.att("int_att").get
|
35
|
+
end
|
38
36
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
37
|
+
def test_att_changed_to_text
|
38
|
+
att = @v.put_att("float_att",1.0/3.0)
|
39
|
+
att = @v.put_att("float_array",[0.1, 0.2, 30])
|
40
|
+
tmp = NArray.sfloat(3).indgen!
|
41
|
+
tmp = tmp/3
|
42
|
+
att = @v.put_att("sfloat_narray",tmp)
|
43
|
+
att = @v.put_att("float_narray",NArray.float(3).indgen!)
|
44
|
+
att = @v.put_att("sint_narray",NArray.sint(3).indgen!)
|
45
|
+
att = @v.put_att("int2float",10,'float')
|
46
|
+
att = att = @v.put_att("dummy",10,'float')
|
47
|
+
assert att.put('changed to text')
|
48
|
+
att.name = 'changed'
|
49
|
+
end
|
45
50
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
51
|
+
def test_destined_to_fail_complex
|
52
|
+
assert_raise(NetcdfError) do
|
53
|
+
@v.put_att("destined_to_fail", 9.8, 'complex')
|
54
|
+
# "unsupported type. code = 7"
|
55
|
+
end
|
56
|
+
end
|
52
57
|
|
58
|
+
def test_destined_to_fail_string
|
59
|
+
assert_raise(ArgumentError) do
|
60
|
+
@v.put_att("destined_to_fail", 9.8, 'string')
|
61
|
+
# Unrecognized NArray type>
|
62
|
+
end
|
63
|
+
end
|
53
64
|
|
54
|
-
|
65
|
+
def test_destined_to_fail_int
|
66
|
+
assert_raise(NetcdfError) do
|
67
|
+
@v.put_att("destined_to_fail", 'hello', 'int')
|
68
|
+
# attribute type must be 'char' (or nil) for a String value
|
69
|
+
end
|
70
|
+
end
|
55
71
|
|
56
|
-
|
72
|
+
def test_destined_to_fail_mixed_array
|
73
|
+
assert_raise(TypeError) do
|
74
|
+
@v.put_att("destined_to_fail",[10,30,'sss'])
|
75
|
+
# no implicit conversion of String into Integer
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|