code: def test_sparse_storage_fallback():
      """test operators which don't implement FComputeEx or FStatefulComputeEx"""
  
      def check_broadcast_add(shape, lhs_stype, rhs_stype):
          lhs = mx.symbol.Variable("lhs", stype=lhs_stype)
          rhs = mx.symbol.Variable("rhs", stype=rhs_stype)
          lhs_nd = rand_ndarray(shape, lhs_stype)
          rhs_nd = rand_ndarray(shape, rhs_stype)
          lhs_dns = mx.nd.cast_storage(lhs_nd, stype="default")
          rhs_dns = mx.nd.cast_storage(rhs_nd, stype="default")
  
          out_dns = (lhs_dns + rhs_dns).asnumpy()
          test = mx.symbol.broadcast_add(lhs, rhs)
          location = {"lhs": lhs_nd, "rhs": rhs_nd}
          check_symbolic_forward(test, location, [out_dns])
          check_numeric_gradient(test, location)
          check_symbolic_backward(
              test, location, [out_dns], [out_dns, out_dns]
          )
  
      def np_softmax(x, axis=-1):
          # fix for old numpy on Travis not supporting keepdims
          x = x - np.max(x, axis=axis, keepdims=True)
          x = np.exp(x)
          x /= np.sum(x, axis=axis, keepdims=True)
          return x
  
      def check_concat(shape, lhs_stype, rhs_stype):
          x = mx.symbol.Variable("x", stype=lhs_stype)
          w = mx.symbol.Variable("w", stype=rhs_stype)
          test = mx.sym.Concat(x, w)
          x_nd = rand_ndarray(shape, lhs_stype)
          w_nd = rand_ndarray(shape, rhs_stype)
          location = {"x": x_nd, "w": w_nd}
          check_numeric_gradient(test, location)
  
      def check_operator_with_temp_resource(shape, stype):
          x = mx.symbol.Variable("x", stype=stype)
          test = mx.sym.sum(x)
          x_nd = rand_ndarray(shape, stype)
          location = {"x": x_nd}
          check_numeric_gradient(test, location)
  
      shape = rand_shape_2d()
      stypes = ["default", "csr", "row_sparse"]
      for lhs in stypes:
          check_operator_with_temp_resource(shape, lhs)
          for rhs in stypes:
              check_broadcast_add(shape, lhs, rhs)
              check_concat(shape, lhs, rhs)
  
imports: from mxnet.test_utils import *
  from mxnet.base import MXNetError
  import pytest
  from common import assertRaises
  import random
  import warnings
label_desc: Use image node_id 28 for calling a global function with example usage: test_sparse_storage_fallback() and returns: x