def warp( *field )
      options = field.last.is_a?( Hash ) ? field.pop : {}
      options = { :safe => true, :default => typecode.default }.merge options
      if options[ :safe ]
        if field.size > dimension
          raise "Number of arrays for warp (#{field.size}) is greater than the " +
                "number of dimensions of source (#{dimension})"
        end
        Hornetseye::lazy do
          ( 0 ... field.size ).
            collect { |i| ( field[i] >= 0 ).and( field[i] < shape[i] ) }.
            inject :and
        end.conditional Lut.new( *( field + [ self ] ) ), options[ :default ]
      else
        field.lut self, :safe => false
      end
    end
def warp( *field )
      options = field.last.is_a?( Hash ) ? field.pop : {}
      options = { :safe => true, :default => typecode.default }.merge options
      if options[ :safe ]
        if field.size > dimension
          raise "Number of arrays for warp (#{field.size}) is greater than the " +
                "number of dimensions of source (#{dimension})"
        end
        Hornetseye::lazy do
          ( 0 ... field.size ).
            collect { |i| ( field[i] >= 0 ).and( field[i] < shape[i] ) }.
            inject :and
        end.conditional Lut.new( *( field + [ self ] ) ), options[ :default ]
      else
        field.lut self, :safe => false
      end
    end
Warp an array

 @overload warp( *field, options = {} )
   @param [Array<Integer>] ret_shape Dimensions of resulting histogram.
   @option options [Object] :default (typecode.default) Default value for out of
           range warp vectors.
   @option options [Boolean] :safe (true) Apply clip to warp vectors.

 @return [Node] The result of the lookup operation.