def validate()

in antlir/compiler/dep_graph.py [0:0]


    def validate(self) -> None:
        for path, irps in self.path_to_item_reqs_provs.items():
            irs = irps.unfulfilled_item_reqs()
            if not irs:
                continue

            for ir in irs:
                if isinstance(ir.requires, RequireSymlink):
                    raise UserError(
                        f"{path}: {irps.item_provs} does not provide {ir}; "
                        "RequireSymlink must be explicitly fulfilled"
                    )

            symlink_item_provs = self._realpath_item_provs(path)
            if symlink_item_provs:
                # make sure a symlink prov fulfills the requirement
                if all(
                    any(
                        isinstance(ir.requires, type(ip.provides.req))
                        for ip in symlink_item_provs
                    )
                    for ir in irs
                ):
                    # Add ItemProvs that provide the symlink path so that
                    # DependencyGraph knows those ImageItems are prequisites.
                    irps.item_provs.update(symlink_item_provs)
                    continue

            raise UserError(f"{path}: {irps.item_provs} does not provide {irs}")