class_docstr: The PCPNet dataset from the `"PCPNet: Learning Local Shape Properties
  from Raw Point Clouds" <https://arxiv.org/abs/1710.04954>`_ paper,
  consisting of 30 shapes, each given as a point cloud, densely sampled with
  100k points.
  For each shape, surface normals and local curvatures are given as node
  features.
  
  Args:
      root (str): Root directory where the dataset should be saved.
      category (str): The training set category (one of :obj:`"NoNoise"`,
          :obj:`"Noisy"`, :obj:`"VarDensity"`, :obj:`"NoisyAndVarDensity"`
          for :obj:`split="train"` or :obj:`split="val"`,
          or one of :obj:`"All"`, :obj:`"LowNoise"`, :obj:`"MedNoise"`,
          :obj:`"HighNoise", :obj:`"VarDensityStriped",
          :obj:`"VarDensityGradient"` for :obj:`split="test"`).
      split (str, optional): If :obj:`"train"`, loads the training dataset.
          If :obj:`"val"`, loads the validation dataset.
          If :obj:`"test"`, loads the test dataset. (default: :obj:`"train"`)
      transform (callable, optional): A function/transform that takes in an
          :obj:`torch_geometric.data.Data` object and returns a transformed
          version. The data object will be transformed before every access.
          (default: :obj:`None`)
      pre_transform (callable, optional): A function/transform that takes in
          an :obj:`torch_geometric.data.Data` object and returns a
          transformed version. The data object will be transformed before
          being saved to disk. (default: :obj:`None`)
      pre_filter (callable, optional): A function that takes in an
          :obj:`torch_geometric.data.Data` object and returns a boolean
          value, indicating whether the data object should be included in the
          final dataset. (default: :obj:`None`)
      force_reload (bool, optional): Whether to re-process the dataset.
          (default: :obj:`False`)
code: def process(self) -> None:
      path_file = self.raw_paths
      with open(path_file[0], "r") as f:
          filenames = f.read().split("\n")[:-1]
      data_list = []
      for filename in filenames:
          pos_path = osp.join(self.raw_dir, filename + ".xyz")
          normal_path = osp.join(self.raw_dir, filename + ".normals")
          curv_path = osp.join(self.raw_dir, filename + ".curv")
          idx_path = osp.join(self.raw_dir, filename + ".pidx")
          pos = read_txt_array(pos_path)
          normals = read_txt_array(normal_path)
          curv = read_txt_array(curv_path)
          normals_and_curv = torch.cat([normals, curv], dim=1)
          test_idx = read_txt_array(idx_path, dtype=torch.long)
          data = Data(pos=pos, x=normals_and_curv)
          data.test_idx = test_idx
          if self.pre_filter is not None and not self.pre_filter(data):
              continue
          if self.pre_transform is not None:
              data = self.pre_transform(data)
          data_list.append(data)
  
      self.save(data_list, self.processed_paths[0])
  
file_path: pytorch_geometric/torch_geometric/datasets/pcpnet_dataset.py
imports: import os
  import os.path
  from typing import Callable, Optional
  import torch
  from torch_geometric.data import Data, InMemoryDataset, download_url, extract_zip
  from torch_geometric.io import read_txt_array
label_desc: Use image node_id 5 for calling the PCPNetDataset obj's underlying member method code with example usage: obj.process() without return types