code: def mark_variables(variables, gradients, grad_reqs='write'):
      
      if isinstance(variables, NDArray):
          assert isinstance(gradients, NDArray)
          variables = [variables]
          gradients = [gradients]
  
      if isinstance(grad_reqs, string_types):
          grad_reqs = [_GRAD_REQ_MAP[grad_reqs]]*len(variables)
      else:
          grad_reqs = [_GRAD_REQ_MAP[i] for i in grad_reqs]
  
      check_call(_LIB.MXAutogradMarkVariables(
          len(variables),
          c_handle_array(variables),
          c_array_buf(mx_uint, array('I', grad_reqs)),
          c_handle_array(gradients)))
docs: Mark NDArrays as variables to compute gradient for autograd.
  
      Parameters
      ----------
      variables: NDArray or list of NDArray
      gradients: NDArray or list of NDArray
      grad_reqs: str or list of str