def find_all_matching_parsers(self, strict: bool, desired_type: Type[Any] = JOKER, required_ext: str = JOKER)-> Tuple[Tuple[List[Parser], List[Parser], List[Parser]],<EOL>List[Parser], List[Parser], List[Parser]]:
<EOL>desired_type = get_validated_type(desired_type, '<STR_LIT>', enforce_not_joker=False)<EOL>matching, no_type_match_but_ext_match, no_ext_match_but_type_match, no_match =super(ParserRegistryWithConverters, self).find_all_matching_parsers(strict=self.is_strict,<EOL>desired_type=desired_type,<EOL>required_ext=required_ext)<EOL>matching_p_generic, matching_p_approx, matching_p_exact = matching<EOL>if desired_type is JOKER:<EOL><INDENT>parsers_to_complete_with_converters = no_type_match_but_ext_match + matching_p_generic + matching_p_approx+ matching_p_exact<EOL><DEDENT>else:<EOL><INDENT>parsers_to_complete_with_converters = no_type_match_but_ext_match + matching_p_generic + matching_p_approx<EOL><DEDENT>matching_c_generic_to_type, matching_c_approx_to_type, matching_c_exact_to_type =self.get_all_conversion_chains_to_type(to_type=desired_type)<EOL>all_matching_converters = matching_c_generic_to_type + matching_c_approx_to_type + matching_c_exact_to_type<EOL>matching_p_generic_with_approx_chain, matching_p_approx_with_approx_chain, matching_p_exact_with_approx_chain= [], [], []<EOL>for parser in reversed(parsers_to_complete_with_converters):<EOL><INDENT>for typ in parser.supported_types:<EOL><INDENT>match_results = self._complete_parsers_with_converters(parser, typ, desired_type,<EOL>matching_c_generic_to_type,<EOL>matching_c_approx_to_type,<EOL>matching_c_exact_to_type)<EOL>matching_p_generic = match_results[<NUM_LIT:1>] + matching_p_generic<EOL>matching_p_approx = match_results[<NUM_LIT:3>] + matching_p_approx<EOL>matching_p_exact = match_results[<NUM_LIT:5>] + matching_p_exact<EOL>matching_p_generic_with_approx_chain = match_results[<NUM_LIT:0>] + matching_p_generic_with_approx_chain<EOL>matching_p_approx_with_approx_chain = match_results[<NUM_LIT:2>] + matching_p_approx_with_approx_chain<EOL>matching_p_exact_with_approx_chain = match_results[<NUM_LIT:4>] + matching_p_exact_with_approx_chain<EOL><DEDENT><DEDENT>matching_p_generic = matching_p_generic_with_approx_chain + matching_p_generic<EOL>matching_p_approx = matching_p_approx_with_approx_chain + matching_p_approx<EOL>matching_p_exact = matching_p_exact_with_approx_chain + matching_p_exact<EOL>for parser in reversed(no_match):<EOL><INDENT>for typ in parser.supported_types:<EOL><INDENT>for converter in reversed(all_matching_converters):<EOL><INDENT>if converter.is_able_to_convert(self.is_strict, from_type=typ, to_type=desired_type):<EOL><INDENT>if ParsingChain.are_worth_chaining(parser, typ, converter):<EOL><INDENT>no_ext_match_but_type_match.insert(<NUM_LIT:0>, ParsingChain(parser, converter, strict=self.is_strict,<EOL>base_parser_chosen_dest_type=typ))<EOL><DEDENT><DEDENT><DEDENT><DEDENT><DEDENT>matching_p_generic = sorted(matching_p_generic, key=len, reverse=True)<EOL>matching_p_approx = sorted(matching_p_approx, key=len, reverse=True)<EOL>matching_p_exact = sorted(matching_p_exact, key=len, reverse=True)<EOL>return (matching_p_generic, matching_p_approx, matching_p_exact), no_type_match_but_ext_match,no_ext_match_but_type_match, no_match<EOL>
Overrides the parent method to find parsers appropriate to a given extension and type.
This leverages both the parser registry and the converter registry to propose parsing chains in a relevant order

:param strict:
:param desired_type: the type of object to match.
:param required_ext: the required extension.
:return: match=(matching_parsers_generic, matching_parsers_approx, matching_parsers_exact),
         no_type_match_but_ext_match, no_ext_match_but_type_match, no_match