def assertrepr_compare(config, op, left, right):
width = <NUM_LIT> - <NUM_LIT:15> - len(op) - <NUM_LIT:2>  <EOL>left_repr = saferepr(left, maxsize=int(width // <NUM_LIT:2>))<EOL>right_repr = saferepr(right, maxsize=width - len(left_repr))<EOL>summary = u"<STR_LIT>" % (ecu(left_repr), op, ecu(right_repr))<EOL>verbose = config.getoption("<STR_LIT>")<EOL>explanation = None<EOL>try:<EOL><INDENT>if op == "<STR_LIT>":<EOL><INDENT>if istext(left) and istext(right):<EOL><INDENT>explanation = _diff_text(left, right, verbose)<EOL><DEDENT>else:<EOL><INDENT>if issequence(left) and issequence(right):<EOL><INDENT>explanation = _compare_eq_sequence(left, right, verbose)<EOL><DEDENT>elif isset(left) and isset(right):<EOL><INDENT>explanation = _compare_eq_set(left, right, verbose)<EOL><DEDENT>elif isdict(left) and isdict(right):<EOL><INDENT>explanation = _compare_eq_dict(left, right, verbose)<EOL><DEDENT>elif type(left) == type(right) and (isdatacls(left) or isattrs(left)):<EOL><INDENT>type_fn = (isdatacls, isattrs)<EOL>explanation = _compare_eq_cls(left, right, verbose, type_fn)<EOL><DEDENT>elif verbose > <NUM_LIT:0>:<EOL><INDENT>explanation = _compare_eq_verbose(left, right)<EOL><DEDENT>if isiterable(left) and isiterable(right):<EOL><INDENT>expl = _compare_eq_iterable(left, right, verbose)<EOL>if explanation is not None:<EOL><INDENT>explanation.extend(expl)<EOL><DEDENT>else:<EOL><INDENT>explanation = expl<EOL><DEDENT><DEDENT><DEDENT><DEDENT>elif op == "<STR_LIT>":<EOL><INDENT>if istext(left) and istext(right):<EOL><INDENT>explanation = _notin_text(left, right, verbose)<EOL><DEDENT><DEDENT><DEDENT>except outcomes.Exit:<EOL><INDENT>raise<EOL><DEDENT>except Exception:<EOL><INDENT>explanation = [<EOL>u"<STR_LIT>"<EOL>u"<STR_LIT>",<EOL>six.text_type(_pytest._code.ExceptionInfo.from_current()),<EOL>]<EOL><DEDENT>if not explanation:<EOL><INDENT>return None<EOL><DEDENT>return [summary] + explanation<EOL>
Return specialised explanations for some operators/operands