code: def save_pointcloud_ply(
      filename: str, pointcloud: torch.Tensor
  ) -> None:
      r"""Utility function to save to disk a pointcloud in PLY format.
  
      Args:
          filename: the path to save the pointcloud.
          pointcloud: tensor containing the pointcloud to save.
            The tensor must be in the shape of :math:`(*, 3)` where the last
            component is assumed to be a 3d point coordinate :math:`(X, Y, Z)`.
      """
      if not isinstance(filename, str) and filename[-3:] == ".ply":
          raise TypeError(
              f"Input filename must be a string in with the .ply  extension. Got {filename}"
          )
  
      if not torch.is_tensor(pointcloud):
          raise TypeError(
              f"Input pointcloud type is not a torch.Tensor. Got {type(pointcloud)}"
          )
  
      if not len(pointcloud.shape) >= 2 and pointcloud.shape[-1] == 3:
          raise TypeError(
              f"Input pointcloud must be in the following shape HxWx3. Got {pointcloud.shape}."
          )
  
      # flatten the input pointcloud in a vector to iterate points
      xyz_vec: torch.Tensor = pointcloud.reshape(-1, 3)
  
      with open(filename, "w") as f:
          data_str: str = ""
          num_points: int = xyz_vec.shape[0]
          for idx in range(num_points):
              xyz = xyz_vec[idx]
              if not bool(torch.isfinite(xyz).any()):
                  num_points -= 1
                  continue
              x: float = float(xyz[0])
              y: float = float(xyz[1])
              z: float = float(xyz[2])
              data_str += f"{x} {y} {z}\n"
  
          f.write("ply\n")
          f.write("format ascii 1.0\n")
          f.write("comment arraiy generated\n")
          f.write("element vertex %d\n" % num_points)
          f.write("property double x\n")
          f.write("property double y\n")
          f.write("property double z\n")
          f.write("end_header\n")
          f.write(data_str)
  
label_desc: Use image node_id 1 for calling a global function with example usage: save_pointcloud_ply(filename, pointcloud) without return types