mdarray 0.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +54 -0
- data/LICENSE.txt~ +32 -0
- data/README.md +21 -0
- data/Rakefile +40 -0
- data/lib/env.rb +11 -0
- data/lib/mdarray.rb +414 -0
- data/lib/mdarray/access.rb +237 -0
- data/lib/mdarray/counter.rb +779 -0
- data/lib/mdarray/creation.rb +413 -0
- data/lib/mdarray/fast_non_numerical.rb +102 -0
- data/lib/mdarray/function_creation.rb +100 -0
- data/lib/mdarray/function_map.rb +56 -0
- data/lib/mdarray/hierarchy.rb +177 -0
- data/lib/mdarray/operators.rb +220 -0
- data/lib/mdarray/printing.rb +275 -0
- data/lib/mdarray/proc_util.rb +159 -0
- data/lib/mdarray/ruby_functions.rb +78 -0
- data/lib/mdarray/ruby_generic_functions.rb +37 -0
- data/lib/mdarray/ruby_math.rb +57 -0
- data/lib/mdarray/ruby_numeric_functions.rb +187 -0
- data/lib/mdarray/ruby_operators.rb +201 -0
- data/lib/mdarray/ruby_stats.rb +149 -0
- data/lib/mdarray/slices.rb +185 -0
- data/lib/mdarray/statistics.rb +86 -0
- data/test/arithmetic_casting.rb +195 -0
- data/test/env.rb +50 -0
- data/test/test_access.rb +247 -0
- data/test/test_boolean.rb +67 -0
- data/test/test_comparison.rb +126 -0
- data/test/test_complete.rb +69 -0
- data/test/test_counter.rb +184 -0
- data/test/test_creation.rb +364 -0
- data/test/test_error.rb +53 -0
- data/test/test_lazy.rb +52 -0
- data/test/test_operator.rb +337 -0
- data/test/test_printing.rb +66 -0
- data/test/test_shape.rb +96 -0
- data/test/test_slices.rb +146 -0
- data/test/test_speed.rb +311 -0
- data/test/test_statistics.rb +45 -0
- data/test/test_trigonometry.rb +60 -0
- data/vendor/netcdfAll-4.3.16.jar +0 -0
- data/version.rb +2 -0
- metadata +197 -0
data/test/test_error.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require "test/unit"
|
3
|
+
require 'shoulda'
|
4
|
+
|
5
|
+
require 'env'
|
6
|
+
require 'mdarray'
|
7
|
+
|
8
|
+
class MDArrayTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
context "Arithmetic Tests" do
|
11
|
+
|
12
|
+
setup do
|
13
|
+
|
14
|
+
# create a = [20 30 40 50]
|
15
|
+
@a = MDArray.arange(20, 60, 10)
|
16
|
+
# create b = [0 1 2 3]
|
17
|
+
@b = MDArray.arange(4)
|
18
|
+
# create c = [1.87 5.34 7.18 8.84]
|
19
|
+
@c = MDArray.double([4], [1.87, 5.34, 7.18, 8.84])
|
20
|
+
# create d = [[1 2] [3 4]]
|
21
|
+
@d = MDArray.int([2, 2], [1, 2, 3, 4])
|
22
|
+
# creates an array from a function (actually a block). The name fromfunction
|
23
|
+
# is preserved to maintain API compatibility with NumPy (is it necessary?)
|
24
|
+
@e = MDArray.fromfunction("double", [4, 5, 6]) do |x, y, z|
|
25
|
+
3.21 * (x + y + z)
|
26
|
+
end
|
27
|
+
@f = MDArray.fromfunction("double", [4, 5, 6]) do |x, y, z|
|
28
|
+
9.57 * x + y + z
|
29
|
+
end
|
30
|
+
@bool = MDArray.boolean([4], [true, true, false, false])
|
31
|
+
|
32
|
+
@trig = MDArray.typed_arange("double", 90)
|
33
|
+
@long = MDArray.typed_arange("long", 5)
|
34
|
+
|
35
|
+
end # setup
|
36
|
+
|
37
|
+
#-------------------------------------------------------------------------------------
|
38
|
+
#
|
39
|
+
#-------------------------------------------------------------------------------------
|
40
|
+
|
41
|
+
should "correct error!" do
|
42
|
+
|
43
|
+
# creates an array from a function (actually a block). The name fromfunction
|
44
|
+
# is preserved to maintain API compatibility with NumPy (is it necessary?)
|
45
|
+
arr = MDArray.fromfunction("double", [5, 5, 5, 5, 5, 5, 5, 5]) do |x|
|
46
|
+
x.inject(:+)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
data/test/test_lazy.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require "test/unit"
|
3
|
+
require 'shoulda'
|
4
|
+
|
5
|
+
require 'env'
|
6
|
+
require 'mdarray'
|
7
|
+
|
8
|
+
class MDArrayTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
context "Arithmetic Tests" do
|
11
|
+
|
12
|
+
setup do
|
13
|
+
|
14
|
+
# create a = [20 30 40 50]
|
15
|
+
@a = MDArray.arange(20, 60, 10)
|
16
|
+
# create b = [0 1 2 3]
|
17
|
+
@b = MDArray.arange(4)
|
18
|
+
# create c = [1.87 5.34 7.18 8.84]
|
19
|
+
@c = MDArray.double([4], [1.87, 5.34, 7.18, 8.84])
|
20
|
+
# create d = [[1 2] [3 4]]
|
21
|
+
@d = MDArray.int([2, 2], [1, 2, 3, 4])
|
22
|
+
# creates an array from a function (actually a block). The name fromfunction
|
23
|
+
# is preserved to maintain API compatibility with NumPy (is it necessary?)
|
24
|
+
@e = MDArray.fromfunction("double", [4, 5, 6]) do |x, y, z|
|
25
|
+
3.21 * (x + y + z)
|
26
|
+
end
|
27
|
+
@f = MDArray.fromfunction("double", [4, 5, 6]) do |x, y, z|
|
28
|
+
9.57 * x + y + z
|
29
|
+
end
|
30
|
+
@g = MDArray.byte([1], [60])
|
31
|
+
@h = MDArray.byte([1], [13])
|
32
|
+
@i = MDArray.double([4], [2.0, 6.0, 5.0, 9.0])
|
33
|
+
|
34
|
+
end # setup
|
35
|
+
|
36
|
+
#-------------------------------------------------------------------------------------
|
37
|
+
#
|
38
|
+
#-------------------------------------------------------------------------------------
|
39
|
+
|
40
|
+
should "do basic lazy operations" do
|
41
|
+
|
42
|
+
op = @a.add_(@b)
|
43
|
+
p op
|
44
|
+
p op.type
|
45
|
+
op.exec(3)
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,337 @@
|
|
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 "Operators Tests" do
|
31
|
+
|
32
|
+
setup do
|
33
|
+
|
34
|
+
# create a = [20 30 40 50]
|
35
|
+
@a = MDArray.arange(20, 60, 10)
|
36
|
+
# create b = [0 1 2 3]
|
37
|
+
@b = MDArray.arange(4)
|
38
|
+
# create c = [1.87 5.34 7.18 8.84]
|
39
|
+
@c = MDArray.double([4], [1.87, 5.34, 7.18, 8.84])
|
40
|
+
# create d = [[1 2] [3 4]]
|
41
|
+
@d = MDArray.int([2, 2], [1, 2, 3, 4])
|
42
|
+
# creates an array from a function (actually a block). The name fromfunction
|
43
|
+
# is preserved to maintain API compatibility with NumPy (is it necessary?)
|
44
|
+
@e = MDArray.fromfunction("double", [4, 5, 6]) do |x, y, z|
|
45
|
+
3.21 * (x + y + z)
|
46
|
+
end
|
47
|
+
@f = MDArray.fromfunction("double", [4, 5, 6]) do |x, y, z|
|
48
|
+
9.57 * x + y + z
|
49
|
+
end
|
50
|
+
@g = MDArray.byte([1], [60])
|
51
|
+
@h = MDArray.byte([1], [13])
|
52
|
+
@i = MDArray.double([4], [2.0, 6.0, 5.0, 9.0])
|
53
|
+
|
54
|
+
end # setup
|
55
|
+
|
56
|
+
#-------------------------------------------------------------------------------------
|
57
|
+
#
|
58
|
+
#-------------------------------------------------------------------------------------
|
59
|
+
|
60
|
+
should "allow setting values" do
|
61
|
+
|
62
|
+
a = MDArray.int([5, 3, 5])
|
63
|
+
a.fill(10)
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
#-------------------------------------------------------------------------------------
|
68
|
+
#
|
69
|
+
#-------------------------------------------------------------------------------------
|
70
|
+
|
71
|
+
should "do basic array operations" do
|
72
|
+
|
73
|
+
# c = [20 31 42 53]
|
74
|
+
# chage the way operators work by changing the binary_operator parameter.
|
75
|
+
# @a.binary_operator = BinaryOperator
|
76
|
+
c = @a + @b
|
77
|
+
assert_equal(20, c[0])
|
78
|
+
|
79
|
+
# c = [20 29 38 47]
|
80
|
+
c = @a - @b
|
81
|
+
assert_equal(38, c[2])
|
82
|
+
|
83
|
+
# c = [0 30 80 100]
|
84
|
+
c = @a * @b
|
85
|
+
assert_equal(150, c[3])
|
86
|
+
|
87
|
+
# c = [0 0 0 0]
|
88
|
+
c = @b / @a
|
89
|
+
assert_equal(0, c[1])
|
90
|
+
|
91
|
+
# c = [1 30 1600 125000]
|
92
|
+
c = @a ** @b
|
93
|
+
assert_equal(1600, c[2])
|
94
|
+
# although a and d have the same number of elements we cannot do arithmetic
|
95
|
+
# with them.
|
96
|
+
assert_raise ( RuntimeError ) { c = @a + @d }
|
97
|
+
|
98
|
+
# arrays a and b still have the same values as before
|
99
|
+
assert_equal(20, @a[0])
|
100
|
+
assert_equal(30, @a[1])
|
101
|
+
assert_equal(2, @b[2])
|
102
|
+
assert_equal(3, @b[3])
|
103
|
+
|
104
|
+
# adding two double arrays
|
105
|
+
result = @e + @f
|
106
|
+
assert_equal(result[0, 0, 0], @e[0, 0, 0] + @f[0, 0, 0])
|
107
|
+
|
108
|
+
# request that result to be of type "byte" is respected
|
109
|
+
c = @a.add(@b, "byte")
|
110
|
+
assert_equal("byte", c.type)
|
111
|
+
|
112
|
+
# normal int type for result
|
113
|
+
c = @a.add 10
|
114
|
+
assert_equal("int", c.type)
|
115
|
+
|
116
|
+
# upcast will be enforced. result is double
|
117
|
+
c = @a.add @c
|
118
|
+
assert_equal("double", c.type)
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
#-------------------------------------------------------------------------------------
|
123
|
+
# Array operations are done elementwise
|
124
|
+
#-------------------------------------------------------------------------------------
|
125
|
+
|
126
|
+
should "do basic operations with numbers" do
|
127
|
+
|
128
|
+
# elementwise operation
|
129
|
+
c = @a + 20
|
130
|
+
assert_equal("40 50 60 70 ", c.to_string)
|
131
|
+
|
132
|
+
# Power test
|
133
|
+
c = @c ** 2.5
|
134
|
+
assert_equal("4.781938829669405 65.89510321368653 138.13734690718798 232.3435723800906 ",
|
135
|
+
c.to_string)
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
#-------------------------------------------------------------------------------------
|
140
|
+
#
|
141
|
+
#-------------------------------------------------------------------------------------
|
142
|
+
|
143
|
+
should "do in-place operations" do
|
144
|
+
|
145
|
+
# a = [20 30 40 50]
|
146
|
+
# a ^ 2 = [400, 900, 1600, 2500]
|
147
|
+
@a.mul! @a
|
148
|
+
assert_equal(1600, @a[2])
|
149
|
+
|
150
|
+
@a.add! 5
|
151
|
+
assert_equal("405 905 1605 2505 ", @a.to_string)
|
152
|
+
|
153
|
+
# do in place operations
|
154
|
+
# a = a + b = [405 906 1607 2508]
|
155
|
+
@a.add! @b
|
156
|
+
assert_equal(906, @a[1])
|
157
|
+
assert_equal(2508, @a[3])
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
#-------------------------------------------------------------------------------------
|
162
|
+
#
|
163
|
+
#-------------------------------------------------------------------------------------
|
164
|
+
|
165
|
+
should "work with expressions" do
|
166
|
+
|
167
|
+
result = @a + 2 * @b - @c
|
168
|
+
assert_equal("18.13 26.66 36.82 47.16 ", result.to_string)
|
169
|
+
result = (@a + 2) * @b - @c
|
170
|
+
assert_equal("-1.87 26.66 76.82 147.16 ", result.to_string)
|
171
|
+
result = (@a + 2) * (@b - @c)
|
172
|
+
assert_equal("-41.14 -138.88 -217.56 -303.68 ", result.to_string)
|
173
|
+
|
174
|
+
end
|
175
|
+
|
176
|
+
#-------------------------------------------------------------------------------------
|
177
|
+
#
|
178
|
+
#-------------------------------------------------------------------------------------
|
179
|
+
|
180
|
+
should "do bitwise operations" do
|
181
|
+
|
182
|
+
result = @g & @h
|
183
|
+
assert_equal("12 ", result.to_string)
|
184
|
+
result = @g | @h
|
185
|
+
assert_equal("61 ", result.to_string)
|
186
|
+
result = @g ^ @h
|
187
|
+
assert_equal("49 ", result.to_string)
|
188
|
+
# result = @g.binary_ones_complement(@h)
|
189
|
+
# assert_equal("-60 ", result.to_string)
|
190
|
+
result = @g << 2
|
191
|
+
assert_equal("240 ", result.to_string)
|
192
|
+
result = @g >> 2
|
193
|
+
assert_equal("15 ", result.to_string)
|
194
|
+
|
195
|
+
result = @g & 13
|
196
|
+
# although we can coerce arithmetic operations we cannot coerce bitwise operations
|
197
|
+
assert_raise ( TypeError ) { result = 13 & @g }
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
#-------------------------------------------------------------------------------------
|
202
|
+
#
|
203
|
+
#-------------------------------------------------------------------------------------
|
204
|
+
|
205
|
+
should "coerce arithmetic operations" do
|
206
|
+
|
207
|
+
# resulting array c is upcasted to double. Note that the operation is commutative
|
208
|
+
c = 20.5 + @a
|
209
|
+
assert_equal("40.5 50.5 60.5 70.5 ", c.to_string)
|
210
|
+
assert_equal(c.type, "double")
|
211
|
+
|
212
|
+
# Can also operate with the number first. Still doing elementwise operation
|
213
|
+
# @c = MDArray.double([4], [1.87, 5.34, 7.18, 8.84])
|
214
|
+
c = 10 / @c
|
215
|
+
assert_equal("5.347593582887701 1.8726591760299627 1.392757660167131 1.1312217194570136 ",
|
216
|
+
c.to_string)
|
217
|
+
|
218
|
+
# Works with subtraction
|
219
|
+
c = 0.5 - @a
|
220
|
+
assert_equal("-19.5 -29.5 -39.5 -49.5 ", c.to_string)
|
221
|
+
|
222
|
+
# *TODO: 2.5 ** @a is not working... seems to be a bug, since everything else works
|
223
|
+
# fine. Open a case after trying to make a simpler example.
|
224
|
+
# c = 2.5 ** @a
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
#-------------------------------------------------------------------------------------
|
229
|
+
#
|
230
|
+
#-------------------------------------------------------------------------------------
|
231
|
+
|
232
|
+
should "work with unary operators" do
|
233
|
+
|
234
|
+
result = @c.ceil
|
235
|
+
assert_equal(result.to_string, "2.0 6.0 8.0 9.0 ")
|
236
|
+
result = result / 4.254
|
237
|
+
assert_equal(result.to_string, "0.47014574518100616 1.4104372355430186 1.8805829807240246 2.1156558533145278 ")
|
238
|
+
result.floor!
|
239
|
+
assert_equal("0.0 1.0 1.0 2.0 ", result.to_string)
|
240
|
+
@c.ceil!
|
241
|
+
assert_equal("2.0 6.0 8.0 9.0 ", @c.to_string)
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
#------------------------------------------------------------------------------------
|
246
|
+
#
|
247
|
+
#------------------------------------------------------------------------------------
|
248
|
+
|
249
|
+
should "allow users operator's creation" do
|
250
|
+
|
251
|
+
|
252
|
+
# creating a binary_op as it takes two MDArrays as arguments. The method "total_sum"
|
253
|
+
# will make a cumulative sum of all sums of array1[i] + array2[i]. To achieve this
|
254
|
+
# we state that the result is "reduce" (just a number) and that the operation
|
255
|
+
# perfomed is the proc given that sums (sum, val1, val2). The initial value of sum
|
256
|
+
# is given by the second proc Proc.new { 0 }. This binary operator is defined
|
257
|
+
# for "int" MDArrays and all "lower" classes, i.e., short, byte.
|
258
|
+
UserFunction.binary_operator("total_sum", "reduce",
|
259
|
+
Proc.new { |sum, val1, val2| sum + val1 + val2 },
|
260
|
+
"int", nil, Proc.new { 0 })
|
261
|
+
c = @a.total_sum(@b)
|
262
|
+
assert_equal(146, c)
|
263
|
+
|
264
|
+
c = @a.total_sum(@c)
|
265
|
+
assert_equal(163.23000000000002, c)
|
266
|
+
|
267
|
+
c = @g.total_sum(@h)
|
268
|
+
assert_equal(73, c)
|
269
|
+
|
270
|
+
# total_sum is not defined for double MDArray
|
271
|
+
assert_raise ( NoMethodError ) { c = @c.total_sum(@b) }
|
272
|
+
|
273
|
+
|
274
|
+
# define inner_product for the whole hierarchy as it defines it for double
|
275
|
+
UserFunction.binary_operator("inner_product", "reduce",
|
276
|
+
Proc.new { |sum, val1, val2| sum + (val1 * val2) },
|
277
|
+
"double", nil, Proc.new { 0 })
|
278
|
+
|
279
|
+
c = @a.inner_product(@b)
|
280
|
+
assert_equal(260, c)
|
281
|
+
|
282
|
+
c = @a.inner_product(@c)
|
283
|
+
assert_equal(926.8, c)
|
284
|
+
|
285
|
+
c = @e.inner_product(@f)
|
286
|
+
assert_equal(50079.530999999995, c)
|
287
|
+
|
288
|
+
# same as the inner product but multiplies all values. Note that in this case
|
289
|
+
# we need to initialize prod with value 1, which is done with the second Proc
|
290
|
+
UserFunction.binary_operator("proc_proc", "reduce",
|
291
|
+
Proc.new { |prod, val1, val2| prod * (val1 * val2) },
|
292
|
+
"double", nil, Proc.new { 1 })
|
293
|
+
c = @a.proc_proc(@b)
|
294
|
+
assert_equal(0, c)
|
295
|
+
|
296
|
+
c = @a.proc_proc(@c)
|
297
|
+
assert_equal(760_572_850.7_520_001, c)
|
298
|
+
|
299
|
+
|
300
|
+
# Possible to create a new binary operator and force the final type of the resulting
|
301
|
+
# MDArray. Bellow, whenever addd is used the resulting array will be of type double
|
302
|
+
func = MDArray.select_function("add")
|
303
|
+
UserFunction.binary_operator("addd", "default", func, "double", "double")
|
304
|
+
|
305
|
+
# @a and @b are int arrays, so result should be int, but since addd is used, resulting
|
306
|
+
# array will be double
|
307
|
+
c = @a.addd(@b)
|
308
|
+
assert_equal("double", c.type)
|
309
|
+
c.print
|
310
|
+
|
311
|
+
# request that resulting array of type int is ignored when using addd
|
312
|
+
c = @a.addd(@b, "int")
|
313
|
+
assert_equal("double", c.type)
|
314
|
+
|
315
|
+
=begin
|
316
|
+
|
317
|
+
MDArray.make_binary_operators("perc_inc",
|
318
|
+
Proc.new { |val1, val2| (val2 - val1) / val1 })
|
319
|
+
|
320
|
+
result = @c.perc_inc @i
|
321
|
+
assert_equal("0.06951871657754005 0.12359550561797755 -0.3036211699164345 0.018099547511312233 ", result.to_string)
|
322
|
+
|
323
|
+
# do it in place
|
324
|
+
# "0.06951871514320374 0.1235954761505127 -0.3036211431026459 0.018099529668688774 "
|
325
|
+
|
326
|
+
# @c.binary_operator = FastBinaryOperator
|
327
|
+
# @c.binary_operator = BinaryOperator
|
328
|
+
|
329
|
+
@c.perc_inc! @i
|
330
|
+
assert_equal("0.06951871657754005 0.12359550561797755 -0.3036211699164345 0.018099547511312233 ", @c.to_string)
|
331
|
+
=end
|
332
|
+
|
333
|
+
end
|
334
|
+
|
335
|
+
end
|
336
|
+
|
337
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require "test/unit"
|
3
|
+
require 'shoulda'
|
4
|
+
|
5
|
+
require 'env'
|
6
|
+
require 'mdarray'
|
7
|
+
|
8
|
+
class MDArrayTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
context "Printing Tests" do
|
11
|
+
|
12
|
+
setup do
|
13
|
+
|
14
|
+
# create a = [20 30 40 50]
|
15
|
+
@a = MDArray.arange(20, 60, 10)
|
16
|
+
# create b = [0 1 2 3]
|
17
|
+
@b = MDArray.arange(4)
|
18
|
+
# create c = [1.87 5.34 7.18 8.84]
|
19
|
+
@c = MDArray.double([4], [1.87, 5.34, 7.18, 8.84])
|
20
|
+
# create d = [[1 2] [3 4]]
|
21
|
+
@d = MDArray.int([2, 2], [1, 2, 3, 4])
|
22
|
+
# creates an array from a function (actually a block). The name fromfunction
|
23
|
+
# is preserved to maintain API compatibility with NumPy (is it necessary?)
|
24
|
+
@e = MDArray.fromfunction("double", [4, 5, 6]) do |x, y, z|
|
25
|
+
3.21 * (x + y + z)
|
26
|
+
end
|
27
|
+
@f = MDArray.fromfunction("double", [2, 2, 2, 2]) do |x, y, z, w|
|
28
|
+
9.57 * x + y + z + w
|
29
|
+
end
|
30
|
+
@g = MDArray.fromfunction("double", [3, 2, 3, 2, 3]) do |x, y, z, w, k|
|
31
|
+
9.57 * x + y + z + w + k
|
32
|
+
end
|
33
|
+
|
34
|
+
end # setup
|
35
|
+
|
36
|
+
#-------------------------------------------------------------------------------------
|
37
|
+
#
|
38
|
+
#-------------------------------------------------------------------------------------
|
39
|
+
|
40
|
+
|
41
|
+
should "apply a method over axes" do
|
42
|
+
@e.apply_over_axes([0, 2])
|
43
|
+
# @e.section([0, 0, 0], [1, 5, 1])
|
44
|
+
# @e.print
|
45
|
+
end
|
46
|
+
|
47
|
+
#=begin
|
48
|
+
should "print 1D array" do
|
49
|
+
@a.print
|
50
|
+
end
|
51
|
+
#=end
|
52
|
+
|
53
|
+
should "print nD array" do
|
54
|
+
@d.print
|
55
|
+
@e.print
|
56
|
+
@f.print
|
57
|
+
@g.print
|
58
|
+
end
|
59
|
+
|
60
|
+
should "print output to csv" do
|
61
|
+
@e.to_csv
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|