code: def remove_nodes(g, nids, ntype=None, store_ids=False):
      r"""Remove the specified nodes and return a new graph.
  
      Also delete the features. Edges that connect from/to the nodes will be
      removed as well. After the removal, DGL re-labels the remaining nodes and edges
      with IDs from 0.
  
      Parameters
      ----------
      nids : int, Tensor, iterable[int]
          The nodes to be removed.
      ntype : str, optional
          The type of the nodes to remove. Can be omitted if there is
          only one node type in the graph.
      store_ids : bool, optional
          If True, it will store the raw IDs of the extracted nodes and edges in the ``ndata``
          and ``edata`` of the resulting graph under name ``dgl.NID`` and ``dgl.EID``,
          respectively.
  
      Return
      ------
      DGLGraph
          The graph with nodes deleted.
  
      Notes
      -----
  
      This function discards the batch information. Please use
      :func:`dgl.DGLGraph.set_batch_num_nodes`
      and :func:`dgl.DGLGraph.set_batch_num_edges` on the transformed graph
      to maintain the information.
  
      Examples
      --------
  
      >>> import dgl
      >>> import torch
  
      **Homogeneous Graphs**
  
      >>> g = dgl.graph((torch.tensor([0, 0, 2]), torch.tensor([0, 1, 2])))
      >>> g.ndata['hv'] = torch.arange(3).float().reshape(-1, 1)
      >>> g.edata['he'] = torch.arange(3).float().reshape(-1, 1)
      >>> g = dgl.remove_nodes(g, torch.tensor([0, 1]))
      >>> g
      Graph(num_nodes=1, num_edges=1,
          ndata_schemes={'hv': Scheme(shape=(1,), dtype=torch.float32)}
          edata_schemes={'he': Scheme(shape=(1,), dtype=torch.float32)})
      >>> g.ndata['hv']
      tensor([[2.]])
      >>> g.edata['he']
      tensor([[2.]])
  
      **Heterogeneous Graphs**
  
      >>> g = dgl.heterograph({
      ...     ('user', 'plays', 'game'): (torch.tensor([0, 1, 1, 2]),
      ...                                 torch.tensor([0, 0, 1, 1])),
      ...     ('developer', 'develops', 'game'): (torch.tensor([0, 1]),
      ...                                         torch.tensor([0, 1]))
      ...     })
      >>> g = dgl.remove_nodes(g, torch.tensor([0, 1]), ntype='game')
      >>> g.num_nodes('user')
      3
      >>> g.num_nodes('game')
      0
      >>> g.num_edges('plays')
      0
  
      See Also
      --------
      add_nodes
      add_edges
      remove_edges
      """
      g = g.clone()
      g.remove_nodes(nids, ntype=ntype, store_ids=store_ids)
      return g
  
imports: import copy
  from collections.abc import Iterable, Mapping
  import numpy
  import scipy.sparse
  import scipy.sparse.linalg
  from ..utils import version
  from ..None import backend, batch, convert, function, ndarray, subgraph, utils
  from .._ffi.function import _init_api
  from ..base import dgl_warning, DGLError, EID, NID
  from ..frame import Frame
  from ..heterograph import DGLGraph
  from ..heterograph_index import create_heterograph_from_relations, create_metagraph_index
  from ..partition import metis_partition, metis_partition_assignment, partition_graph_with_halo
  from ..sampling.neighbor import sample_neighbors
label_desc: Use image node_id 20 for calling a global function with example usage: remove_nodes(g, nids, ntype, store_ids) and returns: g