class_docstr: A negative sampler used to generate negative samples and return
  a mix of positive and negative samples.
  
  Functional name: :obj:`sample_negative`.
  
  Parameters
  ----------
  datapipe : DataPipe
      The datapipe.
  negative_ratio : int
      The proportion of negative samples to positive samples.
docstr: Generate negative pairs for a given etype form positive pairs
  for a given etype.
  
  Parameters
  ----------
  node_pairs : Tuple[Tensor, Tensor]
      A tuple of tensors that represent source-destination node pairs of
      positive edges, where positive means the edge must exist in the
      graph.
  etype : str
      Canonical edge type.
  
  Returns
  -------
  Tuple[Tensor, Tensor]
      A collection of negative node pairs.
docstr_tok: ["Generate","negative","pairs","for","a","given","etype","form","positive","pairs","for","a","given","etype",".","Parameters","--","--","--","--","--","node_pairs",":","Tuple","[","Tensor",",","Tensor","]","A","tuple","of","tensors","that","represent","source-destination","node","pairs","of","positive","edges",",","where","positive","means","the","edge","must","exist","in","the","graph",".","etype",":","str","Canonical","edge","type",".","Returns","--","--","--","-","Tuple","[","Tensor",",","Tensor","]","A","collection","of","negative","node","pairs","."]
code: def _sample_with_etype(self, node_pairs, etype=None):
      """Generate negative pairs for a given etype form positive pairs
      for a given etype.
  
      Parameters
      ----------
      node_pairs : Tuple[Tensor, Tensor]
          A tuple of tensors that represent source-destination node pairs of
          positive edges, where positive means the edge must exist in the
          graph.
      etype : str
          Canonical edge type.
  
      Returns
      -------
      Tuple[Tensor, Tensor]
          A collection of negative node pairs.
      """
      raise NotImplementedError
  
file_path: dgl/python/dgl/graphbolt/negative_sampler.py
imports: from _collections_abc import Mapping
  from torch.utils.data import functional_datapipe
  from .minibatch_transformer import MiniBatchTransformer
label_desc: Use image node_id 3 for calling the NegativeSampler obj's underlying member method code with example usage: obj._sample_with_etype(node_pairs, etype) without return types