class_docstr: An accelerated GraphSAGE layer from `Inductive Representation Learning
  on Large Graphs <https://arxiv.org/pdf/1706.02216.pdf>`__ that leverages the
  highly-optimized aggregation primitives in cugraph-ops:
  
  .. math::
      h_{\mathcal{N}(i)}^{(l+1)} &= \mathrm{aggregate}
      \left(\{h_{j}^{l}, \forall j \in \mathcal{N}(i) \}\right)
  
      h_{i}^{(l+1)} &= W \cdot \mathrm{concat}
      (h_{i}^{l}, h_{\mathcal{N}(i)}^{(l+1)})
  
  This module depends on :code:`pylibcugraphops` package, which can be
  installed via :code:`conda install -c nvidia pylibcugraphops=23.04`.
  :code:`pylibcugraphops` 23.04 requires python 3.8.x or 3.10.x.
  
  .. note::
      This is an **experimental** feature.
  
  Parameters
  ----------
  in_feats : int
      Input feature size.
  out_feats : int
      Output feature size.
  aggregator_type : str
      Aggregator type to use (``mean``, ``sum``, ``min``, ``max``).
  feat_drop : float
      Dropout rate on features, default: ``0``.
  bias : bool
      If True, adds a learnable bias to the output. Default: ``True``.
  
  Examples
  --------
  >>> import dgl
  >>> import torch
  >>> from dgl.nn import CuGraphSAGEConv
  >>> device = 'cuda'
  >>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3])).to(device)
  >>> g = dgl.add_self_loop(g)
  >>> feat = torch.ones(6, 10).to(device)
  >>> conv = CuGraphSAGEConv(10, 2, 'mean').to(device)
  >>> res = conv(g, feat)
  >>> res
  tensor([[-1.1690,  0.1952],
          [-1.1690,  0.1952],
          [-1.1690,  0.1952],
          [-1.1690,  0.1952],
          [-1.1690,  0.1952],
          [-1.1690,  0.1952]], device='cuda:0', grad_fn=<AddmmBackward0>)
code: def __init__(
      self,
      in_feats,
      out_feats,
      aggregator_type="mean",
      feat_drop=0.0,
      bias=True,
  ):
      if HAS_PYLIBCUGRAPHOPS is False:
          raise ModuleNotFoundError(
              f"{self.__class__.__name__} requires pylibcugraphops=23.04. "
              f"Install via `conda install -c nvidia 'pylibcugraphops=23.04'`."
              f"pylibcugraphops requires Python 3.8 or 3.10."
          )
  
      valid_aggr_types = {"max", "min", "mean", "sum"}
      if aggregator_type not in valid_aggr_types:
          raise ValueError(
              f"Invalid aggregator_type. Must be one of {valid_aggr_types}. "
              f"But got '{aggregator_type}' instead."
          )
  
      super().__init__()
      self.in_feats = in_feats
      self.out_feats = out_feats
      self.aggr = aggregator_type
      self.feat_drop = nn.Dropout(feat_drop)
      self.linear = nn.Linear(2 * in_feats, out_feats, bias=bias)
  
imports: from torch import nn
  from .cugraph_base import CuGraphBaseConv
label_desc: Use image node_id 1 to create a new CuGraphSAGEConv object from inherited base classes: CuGraphBaseConv with example: obj = CuGraphSAGEConv(in_feats, out_feats, aggregator_type, feat_drop, bias)