tensor_stream 1.0.4 → 1.0.9
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.
- checksums.yaml +4 -4
 - data/.gitignore +1 -0
 - data/CHANGELOG.md +12 -2
 - data/Dockerfile +1 -1
 - data/USAGE_GUIDE.md +68 -0
 - data/lib/tensor_stream.rb +1 -0
 - data/lib/tensor_stream/evaluator/base_evaluator.rb +21 -1
 - data/lib/tensor_stream/evaluator/evaluator.rb +1 -0
 - data/lib/tensor_stream/evaluator/evaluator_utils.rb +20 -0
 - data/lib/tensor_stream/evaluator/operation_helpers/array_ops_helper.rb +60 -0
 - data/lib/tensor_stream/evaluator/ruby/array_ops.rb +53 -1
 - data/lib/tensor_stream/evaluator/ruby/images_ops.rb +26 -0
 - data/lib/tensor_stream/evaluator/ruby/math_ops.rb +60 -5
 - data/lib/tensor_stream/evaluator/ruby/nn_ops.rb +25 -29
 - data/lib/tensor_stream/evaluator/ruby/random_ops.rb +7 -11
 - data/lib/tensor_stream/evaluator/ruby/storage_manager.rb +40 -0
 - data/lib/tensor_stream/evaluator/ruby/variable_ops.rb +74 -0
 - data/lib/tensor_stream/evaluator/ruby_evaluator.rb +31 -77
 - data/lib/tensor_stream/generated_stub/ops.rb +256 -166
 - data/lib/tensor_stream/generated_stub/stub_file.erb +4 -4
 - data/lib/tensor_stream/graph.rb +3 -3
 - data/lib/tensor_stream/graph_deserializers/yaml_loader.rb +4 -6
 - data/lib/tensor_stream/helpers/infer_shape.rb +1 -7
 - data/lib/tensor_stream/helpers/tensor_mixins.rb +10 -1
 - data/lib/tensor_stream/images.rb +4 -0
 - data/lib/tensor_stream/math/math_ops.rb +22 -0
 - data/lib/tensor_stream/math_gradients.rb +15 -1
 - data/lib/tensor_stream/nn/embedding_lookup.rb +114 -0
 - data/lib/tensor_stream/nn/nn_ops.rb +16 -0
 - data/lib/tensor_stream/op_maker.rb +36 -3
 - data/lib/tensor_stream/operation.rb +8 -20
 - data/lib/tensor_stream/ops.rb +14 -11
 - data/lib/tensor_stream/ops/bias_add.rb +16 -0
 - data/lib/tensor_stream/ops/equal.rb +4 -0
 - data/lib/tensor_stream/ops/greater.rb +4 -0
 - data/lib/tensor_stream/ops/greater_equal.rb +4 -0
 - data/lib/tensor_stream/ops/less.rb +19 -0
 - data/lib/tensor_stream/ops/less_equal.rb +4 -0
 - data/lib/tensor_stream/ops/not_equal.rb +19 -0
 - data/lib/tensor_stream/ops/rsqrt.rb +11 -0
 - data/lib/tensor_stream/ops/strided_slice.rb +24 -0
 - data/lib/tensor_stream/ops/sum.rb +4 -2
 - data/lib/tensor_stream/ops/top_k.rb +23 -0
 - data/lib/tensor_stream/session.rb +6 -12
 - data/lib/tensor_stream/tensor.rb +1 -0
 - data/lib/tensor_stream/tensor_shape.rb +32 -1
 - data/lib/tensor_stream/train/saver.rb +2 -3
 - data/lib/tensor_stream/utils.rb +18 -13
 - data/lib/tensor_stream/utils/freezer.rb +5 -1
 - data/lib/tensor_stream/utils/py_ports.rb +11 -0
 - data/lib/tensor_stream/variable.rb +9 -6
 - data/lib/tensor_stream/version.rb +1 -1
 - data/samples/word_embeddings/word_embedding_1.rb +192 -0
 - data/samples/word_embeddings/word_embedding_2.rb +203 -0
 - data/tensor_stream.gemspec +7 -2
 - metadata +67 -10
 
| 
         @@ -7,22 +7,20 @@ module TensorStream 
     | 
|
| 
       7 
7 
     | 
    
         
             
                      target_var, learning_rate, delta = inputs
         
     | 
| 
       8 
8 
     | 
    
         
             
                      assign = tensor.inputs[0] || tensor
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
                      assign 
     | 
| 
       11 
     | 
    
         
            -
                      assign.container
         
     | 
| 
      
 10 
     | 
    
         
            +
                      var_assign_value(assign, process_vector_math_op(tensor, target_var, delta, context) { |t, u| t - u * learning_rate })
         
     | 
| 
       12 
11 
     | 
    
         
             
                    end
         
     | 
| 
       13 
12 
     | 
    
         | 
| 
       14 
13 
     | 
    
         
             
                    register_op :apply_momentum do |_context, tensor, inputs|
         
     | 
| 
       15 
14 
     | 
    
         
             
                      target_var, momentum_var, learning_rate, grad, momentum = inputs
         
     | 
| 
       16 
15 
     | 
    
         
             
                      assign = tensor.inputs[0] || tensor
         
     | 
| 
       17 
16 
     | 
    
         
             
                      assign_acc = tensor.inputs[1]
         
     | 
| 
       18 
     | 
    
         
            -
                      assign_acc 
     | 
| 
       19 
     | 
    
         
            -
                       
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                      assign.container
         
     | 
| 
      
 17 
     | 
    
         
            +
                      var_assign_value(assign_acc, multi_array_op(->(t, u) { t * momentum + u }, momentum_var, grad))
         
     | 
| 
      
 18 
     | 
    
         
            +
                      var = if tensor.options[:use_nesterov]
         
     | 
| 
      
 19 
     | 
    
         
            +
                              multi_array_op(->(v, g, acc) { v - (g * learning_rate + acc * momentum * learning_rate) }, target_var, grad, momentum_var)
         
     | 
| 
      
 20 
     | 
    
         
            +
                            else
         
     | 
| 
      
 21 
     | 
    
         
            +
                              multi_array_op(->(v, acc) { v - acc * learning_rate }, target_var, momentum_var)
         
     | 
| 
      
 22 
     | 
    
         
            +
                            end
         
     | 
| 
      
 23 
     | 
    
         
            +
                      var_assign_value(assign, var)
         
     | 
| 
       26 
24 
     | 
    
         
             
                    end
         
     | 
| 
       27 
25 
     | 
    
         | 
| 
       28 
26 
     | 
    
         
             
                    register_op :apply_adadelta do |_context, tensor, inputs|
         
     | 
| 
         @@ -30,19 +28,18 @@ module TensorStream 
     | 
|
| 
       30 
28 
     | 
    
         
             
                      assign = tensor.inputs[0] || tensor
         
     | 
| 
       31 
29 
     | 
    
         
             
                      assign_acc = tensor.inputs[1]
         
     | 
| 
       32 
30 
     | 
    
         
             
                      assign_acc_update = tensor.inputs[2]
         
     | 
| 
       33 
     | 
    
         
            -
                       
     | 
| 
       34 
     | 
    
         
            -
                      update = multi_array_op(->(acc_update_t, acc_t, grad_t) { Math.sqrt(acc_update_t + epsilon) * (1.0 / Math.sqrt(acc_t + epsilon)) * grad_t }, accum_update,  
     | 
| 
       35 
     | 
    
         
            -
                       
     | 
| 
       36 
     | 
    
         
            -
                      assign_acc_update 
     | 
| 
      
 31 
     | 
    
         
            +
                      acc_val = var_assign_value(assign_acc, multi_array_op(->(acc_t, grad_t) { acc_t * rho + (grad_t * grad_t) * (1.0 - rho) }, accum, grad))
         
     | 
| 
      
 32 
     | 
    
         
            +
                      update = multi_array_op(->(acc_update_t, acc_t, grad_t) { Math.sqrt(acc_update_t + epsilon) * (1.0 / Math.sqrt(acc_t + epsilon)) * grad_t }, accum_update, acc_val, grad)
         
     | 
| 
      
 33 
     | 
    
         
            +
                      result = var_assign_value(assign, multi_array_op(->(v, u) { v - (u * lr) }, target_var, update))
         
     | 
| 
      
 34 
     | 
    
         
            +
                      var_assign_value(assign_acc_update,multi_array_op(->(acc_update_t, u) { acc_update_t * rho + (u * u) * (1.0 - rho) }, accum_update, update))
         
     | 
| 
       37 
35 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                       
     | 
| 
      
 36 
     | 
    
         
            +
                      result
         
     | 
| 
       39 
37 
     | 
    
         
             
                    end
         
     | 
| 
       40 
38 
     | 
    
         | 
| 
       41 
39 
     | 
    
         
             
                    register_op :apply_adagrad do |_context, tensor, inputs|
         
     | 
| 
       42 
40 
     | 
    
         
             
                      target_var, accum, lr, grad = inputs
         
     | 
| 
       43 
41 
     | 
    
         
             
                      assign = tensor.inputs[0] || tensor
         
     | 
| 
       44 
     | 
    
         
            -
                      assign 
     | 
| 
       45 
     | 
    
         
            -
                      assign.container
         
     | 
| 
      
 42 
     | 
    
         
            +
                      var_assign_value(assign, multi_array_op(->(v, a, g) { v - (g * lr * (1.0 / Math.sqrt(a))) }, target_var, accum, grad))
         
     | 
| 
       46 
43 
     | 
    
         
             
                    end
         
     | 
| 
       47 
44 
     | 
    
         | 
| 
       48 
45 
     | 
    
         
             
                    register_op :apply_adam do |_context, tensor, inputs|
         
     | 
| 
         @@ -52,10 +49,9 @@ module TensorStream 
     | 
|
| 
       52 
49 
     | 
    
         
             
                      assign_m = tensor.inputs[1]
         
     | 
| 
       53 
50 
     | 
    
         
             
                      assign_v = tensor.inputs[2]
         
     | 
| 
       54 
51 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                       
     | 
| 
       56 
     | 
    
         
            -
                       
     | 
| 
       57 
     | 
    
         
            -
                      assign 
     | 
| 
       58 
     | 
    
         
            -
                      assign.container
         
     | 
| 
      
 52 
     | 
    
         
            +
                      m_val = var_assign_value(assign_m, multi_array_op(->(u_d, g) { u_d + (g - u_d) * (1.0 - beta1_t) }, m, grad))
         
     | 
| 
      
 53 
     | 
    
         
            +
                      v_val = var_assign_value(assign_v, multi_array_op(->(u_d, v_d) { u_d + (v_d**2 - u_d) * (1.0 - beta2_t)}, v, grad))
         
     | 
| 
      
 54 
     | 
    
         
            +
                      var_assign_value(assign, multi_array_op(->(t, m_d, v_d) { t - ((m_d * alpha) / (Math.sqrt(v_d) + epsilon_t)) }, target_var, m_val, v_val))
         
     | 
| 
       59 
55 
     | 
    
         
             
                    end
         
     | 
| 
       60 
56 
     | 
    
         | 
| 
       61 
57 
     | 
    
         
             
                    register_op :apply_rms_prop do |_context, tensor, inputs|
         
     | 
| 
         @@ -63,9 +59,9 @@ module TensorStream 
     | 
|
| 
       63 
59 
     | 
    
         
             
                      assign = tensor.inputs[0]
         
     | 
| 
       64 
60 
     | 
    
         
             
                      assign_ms = tensor.inputs[1]
         
     | 
| 
       65 
61 
     | 
    
         
             
                      assign_mom = tensor.inputs[2]
         
     | 
| 
       66 
     | 
    
         
            -
                       
     | 
| 
       67 
     | 
    
         
            -
                       
     | 
| 
       68 
     | 
    
         
            -
                      assign 
     | 
| 
      
 62 
     | 
    
         
            +
                      ms_val = var_assign_value(assign_ms, multi_array_op(->(g, m) { m + (g * g - m) * (1.0 - rho)}, grad, ms))
         
     | 
| 
      
 63 
     | 
    
         
            +
                      mom_val = var_assign_value(assign_mom, multi_array_op(->(mom_t, g, m) { mom_t * momentum + (g * lr) / Math.sqrt(m + epsilon)}, mom, grad, ms_val))
         
     | 
| 
      
 64 
     | 
    
         
            +
                      var_assign_value(assign, multi_array_op(->(v, m) { v - m }, var, mom_val))
         
     | 
| 
       69 
65 
     | 
    
         
             
                    end
         
     | 
| 
       70 
66 
     | 
    
         | 
| 
       71 
67 
     | 
    
         
             
                    register_op :apply_centered_rms_prop do |_context, tensor, inputs|
         
     | 
| 
         @@ -75,11 +71,11 @@ module TensorStream 
     | 
|
| 
       75 
71 
     | 
    
         
             
                      assign_ms = tensor.inputs[2]
         
     | 
| 
       76 
72 
     | 
    
         
             
                      assign_mom = tensor.inputs[3]
         
     | 
| 
       77 
73 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                       
     | 
| 
       79 
     | 
    
         
            -
                      assign_mg 
     | 
| 
       80 
     | 
    
         
            -
                      denom =  multi_array_op(->(s, mg_t) { (s - mg_t * mg_t) + epsilon },  
     | 
| 
       81 
     | 
    
         
            -
                       
     | 
| 
       82 
     | 
    
         
            -
                      assign 
     | 
| 
      
 74 
     | 
    
         
            +
                      val_ms = var_assign_value(assign_ms, multi_array_op(->(g, m) { m + (g * g - m) * (1.0 - rho) }, grad, ms))
         
     | 
| 
      
 75 
     | 
    
         
            +
                      var_assign_value(assign_mg, multi_array_op(->(g, mg_t) {  (g - mg_t) * (1.0 - rho) }, grad, mg))
         
     | 
| 
      
 76 
     | 
    
         
            +
                      denom =  multi_array_op(->(s, mg_t) { (s - mg_t * mg_t) + epsilon }, val_ms, mg)
         
     | 
| 
      
 77 
     | 
    
         
            +
                      val_mom = var_assign_value(assign_mom, multi_array_op(->(mom_t, g, d) { mom_t * momentum + (g * lr) / Math.sqrt(d)}, mom, grad, denom))
         
     | 
| 
      
 78 
     | 
    
         
            +
                      var_assign_value(assign, multi_array_op(->(v, m) { v - m }, var, val_mom))
         
     | 
| 
       83 
79 
     | 
    
         
             
                    end
         
     | 
| 
       84 
80 
     | 
    
         | 
| 
       85 
81 
     | 
    
         
             
                    register_op %i[softmax_cross_entropy_with_logits_v2 softmax_cross_entropy_with_logits] do |_context, tensor, inputs|
         
     | 
| 
         @@ -9,12 +9,12 @@ module TensorStream 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                      shape = tensor.options[:shape] || tensor.shape.shape
         
     | 
| 
       11 
11 
     | 
    
         
             
                      fan_in, fan_out = if shape.size.zero?
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
                                          [1, 1]
         
     | 
| 
      
 13 
     | 
    
         
            +
                                        elsif shape.size == 1
         
     | 
| 
      
 14 
     | 
    
         
            +
                                          [1, shape[0]]
         
     | 
| 
      
 15 
     | 
    
         
            +
                                        else
         
     | 
| 
      
 16 
     | 
    
         
            +
                                          [shape[0], shape.last]
         
     | 
| 
      
 17 
     | 
    
         
            +
                                        end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                      limit = Math.sqrt(6.0 / (fan_in + fan_out))
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
         @@ -50,7 +50,7 @@ module TensorStream 
     | 
|
| 
       50 
50 
     | 
    
         
             
                      seed = tensor.options[:seed]
         
     | 
| 
       51 
51 
     | 
    
         
             
                      random = _get_randomizer(tensor, seed)
         
     | 
| 
       52 
52 
     | 
    
         
             
                      r = RandomGaussian.new(tensor.options.fetch(:mean), tensor.options.fetch(:stddev), -> { random.rand })
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       54 
54 
     | 
    
         
             
                      generator = -> { r.rand }
         
     | 
| 
       55 
55 
     | 
    
         
             
                      shape = inputs[0] || tensor.shape.shape
         
     | 
| 
       56 
56 
     | 
    
         
             
                      random_values = Array.new(shape.reduce(:*) || 1) {
         
     | 
| 
         @@ -75,9 +75,6 @@ module TensorStream 
     | 
|
| 
       75 
75 
     | 
    
         | 
| 
       76 
76 
     | 
    
         
             
                      norm_min = (minval - mean) / stddev
         
     | 
| 
       77 
77 
     | 
    
         
             
                      norm_max = (maxval - mean) / stddev
         
     | 
| 
       78 
     | 
    
         
            -
                      sqrt_factor = Math.sqrt((norm_min * norm_min) + 4.0)
         
     | 
| 
       79 
     | 
    
         
            -
                      cutoff = 2.0 * Math.exp(0.5 + (norm_min * (norm_min - sqrt_factor)) / 4.0) / (norm_min + sqrt_factor)
         
     | 
| 
       80 
     | 
    
         
            -
                      diff = norm_max - norm_min
         
     | 
| 
       81 
78 
     | 
    
         | 
| 
       82 
79 
     | 
    
         
             
                      val = random_values.map { |v|
         
     | 
| 
       83 
80 
     | 
    
         
             
                        iterations = 0
         
     | 
| 
         @@ -93,7 +90,6 @@ module TensorStream 
     | 
|
| 
       93 
90 
     | 
    
         | 
| 
       94 
91 
     | 
    
         
             
                        pick
         
     | 
| 
       95 
92 
     | 
    
         
             
                      }
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
93 
     | 
    
         
             
                      TensorShape.reshape(val, shape)
         
     | 
| 
       98 
94 
     | 
    
         
             
                    end
         
     | 
| 
       99 
95 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module TensorStream
         
     | 
| 
      
 2 
     | 
    
         
            +
              class RubyStorageManager
         
     | 
| 
      
 3 
     | 
    
         
            +
                def self.current_storage_manager
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @storage_manager ||= RubyStorageManager.new
         
     | 
| 
      
 5 
     | 
    
         
            +
                end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @variables = {}
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def exists?(graph, name)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  return false if !@variables.key?(graph.object_id)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  @variables[graph.object_id].key?(name.to_sym)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def create_variable(graph, name, value)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  raise "no name specified" if name.nil?
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  @variables[graph.object_id][name.to_sym] = value
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def assign_value(graph, name, value)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  raise "no name specified" if name.nil?
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  @variables[graph.object_id] ||= {}
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @variables[graph.object_id][name.to_sym] = value
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def read_value(graph, name)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  raise "no name specified" if name.nil?
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  @variables[graph.object_id][name.to_sym]
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def clear_variables(graph)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @variables[graph.object_id] = {}
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module TensorStream
         
     | 
| 
      
 2 
     | 
    
         
            +
              ## Collection of machine learning related ops
         
     | 
| 
      
 3 
     | 
    
         
            +
              module VariableOps
         
     | 
| 
      
 4 
     | 
    
         
            +
                def self.included(klass)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  klass.class_eval do
         
     | 
| 
      
 6 
     | 
    
         
            +
                    register_op :variable_v2 do |_context, tensor, _inputs|
         
     | 
| 
      
 7 
     | 
    
         
            +
                      value = var_read_value(tensor)
         
     | 
| 
      
 8 
     | 
    
         
            +
                      raise "variable #{tensor.options[:var_name]} not initalized" if value.nil?
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                      value
         
     | 
| 
      
 11 
     | 
    
         
            +
                    end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    register_op :assign do |context, tensor, inputs|
         
     | 
| 
      
 14 
     | 
    
         
            +
                      var_assign_value(tensor, inputs[0])
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                    register_op :assign_add, no_eval: true do |context, tensor, inputs|
         
     | 
| 
      
 18 
     | 
    
         
            +
                      current_val = var_read_value(tensor)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                      raise "variable #{tensor.options[:var_name]} not initialized" if current_val.nil?
         
     | 
| 
      
 21 
     | 
    
         
            +
                      eval_a, eval_b = broadcast(current_val, inputs[0])
         
     | 
| 
      
 22 
     | 
    
         
            +
                      result = multi_array_op(->(var, val) { var + val }, eval_a, eval_b)
         
     | 
| 
      
 23 
     | 
    
         
            +
                      var_assign_value(tensor, result)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    register_op :assign_sub do |context, tensor, inputs|
         
     | 
| 
      
 27 
     | 
    
         
            +
                      current_val = var_read_value(tensor)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      raise "variable #{tensor.options[:var_name]} not initialized" if current_val.nil?
         
     | 
| 
      
 29 
     | 
    
         
            +
                      eval_a, eval_b = broadcast(current_val, inputs[0])
         
     | 
| 
      
 30 
     | 
    
         
            +
                      result = multi_array_op(->(var, val) { var - val }, eval_a, eval_b)
         
     | 
| 
      
 31 
     | 
    
         
            +
                      var_assign_value(tensor, result)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    register_op :save_ts do |_context, tensor, inputs|
         
     | 
| 
      
 35 
     | 
    
         
            +
                      outputfile = inputs[0]
         
     | 
| 
      
 36 
     | 
    
         
            +
                      inputs = tensor.inputs.dup
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                      inputs.shift
         
     | 
| 
      
 39 
     | 
    
         
            +
                      variables = {}
         
     | 
| 
      
 40 
     | 
    
         
            +
                      inputs.each do |savable|
         
     | 
| 
      
 41 
     | 
    
         
            +
                        val = var_read_value(savable)
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                        packed_data = Zlib::Deflate.deflate(TensorStream::Packer.pack(val, savable.data_type))
         
     | 
| 
      
 44 
     | 
    
         
            +
                        variables[savable.options[:var_name]] = {
         
     | 
| 
      
 45 
     | 
    
         
            +
                          "shape" => shape_eval(val),
         
     | 
| 
      
 46 
     | 
    
         
            +
                          "data" => Base64.strict_encode64(packed_data),
         
     | 
| 
      
 47 
     | 
    
         
            +
                        }
         
     | 
| 
      
 48 
     | 
    
         
            +
                      end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                      File.write(outputfile, {"variables" => variables}.to_yaml)
         
     | 
| 
      
 51 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 52 
     | 
    
         
            +
                    end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                    register_op :restore_ts do |_context, tensor, inputs|
         
     | 
| 
      
 55 
     | 
    
         
            +
                      inputs = inputs.dup
         
     | 
| 
      
 56 
     | 
    
         
            +
                      filename = inputs.shift
         
     | 
| 
      
 57 
     | 
    
         
            +
                      tensor_names = inputs
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                      input_dump = YAML.safe_load(File.read(filename), [Symbol])
         
     | 
| 
      
 60 
     | 
    
         
            +
                      vars = tensor.graph.get_collection(GraphKeys::GLOBAL_VARIABLES)
         
     | 
| 
      
 61 
     | 
    
         
            +
                      vars.select! { |v| input_dump["variables"].key?(v.name) && tensor_names.include?(v.name) }
         
     | 
| 
      
 62 
     | 
    
         
            +
                      vars.each do |variable|
         
     | 
| 
      
 63 
     | 
    
         
            +
                        data = TensorStream::Packer.unpack(Zlib::Inflate.inflate(Base64.decode64(input_dump["variables"][variable.name]["data"])), variable.data_type)
         
     | 
| 
      
 64 
     | 
    
         
            +
                        shape = input_dump["variables"][variable.name]["shape"]
         
     | 
| 
      
 65 
     | 
    
         
            +
                        variable.buffer = nil
         
     | 
| 
      
 66 
     | 
    
         
            +
                        var_assign_value(variable, TensorShape.reshape(data, shape))
         
     | 
| 
      
 67 
     | 
    
         
            +
                      end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -2,12 +2,14 @@ require "tensor_stream/evaluator/operation_helpers/random_gaussian" 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require "tensor_stream/evaluator/operation_helpers/array_ops_helper"
         
     | 
| 
       3 
3 
     | 
    
         
             
            require "tensor_stream/evaluator/operation_helpers/math_helper"
         
     | 
| 
       4 
4 
     | 
    
         
             
            require "tensor_stream/evaluator/base_evaluator"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "tensor_stream/evaluator/ruby/storage_manager"
         
     | 
| 
       5 
6 
     | 
    
         
             
            require "tensor_stream/evaluator/ruby/math_ops"
         
     | 
| 
       6 
7 
     | 
    
         
             
            require "tensor_stream/evaluator/ruby/nn_ops"
         
     | 
| 
       7 
8 
     | 
    
         
             
            require "tensor_stream/evaluator/ruby/array_ops"
         
     | 
| 
       8 
9 
     | 
    
         
             
            require "tensor_stream/evaluator/ruby/random_ops"
         
     | 
| 
       9 
10 
     | 
    
         
             
            require "tensor_stream/evaluator/ruby/images_ops"
         
     | 
| 
       10 
11 
     | 
    
         
             
            require "tensor_stream/evaluator/ruby/check_ops"
         
     | 
| 
      
 12 
     | 
    
         
            +
            require "tensor_stream/evaluator/ruby/variable_ops"
         
     | 
| 
       11 
13 
     | 
    
         | 
| 
       12 
14 
     | 
    
         
             
            module TensorStream
         
     | 
| 
       13 
15 
     | 
    
         
             
              module Evaluator
         
     | 
| 
         @@ -41,6 +43,11 @@ module TensorStream 
     | 
|
| 
       41 
43 
     | 
    
         
             
                  include TensorStream::RandomOps
         
     | 
| 
       42 
44 
     | 
    
         
             
                  include TensorStream::ImagesOps
         
     | 
| 
       43 
45 
     | 
    
         
             
                  include TensorStream::CheckOps
         
     | 
| 
      
 46 
     | 
    
         
            +
                  include TensorStream::VariableOps
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  def self.get_storage_manager
         
     | 
| 
      
 49 
     | 
    
         
            +
                    RubyStorageManager.current_storage_manager
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
       44 
51 
     | 
    
         | 
| 
       45 
52 
     | 
    
         
             
                  def run(tensor, execution_context)
         
     | 
| 
       46 
53 
     | 
    
         
             
                    return tensor.map { |t| run(t, execution_context) } if tensor.is_a?(Array) && !tensor.empty? && tensor[0].is_a?(Tensor)
         
     | 
| 
         @@ -49,12 +56,12 @@ module TensorStream 
     | 
|
| 
       49 
56 
     | 
    
         | 
| 
       50 
57 
     | 
    
         
             
                    child_context = execution_context.dup
         
     | 
| 
       51 
58 
     | 
    
         
             
                    res = if tensor.is_a?(Operation)
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 59 
     | 
    
         
            +
                            eval_operation(tensor, child_context)
         
     | 
| 
      
 60 
     | 
    
         
            +
                          elsif !tensor.is_a?(Tensor)
         
     | 
| 
      
 61 
     | 
    
         
            +
                            tensor
         
     | 
| 
      
 62 
     | 
    
         
            +
                          else
         
     | 
| 
      
 63 
     | 
    
         
            +
                            tensor.op
         
     | 
| 
      
 64 
     | 
    
         
            +
                          end
         
     | 
| 
       58 
65 
     | 
    
         
             
                    execution_context.deep_merge!(returns: child_context[:returns])
         
     | 
| 
       59 
66 
     | 
    
         
             
                    res
         
     | 
| 
       60 
67 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -77,11 +84,23 @@ module TensorStream 
     | 
|
| 
       77 
84 
     | 
    
         
             
                      break unless tensor.is_a?(Tensor)
         
     | 
| 
       78 
85 
     | 
    
         
             
                    end
         
     | 
| 
       79 
86 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
                    tensor.is_a?(OutputGroup) ? tensor.outputs 
     | 
| 
      
 87 
     | 
    
         
            +
                    tensor.is_a?(OutputGroup) ? tensor.outputs : tensor
         
     | 
| 
       81 
88 
     | 
    
         
             
                  end
         
     | 
| 
       82 
89 
     | 
    
         | 
| 
       83 
90 
     | 
    
         
             
                  protected
         
     | 
| 
       84 
91 
     | 
    
         | 
| 
      
 92 
     | 
    
         
            +
                  def var_read_value(tensor)
         
     | 
| 
      
 93 
     | 
    
         
            +
                    @storage_manager ||= TensorStream::RubyStorageManager.current_storage_manager
         
     | 
| 
      
 94 
     | 
    
         
            +
                    @storage_manager.read_value(tensor.graph, tensor.options[:var_name])
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                  def var_assign_value(tensor, value)
         
     | 
| 
      
 98 
     | 
    
         
            +
                    @storage_manager ||= TensorStream::RubyStorageManager.current_storage_manager
         
     | 
| 
      
 99 
     | 
    
         
            +
                    @storage_manager.assign_value(tensor.graph, tensor.options[:var_name] || tensor.name, value)
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                    value
         
     | 
| 
      
 102 
     | 
    
         
            +
                  end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
       85 
104 
     | 
    
         
             
                  def prepare_input(tensor, context, options = {})
         
     | 
| 
       86 
105 
     | 
    
         
             
                    return nil unless tensor
         
     | 
| 
       87 
106 
     | 
    
         | 
| 
         @@ -154,37 +173,10 @@ module TensorStream 
     | 
|
| 
       154 
173 
     | 
    
         
             
                    end
         
     | 
| 
       155 
174 
     | 
    
         
             
                  end
         
     | 
| 
       156 
175 
     | 
    
         | 
| 
       157 
     | 
    
         
            -
                  register_op :variable_v2, no_eval: true do |_context, tensor, _inputs|
         
     | 
| 
       158 
     | 
    
         
            -
                    value = tensor.options[:container].read_value
         
     | 
| 
       159 
     | 
    
         
            -
                    raise "variable #{tensor.options[:container].name} not initalized" if value.nil?
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
                    value
         
     | 
| 
       162 
     | 
    
         
            -
                  end
         
     | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
       164 
176 
     | 
    
         
             
                  register_op :stop_gradient, no_eval: true do |_context, _tensor, inputs|
         
     | 
| 
       165 
177 
     | 
    
         
             
                    inputs[0]
         
     | 
| 
       166 
178 
     | 
    
         
             
                  end
         
     | 
| 
       167 
179 
     | 
    
         | 
| 
       168 
     | 
    
         
            -
                  register_op :assign, noop: true do |context, tensor, _inputs|
         
     | 
| 
       169 
     | 
    
         
            -
                    assign = tensor.inputs[0] || tensor
         
     | 
| 
       170 
     | 
    
         
            -
                    assign.container = global_eval(tensor, tensor.inputs[1], context)
         
     | 
| 
       171 
     | 
    
         
            -
                    assign.container
         
     | 
| 
       172 
     | 
    
         
            -
                  end
         
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                  register_op :assign_add, noop: true do |context, tensor, _inputs|
         
     | 
| 
       175 
     | 
    
         
            -
                    assign = tensor.inputs[0] || tensor
         
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
                    assign.container = process_vector_math_op(tensor, tensor.inputs[0], tensor.inputs[1], context) { |t, u| t + u }
         
     | 
| 
       178 
     | 
    
         
            -
                    assign.container
         
     | 
| 
       179 
     | 
    
         
            -
                  end
         
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
                  register_op :assign_sub, noop: true do |context, tensor, _inputs|
         
     | 
| 
       182 
     | 
    
         
            -
                    assign = tensor.inputs[0] || tensor
         
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
                    assign.container = process_vector_math_op(tensor, tensor.inputs[0], tensor.inputs[1], context) { |t, u| t - u }
         
     | 
| 
       185 
     | 
    
         
            -
                    assign.container
         
     | 
| 
       186 
     | 
    
         
            -
                  end
         
     | 
| 
       187 
     | 
    
         
            -
             
     | 
| 
       188 
180 
     | 
    
         
             
                  register_op :less do |context, tensor, inputs|
         
     | 
| 
       189 
181 
     | 
    
         
             
                    a, b = inputs
         
     | 
| 
       190 
182 
     | 
    
         
             
                    call_vector_op(tensor, :less, a, b, context) { |t, u| t < u }
         
     | 
| 
         @@ -236,44 +228,6 @@ module TensorStream 
     | 
|
| 
       236 
228 
     | 
    
         
             
                    softmax(inputs[0])
         
     | 
| 
       237 
229 
     | 
    
         
             
                  end
         
     | 
| 
       238 
230 
     | 
    
         | 
| 
       239 
     | 
    
         
            -
                  register_op :save_ts do |_context, tensor, inputs|
         
     | 
| 
       240 
     | 
    
         
            -
                    outputfile = inputs[0]
         
     | 
| 
       241 
     | 
    
         
            -
                    inputs = tensor.inputs.dup
         
     | 
| 
       242 
     | 
    
         
            -
             
     | 
| 
       243 
     | 
    
         
            -
                    inputs.shift
         
     | 
| 
       244 
     | 
    
         
            -
                    variables = {}
         
     | 
| 
       245 
     | 
    
         
            -
                    inputs.each do |savable|
         
     | 
| 
       246 
     | 
    
         
            -
                      val = savable.container
         
     | 
| 
       247 
     | 
    
         
            -
                      packed_data = Zlib::Deflate.deflate(TensorStream::Packer.pack(val, savable.data_type))
         
     | 
| 
       248 
     | 
    
         
            -
                      variables[savable.name] = {
         
     | 
| 
       249 
     | 
    
         
            -
                        "shape" => shape_eval(val),
         
     | 
| 
       250 
     | 
    
         
            -
                        "data" => Base64.strict_encode64(packed_data),
         
     | 
| 
       251 
     | 
    
         
            -
                      }
         
     | 
| 
       252 
     | 
    
         
            -
                    end
         
     | 
| 
       253 
     | 
    
         
            -
             
     | 
| 
       254 
     | 
    
         
            -
                    File.write(outputfile, {"variables" => variables}.to_yaml)
         
     | 
| 
       255 
     | 
    
         
            -
                    nil
         
     | 
| 
       256 
     | 
    
         
            -
                  end
         
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
                  register_op :restore_ts do |_context, tensor, inputs|
         
     | 
| 
       259 
     | 
    
         
            -
                    inputs = inputs.dup
         
     | 
| 
       260 
     | 
    
         
            -
                    filename = inputs.shift
         
     | 
| 
       261 
     | 
    
         
            -
                    tensor_names = inputs
         
     | 
| 
       262 
     | 
    
         
            -
             
     | 
| 
       263 
     | 
    
         
            -
                    input_dump = YAML.safe_load(File.read(filename), [Symbol])
         
     | 
| 
       264 
     | 
    
         
            -
                    vars = tensor.graph.get_collection(GraphKeys::GLOBAL_VARIABLES)
         
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
     | 
    
         
            -
                    vars.select! { |v| input_dump["variables"].key?(v.name) && tensor_names.include?(v.name) }
         
     | 
| 
       267 
     | 
    
         
            -
                    vars.each do |variable|
         
     | 
| 
       268 
     | 
    
         
            -
                      data = TensorStream::Packer.unpack(Zlib::Inflate.inflate(Base64.decode64(input_dump["variables"][variable.name]["data"])), variable.data_type)
         
     | 
| 
       269 
     | 
    
         
            -
                      shape = input_dump["variables"][variable.name]["shape"]
         
     | 
| 
       270 
     | 
    
         
            -
                      variable.buffer = nil
         
     | 
| 
       271 
     | 
    
         
            -
                      variable.value = TensorShape.reshape(data, shape)
         
     | 
| 
       272 
     | 
    
         
            -
                    end
         
     | 
| 
       273 
     | 
    
         
            -
             
     | 
| 
       274 
     | 
    
         
            -
                    nil
         
     | 
| 
       275 
     | 
    
         
            -
                  end
         
     | 
| 
       276 
     | 
    
         
            -
             
     | 
| 
       277 
231 
     | 
    
         
             
                  register_op :check_numerics do |context, tensor, inputs|
         
     | 
| 
       278 
232 
     | 
    
         
             
                    message = tensor.options[:message]
         
     | 
| 
       279 
233 
     | 
    
         
             
                    call_op(inputs[0], context) do |t, _b|
         
     | 
| 
         @@ -286,7 +240,7 @@ module TensorStream 
     | 
|
| 
       286 
240 
     | 
    
         
             
                  def eval_operation(tensor, child_context)
         
     | 
| 
       287 
241 
     | 
    
         
             
                    return @context[tensor.name] if @context.key?(tensor.name)
         
     | 
| 
       288 
242 
     | 
    
         | 
| 
       289 
     | 
    
         
            -
                    # puts "ruby eval #{object_id}: #{tensor.name}"
         
     | 
| 
      
 243 
     | 
    
         
            +
                    # puts "ruby eval #{tensor.operation} -> #{object_id}: #{tensor.name}"
         
     | 
| 
       290 
244 
     | 
    
         
             
                    invoke(tensor, child_context).tap do |result|
         
     | 
| 
       291 
245 
     | 
    
         
             
                      # puts "result done ruby #{object_id}: #{tensor.name}"
         
     | 
| 
       292 
246 
     | 
    
         
             
                      # assertions to make sure inferred shapes == actual evaluated shapes
         
     | 
| 
         @@ -314,10 +268,10 @@ module TensorStream 
     | 
|
| 
       314 
268 
     | 
    
         
             
                      @context[tensor.name] = result
         
     | 
| 
       315 
269 
     | 
    
         
             
                    end
         
     | 
| 
       316 
270 
     | 
    
         
             
                  rescue EvaluatorExcecutionException => e
         
     | 
| 
       317 
     | 
    
         
            -
                    raise e, "error #{e.message} while evaluating #{tensor.name} 
     | 
| 
      
 271 
     | 
    
         
            +
                    raise e, "error #{e.message} while evaluating #{tensor.name} defined at #{tensor.source}"
         
     | 
| 
       318 
272 
     | 
    
         
             
                  rescue TensorStreamError => e
         
     | 
| 
       319 
     | 
    
         
            -
                    raise e, "error #{e.message} while evaluating #{tensor.name} 
     | 
| 
       320 
     | 
    
         
            -
                  rescue => e
         
     | 
| 
      
 273 
     | 
    
         
            +
                    raise e, "error #{e.message} while evaluating #{tensor.name} defined at #{tensor.source}"
         
     | 
| 
      
 274 
     | 
    
         
            +
                  rescue StandardError => e
         
     | 
| 
       321 
275 
     | 
    
         
             
                    puts e.message
         
     | 
| 
       322 
276 
     | 
    
         
             
                    puts e.backtrace.join("\n")
         
     | 
| 
       323 
277 
     | 
    
         
             
                    raise EvaluatorExcecutionException.new(e, tensor), "error #{e.message} while evaluating #{tensor.name} : #{tensor.to_math(true, 1)} defined at #{tensor.source}"
         
     | 
| 
         @@ -379,7 +333,7 @@ module TensorStream 
     | 
|
| 
       379 
333 
     | 
    
         
             
                    elem = args[0]
         
     | 
| 
       380 
334 
     | 
    
         
             
                    if elem.is_a?(Array)
         
     | 
| 
       381 
335 
     | 
    
         
             
                      elem.each_with_index.collect do |_item, index|
         
     | 
| 
       382 
     | 
    
         
            -
                        indexed_args = args.collect { |a| a[index] }
         
     | 
| 
      
 336 
     | 
    
         
            +
                        indexed_args = args.collect { |a| a = a.is_a?(Array) ? a : [a]; a[index] }
         
     | 
| 
       383 
337 
     | 
    
         
             
                        multi_array_op(func, *indexed_args)
         
     | 
| 
       384 
338 
     | 
    
         
             
                      end
         
     | 
| 
       385 
339 
     | 
    
         
             
                    else
         
     | 
| 
         @@ -9,12 +9,12 @@ module TensorStream 
     | 
|
| 
       9 
9 
     | 
    
         
             
                #
         
     | 
| 
       10 
10 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       11 
11 
     | 
    
         
             
                #
         
     | 
| 
       12 
     | 
    
         
            -
                #  
     | 
| 
       13 
     | 
    
         
            -
                #  
     | 
| 
       14 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 12 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 13 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       15 
14 
     | 
    
         
             
                #
         
     | 
| 
       16 
15 
     | 
    
         
             
                # Options:
         
     | 
| 
       17 
     | 
    
         
            -
                #  
     | 
| 
      
 16 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 17 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       18 
18 
     | 
    
         
             
                def add(input_a, input_b, name: nil)
         
     | 
| 
       19 
19 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       20 
20 
     | 
    
         
             
                  _op(:add, input_a, input_b, name: name)
         
     | 
| 
         @@ -25,14 +25,14 @@ module TensorStream 
     | 
|
| 
       25 
25 
     | 
    
         
             
                # Returns the index with the largest value across axes of a tensor.
         
     | 
| 
       26 
26 
     | 
    
         
             
                #
         
     | 
| 
       27 
27 
     | 
    
         
             
                #
         
     | 
| 
       28 
     | 
    
         
            -
                #  
     | 
| 
       29 
     | 
    
         
            -
                #  
     | 
| 
       30 
     | 
    
         
            -
                # +axis+:: Describes which axis of the input tensor to reduce across. For vectors, use axis = 0 (of type INTEGER_TYPES)
         
     | 
| 
      
 28 
     | 
    
         
            +
                # @param input_a tensor X (of type NUMERIC_TYPES)
         
     | 
| 
      
 29 
     | 
    
         
            +
                # @param axis Describes which axis of the input tensor to reduce across. For vectors, use axis = 0 (of type INTEGER_TYPES)
         
     | 
| 
       31 
30 
     | 
    
         
             
                #
         
     | 
| 
       32 
31 
     | 
    
         
             
                # Options:
         
     | 
| 
       33 
     | 
    
         
            -
                #  
     | 
| 
       34 
     | 
    
         
            -
                #  
     | 
| 
       35 
     | 
    
         
            -
                #  
     | 
| 
      
 32 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 33 
     | 
    
         
            +
                # @option dimension Same as axis
         
     | 
| 
      
 34 
     | 
    
         
            +
                # @option output_type Output data type defaults to int32 default (:int32)
         
     | 
| 
      
 35 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       36 
36 
     | 
    
         
             
                def argmax(input_a, axis = nil, name: nil, dimension: nil, output_type: :int32)
         
     | 
| 
       37 
37 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::NUMERIC_TYPES)
         
     | 
| 
       38 
38 
     | 
    
         
             
                  check_allowed_types(axis, TensorStream::Ops::INTEGER_TYPES)
         
     | 
| 
         @@ -44,14 +44,14 @@ module TensorStream 
     | 
|
| 
       44 
44 
     | 
    
         
             
                # Returns the index with the smallest value across axes of a tensor.
         
     | 
| 
       45 
45 
     | 
    
         
             
                #
         
     | 
| 
       46 
46 
     | 
    
         
             
                #
         
     | 
| 
       47 
     | 
    
         
            -
                #  
     | 
| 
       48 
     | 
    
         
            -
                #  
     | 
| 
       49 
     | 
    
         
            -
                # +axis+:: Describes which axis of the input tensor to reduce across. For vectors, use axis = 0 (of type INTEGER_TYPES)
         
     | 
| 
      
 47 
     | 
    
         
            +
                # @param input_a tensor X (of type NUMERIC_TYPES)
         
     | 
| 
      
 48 
     | 
    
         
            +
                # @param axis Describes which axis of the input tensor to reduce across. For vectors, use axis = 0 (of type INTEGER_TYPES)
         
     | 
| 
       50 
49 
     | 
    
         
             
                #
         
     | 
| 
       51 
50 
     | 
    
         
             
                # Options:
         
     | 
| 
       52 
     | 
    
         
            -
                #  
     | 
| 
       53 
     | 
    
         
            -
                #  
     | 
| 
       54 
     | 
    
         
            -
                #  
     | 
| 
      
 51 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 52 
     | 
    
         
            +
                # @option dimension Same as axis
         
     | 
| 
      
 53 
     | 
    
         
            +
                # @option output_type Output data type defaults to int32 default (:int32)
         
     | 
| 
      
 54 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       55 
55 
     | 
    
         
             
                def argmin(input_a, axis = nil, name: nil, dimension: nil, output_type: :int32)
         
     | 
| 
       56 
56 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::NUMERIC_TYPES)
         
     | 
| 
       57 
57 
     | 
    
         
             
                  check_allowed_types(axis, TensorStream::Ops::INTEGER_TYPES)
         
     | 
| 
         @@ -63,11 +63,11 @@ module TensorStream 
     | 
|
| 
       63 
63 
     | 
    
         
             
                # Returns element-wise smallest integer in not less than x
         
     | 
| 
       64 
64 
     | 
    
         
             
                #
         
     | 
| 
       65 
65 
     | 
    
         
             
                #
         
     | 
| 
       66 
     | 
    
         
            -
                #  
     | 
| 
       67 
     | 
    
         
            -
                # +input_a+:: tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 66 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
       68 
67 
     | 
    
         
             
                #
         
     | 
| 
       69 
68 
     | 
    
         
             
                # Options:
         
     | 
| 
       70 
     | 
    
         
            -
                #  
     | 
| 
      
 69 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 70 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       71 
71 
     | 
    
         
             
                def ceil(input_a, name: nil)
         
     | 
| 
       72 
72 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
       73 
73 
     | 
    
         
             
                  _op(:ceil, input_a, name: name)
         
     | 
| 
         @@ -78,11 +78,11 @@ module TensorStream 
     | 
|
| 
       78 
78 
     | 
    
         
             
                # Computes cos of input element-wise.
         
     | 
| 
       79 
79 
     | 
    
         
             
                #
         
     | 
| 
       80 
80 
     | 
    
         
             
                #
         
     | 
| 
       81 
     | 
    
         
            -
                #  
     | 
| 
       82 
     | 
    
         
            -
                # +input_a+:: tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 81 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
       83 
82 
     | 
    
         
             
                #
         
     | 
| 
       84 
83 
     | 
    
         
             
                # Options:
         
     | 
| 
       85 
     | 
    
         
            -
                #  
     | 
| 
      
 84 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 85 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       86 
86 
     | 
    
         
             
                def cos(input_a, name: nil)
         
     | 
| 
       87 
87 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
       88 
88 
     | 
    
         
             
                  _op(:cos, input_a, name: name)
         
     | 
| 
         @@ -94,12 +94,12 @@ module TensorStream 
     | 
|
| 
       94 
94 
     | 
    
         
             
                #
         
     | 
| 
       95 
95 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       96 
96 
     | 
    
         
             
                #
         
     | 
| 
       97 
     | 
    
         
            -
                #  
     | 
| 
       98 
     | 
    
         
            -
                #  
     | 
| 
       99 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 97 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 98 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       100 
99 
     | 
    
         
             
                #
         
     | 
| 
       101 
100 
     | 
    
         
             
                # Options:
         
     | 
| 
       102 
     | 
    
         
            -
                #  
     | 
| 
      
 101 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 102 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       103 
103 
     | 
    
         
             
                def div(input_a, input_b, name: nil)
         
     | 
| 
       104 
104 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       105 
105 
     | 
    
         
             
                  _op(:div, input_a, input_b, name: name)
         
     | 
| 
         @@ -111,12 +111,12 @@ module TensorStream 
     | 
|
| 
       111 
111 
     | 
    
         
             
                #
         
     | 
| 
       112 
112 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       113 
113 
     | 
    
         
             
                #
         
     | 
| 
       114 
     | 
    
         
            -
                #  
     | 
| 
       115 
     | 
    
         
            -
                #  
     | 
| 
       116 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 114 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 115 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       117 
116 
     | 
    
         
             
                #
         
     | 
| 
       118 
117 
     | 
    
         
             
                # Options:
         
     | 
| 
       119 
     | 
    
         
            -
                #  
     | 
| 
      
 118 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 119 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       120 
120 
     | 
    
         
             
                def equal(input_a, input_b, name: nil)
         
     | 
| 
       121 
121 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       122 
122 
     | 
    
         
             
                  _op(:equal, input_a, input_b, name: name)
         
     | 
| 
         @@ -129,12 +129,12 @@ module TensorStream 
     | 
|
| 
       129 
129 
     | 
    
         
             
                # dimension index axis starts at zero; if you specify a negative number for axis it is counted backward from the end.
         
     | 
| 
       130 
130 
     | 
    
         
             
                #
         
     | 
| 
       131 
131 
     | 
    
         
             
                #
         
     | 
| 
       132 
     | 
    
         
            -
                #  
     | 
| 
       133 
     | 
    
         
            -
                #  
     | 
| 
       134 
     | 
    
         
            -
                # +axis+:: Specifies the dimension index at which to expand the shape of input. Must be in the range [-rank(input) - 1, rank(input)].
         
     | 
| 
      
 132 
     | 
    
         
            +
                # @param input A tensor
         
     | 
| 
      
 133 
     | 
    
         
            +
                # @param axis Specifies the dimension index at which to expand the shape of input. Must be in the range [-rank(input) - 1, rank(input)].
         
     | 
| 
       135 
134 
     | 
    
         
             
                #
         
     | 
| 
       136 
135 
     | 
    
         
             
                # Options:
         
     | 
| 
       137 
     | 
    
         
            -
                #  
     | 
| 
      
 136 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 137 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       138 
138 
     | 
    
         
             
                def expand_dims(input, axis, name: nil)
         
     | 
| 
       139 
139 
     | 
    
         
             
                  _op(:expand_dims, input, axis, name: name)
         
     | 
| 
       140 
140 
     | 
    
         
             
                end
         
     | 
| 
         @@ -144,12 +144,12 @@ module TensorStream 
     | 
|
| 
       144 
144 
     | 
    
         
             
                # This operation creates a tensor of shape dims and fills it with value.
         
     | 
| 
       145 
145 
     | 
    
         
             
                #
         
     | 
| 
       146 
146 
     | 
    
         
             
                #
         
     | 
| 
       147 
     | 
    
         
            -
                #  
     | 
| 
       148 
     | 
    
         
            -
                #  
     | 
| 
       149 
     | 
    
         
            -
                # +value+:: scalar value to fill with
         
     | 
| 
      
 147 
     | 
    
         
            +
                # @param dims tensor shape
         
     | 
| 
      
 148 
     | 
    
         
            +
                # @param value scalar value to fill with
         
     | 
| 
       150 
149 
     | 
    
         
             
                #
         
     | 
| 
       151 
150 
     | 
    
         
             
                # Options:
         
     | 
| 
       152 
     | 
    
         
            -
                #  
     | 
| 
      
 151 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 152 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       153 
153 
     | 
    
         
             
                def fill(dims, value, name: nil)
         
     | 
| 
       154 
154 
     | 
    
         
             
                  _op(:fill, dims, value, name: name)
         
     | 
| 
       155 
155 
     | 
    
         
             
                end
         
     | 
| 
         @@ -159,11 +159,11 @@ module TensorStream 
     | 
|
| 
       159 
159 
     | 
    
         
             
                # Returns element-wise largest integer not greater than x.
         
     | 
| 
       160 
160 
     | 
    
         
             
                #
         
     | 
| 
       161 
161 
     | 
    
         
             
                #
         
     | 
| 
       162 
     | 
    
         
            -
                #  
     | 
| 
       163 
     | 
    
         
            -
                # +input_a+:: tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 162 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
       164 
163 
     | 
    
         
             
                #
         
     | 
| 
       165 
164 
     | 
    
         
             
                # Options:
         
     | 
| 
       166 
     | 
    
         
            -
                #  
     | 
| 
      
 165 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 166 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       167 
167 
     | 
    
         
             
                def floor(input_a, name: nil)
         
     | 
| 
       168 
168 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
       169 
169 
     | 
    
         
             
                  _op(:floor, input_a, name: name)
         
     | 
| 
         @@ -175,12 +175,12 @@ module TensorStream 
     | 
|
| 
       175 
175 
     | 
    
         
             
                #
         
     | 
| 
       176 
176 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       177 
177 
     | 
    
         
             
                #
         
     | 
| 
       178 
     | 
    
         
            -
                #  
     | 
| 
       179 
     | 
    
         
            -
                #  
     | 
| 
       180 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 178 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 179 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       181 
180 
     | 
    
         
             
                #
         
     | 
| 
       182 
181 
     | 
    
         
             
                # Options:
         
     | 
| 
       183 
     | 
    
         
            -
                #  
     | 
| 
      
 182 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 183 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       184 
184 
     | 
    
         
             
                def floor_div(input_a, input_b, name: nil)
         
     | 
| 
       185 
185 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       186 
186 
     | 
    
         
             
                  _op(:floor_div, input_a, input_b, name: name)
         
     | 
| 
         @@ -192,12 +192,12 @@ module TensorStream 
     | 
|
| 
       192 
192 
     | 
    
         
             
                #
         
     | 
| 
       193 
193 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       194 
194 
     | 
    
         
             
                #
         
     | 
| 
       195 
     | 
    
         
            -
                #  
     | 
| 
       196 
     | 
    
         
            -
                #  
     | 
| 
       197 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 195 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 196 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       198 
197 
     | 
    
         
             
                #
         
     | 
| 
       199 
198 
     | 
    
         
             
                # Options:
         
     | 
| 
       200 
     | 
    
         
            -
                #  
     | 
| 
      
 199 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 200 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       201 
201 
     | 
    
         
             
                def greater(input_a, input_b, name: nil)
         
     | 
| 
       202 
202 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       203 
203 
     | 
    
         
             
                  _op(:greater, input_a, input_b, name: name)
         
     | 
| 
         @@ -209,29 +209,46 @@ module TensorStream 
     | 
|
| 
       209 
209 
     | 
    
         
             
                #
         
     | 
| 
       210 
210 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       211 
211 
     | 
    
         
             
                #
         
     | 
| 
       212 
     | 
    
         
            -
                #  
     | 
| 
       213 
     | 
    
         
            -
                #  
     | 
| 
       214 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 212 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 213 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       215 
214 
     | 
    
         
             
                #
         
     | 
| 
       216 
215 
     | 
    
         
             
                # Options:
         
     | 
| 
       217 
     | 
    
         
            -
                #  
     | 
| 
      
 216 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 217 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       218 
218 
     | 
    
         
             
                def greater_equal(input_a, input_b, name: nil)
         
     | 
| 
       219 
219 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       220 
220 
     | 
    
         
             
                  _op(:greater_equal, input_a, input_b, name: name)
         
     | 
| 
       221 
221 
     | 
    
         
             
                end
         
     | 
| 
       222 
222 
     | 
    
         | 
| 
       223 
223 
     | 
    
         | 
| 
      
 224 
     | 
    
         
            +
                ##
         
     | 
| 
      
 225 
     | 
    
         
            +
                # Returns the truth value of (x < y) element-wise.
         
     | 
| 
      
 226 
     | 
    
         
            +
                #
         
     | 
| 
      
 227 
     | 
    
         
            +
                # This operation supports broadcasting
         
     | 
| 
      
 228 
     | 
    
         
            +
                #
         
     | 
| 
      
 229 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 230 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
      
 231 
     | 
    
         
            +
                #
         
     | 
| 
      
 232 
     | 
    
         
            +
                # Options:
         
     | 
| 
      
 233 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 234 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
      
 235 
     | 
    
         
            +
                def less(input_a, input_b, name: nil)
         
     | 
| 
      
 236 
     | 
    
         
            +
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
      
 237 
     | 
    
         
            +
                  _op(:less, input_a, input_b, name: name)
         
     | 
| 
      
 238 
     | 
    
         
            +
                end
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
             
     | 
| 
       224 
241 
     | 
    
         
             
                ##
         
     | 
| 
       225 
242 
     | 
    
         
             
                # Returns the truth value of (x <= y) element-wise.
         
     | 
| 
       226 
243 
     | 
    
         
             
                #
         
     | 
| 
       227 
244 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       228 
245 
     | 
    
         
             
                #
         
     | 
| 
       229 
     | 
    
         
            -
                #  
     | 
| 
       230 
     | 
    
         
            -
                #  
     | 
| 
       231 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 246 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 247 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       232 
248 
     | 
    
         
             
                #
         
     | 
| 
       233 
249 
     | 
    
         
             
                # Options:
         
     | 
| 
       234 
     | 
    
         
            -
                #  
     | 
| 
      
 250 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 251 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       235 
252 
     | 
    
         
             
                def less_equal(input_a, input_b, name: nil)
         
     | 
| 
       236 
253 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       237 
254 
     | 
    
         
             
                  _op(:less_equal, input_a, input_b, name: name)
         
     | 
| 
         @@ -242,11 +259,11 @@ module TensorStream 
     | 
|
| 
       242 
259 
     | 
    
         
             
                # Computes natural logarithm of x element-wise.
         
     | 
| 
       243 
260 
     | 
    
         
             
                #
         
     | 
| 
       244 
261 
     | 
    
         
             
                #
         
     | 
| 
       245 
     | 
    
         
            -
                #  
     | 
| 
       246 
     | 
    
         
            -
                # +input+:: tensor X
         
     | 
| 
      
 262 
     | 
    
         
            +
                # @param input tensor X
         
     | 
| 
       247 
263 
     | 
    
         
             
                #
         
     | 
| 
       248 
264 
     | 
    
         
             
                # Options:
         
     | 
| 
       249 
     | 
    
         
            -
                #  
     | 
| 
      
 265 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 266 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       250 
267 
     | 
    
         
             
                def log(input, name: nil)
         
     | 
| 
       251 
268 
     | 
    
         
             
                  _op(:log, input, name: name)
         
     | 
| 
       252 
269 
     | 
    
         
             
                end
         
     | 
| 
         @@ -257,14 +274,14 @@ module TensorStream 
     | 
|
| 
       257 
274 
     | 
    
         
             
                #
         
     | 
| 
       258 
275 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       259 
276 
     | 
    
         
             
                #
         
     | 
| 
       260 
     | 
    
         
            -
                #  
     | 
| 
       261 
     | 
    
         
            -
                #  
     | 
| 
       262 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 277 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 278 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       263 
279 
     | 
    
         
             
                #
         
     | 
| 
       264 
280 
     | 
    
         
             
                # Options:
         
     | 
| 
       265 
     | 
    
         
            -
                #  
     | 
| 
       266 
     | 
    
         
            -
                #  
     | 
| 
       267 
     | 
    
         
            -
                #  
     | 
| 
      
 281 
     | 
    
         
            +
                # @option transpose_a Transpose matrix A first default (false)
         
     | 
| 
      
 282 
     | 
    
         
            +
                # @option transpose_b Transpose matrix B first default (false)
         
     | 
| 
      
 283 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 284 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       268 
285 
     | 
    
         
             
                def mat_mul(input_a, input_b, transpose_a: false, transpose_b: false, name: nil)
         
     | 
| 
       269 
286 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       270 
287 
     | 
    
         
             
                  _op(:mat_mul, input_a, input_b, transpose_a: transpose_a, transpose_b: transpose_b, name: name)
         
     | 
| 
         @@ -277,12 +294,12 @@ module TensorStream 
     | 
|
| 
       277 
294 
     | 
    
         
             
                #
         
     | 
| 
       278 
295 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       279 
296 
     | 
    
         
             
                #
         
     | 
| 
       280 
     | 
    
         
            -
                #  
     | 
| 
       281 
     | 
    
         
            -
                #  
     | 
| 
       282 
     | 
    
         
            -
                # +input_b+:: tensor Y (of type NUMERIC_TYPES)
         
     | 
| 
      
 297 
     | 
    
         
            +
                # @param input_a tensor X (of type NUMERIC_TYPES)
         
     | 
| 
      
 298 
     | 
    
         
            +
                # @param input_b tensor Y (of type NUMERIC_TYPES)
         
     | 
| 
       283 
299 
     | 
    
         
             
                #
         
     | 
| 
       284 
300 
     | 
    
         
             
                # Options:
         
     | 
| 
       285 
     | 
    
         
            -
                #  
     | 
| 
      
 301 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 302 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       286 
303 
     | 
    
         
             
                def max(input_a, input_b, name: nil)
         
     | 
| 
       287 
304 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::NUMERIC_TYPES)
         
     | 
| 
       288 
305 
     | 
    
         
             
                  check_allowed_types(input_b, TensorStream::Ops::NUMERIC_TYPES)
         
     | 
| 
         @@ -296,12 +313,12 @@ module TensorStream 
     | 
|
| 
       296 
313 
     | 
    
         
             
                #
         
     | 
| 
       297 
314 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       298 
315 
     | 
    
         
             
                #
         
     | 
| 
       299 
     | 
    
         
            -
                #  
     | 
| 
       300 
     | 
    
         
            -
                #  
     | 
| 
       301 
     | 
    
         
            -
                # +input_b+:: tensor Y (of type NUMERIC_TYPES)
         
     | 
| 
      
 316 
     | 
    
         
            +
                # @param input_a tensor X (of type NUMERIC_TYPES)
         
     | 
| 
      
 317 
     | 
    
         
            +
                # @param input_b tensor Y (of type NUMERIC_TYPES)
         
     | 
| 
       302 
318 
     | 
    
         
             
                #
         
     | 
| 
       303 
319 
     | 
    
         
             
                # Options:
         
     | 
| 
       304 
     | 
    
         
            -
                #  
     | 
| 
      
 320 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 321 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       305 
322 
     | 
    
         
             
                def min(input_a, input_b, name: nil)
         
     | 
| 
       306 
323 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::NUMERIC_TYPES)
         
     | 
| 
       307 
324 
     | 
    
         
             
                  check_allowed_types(input_b, TensorStream::Ops::NUMERIC_TYPES)
         
     | 
| 
         @@ -315,12 +332,12 @@ module TensorStream 
     | 
|
| 
       315 
332 
     | 
    
         
             
                #
         
     | 
| 
       316 
333 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       317 
334 
     | 
    
         
             
                #
         
     | 
| 
       318 
     | 
    
         
            -
                #  
     | 
| 
       319 
     | 
    
         
            -
                #  
     | 
| 
       320 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 335 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 336 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       321 
337 
     | 
    
         
             
                #
         
     | 
| 
       322 
338 
     | 
    
         
             
                # Options:
         
     | 
| 
       323 
     | 
    
         
            -
                #  
     | 
| 
      
 339 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 340 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       324 
341 
     | 
    
         
             
                def mod(input_a, input_b, name: nil)
         
     | 
| 
       325 
342 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       326 
343 
     | 
    
         
             
                  _op(:mod, input_a, input_b, name: name)
         
     | 
| 
         @@ -332,12 +349,12 @@ module TensorStream 
     | 
|
| 
       332 
349 
     | 
    
         
             
                #
         
     | 
| 
       333 
350 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       334 
351 
     | 
    
         
             
                #
         
     | 
| 
       335 
     | 
    
         
            -
                #  
     | 
| 
       336 
     | 
    
         
            -
                #  
     | 
| 
       337 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 352 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 353 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       338 
354 
     | 
    
         
             
                #
         
     | 
| 
       339 
355 
     | 
    
         
             
                # Options:
         
     | 
| 
       340 
     | 
    
         
            -
                #  
     | 
| 
      
 356 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 357 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       341 
358 
     | 
    
         
             
                def mul(input_a, input_b, name: nil)
         
     | 
| 
       342 
359 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       343 
360 
     | 
    
         
             
                  _op(:mul, input_a, input_b, name: name)
         
     | 
| 
         @@ -348,16 +365,33 @@ module TensorStream 
     | 
|
| 
       348 
365 
     | 
    
         
             
                # Computes numerical negative value element-wise.
         
     | 
| 
       349 
366 
     | 
    
         
             
                #
         
     | 
| 
       350 
367 
     | 
    
         
             
                #
         
     | 
| 
       351 
     | 
    
         
            -
                #  
     | 
| 
       352 
     | 
    
         
            -
                # +input+:: tensor X
         
     | 
| 
      
 368 
     | 
    
         
            +
                # @param input tensor X
         
     | 
| 
       353 
369 
     | 
    
         
             
                #
         
     | 
| 
       354 
370 
     | 
    
         
             
                # Options:
         
     | 
| 
       355 
     | 
    
         
            -
                #  
     | 
| 
      
 371 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 372 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       356 
373 
     | 
    
         
             
                def negate(input, name: nil)
         
     | 
| 
       357 
374 
     | 
    
         
             
                  _op(:negate, input, name: name)
         
     | 
| 
       358 
375 
     | 
    
         
             
                end
         
     | 
| 
       359 
376 
     | 
    
         | 
| 
       360 
377 
     | 
    
         | 
| 
      
 378 
     | 
    
         
            +
                ##
         
     | 
| 
      
 379 
     | 
    
         
            +
                # Returns the truth value of (x != y) element-wise.
         
     | 
| 
      
 380 
     | 
    
         
            +
                #
         
     | 
| 
      
 381 
     | 
    
         
            +
                # This operation supports broadcasting
         
     | 
| 
      
 382 
     | 
    
         
            +
                #
         
     | 
| 
      
 383 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 384 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
      
 385 
     | 
    
         
            +
                #
         
     | 
| 
      
 386 
     | 
    
         
            +
                # Options:
         
     | 
| 
      
 387 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 388 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
      
 389 
     | 
    
         
            +
                def not_equal(input_a, input_b, name: nil)
         
     | 
| 
      
 390 
     | 
    
         
            +
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
      
 391 
     | 
    
         
            +
                  _op(:not_equal, input_a, input_b, name: name)
         
     | 
| 
      
 392 
     | 
    
         
            +
                end
         
     | 
| 
      
 393 
     | 
    
         
            +
             
     | 
| 
      
 394 
     | 
    
         
            +
             
     | 
| 
       361 
395 
     | 
    
         
             
                ##
         
     | 
| 
       362 
396 
     | 
    
         
             
                # Creates a tensor with all elements set to 1.
         
     | 
| 
       363 
397 
     | 
    
         
             
                # Given a single tensor (tensor), this operation returns a
         
     | 
| 
         @@ -365,12 +399,12 @@ module TensorStream 
     | 
|
| 
       365 
399 
     | 
    
         
             
                # Optionally, you can specify a new type (dtype) for the returned tensor.
         
     | 
| 
       366 
400 
     | 
    
         
             
                #
         
     | 
| 
       367 
401 
     | 
    
         
             
                #
         
     | 
| 
       368 
     | 
    
         
            -
                #  
     | 
| 
       369 
     | 
    
         
            -
                # +input+:: A tensor
         
     | 
| 
      
 402 
     | 
    
         
            +
                # @param input A tensor
         
     | 
| 
       370 
403 
     | 
    
         
             
                #
         
     | 
| 
       371 
404 
     | 
    
         
             
                # Options:
         
     | 
| 
       372 
     | 
    
         
            -
                #  
     | 
| 
       373 
     | 
    
         
            -
                #  
     | 
| 
      
 405 
     | 
    
         
            +
                # @option dtype Optional new data type to cast into
         
     | 
| 
      
 406 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 407 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       374 
408 
     | 
    
         
             
                def ones_like(input, dtype: nil, name: nil)
         
     | 
| 
       375 
409 
     | 
    
         
             
                  _op(:ones_like, input, data_type: dtype, name: name)
         
     | 
| 
       376 
410 
     | 
    
         
             
                end
         
     | 
| 
         @@ -381,12 +415,12 @@ module TensorStream 
     | 
|
| 
       381 
415 
     | 
    
         
             
                #
         
     | 
| 
       382 
416 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       383 
417 
     | 
    
         
             
                #
         
     | 
| 
       384 
     | 
    
         
            -
                #  
     | 
| 
       385 
     | 
    
         
            -
                #  
     | 
| 
       386 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 418 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 419 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       387 
420 
     | 
    
         
             
                #
         
     | 
| 
       388 
421 
     | 
    
         
             
                # Options:
         
     | 
| 
       389 
     | 
    
         
            -
                #  
     | 
| 
      
 422 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 423 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       390 
424 
     | 
    
         
             
                def pow(input_a, input_b, name: nil)
         
     | 
| 
       391 
425 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       392 
426 
     | 
    
         
             
                  _op(:pow, input_a, input_b, name: name)
         
     | 
| 
         @@ -401,13 +435,13 @@ module TensorStream 
     | 
|
| 
       401 
435 
     | 
    
         
             
                # If axis has no entries, all dimensions are reduced, and a tensor with a single element is returned.
         
     | 
| 
       402 
436 
     | 
    
         
             
                #
         
     | 
| 
       403 
437 
     | 
    
         
             
                #
         
     | 
| 
       404 
     | 
    
         
            -
                #  
     | 
| 
       405 
     | 
    
         
            -
                #  
     | 
| 
       406 
     | 
    
         
            -
                # +axis+:: tensor X (of type INTEGER_TYPES)
         
     | 
| 
      
 438 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 439 
     | 
    
         
            +
                # @param axis tensor X (of type INTEGER_TYPES)
         
     | 
| 
       407 
440 
     | 
    
         
             
                #
         
     | 
| 
       408 
441 
     | 
    
         
             
                # Options:
         
     | 
| 
       409 
     | 
    
         
            -
                #  
     | 
| 
       410 
     | 
    
         
            -
                #  
     | 
| 
      
 442 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 443 
     | 
    
         
            +
                # @option keepdims If true, retains reduced dimensions with length 1. default (false)
         
     | 
| 
      
 444 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       411 
445 
     | 
    
         
             
                def prod(input_a, axis = nil, name: nil, keepdims: false)
         
     | 
| 
       412 
446 
     | 
    
         
             
                  check_allowed_types(axis, TensorStream::Ops::INTEGER_TYPES)
         
     | 
| 
       413 
447 
     | 
    
         
             
                  input_a = TensorStream.convert_to_tensor(input_a)
         
     | 
| 
         @@ -422,15 +456,15 @@ module TensorStream 
     | 
|
| 
       422 
456 
     | 
    
         
             
                # Outputs random values from a uniform distribution.
         
     | 
| 
       423 
457 
     | 
    
         
             
                #
         
     | 
| 
       424 
458 
     | 
    
         
             
                #
         
     | 
| 
       425 
     | 
    
         
            -
                #  
     | 
| 
       426 
     | 
    
         
            -
                # +shape+:: A 1-D integer Tensor or array. The shape of the output tensor.
         
     | 
| 
      
 459 
     | 
    
         
            +
                # @param shape A 1-D integer Tensor or array. The shape of the output tensor.
         
     | 
| 
       427 
460 
     | 
    
         
             
                #
         
     | 
| 
       428 
461 
     | 
    
         
             
                # Options:
         
     | 
| 
       429 
     | 
    
         
            -
                #  
     | 
| 
       430 
     | 
    
         
            -
                #  
     | 
| 
       431 
     | 
    
         
            -
                #  
     | 
| 
       432 
     | 
    
         
            -
                #  
     | 
| 
       433 
     | 
    
         
            -
                #  
     | 
| 
      
 462 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 463 
     | 
    
         
            +
                # @option dtype The type of the output: float16, float32, float64, int32, or int64 default (:float32)
         
     | 
| 
      
 464 
     | 
    
         
            +
                # @option minval A 0-D Tensor or ruby value of type dtype. The lower bound on the range of random values to generate. Defaults to 0. default (0)
         
     | 
| 
      
 465 
     | 
    
         
            +
                # @option maxval A 0-D Tensor or ruby value of type dtype. The upper bound on the range of random values to generate. Defaults to 1 if dtype is floating point. default (1)
         
     | 
| 
      
 466 
     | 
    
         
            +
                # @option seed  A ruby integer. Used to create a random seed for the distribution. See set_random_seed for behavior.
         
     | 
| 
      
 467 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       434 
468 
     | 
    
         
             
                def random_uniform(shape, name: nil, dtype: :float32, minval: 0, maxval: 1, seed: nil)
         
     | 
| 
       435 
469 
     | 
    
         
             
                  _op(:random_uniform, shape, name: name, dtype: dtype, minval: minval, maxval: maxval, seed: seed)
         
     | 
| 
       436 
470 
     | 
    
         
             
                end
         
     | 
| 
         @@ -441,15 +475,15 @@ module TensorStream 
     | 
|
| 
       441 
475 
     | 
    
         
             
                # Creates a sequence of numbers that begins at start and extends by increments of delta up to but not including limit.
         
     | 
| 
       442 
476 
     | 
    
         
             
                #
         
     | 
| 
       443 
477 
     | 
    
         
             
                #
         
     | 
| 
       444 
     | 
    
         
            -
                #  
     | 
| 
       445 
     | 
    
         
            -
                #  
     | 
| 
       446 
     | 
    
         
            -
                #  
     | 
| 
       447 
     | 
    
         
            -
                # +delta+:: Number that increments start. Defaults to 1.
         
     | 
| 
      
 478 
     | 
    
         
            +
                # @param start Acts as first entry in the range if limit is not nil; otherwise, acts as range limit and first entry defaults to 0.
         
     | 
| 
      
 479 
     | 
    
         
            +
                # @param limit Upper limit of sequence, exclusive. If nil, defaults to the value of start while the first entry of the range defaults to 0.
         
     | 
| 
      
 480 
     | 
    
         
            +
                # @param delta Number that increments start. Defaults to 1.
         
     | 
| 
       448 
481 
     | 
    
         
             
                #
         
     | 
| 
       449 
482 
     | 
    
         
             
                # Options:
         
     | 
| 
       450 
     | 
    
         
            -
                #  
     | 
| 
       451 
     | 
    
         
            -
                #  
     | 
| 
       452 
     | 
    
         
            -
                #  
     | 
| 
      
 483 
     | 
    
         
            +
                # @option name  A name for the operation. Defaults to "range". default ("range")
         
     | 
| 
      
 484 
     | 
    
         
            +
                # @option dtype The type of the elements of the resulting tensor.
         
     | 
| 
      
 485 
     | 
    
         
            +
                # @option output_type Output data type defaults to int32 default (:int32)
         
     | 
| 
      
 486 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       453 
487 
     | 
    
         
             
                def range(start = 0, limit = 0, delta = 1, name: "range", dtype: nil, output_type: :int32)
         
     | 
| 
       454 
488 
     | 
    
         
             
                  _op(:range, start, limit, delta, name: name, dtype: dtype, output_type: output_type)
         
     | 
| 
       455 
489 
     | 
    
         
             
                end
         
     | 
| 
         @@ -459,11 +493,11 @@ module TensorStream 
     | 
|
| 
       459 
493 
     | 
    
         
             
                # Returns the rank of a tensor
         
     | 
| 
       460 
494 
     | 
    
         
             
                #
         
     | 
| 
       461 
495 
     | 
    
         
             
                #
         
     | 
| 
       462 
     | 
    
         
            -
                #  
     | 
| 
       463 
     | 
    
         
            -
                # +input+:: A tensor
         
     | 
| 
      
 496 
     | 
    
         
            +
                # @param input A tensor
         
     | 
| 
       464 
497 
     | 
    
         
             
                #
         
     | 
| 
       465 
498 
     | 
    
         
             
                # Options:
         
     | 
| 
       466 
     | 
    
         
            -
                #  
     | 
| 
      
 499 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 500 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       467 
501 
     | 
    
         
             
                def rank(input, name: nil)
         
     | 
| 
       468 
502 
     | 
    
         
             
                  input = convert_to_tensor(input)
         
     | 
| 
       469 
503 
     | 
    
         
             
                  return cons(input.shape.ndims) if input.shape.known?
         
     | 
| 
         @@ -476,12 +510,12 @@ module TensorStream 
     | 
|
| 
       476 
510 
     | 
    
         
             
                # Given tensor, this operation returns a tensor that has the same values as tensor with shape shape.
         
     | 
| 
       477 
511 
     | 
    
         
             
                #
         
     | 
| 
       478 
512 
     | 
    
         
             
                #
         
     | 
| 
       479 
     | 
    
         
            -
                #  
     | 
| 
       480 
     | 
    
         
            -
                #  
     | 
| 
       481 
     | 
    
         
            -
                # +shape+:: A new tensor shape
         
     | 
| 
      
 513 
     | 
    
         
            +
                # @param input A tensor
         
     | 
| 
      
 514 
     | 
    
         
            +
                # @param shape A new tensor shape
         
     | 
| 
       482 
515 
     | 
    
         
             
                #
         
     | 
| 
       483 
516 
     | 
    
         
             
                # Options:
         
     | 
| 
       484 
     | 
    
         
            -
                #  
     | 
| 
      
 517 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 518 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       485 
519 
     | 
    
         
             
                def reshape(input, shape, name: nil)
         
     | 
| 
       486 
520 
     | 
    
         
             
                  _op(:reshape, input, shape, name: name)
         
     | 
| 
       487 
521 
     | 
    
         
             
                end
         
     | 
| 
         @@ -491,27 +525,42 @@ module TensorStream 
     | 
|
| 
       491 
525 
     | 
    
         
             
                # Rounds the values of a tensor to the nearest integer, element-wise
         
     | 
| 
       492 
526 
     | 
    
         
             
                #
         
     | 
| 
       493 
527 
     | 
    
         
             
                #
         
     | 
| 
       494 
     | 
    
         
            -
                #  
     | 
| 
       495 
     | 
    
         
            -
                # +input_a+:: tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 528 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
       496 
529 
     | 
    
         
             
                #
         
     | 
| 
       497 
530 
     | 
    
         
             
                # Options:
         
     | 
| 
       498 
     | 
    
         
            -
                #  
     | 
| 
      
 531 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 532 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       499 
533 
     | 
    
         
             
                def round(input_a, name: nil)
         
     | 
| 
       500 
534 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
       501 
535 
     | 
    
         
             
                  _op(:round, input_a, name: name)
         
     | 
| 
       502 
536 
     | 
    
         
             
                end
         
     | 
| 
       503 
537 
     | 
    
         | 
| 
       504 
538 
     | 
    
         | 
| 
      
 539 
     | 
    
         
            +
                ##
         
     | 
| 
      
 540 
     | 
    
         
            +
                # Computes reciprocal of square root of x element-wise.
         
     | 
| 
      
 541 
     | 
    
         
            +
                #
         
     | 
| 
      
 542 
     | 
    
         
            +
                #
         
     | 
| 
      
 543 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 544 
     | 
    
         
            +
                #
         
     | 
| 
      
 545 
     | 
    
         
            +
                # Options:
         
     | 
| 
      
 546 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 547 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
      
 548 
     | 
    
         
            +
                def rsqrt(input_a, name: nil)
         
     | 
| 
      
 549 
     | 
    
         
            +
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
      
 550 
     | 
    
         
            +
                  _op(:rsqrt, input_a, name: name)
         
     | 
| 
      
 551 
     | 
    
         
            +
                end
         
     | 
| 
      
 552 
     | 
    
         
            +
             
     | 
| 
      
 553 
     | 
    
         
            +
             
     | 
| 
       505 
554 
     | 
    
         
             
                ##
         
     | 
| 
       506 
555 
     | 
    
         
             
                # This operation returns a 1-D integer tensor representing the shape of input
         
     | 
| 
       507 
556 
     | 
    
         
             
                #
         
     | 
| 
       508 
557 
     | 
    
         
             
                #
         
     | 
| 
       509 
     | 
    
         
            -
                #  
     | 
| 
       510 
     | 
    
         
            -
                # +input+:: A tensor
         
     | 
| 
      
 558 
     | 
    
         
            +
                # @param input A tensor
         
     | 
| 
       511 
559 
     | 
    
         
             
                #
         
     | 
| 
       512 
560 
     | 
    
         
             
                # Options:
         
     | 
| 
       513 
     | 
    
         
            -
                #  
     | 
| 
       514 
     | 
    
         
            -
                #  
     | 
| 
      
 561 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 562 
     | 
    
         
            +
                # @option out_type Optional output type default (:int32)
         
     | 
| 
      
 563 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       515 
564 
     | 
    
         
             
                def shape(input, name: nil, out_type: :int32)
         
     | 
| 
       516 
565 
     | 
    
         
             
                  return constant(shape_eval(input, out_type), dtype: out_type, name: "Shape/#{name}") if input.is_a?(Array) && !input[0].is_a?(Tensor)
         
     | 
| 
       517 
566 
     | 
    
         
             
                  return constant(input.shape.shape, dtype: out_type, name: "Shape/#{input.name}_c") if shape_full_specified(input)
         
     | 
| 
         @@ -523,11 +572,11 @@ module TensorStream 
     | 
|
| 
       523 
572 
     | 
    
         
             
                # Computes sigmoid of x element-wise.
         
     | 
| 
       524 
573 
     | 
    
         
             
                #
         
     | 
| 
       525 
574 
     | 
    
         
             
                #
         
     | 
| 
       526 
     | 
    
         
            -
                #  
     | 
| 
       527 
     | 
    
         
            -
                # +input_a+:: tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 575 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
       528 
576 
     | 
    
         
             
                #
         
     | 
| 
       529 
577 
     | 
    
         
             
                # Options:
         
     | 
| 
       530 
     | 
    
         
            -
                #  
     | 
| 
      
 578 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 579 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       531 
580 
     | 
    
         
             
                def sigmoid(input_a, name: nil)
         
     | 
| 
       532 
581 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
       533 
582 
     | 
    
         
             
                  _op(:sigmoid, input_a, name: name)
         
     | 
| 
         @@ -540,11 +589,11 @@ module TensorStream 
     | 
|
| 
       540 
589 
     | 
    
         
             
                # Zero is returned for NaN inputs.
         
     | 
| 
       541 
590 
     | 
    
         
             
                #
         
     | 
| 
       542 
591 
     | 
    
         
             
                #
         
     | 
| 
       543 
     | 
    
         
            -
                #  
     | 
| 
       544 
     | 
    
         
            -
                # +input_a+:: tensor X
         
     | 
| 
      
 592 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
       545 
593 
     | 
    
         
             
                #
         
     | 
| 
       546 
594 
     | 
    
         
             
                # Options:
         
     | 
| 
       547 
     | 
    
         
            -
                #  
     | 
| 
      
 595 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 596 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       548 
597 
     | 
    
         
             
                def sign(input_a, name: nil)
         
     | 
| 
       549 
598 
     | 
    
         
             
                  _op(:sign, input_a, name: name)
         
     | 
| 
       550 
599 
     | 
    
         
             
                end
         
     | 
| 
         @@ -554,11 +603,11 @@ module TensorStream 
     | 
|
| 
       554 
603 
     | 
    
         
             
                # Computes sin of input element-wise.
         
     | 
| 
       555 
604 
     | 
    
         
             
                #
         
     | 
| 
       556 
605 
     | 
    
         
             
                #
         
     | 
| 
       557 
     | 
    
         
            -
                #  
     | 
| 
       558 
     | 
    
         
            -
                # +input_a+:: tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 606 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
       559 
607 
     | 
    
         
             
                #
         
     | 
| 
       560 
608 
     | 
    
         
             
                # Options:
         
     | 
| 
       561 
     | 
    
         
            -
                #  
     | 
| 
      
 609 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 610 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       562 
611 
     | 
    
         
             
                def sin(input_a, name: nil)
         
     | 
| 
       563 
612 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
       564 
613 
     | 
    
         
             
                  _op(:sin, input_a, name: name)
         
     | 
| 
         @@ -570,28 +619,50 @@ module TensorStream 
     | 
|
| 
       570 
619 
     | 
    
         
             
                # Returns a 0-D Tensor representing the number of elements in input of type out_type. Defaults to :int32.
         
     | 
| 
       571 
620 
     | 
    
         
             
                #
         
     | 
| 
       572 
621 
     | 
    
         
             
                #
         
     | 
| 
       573 
     | 
    
         
            -
                #  
     | 
| 
       574 
     | 
    
         
            -
                # +input+:: A tensor
         
     | 
| 
      
 622 
     | 
    
         
            +
                # @param input A tensor
         
     | 
| 
       575 
623 
     | 
    
         
             
                #
         
     | 
| 
       576 
624 
     | 
    
         
             
                # Options:
         
     | 
| 
       577 
     | 
    
         
            -
                #  
     | 
| 
       578 
     | 
    
         
            -
                #  
     | 
| 
      
 625 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 626 
     | 
    
         
            +
                # @option out_type Optional output type default (:int32)
         
     | 
| 
      
 627 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       579 
628 
     | 
    
         
             
                def size(input, name: nil, out_type: :int32)
         
     | 
| 
       580 
629 
     | 
    
         
             
                  _op(:size, input, name: name, out_type: out_type)
         
     | 
| 
       581 
630 
     | 
    
         
             
                end
         
     | 
| 
       582 
631 
     | 
    
         | 
| 
       583 
632 
     | 
    
         | 
| 
      
 633 
     | 
    
         
            +
                ##
         
     | 
| 
      
 634 
     | 
    
         
            +
                # Extracts a strided slice of a tensor 
         
     | 
| 
      
 635 
     | 
    
         
            +
                # this op extracts a slice of size `(end-begin)/stride`
         
     | 
| 
      
 636 
     | 
    
         
            +
                #   from the given `input_` tensor. Starting at the location specified by `begin`
         
     | 
| 
      
 637 
     | 
    
         
            +
                #   the slice continues by adding `stride` to the index until all dimensions are
         
     | 
| 
      
 638 
     | 
    
         
            +
                #   not less than `end`.
         
     | 
| 
      
 639 
     | 
    
         
            +
                #   Note that a stride can be negative, which causes a reverse slice.
         
     | 
| 
      
 640 
     | 
    
         
            +
                #
         
     | 
| 
      
 641 
     | 
    
         
            +
                #
         
     | 
| 
      
 642 
     | 
    
         
            +
                # @param input A tensor
         
     | 
| 
      
 643 
     | 
    
         
            +
                # @param _begin start index
         
     | 
| 
      
 644 
     | 
    
         
            +
                # @param _end end index
         
     | 
| 
      
 645 
     | 
    
         
            +
                # @param strides end index
         
     | 
| 
      
 646 
     | 
    
         
            +
                #
         
     | 
| 
      
 647 
     | 
    
         
            +
                # Options:
         
     | 
| 
      
 648 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 649 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
      
 650 
     | 
    
         
            +
                def strided_slice(input, _begin, _end, strides = nil, name: nil)
         
     | 
| 
      
 651 
     | 
    
         
            +
                  _op(:strided_slice, input, _begin, _end, strides, name: name)
         
     | 
| 
      
 652 
     | 
    
         
            +
                end
         
     | 
| 
      
 653 
     | 
    
         
            +
             
     | 
| 
      
 654 
     | 
    
         
            +
             
     | 
| 
       584 
655 
     | 
    
         
             
                ##
         
     | 
| 
       585 
656 
     | 
    
         
             
                # Returns x - y element-wise.
         
     | 
| 
       586 
657 
     | 
    
         
             
                #
         
     | 
| 
       587 
658 
     | 
    
         
             
                # This operation supports broadcasting
         
     | 
| 
       588 
659 
     | 
    
         
             
                #
         
     | 
| 
       589 
     | 
    
         
            -
                #  
     | 
| 
       590 
     | 
    
         
            -
                #  
     | 
| 
       591 
     | 
    
         
            -
                # +input_b+:: tensor Y
         
     | 
| 
      
 660 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 661 
     | 
    
         
            +
                # @param input_b tensor Y
         
     | 
| 
       592 
662 
     | 
    
         
             
                #
         
     | 
| 
       593 
663 
     | 
    
         
             
                # Options:
         
     | 
| 
       594 
     | 
    
         
            -
                #  
     | 
| 
      
 664 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 665 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       595 
666 
     | 
    
         
             
                def sub(input_a, input_b, name: nil)
         
     | 
| 
       596 
667 
     | 
    
         
             
                  input_a, input_b = apply_data_type_coercion(input_a, input_b)
         
     | 
| 
       597 
668 
     | 
    
         
             
                  _op(:sub, input_a, input_b, name: name)
         
     | 
| 
         @@ -607,19 +678,21 @@ module TensorStream 
     | 
|
| 
       607 
678 
     | 
    
         
             
                # If axis has no entries, all dimensions are reduced, and a tensor with a single element is returned.
         
     | 
| 
       608 
679 
     | 
    
         
             
                #
         
     | 
| 
       609 
680 
     | 
    
         
             
                #
         
     | 
| 
       610 
     | 
    
         
            -
                #  
     | 
| 
       611 
     | 
    
         
            -
                #  
     | 
| 
       612 
     | 
    
         
            -
                # +axis+:: tensor X (of type INTEGER_TYPES)
         
     | 
| 
      
 681 
     | 
    
         
            +
                # @param input_a tensor X
         
     | 
| 
      
 682 
     | 
    
         
            +
                # @param axis_p tensor X (of type INTEGER_TYPES)
         
     | 
| 
       613 
683 
     | 
    
         
             
                #
         
     | 
| 
       614 
684 
     | 
    
         
             
                # Options:
         
     | 
| 
       615 
     | 
    
         
            -
                #  
     | 
| 
       616 
     | 
    
         
            -
                #  
     | 
| 
       617 
     | 
    
         
            -
                 
     | 
| 
       618 
     | 
    
         
            -
             
     | 
| 
      
 685 
     | 
    
         
            +
                # @option axis axis
         
     | 
| 
      
 686 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 687 
     | 
    
         
            +
                # @option keepdims If true, retains reduced dimensions with length 1. default (false)
         
     | 
| 
      
 688 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
      
 689 
     | 
    
         
            +
                def sum(input_a, axis_p = nil, axis: nil, name: nil, keepdims: false)
         
     | 
| 
      
 690 
     | 
    
         
            +
                  check_allowed_types(axis_p, TensorStream::Ops::INTEGER_TYPES)
         
     | 
| 
       619 
691 
     | 
    
         
             
                  input_a = TensorStream.convert_to_tensor(input_a)
         
     | 
| 
       620 
692 
     | 
    
         
             
                  return input_a if input_a.shape.scalar?
         
     | 
| 
       621 
     | 
    
         
            -
                   
     | 
| 
       622 
     | 
    
         
            -
                   
     | 
| 
      
 693 
     | 
    
         
            +
                  axis_p = axis_p || axis
         
     | 
| 
      
 694 
     | 
    
         
            +
                  axis_p = cast_axis(input_a, axis_p)
         
     | 
| 
      
 695 
     | 
    
         
            +
                  _op(:sum, input_a, axis_p, name: name, keepdims: keepdims)
         
     | 
| 
       623 
696 
     | 
    
         
             
                end
         
     | 
| 
       624 
697 
     | 
    
         | 
| 
       625 
698 
     | 
    
         
             
                alias_method :reduce_sum, :sum
         
     | 
| 
         @@ -628,11 +701,11 @@ module TensorStream 
     | 
|
| 
       628 
701 
     | 
    
         
             
                # Computes tan of input element-wise.
         
     | 
| 
       629 
702 
     | 
    
         
             
                #
         
     | 
| 
       630 
703 
     | 
    
         
             
                #
         
     | 
| 
       631 
     | 
    
         
            -
                #  
     | 
| 
       632 
     | 
    
         
            -
                # +input_a+:: tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 704 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
       633 
705 
     | 
    
         
             
                #
         
     | 
| 
       634 
706 
     | 
    
         
             
                # Options:
         
     | 
| 
       635 
     | 
    
         
            -
                #  
     | 
| 
      
 707 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 708 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       636 
709 
     | 
    
         
             
                def tan(input_a, name: nil)
         
     | 
| 
       637 
710 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
       638 
711 
     | 
    
         
             
                  _op(:tan, input_a, name: name)
         
     | 
| 
         @@ -643,11 +716,11 @@ module TensorStream 
     | 
|
| 
       643 
716 
     | 
    
         
             
                # Computes tanh of input element-wise.
         
     | 
| 
       644 
717 
     | 
    
         
             
                #
         
     | 
| 
       645 
718 
     | 
    
         
             
                #
         
     | 
| 
       646 
     | 
    
         
            -
                #  
     | 
| 
       647 
     | 
    
         
            -
                # +input_a+:: tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
      
 719 
     | 
    
         
            +
                # @param input_a tensor X (of type FLOATING_POINT_TYPES)
         
     | 
| 
       648 
720 
     | 
    
         
             
                #
         
     | 
| 
       649 
721 
     | 
    
         
             
                # Options:
         
     | 
| 
       650 
     | 
    
         
            -
                #  
     | 
| 
      
 722 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 723 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       651 
724 
     | 
    
         
             
                def tanh(input_a, name: nil)
         
     | 
| 
       652 
725 
     | 
    
         
             
                  check_allowed_types(input_a, TensorStream::Ops::FLOATING_POINT_TYPES)
         
     | 
| 
       653 
726 
     | 
    
         
             
                  _op(:tanh, input_a, name: name)
         
     | 
| 
         @@ -661,27 +734,44 @@ module TensorStream 
     | 
|
| 
       661 
734 
     | 
    
         
             
                # and the values of input are replicated multiples[i] times along the 'i'th dimension. For example, tiling [a b c d] by [2] produces [a b c d a b c d].
         
     | 
| 
       662 
735 
     | 
    
         
             
                #
         
     | 
| 
       663 
736 
     | 
    
         
             
                #
         
     | 
| 
       664 
     | 
    
         
            -
                #  
     | 
| 
       665 
     | 
    
         
            -
                #  
     | 
| 
       666 
     | 
    
         
            -
                # +multiples+:: Must be one of the following types: int32, int64. 1-D. Length must be the same as the number of dimensions in input
         
     | 
| 
      
 737 
     | 
    
         
            +
                # @param input A tensor
         
     | 
| 
      
 738 
     | 
    
         
            +
                # @param multiples Must be one of the following types: int32, int64. 1-D. Length must be the same as the number of dimensions in input
         
     | 
| 
       667 
739 
     | 
    
         
             
                #
         
     | 
| 
       668 
740 
     | 
    
         
             
                # Options:
         
     | 
| 
       669 
     | 
    
         
            -
                #  
     | 
| 
      
 741 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 742 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       670 
743 
     | 
    
         
             
                def tile(input, multiples, name: nil)
         
     | 
| 
       671 
744 
     | 
    
         
             
                  _op(:tile, input, multiples, name: name)
         
     | 
| 
       672 
745 
     | 
    
         
             
                end
         
     | 
| 
       673 
746 
     | 
    
         | 
| 
       674 
747 
     | 
    
         | 
| 
      
 748 
     | 
    
         
            +
                ##
         
     | 
| 
      
 749 
     | 
    
         
            +
                # Finds values and indices of the `k` largest entries for the last dimension.
         
     | 
| 
      
 750 
     | 
    
         
            +
                #
         
     | 
| 
      
 751 
     | 
    
         
            +
                #
         
     | 
| 
      
 752 
     | 
    
         
            +
                # @param input 1-D or higher `Tensor` with last dimension at least `k`.
         
     | 
| 
      
 753 
     | 
    
         
            +
                # @param k 0-D `int32` `Tensor`.  Number of top elements to look for along the last dimension (along each row for matrices)
         
     | 
| 
      
 754 
     | 
    
         
            +
                #
         
     | 
| 
      
 755 
     | 
    
         
            +
                # Options:
         
     | 
| 
      
 756 
     | 
    
         
            +
                # @option sorted If true the resulting `k` elements will be sorted by the values in descending order. default (true)
         
     | 
| 
      
 757 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 758 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
      
 759 
     | 
    
         
            +
                def top_k(input, k = 1, sorted: true, name: nil)
         
     | 
| 
      
 760 
     | 
    
         
            +
                  result = _op(:top_k, input, k, sorted: sorted, name: name)
         
     | 
| 
      
 761 
     | 
    
         
            +
                  [result[0], result[1]]
         
     | 
| 
      
 762 
     | 
    
         
            +
                end
         
     | 
| 
      
 763 
     | 
    
         
            +
             
     | 
| 
      
 764 
     | 
    
         
            +
             
     | 
| 
       675 
765 
     | 
    
         
             
                ##
         
     | 
| 
       676 
766 
     | 
    
         
             
                # Creates a tensor with all elements set to zero
         
     | 
| 
       677 
767 
     | 
    
         
             
                #
         
     | 
| 
       678 
768 
     | 
    
         
             
                #
         
     | 
| 
       679 
     | 
    
         
            -
                #  
     | 
| 
       680 
     | 
    
         
            -
                # +shape+:: A 1-D integer Tensor or ruby array. The shape of the output tensor.
         
     | 
| 
      
 769 
     | 
    
         
            +
                # @param shape A 1-D integer Tensor or ruby array. The shape of the output tensor.
         
     | 
| 
       681 
770 
     | 
    
         
             
                #
         
     | 
| 
       682 
771 
     | 
    
         
             
                # Options:
         
     | 
| 
       683 
     | 
    
         
            -
                #  
     | 
| 
       684 
     | 
    
         
            -
                #  
     | 
| 
      
 772 
     | 
    
         
            +
                # @option dtype Optional name default (:float32)
         
     | 
| 
      
 773 
     | 
    
         
            +
                # @option name Optional name
         
     | 
| 
      
 774 
     | 
    
         
            +
                # @return Tensor
         
     | 
| 
       685 
775 
     | 
    
         
             
                def zeros(shape, dtype: :float32, name: nil)
         
     | 
| 
       686 
776 
     | 
    
         
             
                  _op(:zeros, shape, dtype: dtype, name: name)
         
     | 
| 
       687 
777 
     | 
    
         
             
                end
         
     |