class_docstr: Create a Unet unwrapped generator
class_docstr_tok: ["Create","a","Unet","unwrapped","generator"]
docstr: This method does a forward on the Unet assuming symmetrical skip connections
  
  Parameters
  ----------
  data: torch.geometric.Data
      Data object that contains all info required by the modules
  precomputed_down: torch.geometric.Data
      Precomputed data that will be passed to the down convs
  precomputed_up: torch.geometric.Data
      Precomputed data that will be passed to the up convs
code: def forward(
      self, data, precomputed_down=None, precomputed_up=None, **kwargs
  ):
      """This method does a forward on the Unet assuming symmetrical skip connections
  
      Parameters
      ----------
      data: torch.geometric.Data
          Data object that contains all info required by the modules
      precomputed_down: torch.geometric.Data
          Precomputed data that will be passed to the down convs
      precomputed_up: torch.geometric.Data
          Precomputed data that will be passed to the up convs
      """
      stack_down = []
      for i in range(len(self.down_modules) - 1):
          data = self.down_modules[i](
              data, precomputed=precomputed_down
          )
          stack_down.append(data)
      data = self.down_modules[-1](data, precomputed=precomputed_down)
  
      if not isinstance(self.inner_modules[0], Identity):
          stack_down.append(data)
          data = self.inner_modules[0](data)
  
      sampling_ids = self._collect_sampling_ids(stack_down)
  
      for i in range(len(self.up_modules)):
          data = self.up_modules[i](
              (data, stack_down.pop()), precomputed=precomputed_up
          )
  
      for key, value in sampling_ids.items():
          setattr(data, key, value)
      return data
  
imports: from torch import nn
  from torch_geometric.nn import global_max_pool, global_mean_pool, fps, radius, knn_interpolate
  from torch.nn import Linear, ReLU, LeakyReLU, BatchNorm1d, Dropout
  from omegaconf.listconfig import ListConfig
  from omegaconf.dictconfig import DictConfig
  import logging
  import copy
  from torch_points3d.datasets.base_dataset import BaseDataset
  from torch_points3d.models.base_model import BaseModel
  from torch_points3d.core.common_modules.base_modules import Identity
  from torch_points3d.utils.config import is_list
label_desc: Use image node_id 12 for calling the UnwrappedUnetBasedModel obj's underlying member method code with example usage: obj.forward(data, precomputed_down, precomputed_up) and returns: data