code: def gemv_data():
      nInputBlock = 8
      nOutputBlock = 7
      inputSize = 6
      outputSize = 5
      inputWindowSize = 4
      outputWindowSize = 3
      batchSize = 2
  
      input = randn(batchSize, inputWindowSize, inputSize).astype(
          "float32"
      )
      permutation = np.random.permutation
      inputIndice = np.vstack(
          permutation(nInputBlock)[:inputWindowSize]
          for _ in range(batchSize)
      ).astype("int32")
      outputIndice = np.vstack(
          permutation(nOutputBlock)[:outputWindowSize]
          for _ in range(batchSize)
      ).astype("int32")
      weight = randn(
          nInputBlock, nOutputBlock, inputSize, outputSize
      ).astype("float32")
      bias = randn(nOutputBlock, outputSize).astype("float32")
  
      return weight, input, inputIndice, bias, outputIndice
  
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 2 for calling the BlockSparse_Gemv_and_Outer obj's underlying member method code with example usage: obj.gemv_data() and returns: weight,  input,  inputIndice,  bias,  outputIndice