class_docstr: This computes the outer product of two sets of pieces of vectors
  updating a full matrix with the results::
  
      for b in range(batch_size):
          o[xIdx[b, i], yIdx[b, j]] += (alpha * outer(x[b, i], y[b, j]))
  
  This op is involved in the gradient of SparseBlockGemv.
class_docstr_tok: ["This","computes","the","outer","product","of","two","sets","of","pieces","of","vectors","updating","a","full","matrix","with","the","results",":",":","for","b","in","range","(","batch_size",")",":","o","[","xIdx","[","b",",","i","]",",","yIdx","[","b",",","j","]","]","+=","(","alpha","*","outer","(","x","[","b",",","i","]",",","y","[","b",",","j","]",")",")","This","op","is","involved","in","the","gradient","of","SparseBlockGemv","."]
code: def infer_shape(self, node, input_shapes):
      return [input_shapes[0]]
  
file_path: Theano/theano/tensor/nnet/blocksparse.py
imports: from __future__ import absolute_import, print_function, division
  import numpy
  import theano
  from theano import Op, Apply
  from theano.tensor import discrete_dtypes
  from theano.gradient import grad_undefined
label_desc: Use image node_id 3 for calling the SparseBlockOuter obj's underlying member method code with example usage: obj.infer_shape(node, input_shapes) and returns: list