code: def expand_dims(data, axis, num_newaxis=1):
      """Insert `num_newaxis` axes at the position given by `axis`.
  
      Parameters
      ----------
      data : relay.Expr
          The input data to the operator.
  
      axis : Union[int, Expr]
          The axis at which the input array is expanded.
          Should lie in range `[-data.ndim - 1, data.ndim]`.
          If `axis < 0`, it is the first axis inserted;
          If `axis >= 0`, it is the last axis inserted in Python's negative indexing.
  
      num_newaxis : int, optional
          Number of axes to be inserted. Should be >= 0.
  
      Returns
      -------
      result : relay.Expr
          The reshaped result.
      """
      if isinstance(axis, int):
          return _make.expand_dims(data, axis, num_newaxis)
      if isinstance(axis, Expr):
          # TODO (AndrewZhaoLuo): investigate performance issues with consecutive
          # dynamic expand_dims on non-llvm targets.
          return _dyn_make.expand_dims(data, axis, num_newaxis)
      raise ValueError(f"Unknown type for axis: {type(axis)}")
  
imports: from ...tir import expr
  from ..expr import Constant, Expr, Tuple, TupleWrapper, const
  from .None import _make
  from .dyn import _make
  from .tensor import shape_of
label_desc: Use image node_id 5 for calling a global function with example usage: expand_dims(data, axis, num_newaxis) and returns: _make, _dyn_make