code: def _derive(cls, name, info, otherbases, recurse=False):
      # collect the 3 set of infos
      # info = OrderedDict(info)
      baseinfo = cls._getpairs().copy()
      obasesinfo = OrderedDict()
      for obase in otherbases:
          if isinstance(obase, (tuple, dict)):
              obasesinfo.update(obase)
          else:
              obasesinfo.update(obase._getpairs())
  
      # update the info of this class (base) with that from the other bases
      baseinfo.update(obasesinfo)
  
      # The info of the new class is a copy of the full base info
      # plus and update from parameter
      clsinfo = baseinfo.copy()
      clsinfo.update(info)
  
      # The new items to update/set are those from the otherbase plus the new
      info2add = obasesinfo.copy()
      info2add.update(info)
  
      clsmodule = sys.modules[cls.__module__]
      newclsname = str(
          cls.__name__ + "_" + name
      )  # str - Python 2/3 compat
  
      # This loop makes sure that if the name has already been defined, a new
      # unique name is found. A collision example is in the plotlines names
      # definitions of bt.indicators.MACD and bt.talib.MACD. Both end up
      # definining a MACD_pl_macd and this makes it impossible for the pickle
      # module to send results over a multiprocessing channel
      namecounter = 1
      while hasattr(clsmodule, newclsname):
          newclsname += str(namecounter)
          namecounter += 1
  
      newcls = type(newclsname, (cls,), {})
      setattr(clsmodule, newclsname, newcls)
  
      setattr(
          newcls,
          "_getpairsbase",
          classmethod(lambda cls: baseinfo.copy()),
      )
      setattr(
          newcls, "_getpairs", classmethod(lambda cls: clsinfo.copy())
      )
      setattr(newcls, "_getrecurse", classmethod(lambda cls: recurse))
  
      for infoname, infoval in info2add.items():
          if recurse:
              recursecls = getattr(newcls, infoname, AutoInfoClass)
              infoval = recursecls._derive(
                  name + "_" + infoname, infoval, []
              )
  
          setattr(newcls, infoname, infoval)
  
      return newcls
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  from collections import OrderedDict
  import itertools
  import sys
  import backtrader
  from .utils.py3 import zip, string_types, with_metaclass
label_desc: Use image node_id 1 for calling the AutoInfoClass obj's underlying member method code with example usage: obj._derive(cls, name, info, otherbases, recurse) and returns: newcls