code: def diagonal(nd):
      """Gets the diagonal of a 2 dimensional NDArray.
  
      Examples
      --------
  
      >>> hl.eval(hl.nd.diagonal(hl.nd.array([[1, 2], [3, 4]])))
      array([1, 4], dtype=int32)
  
      Parameters
      ----------
      nd : :class:`.NDArrayNumericExpression`
          A 2 dimensional NDArray, shape(M, N).
  
      Returns
      -------
      :class:`.NDArrayExpression`
          A 1 dimension NDArray of length min(M, N), containing the diagonal of `nd`.
      """
      assert nd.ndim == 2, "diagonal requires 2 dimensional ndarray"
      shape_min = hl.min(nd.shape[0], nd.shape[1])
      return hl.nd.array(
          hl.range(hl.int32(shape_min)).map(lambda i: nd[i, i])
      )
  
imports: from functools import reduce
  import hail
  from hail.expr.functions import _ndarray
  from hail.expr.functions import array
  from hail.expr.types import HailType, tfloat64, tfloat32, ttuple, tndarray
  from hail.typecheck import typecheck, nullable, oneof, tupleof, sequenceof
  from hail.expr.expressions import expr_int32, expr_int64, expr_tuple, expr_any, expr_array, expr_ndarray, expr_numeric, Int64Expression, cast_expr, construct_expr, expr_bool, unify_all
  from hail.expr.expressions.typed_expressions import NDArrayNumericExpression
  from hail.ir import NDArrayQR, NDArrayInv, NDArrayConcat, NDArraySVD, NDArrayEigh, Apply
label_desc: Use image node_id 7 for calling a global function with example usage: diagonal(nd) and returns: hl