Class: Hornetseye::Diagonal
Overview
Class for representing diagonal injections
Class Method Summary collapse
-
.finalised? ⇒ Boolean
Check whether objects of this class are finalised computations.
Instance Method Summary collapse
-
#compilable? ⇒ Boolean
Check whether this term is compilable.
-
#demand ⇒ Node, Object
Reevaluate computation.
-
#descriptor(hash) ⇒ String
Get unique descriptor of this object.
-
#element(i) ⇒ Node, Object
Get element of diagonal injection.
-
#initialize(value, index0, index1, index2, initial, block, var1, var2) ⇒ Diagonal
constructor
Constructor.
- #sexp? ⇒ Boolean
- #shape ⇒ Object
-
#strip ⇒ Array<Array,Node>
Strip of all values.
-
#subst(hash) ⇒ Node
Substitute variables.
- #typecode ⇒ Object
-
#variables ⇒ Set
Get variables contained in this term.
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, #memorise, #memory, #min, #normalise, #r=, #r_with_decompose, #range, #real=, #real_with_decompose, #reshape, #rgb?, rgb?, #roll, scalar, shape, #shift, #simplify, #size, #sobel, #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
Methods included from FLOAT_::Match
Methods included from OBJECT::Match
Methods included from COMPLEX_::Match
Methods included from BOOL::Match
Methods included from RGB_::Match
Methods included from INT_::Match
Constructor Details
#initialize(value, index0, index1, index2, initial, block, var1, var2) ⇒ Diagonal
Constructor
50 51 52 53 54 |
# File 'lib/multiarray/diagonal.rb', line 50 def initialize( value, index0, index1, index2, initial, block, var1, var2 ) @value, @index0, @index1, @index2, @initial, @block, @var1, @var2 = value, index0, index1, index2, initial, block, var1, var2 end |
Class Method Details
.finalised? ⇒ Boolean
Check whether objects of this class are finalised computations
30 31 32 |
# File 'lib/multiarray/diagonal.rb', line 30 def finalised? false end |
Instance Method Details
#compilable? ⇒ Boolean
Check whether this term is compilable
187 188 189 190 |
# File 'lib/multiarray/diagonal.rb', line 187 def compilable? initial_compilable = @initial ? @initial.compilable? : true @value.compilable? and initial_compilable and @block.compilable? end |
#demand ⇒ Node, Object
Reevaluate computation
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/multiarray/diagonal.rb', line 93 def demand s1 = @index2.size / 2 j0 = INT.new( 0 ).major( @index0 + s1 + 1 - @index1.size ) if @initial retval = @initial.simplify else j = j0.get i = @index0.get + s1.get - j retval = @value.subst( @index1 => INT.new( i ), @index2 => INT.new( j ) ).simplify j0 = ( j0 + 1 ).simplify end j0.upto( ( @index2.size - 1 ).minor( @index0 + s1 ) ) do |j| i = @index0.get + s1.get - j sub = @value.subst @index1 => INT.new( i ), @index2 => INT.new( j ) retval.assign @block.subst( @var1 => retval, @var2 => sub ) end retval end |
#descriptor(hash) ⇒ String
Get unique descriptor of this object
67 68 69 70 71 72 73 74 75 76 |
# File 'lib/multiarray/diagonal.rb', line 67 def descriptor( hash ) hash = hash.merge @index1 => ( ( hash.values.max || 0 ) + 1 ) hash = hash.merge @index2 => ( ( hash.values.max || 0 ) + 1 ) hash = hash.merge @var1 => ( ( hash.values.max || 0 ) + 1 ) hash = hash.merge @var2 => ( ( hash.values.max || 0 ) + 1 ) "Diagonal(#{@value.descriptor( hash )},#{@index0.descriptor( hash )}," + "#{@index1.descriptor( hash )},#{@index2.descriptor( hash )}," + "#{@initial ? @initial.descriptor( hash ) : 'nil'}," + "#{@block.descriptor( hash )})" end |
#element(i) ⇒ Node, Object
Get element of diagonal injection
120 121 122 123 |
# File 'lib/multiarray/diagonal.rb', line 120 def element( i ) Diagonal.new @value.element( i ), @index0, @index1, @index2, @initial, @block, @var1, @var2 end |
#sexp? ⇒ Boolean
56 57 58 |
# File 'lib/multiarray/diagonal.rb', line 56 def sexp? true end |
#shape ⇒ Object
82 83 84 |
# File 'lib/multiarray/diagonal.rb', line 82 def shape @value.shape end |
#strip ⇒ Array<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.
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/multiarray/diagonal.rb', line 145 def strip , , var1 = @index1.strip , , var2 = @index2.strip vars1, values1, term1 = @value.subst( @index1 => var1, @index2 => var2 ).strip if @initial vars2, values2, term2 = @initial.strip else vars2, values2, term2 = [], [], nil end vars3, values3, term3 = @block.strip return vars1 + + + vars2 + vars3, values1 + + + values2 + values3, Diagonal.new( term1, @index0, var1, var2, term2, term3, @var1, @var2 ) end |
#subst(hash) ⇒ Node
Substitute variables
Substitute the variables with the values given in the hash.
170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/multiarray/diagonal.rb', line 170 def subst( hash ) subst_var0 = @index0.subst hash subst_var1 = @index1.subst hash subst_var2 = @index2.subst hash value = @value.subst( @index0 => subst_var0, @index1 => subst_var1, @index2 => subst_var2 ).subst hash initial = @initial ? @initial.subst( hash ) : nil block = @block.subst hash Diagonal.new value, subst_var0, subst_var1, subst_var2, initial, block, @var1, @var2 end |
#typecode ⇒ Object
78 79 80 |
# File 'lib/multiarray/diagonal.rb', line 78 def typecode @block.typecode end |
#variables ⇒ Set
Get variables contained in this term
130 131 132 133 134 |
# File 'lib/multiarray/diagonal.rb', line 130 def variables initial_variables = @initial ? @initial.variables : Set[] @value.variables + initial_variables + @index0.variables - ( @index1.variables + @index2.variables ) end |