multiarray 0.12.0 → 0.13.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.
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'rake/packagetask'
6
6
  require 'rbconfig'
7
7
 
8
8
  PKG_NAME = 'multiarray'
9
- PKG_VERSION = '0.12.0'
9
+ PKG_VERSION = '0.13.0'
10
10
  RB_FILES = FileList[ 'lib/**/*.rb' ]
11
11
  TC_FILES = FileList[ 'test/tc_*.rb' ]
12
12
  TS_FILES = FileList[ 'test/ts_*.rb' ]
@@ -36,11 +36,12 @@ module Hornetseye
36
36
  # Constructor
37
37
  #
38
38
  # @param [Node] dest Target array to write histogram to.
39
+ # @param [Node] weight The weight(s) for the histogram elements.
39
40
  # @param [Array<Node>] sources Arrays with elements to compute histogram of.
40
41
  #
41
42
  # @private
42
- def initialize( dest, *sources )
43
- @dest, @sources = dest, sources
43
+ def initialize( dest, weight, *sources )
44
+ @dest, @weight, @sources = dest, weight, sources
44
45
  end
45
46
 
46
47
  # Get unique descriptor of this object
@@ -52,6 +53,7 @@ module Hornetseye
52
53
  # @private
53
54
  def descriptor( hash )
54
55
  "Histogram(#{@dest.descriptor( hash )}," +
56
+ "#{@weight.descriptor( hash )}," +
55
57
  "#{@sources.collect { |source| source.descriptor( hash ) }.join ','})"
56
58
  end
57
59
 
@@ -78,20 +80,21 @@ module Hornetseye
78
80
  def demand
79
81
  if variables.empty?
80
82
  if @sources.any? { |source| source.dimension > 0 }
81
- source_type = @sources.collect { |source| source.array_type }.
82
- inject { |a,b| a.coercion b }
83
+ source_type = @sources.
84
+ collect { |source| source.array_type }.inject { |a,b| a.coercion b }
83
85
  source_type.shape.last.times do |i|
84
86
  sources = @sources.collect do |source|
85
87
  source.dimension > 0 ? source.element( INT.new( i ) ) : source
86
88
  end
87
- Histogram.new( @dest, *sources ).demand
89
+ weight = @weight.dimension > 0 ? @weight.element( INT.new( i ) ) : @weight
90
+ Histogram.new( @dest, weight, *sources ).demand
88
91
  end
89
92
  else
90
93
  dest = @dest
91
94
  ( @dest.dimension - 1 ).downto( 0 ) do |i|
92
95
  dest = dest.element @sources[ i ].demand
93
96
  end
94
- dest.store dest + 1
97
+ dest.store dest + @weight
95
98
  end
96
99
  @dest
97
100
  else
@@ -109,7 +112,7 @@ module Hornetseye
109
112
  #
110
113
  # @private
111
114
  def subst( hash )
112
- self.class.new @dest.subst( hash ),
115
+ self.class.new @dest.subst( hash ), @weight.subst( hash ),
113
116
  *@sources.collect { |source| source.subst hash }
114
117
  end
115
118
 
@@ -119,7 +122,7 @@ module Hornetseye
119
122
  #
120
123
  # @private
121
124
  def variables
122
- @sources.inject( @dest.variables ) { |a,b| a + b.variables }
125
+ @sources.inject( @dest.variables + @weight.variables ) { |a,b| a + b.variables }
123
126
  end
124
127
 
125
128
  # Strip of all values
@@ -132,7 +135,7 @@ module Hornetseye
132
135
  #
133
136
  # @private
134
137
  def strip
135
- stripped = ( [ @dest ] + @sources ).collect { |source| source.strip }
138
+ stripped = ( [ @dest, @weight ] + @sources ).collect { |source| source.strip }
136
139
  return stripped.inject( [] ) { |vars,elem| vars + elem[ 0 ] },
137
140
  stripped.inject( [] ) { |values,elem| values + elem[ 1 ] },
138
141
  self.class.new( *stripped.collect { |elem| elem[ 2 ] } )
@@ -144,7 +147,8 @@ module Hornetseye
144
147
  #
145
148
  # @private
146
149
  def compilable?
147
- @dest.compilable? and @sources.all? { |source| source.compilable? }
150
+ @dest.compilable? and @weight.compilable? and
151
+ @sources.all? { |source| source.compilable? }
148
152
  end
149
153
 
150
154
  end
@@ -456,14 +456,14 @@ module Hornetseye
456
456
  #
457
457
  # @overload histogram( *ret_shape, options = {} )
458
458
  # @param [Array<Integer>] ret_shape Dimensions of resulting histogram.
459
- # @option options [Class] :target (UINT) Element-type of resulting histogram.
459
+ # @option options [Node] :weight (UINT(1)) Weights for computing the histogram.
460
460
  # @option options [Boolean] :safe (true) Do a boundary check before creating the
461
461
  # histogram.
462
462
  #
463
463
  # @return [Node] The histogram.
464
464
  def histogram( *ret_shape )
465
465
  options = ret_shape.last.is_a?( Hash ) ? ret_shape.pop : {}
466
- options = { :target => UINT, :safe => true }.merge options
466
+ options = { :weight => UINT.new( 1 ), :safe => true }.merge options
467
467
  if shape.first != 1 and ret_shape.size == 1
468
468
  [ self ].histogram *( ret_shape + [ options ] )
469
469
  else
@@ -518,7 +518,7 @@ class Array
518
518
  #
519
519
  # @overload histogram( *ret_shape, options = {} )
520
520
  # @param [Array<Integer>] ret_shape Dimensions of resulting histogram.
521
- # @option options [Class] :target (Hornetseye::UINT) Element-type of resulting
521
+ # @option options [Node] :weight (Hornetseye::UINT(1)) Weights for computing the
522
522
  # histogram.
523
523
  # @option options [Boolean] :safe (true) Do a boundary check before creating the
524
524
  # histogram.
@@ -526,7 +526,8 @@ class Array
526
526
  # @return [Node] The histogram.
527
527
  def histogram( *ret_shape )
528
528
  options = ret_shape.last.is_a?( Hash ) ? ret_shape.pop : {}
529
- options = { :target => Hornetseye::UINT, :safe => true }.merge options
529
+ options = { :weight => Hornetseye::UINT.new( 1 ), :safe => true }.merge options
530
+ weight = options[ :weight ]
530
531
  if options[ :safe ]
531
532
  if size != ret_shape.size
532
533
  raise "Number of arrays for histogram (#{size}) differs from number of " +
@@ -535,6 +536,7 @@ class Array
535
536
  array_types = collect { |source| source.array_type }
536
537
  source_type = array_types.inject { |a,b| a.coercion b }
537
538
  source_type.check_shape *array_types
539
+ source_type.check_shape options[ :weight ]
538
540
  for i in 0 ... size
539
541
  range = self[ i ].range
540
542
  if range.begin < 0
@@ -547,9 +549,9 @@ class Array
547
549
  end
548
550
  end
549
551
  end
550
- left = Hornetseye::MultiArray.new options[ :target ], *ret_shape
552
+ left = Hornetseye::MultiArray.new weight.typecode, *ret_shape
551
553
  left[] = 0
552
- block = Hornetseye::Histogram.new left, *self
554
+ block = Hornetseye::Histogram.new left, weight, *self
553
555
  if block.compilable?
554
556
  Hornetseye::GCCFunction.run block
555
557
  else
@@ -429,13 +429,16 @@ class TC_MultiArray < Test::Unit::TestCase
429
429
 
430
430
  def test_histogram
431
431
  assert_equal S( I, 5 )[ 0, 1, 1, 2, 0 ],
432
- M[ [ 1, 2 ], [ 3, 3 ] ].histogram( 5, :target => I )
432
+ M[ [ 1, 2 ], [ 3, 3 ] ].histogram( 5, :weight => I.new( 1 ) )
433
433
  assert_equal M( I, 2, 2 )[ [ 1, 0 ], [ 1, 1 ] ],
434
- M[ [ 0, 0 ], [ 0, 1 ], [ 1, 1 ] ].histogram( 2, 2, :target => I )
434
+ M[ [ 0, 0 ], [ 0, 1 ], [ 1, 1 ] ].
435
+ histogram( 2, 2, :weight => I.new( 1 ) )
435
436
  assert_equal M( I, 2, 2 )[ [ 1, 0 ], [ 1, 1 ] ],
436
- [ S[ 0, 0, 1 ], S[ 0, 1, 1 ] ].histogram( 2, 2, :target => I )
437
+ [ S[ 0, 0, 1 ], S[ 0, 1, 1 ] ].
438
+ histogram( 2, 2, :weight => I.new( 1 ) )
437
439
  assert_equal M( I, 2, 2, 1 )[ [ [ 0, 1 ], [ 1, 0 ] ] ],
438
- S[ C( 1, 0, 0 ), C( 0, 1, 0 ) ].histogram( 2, 2, 1, :target => I )
440
+ S[ C( 1, 0, 0 ), C( 0, 1, 0 ) ].
441
+ histogram( 2, 2, 1, :weight => I.new( 1 ) )
439
442
  assert_raise( RuntimeError ) { S[ 1, 2, 3 ].histogram 4, 4 }
440
443
  assert_raise( RuntimeError ) { M[ [ -1, 0 ] ].histogram 3, 2 }
441
444
  assert_raise( RuntimeError ) { M[ [ 0, -1 ] ].histogram 3, 2 }
data/test/tc_sequence.rb CHANGED
@@ -344,13 +344,16 @@ class TC_Sequence < Test::Unit::TestCase
344
344
  def test_histogram
345
345
  [ O, I ].each do |t|
346
346
  assert_equal S( t, 5 )[ 0, 1, 2, 1, 1 ],
347
- S( t, 5 )[ 1, 2, 2, 3, 4 ].histogram( 5, :target => t )
347
+ S( t, 5 )[ 1, 2, 2, 3, 4 ].histogram( 5, :weight => t.new( 1 ) )
348
+ assert_equal S( t, 5 )[ 0, 1, 2, 3, 0 ],
349
+ S( t, 3 )[ 1, 3, 2 ].histogram( 5, :weight => S( t, 3 )[ 1, 3, 2 ] )
348
350
  assert_equal S( t, 4 )[ 0, 1, 1, 0 ],
349
- S( t, 2 )[ 1.0, 2.0 ].histogram( 4, :target => t )
351
+ S( t, 2 )[ 1.0, 2.0 ].histogram( 4, :weight => t.new( 1 ) )
350
352
  end
351
353
  assert_raise( RuntimeError ) { S[ -1, 0, 1 ].histogram 3 }
352
354
  assert_raise( RuntimeError ) { S[ 1, 2, 3 ].histogram 3 }
353
355
  assert_raise( RuntimeError ) { S[ 0, 0, 0 ].histogram 3, 2 }
356
+ assert_raise( RuntimeError ) { S[ 0, 1 ].histogram 3, :weight => S[ 0 ] }
354
357
  end
355
358
 
356
359
  def test_lut
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 12
7
+ - 13
8
8
  - 0
9
- version: 0.12.0
9
+ version: 0.13.0
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-05 00:00:00 +00:00
17
+ date: 2010-12-06 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency