docstr: Parameters
  -----------
  data:
      A dictionary that contains the data itself and its metadata information. Should contain
      - pos [N, 3]
      - x [N, C]
      - multiscale (optional) precomputed data for the down convolutions
      - upsample (optional) precomputed data for the up convolutions
  
  Returns
  --------
  data:
      - pos [1, 3] - Dummy pos
      - x [1, output_nc]
docstr_tok: ["Parameters","--","--","--","--","--","-","data",":","A","dictionary","that","contains","the","data","itself","and","its","metadata","information",".","Should","contain","-","pos","[","N",",","3","]","-","x","[","N",",","C","]","-","multiscale","(","optional",")","precomputed","data","for","the","down","convolutions","-","upsample","(","optional",")","precomputed","data","for","the","up","convolutions","Returns","--","--","--","--","data",":","-","pos","[","1",",","3","]","-","Dummy","pos","-","x","[","1",",","output_nc","]"]
code: def forward(self, data, *args, **kwargs):
      """
      Parameters
      -----------
      data:
          A dictionary that contains the data itself and its metadata information. Should contain
          - pos [N, 3]
          - x [N, C]
          - multiscale (optional) precomputed data for the down convolutions
          - upsample (optional) precomputed data for the up convolutions
  
      Returns
      --------
      data:
          - pos [1, 3] - Dummy pos
          - x [1, output_nc]
      """
      self._set_input(data)
      data = self.input
      stack_down = [data]
      for i in range(len(self.down_modules) - 1):
          data = self.down_modules[i](data)
          stack_down.append(data)
      data = self.down_modules[-1](data)
  
      if not isinstance(self.inner_modules[0], Identity):
          stack_down.append(data)
          data = self.inner_modules[0](data)
  
      if self.has_mlp_head:
          data.x = self.mlp(data.x)
      return data
  
imports: import os
  from omegaconf import DictConfig, OmegaConf
  import logging
  from torch_points3d.applications.modelfactory import ModelFactory
  from torch_points3d.core.common_modules import FastBatchNorm1d
  from torch_points3d.modules.KPConv import *
  from torch_points3d.core.base_conv.partial_dense import *
  from torch_points3d.models.base_architectures.unet import UnwrappedUnetBasedModel
  from torch_points3d.datasets.multiscale_data import MultiScaleBatch
  from torch_points3d.core.common_modules.base_modules import MLP
  from .utils import extract_output_nc
label_desc: Use image node_id 1 for calling the KPConvEncoder obj's underlying member method code with example usage: obj.forward(data) and returns: data