ruby-netcdf 0.7.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|