code: def run(self) -> None:
      print(f"Running DocumentProcessor on {self.channels}")
      if len(self.channels) == 0:
          raise ValueError("No channels selected.")
  
      for channel in self.channels:
          print(f"Running Channel: {self.channels}")
          channel.run()
  
file_path: SynapseML/tools/docgen/docgen/core.py
imports: import multiprocessing
  from abc import ABC, abstractmethod
  from typing import List
label_desc: Use image node_id 2 for calling the DocumentProcessor obj's underlying member method code with example usage: obj.run() without return types