Returns a mapping from each `MultiMatchNamedBasicType` to all the `NamedBasicTypes` that it
        matches.

def get_multi_match_mapping(self) -> Dict[Type, List[Type]]:
        """
        Returns a mapping from each `MultiMatchNamedBasicType` to all the `NamedBasicTypes` that it
        matches.
        """
        if self._multi_match_mapping is None:
            self._multi_match_mapping = {}
            basic_types = self.get_basic_types()
            for basic_type in basic_types:
                if isinstance(basic_type, types.MultiMatchNamedBasicType):
                    matched_types: List[str] = []
                    # We need to check if each type in the `types_to_match` field for the given
                    # MultiMatchNamedBasic type is itself in the set of basic types allowed in this
                    # world, and add it to the mapping only if it is. Some basic types that the
                    # multi match type can match with may be diallowed in the world due to the
                    # instance-specific context.
                    for type_ in basic_type.types_to_match:
                        if type_ in basic_types:
                            matched_types.append(type_)
                    self._multi_match_mapping[basic_type] = matched_types
        return self._multi_match_mapping