code: def __init__(
      self,
      num_inputs,
      num_outputs,
      radius,
      position_embedding="xyz",
      reduction="avg",
      output_conv=False,
      activation=torch.nn.LeakyReLU(negative_slope=0.2),
      bn_momentum=0.02,
      bn=FastBatchNorm1d,
  ):
      super(PosPoolLayer, self).__init__()
      self.num_inputs = num_inputs
      self.num_outputs = num_outputs
      self.radius = radius
      self.position_embedding = position_embedding
      self.reduction = reduction
      self.output_conv = (
          True if num_outputs != num_inputs else output_conv
      )
      if bn:
          self.bn = bn(num_inputs, momentum=bn_momentum)
      else:
          self.bn = None
      self.activation = activation
      if self.output_conv:
          self.oconv = torch.nn.Sequential(
              nn.Linear(num_inputs, num_outputs, bias=False),
              bn(num_outputs, momentum=bn_momentum),
              activation,
          )
  
imports: import torch
  import torch.nn
  from torch_points3d.core.common_modules.base_modules import FastBatchNorm1d
  from torch_points3d.core.common_modules.gathering import gather
label_desc: Use image node_id 1 to create a new PosPoolLayer object from inherited base classes: torch.nn with example: obj = PosPoolLayer(num_inputs, num_outputs, radius, position_embedding, reduction, output_conv, activation, bn_momentum, bn)