class_docstr: A placeholder that will ultimately be translated to a PCollection.
  
  Attributes:
    parent_operation: The `OperationNode` that produces this value.
    value_index: The index of this value in the outputs of `parent_operation`.
code: def __post_init__(self):
      num_outputs = self.parent_operation.operation_def.num_outputs
      if not (0 <= self.value_index and self.value_index < num_outputs):
          raise ValueError(
              "value_index was {} but parent_operation had {} outputs".format(
                  self.value_index, num_outputs
              )
          )
  
imports: import abc
  import collections
  import dataclasses
  from typing import Any, Collection, Dict, List, Optional, Tuple
  import pydot
label_desc: Use image node_id 1 for calling the ValueNode obj's underlying member method code with example usage: obj.__post_init__() without return types