<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import apt_pkg

apt_pkg.init()


def render(group: list[apt_pkg.Dependency]) -&gt; str:
    def render1(dep: apt_pkg.Dependency) -&gt; str:
        if dep.comp_type_deb:
            return f"{dep.target_pkg.name} ({dep.comp_type_deb} {dep.target_ver})"
        return dep.target_pkg.name

    return f"{group[0].dep_type_untranslated}: " + " | ".join(
        render1(dep) for dep in group
    )


def check_overlap(v: apt_pkg.Version) -&gt; None:
    deps: list[tuple[list[apt_pkg.Version], list[apt_pkg.Dependency]]] = []
    for kind_name, kind in v.depends_list.items():
        if kind_name in ["Conflicts", "Breaks", "Replaces", "Suggests", "Enhances"]:
            continue
        for group in kind:
            if len(group) != 1:
                continue
            targets: list[apt_pkg.Version] = []
            for dep in group:
                targets.extend(dep.all_targets())
            if targets:
                deps.append((targets, group))

    for i in range(len(deps)):
        for j in range(i):
            if deps[i][1][0].target_pkg.name.split(":")[0] != deps[j][1][0].target_pkg.name.split(":")[0]:
                continue
            lhs = set(v.id for v in deps[i][0])
            rhs = set(v.id for v in deps[j][0])
            overlap = lhs &amp; rhs
            if overlap and lhs != rhs:
                print(
                    v.parent_pkg.name,
                    render(deps[i][1]),
                    "overlaps",
                    render(deps[j][1]),
                )
                print(
                    " -  solutions:",
                    [
                        v.parent_pkg.name + "=" + v.ver_str
                        for v in deps[i][0]
                        if v.id in overlap
                    ],
                )
                print(
                    " -  eliminated:",
                    [
                        v.parent_pkg.name + "=" + v.ver_str
                        for v in deps[i][0]
                        if v.id not in overlap
                    ],
                    [
                        v.parent_pkg.name + "=" + v.ver_str
                        for v in deps[j][0]
                        if v.id not in overlap
                    ],
                )
                print()


cache = apt_pkg.Cache(None)

for pkg in sorted(cache.packages, key=lambda p: p.name):
    if pkg.version_list:
        check_overlap(pkg.version_list[0])
</pre></body></html>