code: def outer_data():
      nInputBlock = 8
      nOutputBlock = 7
      xSize = 6
      ySize = 5
      xWindowSize = 4
      yWindowSize = 3
      batchSize = 2
  
      o = randn(nInputBlock, nOutputBlock, xSize, ySize).astype(
          "float32"
      )
      x = randn(batchSize, xWindowSize, xSize).astype("float32")
      y = randn(batchSize, yWindowSize, ySize).astype("float32")
      randint = np.random.randint
      xIdx = np.vstack(
          randint(0, nInputBlock, size=xWindowSize)
          for _ in range(batchSize)
      ).astype("int32")
      yIdx = np.vstack(
          randint(0, nOutputBlock, size=yWindowSize)
          for _ in range(batchSize)
      ).astype("int32")
  
      return o, x, y, xIdx, yIdx
  
imports: from __future__ import absolute_import, print_function, division
  import numpy
  from numpy.random import randn
  import theano
  from theano import tensor
  import theano.tests.unittest_tools
  from theano.tensor.nnet.blocksparse import sparse_block_dot, sparse_block_gemv, sparse_block_outer, SparseBlockGemv, SparseBlockOuter
label_desc: Use image node_id 3 for calling the BlockSparse_Gemv_and_Outer obj's underlying member method code with example usage: obj.outer_data() and returns: o,  x,  y,  xIdx,  yIdx