code: def full(shape, value, dtype=None):
      """Creates a hail :class:`.NDArrayNumericExpression` full of the specified value.
  
      Examples
      --------
  
      Create a 5 by 7 NDArray of type :py:data:`.tfloat64` 9s.
  
      >>> hl.nd.full((5, 7), 9)
  
      It is possible to specify a type other than :py:data:`.tfloat64` with the `dtype` argument.
  
      >>> hl.nd.full((5, 7), 9, dtype=hl.tint32)
  
      Parameters
      ----------
      shape : `tuple` or :class:`.TupleExpression`
              Desired shape.
      value : :class:`.Expression` or python value
              Value to fill ndarray with.
      dtype : :class:`.HailType`
              Desired hail type.
  
      Returns
      -------
      :class:`.NDArrayNumericExpression`
          An ndarray of the specified shape filled with the specified value.
      """
      if isinstance(shape, Int64Expression):
          shape_product = shape
      else:
          shape_product = reduce(lambda a, b: a * b, shape)
      return (
          arange(hl.int32(shape_product))
          .map(lambda x: cast_expr(value, dtype))
          .reshape(shape)
      )
  
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 4 for calling a global function with example usage: full(shape, value, dtype) and returns: arange