'Internal implementation of ``__str__``.
This is separated out for ease of use by subclasses that wish to
override the default ``__str__`` while keeping the same basic
formatting.'

def _format_str(self, keywords=[]):

    default_keywords = [(u'Model', self.__class__.__name__), (u'Name', self.name), (u'Inputs', self.inputs), (u'Outputs', self.outputs), (u'Model    set    size', len(self))]
    parts = [u'{0}:    {1}'.format(keyword, value) for (keyword, value) in (default_keywords + keywords) if (value is not None)]
    parts.append(u'Parameters:')
    if (len(self) == 1):
        columns = [[getattr(self, name).value] for name in self.param_names]
    else:
        columns = [getattr(self, name).value for name in self.param_names]
    if columns:
        param_table = Table(columns, names=self.param_names)
        for name in self.param_names:
            param_table[name].unit = getattr(self, name).unit
        parts.append(indent(str(param_table), width=4))
    return u'\n'.join(parts)
