class_docstr: A loopable object can be used with ForEach.
  
  with ForEach(loopable) as handle:
    ...
  
  A `handle` object would be generated by calling the `loop_var_factory` with
  the corresponding `ForEachContext`. Return value of the `loop_var_factory`
  would be passed as an `handle`.
class_docstr_tok: ["A","loopable","object","can","be","used","with","ForEach",".","with","ForEach","(","loopable",")","as","handle",":","...","A","`","handle","`","object","would","be","generated","by","calling","the","`","loop_var_factory","`","with","the","corresponding","`","ForEachContext","`",".","Return","value","of","the","`","loop_var_factory","`","would","be","passed","as","an","`","handle","`","."]
code: def __getitem__(self, *unused_args):
      raise RuntimeError(
          "Cannot use loopable value directly. Please use ForEach to wrap it."
      )
  
file_path: tfx/tfx/dsl/control_flow/for_each_internal.py
imports: from typing import Any, Sequence, Callable, Dict, TypeVar, Generic
  import attr
  from tfx.dsl.context_managers import dsl_context
  from tfx.types import channel
label_desc: Use image node_id 3 for calling the Loopable obj's underlying member method code with example usage: obj.__getitem__() without return types