text: import re
  from docscrape import NumpyDocString, FunctionDoc, ClassDoc
  
  class SphinxDocString(NumpyDocString):
      # string conversion routines
      def _str_header(self, name, symbol='`'):
          return ['**' + name + '**:', '']
  
      def _str_field_list(self, name):
          return [':' + name + ':']
  
      def _str_indent(self, doc, indent=4):
          out = []
          for line in doc:
              out += [' '*indent + line]
          return out
  
      def _str_signature(self):
          return ['']
          if self['Signature']:
              return ['``%s``' % self['Signature']] + ['']
          else:
              return ['']
  
      def _str_summary(self):
          return self['Summary'] + ['']
  
      def _str_extended_summary(self):
          return self['Extended Summary'] + ['']
  
      def _str_param_list(self, name):
          out = []
          if self[name]:
              out += self._str_field_list(name)
              out += ['']
              for param,param_type,desc in self[name]:
                  out += self._str_indent(['**%s** : %s' % (param, param_type)])
                  out += ['']
                  out += self._str_indent(desc,8)
                  out += ['']
          return out
  
      def _str_section(self, name):
          out = []
          if self[name]:
              out += self._str_header(name)
              out += ['']
              content = self._str_indent(self[name])
              out += content
              out += ['']
          return out
  
      def _str_see_also(self, func_role):
          out = []
          if self['See Also']:
              see_also = super(SphinxDocString, self)._str_see_also(func_role)
              out = ['.. seealso::', '']
              out += self._str_indent(see_also[2:])
          return out
  
      def _str_index(self):
          idx = self['index']
          out = []
          if len(idx) == 0:
              return out
  
          out += ['.. index:: %s' % idx.get('default','')]
          for section, references in idx.iteritems():
              if section == 'default':
                  continue
              elif section == 'refguide':
                  out += ['   single: %s' % (', '.join(references))]
              else:
                  out += ['   %s: %s' % (section, ','.join(references))]
          return out
  
      def _str_references(self):
          out = []
          if self['References']:
              out += self._str_header('References')
              if isinstance(self['References'], str):
                  self['References'] = [self['References']]
              out.extend(self['References'])
              out += ['']
          return out
  
      def __str__(self, indent=0, func_role="func"):
          out = []
          out += self._str_signature()
          out += self._str_index() + ['']
          out += self._str_summary()
          out += self._str_extended_summary()
          for param_list in ('Parameters', 'Attributes', 'Methods',
                             'Returns','Raises'):
              out += self._str_param_list(param_list)
          out += self._str_see_also("obj")
          out += self._str_section('Notes')
          out += self._str_references()
          out += self._str_section('Examples')
          out = self._str_indent(out,indent)
          return '\n'.join(out)
  
  class SphinxFunctionDoc(SphinxDocString, FunctionDoc):
      pass
  
  class SphinxClassDoc(SphinxDocString, ClassDoc):
      pass
  