code: def random_bsr_matrix(M, N, BS_R, BS_C, density, dtype):
      import itertools
  
      Y = np.zeros((M, N), dtype=dtype)
      assert M % BS_R == 0
      assert N % BS_C == 0
      nnz = int(density * M * N)
      num_blocks = int(nnz / (BS_R * BS_C)) + 1
      candidate_blocks = np.asarray(
          list(itertools.product(range(0, M, BS_R), range(0, N, BS_C)))
      )
      assert candidate_blocks.shape[0] == M // BS_R * N // BS_C
      chosen_blocks = candidate_blocks[
          np.random.choice(
              candidate_blocks.shape[0], size=num_blocks, replace=False
          )
      ]
      for i in range(len(chosen_blocks)):
          r, c = chosen_blocks[i]
          Y[r : r + BS_R, c : c + BS_C] = np.random.randn(BS_R, BS_C)
      s = sp.bsr_matrix(Y, blocksize=(BS_R, BS_C))
      assert s.data.shape == (num_blocks, BS_R, BS_C)
      assert s.indices.shape == (num_blocks,)
      assert s.indptr.shape == (M // BS_R + 1,)
      return s
  
imports: import numpy
  import tvm
  from tvm import te
  from tvm import topi
  from tvm import relay
  import tvm.topi.testing
  from tvm.topi.utils import get_const_tuple
  import tvm.contrib.sparse
  from collections import namedtuple
  import time
  import scipy.sparse
  import tvm.testing
label_desc: Use image node_id 13 for calling a global function with example usage: random_bsr_matrix(M, N, BS_R, BS_C, density, dtype) and returns: s