code: def get_string(self):
      
      ostr = ''
      ostr += 'BaseError for ['+self._type+'] base: '+self.get_base()+"\n"
      if self._observable.get_error_probability() > 0:
        ostr += '  Homopolymer set:'+"\n"
        ostr += '    '+str(self.get_homopolymer())+"\n"
        ostr += '  Observable:'+"\n"
        ostr += '    type is: '+str(self.get_observable_type())+"\n"
        ostr += '    P(error): '+str(self._observable.get_error_probability())+"\n"
        ostr += '    Elength:  '+str(self._observable.get_attributable_length())+"\n"
      before = self._unobservable.get_before_type()
      after = self._unobservable.get_after_type()
      if before or after:
        ostr += '  Unobservable '
        if self._type == 'query': ostr += 'deletion:'+"\n"
        else: ostr += 'insertion:'+"\n"
        ostr += '    P(error): '+str(self._unobservable.get_error_probability())+"\n"
        ostr += '    Elength:  '+str(self._unobservable.get_attributable_length())+"\n"
        if before:
          ostr += '    before: '+"\n"
          ostr += '      P(error): '+str(self._unobservable.get_before_probability())+"\n"
          ostr += '      '+str(before)+"\n"
        if after:
          ostr += '    after:'+"\n"
          ostr += '      P(error): '+str(self._unobservable.get_after_probability())+"\n"
          ostr += '      '+str(after)+"\n"
      return ostr
docs: Get a string representation of this single base error.
  
      :returns: report
      :rtype: string