docs: def inheritdocstring(name, bases, attrs):
      """
      Use as metaclass to inherit class and method docstrings from parent.
      Adapted from http://stackoverflow.com/questions/13937500/inherit-a-parent-class-docstring-as-doc-attribute
      Use this on classes defined in solver-specific interfaces to inherit docstrings from the high-level interface.
      """
      if '__doc__' not in attrs or not attrs["__doc__"]:
          # create a temporary 'parent' to (greatly) simplify the MRO search
          temp = type('temporaryclass', bases, {})
          for cls in inspect.getmro(temp):
              if cls.__doc__ is not None:
                  attrs['__doc__'] = cls.__doc__
                  break
  
      for attr_name, attr in attrs.items():
          if not attr.__doc__:
              for cls in inspect.getmro(temp):
                  try:
                      if getattr(cls, attr_name).__doc__ is not None:
                          attr.__doc__ = getattr(cls, attr_name).__doc__
                          break
                  except (AttributeError, TypeError):
                      continue
  
      return type(name, bases, attrs)