code: def _parse_heterogeneous_property_ascii(
      datum, line_iter, property: _Property
  ):
      """
      Read a general data property from an ascii .ply file.
  
      Args:
          datum: list to append the single value to. That value will be a numpy
                  array if the property is a list property, otherwise an int or
                  float.
          line_iter: iterator to words on the line from which we read.
          property: the property object describing the property we are reading.
      """
      value = next(line_iter, None)
      if value is None:
          raise ValueError("Too little data for an element.")
      if property.list_size_type is None:
          try:
              if property.data_type in ["double", "float"]:
                  datum.append(float(value))
              else:
                  datum.append(int(value))
          except ValueError:
              raise ValueError("Bad numerical data.") from None
      else:
          try:
              length = int(value)
          except ValueError:
              raise ValueError(
                  "A list length was not a number."
              ) from None
          list_value = np.zeros(
              length, dtype=_PLY_TYPES[property.data_type].np_type
          )
          for i in range(length):
              inner_value = next(line_iter, None)
              if inner_value is None:
                  raise ValueError("Too little data for an element.")
              try:
                  list_value[i] = float(inner_value)
              except ValueError:
                  raise ValueError("Bad numerical data.") from None
          datum.append(list_value)
  
imports: import itertools
  import os
  import struct
  import sys
  import warnings
  from collections import namedtuple
  from dataclasses import asdict, dataclass
  from io import BytesIO, TextIOBase
  from typing import List, Optional, Tuple
  import numpy
  import torch
  from iopath.common.file_io import PathManager
  from pytorch3d.io.utils import _check_faces_indices, _make_tensor, _open_file, _read_image, PathOrStr
  from pytorch3d.renderer import TexturesUV, TexturesVertex
  from pytorch3d.structures import Meshes, Pointclouds
  from .pluggable_formats import endswith, MeshFormatInterpreter, PointcloudFormatInterpreter
label_desc: Use image node_id 4 for calling a global function with example usage: _parse_heterogeneous_property_ascii(datum, line_iter, property) without return types