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","."]
docstr: Compute the dot product of the specified pieces of vectors
  and matrices.
  
  The parameter types are actually their expected shapes
  relative to each other.
  
  Parameters
  ----------
  o : xBlocks, yBlocks, xSize, ySize
  x : batch, xWin, xSize
  y : batch, yWin, ySize
  xIdx : batch, iWin
      indexes of the x blocks
  yIdx : batch, oWin
      indexes of the y blocks
  
  Returns
  -------
  (xBlocks, yBlocks, xSize, ySize)
      outer(x[i], y[j]) + o[i, j]
  
  Notes
  -----
  - `batch` is the number of examples in a minibatch (batch size).
  - `xBlocks` is the total number of blocks in x.
  - `xSize` is the size of each of these x blocks.
  - `xWin` is the number of blocks that will be used as x. Which blocks
    will be used is specified in `xIdx`.
  - `yBlocks` is the number or possible y blocks.
  - `ySize` is the size of each of these y blocks.
  - `yWin` is the number of y blocks that will actually be computed.
    Which blocks will be computed is specified in `yIdx`.
docstr_tok: ["Compute","the","dot","product","of","the","specified","pieces","of","vectors","and","matrices",".","The","parameter","types","are","actually","their","expected","shapes","relative","to","each","other",".","Parameters","--","--","--","--","--","o",":","xBlocks",",","yBlocks",",","xSize",",","ySize","x",":","batch",",","xWin",",","xSize","y",":","batch",",","yWin",",","ySize","xIdx",":","batch",",","iWin","indexes","of","the","x","blocks","yIdx",":","batch",",","oWin","indexes","of","the","y","blocks","Returns","--","--","--","-","(","xBlocks",",","yBlocks",",","xSize",",","ySize",")","outer","(","x","[","i","]",",","y","[","j","]",")","+","o","[","i",",","j","]","Notes","--","--","-","-","`","batch","`","is","the","number","of","examples","in","a","minibatch","(","batch","size",")",".","-","`","xBlocks","`","is","the","total","number","of","blocks","in","x",".","-","`","xSize","`","is","the","size","of","each","of","these","x","blocks",".","-","`","xWin","`","is","the","number","of","blocks","that","will","be","used","as","x",".","Which","blocks","will","be","used","is","specified","in","`","xIdx","`",".","-","`","yBlocks","`","is","the","number","or","possible","y","blocks",".","-","`","ySize","`","is","the","size","of","each","of","these","y","blocks",".","-","`","yWin","`","is","the","number","of","y","blocks","that","will","actually","be","computed",".","Which","blocks","will","be","computed","is","specified","in","`","yIdx","`","."]
code: def make_node(self, o, x, y, xIdx, yIdx, alpha=None):
      """
      Compute the dot product of the specified pieces of vectors
      and matrices.
  
      The parameter types are actually their expected shapes
      relative to each other.
  
      Parameters
      ----------
      o : xBlocks, yBlocks, xSize, ySize
      x : batch, xWin, xSize
      y : batch, yWin, ySize
      xIdx : batch, iWin
          indexes of the x blocks
      yIdx : batch, oWin
          indexes of the y blocks
  
      Returns
      -------
      (xBlocks, yBlocks, xSize, ySize)
          outer(x[i], y[j]) + o[i, j]
  
      Notes
      -----
      - `batch` is the number of examples in a minibatch (batch size).
      - `xBlocks` is the total number of blocks in x.
      - `xSize` is the size of each of these x blocks.
      - `xWin` is the number of blocks that will be used as x. Which blocks
        will be used is specified in `xIdx`.
      - `yBlocks` is the number or possible y blocks.
      - `ySize` is the size of each of these y blocks.
      - `yWin` is the number of y blocks that will actually be computed.
        Which blocks will be computed is specified in `yIdx`.
  
      """
      one = theano.tensor.constant(np.asarray(1.0, dtype="float32"))
      o = theano.tensor.as_tensor_variable(o)
      x = theano.tensor.as_tensor_variable(x)
      y = theano.tensor.as_tensor_variable(y)
  
      if alpha is None:
          alpha = one
  
      return Apply(self, [o, x, y, xIdx, yIdx, alpha], [o.type()])
  
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 2 for calling the SparseBlockOuter obj's underlying member method code with example usage: obj.make_node(o, x, y, xIdx, yIdx, alpha) and returns: Apply