class_docstr: Base class for all processors 
class_docstr_tok: ["Base","class","for","all","processors"]
code: def __init__(self, config, pipeline, device):
      # overall config for the processor
      self._config = config
      # pipeline building this processor (presently processors are only meant to exist in one pipeline)
      self._pipeline = pipeline
      self._set_up_variants(config, device)
      # run set up process
      # set up what annotations are required based on config
      if not self._set_up_variant_requires():
          self._set_up_requires()
      # set up what annotations are provided based on config
      self._set_up_provides()
      # given pipeline constructing this processor, check if requirements are met, throw exception if not
      self._check_requirements()
  
      if hasattr(self, "_variant") and self._variant.OVERRIDE:
          self.process = self._variant.process
  
imports: from abc import ABC, abstractmethod
  from stanza.models.common.doc import Document
  from stanza.pipeline.registry import NAME_TO_PROCESSOR_CLASS, PIPELINE_NAMES, PROCESSOR_VARIANTS
label_desc: Use image node_id 1 to create a new Processor object from inherited base classes: ABC with example: obj = Processor(config, pipeline, device)