class_docstr: Metaclass of the Processor class, used mainly for ensuring
  that processor id's are wellformed and unique
class_docstr_tok: ["Metaclass","of","the","Processor","class",",","used","mainly","for","ensuring","that","processor","id","'s","are","wellformed","and","unique"]
code: def __new__(cls, name, bases, d):
      new_class = super(MetaProcessor, cls).__new__(cls, name, bases, d)
      if new_class in implementations(IProcessor):
          id = str(new_class.id())
          if id in _processors:
              # Doctest test can duplicate a processor
              # This can be identify by the conditon "module == '__main__'"
              new_path = os.path.realpath(inspect.getfile(new_class))
              id_path = os.path.realpath(
                  inspect.getfile(_processors[id])
              )
              if new_class.__module__ == "__main__":
                  new_class = _processors[id]
              elif _processors[id].__module__ == "__main__":
                  pass
              elif new_path == id_path:
                  new_class = _processors[id]
              else:
                  raise ApiError(
                      "%s at %s and %s at %s have the same id: '%s'"
                      % (
                          new_class.__name__,
                          new_path,
                          _processors[id].__name__,
                          id_path,
                          id,
                      )
                  )
          if not MetaProcessor.valid_id.match(id):
              raise ApiError(
                  "%s has a malformed id: '%s'"
                  % (new_class.__name__, id)
              )
  
          _processors[id] = new_class
  
      return new_class
  
imports: from .component import Component, MetaComponent, abstract
  from .component import implements, implementations, interfacedoc
  from .api import IProcessor
  from .exceptions import Error, PIDError, ApiError
  from .tools.parameters import HasParam
  import re
  import datetime
  import numpy
  import uuid
  import networkx
  import inspect
  import os
  import csv
  import sys
label_desc: Use image node_id 1 for calling the MetaProcessor obj's underlying member method code with example usage: obj.__new__(cls, name, bases, d) and returns: new_class