class_docstr: Dual KPConv block (usually strided + non strided)
  
  Arguments: Accepted kwargs
      block_names: Name of the blocks to be used as part of this dual block
      down_conv_nn: Size of the convs e.g. [64,128],
      grid_size: Size of the grid for each block,
      prev_grid_size: Size of the grid in the previous KPConv
      has_bottleneck: Wether a block should implement the bottleneck
      max_num_neighbors: Max number of neighboors for the radius search,
      deformable: Is deformable,
      add_one: Add one as a feature,
class_docstr_tok: ["Dual","KPConv","block","(","usually","strided","+","non","strided",")","Arguments",":","Accepted","kwargs","block_names",":","Name","of","the","blocks","to","be","used","as","part","of","this","dual","block","down_conv_nn",":","Size","of","the","convs","e.g",".","[","64,128","]",",","grid_size",":","Size","of","the","grid","for","each","block",",","prev_grid_size",":","Size","of","the","grid","in","the","previous","KPConv","has_bottleneck",":","Wether","a","block","should","implement","the","bottleneck","max_num_neighbors",":","Max","number","of","neighboors","for","the","radius","search",",","deformable",":","Is","deformable",",","add_one",":","Add","one","as","a","feature",","]
code: def forward(self, data, precomputed=None, **kwargs):
      for block in self.blocks:
          data = block(data, precomputed=precomputed)
      return data
  
imports: import torch
  import sys
  from torch.nn import Linear
  from .kernels import KPConvLayer, KPConvDeformableLayer
  from torch_points3d.core.common_modules.base_modules import BaseModule, FastBatchNorm1d
  from torch_points3d.core.spatial_ops import RadiusNeighbourFinder
  from torch_points3d.core.data_transform import GridSampling3D
  from torch_points3d.utils.enums import ConvolutionFormat
  from torch_points3d.core.base_conv.message_passing import GlobalBaseModule
  from torch_points3d.core.common_modules.base_modules import Identity
  from torch_points3d.utils.config import is_list
label_desc: Use image node_id 2 for calling the KPDualBlock obj's underlying member method code with example usage: obj.forward(data, precomputed) and returns: data