<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _collect_metrics(repo, path, recursive, typ, xpath, branch):
 """Gather all the metric outputs. Args: path (str):
 Path to a metric file or a directory. recursive (bool):
 If path is a directory, do a recursive search for metrics on the given path. typ (str):
 The type of metric to search for, could be one of the following (raw|json|tsv|htsv|csv|hcsv). xpath (str):
 Path to search for. branch (str):
 Branch to look up for metrics. Returns: list(tuple):
 (output, typ, xpath) - output: - typ: - xpath: """

    outs = [out for stage in repo.stages() for out in stage.outs]

    if path:
        try:
            outs = repo.find_outs_by_path(path, outs=outs, recursive=recursive)
        except OutputNotFoundError:
            logger.debug(
                "stage file not for found for '{}' in branch '{}'".format(
                    path, branch
                )
            )
            return []

    res = []
    for o in outs:
        if not o.metric:
            continue

        if not typ and isinstance(o.metric, dict):
            t = o.metric.get(o.PARAM_METRIC_TYPE, typ)
            x = o.metric.get(o.PARAM_METRIC_XPATH, xpath)
        else:
            t = typ
            x = xpath

        res.append((o, t, x))

    return res