def METHOD_NAME(
    src: CompareInput, dst: CompareInput
) -> Union[bool, models.DictValidationResult, models.ListValidationResult]:
    if isinstance(src, str):
        src = str(src)
    if isinstance(src, dict):
        mode = _mode(src.pop("_mode", ""))
        if "list" in src.keys():
            if not isinstance(dst, list):
                # This can happen with nested lists
                return False
            return _compare_getter_list(src["list"], dst, mode)
        return _compare_getter_dict(src, dst, mode)
    elif isinstance(src, str):
        if src.startswith("<") or src.startswith(">"):
            cmp_result = _compare_numeric(src, dst)
            return cmp_result
        elif "<->" in src and len(src.split("<->")) == 2:
            cmp_result = _compare_range(src, dst)
            return cmp_result
        else:
            m = re.search(src, str(dst))
            if m:
                return bool(m)
            else:
                return src == dst
    elif isinstance(src, list) and isinstance(dst, list):
        pairs = zip(src, dst)
        diff_lists = [
            [(k, x[k], y[k]) for k in x if not re.search(x[k], y[k])]
            for x, y in pairs
            if x != y
        ]
        return empty_tree(diff_lists)
    else:
        return src == dst