multiarray 0.14.1 → 0.14.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/lib/multiarray.rb +6 -1
- data/lib/multiarray/operations.rb +52 -6
- data/test/tc_multiarray.rb +18 -0
- data/test/tc_sequence.rb +11 -0
- metadata +3 -3
data/Rakefile
CHANGED
data/lib/multiarray.rb
CHANGED
@@ -539,6 +539,10 @@ class Array
|
|
539
539
|
|
540
540
|
end
|
541
541
|
|
542
|
+
begin
|
543
|
+
require 'continuation'
|
544
|
+
rescue Exception
|
545
|
+
end
|
542
546
|
require 'complex'
|
543
547
|
require 'malloc'
|
544
548
|
require 'rbconfig'
|
@@ -644,7 +648,8 @@ module Hornetseye
|
|
644
648
|
options = shape.last.is_a?( Hash ) ? shape.pop : {}
|
645
649
|
arity = options[ :arity ] || [ action.arity, shape.size ].max
|
646
650
|
if arity <= 0
|
647
|
-
action.call
|
651
|
+
term = action.call
|
652
|
+
term.is_a?( Node ) ? term.to_type( term.typecode.maxint ) : term
|
648
653
|
else
|
649
654
|
index = Variable.new shape.empty? ? Hornetseye::INDEX( nil ) :
|
650
655
|
Hornetseye::INDEX( shape.pop )
|
@@ -329,7 +329,7 @@ module Hornetseye
|
|
329
329
|
#
|
330
330
|
# @return [Object] Sum of array.
|
331
331
|
def sum
|
332
|
-
inject { |a,b| a + b }
|
332
|
+
Hornetseye::lazy { to_type typecode.maxint }.inject { |a,b| a + b }
|
333
333
|
end
|
334
334
|
|
335
335
|
# Find range of values of array
|
@@ -502,11 +502,6 @@ module Hornetseye
|
|
502
502
|
#
|
503
503
|
# @return [Node] The result of the lookup operation.
|
504
504
|
def warp( *field )
|
505
|
-
|
506
|
-
#elsif shape.first > lut.dimension or dimension == 1
|
507
|
-
# reshape( *( [ 1 ] + shape ) ).map lut, options
|
508
|
-
|
509
|
-
|
510
505
|
options = field.last.is_a?( Hash ) ? field.pop : {}
|
511
506
|
options = { :safe => true, :default => typecode.default }.merge options
|
512
507
|
if options[ :safe ]
|
@@ -538,6 +533,57 @@ module Hornetseye
|
|
538
533
|
left
|
539
534
|
end
|
540
535
|
|
536
|
+
# Mirror the array
|
537
|
+
#
|
538
|
+
# @param [Array<Integer>] dimensions The dimensions which should be flipped.
|
539
|
+
#
|
540
|
+
# @return [Node] The result of flipping the dimensions.
|
541
|
+
def flip( *dimensions )
|
542
|
+
field = ( 0 ... dimension ).collect do |i|
|
543
|
+
if dimensions.member? i
|
544
|
+
Hornetseye::lazy( *shape ) { |*args| shape[i] - 1 - args[i] }
|
545
|
+
else
|
546
|
+
Hornetseye::lazy( *shape ) { |*args| args[i] }
|
547
|
+
end
|
548
|
+
end
|
549
|
+
warp *field
|
550
|
+
end
|
551
|
+
|
552
|
+
def shift( *offset )
|
553
|
+
if offset.size != shape.size
|
554
|
+
raise "#{offset.size} offset(s) were given but array has " +
|
555
|
+
"#{shape.size} dimensions"
|
556
|
+
end
|
557
|
+
retval = array_type.new
|
558
|
+
target, source, open, close = [], [], [], []
|
559
|
+
( shape.size - 1 ).step( 0, -1 ) do |i|
|
560
|
+
callcc do |pass|
|
561
|
+
delta = offset[i] % shape[i]
|
562
|
+
source[i] = 0 ... shape[i] - delta
|
563
|
+
target[i] = delta ... shape[i]
|
564
|
+
callcc do |c|
|
565
|
+
open[i] = c
|
566
|
+
pass.call
|
567
|
+
end
|
568
|
+
source[i] = shape[i] - delta ... shape[i]
|
569
|
+
target[i] = 0 ... delta
|
570
|
+
callcc do |c|
|
571
|
+
open[i] = c
|
572
|
+
pass.call
|
573
|
+
end
|
574
|
+
close[i].call
|
575
|
+
end
|
576
|
+
end
|
577
|
+
retval[ *target ] = self[ *source ]
|
578
|
+
for i in 0 ... shape.size
|
579
|
+
callcc do |c|
|
580
|
+
close[i] = c
|
581
|
+
open[i].call
|
582
|
+
end
|
583
|
+
end
|
584
|
+
retval
|
585
|
+
end
|
586
|
+
|
541
587
|
end
|
542
588
|
|
543
589
|
class Node
|
data/test/tc_multiarray.rb
CHANGED
@@ -479,6 +479,24 @@ class TC_MultiArray < Test::Unit::TestCase
|
|
479
479
|
assert_raise( RuntimeError ) { [ S[ 0, 1 ], S[ 0, 1 ] ].lut S[ 1, 2 ] }
|
480
480
|
end
|
481
481
|
|
482
|
+
def test_flip
|
483
|
+
[ O, I ].each do |t|
|
484
|
+
assert_equal M( t, 3, 2 )[ [ 3, 2, 1 ], [ 6, 5, 4 ] ],
|
485
|
+
M( t, 3, 2 )[ [ 1, 2, 3 ], [ 4, 5, 6 ] ].flip( 0 )
|
486
|
+
assert_equal M( t, 3, 2 )[ [ 4, 5, 6 ], [ 1, 2, 3 ] ],
|
487
|
+
M( t, 3, 2 )[ [ 1, 2, 3 ], [ 4, 5, 6 ] ].flip( 1 )
|
488
|
+
assert_equal M( t, 3, 2 )[ [ 6, 5, 4 ], [ 3, 2, 1 ] ],
|
489
|
+
M( t, 3, 2 )[ [ 1, 2, 3 ], [ 4, 5, 6 ] ].flip( 0, 1 )
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
def test_shift
|
494
|
+
[ O, I ].each do |t|
|
495
|
+
assert_equal M( t, 2, 2 )[ [ 4, 3 ], [ 2, 1 ] ],
|
496
|
+
M( t, 2, 2 )[ [ 1, 2 ], [ 3, 4 ] ].shift( 1, 1 )
|
497
|
+
end
|
498
|
+
end
|
499
|
+
|
482
500
|
def test_zero
|
483
501
|
assert_equal M[ [ false, true ], [ true, false ] ],
|
484
502
|
M[ [ -1, 0 ], [ 0, 1 ] ].zero?
|
data/test/tc_sequence.rb
CHANGED
@@ -286,11 +286,16 @@ class TC_Sequence < Test::Unit::TestCase
|
|
286
286
|
|
287
287
|
def test_sum
|
288
288
|
[ S( O, 3 ), S( I, 3 ) ].each do |t|
|
289
|
+
assert_equal 6, t[ 1, 2, 3 ].sum
|
289
290
|
assert_equal 6, sum { |i| t[ 1, 2, 3 ][ i ] }
|
290
291
|
assert_equal [ 1, 2, 3 ], sum { || t[ 1, 2, 3 ] }.to_a
|
291
292
|
end
|
293
|
+
assert_equal C( 3, 5, 8 ), S[ C( 1, 2, 3 ), C( 2, 3, 5 ) ].sum
|
292
294
|
assert_equal C( 3, 5, 8 ), sum { |i| S[ C( 1, 2, 3 ), C( 2, 3, 5 ) ][i] }
|
295
|
+
assert_equal X( 4, 6 ), S[ X( 1, 2 ), X( 3, 4 ) ].sum
|
293
296
|
assert_equal X( 4, 6 ), sum { |i| S[ X( 1, 2 ), X( 3, 4 ) ][i] }
|
297
|
+
assert_equal 384, S[ 128, 128, 128 ].sum
|
298
|
+
assert_equal 384, sum { |i| S[ 128, 128, 128 ][i] }
|
294
299
|
end
|
295
300
|
|
296
301
|
def test_min
|
@@ -375,6 +380,12 @@ class TC_Sequence < Test::Unit::TestCase
|
|
375
380
|
# end
|
376
381
|
#end
|
377
382
|
|
383
|
+
def test_flip
|
384
|
+
[ O, I ].each do |t|
|
385
|
+
assert_equal S( t, 3 )[ 3, 2, 1 ], S( t, 3 )[ 1, 2, 3 ].flip( 0 )
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
378
389
|
def test_zero
|
379
390
|
[ S( O, 3 ), S( I, 3 ) ].each do |t|
|
380
391
|
assert_equal [ false, true, false ], t[ -1, 0, 1 ].zero?.to_a
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 14
|
8
|
-
-
|
9
|
-
version: 0.14.
|
8
|
+
- 2
|
9
|
+
version: 0.14.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jan Wedekind
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-17 00:00:00 +00:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|