def METHOD_NAME(self, input_string, fix_notes=None, original_error=None):
    if not fix_notes:
        fix_notes = set()
    # with mock.patch.object(re, 'match', overridden_match):
    try:
        # res = super(Plyara, self).parse_string(input_string) # weird failures, couldn't debug. possibly due to internal state
        # re-instanciating playra to avoid internal state errors
        res = _MultilinePlyara().parse_string(input_string)
        if fix_notes:
            for r in res:
                r['permissive_plyara_fixed'] = True
                r['permissive_plyara_comment'] = '. '.join(fix_notes)
        return res
    except ParseError as e:
        if not original_error:
            original_error = e
        str_error = str(e)
        fixed = input_string
        if str_error.startswith('Illegal character') and any(elem in str_error for elem in '”“″'):
            fixed = _fix_quotes(input_string)
            fix_notes.add('Wrong quotes characters')
        elif str_error.startswith('Unknown text Rule'):
            fixed = _fix_capital(input_string)
            fix_notes.add('Rule => rule')
        elif str_error.startswith('Illegal character'):
            fixed = _fix_illegal_chars(input_string)
            fix_notes.add('Illegal characters')
        elif str_error.startswith('Unknown text { for token of type LBRACE') \
            and input_string.lstrip().startswith \
            and input_string.rstrip().endswith('}'):
            fixed = _fix_noname(input_string)
            fix_notes.add('Missing rule name')
        elif re.match(r'Unknown text\s?_\s?for token of type ID', str_error):
            fixed = _fix_spaced_underscores(input_string)
            fix_notes.add("' _ ' => '_'")
        else:
            fixed = _fix_magic(input_string)
            fix_notes.add('Magic fix (highly unreliable)')
        if fixed != input_string:
            return self.METHOD_NAME(fixed, fix_notes, original_error)
        else:
            raise original_error
            # best_error = 'BEST GUESS ERROR: {}\n'.format(str(e))
            # best_guess = 'BEST GUESS: \n{}'.format(input_string)
            # raise ParseError(best_error+best_guess, None, None) from e