mdarray 0.5.3-java → 0.5.4-java
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.
- data/README.md +325 -70
- data/doc/20130625 MDArray Internals.docx +0 -0
- data/lib/colt/colt.rb +2 -0
- data/lib/colt/matrix/colt_matrix.rb +365 -0
- data/lib/colt/matrix/matrix2D_floating_algebra.rb +325 -0
- data/lib/colt/matrix/matrix_hierarchy.rb +258 -0
- data/lib/mdarray.rb +54 -3
- data/lib/mdarray/access.rb +16 -0
- data/lib/mdarray/counter.rb +16 -0
- data/lib/mdarray/creation.rb +13 -1
- data/lib/mdarray/lazy_mdarray.rb +6 -2
- data/lib/mdarray/lazy_operators.rb +8 -0
- data/lib/mdarray/printing.rb +18 -3
- data/lib/mdarray/section.rb +101 -0
- data/lib/netcdf/attribute.rb +154 -0
- data/lib/netcdf/cdm_node.rb +71 -0
- data/lib/netcdf/dimension.rb +146 -0
- data/lib/netcdf/file.rb +253 -0
- data/lib/netcdf/file_writer.rb +474 -0
- data/lib/netcdf/group.rb +205 -0
- data/lib/netcdf/netcdf.rb +151 -0
- data/lib/netcdf/variable.rb +520 -0
- data/test/colt/test_complete.rb +1 -2
- data/test/colt/test_double_matrix2d.rb +186 -0
- data/test/colt/test_float_matrix2d.rb +171 -0
- data/test/colt/test_math.rb +21 -0
- data/test/colt/test_matrix.rb +172 -0
- data/test/complete.rb +9 -1
- data/test/env.rb +11 -1
- data/test/mdarray/test_complete.rb +2 -0
- data/test/mdarray/test_creation.rb +19 -28
- data/test/mdarray/test_non_numeric.rb +97 -0
- data/test/mdarray/test_sections.rb +94 -0
- data/test/mdarray/test_views.rb +23 -1
- data/test/netcdf/netcdfwriter.rb +197 -0
- data/test/netcdf/test_complete.rb +27 -0
- data/test/netcdf/test_netcdf.rb +331 -0
- data/test/netcdf/test_redefine.rb +120 -0
- data/vendor/incanter.jar +0 -0
- data/vendor/{netcdfAll-4.3.16.jar → netcdfAll-4.3.18.jar} +0 -0
- data/version.rb +1 -1
- metadata +44 -26
- data/vendor/parallelcolt-0.10.0.jar +0 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
##########################################################################################
|
4
|
+
# Copyright © 2013 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
5
|
+
# and distribute this software and its documentation, without fee and without a signed
|
6
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
7
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
8
|
+
# distributions.
|
9
|
+
#
|
10
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
11
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
12
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
13
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
14
|
+
#
|
15
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
16
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
17
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
18
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
19
|
+
# OR MODIFICATIONS.
|
20
|
+
##########################################################################################
|
21
|
+
|
22
|
+
Dir.mkdir($TMP_TEST_DIR) unless File.exists?($TMP_TEST_DIR)
|
23
|
+
|
24
|
+
#=begin
|
25
|
+
require_relative 'test_netcdf'
|
26
|
+
require_relative 'netcdfwriter'
|
27
|
+
#=end
|
@@ -0,0 +1,331 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
##########################################################################################
|
4
|
+
# Copyright © 2013 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
5
|
+
# and distribute this software and its documentation, without fee and without a signed
|
6
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
7
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
8
|
+
# distributions.
|
9
|
+
#
|
10
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
11
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
12
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
13
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
14
|
+
#
|
15
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
16
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
17
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
18
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
19
|
+
# OR MODIFICATIONS.
|
20
|
+
##########################################################################################
|
21
|
+
|
22
|
+
require 'rubygems'
|
23
|
+
require "test/unit"
|
24
|
+
require 'shoulda'
|
25
|
+
|
26
|
+
require 'mdarray'
|
27
|
+
|
28
|
+
class MDArrayTest < Test::Unit::TestCase
|
29
|
+
|
30
|
+
context "NetCDF implementation" do
|
31
|
+
|
32
|
+
setup do
|
33
|
+
|
34
|
+
@directory = $TMP_TEST_DIR
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
#-------------------------------------------------------------------------------------
|
39
|
+
#
|
40
|
+
#-------------------------------------------------------------------------------------
|
41
|
+
|
42
|
+
should "Allow definition of a NetCDF-3 file" do
|
43
|
+
|
44
|
+
# Opens a file for definition, passing the directory and file name.
|
45
|
+
# Creates a new scope for defining the NetCDF file. In order to access the
|
46
|
+
# ouside scope, that is, "here", we pass self as the third argument to define.
|
47
|
+
# When self is passed as argument, @outside_scope is available inside the block.
|
48
|
+
# NetCDF.define block is in define mode, so it is not possible to write data in
|
49
|
+
# this block. We need to open a new block with NetCDF.write for writing. The
|
50
|
+
# cost of doing this is that we close the file at the end of the define block and
|
51
|
+
# need to reopen the file for writing. However, since we probably only define the
|
52
|
+
# file once and write many times, this is not much of a problem. If one prefers,
|
53
|
+
# one could not use the define block and use the normal APIs.
|
54
|
+
|
55
|
+
NetCDF.define(cygpath(@directory), "nc_output", "netcdf3", self) do
|
56
|
+
|
57
|
+
#=================================================================================
|
58
|
+
# Add global attributes by adding a single valued attribute or an array of
|
59
|
+
# attributes. When adding an array of attributes all elements of the array must
|
60
|
+
# be of the same type, i.e, fixnum, floats or strings. Attributes with long numbers
|
61
|
+
# are not allowed. This seems to be a restriction of Java-NetCDF.
|
62
|
+
#
|
63
|
+
# Note that the attribute name can be used to make access to the attribute, for
|
64
|
+
# instance, on the first example "Values" can be accessed as @value later on.
|
65
|
+
#=================================================================================
|
66
|
+
|
67
|
+
global_att "Fixnum", 3
|
68
|
+
@outside_scope.assert_equal(3, @ga_fixnum.numeric_value)
|
69
|
+
|
70
|
+
global_att "Float", 3.45, "float"
|
71
|
+
@outside_scope.assert_equal("float", @ga_float.data_type)
|
72
|
+
|
73
|
+
global_att "Double", 3.45, "double"
|
74
|
+
@outside_scope.assert_equal("double", @ga_double.data_type)
|
75
|
+
|
76
|
+
global_att "Int", 3.45
|
77
|
+
@outside_scope.assert_equal("int", @ga_int.data_type)
|
78
|
+
|
79
|
+
global_att "Byte", 3, "byte"
|
80
|
+
@outside_scope.assert_equal("byte", @ga_byte.data_type)
|
81
|
+
|
82
|
+
global_att "Short", 3, "short"
|
83
|
+
@outside_scope.assert_equal("short", @ga_short.data_type)
|
84
|
+
|
85
|
+
global_att "String", "this is a string"
|
86
|
+
global_att "Description", "This is a test file created by MDArray"
|
87
|
+
@outside_scope.assert_equal("String", @ga_description.data_type)
|
88
|
+
@outside_scope.assert_equal("Description", @ga_description.name)
|
89
|
+
@outside_scope.assert_equal("This is a test file created by MDArray",
|
90
|
+
@ga_description.string_value)
|
91
|
+
@outside_scope.assert_equal(true, @ga_description.string?)
|
92
|
+
@outside_scope.assert_equal(false, @ga_description.unsigned?)
|
93
|
+
|
94
|
+
global_att "Values", [1, 2, 3, 4], "double"
|
95
|
+
@outside_scope.assert_equal(true, @ga_values.array?)
|
96
|
+
@outside_scope.assert_equal("Values", @ga_values.name)
|
97
|
+
@outside_scope.assert_equal(2.0, @ga_values.numeric_value(1))
|
98
|
+
|
99
|
+
global_att "Strings", ["abc", "efg"]
|
100
|
+
@outside_scope.assert_equal("abc", @ga_strings.string_value(0))
|
101
|
+
|
102
|
+
global_att "Floats", [1.34, 2.45], "float"
|
103
|
+
|
104
|
+
att = find_global_attribute("Fixnum")
|
105
|
+
@outside_scope.assert_equal("Fixnum", att.name)
|
106
|
+
|
107
|
+
att = find_global_attribute("doesnotexists")
|
108
|
+
@outside_scope.assert_equal(nil, att)
|
109
|
+
|
110
|
+
# print all global attributes
|
111
|
+
global_attributes.each do |att|
|
112
|
+
p att.name
|
113
|
+
end
|
114
|
+
|
115
|
+
#=================================================================================
|
116
|
+
# Adding dimensions
|
117
|
+
#=================================================================================
|
118
|
+
|
119
|
+
dimension "dim1", 5
|
120
|
+
@outside_scope.assert_equal(5, @dim_dim1.length)
|
121
|
+
@outside_scope.assert_equal("dim1", @dim_dim1.name)
|
122
|
+
@outside_scope.assert_equal(true, @dim_dim1.shared?)
|
123
|
+
@outside_scope.assert_equal(false, @dim_dim1.unlimited?)
|
124
|
+
@outside_scope.assert_equal(false, @dim_dim1.variable_length?)
|
125
|
+
|
126
|
+
dimension "dim2", 10
|
127
|
+
@outside_scope.assert_equal(true, @dim_dim2.shared?)
|
128
|
+
|
129
|
+
# create an unlimited dimension by setting the size to 0
|
130
|
+
dimension "dim3", 0
|
131
|
+
@outside_scope.assert_equal(true, @dim_dim3.shared?)
|
132
|
+
@outside_scope.assert_equal(true, @dim_dim3.unlimited?)
|
133
|
+
@outside_scope.assert_equal(false, @dim_dim3.variable_length?)
|
134
|
+
|
135
|
+
# Cannot create a variable_length dimension in NetCDF-3 file. Might
|
136
|
+
# work on NetCDF-4. Not tested.
|
137
|
+
# dimension "dim4", -1
|
138
|
+
# @outside_scope.assert_equal(true, @dim_dim4.variable_length?)
|
139
|
+
|
140
|
+
# Create a dimension that is not shared. Don't know exactly what happens
|
141
|
+
# in NetCDF-3 files. It does not give any bugs but the dimension does
|
142
|
+
# not appear on a write_cdl call.
|
143
|
+
dimension "dim5", 5, false
|
144
|
+
@outside_scope.assert_equal("dim5", @dim_dim5.name)
|
145
|
+
@outside_scope.assert_equal(false, @dim_dim5.shared?)
|
146
|
+
|
147
|
+
#=================================================================================
|
148
|
+
# Adding variables
|
149
|
+
#=================================================================================
|
150
|
+
|
151
|
+
# One dimensional variable
|
152
|
+
variable "arr1", "int", [@dim_dim1]
|
153
|
+
variable_att @var_arr1, "description", "this is a variable"
|
154
|
+
variable_att @var_arr1, "size", 5
|
155
|
+
variable_att @var_arr1, "date", 10
|
156
|
+
variable_att @var_arr1, "String List", ["abc", "def"]
|
157
|
+
variable_att @var_arr1, "Float list", [1.37, 5.18]
|
158
|
+
|
159
|
+
# two dimensional variable string variable is actually a three dimensional
|
160
|
+
# variable. NetCDF-3 does not support string variable, so this variable
|
161
|
+
# is transformed to a "char" variable with one extra dimension, the string
|
162
|
+
# size
|
163
|
+
variable "var3", "int", [@dim_dim3]
|
164
|
+
variable "var4", "string", [@dim_dim3, @dim_dim2]
|
165
|
+
variable "var5", "double", [@dim_dim3, @dim_dim2]
|
166
|
+
|
167
|
+
# controlling the size of the string variable
|
168
|
+
variable "Short", "string", [@dim_dim2], {:max_strlen => 20}
|
169
|
+
@outside_scope.assert_equal("Short", @var_short.name)
|
170
|
+
|
171
|
+
# double variable with fixed size dimensions
|
172
|
+
variable "Double", "double", [@dim_dim1, @dim_dim2]
|
173
|
+
|
174
|
+
# double variable with an unlimited dimension. Unlimited dimension must be the
|
175
|
+
# first dimension in NetCDF-3 files.
|
176
|
+
variable "Double3", "double", [@dim_dim3, @dim_dim1, @dim_dim2]
|
177
|
+
variable_att @var_double3, "_FillValue", -1
|
178
|
+
|
179
|
+
variable "Scalar", "double", []
|
180
|
+
|
181
|
+
#=================================================================================
|
182
|
+
# Add additional flags
|
183
|
+
#=================================================================================
|
184
|
+
|
185
|
+
# set fill to true... all elements should be filled with the fill_value
|
186
|
+
fill = true
|
187
|
+
large_file = true
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
#=begin
|
194
|
+
#-------------------------------------------------------------------------------------
|
195
|
+
# Opens a NetCDF file for writing data
|
196
|
+
#-------------------------------------------------------------------------------------
|
197
|
+
|
198
|
+
should "open a file for writing data" do
|
199
|
+
|
200
|
+
NetCDF.write(cygpath(@directory), "nc_output", self) do
|
201
|
+
|
202
|
+
# create some data to add to variable
|
203
|
+
array = MDArray.typed_arange("double", 0, 50)
|
204
|
+
array2 = MDArray.typed_arange("double", 0, 10)
|
205
|
+
array3 = MDArray.typed_arange("double", 0, 6)
|
206
|
+
string_array = MDArray.string([5], ["this", "is", "a", "string", "array"])
|
207
|
+
|
208
|
+
var = find_variable("Double")
|
209
|
+
@outside_scope.assert_equal("Double", var.name)
|
210
|
+
# reshape the first array to fit the variable shape
|
211
|
+
array.reshape!([5, 10])
|
212
|
+
# Fill variable Double with data. The whole variable gets data
|
213
|
+
write(var, array)
|
214
|
+
|
215
|
+
# writing data only to the last dimension
|
216
|
+
array2.reshape!([1, 10])
|
217
|
+
write(var, array2, [4, 0])
|
218
|
+
|
219
|
+
# writing data to a variable with unlimited dimension. Writing on the third
|
220
|
+
# index of the unlimited dimension. Array needs to be reshaped to the same
|
221
|
+
# shape as the variable
|
222
|
+
var3 = find_variable("Double3")
|
223
|
+
@outside_scope.assert_equal("Double3", var3.name)
|
224
|
+
array.reshape!([1, 5, 10])
|
225
|
+
write(var3, array, [2, 0, 0])
|
226
|
+
|
227
|
+
# adding data to a subsection of the variable
|
228
|
+
array3.reshape!([1, 1, 6])
|
229
|
+
write(var3, array3, [1, 1, 1])
|
230
|
+
|
231
|
+
# reshaping the data in another way
|
232
|
+
array3.reshape!([1, 3, 2])
|
233
|
+
write(var3, array3, [0, 2, 3])
|
234
|
+
|
235
|
+
# writing string data
|
236
|
+
short = find_variable("Short")
|
237
|
+
@outside_scope.assert_equal("Short", short.name)
|
238
|
+
write_string(short, string_array)
|
239
|
+
|
240
|
+
var4 = find_variable("var4")
|
241
|
+
string_array.reshape!([1, 5])
|
242
|
+
@outside_scope.assert_equal("var4", var4.name)
|
243
|
+
write_string(var4, string_array)
|
244
|
+
|
245
|
+
scalar = find_variable("Scalar")
|
246
|
+
@outside_scope.assert_equal("Scalar", scalar.name)
|
247
|
+
write(scalar, 5.34)
|
248
|
+
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
252
|
+
#=end
|
253
|
+
#-------------------------------------------------------------------------------------
|
254
|
+
# Opens a NetCDF file for reading only
|
255
|
+
#-------------------------------------------------------------------------------------
|
256
|
+
#=begin
|
257
|
+
should "open a file just for reading" do
|
258
|
+
|
259
|
+
# Opens a file for definition, passing the directory and file name.
|
260
|
+
# Creates a new scope for defining the NetCDF file. In order to access the
|
261
|
+
# ouside scope, that is, "here", we pass self as the third argument to define.
|
262
|
+
# When self is passed as argument, @outside_scope is available inside the block.
|
263
|
+
|
264
|
+
NetCDF.read(cygpath(@directory), "nc_output", self) do
|
265
|
+
|
266
|
+
# print all global attributes
|
267
|
+
global_attributes.each do |att|
|
268
|
+
p att.name
|
269
|
+
end
|
270
|
+
|
271
|
+
att = find_global_attribute("Fixnum")
|
272
|
+
@outside_scope.assert_equal("Fixnum", att.name)
|
273
|
+
|
274
|
+
# att
|
275
|
+
|
276
|
+
dim1 = find_dimension("dim1")
|
277
|
+
@outside_scope.assert_equal(5, dim1.length)
|
278
|
+
@outside_scope.assert_equal("dim1", dim1.name)
|
279
|
+
@outside_scope.assert_equal(true, dim1.shared?)
|
280
|
+
@outside_scope.assert_equal(false, dim1.unlimited?)
|
281
|
+
@outside_scope.assert_equal(false, dim1.variable_length?)
|
282
|
+
|
283
|
+
unlimited = find_unlimited_dimension
|
284
|
+
@outside_scope.assert_equal("dim3", unlimited.name)
|
285
|
+
|
286
|
+
# Although adding an unshared dimension seemed to work on NetCDF-3 file,
|
287
|
+
# trying to retrieve this dimension does not work.
|
288
|
+
# unshared = find_dimension("dim5")
|
289
|
+
# @outside_scope.assert_equal("dim5", unshared.name)
|
290
|
+
|
291
|
+
# reading the whole Double variable
|
292
|
+
var = find_variable("Double")
|
293
|
+
var.read
|
294
|
+
|
295
|
+
# reading a section of Double using origin and shape
|
296
|
+
var.read(:origin => [1, 1], :shape => [2, 3])
|
297
|
+
|
298
|
+
# reading a section of Double using a section specification
|
299
|
+
var.read(:spec => "0:4:2, 4:9:3")
|
300
|
+
|
301
|
+
# reading the whole Double3 variable
|
302
|
+
var2 = find_variable("Double3")
|
303
|
+
var2.read
|
304
|
+
|
305
|
+
# makes a new variable as a subsection of Double3
|
306
|
+
var3 = var2.section(:origin => [0, 1, 1], :shape => [1, 4, 9])
|
307
|
+
|
308
|
+
# reading a section of Double3 using origin and shape
|
309
|
+
var2.read(:origin => [0, 1, 1], :shape => [1, 4, 9])
|
310
|
+
|
311
|
+
write_cdl
|
312
|
+
|
313
|
+
p detail_info
|
314
|
+
p file_type_description
|
315
|
+
p file_type_id
|
316
|
+
p id
|
317
|
+
p last_modified
|
318
|
+
p location
|
319
|
+
p title
|
320
|
+
p unlimited_dimension?
|
321
|
+
|
322
|
+
end
|
323
|
+
|
324
|
+
end
|
325
|
+
#=end
|
326
|
+
|
327
|
+
end
|
328
|
+
|
329
|
+
end
|
330
|
+
|
331
|
+
# require_relative 'test_redefine'
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
##########################################################################################
|
4
|
+
# Copyright © 2013 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
5
|
+
# and distribute this software and its documentation, without fee and without a signed
|
6
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
7
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
8
|
+
# distributions.
|
9
|
+
#
|
10
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
11
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
12
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
13
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
14
|
+
#
|
15
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
16
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
17
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
18
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
19
|
+
# OR MODIFICATIONS.
|
20
|
+
##########################################################################################
|
21
|
+
|
22
|
+
require 'rubygems'
|
23
|
+
require "test/unit"
|
24
|
+
require 'shoulda'
|
25
|
+
|
26
|
+
require 'mdarray'
|
27
|
+
|
28
|
+
class MDArrayTest < Test::Unit::TestCase
|
29
|
+
|
30
|
+
context "NetCDF implementation" do
|
31
|
+
|
32
|
+
setup do
|
33
|
+
|
34
|
+
@directory = "/home/zxb3/tmp"
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
#-------------------------------------------------------------------------------------
|
40
|
+
#
|
41
|
+
#-------------------------------------------------------------------------------------
|
42
|
+
|
43
|
+
should "Open a file for redefinition" do
|
44
|
+
|
45
|
+
NetCDF.redefine(cygpath(@directory), "nc_output", self) do
|
46
|
+
|
47
|
+
# rename_global_att("Values", "New_values")
|
48
|
+
# delete_global_att("Values")
|
49
|
+
rename_dimension("dim1", "new_dim1")
|
50
|
+
# rename_variable("arr1", "new_arr1")
|
51
|
+
|
52
|
+
var1 = find_variable("arr1")
|
53
|
+
@outside_scope.assert_equal("arr1", var1.name)
|
54
|
+
delete_variable_att(var1, "description")
|
55
|
+
rename_variable_att(var1, "size", "new_size")
|
56
|
+
|
57
|
+
p var1.extra_info
|
58
|
+
att = var1.find_attribute("date")
|
59
|
+
@outside_scope.assert_equal("date", att.name)
|
60
|
+
@outside_scope.assert_equal(0, var1.find_dimension_index("new_dim1"))
|
61
|
+
atts = var1.find_attributes
|
62
|
+
atts.each do |att|
|
63
|
+
p att.name
|
64
|
+
end
|
65
|
+
@outside_scope.assert_equal("int", var1.get_data_type)
|
66
|
+
p var1.get_description
|
67
|
+
dim = var1.get_dimension(0)
|
68
|
+
p dim.name
|
69
|
+
p var1.find_dimensions
|
70
|
+
p var1.get_dimensions_string
|
71
|
+
p var1.get_element_size
|
72
|
+
p var1.get_name_and_dimensions
|
73
|
+
p var1.rank
|
74
|
+
p var1.shape
|
75
|
+
p var1.size
|
76
|
+
p var1.get_units_string
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
#-------------------------------------------------------------------------------------
|
83
|
+
# Opens a NetCDF file for reading only
|
84
|
+
#-------------------------------------------------------------------------------------
|
85
|
+
|
86
|
+
should "open a file just for reading" do
|
87
|
+
|
88
|
+
# Opens a file for definition, passing the directory and file name.
|
89
|
+
# Creates a new scope for defining the NetCDF file. In order to access the
|
90
|
+
# ouside scope, that is, "here", we pass self as the third argument to define.
|
91
|
+
# When self is passed as argument, @outside_scope is available inside the block.
|
92
|
+
|
93
|
+
reader = NetCDF.read(cygpath(@directory), "nc_output", self) do
|
94
|
+
=begin
|
95
|
+
# print all global attributes
|
96
|
+
global_attributes.each do |att|
|
97
|
+
p att.name
|
98
|
+
end
|
99
|
+
=end
|
100
|
+
write_cdl
|
101
|
+
|
102
|
+
=begin
|
103
|
+
p detail_info
|
104
|
+
p file_type_description
|
105
|
+
p file_type_id
|
106
|
+
p id
|
107
|
+
p last_modified
|
108
|
+
p location
|
109
|
+
p title
|
110
|
+
p unlimited_dimension?
|
111
|
+
=end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|