Class: Hornetseye::Histogram

Inherits:
Node show all
Defined in:
lib/multiarray/histogram.rb

Overview

Class for representing histogram computations

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Node

#+@, #<=>, ===, #[], #[]=, #allocate, #b=, #b_with_decompose, basetype, #basetype, #between?, bool, byte, #check_shape, #clip, #coerce, coercion_bool, coercion_byte, coercion_maxint, #collect, compilable?, #components, cond, #conditional, #convolve, #decompose, define_binary_op, define_unary_op, descriptor, #diagonal, #dilate, #dimension, dimension, #downsample, #dup, #each, #empty?, #eq_with_multiarray, #erode, #fill!, #finalised?, #flip, float, float_scalar, floating, #fmod_with_float, #force, #g=, #g_with_decompose, #gauss_blur, #gauss_gradient, #get, #height, #histogram, #histogram_with_rgb, identity, #if, #if_else, #imag=, #imag_with_decompose, indgen, #inject, #inspect, #integral, #lut, #lut_with_rgb, #malloc, #mask, match, #matched?, #max, maxint, #mean, #memorise, #memory, #min, #normalise, #prod, #r=, #r_with_decompose, #range, #real=, #real_with_decompose, #reshape, #rgb?, rgb?, #roll, scalar, shape, #shift, #simplify, #size, #sobel, #stretch, #stride, #strides, strip, subst, #sum, #swap_rgb_with_scalar, #table, #to_a, #to_s, to_s, #to_type, to_type, #to_type_with_identity, #to_type_with_rgb, #transpose, typecode, typecodes, #unmask, #unroll, variables, #warp, #width

Methods included from Field_::Match

#align, #fit

Methods included from FLOAT_::Match

#align, #fit

Methods included from OBJECT::Match

#align, #fit

Methods included from COMPLEX_::Match

#align, #fit

Methods included from BOOL::Match

#fit

Methods included from RGB_::Match

#align, #fit

Methods included from INT_::Match

#fit

Constructor Details

#initialize(dest, weight, *sources) ⇒ Histogram

Constructor

Parameters:

  • dest (Node)

    Target array to write histogram to.

  • weight (Node)

    The weight(s) for the histogram elements.

  • sources (Array<Node>)

    Arrays with elements to compute histogram of.



43
44
45
# File 'lib/multiarray/histogram.rb', line 43

def initialize( dest, weight, *sources )
  @dest, @weight, @sources = dest, weight, sources
end

Class Method Details

.finalised?Boolean

Check whether objects of this class are finalised computations

Returns:

  • (Boolean)

    Returns false.



30
31
32
# File 'lib/multiarray/histogram.rb', line 30

def finalised?
  false
end

Instance Method Details

#compilable?Boolean

Check whether this term is compilable

Returns:

  • (Boolean)

    Returns whether this term is compilable.



143
144
145
146
# File 'lib/multiarray/histogram.rb', line 143

def compilable?
  @dest.compilable? and @weight.compilable? and
    @sources.all? { |source| source.compilable? }
end

#demandNode, Object

Reevaluate computation

Returns:

See Also:



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/multiarray/histogram.rb', line 75

def demand
  if variables.empty?
    if @sources.any? { |source| source.dimension > 0 }
      source_type = @sources.inject { |a,b| a.dimension > b.dimension ? a : b }
      source_type.shape.last.times do |i|
        sources = @sources.collect do |source|
          source.dimension > 0 ? source.element(INT.new(i)) : source
        end
        weight = @weight.dimension > 0 ? @weight.element(INT.new(i)) : @weight
        Histogram.new(@dest, weight, *sources).demand
      end
    else
      dest = @dest
      (@dest.dimension - 1).downto(0) do |i|
        dest = dest.element @sources[i].demand
      end
      dest.store dest + @weight
    end
    @dest
  else
    super
  end
end

#descriptor(hash) ⇒ String

Get unique descriptor of this object

Parameters:

  • hash (Hash)

    Labels for any variables.

Returns:

  • (String)

    Descriptor of this object,



54
55
56
57
58
# File 'lib/multiarray/histogram.rb', line 54

def descriptor( hash )
  "Histogram(#{@dest.descriptor( hash )}," +
    "#{@weight.descriptor( hash )}," +
    "#{@sources.collect { |source| source.descriptor( hash ) }.join ','})"
end

#shapeObject



64
65
66
# File 'lib/multiarray/histogram.rb', line 64

def shape
  @dest.shape
end

#stripArray<Array,Node>

Strip of all values

Split up into variables, values, and a term where all values have been replaced with variables.

values, and the term based on variables.

Returns:



131
132
133
134
135
136
# File 'lib/multiarray/histogram.rb', line 131

def strip
  stripped = ( [ @dest, @weight ] + @sources ).collect { |source| source.strip }
  return stripped.inject([]) { |vars,elem| vars + elem[0] },
       stripped.inject([]) { |values,elem| values + elem[1] },
       self.class.new( *stripped.collect { |elem| elem[2] } )
end

#subst(hash) ⇒ Node

Substitute variables

Substitute the variables with the values given in the hash.

Parameters:

  • hash (Hash)

    Substitutions to apply.

Returns:

  • (Node)

    Term with substitutions applied.



108
109
110
111
# File 'lib/multiarray/histogram.rb', line 108

def subst( hash )
  self.class.new @dest.subst( hash ), @weight.subst( hash ),
                 *@sources.collect { |source| source.subst hash }
end

#typecodeObject



60
61
62
# File 'lib/multiarray/histogram.rb', line 60

def typecode
  @dest.typecode
end

#variablesSet

Get variables contained in this term

Returns:

  • (Set)

    Returns list of variables.



118
119
120
# File 'lib/multiarray/histogram.rb', line 118

def variables
  @sources.inject(@dest.variables + @weight.variables) { |a,b| a + b.variables }
end