def __init__()

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


    def __init__(self, items: Set[ImageItem]) -> None:
        self._item_reqs_provs = {}
        self._path_item_reqs_provs = PathItemReqsProvs()

        for item in items:
            # pyre-fixme[16]: `ImageItem` has no attribute `requires`.
            for req in item.requires():
                if isinstance(req, RequirePath):
                    self._path_item_reqs_provs.add_requirement(req, item)
                    continue
                self._get_item_reqs_provs(req).add_item_req(req, item)

            # pyre-fixme[16]: `ImageItem` has no attribute `provides`.
            for prov in item.provides():
                if isinstance(prov, ProvidesPath):
                    self._path_item_reqs_provs.add_provider(prov, item)
                    continue
                self._get_item_reqs_provs(prov.req).add_item_prov(prov, item)

        # Validate that all requirements are satisfied.
        self._path_item_reqs_provs.validate()
        for irps in self._item_reqs_provs.values():
            for item_req in irps.unfulfilled_item_reqs():
                raise UserError(
                    f"{irps.item_provs} does not provide {item_req}"
                )