Utility method to return, for a given file extension, all known ways to parse a file with this extension,
        organized by target object type.

        :param ext:
        :param strict_type_matching:
        :return:

def get_capabilities_for_ext(self, ext, strict_type_matching: bool = False) -> Dict[Type, Dict[str, Parser]]:
        """
        Utility method to return, for a given file extension, all known ways to parse a file with this extension,
        organized by target object type.

        :param ext:
        :param strict_type_matching:
        :return:
        """
        r = dict()
        # List all types that can be parsed from this extension.
        for typ in self.get_all_supported_types_for_ext(ext):
            # Use the query to fill
            matching = self.find_all_matching_parsers(strict_type_matching, desired_type=typ, required_ext=ext)[0]
            # matching_list = matching[0] + matching[1] + matching[2]
            # insert_element_to_dict_of_dicts_of_list(res, ext, typ, list(reversed(matching_list)))
            r[typ] = dict()
            exact = list(reversed(matching[2]))
            if len(exact) > 0:
                r[typ]['1_exact_match'] = exact

            approx = list(reversed(matching[1]))
            if len(approx) > 0:
                r[typ]['2_approx_match'] = approx

            generic = list(reversed(matching[0]))
            if len(generic) > 0:
                r[typ]['3_generic'] = generic

            # insert_element_to_dict_of_dicts(res, ext, typ, matching_dict)
        return r