code: def unbox_matrix(typ, obj, c):
      struct_ptr = cgutils.create_struct_proxy(typ)(
          c.context, c.builder
      )
  
      data = c.pyapi.object_getattr_string(obj, "data")
      indices = c.pyapi.object_getattr_string(obj, "indices")
      indptr = c.pyapi.object_getattr_string(obj, "indptr")
      shape = c.pyapi.object_getattr_string(obj, "shape")
  
      struct_ptr.data = c.unbox(typ.data, data).value
      struct_ptr.indices = c.unbox(typ.indices, indices).value
      struct_ptr.indptr = c.unbox(typ.indptr, indptr).value
      struct_ptr.shape = c.unbox(typ.shape, shape).value
  
      c.pyapi.decref(data)
      c.pyapi.decref(indices)
      c.pyapi.decref(indptr)
      c.pyapi.decref(shape)
  
      is_error_ptr = cgutils.alloca_once_value(
          c.builder, cgutils.false_bit
      )
      is_error = c.builder.load(is_error_ptr)
  
      res = NativeValue(struct_ptr._getvalue(), is_error=is_error)
  
      return res
  
imports: import numpy
  import scipy
  import scipy.sparse
  from numba.core import cgutils, types
  from numba.core.imputils import impl_ret_borrowed
  from numba.extending import NativeValue, box, intrinsic, make_attribute_wrapper, models, overload, overload_attribute, overload_method, register_model, typeof_impl, unbox
label_desc: Use image node_id 3 for calling a global function with example usage: unbox_matrix(typ, obj, c) and returns: res